From 6c00b815d19371afcc98c6af5d798b8f977dda8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 21:58:51 +0000 Subject: [PATCH 001/138] chore(deps-dev): bump @types/node from 20.12.12 to 20.12.13 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.12 to 20.12.13. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0451a390..a40a5da3 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "devDependencies": { "@biomejs/biome": "1.7.3", "@types/lodash": "4.17.4", - "@types/node": "20.12.12", + "@types/node": "20.12.13", "axios": "1.7.2", "cross-env": "7.0.3", "dotenv": "16.4.5", diff --git a/yarn.lock b/yarn.lock index eb54b065..54eb613f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,12 +146,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:20.12.12": - version: 20.12.12 - resolution: "@types/node@npm:20.12.12" +"@types/node@npm:20.12.13": + version: 20.12.13 + resolution: "@types/node@npm:20.12.13" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/f374b763c744e8f16e4f38cf6e2c0eef31781ec9228c9e43a6f267880fea420fab0a238b59f10a7cb3444e49547c5e3785787e371fc242307310995b21988812 + checksum: 10c0/2ac92bb631dbddfb560eb3ba4eedbb1c688044a0130bc1ef032f5c0f20148ac7c9aa3c5aaa5a9787b6c4c6299847d754b96ee8c9def951481ba6628c46b683f5 languageName: node linkType: hard @@ -1090,7 +1090,7 @@ __metadata: dependencies: "@biomejs/biome": "npm:1.7.3" "@types/lodash": "npm:4.17.4" - "@types/node": "npm:20.12.12" + "@types/node": "npm:20.12.13" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" cosmiconfig: "npm:^9.0.0" From 067a95cec66ad096e79867f2c9a50047d345bf8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 21:22:37 +0000 Subject: [PATCH 002/138] chore(deps-dev): bump @types/node from 20.12.13 to 20.13.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.13 to 20.13.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index a40a5da3..fce8b066 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "devDependencies": { "@biomejs/biome": "1.7.3", "@types/lodash": "4.17.4", - "@types/node": "20.12.13", + "@types/node": "20.13.0", "axios": "1.7.2", "cross-env": "7.0.3", "dotenv": "16.4.5", diff --git a/yarn.lock b/yarn.lock index 54eb613f..8dd57a20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,12 +146,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:20.12.13": - version: 20.12.13 - resolution: "@types/node@npm:20.12.13" +"@types/node@npm:20.13.0": + version: 20.13.0 + resolution: "@types/node@npm:20.13.0" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/2ac92bb631dbddfb560eb3ba4eedbb1c688044a0130bc1ef032f5c0f20148ac7c9aa3c5aaa5a9787b6c4c6299847d754b96ee8c9def951481ba6628c46b683f5 + checksum: 10c0/4fb1ab41d622bbf3434da138bd0f23052e5df3bc59852ea1228cdfe185fd9d66ea71171a68a3106452c883808be7eaa7bc4cd87f534708754d49849e817aa566 languageName: node linkType: hard @@ -1090,7 +1090,7 @@ __metadata: dependencies: "@biomejs/biome": "npm:1.7.3" "@types/lodash": "npm:4.17.4" - "@types/node": "npm:20.12.13" + "@types/node": "npm:20.13.0" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" cosmiconfig: "npm:^9.0.0" From 1c1482afd7b131388a30d1cedf2833582fa235db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:43:22 +0000 Subject: [PATCH 003/138] chore(deps): bump prettier from 3.2.5 to 3.3.0 Bumps [prettier](https://github.com/prettier/prettier) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.2.5...3.3.0) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index fce8b066..574f7dcd 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "lodash": "^4.17.21", "nanoid": "^3.3.7", "node-emoji": "^2.1.3", - "prettier": "3.2.5", + "prettier": "3.3.0", "swagger-schema-official": "2.0.0-bab6bed", "swagger2openapi": "^7.0.8", "typescript": "5.4.5" diff --git a/yarn.lock b/yarn.lock index 8dd57a20..dba17231 100644 --- a/yarn.lock +++ b/yarn.lock @@ -856,12 +856,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.2.5": - version: 3.2.5 - resolution: "prettier@npm:3.2.5" +"prettier@npm:3.3.0": + version: 3.3.0 + resolution: "prettier@npm:3.3.0" bin: prettier: bin/prettier.cjs - checksum: 10c0/ea327f37a7d46f2324a34ad35292af2ad4c4c3c3355da07313339d7e554320f66f65f91e856add8530157a733c6c4a897dc41b577056be5c24c40f739f5ee8c6 + checksum: 10c0/d033c356320aa2e468bf29c931b094ac730d2f4defd5eb2989d8589313dec901d2fc866e3788f3d161e420b142ea4ec3dda535dbe0169ef4d0026397a68ba9cf languageName: node linkType: hard @@ -1103,7 +1103,7 @@ __metadata: lodash: "npm:^4.17.21" nanoid: "npm:^3.3.7" node-emoji: "npm:^2.1.3" - prettier: "npm:3.2.5" + prettier: "npm:3.3.0" shx: "npm:0.3.4" swagger-schema-official: "npm:2.0.0-bab6bed" swagger2openapi: "npm:^7.0.8" From 0507aa60d28633fc6db2e9c47707e2f2230380d8 Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Sun, 2 Jun 2024 07:02:29 +0900 Subject: [PATCH 004/138] Prepare 13.0.4 Signed-off-by: Sora Morimoto --- .github/workflows/main.yml | 32 +++++++++++++++++++++++-- .yarnrc.yml | 6 +++++ package.json | 48 +++++++++++++++----------------------- yarn.lock | 36 ++++++++++++++-------------- 4 files changed, 73 insertions(+), 49 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 01677f14..6be744a0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,8 +1,13 @@ name: Builds, tests & co on: - - push - - pull_request + push: + pull_request: + release: + types: + - published + +permissions: read-all jobs: build-and-test: @@ -26,3 +31,26 @@ jobs: - name: Run the tests run: yarn test-all + + publish: + if: github.event_name == 'release' + + needs: + - build-and-test + + runs-on: ubuntu-latest + + steps: + - name: Checkout tree + uses: actions/checkout@v4 + + - name: Set-up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + check-latest: true + + - name: Publish + run: yarn npm publish --tolerate-republish + env: + NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} diff --git a/.yarnrc.yml b/.yarnrc.yml index 6a3d486a..cc958d85 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,5 +1,11 @@ +defaultSemverRangePrefix: "" + nodeLinker: node-modules +npmRegistries: + //registry.npmjs.org: + npmAuthToken: "${NPM_AUTH_TOKEN:''}" + preferInteractive: true yarnPath: .yarn/releases/yarn-4.2.2.cjs diff --git a/package.json b/package.json index 574f7dcd..560ff0ce 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,27 @@ { "name": "swagger-typescript-api", - "version": "13.0.3", - "description": "Generate typescript/javascript api from swagger schema", - "keywords": [ - "openapi", - "swagger", - "typescript", - "api", - "javascript", - "rest", - "codegen", - "generation", - "http" - ], + "version": "13.0.4", + "description": "Generate TypeScript/JavaScript API from Swagger schema", "homepage": "https://github.com/acacode/swagger-typescript-api", - "bugs": { - "url": "https://github.com/acacode/swagger-typescript-api/issues" - }, - "repository": { - "type": "git", - "url": "git://github.com/acacode/swagger-typescript-api" - }, + "bugs": "https://github.com/acacode/swagger-typescript-api/issues", + "repository": "github:acacode/swagger-typescript-api", "license": "MIT", - "author": "acacode", - "main": "src/index.js", - "typings": "./index.d.ts", + "author": "Sergey Volkov ", + "contributors": [ + "Sora Morimoto " + ], + "main": "./src/index.js", + "types": "./index.d.ts", "bin": { - "sta": "index.js", - "swagger-typescript-api": "index.js" + "sta": "./index.js", + "swagger-typescript-api": "./index.js" }, "files": [ + "cli", "src", - "index.js", - "index.d.ts", "templates", - "cli", - "LICENSE" + "index.d.ts", + "index.js" ], "scripts": { "ci": "biome ci .", @@ -129,5 +115,9 @@ "packageManager": "yarn@4.2.2", "engines": { "node": ">=18.0.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" } } diff --git a/yarn.lock b/yarn.lock index dba17231..fc33cec1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,31 +6,31 @@ __metadata: cacheKey: 10c0 "@babel/code-frame@npm:^7.0.0": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" + version: 7.24.6 + resolution: "@babel/code-frame@npm:7.24.6" dependencies: - "@babel/highlight": "npm:^7.24.2" + "@babel/highlight": "npm:^7.24.6" picocolors: "npm:^1.0.0" - checksum: 10c0/d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 + checksum: 10c0/c93c6d1763530f415218c31d07359364397f19b70026abdff766164c21ed352a931cf07f3102c5fb9e04792de319e332d68bcb1f7debef601a02197f90f9ba24 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helper-validator-identifier@npm:7.24.5" - checksum: 10c0/05f957229d89ce95a137d04e27f7d0680d84ae48b6ad830e399db0779341f7d30290f863a93351b4b3bde2166737f73a286ea42856bb07c8ddaa95600d38645c +"@babel/helper-validator-identifier@npm:^7.24.6": + version: 7.24.6 + resolution: "@babel/helper-validator-identifier@npm:7.24.6" + checksum: 10c0/d29d2e3fca66c31867a009014169b93f7bc21c8fc1dd7d0b9d85d7a4000670526ff2222d966febb75a6e12f9859a31d1e75b558984e28ecb69651314dd0a6fd1 languageName: node linkType: hard -"@babel/highlight@npm:^7.24.2": - version: 7.24.5 - resolution: "@babel/highlight@npm:7.24.5" +"@babel/highlight@npm:^7.24.6": + version: 7.24.6 + resolution: "@babel/highlight@npm:7.24.6" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.5" + "@babel/helper-validator-identifier": "npm:^7.24.6" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/e98047d3ad24608bfa596d000c861a2cc875af897427f2833b91a4e0d4cead07301a7ec15fa26093dcd61e036e2eed2db338ae54f93016fe0dc785fadc4159db + checksum: 10c0/5bbc31695e5d44e97feb267f7aaf4c52908560d184ffeb2e2e57aae058d40125592931883889413e19def3326895ddb41ff45e090fa90b459d8c294b4ffc238c languageName: node linkType: hard @@ -850,9 +850,9 @@ __metadata: linkType: hard "picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 languageName: node linkType: hard @@ -1109,8 +1109,8 @@ __metadata: swagger2openapi: "npm:^7.0.8" typescript: "npm:5.4.5" bin: - sta: index.js - swagger-typescript-api: index.js + sta: ./index.js + swagger-typescript-api: ./index.js languageName: unknown linkType: soft From b40d22bfff4d0143b0cbedc9232ae662044cd3f0 Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Sun, 2 Jun 2024 08:10:58 +0900 Subject: [PATCH 005/138] Fix `npmAuthToken` in `.yarnrc.yml` Signed-off-by: Sora Morimoto --- .yarnrc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.yarnrc.yml b/.yarnrc.yml index cc958d85..b353e243 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -4,7 +4,7 @@ nodeLinker: node-modules npmRegistries: //registry.npmjs.org: - npmAuthToken: "${NPM_AUTH_TOKEN:''}" + npmAuthToken: "${NPM_AUTH_TOKEN:-''}" preferInteractive: true From 70e0de80aa94a515b3457713bf72ae7b1261358d Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Sun, 2 Jun 2024 08:14:11 +0900 Subject: [PATCH 006/138] Prepare 13.0.5 Signed-off-by: Sora Morimoto --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 560ff0ce..f4f08991 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "swagger-typescript-api", - "version": "13.0.4", + "version": "13.0.5", "description": "Generate TypeScript/JavaScript API from Swagger schema", "homepage": "https://github.com/acacode/swagger-typescript-api", "bugs": "https://github.com/acacode/swagger-typescript-api/issues", From ffa11339860b20d056744437429e30cc15bcb6af Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Sun, 2 Jun 2024 08:43:22 +0900 Subject: [PATCH 007/138] Add @smorimoto to `.github/FUNDING.yml` Signed-off-by: Sora Morimoto --- .github/FUNDING.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 1456f8c9..b177520b 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,3 @@ -ko_fi: js2me custom: ["https://paypal.me/acacode"] +github: smorimoto +ko_fi: js2me From acc7b5f43636618278d771025f04ec9cc15fdecf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Jun 2024 23:37:31 +0000 Subject: [PATCH 008/138] chore(deps-dev): bump @types/node from 20.13.0 to 20.14.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.13.0 to 20.14.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index f4f08991..be039144 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "devDependencies": { "@biomejs/biome": "1.7.3", "@types/lodash": "4.17.4", - "@types/node": "20.13.0", + "@types/node": "20.14.0", "axios": "1.7.2", "cross-env": "7.0.3", "dotenv": "16.4.5", diff --git a/yarn.lock b/yarn.lock index fc33cec1..2dc7ec84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,12 +146,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:20.13.0": - version: 20.13.0 - resolution: "@types/node@npm:20.13.0" +"@types/node@npm:20.14.0": + version: 20.14.0 + resolution: "@types/node@npm:20.14.0" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/4fb1ab41d622bbf3434da138bd0f23052e5df3bc59852ea1228cdfe185fd9d66ea71171a68a3106452c883808be7eaa7bc4cd87f534708754d49849e817aa566 + checksum: 10c0/29ccc7592e9ca6b81d00f3a6673241d08e9042d801b10adfd9ebcbbf326208e0a0133a8d146158db18d02a68b85d9ce1fd94e6e1e5be0da263129bf6e42eb22d languageName: node linkType: hard @@ -1090,7 +1090,7 @@ __metadata: dependencies: "@biomejs/biome": "npm:1.7.3" "@types/lodash": "npm:4.17.4" - "@types/node": "npm:20.13.0" + "@types/node": "npm:20.14.0" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" cosmiconfig: "npm:^9.0.0" From 2e292ac493d52f7c4c70bb0fb680aeaafc1dcc76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 04:54:42 +0000 Subject: [PATCH 009/138] chore(deps-dev): bump @types/node from 20.14.0 to 20.14.1 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.14.0 to 20.14.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index be039144..31b206a3 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "devDependencies": { "@biomejs/biome": "1.7.3", "@types/lodash": "4.17.4", - "@types/node": "20.14.0", + "@types/node": "20.14.1", "axios": "1.7.2", "cross-env": "7.0.3", "dotenv": "16.4.5", diff --git a/yarn.lock b/yarn.lock index 2dc7ec84..b2ac64c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,12 +146,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:20.14.0": - version: 20.14.0 - resolution: "@types/node@npm:20.14.0" +"@types/node@npm:20.14.1": + version: 20.14.1 + resolution: "@types/node@npm:20.14.1" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/29ccc7592e9ca6b81d00f3a6673241d08e9042d801b10adfd9ebcbbf326208e0a0133a8d146158db18d02a68b85d9ce1fd94e6e1e5be0da263129bf6e42eb22d + checksum: 10c0/12b7879047f50cc217bbea3add7c45e542070f6e9fb2092be97542152b7022512bcb2bf848d04f77e295c4c8699acd484e79a4a4dbe9bcfa4e89dd543d530611 languageName: node linkType: hard @@ -1090,7 +1090,7 @@ __metadata: dependencies: "@biomejs/biome": "npm:1.7.3" "@types/lodash": "npm:4.17.4" - "@types/node": "npm:20.14.0" + "@types/node": "npm:20.14.1" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" cosmiconfig: "npm:^9.0.0" From abc917c995aee7bcf95e6e1e868db56b26fab5cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:14:53 +0000 Subject: [PATCH 010/138] chore(deps-dev): bump @biomejs/biome from 1.7.3 to 1.8.0 Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 1.7.3 to 1.8.0. - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/cli/v1.8.0/packages/@biomejs/biome) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 74 ++++++++++++++++++++++++++-------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 31b206a3..cdfbbde8 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "typescript": "5.4.5" }, "devDependencies": { - "@biomejs/biome": "1.7.3", + "@biomejs/biome": "1.8.0", "@types/lodash": "4.17.4", "@types/node": "20.14.1", "axios": "1.7.2", diff --git a/yarn.lock b/yarn.lock index b2ac64c6..7fd648a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,18 +34,18 @@ __metadata: languageName: node linkType: hard -"@biomejs/biome@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/biome@npm:1.7.3" +"@biomejs/biome@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/biome@npm:1.8.0" dependencies: - "@biomejs/cli-darwin-arm64": "npm:1.7.3" - "@biomejs/cli-darwin-x64": "npm:1.7.3" - "@biomejs/cli-linux-arm64": "npm:1.7.3" - "@biomejs/cli-linux-arm64-musl": "npm:1.7.3" - "@biomejs/cli-linux-x64": "npm:1.7.3" - "@biomejs/cli-linux-x64-musl": "npm:1.7.3" - "@biomejs/cli-win32-arm64": "npm:1.7.3" - "@biomejs/cli-win32-x64": "npm:1.7.3" + "@biomejs/cli-darwin-arm64": "npm:1.8.0" + "@biomejs/cli-darwin-x64": "npm:1.8.0" + "@biomejs/cli-linux-arm64": "npm:1.8.0" + "@biomejs/cli-linux-arm64-musl": "npm:1.8.0" + "@biomejs/cli-linux-x64": "npm:1.8.0" + "@biomejs/cli-linux-x64-musl": "npm:1.8.0" + "@biomejs/cli-win32-arm64": "npm:1.8.0" + "@biomejs/cli-win32-x64": "npm:1.8.0" dependenciesMeta: "@biomejs/cli-darwin-arm64": optional: true @@ -65,62 +65,62 @@ __metadata: optional: true bin: biome: bin/biome - checksum: 10c0/05c95bb4b1fbf1b252cf2124f012f69a00ff5599ecac002b7e3004bfcd927e3d7b5f4935739096b5184653ec96b44ddcc36809d059682e5378bde20c836fb111 + checksum: 10c0/0def7e1bef485cb60038d724dd3c11b9e6aaf2aa91593b76ab73f0d52ed319c56831fb5e7fa5a3618ee719b98a55198c88f2cabd8b32c7e17fac9b86f427a95b languageName: node linkType: hard -"@biomejs/cli-darwin-arm64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-darwin-arm64@npm:1.7.3" +"@biomejs/cli-darwin-arm64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-darwin-arm64@npm:1.8.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-darwin-x64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-darwin-x64@npm:1.7.3" +"@biomejs/cli-darwin-x64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-darwin-x64@npm:1.8.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@biomejs/cli-linux-arm64-musl@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-linux-arm64-musl@npm:1.7.3" +"@biomejs/cli-linux-arm64-musl@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-linux-arm64-musl@npm:1.8.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-arm64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-linux-arm64@npm:1.7.3" +"@biomejs/cli-linux-arm64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-linux-arm64@npm:1.8.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-linux-x64-musl@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-linux-x64-musl@npm:1.7.3" +"@biomejs/cli-linux-x64-musl@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-linux-x64-musl@npm:1.8.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-x64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-linux-x64@npm:1.7.3" +"@biomejs/cli-linux-x64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-linux-x64@npm:1.8.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-win32-arm64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-win32-arm64@npm:1.7.3" +"@biomejs/cli-win32-arm64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-win32-arm64@npm:1.8.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-win32-x64@npm:1.7.3": - version: 1.7.3 - resolution: "@biomejs/cli-win32-x64@npm:1.7.3" +"@biomejs/cli-win32-x64@npm:1.8.0": + version: 1.8.0 + resolution: "@biomejs/cli-win32-x64@npm:1.8.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1088,7 +1088,7 @@ __metadata: version: 0.0.0-use.local resolution: "swagger-typescript-api@workspace:." dependencies: - "@biomejs/biome": "npm:1.7.3" + "@biomejs/biome": "npm:1.8.0" "@types/lodash": "npm:4.17.4" "@types/node": "npm:20.14.1" "@types/swagger-schema-official": "npm:^2.0.25" From 3c3773b58445fe73397477038706c1e342b0d54f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 12:27:28 +0000 Subject: [PATCH 011/138] chore(deps): bump prettier from 3.3.0 to 3.3.1 Bumps [prettier](https://github.com/prettier/prettier) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.3.0...3.3.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index cdfbbde8..45ec88a9 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "lodash": "^4.17.21", "nanoid": "^3.3.7", "node-emoji": "^2.1.3", - "prettier": "3.3.0", + "prettier": "3.3.1", "swagger-schema-official": "2.0.0-bab6bed", "swagger2openapi": "^7.0.8", "typescript": "5.4.5" diff --git a/yarn.lock b/yarn.lock index 7fd648a7..1be29344 100644 --- a/yarn.lock +++ b/yarn.lock @@ -856,12 +856,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.3.0": - version: 3.3.0 - resolution: "prettier@npm:3.3.0" +"prettier@npm:3.3.1": + version: 3.3.1 + resolution: "prettier@npm:3.3.1" bin: prettier: bin/prettier.cjs - checksum: 10c0/d033c356320aa2e468bf29c931b094ac730d2f4defd5eb2989d8589313dec901d2fc866e3788f3d161e420b142ea4ec3dda535dbe0169ef4d0026397a68ba9cf + checksum: 10c0/c25a709c9f0be670dc6bcb190b622347e1dbeb6c3e7df8b0711724cb64d8647c60b839937a4df4df18e9cfb556c2b08ca9d24d9645eb5488a7fc032a2c4d5cb3 languageName: node linkType: hard @@ -1103,7 +1103,7 @@ __metadata: lodash: "npm:^4.17.21" nanoid: "npm:^3.3.7" node-emoji: "npm:^2.1.3" - prettier: "npm:3.3.0" + prettier: "npm:3.3.1" shx: "npm:0.3.4" swagger-schema-official: "npm:2.0.0-bab6bed" swagger2openapi: "npm:^7.0.8" From 79ac8a9a2cae7de2d4897ae2c3baf2dc6182720c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 12:27:46 +0000 Subject: [PATCH 012/138] chore(deps-dev): bump @types/node from 20.14.1 to 20.14.2 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.14.1 to 20.14.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index cdfbbde8..bde5f800 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "devDependencies": { "@biomejs/biome": "1.8.0", "@types/lodash": "4.17.4", - "@types/node": "20.14.1", + "@types/node": "20.14.2", "axios": "1.7.2", "cross-env": "7.0.3", "dotenv": "16.4.5", diff --git a/yarn.lock b/yarn.lock index 7fd648a7..4ed6e745 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,12 +146,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:20.14.1": - version: 20.14.1 - resolution: "@types/node@npm:20.14.1" +"@types/node@npm:20.14.2": + version: 20.14.2 + resolution: "@types/node@npm:20.14.2" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/12b7879047f50cc217bbea3add7c45e542070f6e9fb2092be97542152b7022512bcb2bf848d04f77e295c4c8699acd484e79a4a4dbe9bcfa4e89dd543d530611 + checksum: 10c0/2d86e5f2227aaa42212e82ea0affe72799111b888ff900916376450b02b09b963ca888b20d9c332d8d2b833ed4781987867a38eaa2e4863fa8439071468b0a6f languageName: node linkType: hard @@ -1090,7 +1090,7 @@ __metadata: dependencies: "@biomejs/biome": "npm:1.8.0" "@types/lodash": "npm:4.17.4" - "@types/node": "npm:20.14.1" + "@types/node": "npm:20.14.2" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" cosmiconfig: "npm:^9.0.0" From e5fb0f771492e74213f7c4d401dc4e50e11b65c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 8 Jun 2024 13:15:55 +0000 Subject: [PATCH 013/138] chore(deps-dev): bump @types/lodash from 4.17.4 to 4.17.5 Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.4 to 4.17.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash) --- updated-dependencies: - dependency-name: "@types/lodash" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8dd13da4..52ab4ff3 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ }, "devDependencies": { "@biomejs/biome": "1.8.0", - "@types/lodash": "4.17.4", + "@types/lodash": "4.17.5", "@types/node": "20.14.2", "axios": "1.7.2", "cross-env": "7.0.3", diff --git a/yarn.lock b/yarn.lock index f7ef13dc..9a98c0fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -139,10 +139,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:4.17.4": - version: 4.17.4 - resolution: "@types/lodash@npm:4.17.4" - checksum: 10c0/0124c64cb9fe7a0f78b6777955abd05ef0d97844d49118652eae45f8fa57bfb7f5a7a9bccc0b5a84c0a6dc09631042e4590cb665acb9d58dfd5e6543c75341ec +"@types/lodash@npm:4.17.5": + version: 4.17.5 + resolution: "@types/lodash@npm:4.17.5" + checksum: 10c0/55924803ed853e72261512bd3eaf2c5b16558c3817feb0a3125ef757afe46e54b86f33d1960e40b7606c0ddab91a96f47966bf5e6006b7abfd8994c13b04b19b languageName: node linkType: hard @@ -1089,7 +1089,7 @@ __metadata: resolution: "swagger-typescript-api@workspace:." dependencies: "@biomejs/biome": "npm:1.8.0" - "@types/lodash": "npm:4.17.4" + "@types/lodash": "npm:4.17.5" "@types/node": "npm:20.14.2" "@types/swagger-schema-official": "npm:^2.0.25" axios: "npm:1.7.2" From 0e54a507b4cd3530af8a4d699b29cb1c2bb8020a Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Tue, 11 Jun 2024 04:09:52 +0900 Subject: [PATCH 014/138] Update Yarn to 4.3.0 Signed-off-by: Sora Morimoto --- .../{yarn-4.2.2.cjs => yarn-4.3.0.cjs} | 610 +++++++++--------- .yarnrc.yml | 2 +- package.json | 2 +- 3 files changed, 307 insertions(+), 307 deletions(-) rename .yarn/releases/{yarn-4.2.2.cjs => yarn-4.3.0.cjs} (69%) diff --git a/.yarn/releases/yarn-4.2.2.cjs b/.yarn/releases/yarn-4.3.0.cjs similarity index 69% rename from .yarn/releases/yarn-4.2.2.cjs rename to .yarn/releases/yarn-4.3.0.cjs index ea34d01a..a1b288bf 100755 --- a/.yarn/releases/yarn-4.2.2.cjs +++ b/.yarn/releases/yarn-4.3.0.cjs @@ -1,33 +1,33 @@ #!/usr/bin/env node /* eslint-disable */ //prettier-ignore -(()=>{var $3e=Object.create;var LR=Object.defineProperty;var e_e=Object.getOwnPropertyDescriptor;var t_e=Object.getOwnPropertyNames;var r_e=Object.getPrototypeOf,n_e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),zt=(t,e)=>{for(var r in e)LR(t,r,{get:e[r],enumerable:!0})},i_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of t_e(e))!n_e.call(t,a)&&a!==r&&LR(t,a,{get:()=>e[a],enumerable:!(o=e_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?$3e(r_e(t)):{},i_e(e||!t||!t.__esModule?LR(r,"default",{value:t,enumerable:!0}):r,t));var vi={};zt(vi,{SAFE_TIME:()=>x7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>qw});var Mu,wD,qw,ID,x7,k7=Et(()=>{Mu=61440,wD=16384,qw=32768,ID=40960,x7=456789e3});var tr={};zt(tr,{EBADF:()=>Io,EBUSY:()=>s_e,EEXIST:()=>A_e,EINVAL:()=>a_e,EISDIR:()=>u_e,ENOENT:()=>l_e,ENOSYS:()=>o_e,ENOTDIR:()=>c_e,ENOTEMPTY:()=>p_e,EOPNOTSUPP:()=>h_e,EROFS:()=>f_e,ERR_DIR_CLOSED:()=>NR});function Ll(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function s_e(t){return Ll("EBUSY",t)}function o_e(t,e){return Ll("ENOSYS",`${t}, ${e}`)}function a_e(t){return Ll("EINVAL",`invalid argument, ${t}`)}function Io(t){return Ll("EBADF",`bad file descriptor, ${t}`)}function l_e(t){return Ll("ENOENT",`no such file or directory, ${t}`)}function c_e(t){return Ll("ENOTDIR",`not a directory, ${t}`)}function u_e(t){return Ll("EISDIR",`illegal operation on a directory, ${t}`)}function A_e(t){return Ll("EEXIST",`file already exists, ${t}`)}function f_e(t){return Ll("EROFS",`read-only filesystem, ${t}`)}function p_e(t){return Ll("ENOTEMPTY",`directory not empty, ${t}`)}function h_e(t){return Ll("EOPNOTSUPP",`operation not supported, ${t}`)}function NR(){return Ll("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};zt(Ea,{BigIntStatsEntry:()=>ty,DEFAULT_MODE:()=>UR,DirEntry:()=>OR,StatEntry:()=>ey,areStatsEqual:()=>_R,clearStats:()=>vD,convertToBigIntStats:()=>d_e,makeDefaultStats:()=>Q7,makeEmptyStats:()=>g_e});function Q7(){return new ey}function g_e(){return vD(Q7())}function vD(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):MR.types.isDate(r)&&(t[e]=new Date(0))}return t}function d_e(t){let e=new ty;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):MR.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function _R(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var MR,UR,OR,ey,ty,HR=Et(()=>{MR=$e(ve("util")),UR=33188,OR=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}},ey=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=UR;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}},ty=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(UR);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 w_e(t){let e,r;if(e=t.match(E_e))t=e[1];else if(r=t.match(C_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function I_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(m_e))?t=`/${e[1]}`:(r=t.match(y_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===le?R7(e):qR(e)}var Gw,Bt,dr,le,z,F7,m_e,y_e,E_e,C_e,qR,R7,Ca=Et(()=>{Gw=$e(ve("path")),Bt={root:"/",dot:".",parent:".."},dr={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"},le=Object.create(Gw.default),z=Object.create(Gw.default.posix);le.cwd=()=>process.cwd();z.cwd=process.platform==="win32"?()=>qR(process.cwd()):process.cwd;process.platform==="win32"&&(z.resolve=(...t)=>t.length>0&&z.isAbsolute(t[0])?Gw.default.posix.resolve(...t):Gw.default.posix.resolve(z.cwd(),...t));F7=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)};le.contains=(t,e)=>F7(le,t,e);z.contains=(t,e)=>F7(z,t,e);m_e=/^([a-zA-Z]:.*)$/,y_e=/^\/\/(\.\/)?(.*)$/,E_e=/^\/([a-zA-Z]:.*)$/,C_e=/^\/unc\/(\.dot\/)?(.*)$/;qR=process.platform==="win32"?I_e:t=>t,R7=process.platform==="win32"?w_e:t=>t;le.fromPortablePath=R7;le.toPortablePath=qR});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function T7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Mg,mtime:Mg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await GR(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function GR(t,e,r,o,a,n,u){let A=u.didParentExist?await L7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Mg,mtime:Mg}:p,I;switch(!0){case p.isDirectory():I=await v_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await S_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await b_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function L7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function v_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await GR(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async x=>{await GR(t,e,r,r.pathUtils.join(o,x),n,n.pathUtils.join(u,x),I)}))).some(x=>x)&&(h=!0);return h}async function D_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=420,v=A.mode&511,x=`${E}${v!==I?v.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${x}.dat`),R;(ue=>(ue[ue.Lock=0]="Lock",ue[ue.Rename=1]="Rename"))(R||={});let N=1,U=await L7(r,C);if(a){let ae=U&&a.dev===U.dev&&a.ino===U.ino,fe=U?.mtimeMs!==B_e;if(ae&&fe&&h.autoRepair&&(N=0,U=null),!ae)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let V=!U&&N===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(N===0&&await r.lockPromise(C,async()=>{let ae=await n.readFilePromise(u);await r.writeFilePromise(C,ae)}),N===1&&V)){let ae=await n.readFilePromise(u);await r.writeFilePromise(V,ae);try{await r.linkPromise(V,C)}catch(fe){if(fe.code==="EEXIST")te=!0,await r.unlinkPromise(V);else throw fe}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,Mg,Mg),v!==I&&await r.chmodPromise(C,v)),V&&!te&&await r.unlinkPromise(V)}),!1}async function P_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function S_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?D_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):P_e(t,e,r,o,a,n,u,A,p)}async function b_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Mg,B_e,jR=Et(()=>{Ca();Mg=new Date(456789e3*1e3),B_e=Mg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new jw(e,a,o)}var jw,N7=Et(()=>{BD();jw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw NR()}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 O7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var M7,ry,U7=Et(()=>{M7=ve("events");HR();ry=class extends M7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ry(r,o,a);return n.start(),n}start(){O7(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(){O7(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 o=this.bigint?new ty:new ey;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;_R(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ny(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=bD.get(t);typeof p>"u"&&bD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ry.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Ug(t,e,r){let o=bD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function _g(t){let e=bD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Ug(t,r)}var bD,YR=Et(()=>{U7();bD=new WeakMap});function x_e(t){let e=t.match(/\r?\n/g);if(e===null)return H7.EOL;let r=e.filter(a=>a===`\r +(()=>{var $3e=Object.create;var NF=Object.defineProperty;var e_e=Object.getOwnPropertyDescriptor;var t_e=Object.getOwnPropertyNames;var r_e=Object.getPrototypeOf,n_e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),zt=(t,e)=>{for(var r in e)NF(t,r,{get:e[r],enumerable:!0})},i_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of t_e(e))!n_e.call(t,a)&&a!==r&&NF(t,a,{get:()=>e[a],enumerable:!(o=e_e(e,a))||o.enumerable});return t};var Ze=(t,e,r)=>(r=t!=null?$3e(r_e(t)):{},i_e(e||!t||!t.__esModule?NF(r,"default",{value:t,enumerable:!0}):r,t));var vi={};zt(vi,{SAFE_TIME:()=>x7,S_IFDIR:()=>IP,S_IFLNK:()=>BP,S_IFMT:()=>Mu,S_IFREG:()=>_w});var Mu,IP,_w,BP,x7,k7=Et(()=>{Mu=61440,IP=16384,_w=32768,BP=40960,x7=456789e3});var nr={};zt(nr,{EBADF:()=>wo,EBUSY:()=>s_e,EEXIST:()=>A_e,EINVAL:()=>a_e,EISDIR:()=>u_e,ENOENT:()=>l_e,ENOSYS:()=>o_e,ENOTDIR:()=>c_e,ENOTEMPTY:()=>p_e,EOPNOTSUPP:()=>h_e,EROFS:()=>f_e,ERR_DIR_CLOSED:()=>OF});function Ll(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function s_e(t){return Ll("EBUSY",t)}function o_e(t,e){return Ll("ENOSYS",`${t}, ${e}`)}function a_e(t){return Ll("EINVAL",`invalid argument, ${t}`)}function wo(t){return Ll("EBADF",`bad file descriptor, ${t}`)}function l_e(t){return Ll("ENOENT",`no such file or directory, ${t}`)}function c_e(t){return Ll("ENOTDIR",`not a directory, ${t}`)}function u_e(t){return Ll("EISDIR",`illegal operation on a directory, ${t}`)}function A_e(t){return Ll("EEXIST",`file already exists, ${t}`)}function f_e(t){return Ll("EROFS",`read-only filesystem, ${t}`)}function p_e(t){return Ll("ENOTEMPTY",`directory not empty, ${t}`)}function h_e(t){return Ll("EOPNOTSUPP",`operation not supported, ${t}`)}function OF(){return Ll("ERR_DIR_CLOSED","Directory handle was closed")}var vP=Et(()=>{});var Ea={};zt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>_F,DirEntry:()=>MF,StatEntry:()=>$m,areStatsEqual:()=>HF,clearStats:()=>PP,convertToBigIntStats:()=>d_e,makeDefaultStats:()=>Q7,makeEmptyStats:()=>g_e});function Q7(){return new $m}function g_e(){return PP(Q7())}function PP(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):UF.types.isDate(r)&&(t[e]=new Date(0))}return t}function d_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):UF.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function HF(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var UF,_F,MF,$m,ey,qF=Et(()=>{UF=Ze(ve("util")),_F=33188,MF=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}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=_F;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(_F);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(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 w_e(t){let e,r;if(e=t.match(E_e))t=e[1];else if(r=t.match(C_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function I_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(m_e))?t=`/${e[1]}`:(r=t.match(y_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DP(t,e){return t===ue?F7(e):GF(e)}var Hw,Bt,dr,ue,z,R7,m_e,y_e,E_e,C_e,GF,F7,Ca=Et(()=>{Hw=Ze(ve("path")),Bt={root:"/",dot:".",parent:".."},dr={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"},ue=Object.create(Hw.default),z=Object.create(Hw.default.posix);ue.cwd=()=>process.cwd();z.cwd=process.platform==="win32"?()=>GF(process.cwd()):process.cwd;process.platform==="win32"&&(z.resolve=(...t)=>t.length>0&&z.isAbsolute(t[0])?Hw.default.posix.resolve(...t):Hw.default.posix.resolve(z.cwd(),...t));R7=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)};ue.contains=(t,e)=>R7(ue,t,e);z.contains=(t,e)=>R7(z,t,e);m_e=/^([a-zA-Z]:.*)$/,y_e=/^\/\/(\.\/)?(.*)$/,E_e=/^\/([a-zA-Z]:.*)$/,C_e=/^\/unc\/(\.dot\/)?(.*)$/;GF=process.platform==="win32"?I_e:t=>t,F7=process.platform==="win32"?w_e:t=>t;ue.fromPortablePath=F7;ue.toPortablePath=GF});async function SP(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function T7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Mg,mtime:Mg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await jF(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function jF(t,e,r,o,a,n,u){let A=u.didParentExist?await L7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Mg,mtime:Mg}:p,I;switch(!0){case p.isDirectory():I=await v_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await S_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await b_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function L7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function v_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await jF(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async x=>{await jF(t,e,r,r.pathUtils.join(o,x),n,n.pathUtils.join(u,x),I)}))).some(x=>x)&&(h=!0);return h}async function P_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=420,v=A.mode&511,x=`${E}${v!==I?v.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${x}.dat`),F;(ce=>(ce[ce.Lock=0]="Lock",ce[ce.Rename=1]="Rename"))(F||={});let N=1,U=await L7(r,C);if(a){let le=U&&a.dev===U.dev&&a.ino===U.ino,ae=U?.mtimeMs!==B_e;if(le&&ae&&h.autoRepair&&(N=0,U=null),!le)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let V=!U&&N===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(N===0&&await r.lockPromise(C,async()=>{let le=await n.readFilePromise(u);await r.writeFilePromise(C,le)}),N===1&&V)){let le=await n.readFilePromise(u);await r.writeFilePromise(V,le);try{await r.linkPromise(V,C)}catch(ae){if(ae.code==="EEXIST")te=!0,await r.unlinkPromise(V);else throw ae}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,Mg,Mg),v!==I&&await r.chmodPromise(C,v)),V&&!te&&await r.unlinkPromise(V)}),!1}async function D_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function S_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?P_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):D_e(t,e,r,o,a,n,u,A,p)}async function b_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DP(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Mg,B_e,YF=Et(()=>{Ca();Mg=new Date(456789e3*1e3),B_e=Mg.getTime()});function bP(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,N7=Et(()=>{vP();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OF()}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 O7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var M7,ty,U7=Et(()=>{M7=ve("events");qF();ty=class extends M7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){O7(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(){O7(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 o=this.bigint?new ey:new $m;return PP(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;HF(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xP.get(t);typeof p>"u"&&xP.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Ug(t,e,r){let o=xP.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function _g(t){let e=xP.get(t);if(!(typeof e>"u"))for(let r of e.keys())Ug(t,r)}var xP,WF=Et(()=>{U7();xP=new WeakMap});function x_e(t){let e=t.match(/\r?\n/g);if(e===null)return H7.EOL;let r=e.filter(a=>a===`\r `).length,o=e.length-r;return r>o?`\r `:` -`}function Hg(t,e){return e.replace(/\r?\n/g,x_e(t))}var _7,H7,gf,Uu,qg=Et(()=>{_7=ve("crypto"),H7=ve("os");jR();Ca();gf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,_7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await T7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Hg(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Hg(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`}function Hg(t,e){return e.replace(/\r?\n/g,x_e(t))}var _7,H7,gf,Uu,qg=Et(()=>{_7=ve("crypto"),H7=ve("os");YF();Ca();gf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,_7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await T7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DP(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Hg(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Hg(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} `)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Uu=class extends gf{constructor(){super(z)}}});var Ps,df=Et(()=>{qg();Ps=class extends gf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}rmSync(e,r){return this.baseFs.rmSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var _u,q7=Et(()=>{df();_u=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function G7(t){let e=t;return typeof t.path=="string"&&(e.path=le.toPortablePath(t.path)),e}var j7,Tn,Gg=Et(()=>{j7=$e(ve("fs"));qg();Ca();Tn=class extends Uu{constructor(r=j7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return z.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(le.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(le.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(le.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(le.fromPortablePath(r),o):this.realFs.opendirSync(le.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?le.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?le.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(le.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>le.toPortablePath(o))}realpathSync(r){return le.toPortablePath(this.realFs.realpathSync(le.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(le.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(le.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(le.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(le.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(le.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(le.fromPortablePath(r),o):this.realFs.statSync(le.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(le.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(le.fromPortablePath(r),o):this.realFs.lstatSync(le.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(le.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(le.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(le.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(le.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(le.fromPortablePath(r),le.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(le.fromPortablePath(r),le.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(le.fromPortablePath(r),le.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(le.fromPortablePath(r),le.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?le.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?le.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?le.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?le.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(le.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(le.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(le.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(le.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(le.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(le.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(le.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(le.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(le.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(le.fromPortablePath(r),o)}async rmPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rm(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rm(le.fromPortablePath(r),this.makeCallback(a,n))})}rmSync(r,o){return this.realFs.rmSync(le.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(le.fromPortablePath(r),le.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(le.fromPortablePath(r),le.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(le.fromPortablePath(r.replace(/\/+$/,"")),le.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(le.fromPortablePath(r.replace(/\/+$/,"")),le.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?le.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?le.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(le.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(G7)),n)):this.realFs.readdir(le.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(le.toPortablePath)),n)):this.realFs.readdir(le.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(le.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(le.fromPortablePath(r),o).map(G7):this.realFs.readdirSync(le.fromPortablePath(r),o).map(le.toPortablePath):this.realFs.readdirSync(le.fromPortablePath(r),o):this.realFs.readdirSync(le.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(le.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>le.toPortablePath(o))}readlinkSync(r){return le.toPortablePath(this.realFs.readlinkSync(le.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(le.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(le.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(le.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(le.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(le.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,Y7=Et(()=>{Gg();df();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Tn}={}){super(z);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?z.normalize(r):this.baseFs.resolve(z.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var W7,Hu,K7=Et(()=>{Gg();df();Ca();W7=Bt.root,Hu=class extends Ps{constructor(r,{baseFs:o=new Tn}={}){super(z);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(W7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(W7,this.pathUtils.relative(this.target,r))}}});var iy,z7=Et(()=>{df();iy=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,qp,V7=Et(()=>{jg=ve("fs");qg();Gg();YR();BD();Ca();wa=4278190080,qp=class extends Uu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(_g(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(_g(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=le.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async rmPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmPromise(r,o),async(a,{subPath:n})=>await a.rmPromise(n,o))}rmSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,o),(a,{subPath:n})=>a.rmSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ny(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Ug(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,WR,Yw,J7=Et(()=>{qg();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),WR=class extends gf{constructor(){super(z)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async rmPromise(){throw Zt()}rmSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Yw=WR;Yw.instance=new WR});var Gp,X7=Et(()=>{df();Ca();Gp=class extends Ps{constructor(r){super(le);this.baseFs=r}mapFromBase(r){return le.fromPortablePath(r)}mapToBase(r){return le.toPortablePath(r)}}});var k_e,KR,Q_e,mi,Z7=Et(()=>{Gg();df();Ca();k_e=/^[0-9]+$/,KR=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,Q_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Tn}={}){super(z);this.baseFs=r}static makeVirtualPath(r,o,a){if(z.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!z.basename(o).match(Q_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=z.relative(z.dirname(r),a).split("/"),A=0;for(;A{zR=$e(ve("buffer")),$7=ve("url"),eY=ve("util");df();Ca();xD=class extends Ps{constructor(r){super(le);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof URL)return(0,$7.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!F_e(r,o))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 o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Bo,mf,jp,kD,QD,sy,Lc,Nc,R_e,T_e,L_e,N_e,Ww,nY=Et(()=>{rY=ve("readline"),Bo=Symbol("kBaseFs"),mf=Symbol("kFd"),jp=Symbol("kClosePromise"),kD=Symbol("kCloseResolve"),QD=Symbol("kCloseReject"),sy=Symbol("kRefs"),Lc=Symbol("kRef"),Nc=Symbol("kUnref"),Ww=class{constructor(e,r){this[R_e]=1;this[T_e]=void 0;this[L_e]=void 0;this[N_e]=void 0;this[Bo]=r,this[mf]=e}get fd(){return this[mf]}async appendFile(e,r){try{this[Lc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Lc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Lc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Lc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Lc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Lc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Lc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Lc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Lc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Lc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[mf]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[kD]=e,this[QD]=r}).finally(()=>{this[jp]=void 0,this[QD]=void 0,this[kD]=void 0});return this[jp]}[(Bo,mf,R_e=sy,T_e=jp,L_e=kD,N_e=QD,Lc)](e){if(this[mf]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[sy]++}[Nc](){if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[Bo].closePromise(e).then(this[kD],this[QD])}}}});function Kw(t,e){e=new xD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[oy.promisify.custom]<"u"&&(n[oy.promisify.custom]=u[oy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of O_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Ww?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Ww(n,e)})}t.read[oy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[oy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function FD(t,e){let r=Object.create(t);return Kw(r,e),r}var oy,O_e,iY,sY=Et(()=>{oy=ve("util");tY();nY();O_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","rmSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=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 oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(VR)return VR;let t=le.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),VR={tmpdir:t,realTmpdir:e}}var lY,Oc,VR,oe,cY=Et(()=>{lY=$e(ve("os"));Gg();Ca();Oc=new Set,VR=null;oe=Object.assign(new Tn,{detachTemp(t){Oc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(z.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=z.join(r,o);if(Oc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Oc.has(a)){Oc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(z.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=z.join(r,o);if(Oc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Oc.has(a)){Oc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Oc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Oc.delete(t)}catch{}}))},rmtempSync(){for(let t of Oc)try{oe.removeSync(t),Oc.delete(t)}catch{}}})});var zw={};zt(zw,{AliasFS:()=>_u,BasePortableFakeFS:()=>Uu,CustomDir:()=>jw,CwdFS:()=>gn,FakeFS:()=>gf,Filename:()=>dr,JailFS:()=>Hu,LazyFS:()=>iy,MountFS:()=>qp,NoFS:()=>Yw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>Gp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>tr,extendFs:()=>FD,normalizeLineEndings:()=>Hg,npath:()=>le,opendir:()=>SD,patchFs:()=>Kw,ppath:()=>z,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>_g,unwatchFile:()=>Ug,watchFile:()=>ny,xfs:()=>oe});var Pt=Et(()=>{k7();BD();HR();jR();N7();YR();qg();Ca();Ca();q7();qg();Y7();K7();z7();V7();J7();Gg();X7();df();Z7();sY();cY()});var hY=_((abt,pY)=>{pY.exports=fY;fY.sync=U_e;var uY=ve("fs");function M_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=__e;var gY=ve("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function __e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&H_e(t,e)}function H_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var wY=_((ubt,CY)=>{var cbt=ve("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=hY():RD=EY();CY.exports=JR;JR.sync=q_e;function JR(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){JR(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function q_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var bY=_((Abt,SY)=>{var ay=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=ve("path"),G_e=ay?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),DY=(t,e)=>{let r=e.colon||G_e,o=t.match(/\//)||ay&&t.match(/\\/)?[""]:[...ay?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=ay?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=ay?a.split(r):[""];return ay&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},PY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=DY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(vY(t));let v=o[h],x=/^".*"$/.test(v)?v.slice(1,-1):v,C=IY.join(x,t),R=!x&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(R,h,0))}),p=(h,E,I)=>new Promise((v,x)=>{if(I===a.length)return v(A(E+1));let C=a[I];BY(h+C,{pathExt:n},(R,N)=>{if(!R&&N)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},j_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=DY(t,e),n=[];for(let u=0;u{"use strict";var xY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};XR.exports=xY;XR.exports.default=xY});var TY=_((pbt,RY)=>{"use strict";var QY=ve("path"),Y_e=bY(),W_e=kY();function FY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=Y_e.sync(t.command,{path:r[W_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function K_e(t){return FY(t)||FY(t,!0)}RY.exports=K_e});var LY=_((hbt,$R)=>{"use strict";var ZR=/([()\][%!^"`<>&|;, *?])/g;function z_e(t){return t=t.replace(ZR,"^$1"),t}function V_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(ZR,"^$1"),e&&(t=t.replace(ZR,"^$1")),t}$R.exports.command=z_e;$R.exports.argument=V_e});var OY=_((gbt,NY)=>{"use strict";NY.exports=/^#!(.*)/});var UY=_((dbt,MY)=>{"use strict";var J_e=OY();MY.exports=(t="")=>{let e=t.match(J_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((mbt,_Y)=>{"use strict";var eT=ve("fs"),X_e=UY();function Z_e(t){let r=Buffer.alloc(150),o;try{o=eT.openSync(t,"r"),eT.readSync(o,r,0,150,0),eT.closeSync(o)}catch{}return X_e(r.toString())}_Y.exports=Z_e});var YY=_((ybt,jY)=>{"use strict";var $_e=ve("path"),qY=TY(),GY=LY(),e8e=HY(),t8e=process.platform==="win32",r8e=/\.(?:com|exe)$/i,n8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function i8e(t){t.file=qY(t);let e=t.file&&e8e(t.file);return e?(t.args.unshift(t.file),t.command=e,qY(t)):t.file}function s8e(t){if(!t8e)return t;let e=i8e(t),r=!r8e.test(e);if(t.options.forceShell||r){let o=n8e.test(e);t.command=$_e.normalize(t.command),t.command=GY.command(t.command),t.args=t.args.map(n=>GY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function o8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:s8e(o)}jY.exports=o8e});var zY=_((Ebt,KY)=>{"use strict";var tT=process.platform==="win32";function rT(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 a8e(t,e){if(!tT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawn"):null}function l8e(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:a8e,verifyENOENT:WY,verifyENOENTSync:l8e,notFoundError:rT}});var sT=_((Cbt,ly)=>{"use strict";var VY=ve("child_process"),nT=YY(),iT=zY();function JY(t,e,r){let o=nT(t,e,r),a=VY.spawn(o.command,o.args,o.options);return iT.hookChildProcess(a,o),a}function c8e(t,e,r){let o=nT(t,e,r),a=VY.spawnSync(o.command,o.args,o.options);return a.error=a.error||iT.verifyENOENTSync(a.status,o),a}ly.exports=JY;ly.exports.spawn=JY;ly.exports.sync=c8e;ly.exports._parse=nT;ly.exports._enoent=iT});var ZY=_((wbt,XY)=>{"use strict";function u8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}u8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),J=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),be="<&",Le=Br("<&",!1),ot="<",dt=Br("<",!1),Gt=function(L){return{type:"argument",segments:[].concat(...L)}},$t=function(L){return L},bt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),br=function(L){return[{type:"text",text:L}]},Wr='""',Kn=Br('""',!1),Ls=function(){return{type:"text",text:""}},Ti='"',ps=Br('"',!1),io=function(L){return L},Si=function(L){return{type:"arithmetic",arithmetic:L,quoted:!0}},Ns=function(L){return{type:"shell",shell:L,quoted:!0}},so=function(L){return{type:"variable",...L,quoted:!0}},uc=function(L){return{type:"text",text:L}},uu=function(L){return{type:"arithmetic",arithmetic:L,quoted:!1}},cp=function(L){return{type:"shell",shell:L,quoted:!1}},up=function(L){return{type:"variable",...L,quoted:!1}},Os=function(L){return{type:"glob",pattern:L}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Ms=function(L){return L.join("")},yl=/^[^$"]/,El=Cs(["$",'"'],!0,!1),ao=`\\ +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Uu=class extends gf{constructor(){super(z)}}});var bs,df=Et(()=>{qg();bs=class extends gf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}rmSync(e,r){return this.baseFs.rmSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var _u,q7=Et(()=>{df();_u=class extends bs{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function G7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var j7,Tn,Gg=Et(()=>{j7=Ze(ve("fs"));qg();Ca();Tn=class extends Uu{constructor(r=j7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return z.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async rmPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rm(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rm(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmSync(r,o){return this.realFs.rmSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(G7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(G7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,Y7=Et(()=>{Gg();df();Ca();gn=class extends bs{constructor(r,{baseFs:o=new Tn}={}){super(z);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?z.normalize(r):this.baseFs.resolve(z.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var W7,Hu,K7=Et(()=>{Gg();df();Ca();W7=Bt.root,Hu=class extends bs{constructor(r,{baseFs:o=new Tn}={}){super(z);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(W7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(W7,this.pathUtils.relative(this.target,r))}}});var ny,z7=Et(()=>{df();ny=class extends bs{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,qp,V7=Et(()=>{jg=ve("fs");qg();Gg();WF();vP();Ca();wa=4278190080,qp=class extends Uu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(_g(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(_g(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw wo("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw wo("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw wo("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw wo("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw wo("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw wo("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw wo("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw wo("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async rmPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmPromise(r,o),async(a,{subPath:n})=>await a.rmPromise(n,o))}rmSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,o),(a,{subPath:n})=>a.rmSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw wo("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Ug(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KF,Gw,J7=Et(()=>{qg();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KF=class extends gf{constructor(){super(z)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async rmPromise(){throw Zt()}rmSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KF;Gw.instance=new KF});var Gp,X7=Et(()=>{df();Ca();Gp=class extends bs{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var k_e,zF,Q_e,mi,Z7=Et(()=>{Gg();df();Ca();k_e=/^[0-9]+$/,zF=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,Q_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends bs{constructor({baseFs:r=new Tn}={}){super(z);this.baseFs=r}static makeVirtualPath(r,o,a){if(z.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!z.basename(o).match(Q_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=z.relative(z.dirname(r),a).split("/"),A=0;for(;A{VF=Ze(ve("buffer")),$7=ve("url"),eY=ve("util");df();Ca();kP=class extends bs{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof URL)return(0,$7.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!R_e(r,o))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 o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Io,mf,jp,QP,RP,iy,Lc,Nc,F_e,T_e,L_e,N_e,jw,nY=Et(()=>{rY=ve("readline"),Io=Symbol("kBaseFs"),mf=Symbol("kFd"),jp=Symbol("kClosePromise"),QP=Symbol("kCloseResolve"),RP=Symbol("kCloseReject"),iy=Symbol("kRefs"),Lc=Symbol("kRef"),Nc=Symbol("kUnref"),jw=class{constructor(e,r){this[F_e]=1;this[T_e]=void 0;this[L_e]=void 0;this[N_e]=void 0;this[Io]=r,this[mf]=e}get fd(){return this[mf]}async appendFile(e,r){try{this[Lc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Io].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Lc](this.chown),await this[Io].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Lc](this.chmod),await this[Io].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Io].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Io].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Lc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Io].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Lc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Io].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Lc](this.stat),await this[Io].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Lc](this.truncate),await this[Io].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Lc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Io].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Lc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Io].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Io].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Lc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[mf]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[mf];this[mf]=-1,this[jp]=this[Io].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QP]=e,this[RP]=r}).finally(()=>{this[jp]=void 0,this[RP]=void 0,this[QP]=void 0});return this[jp]}[(Io,mf,F_e=iy,T_e=jp,L_e=QP,N_e=RP,Lc)](e){if(this[mf]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[mf];this[mf]=-1,this[Io].closePromise(e).then(this[QP],this[RP])}}}});function Yw(t,e){e=new kP(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of O_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof jw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new jw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function FP(t,e){let r=Object.create(t);return Yw(r,e),r}var sy,O_e,iY,sY=Et(()=>{sy=ve("util");tY();nY();O_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","rmSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=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 oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(JF)return JF;let t=ue.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),JF={tmpdir:t,realTmpdir:e}}var lY,Oc,JF,oe,cY=Et(()=>{lY=Ze(ve("os"));Gg();Ca();Oc=new Set,JF=null;oe=Object.assign(new Tn,{detachTemp(t){Oc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(z.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=z.join(r,o);if(Oc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Oc.has(a)){Oc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(z.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=z.join(r,o);if(Oc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Oc.has(a)){Oc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Oc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Oc.delete(t)}catch{}}))},rmtempSync(){for(let t of Oc)try{oe.removeSync(t),Oc.delete(t)}catch{}}})});var Ww={};zt(Ww,{AliasFS:()=>_u,BasePortableFakeFS:()=>Uu,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>gf,Filename:()=>dr,JailFS:()=>Hu,LazyFS:()=>ny,MountFS:()=>qp,NoFS:()=>Gw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>Gp,ProxiedFS:()=>bs,VirtualFS:()=>mi,constants:()=>vi,errors:()=>nr,extendFs:()=>FP,normalizeLineEndings:()=>Hg,npath:()=>ue,opendir:()=>bP,patchFs:()=>Yw,ppath:()=>z,setupCopyIndex:()=>SP,statUtils:()=>Ea,unwatchAllFiles:()=>_g,unwatchFile:()=>Ug,watchFile:()=>ry,xfs:()=>oe});var Dt=Et(()=>{k7();vP();qF();YF();N7();WF();qg();Ca();Ca();q7();qg();Y7();K7();z7();V7();J7();Gg();X7();df();Z7();sY();cY()});var hY=_((cbt,pY)=>{pY.exports=fY;fY.sync=U_e;var uY=ve("fs");function M_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=__e;var gY=ve("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function __e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&H_e(t,e)}function H_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var wY=_((fbt,CY)=>{var Abt=ve("fs"),TP;process.platform==="win32"||global.TESTING_WINDOWS?TP=hY():TP=EY();CY.exports=XF;XF.sync=q_e;function XF(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){XF(t,e||{},function(n,u){n?a(n):o(u)})})}TP(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function q_e(t,e){try{return TP.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var bY=_((pbt,SY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=ve("path"),G_e=oy?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),PY=(t,e)=>{let r=e.colon||G_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},DY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=PY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(vY(t));let v=o[h],x=/^".*"$/.test(v)?v.slice(1,-1):v,C=IY.join(x,t),F=!x&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(F,h,0))}),p=(h,E,I)=>new Promise((v,x)=>{if(I===a.length)return v(A(E+1));let C=a[I];BY(h+C,{pathExt:n},(F,N)=>{if(!F&&N)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},j_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=PY(t,e),n=[];for(let u=0;u{"use strict";var xY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};ZF.exports=xY;ZF.exports.default=xY});var TY=_((gbt,FY)=>{"use strict";var QY=ve("path"),Y_e=bY(),W_e=kY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=Y_e.sync(t.command,{path:r[W_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function K_e(t){return RY(t)||RY(t,!0)}FY.exports=K_e});var LY=_((dbt,eT)=>{"use strict";var $F=/([()\][%!^"`<>&|;, *?])/g;function z_e(t){return t=t.replace($F,"^$1"),t}function V_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace($F,"^$1"),e&&(t=t.replace($F,"^$1")),t}eT.exports.command=z_e;eT.exports.argument=V_e});var OY=_((mbt,NY)=>{"use strict";NY.exports=/^#!(.*)/});var UY=_((ybt,MY)=>{"use strict";var J_e=OY();MY.exports=(t="")=>{let e=t.match(J_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((Ebt,_Y)=>{"use strict";var tT=ve("fs"),X_e=UY();function Z_e(t){let r=Buffer.alloc(150),o;try{o=tT.openSync(t,"r"),tT.readSync(o,r,0,150,0),tT.closeSync(o)}catch{}return X_e(r.toString())}_Y.exports=Z_e});var YY=_((Cbt,jY)=>{"use strict";var $_e=ve("path"),qY=TY(),GY=LY(),e8e=HY(),t8e=process.platform==="win32",r8e=/\.(?:com|exe)$/i,n8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function i8e(t){t.file=qY(t);let e=t.file&&e8e(t.file);return e?(t.args.unshift(t.file),t.command=e,qY(t)):t.file}function s8e(t){if(!t8e)return t;let e=i8e(t),r=!r8e.test(e);if(t.options.forceShell||r){let o=n8e.test(e);t.command=$_e.normalize(t.command),t.command=GY.command(t.command),t.args=t.args.map(n=>GY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function o8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:s8e(o)}jY.exports=o8e});var zY=_((wbt,KY)=>{"use strict";var rT=process.platform==="win32";function nT(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 a8e(t,e){if(!rT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return rT&&t===1&&!e.file?nT(e.original,"spawn"):null}function l8e(t,e){return rT&&t===1&&!e.file?nT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:a8e,verifyENOENT:WY,verifyENOENTSync:l8e,notFoundError:nT}});var oT=_((Ibt,ay)=>{"use strict";var VY=ve("child_process"),iT=YY(),sT=zY();function JY(t,e,r){let o=iT(t,e,r),a=VY.spawn(o.command,o.args,o.options);return sT.hookChildProcess(a,o),a}function c8e(t,e,r){let o=iT(t,e,r),a=VY.spawnSync(o.command,o.args,o.options);return a.error=a.error||sT.verifyENOENTSync(a.status,o),a}ay.exports=JY;ay.exports.spawn=JY;ay.exports.sync=c8e;ay.exports._parse=iT;ay.exports._enoent=sT});var ZY=_((Bbt,XY)=>{"use strict";function u8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}u8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",R=Br(">&",!1),J=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),ke="<&",Le=Br("<&",!1),ot="<",dt=Br("<",!1),Gt=function(L){return{type:"argument",segments:[].concat(...L)}},tr=function(L){return L},bt="$'",ln=Br("$'",!1),kr="'",mr=Br("'",!1),br=function(L){return[{type:"text",text:L}]},Kr='""',Kn=Br('""',!1),Os=function(){return{type:"text",text:""}},Ti='"',gs=Br('"',!1),no=function(L){return L},Si=function(L){return{type:"arithmetic",arithmetic:L,quoted:!0}},Ms=function(L){return{type:"shell",shell:L,quoted:!0}},io=function(L){return{type:"variable",...L,quoted:!0}},uc=function(L){return{type:"text",text:L}},uu=function(L){return{type:"arithmetic",arithmetic:L,quoted:!1}},cp=function(L){return{type:"shell",shell:L,quoted:!1}},up=function(L){return{type:"variable",...L,quoted:!1}},Us=function(L){return{type:"glob",pattern:L}},Pn=/^[^']/,so=Is(["'"],!0,!1),_s=function(L){return L.join("")},yl=/^[^$"]/,El=Is(["$",'"'],!0,!1),oo=`\\ `,zn=Br(`\\ -`,!1),On=function(){return""},Li="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,rr=Cs(["\\","$",'"',"`"],!1,!1),Oe=function(L){return L},ii="\\a",Ua=Br("\\a",!1),hr=function(){return"a"},Ac="\\b",Au=Br("\\b",!1),fc=function(){return"\b"},Cl=/^[Ee]/,DA=Cs(["E","e"],!1,!1),fu=function(){return"\x1B"},Ce="\\f",Rt=Br("\\f",!1),pc=function(){return"\f"},Hi="\\n",pu=Br("\\n",!1),Yt=function(){return` -`},wl="\\r",PA=Br("\\r",!1),Ap=function(){return"\r"},hc="\\t",SA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",gc=Br("\\v",!1),bA=function(){return"\v"},sa=/^[\\'"?]/,Ni=Cs(["\\","'",'"',"?"],!1,!1),_o=function(L){return String.fromCharCode(parseInt(L,16))},Ze="\\x",lo=Br("\\x",!1),dc="\\u",hu=Br("\\u",!1),qi="\\U",gu=Br("\\U",!1),xA=function(L){return String.fromCodePoint(parseInt(L,16))},Ha=/^[0-7]/,mc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,Ht=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=Ag(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(L,K,re){return{type:"number",value:(L==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},ms=function(L,K){return{type:"number",value:(L==="-"?-1:1)*parseInt(K.join(""))}},_s=function(L){return{type:"variable",...L}},Un=function(L){return{type:"variable",name:L}},Pn=function(L){return L},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),ir=function(L,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(L,K){return K.reduce((re,pe)=>({left:re,...pe}),L)},ye=function(L,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Ne="$((",pt=Br("$((",!1),ht="))",Tt=Br("))",!1),er=function(L){return L},$r="$(",Gi=Br("$(",!1),es=function(L){return L},bi="${",qo=Br("${",!1),kA=":-",QA=Br(":-",!1),fp=function(L,K){return{name:L,defaultValue:K}},sg=":-}",du=Br(":-}",!1),og=function(L){return{name:L,defaultValue:[]}},mu=":+",uo=Br(":+",!1),FA=function(L,K){return{name:L,alternativeValue:K}},yc=":+}",ca=Br(":+}",!1),ag=function(L){return{name:L,alternativeValue:[]}},Ec=function(L){return{name:L}},Sm="$",lg=Br("$",!1),ei=function(L){return e.isGlobPattern(L)},pp=function(L){return L},cg=/^[a-zA-Z0-9_]/,RA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return ug()},yu=/^[$@*?#a-zA-Z0-9_\-]/,qa=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),ji=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Eu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Cc=/^[ \t]/,wc=Cs([" "," "],!1,!1),j=0,Dt=0,Il=[{line:1,column:1}],xi=0,Ic=[],ct=0,Cu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ug(){return t.substring(Dt,j)}function yw(){return Bc(Dt,j)}function TA(L,K){throw K=K!==void 0?K:Bc(Dt,j),hg([pg(L)],t.substring(Dt,j),K)}function hp(L,K){throw K=K!==void 0?K:Bc(Dt,j),bm(L,K)}function Br(L,K){return{type:"literal",text:L,ignoreCase:K}}function Cs(L,K,re){return{type:"class",parts:L,inverted:K,ignoreCase:re}}function Ag(){return{type:"any"}}function fg(){return{type:"end"}}function pg(L){return{type:"other",description:L}}function gp(L){var K=Il[L],re;if(K)return K;for(re=L-1;!Il[re];)re--;for(K=Il[re],K={line:K.line,column:K.column};rexi&&(xi=j,Ic=[]),Ic.push(L))}function bm(L,K){return new Yg(L,null,null,K)}function hg(L,K,re){return new Yg(Yg.buildMessage(L,K),L,K,re)}function gg(){var L,K,re;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=wu(),re===r&&(re=null),re!==r?(Dt=L,K=n(re),L=K):(j=L,L=r)):(j=L,L=r),L}function wu(){var L,K,re,pe,Je;if(L=j,K=Iu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=dg(),pe!==r?(Je=xm(),Je===r&&(Je=null),Je!==r?(Dt=L,K=u(K,pe,Je),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)}else j=L,L=r;if(L===r)if(L=j,K=Iu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=dg(),pe===r&&(pe=null),pe!==r?(Dt=L,K=A(K,pe),L=K):(j=L,L=r)):(j=L,L=r)}else j=L,L=r;return L}function xm(){var L,K,re,pe,Je;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=wu(),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();pe!==r?(Dt=L,K=p(re),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r;return L}function dg(){var L;return t.charCodeAt(j)===59?(L=h,j++):(L=r,ct===0&&Ct(E)),L===r&&(t.charCodeAt(j)===38?(L=I,j++):(L=r,ct===0&&Ct(v))),L}function Iu(){var L,K,re;return L=j,K=Aa(),K!==r?(re=Ew(),re===r&&(re=null),re!==r?(Dt=L,K=x(K,re),L=K):(j=L,L=r)):(j=L,L=r),L}function Ew(){var L,K,re,pe,Je,mt,fr;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=km(),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();if(pe!==r)if(Je=Iu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=C(re,Je),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r;return L}function km(){var L;return t.substr(j,2)===R?(L=R,j+=2):(L=r,ct===0&&Ct(N)),L===r&&(t.substr(j,2)===U?(L=U,j+=2):(L=r,ct===0&&Ct(V))),L}function Aa(){var L,K,re;return L=j,K=mg(),K!==r?(re=vc(),re===r&&(re=null),re!==r?(Dt=L,K=te(K,re),L=K):(j=L,L=r)):(j=L,L=r),L}function vc(){var L,K,re,pe,Je,mt,fr;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Bl(),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();if(pe!==r)if(Je=Aa(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=ae(re,Je),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r;return L}function Bl(){var L;return t.substr(j,2)===fe?(L=fe,j+=2):(L=r,ct===0&&Ct(ue)),L===r&&(t.charCodeAt(j)===124?(L=me,j++):(L=r,ct===0&&Ct(he))),L}function Bu(){var L,K,re,pe,Je,mt;if(L=j,K=wg(),K!==r)if(t.charCodeAt(j)===61?(re=Be,j++):(re=r,ct===0&&Ct(we)),re!==r)if(pe=Go(),pe!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(Dt=L,K=g(K,pe),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r;else j=L,L=r;if(L===r)if(L=j,K=wg(),K!==r)if(t.charCodeAt(j)===61?(re=Be,j++):(re=r,ct===0&&Ct(we)),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();pe!==r?(Dt=L,K=Ee(K),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r;return L}function mg(){var L,K,re,pe,Je,mt,fr,Cr,yn,oi,Oi;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(j)===40?(re=Pe,j++):(re=r,ct===0&&Ct(ce)),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();if(pe!==r)if(Je=wu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(j)===41?(fr=ne,j++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=Ga();oi!==r;)yn.push(oi),oi=Ga();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=L,K=Ie(Je,yn),L=K):(j=L,L=r)}else j=L,L=r}else j=L,L=r}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r;if(L===r){for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(j)===123?(re=Fe,j++):(re=r,ct===0&&Ct(At)),re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();if(pe!==r)if(Je=wu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(j)===125?(fr=H,j++):(fr=r,ct===0&&Ct(at)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=Ga();oi!==r;)yn.push(oi),oi=Ga();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=L,K=Re(Je,yn),L=K):(j=L,L=r)}else j=L,L=r}else j=L,L=r}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r}else j=L,L=r;else j=L,L=r;if(L===r){for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],pe=Bu();pe!==r;)re.push(pe),pe=Bu();if(re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();if(pe!==r){if(Je=[],mt=dp(),mt!==r)for(;mt!==r;)Je.push(mt),mt=dp();else Je=r;if(Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=ke(re,Je),L=K):(j=L,L=r)}else j=L,L=r}else j=L,L=r}else j=L,L=r}else j=L,L=r;if(L===r){for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=Bu(),pe!==r)for(;pe!==r;)re.push(pe),pe=Bu();else re=r;if(re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();pe!==r?(Dt=L,K=xe(re),L=K):(j=L,L=r)}else j=L,L=r}else j=L,L=r}}}return L}function LA(){var L,K,re,pe,Je;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=mp(),pe!==r)for(;pe!==r;)re.push(pe),pe=mp();else re=r;if(re!==r){for(pe=[],Je=Qt();Je!==r;)pe.push(Je),Je=Qt();pe!==r?(Dt=L,K=He(re),L=K):(j=L,L=r)}else j=L,L=r}else j=L,L=r;return L}function dp(){var L,K,re;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=Ga(),re!==r?(Dt=L,K=Te(re),L=K):(j=L,L=r)):(j=L,L=r),L===r){for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=mp(),re!==r?(Dt=L,K=Te(re),L=K):(j=L,L=r)):(j=L,L=r)}return L}function Ga(){var L,K,re,pe,Je;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(Ve.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(qe)),re===r&&(re=null),re!==r?(pe=yg(),pe!==r?(Je=mp(),Je!==r?(Dt=L,K=b(re,pe,Je),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L}function yg(){var L;return t.substr(j,2)===w?(L=w,j+=2):(L=r,ct===0&&Ct(S)),L===r&&(t.substr(j,2)===y?(L=y,j+=2):(L=r,ct===0&&Ct(F)),L===r&&(t.charCodeAt(j)===62?(L=J,j++):(L=r,ct===0&&Ct(X)),L===r&&(t.substr(j,3)===Z?(L=Z,j+=3):(L=r,ct===0&&Ct(ie)),L===r&&(t.substr(j,2)===be?(L=be,j+=2):(L=r,ct===0&&Ct(Le)),L===r&&(t.charCodeAt(j)===60?(L=ot,j++):(L=r,ct===0&&Ct(dt))))))),L}function mp(){var L,K,re;for(L=j,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Go(),re!==r?(Dt=L,K=Te(re),L=K):(j=L,L=r)):(j=L,L=r),L}function Go(){var L,K,re;if(L=j,K=[],re=ws(),re!==r)for(;re!==r;)K.push(re),re=ws();else K=r;return K!==r&&(Dt=L,K=Gt(K)),L=K,L}function ws(){var L,K;return L=j,K=Ii(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=j,K=Qm(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=j,K=Fm(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=j,K=jo(),K!==r&&(Dt=L,K=$t(K)),L=K))),L}function Ii(){var L,K,re,pe;return L=j,t.substr(j,2)===bt?(K=bt,j+=2):(K=r,ct===0&&Ct(an)),K!==r?(re=ln(),re!==r?(t.charCodeAt(j)===39?(pe=Qr,j++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=L,K=br(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L}function Qm(){var L,K,re,pe;return L=j,t.charCodeAt(j)===39?(K=Qr,j++):(K=r,ct===0&&Ct(mr)),K!==r?(re=Ep(),re!==r?(t.charCodeAt(j)===39?(pe=Qr,j++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=L,K=br(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L}function Fm(){var L,K,re,pe;if(L=j,t.substr(j,2)===Wr?(K=Wr,j+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Dt=L,K=Ls()),L=K,L===r)if(L=j,t.charCodeAt(j)===34?(K=Ti,j++):(K=r,ct===0&&Ct(ps)),K!==r){for(re=[],pe=NA();pe!==r;)re.push(pe),pe=NA();re!==r?(t.charCodeAt(j)===34?(pe=Ti,j++):(pe=r,ct===0&&Ct(ps)),pe!==r?(Dt=L,K=io(re),L=K):(j=L,L=r)):(j=L,L=r)}else j=L,L=r;return L}function jo(){var L,K,re;if(L=j,K=[],re=yp(),re!==r)for(;re!==r;)K.push(re),re=yp();else K=r;return K!==r&&(Dt=L,K=io(K)),L=K,L}function NA(){var L,K;return L=j,K=jr(),K!==r&&(Dt=L,K=Si(K)),L=K,L===r&&(L=j,K=Cp(),K!==r&&(Dt=L,K=Ns(K)),L=K,L===r&&(L=j,K=Pc(),K!==r&&(Dt=L,K=so(K)),L=K,L===r&&(L=j,K=Eg(),K!==r&&(Dt=L,K=uc(K)),L=K))),L}function yp(){var L,K;return L=j,K=jr(),K!==r&&(Dt=L,K=uu(K)),L=K,L===r&&(L=j,K=Cp(),K!==r&&(Dt=L,K=cp(K)),L=K,L===r&&(L=j,K=Pc(),K!==r&&(Dt=L,K=up(K)),L=K,L===r&&(L=j,K=Cw(),K!==r&&(Dt=L,K=Os(K)),L=K,L===r&&(L=j,K=pa(),K!==r&&(Dt=L,K=uc(K)),L=K)))),L}function Ep(){var L,K,re;for(L=j,K=[],Dn.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(oo));re!==r;)K.push(re),Dn.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(oo));return K!==r&&(Dt=L,K=Ms(K)),L=K,L}function Eg(){var L,K,re;if(L=j,K=[],re=fa(),re===r&&(yl.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(El))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(yl.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(El)));else K=r;return K!==r&&(Dt=L,K=Ms(K)),L=K,L}function fa(){var L,K,re;return L=j,t.substr(j,2)===ao?(K=ao,j+=2):(K=r,ct===0&&Ct(zn)),K!==r&&(Dt=L,K=On()),L=K,L===r&&(L=j,t.charCodeAt(j)===92?(K=Li,j++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(rr)),re!==r?(Dt=L,K=Oe(re),L=K):(j=L,L=r)):(j=L,L=r)),L}function ln(){var L,K,re;for(L=j,K=[],re=Ao(),re===r&&(Dn.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(oo)));re!==r;)K.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(oo)));return K!==r&&(Dt=L,K=Ms(K)),L=K,L}function Ao(){var L,K,re;return L=j,t.substr(j,2)===ii?(K=ii,j+=2):(K=r,ct===0&&Ct(Ua)),K!==r&&(Dt=L,K=hr()),L=K,L===r&&(L=j,t.substr(j,2)===Ac?(K=Ac,j+=2):(K=r,ct===0&&Ct(Au)),K!==r&&(Dt=L,K=fc()),L=K,L===r&&(L=j,t.charCodeAt(j)===92?(K=Li,j++):(K=r,ct===0&&Ct(Mn)),K!==r?(Cl.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(DA)),re!==r?(Dt=L,K=fu(),L=K):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===Ce?(K=Ce,j+=2):(K=r,ct===0&&Ct(Rt)),K!==r&&(Dt=L,K=pc()),L=K,L===r&&(L=j,t.substr(j,2)===Hi?(K=Hi,j+=2):(K=r,ct===0&&Ct(pu)),K!==r&&(Dt=L,K=Yt()),L=K,L===r&&(L=j,t.substr(j,2)===wl?(K=wl,j+=2):(K=r,ct===0&&Ct(PA)),K!==r&&(Dt=L,K=Ap()),L=K,L===r&&(L=j,t.substr(j,2)===hc?(K=hc,j+=2):(K=r,ct===0&&Ct(SA)),K!==r&&(Dt=L,K=Qn()),L=K,L===r&&(L=j,t.substr(j,2)===hi?(K=hi,j+=2):(K=r,ct===0&&Ct(gc)),K!==r&&(Dt=L,K=bA()),L=K,L===r&&(L=j,t.charCodeAt(j)===92?(K=Li,j++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(Ni)),re!==r?(Dt=L,K=Oe(re),L=K):(j=L,L=r)):(j=L,L=r),L===r&&(L=OA()))))))))),L}function OA(){var L,K,re,pe,Je,mt,fr,Cr,yn,oi,Oi,Bg;return L=j,t.charCodeAt(j)===92?(K=Li,j++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=ja(),re!==r?(Dt=L,K=_o(re),L=K):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===Ze?(K=Ze,j+=2):(K=r,ct===0&&Ct(lo)),K!==r?(re=j,pe=j,Je=ja(),Je!==r?(mt=si(),mt!==r?(Je=[Je,mt],pe=Je):(j=pe,pe=r)):(j=pe,pe=r),pe===r&&(pe=ja()),pe!==r?re=t.substring(re,j):re=pe,re!==r?(Dt=L,K=_o(re),L=K):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===dc?(K=dc,j+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=j,pe=j,Je=si(),Je!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(Je=[Je,mt,fr,Cr],pe=Je):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r),pe!==r?re=t.substring(re,j):re=pe,re!==r?(Dt=L,K=_o(re),L=K):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===qi?(K=qi,j+=2):(K=r,ct===0&&Ct(gu)),K!==r?(re=j,pe=j,Je=si(),Je!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Bg=si(),Bg!==r?(Je=[Je,mt,fr,Cr,yn,oi,Oi,Bg],pe=Je):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r)):(j=pe,pe=r),pe!==r?re=t.substring(re,j):re=pe,re!==r?(Dt=L,K=xA(re),L=K):(j=L,L=r)):(j=L,L=r)))),L}function ja(){var L;return Ha.test(t.charAt(j))?(L=t.charAt(j),j++):(L=r,ct===0&&Ct(mc)),L}function si(){var L;return hs.test(t.charAt(j))?(L=t.charAt(j),j++):(L=r,ct===0&&Ct(Ht)),L}function pa(){var L,K,re,pe,Je;if(L=j,K=[],re=j,t.charCodeAt(j)===92?(pe=Li,j++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r),re===r&&(re=j,t.substr(j,2)===Ci?(pe=Ci,j+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=j,pe=j,ct++,Je=Rm(),ct--,Je===r?pe=void 0:(j=pe,pe=r),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=j,t.charCodeAt(j)===92?(pe=Li,j++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r),re===r&&(re=j,t.substr(j,2)===Ci?(pe=Ci,j+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=j,pe=j,ct++,Je=Rm(),ct--,Je===r?pe=void 0:(j=pe,pe=r),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r)));else K=r;return K!==r&&(Dt=L,K=Ms(K)),L=K,L}function Dc(){var L,K,re,pe,Je,mt;if(L=j,t.charCodeAt(j)===45?(K=Us,j++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(j)===43?(K=la,j++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Ve.test(t.charAt(j))?(pe=t.charAt(j),j++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Ve.test(t.charAt(j))?(pe=t.charAt(j),j++):(pe=r,ct===0&&Ct(qe));else re=r;if(re!==r)if(t.charCodeAt(j)===46?(pe=wi,j++):(pe=r,ct===0&&Ct(gs)),pe!==r){if(Je=[],Ve.test(t.charAt(j))?(mt=t.charAt(j),j++):(mt=r,ct===0&&Ct(qe)),mt!==r)for(;mt!==r;)Je.push(mt),Ve.test(t.charAt(j))?(mt=t.charAt(j),j++):(mt=r,ct===0&&Ct(qe));else Je=r;Je!==r?(Dt=L,K=ds(K,re,Je),L=K):(j=L,L=r)}else j=L,L=r;else j=L,L=r}else j=L,L=r;if(L===r){if(L=j,t.charCodeAt(j)===45?(K=Us,j++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(j)===43?(K=la,j++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Ve.test(t.charAt(j))?(pe=t.charAt(j),j++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Ve.test(t.charAt(j))?(pe=t.charAt(j),j++):(pe=r,ct===0&&Ct(qe));else re=r;re!==r?(Dt=L,K=ms(K,re),L=K):(j=L,L=r)}else j=L,L=r;if(L===r&&(L=j,K=Pc(),K!==r&&(Dt=L,K=_s(K)),L=K,L===r&&(L=j,K=Ya(),K!==r&&(Dt=L,K=Un(K)),L=K,L===r)))if(L=j,t.charCodeAt(j)===40?(K=Pe,j++):(K=r,ct===0&&Ct(ce)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(t.charCodeAt(j)===41?(mt=ne,j++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=L,K=Pn(pe),L=K):(j=L,L=r)):(j=L,L=r)}else j=L,L=r;else j=L,L=r}else j=L,L=r}return L}function vl(){var L,K,re,pe,Je,mt,fr,Cr;if(L=j,K=Dc(),K!==r){for(re=[],pe=j,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(j)===42?(mt=ys,j++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(j)===47?(mt=tt,j++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Dc(),Cr!==r?(Dt=pe,Je=ir(K,mt,Cr),pe=Je):(j=pe,pe=r)):(j=pe,pe=r)}else j=pe,pe=r;else j=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=j,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(j)===42?(mt=ys,j++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(j)===47?(mt=tt,j++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Dc(),Cr!==r?(Dt=pe,Je=ir(K,mt,Cr),pe=Je):(j=pe,pe=r)):(j=pe,pe=r)}else j=pe,pe=r;else j=pe,pe=r}re!==r?(Dt=L,K=$(K,re),L=K):(j=L,L=r)}else j=L,L=r;return L}function ts(){var L,K,re,pe,Je,mt,fr,Cr;if(L=j,K=vl(),K!==r){for(re=[],pe=j,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(j)===43?(mt=la,j++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(j)===45?(mt=Us,j++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vl(),Cr!==r?(Dt=pe,Je=ye(K,mt,Cr),pe=Je):(j=pe,pe=r)):(j=pe,pe=r)}else j=pe,pe=r;else j=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=j,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(j)===43?(mt=la,j++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(j)===45?(mt=Us,j++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vl(),Cr!==r?(Dt=pe,Je=ye(K,mt,Cr),pe=Je):(j=pe,pe=r)):(j=pe,pe=r)}else j=pe,pe=r;else j=pe,pe=r}re!==r?(Dt=L,K=$(K,re),L=K):(j=L,L=r)}else j=L,L=r;return L}function jr(){var L,K,re,pe,Je,mt;if(L=j,t.substr(j,3)===Ne?(K=Ne,j+=3):(K=r,ct===0&&Ct(pt)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(t.substr(j,2)===ht?(mt=ht,j+=2):(mt=r,ct===0&&Ct(Tt)),mt!==r?(Dt=L,K=er(pe),L=K):(j=L,L=r)):(j=L,L=r)}else j=L,L=r;else j=L,L=r}else j=L,L=r;return L}function Cp(){var L,K,re,pe;return L=j,t.substr(j,2)===$r?(K=$r,j+=2):(K=r,ct===0&&Ct(Gi)),K!==r?(re=wu(),re!==r?(t.charCodeAt(j)===41?(pe=ne,j++):(pe=r,ct===0&&Ct(ee)),pe!==r?(Dt=L,K=es(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L}function Pc(){var L,K,re,pe,Je,mt;return L=j,t.substr(j,2)===bi?(K=bi,j+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ya(),re!==r?(t.substr(j,2)===kA?(pe=kA,j+=2):(pe=r,ct===0&&Ct(QA)),pe!==r?(Je=LA(),Je!==r?(t.charCodeAt(j)===125?(mt=H,j++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=L,K=fp(re,Je),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===bi?(K=bi,j+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ya(),re!==r?(t.substr(j,3)===sg?(pe=sg,j+=3):(pe=r,ct===0&&Ct(du)),pe!==r?(Dt=L,K=og(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===bi?(K=bi,j+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ya(),re!==r?(t.substr(j,2)===mu?(pe=mu,j+=2):(pe=r,ct===0&&Ct(uo)),pe!==r?(Je=LA(),Je!==r?(t.charCodeAt(j)===125?(mt=H,j++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=L,K=FA(re,Je),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===bi?(K=bi,j+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ya(),re!==r?(t.substr(j,3)===yc?(pe=yc,j+=3):(pe=r,ct===0&&Ct(ca)),pe!==r?(Dt=L,K=ag(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.substr(j,2)===bi?(K=bi,j+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ya(),re!==r?(t.charCodeAt(j)===125?(pe=H,j++):(pe=r,ct===0&&Ct(at)),pe!==r?(Dt=L,K=Ec(re),L=K):(j=L,L=r)):(j=L,L=r)):(j=L,L=r),L===r&&(L=j,t.charCodeAt(j)===36?(K=Sm,j++):(K=r,ct===0&&Ct(lg)),K!==r?(re=Ya(),re!==r?(Dt=L,K=Ec(re),L=K):(j=L,L=r)):(j=L,L=r)))))),L}function Cw(){var L,K,re;return L=j,K=Cg(),K!==r?(Dt=j,re=ei(K),re?re=void 0:re=r,re!==r?(Dt=L,K=pp(K),L=K):(j=L,L=r)):(j=L,L=r),L}function Cg(){var L,K,re,pe,Je;if(L=j,K=[],re=j,pe=j,ct++,Je=Ig(),ct--,Je===r?pe=void 0:(j=pe,pe=r),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r),re!==r)for(;re!==r;)K.push(re),re=j,pe=j,ct++,Je=Ig(),ct--,Je===r?pe=void 0:(j=pe,pe=r),pe!==r?(t.length>j?(Je=t.charAt(j),j++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,pe=Oe(Je),re=pe):(j=re,re=r)):(j=re,re=r);else K=r;return K!==r&&(Dt=L,K=Ms(K)),L=K,L}function wg(){var L,K,re;if(L=j,K=[],cg.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(RA)),re!==r)for(;re!==r;)K.push(re),cg.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(RA));else K=r;return K!==r&&(Dt=L,K=Hs()),L=K,L}function Ya(){var L,K,re;if(L=j,K=[],yu.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(qa)),re!==r)for(;re!==r;)K.push(re),yu.test(t.charAt(j))?(re=t.charAt(j),j++):(re=r,ct===0&&Ct(qa));else K=r;return K!==r&&(Dt=L,K=Hs()),L=K,L}function Rm(){var L;return ji.test(t.charAt(j))?(L=t.charAt(j),j++):(L=r,ct===0&&Ct(ua)),L}function Ig(){var L;return Eu.test(t.charAt(j))?(L=t.charAt(j),j++):(L=r,ct===0&&Ct(Es)),L}function Qt(){var L,K;if(L=[],Cc.test(t.charAt(j))?(K=t.charAt(j),j++):(K=r,ct===0&&Ct(wc)),K!==r)for(;K!==r;)L.push(K),Cc.test(t.charAt(j))?(K=t.charAt(j),j++):(K=r,ct===0&&Ct(wc));else L=r;return L}if(Cu=a(),Cu!==r&&j===t.length)return Cu;throw Cu!==r&&j!1}){try{return(0,$Y.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 cy(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${ND(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function ND(t){return`${uy(t.chain)}${t.then?` ${oT(t.then)}`:""}`}function oT(t){return`${t.type} ${ND(t.line)}`}function uy(t){return`${lT(t)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${uy(t.chain)}`}function lT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>TD(e)).join(" ")} `:""}${t.args.map(e=>cT(e)).join(" ")}`;case"subshell":return`(${cy(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Vw(e)).join(" ")}`:""}`;case"group":return`{ ${cy(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Vw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>TD(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function TD(t){return`${t.name}=${t.args[0]?Wg(t.args[0]):""}`}function cT(t){switch(t.type){case"redirection":return Vw(t);case"argument":return Wg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Vw(t){return`${t.subtype} ${t.args.map(e=>Wg(e)).join(" ")}`}function Wg(t){return t.segments.map(e=>uT(e)).join("")}function uT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,p8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`$(${cy(t.shell)})`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Wg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Wg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,f8e,tW,p8e,rW=Et(()=>{$Y=$e(ZY());eW=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),f8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,p8e=t=>f8e.get(t)??`"$'${tW(t)}'"`});var iW=_((Lbt,nW)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Kg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Kg)}h8e(Kg,Error);Kg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ife&&(fe=V,ue=[]),ue.push(qe))}function at(qe,b){return new Kg(qe,null,null,b)}function Re(qe,b,w){return new Kg(Kg.buildMessage(qe,b),qe,b,w)}function ke(){var qe,b,w,S;return qe=V,b=xe(),b!==r?(t.charCodeAt(V)===47?(w=n,V++):(w=r,me===0&&H(u)),w!==r?(S=xe(),S!==r?(te=qe,b=A(b,S),qe=b):(V=qe,qe=r)):(V=qe,qe=r)):(V=qe,qe=r),qe===r&&(qe=V,b=xe(),b!==r&&(te=qe,b=p(b)),qe=b),qe}function xe(){var qe,b,w,S;return qe=V,b=He(),b!==r?(t.charCodeAt(V)===64?(w=h,V++):(w=r,me===0&&H(E)),w!==r?(S=Ve(),S!==r?(te=qe,b=I(b,S),qe=b):(V=qe,qe=r)):(V=qe,qe=r)):(V=qe,qe=r),qe===r&&(qe=V,b=He(),b!==r&&(te=qe,b=v(b)),qe=b),qe}function He(){var qe,b,w,S,y;return qe=V,t.charCodeAt(V)===64?(b=h,V++):(b=r,me===0&&H(E)),b!==r?(w=Te(),w!==r?(t.charCodeAt(V)===47?(S=n,V++):(S=r,me===0&&H(u)),S!==r?(y=Te(),y!==r?(te=qe,b=x(),qe=b):(V=qe,qe=r)):(V=qe,qe=r)):(V=qe,qe=r)):(V=qe,qe=r),qe===r&&(qe=V,b=Te(),b!==r&&(te=qe,b=x()),qe=b),qe}function Te(){var qe,b,w;if(qe=V,b=[],C.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,me===0&&H(R)),w!==r)for(;w!==r;)b.push(w),C.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,me===0&&H(R));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}function Ve(){var qe,b,w;if(qe=V,b=[],N.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,me===0&&H(U)),w!==r)for(;w!==r;)b.push(w),N.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,me===0&&H(U));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}if(he=a(),he!==r&&V===t.length)return he;throw he!==r&&V{sW=$e(iW())});var Vg=_((Obt,zg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function d8e(t){return typeof t=="object"&&t!==null}function m8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function y8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(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||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=Jw});var AW=_((Ubt,uW)=>{"use strict";var cW=Vg();function AT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}AT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +`,!1),On=function(){return""},Li="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,ir=Is(["\\","$",'"',"`"],!1,!1),Oe=function(L){return L},ii="\\a",Ua=Br("\\a",!1),hr=function(){return"a"},Ac="\\b",Au=Br("\\b",!1),fc=function(){return"\b"},Cl=/^[Ee]/,PA=Is(["E","e"],!1,!1),fu=function(){return"\x1B"},we="\\f",Tt=Br("\\f",!1),pc=function(){return"\f"},Hi="\\n",pu=Br("\\n",!1),Yt=function(){return` +`},wl="\\r",DA=Br("\\r",!1),Ap=function(){return"\r"},hc="\\t",SA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",gc=Br("\\v",!1),bA=function(){return"\v"},sa=/^[\\'"?]/,Ni=Is(["\\","'",'"',"?"],!1,!1),Uo=function(L){return String.fromCharCode(parseInt(L,16))},Xe="\\x",ao=Br("\\x",!1),dc="\\u",hu=Br("\\u",!1),qi="\\U",gu=Br("\\U",!1),xA=function(L){return String.fromCodePoint(parseInt(L,16))},Ha=/^[0-7]/,mc=Is([["0","7"]],!1,!1),ds=/^[0-9a-fA-f]/,Ht=Is([["0","9"],["a","f"],["A","f"]],!1,!1),Rn=Ag(),Ci="{}",oa=Br("{}",!1),lo=function(){return"{}"},Hs="-",aa=Br("-",!1),la="+",_o=Br("+",!1),wi=".",ms=Br(".",!1),ys=function(L,K,re){return{type:"number",value:(L==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},Es=function(L,K){return{type:"number",value:(L==="-"?-1:1)*parseInt(K.join(""))}},qs=function(L){return{type:"variable",...L}},Un=function(L){return{type:"variable",name:L}},Dn=function(L){return L},Cs="*",We=Br("*",!1),tt="/",It=Br("/",!1),or=function(L,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(L,K){return K.reduce((re,pe)=>({left:re,...pe}),L)},ye=function(L,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Ne="$((",ft=Br("$((",!1),pt="))",Lt=Br("))",!1),rr=function(L){return L},$r="$(",Gi=Br("$(",!1),ts=function(L){return L},bi="${",Ho=Br("${",!1),kA=":-",QA=Br(":-",!1),fp=function(L,K){return{name:L,defaultValue:K}},sg=":-}",du=Br(":-}",!1),og=function(L){return{name:L,defaultValue:[]}},mu=":+",co=Br(":+",!1),RA=function(L,K){return{name:L,alternativeValue:K}},yc=":+}",ca=Br(":+}",!1),ag=function(L){return{name:L,alternativeValue:[]}},Ec=function(L){return{name:L}},Dm="$",lg=Br("$",!1),ei=function(L){return e.isGlobPattern(L)},pp=function(L){return L},cg=/^[a-zA-Z0-9_]/,FA=Is([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Gs=function(){return ug()},yu=/^[$@*?#a-zA-Z0-9_\-]/,qa=Is(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),ji=/^[()}<>$|&; \t"']/,ua=Is(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Eu=/^[<>&; \t"']/,ws=Is(["<",">","&",";"," "," ",'"',"'"],!1,!1),Cc=/^[ \t]/,wc=Is([" "," "],!1,!1),Y=0,Pt=0,Il=[{line:1,column:1}],xi=0,Ic=[],ct=0,Cu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ug(){return t.substring(Pt,Y)}function dw(){return Bc(Pt,Y)}function TA(L,K){throw K=K!==void 0?K:Bc(Pt,Y),hg([pg(L)],t.substring(Pt,Y),K)}function hp(L,K){throw K=K!==void 0?K:Bc(Pt,Y),Sm(L,K)}function Br(L,K){return{type:"literal",text:L,ignoreCase:K}}function Is(L,K,re){return{type:"class",parts:L,inverted:K,ignoreCase:re}}function Ag(){return{type:"any"}}function fg(){return{type:"end"}}function pg(L){return{type:"other",description:L}}function gp(L){var K=Il[L],re;if(K)return K;for(re=L-1;!Il[re];)re--;for(K=Il[re],K={line:K.line,column:K.column};rexi&&(xi=Y,Ic=[]),Ic.push(L))}function Sm(L,K){return new Yg(L,null,null,K)}function hg(L,K,re){return new Yg(Yg.buildMessage(L,K),L,K,re)}function gg(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=wu(),re===r&&(re=null),re!==r?(Pt=L,K=n(re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function wu(){var L,K,re,pe,Ve;if(L=Y,K=Iu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=dg(),pe!==r?(Ve=bm(),Ve===r&&(Ve=null),Ve!==r?(Pt=L,K=u(K,pe,Ve),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;if(L===r)if(L=Y,K=Iu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=dg(),pe===r&&(pe=null),pe!==r?(Pt=L,K=A(K,pe),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;return L}function bm(){var L,K,re,pe,Ve;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=wu(),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();pe!==r?(Pt=L,K=p(re),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;return L}function dg(){var L;return t.charCodeAt(Y)===59?(L=h,Y++):(L=r,ct===0&&Ct(E)),L===r&&(t.charCodeAt(Y)===38?(L=I,Y++):(L=r,ct===0&&Ct(v))),L}function Iu(){var L,K,re;return L=Y,K=Aa(),K!==r?(re=mw(),re===r&&(re=null),re!==r?(Pt=L,K=x(K,re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function mw(){var L,K,re,pe,Ve,mt,fr;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=xm(),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();if(pe!==r)if(Ve=Iu(),Ve!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Pt=L,K=C(re,Ve),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;return L}function xm(){var L;return t.substr(Y,2)===F?(L=F,Y+=2):(L=r,ct===0&&Ct(N)),L===r&&(t.substr(Y,2)===U?(L=U,Y+=2):(L=r,ct===0&&Ct(V))),L}function Aa(){var L,K,re;return L=Y,K=mg(),K!==r?(re=vc(),re===r&&(re=null),re!==r?(Pt=L,K=te(K,re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function vc(){var L,K,re,pe,Ve,mt,fr;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Bl(),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();if(pe!==r)if(Ve=Aa(),Ve!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Pt=L,K=le(re,Ve),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;return L}function Bl(){var L;return t.substr(Y,2)===ae?(L=ae,Y+=2):(L=r,ct===0&&Ct(ce)),L===r&&(t.charCodeAt(Y)===124?(L=Ce,Y++):(L=r,ct===0&&Ct(de))),L}function Bu(){var L,K,re,pe,Ve,mt;if(L=Y,K=wg(),K!==r)if(t.charCodeAt(Y)===61?(re=Ie,Y++):(re=r,ct===0&&Ct(Ee)),re!==r)if(pe=qo(),pe!==r){for(Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();Ve!==r?(Pt=L,K=g(K,pe),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;else Y=L,L=r;if(L===r)if(L=Y,K=wg(),K!==r)if(t.charCodeAt(Y)===61?(re=Ie,Y++):(re=r,ct===0&&Ct(Ee)),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();pe!==r?(Pt=L,K=me(K),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;return L}function mg(){var L,K,re,pe,Ve,mt,fr,Cr,yn,oi,Oi;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(Y)===40?(re=De,Y++):(re=r,ct===0&&Ct(he)),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();if(pe!==r)if(Ve=wu(),Ve!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(Y)===41?(fr=ne,Y++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=Ga();oi!==r;)yn.push(oi),oi=Ga();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Pt=L,K=Be(Ve,yn),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(Y)===123?(re=Te,Y++):(re=r,ct===0&&Ct(ht)),re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();if(pe!==r)if(Ve=wu(),Ve!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(Y)===125?(fr=H,Y++):(fr=r,ct===0&&Ct(at)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=Ga();oi!==r;)yn.push(oi),oi=Ga();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Pt=L,K=Re(Ve,yn),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],pe=Bu();pe!==r;)re.push(pe),pe=Bu();if(re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();if(pe!==r){if(Ve=[],mt=dp(),mt!==r)for(;mt!==r;)Ve.push(mt),mt=dp();else Ve=r;if(Ve!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Pt=L,K=Qe(re,Ve),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=Bu(),pe!==r)for(;pe!==r;)re.push(pe),pe=Bu();else re=r;if(re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();pe!==r?(Pt=L,K=xe(re),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}}}return L}function LA(){var L,K,re,pe,Ve;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=mp(),pe!==r)for(;pe!==r;)re.push(pe),pe=mp();else re=r;if(re!==r){for(pe=[],Ve=Qt();Ve!==r;)pe.push(Ve),Ve=Qt();pe!==r?(Pt=L,K=je(re),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r;return L}function dp(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=Ga(),re!==r?(Pt=L,K=be(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=mp(),re!==r?(Pt=L,K=be(re),L=K):(Y=L,L=r)):(Y=L,L=r)}return L}function Ga(){var L,K,re,pe,Ve;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?($e.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(_e)),re===r&&(re=null),re!==r?(pe=yg(),pe!==r?(Ve=mp(),Ve!==r?(Pt=L,K=b(re,pe,Ve),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function yg(){var L;return t.substr(Y,2)===w?(L=w,Y+=2):(L=r,ct===0&&Ct(S)),L===r&&(t.substr(Y,2)===y?(L=y,Y+=2):(L=r,ct===0&&Ct(R)),L===r&&(t.charCodeAt(Y)===62?(L=J,Y++):(L=r,ct===0&&Ct(X)),L===r&&(t.substr(Y,3)===Z?(L=Z,Y+=3):(L=r,ct===0&&Ct(ie)),L===r&&(t.substr(Y,2)===ke?(L=ke,Y+=2):(L=r,ct===0&&Ct(Le)),L===r&&(t.charCodeAt(Y)===60?(L=ot,Y++):(L=r,ct===0&&Ct(dt))))))),L}function mp(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=qo(),re!==r?(Pt=L,K=be(re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function qo(){var L,K,re;if(L=Y,K=[],re=Bs(),re!==r)for(;re!==r;)K.push(re),re=Bs();else K=r;return K!==r&&(Pt=L,K=Gt(K)),L=K,L}function Bs(){var L,K;return L=Y,K=Ii(),K!==r&&(Pt=L,K=tr(K)),L=K,L===r&&(L=Y,K=km(),K!==r&&(Pt=L,K=tr(K)),L=K,L===r&&(L=Y,K=Qm(),K!==r&&(Pt=L,K=tr(K)),L=K,L===r&&(L=Y,K=Go(),K!==r&&(Pt=L,K=tr(K)),L=K))),L}function Ii(){var L,K,re,pe;return L=Y,t.substr(Y,2)===bt?(K=bt,Y+=2):(K=r,ct===0&&Ct(ln)),K!==r?(re=cn(),re!==r?(t.charCodeAt(Y)===39?(pe=kr,Y++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Pt=L,K=br(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function km(){var L,K,re,pe;return L=Y,t.charCodeAt(Y)===39?(K=kr,Y++):(K=r,ct===0&&Ct(mr)),K!==r?(re=Ep(),re!==r?(t.charCodeAt(Y)===39?(pe=kr,Y++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Pt=L,K=br(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function Qm(){var L,K,re,pe;if(L=Y,t.substr(Y,2)===Kr?(K=Kr,Y+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Pt=L,K=Os()),L=K,L===r)if(L=Y,t.charCodeAt(Y)===34?(K=Ti,Y++):(K=r,ct===0&&Ct(gs)),K!==r){for(re=[],pe=NA();pe!==r;)re.push(pe),pe=NA();re!==r?(t.charCodeAt(Y)===34?(pe=Ti,Y++):(pe=r,ct===0&&Ct(gs)),pe!==r?(Pt=L,K=no(re),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;return L}function Go(){var L,K,re;if(L=Y,K=[],re=yp(),re!==r)for(;re!==r;)K.push(re),re=yp();else K=r;return K!==r&&(Pt=L,K=no(K)),L=K,L}function NA(){var L,K;return L=Y,K=Yr(),K!==r&&(Pt=L,K=Si(K)),L=K,L===r&&(L=Y,K=Cp(),K!==r&&(Pt=L,K=Ms(K)),L=K,L===r&&(L=Y,K=Dc(),K!==r&&(Pt=L,K=io(K)),L=K,L===r&&(L=Y,K=Eg(),K!==r&&(Pt=L,K=uc(K)),L=K))),L}function yp(){var L,K;return L=Y,K=Yr(),K!==r&&(Pt=L,K=uu(K)),L=K,L===r&&(L=Y,K=Cp(),K!==r&&(Pt=L,K=cp(K)),L=K,L===r&&(L=Y,K=Dc(),K!==r&&(Pt=L,K=up(K)),L=K,L===r&&(L=Y,K=yw(),K!==r&&(Pt=L,K=Us(K)),L=K,L===r&&(L=Y,K=pa(),K!==r&&(Pt=L,K=uc(K)),L=K)))),L}function Ep(){var L,K,re;for(L=Y,K=[],Pn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(so));re!==r;)K.push(re),Pn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(so));return K!==r&&(Pt=L,K=_s(K)),L=K,L}function Eg(){var L,K,re;if(L=Y,K=[],re=fa(),re===r&&(yl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(El))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(yl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(El)));else K=r;return K!==r&&(Pt=L,K=_s(K)),L=K,L}function fa(){var L,K,re;return L=Y,t.substr(Y,2)===oo?(K=oo,Y+=2):(K=r,ct===0&&Ct(zn)),K!==r&&(Pt=L,K=On()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(ir)),re!==r?(Pt=L,K=Oe(re),L=K):(Y=L,L=r)):(Y=L,L=r)),L}function cn(){var L,K,re;for(L=Y,K=[],re=uo(),re===r&&(Pn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(so)));re!==r;)K.push(re),re=uo(),re===r&&(Pn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(so)));return K!==r&&(Pt=L,K=_s(K)),L=K,L}function uo(){var L,K,re;return L=Y,t.substr(Y,2)===ii?(K=ii,Y+=2):(K=r,ct===0&&Ct(Ua)),K!==r&&(Pt=L,K=hr()),L=K,L===r&&(L=Y,t.substr(Y,2)===Ac?(K=Ac,Y+=2):(K=r,ct===0&&Ct(Au)),K!==r&&(Pt=L,K=fc()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(Cl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(PA)),re!==r?(Pt=L,K=fu(),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===we?(K=we,Y+=2):(K=r,ct===0&&Ct(Tt)),K!==r&&(Pt=L,K=pc()),L=K,L===r&&(L=Y,t.substr(Y,2)===Hi?(K=Hi,Y+=2):(K=r,ct===0&&Ct(pu)),K!==r&&(Pt=L,K=Yt()),L=K,L===r&&(L=Y,t.substr(Y,2)===wl?(K=wl,Y+=2):(K=r,ct===0&&Ct(DA)),K!==r&&(Pt=L,K=Ap()),L=K,L===r&&(L=Y,t.substr(Y,2)===hc?(K=hc,Y+=2):(K=r,ct===0&&Ct(SA)),K!==r&&(Pt=L,K=Qn()),L=K,L===r&&(L=Y,t.substr(Y,2)===hi?(K=hi,Y+=2):(K=r,ct===0&&Ct(gc)),K!==r&&(Pt=L,K=bA()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(Ni)),re!==r?(Pt=L,K=Oe(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=OA()))))))))),L}function OA(){var L,K,re,pe,Ve,mt,fr,Cr,yn,oi,Oi,Bg;return L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=ja(),re!==r?(Pt=L,K=Uo(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===Xe?(K=Xe,Y+=2):(K=r,ct===0&&Ct(ao)),K!==r?(re=Y,pe=Y,Ve=ja(),Ve!==r?(mt=si(),mt!==r?(Ve=[Ve,mt],pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r),pe===r&&(pe=ja()),pe!==r?re=t.substring(re,Y):re=pe,re!==r?(Pt=L,K=Uo(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===dc?(K=dc,Y+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=Y,pe=Y,Ve=si(),Ve!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(Ve=[Ve,mt,fr,Cr],pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r),pe!==r?re=t.substring(re,Y):re=pe,re!==r?(Pt=L,K=Uo(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===qi?(K=qi,Y+=2):(K=r,ct===0&&Ct(gu)),K!==r?(re=Y,pe=Y,Ve=si(),Ve!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Bg=si(),Bg!==r?(Ve=[Ve,mt,fr,Cr,yn,oi,Oi,Bg],pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r)):(Y=pe,pe=r),pe!==r?re=t.substring(re,Y):re=pe,re!==r?(Pt=L,K=xA(re),L=K):(Y=L,L=r)):(Y=L,L=r)))),L}function ja(){var L;return Ha.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(mc)),L}function si(){var L;return ds.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(Ht)),L}function pa(){var L,K,re,pe,Ve;if(L=Y,K=[],re=Y,t.charCodeAt(Y)===92?(pe=Li,Y++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Ci?(pe=Ci,Y+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Pt=re,pe=lo()),re=pe,re===r&&(re=Y,pe=Y,ct++,Ve=Rm(),ct--,Ve===r?pe=void 0:(Y=pe,pe=r),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=Y,t.charCodeAt(Y)===92?(pe=Li,Y++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Ci?(pe=Ci,Y+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Pt=re,pe=lo()),re=pe,re===r&&(re=Y,pe=Y,ct++,Ve=Rm(),ct--,Ve===r?pe=void 0:(Y=pe,pe=r),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r)));else K=r;return K!==r&&(Pt=L,K=_s(K)),L=K,L}function Pc(){var L,K,re,pe,Ve,mt;if(L=Y,t.charCodeAt(Y)===45?(K=Hs,Y++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(Y)===43?(K=la,Y++):(K=r,ct===0&&Ct(_o))),K===r&&(K=null),K!==r){if(re=[],$e.test(t.charAt(Y))?(pe=t.charAt(Y),Y++):(pe=r,ct===0&&Ct(_e)),pe!==r)for(;pe!==r;)re.push(pe),$e.test(t.charAt(Y))?(pe=t.charAt(Y),Y++):(pe=r,ct===0&&Ct(_e));else re=r;if(re!==r)if(t.charCodeAt(Y)===46?(pe=wi,Y++):(pe=r,ct===0&&Ct(ms)),pe!==r){if(Ve=[],$e.test(t.charAt(Y))?(mt=t.charAt(Y),Y++):(mt=r,ct===0&&Ct(_e)),mt!==r)for(;mt!==r;)Ve.push(mt),$e.test(t.charAt(Y))?(mt=t.charAt(Y),Y++):(mt=r,ct===0&&Ct(_e));else Ve=r;Ve!==r?(Pt=L,K=ys(K,re,Ve),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;if(L===r){if(L=Y,t.charCodeAt(Y)===45?(K=Hs,Y++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(Y)===43?(K=la,Y++):(K=r,ct===0&&Ct(_o))),K===r&&(K=null),K!==r){if(re=[],$e.test(t.charAt(Y))?(pe=t.charAt(Y),Y++):(pe=r,ct===0&&Ct(_e)),pe!==r)for(;pe!==r;)re.push(pe),$e.test(t.charAt(Y))?(pe=t.charAt(Y),Y++):(pe=r,ct===0&&Ct(_e));else re=r;re!==r?(Pt=L,K=Es(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;if(L===r&&(L=Y,K=Dc(),K!==r&&(Pt=L,K=qs(K)),L=K,L===r&&(L=Y,K=Ya(),K!==r&&(Pt=L,K=Un(K)),L=K,L===r)))if(L=Y,t.charCodeAt(Y)===40?(K=De,Y++):(K=r,ct===0&&Ct(he)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=rs(),pe!==r){for(Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();Ve!==r?(t.charCodeAt(Y)===41?(mt=ne,Y++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Pt=L,K=Dn(pe),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r}return L}function vl(){var L,K,re,pe,Ve,mt,fr,Cr;if(L=Y,K=Pc(),K!==r){for(re=[],pe=Y,Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();if(Ve!==r)if(t.charCodeAt(Y)===42?(mt=Cs,Y++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(Y)===47?(mt=tt,Y++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Pc(),Cr!==r?(Pt=pe,Ve=or(K,mt,Cr),pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)}else Y=pe,pe=r;else Y=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=Y,Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();if(Ve!==r)if(t.charCodeAt(Y)===42?(mt=Cs,Y++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(Y)===47?(mt=tt,Y++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Pc(),Cr!==r?(Pt=pe,Ve=or(K,mt,Cr),pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)}else Y=pe,pe=r;else Y=pe,pe=r}re!==r?(Pt=L,K=$(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;return L}function rs(){var L,K,re,pe,Ve,mt,fr,Cr;if(L=Y,K=vl(),K!==r){for(re=[],pe=Y,Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();if(Ve!==r)if(t.charCodeAt(Y)===43?(mt=la,Y++):(mt=r,ct===0&&Ct(_o)),mt===r&&(t.charCodeAt(Y)===45?(mt=Hs,Y++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vl(),Cr!==r?(Pt=pe,Ve=ye(K,mt,Cr),pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)}else Y=pe,pe=r;else Y=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=Y,Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();if(Ve!==r)if(t.charCodeAt(Y)===43?(mt=la,Y++):(mt=r,ct===0&&Ct(_o)),mt===r&&(t.charCodeAt(Y)===45?(mt=Hs,Y++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vl(),Cr!==r?(Pt=pe,Ve=ye(K,mt,Cr),pe=Ve):(Y=pe,pe=r)):(Y=pe,pe=r)}else Y=pe,pe=r;else Y=pe,pe=r}re!==r?(Pt=L,K=$(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;return L}function Yr(){var L,K,re,pe,Ve,mt;if(L=Y,t.substr(Y,3)===Ne?(K=Ne,Y+=3):(K=r,ct===0&&Ct(ft)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=rs(),pe!==r){for(Ve=[],mt=Qt();mt!==r;)Ve.push(mt),mt=Qt();Ve!==r?(t.substr(Y,2)===pt?(mt=pt,Y+=2):(mt=r,ct===0&&Ct(Lt)),mt!==r?(Pt=L,K=rr(pe),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;return L}function Cp(){var L,K,re,pe;return L=Y,t.substr(Y,2)===$r?(K=$r,Y+=2):(K=r,ct===0&&Ct(Gi)),K!==r?(re=wu(),re!==r?(t.charCodeAt(Y)===41?(pe=ne,Y++):(pe=r,ct===0&&Ct(ee)),pe!==r?(Pt=L,K=ts(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function Dc(){var L,K,re,pe,Ve,mt;return L=Y,t.substr(Y,2)===bi?(K=bi,Y+=2):(K=r,ct===0&&Ct(Ho)),K!==r?(re=Ya(),re!==r?(t.substr(Y,2)===kA?(pe=kA,Y+=2):(pe=r,ct===0&&Ct(QA)),pe!==r?(Ve=LA(),Ve!==r?(t.charCodeAt(Y)===125?(mt=H,Y++):(mt=r,ct===0&&Ct(at)),mt!==r?(Pt=L,K=fp(re,Ve),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===bi?(K=bi,Y+=2):(K=r,ct===0&&Ct(Ho)),K!==r?(re=Ya(),re!==r?(t.substr(Y,3)===sg?(pe=sg,Y+=3):(pe=r,ct===0&&Ct(du)),pe!==r?(Pt=L,K=og(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===bi?(K=bi,Y+=2):(K=r,ct===0&&Ct(Ho)),K!==r?(re=Ya(),re!==r?(t.substr(Y,2)===mu?(pe=mu,Y+=2):(pe=r,ct===0&&Ct(co)),pe!==r?(Ve=LA(),Ve!==r?(t.charCodeAt(Y)===125?(mt=H,Y++):(mt=r,ct===0&&Ct(at)),mt!==r?(Pt=L,K=RA(re,Ve),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===bi?(K=bi,Y+=2):(K=r,ct===0&&Ct(Ho)),K!==r?(re=Ya(),re!==r?(t.substr(Y,3)===yc?(pe=yc,Y+=3):(pe=r,ct===0&&Ct(ca)),pe!==r?(Pt=L,K=ag(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===bi?(K=bi,Y+=2):(K=r,ct===0&&Ct(Ho)),K!==r?(re=Ya(),re!==r?(t.charCodeAt(Y)===125?(pe=H,Y++):(pe=r,ct===0&&Ct(at)),pe!==r?(Pt=L,K=Ec(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.charCodeAt(Y)===36?(K=Dm,Y++):(K=r,ct===0&&Ct(lg)),K!==r?(re=Ya(),re!==r?(Pt=L,K=Ec(re),L=K):(Y=L,L=r)):(Y=L,L=r)))))),L}function yw(){var L,K,re;return L=Y,K=Cg(),K!==r?(Pt=Y,re=ei(K),re?re=void 0:re=r,re!==r?(Pt=L,K=pp(K),L=K):(Y=L,L=r)):(Y=L,L=r),L}function Cg(){var L,K,re,pe,Ve;if(L=Y,K=[],re=Y,pe=Y,ct++,Ve=Ig(),ct--,Ve===r?pe=void 0:(Y=pe,pe=r),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r),re!==r)for(;re!==r;)K.push(re),re=Y,pe=Y,ct++,Ve=Ig(),ct--,Ve===r?pe=void 0:(Y=pe,pe=r),pe!==r?(t.length>Y?(Ve=t.charAt(Y),Y++):(Ve=r,ct===0&&Ct(Rn)),Ve!==r?(Pt=re,pe=Oe(Ve),re=pe):(Y=re,re=r)):(Y=re,re=r);else K=r;return K!==r&&(Pt=L,K=_s(K)),L=K,L}function wg(){var L,K,re;if(L=Y,K=[],cg.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)K.push(re),cg.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(FA));else K=r;return K!==r&&(Pt=L,K=Gs()),L=K,L}function Ya(){var L,K,re;if(L=Y,K=[],yu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(qa)),re!==r)for(;re!==r;)K.push(re),yu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(qa));else K=r;return K!==r&&(Pt=L,K=Gs()),L=K,L}function Rm(){var L;return ji.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(ua)),L}function Ig(){var L;return Eu.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(ws)),L}function Qt(){var L,K;if(L=[],Cc.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,ct===0&&Ct(wc)),K!==r)for(;K!==r;)L.push(K),Cc.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,ct===0&&Ct(wc));else L=r;return L}if(Cu=a(),Cu!==r&&Y===t.length)return Cu;throw Cu!==r&&Y!1}){try{return(0,$Y.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 ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${OP(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function OP(t){return`${cy(t.chain)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${OP(t.line)}`}function cy(t){return`${cT(t)}${t.then?` ${lT(t.then)}`:""}`}function lT(t){return`${t.type} ${cy(t.chain)}`}function cT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>LP(e)).join(" ")} `:""}${t.args.map(e=>uT(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>LP(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function LP(t){return`${t.name}=${t.args[0]?Wg(t.args[0]):""}`}function uT(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Wg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Wg(e)).join(" ")}`}function Wg(t){return t.segments.map(e=>AT(e)).join("")}function AT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,p8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`$(${ly(t.shell)})`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Wg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Wg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${MP(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function MP(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(MP(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,f8e,tW,p8e,rW=Et(()=>{$Y=Ze(ZY());eW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),f8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,p8e=t=>f8e.get(t)??`"$'${tW(t)}'"`});var iW=_((Obt,nW)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Kg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Kg)}h8e(Kg,Error);Kg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Iae&&(ae=V,ce=[]),ce.push(_e))}function at(_e,b){return new Kg(_e,null,null,b)}function Re(_e,b,w){return new Kg(Kg.buildMessage(_e,b),_e,b,w)}function Qe(){var _e,b,w,S;return _e=V,b=xe(),b!==r?(t.charCodeAt(V)===47?(w=n,V++):(w=r,Ce===0&&H(u)),w!==r?(S=xe(),S!==r?(te=_e,b=A(b,S),_e=b):(V=_e,_e=r)):(V=_e,_e=r)):(V=_e,_e=r),_e===r&&(_e=V,b=xe(),b!==r&&(te=_e,b=p(b)),_e=b),_e}function xe(){var _e,b,w,S;return _e=V,b=je(),b!==r?(t.charCodeAt(V)===64?(w=h,V++):(w=r,Ce===0&&H(E)),w!==r?(S=$e(),S!==r?(te=_e,b=I(b,S),_e=b):(V=_e,_e=r)):(V=_e,_e=r)):(V=_e,_e=r),_e===r&&(_e=V,b=je(),b!==r&&(te=_e,b=v(b)),_e=b),_e}function je(){var _e,b,w,S,y;return _e=V,t.charCodeAt(V)===64?(b=h,V++):(b=r,Ce===0&&H(E)),b!==r?(w=be(),w!==r?(t.charCodeAt(V)===47?(S=n,V++):(S=r,Ce===0&&H(u)),S!==r?(y=be(),y!==r?(te=_e,b=x(),_e=b):(V=_e,_e=r)):(V=_e,_e=r)):(V=_e,_e=r)):(V=_e,_e=r),_e===r&&(_e=V,b=be(),b!==r&&(te=_e,b=x()),_e=b),_e}function be(){var _e,b,w;if(_e=V,b=[],C.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,Ce===0&&H(F)),w!==r)for(;w!==r;)b.push(w),C.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,Ce===0&&H(F));else b=r;return b!==r&&(te=_e,b=x()),_e=b,_e}function $e(){var _e,b,w;if(_e=V,b=[],N.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,Ce===0&&H(U)),w!==r)for(;w!==r;)b.push(w),N.test(t.charAt(V))?(w=t.charAt(V),V++):(w=r,Ce===0&&H(U));else b=r;return b!==r&&(te=_e,b=x()),_e=b,_e}if(de=a(),de!==r&&V===t.length)return de;throw de!==r&&V{sW=Ze(iW())});var Vg=_((Ubt,zg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function d8e(t){return typeof t=="object"&&t!==null}function m8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function y8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function zw(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||""}zw.prototype=Object.create(Error.prototype);zw.prototype.constructor=zw;zw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=zw});var AW=_((Hbt,uW)=>{"use strict";var cW=Vg();function fT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}fT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r \x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),cW.repeat(" ",e)+o+A+n+` -`+cW.repeat(" ",e+this.position-a+o.length)+"^"};AT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: -`+r)),o};uW.exports=AT});var os=_((_bt,pW)=>{"use strict";var fW=Ay(),w8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],I8e=["scalar","sequence","mapping"];function B8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function v8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(w8e.indexOf(r)===-1)throw new fW('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=B8e(e.styleAliases||null),I8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=v8e});var Jg=_((Hbt,gW)=>{"use strict";var hW=Vg(),_D=Ay(),D8e=os();function fT(t,e,r){var o=[];return t.include.forEach(function(a){r=fT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function P8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var S8e=os();dW.exports=new S8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((Gbt,yW)=>{"use strict";var b8e=os();yW.exports=new b8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((jbt,CW)=>{"use strict";var x8e=os();CW.exports=new x8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var HD=_((Ybt,IW)=>{"use strict";var k8e=Jg();IW.exports=new k8e({explicit:[mW(),EW(),wW()]})});var vW=_((Wbt,BW)=>{"use strict";var Q8e=os();function F8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function R8e(){return null}function T8e(t){return t===null}BW.exports=new Q8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:F8e,construct:R8e,predicate:T8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var PW=_((Kbt,DW)=>{"use strict";var L8e=os();function N8e(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 O8e(t){return t==="true"||t==="True"||t==="TRUE"}function M8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}DW.exports=new L8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:N8e,construct:O8e,predicate:M8e,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 bW=_((zbt,SW)=>{"use strict";var U8e=Vg(),_8e=os();function H8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function q8e(t){return 48<=t&&t<=55}function G8e(t){return 48<=t&&t<=57}function j8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((Vbt,kW)=>{"use strict";var xW=Vg(),K8e=os(),z8e=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 V8e(t){return!(t===null||!z8e.test(t)||t[t.length-1]==="_")}function J8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var X8e=/^[-+]?[0-9]+e/;function Z8e(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(xW.isNegativeZero(t))return"-0.0";return r=t.toString(10),X8e.test(r)?r.replace("e",".e"):r}function $8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||xW.isNegativeZero(t))}kW.exports=new K8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:V8e,construct:J8e,predicate:$8e,represent:Z8e,defaultStyle:"lowercase"})});var pT=_((Jbt,FW)=>{"use strict";var eHe=Jg();FW.exports=new eHe({include:[HD()],implicit:[vW(),PW(),bW(),QW()]})});var hT=_((Xbt,RW)=>{"use strict";var tHe=Jg();RW.exports=new tHe({include:[pT()]})});var OW=_((Zbt,NW)=>{"use strict";var rHe=os(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),LW=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 nHe(t){return t===null?!1:TW.exec(t)!==null||LW.exec(t)!==null}function iHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=TW.exec(t),e===null&&(e=LW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function sHe(t){return t.toISOString()}NW.exports=new rHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:nHe,construct:iHe,instanceOf:Date,represent:sHe})});var UW=_(($bt,MW)=>{"use strict";var oHe=os();function aHe(t){return t==="<<"||t===null}MW.exports=new oHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:aHe})});var qW=_((ext,HW)=>{"use strict";var Xg;try{_W=ve,Xg=_W("buffer").Buffer}catch{}var _W,lHe=os(),gT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function cHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=gT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function uHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=gT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Xg?Xg.from?Xg.from(A):new Xg(A):A}function AHe(t){var e="",r=0,o,a,n=t.length,u=gT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function fHe(t){return Xg&&Xg.isBuffer(t)}HW.exports=new lHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cHe,construct:uHe,predicate:fHe,represent:AHe})});var jW=_((rxt,GW)=>{"use strict";var pHe=os(),hHe=Object.prototype.hasOwnProperty,gHe=Object.prototype.toString;function dHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var yHe=os(),EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var IHe=os(),BHe=Object.prototype.hasOwnProperty;function vHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(BHe.call(r,e)&&r[e]!==null)return!1;return!0}function DHe(t){return t!==null?t:{}}KW.exports=new IHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:vHe,construct:DHe})});var py=_((sxt,VW)=>{"use strict";var PHe=Jg();VW.exports=new PHe({include:[hT()],implicit:[OW(),UW()],explicit:[qW(),jW(),WW(),zW()]})});var XW=_((oxt,JW)=>{"use strict";var SHe=os();function bHe(){return!0}function xHe(){}function kHe(){return""}function QHe(t){return typeof t>"u"}JW.exports=new SHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:bHe,construct:xHe,predicate:QHe,represent:kHe})});var $W=_((axt,ZW)=>{"use strict";var FHe=os();function RHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function THe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function LHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function NHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new FHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:RHe,construct:THe,predicate:NHe,represent:LHe})});var rK=_((lxt,tK)=>{"use strict";var qD;try{eK=ve,qD=eK("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var eK,OHe=os();function MHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.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 UHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function _He(t){return t.toString()}function HHe(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new OHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:MHe,construct:UHe,predicate:HHe,represent:_He})});var Xw=_((uxt,iK)=>{"use strict";var nK=Jg();iK.exports=nK.DEFAULT=new nK({include:[py()],explicit:[XW(),$W(),rK()]})});var BK=_((Axt,Zw)=>{"use strict";var yf=Vg(),AK=Ay(),qHe=AW(),fK=py(),GHe=Xw(),Wp=Object.prototype.hasOwnProperty,GD=1,pK=2,hK=3,jD=4,dT=1,jHe=2,sK=3,YHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,WHe=/[\x85\u2028\u2029]/,KHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function qu(t){return t===10||t===13}function $g(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function hy(t){return t===44||t===91||t===93||t===123||t===125}function zHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function VHe(t){return t===120?2:t===117?4:t===85?8:0}function JHe(t){return 48<=t&&t<=57?t-48:-1}function aK(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 XHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(Zg=0;Zg<256;Zg++)mK[Zg]=aK(Zg)?1:0,yK[Zg]=aK(Zg);var Zg;function ZHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||GHe,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 EK(t,e){return new AK(e,new qHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw EK(t,e)}function YD(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&YD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Wp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function Yp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=yf.repeat(` -`,e-1))}function $He(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,x;if(x=t.input.charCodeAt(t.position),Ia(x)||hy(x)||x===35||x===38||x===42||x===33||x===124||x===62||x===39||x===34||x===37||x===64||x===96||(x===63||x===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;x!==0;){if(x===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a))break}else if(x===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&WD(t)||r&&hy(x))break;if(qu(x))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,x=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(Yp(t,n,u,!1),yT(t,t.line-p),n=u=t.position,A=!1),$g(x)||(u=t.position+1),x=t.input.charCodeAt(++t.position)}return Yp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function e6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Yp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else qu(r)?(Yp(t,o,a,!0),yT(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&WD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function t6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return Yp(t,r,t.position,!0),t.position++,!0;if(A===92){if(Yp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),qu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=VHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=zHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=XHe(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else qu(A)?(Yp(t,r,o,!0),yT(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&WD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function r6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},x,C,R,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,I=!1,n=[];else if(N===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=x=R=null,h=E=!1,N===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,dy(t,e,GD,!1,!0),C=t.tag,x=t.result,Wi(t,!0,e),N=t.input.charCodeAt(t.position),(E||t.line===o)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),Wi(t,!0,e),dy(t,e,GD,!1,!0),R=t.result),I?gy(t,n,v,C,x,R):h?n.push(gy(t,null,v,C,x,R)):n.push(x),Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function n6e(t,e){var r,o,a=dT,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)dT===a?a=I===43?sK:jHe:Sr(t,"repeat of a chomping mode identifier");else if((E=JHe(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if($g(I)){do I=t.input.charCodeAt(++t.position);while($g(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!qu(I)&&I!==0)}for(;I!==0;){for(mT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),qu(I)){p++;continue}if(t.lineIndent{"use strict";var fW=uy(),w8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],I8e=["scalar","sequence","mapping"];function B8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function v8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(w8e.indexOf(r)===-1)throw new fW('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=B8e(e.styleAliases||null),I8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=v8e});var Jg=_((Gbt,gW)=>{"use strict";var hW=Vg(),HP=uy(),P8e=as();function pT(t,e,r){var o=[];return t.include.forEach(function(a){r=pT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function D8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var S8e=as();dW.exports=new S8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((Ybt,yW)=>{"use strict";var b8e=as();yW.exports=new b8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((Wbt,CW)=>{"use strict";var x8e=as();CW.exports=new x8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var qP=_((Kbt,IW)=>{"use strict";var k8e=Jg();IW.exports=new k8e({explicit:[mW(),EW(),wW()]})});var vW=_((zbt,BW)=>{"use strict";var Q8e=as();function R8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function F8e(){return null}function T8e(t){return t===null}BW.exports=new Q8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:R8e,construct:F8e,predicate:T8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var DW=_((Vbt,PW)=>{"use strict";var L8e=as();function N8e(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 O8e(t){return t==="true"||t==="True"||t==="TRUE"}function M8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}PW.exports=new L8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:N8e,construct:O8e,predicate:M8e,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 bW=_((Jbt,SW)=>{"use strict";var U8e=Vg(),_8e=as();function H8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function q8e(t){return 48<=t&&t<=55}function G8e(t){return 48<=t&&t<=57}function j8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((Xbt,kW)=>{"use strict";var xW=Vg(),K8e=as(),z8e=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 V8e(t){return!(t===null||!z8e.test(t)||t[t.length-1]==="_")}function J8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var X8e=/^[-+]?[0-9]+e/;function Z8e(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(xW.isNegativeZero(t))return"-0.0";return r=t.toString(10),X8e.test(r)?r.replace("e",".e"):r}function $8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||xW.isNegativeZero(t))}kW.exports=new K8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:V8e,construct:J8e,predicate:$8e,represent:Z8e,defaultStyle:"lowercase"})});var hT=_((Zbt,RW)=>{"use strict";var eHe=Jg();RW.exports=new eHe({include:[qP()],implicit:[vW(),DW(),bW(),QW()]})});var gT=_(($bt,FW)=>{"use strict";var tHe=Jg();FW.exports=new tHe({include:[hT()]})});var OW=_((ext,NW)=>{"use strict";var rHe=as(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),LW=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 nHe(t){return t===null?!1:TW.exec(t)!==null||LW.exec(t)!==null}function iHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=TW.exec(t),e===null&&(e=LW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function sHe(t){return t.toISOString()}NW.exports=new rHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:nHe,construct:iHe,instanceOf:Date,represent:sHe})});var UW=_((txt,MW)=>{"use strict";var oHe=as();function aHe(t){return t==="<<"||t===null}MW.exports=new oHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:aHe})});var qW=_((rxt,HW)=>{"use strict";var Xg;try{_W=ve,Xg=_W("buffer").Buffer}catch{}var _W,lHe=as(),dT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function cHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=dT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function uHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=dT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Xg?Xg.from?Xg.from(A):new Xg(A):A}function AHe(t){var e="",r=0,o,a,n=t.length,u=dT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function fHe(t){return Xg&&Xg.isBuffer(t)}HW.exports=new lHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cHe,construct:uHe,predicate:fHe,represent:AHe})});var jW=_((ixt,GW)=>{"use strict";var pHe=as(),hHe=Object.prototype.hasOwnProperty,gHe=Object.prototype.toString;function dHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var yHe=as(),EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var IHe=as(),BHe=Object.prototype.hasOwnProperty;function vHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(BHe.call(r,e)&&r[e]!==null)return!1;return!0}function PHe(t){return t!==null?t:{}}KW.exports=new IHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:vHe,construct:PHe})});var fy=_((axt,VW)=>{"use strict";var DHe=Jg();VW.exports=new DHe({include:[gT()],implicit:[OW(),UW()],explicit:[qW(),jW(),WW(),zW()]})});var XW=_((lxt,JW)=>{"use strict";var SHe=as();function bHe(){return!0}function xHe(){}function kHe(){return""}function QHe(t){return typeof t>"u"}JW.exports=new SHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:bHe,construct:xHe,predicate:QHe,represent:kHe})});var $W=_((cxt,ZW)=>{"use strict";var RHe=as();function FHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function THe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function LHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function NHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new RHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:LHe})});var rK=_((uxt,tK)=>{"use strict";var GP;try{eK=ve,GP=eK("esprima")}catch{typeof window<"u"&&(GP=window.esprima)}var eK,OHe=as();function MHe(t){if(t===null)return!1;try{var e="("+t+")",r=GP.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 UHe(t){var e="("+t+")",r=GP.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function _He(t){return t.toString()}function HHe(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new OHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:MHe,construct:UHe,predicate:HHe,represent:_He})});var Vw=_((fxt,iK)=>{"use strict";var nK=Jg();iK.exports=nK.DEFAULT=new nK({include:[fy()],explicit:[XW(),$W(),rK()]})});var BK=_((pxt,Jw)=>{"use strict";var yf=Vg(),AK=uy(),qHe=AW(),fK=fy(),GHe=Vw(),Wp=Object.prototype.hasOwnProperty,jP=1,pK=2,hK=3,YP=4,mT=1,jHe=2,sK=3,YHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,WHe=/[\x85\u2028\u2029]/,KHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function qu(t){return t===10||t===13}function $g(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function zHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function VHe(t){return t===120?2:t===117?4:t===85?8:0}function JHe(t){return 48<=t&&t<=57?t-48:-1}function aK(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 XHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(Zg=0;Zg<256;Zg++)mK[Zg]=aK(Zg)?1:0,yK[Zg]=aK(Zg);var Zg;function ZHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||GHe,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 EK(t,e){return new AK(e,new qHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw EK(t,e)}function WP(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WP(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Wp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function Yp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=yf.repeat(` +`,e-1))}function $He(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,x;if(x=t.input.charCodeAt(t.position),Ia(x)||py(x)||x===35||x===38||x===42||x===33||x===124||x===62||x===39||x===34||x===37||x===64||x===96||(x===63||x===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;x!==0;){if(x===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(x===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&KP(t)||r&&py(x))break;if(qu(x))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,x=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(Yp(t,n,u,!1),ET(t,t.line-p),n=u=t.position,A=!1),$g(x)||(u=t.position+1),x=t.input.charCodeAt(++t.position)}return Yp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function e6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Yp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else qu(r)?(Yp(t,o,a,!0),ET(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&KP(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function t6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return Yp(t,r,t.position,!0),t.position++,!0;if(A===92){if(Yp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),qu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=VHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=zHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=XHe(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else qu(A)?(Yp(t,r,o,!0),ET(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&KP(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function r6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},x,C,F,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,I=!1,n=[];else if(N===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=x=F=null,h=E=!1,N===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,jP,!1,!0),C=t.tag,x=t.result,Wi(t,!0,e),N=t.input.charCodeAt(t.position),(E||t.line===o)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,jP,!1,!0),F=t.result),I?hy(t,n,v,C,x,F):h?n.push(hy(t,null,v,C,x,F)):n.push(x),Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function n6e(t,e){var r,o,a=mT,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)mT===a?a=I===43?sK:jHe:Sr(t,"repeat of a chomping mode identifier");else if((E=JHe(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if($g(I)){do I=t.input.charCodeAt(++t.position);while($g(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!qu(I)&&I!==0)}for(;I!==0;){for(yT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),qu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(dy(t,e,jD,!0,a)&&(C?v=t.result:x=t.result),C||(gy(t,h,E,I,v,x,n,u),I=v=x=null),Wi(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Sr(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+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result)?(t.result=x.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function l6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;$g(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!qu(u));break}if(qu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&mT(t),Wp.call(lK,o)?lK[o](t,o,a):YD(t,'unknown document directive "'+o+'"')}if(Wi(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,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),dy(t,t.lineIndent-1,jD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&WHe.test(t.input.slice(e,t.position))&&YD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&WD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,yf.extend({schema:fK},r))}function u6e(t,e){return IK(t,yf.extend({schema:fK},e))}Zw.exports.loadAll=wK;Zw.exports.load=IK;Zw.exports.safeLoadAll=c6e;Zw.exports.safeLoad=u6e});var WK=_((fxt,IT)=>{"use strict";var eI=Vg(),tI=Ay(),A6e=Xw(),f6e=py(),QK=Object.prototype.toString,FK=Object.prototype.hasOwnProperty,p6e=9,$w=10,h6e=13,g6e=32,d6e=33,m6e=34,RK=35,y6e=37,E6e=38,C6e=39,w6e=42,TK=44,I6e=45,LK=58,B6e=61,v6e=62,D6e=63,P6e=64,NK=91,OK=93,S6e=96,MK=123,b6e=124,UK=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var x6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function k6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;ae)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YP,!0,a)&&(C?v=t.result:x=t.result),C||(hy(t,h,E,I,v,x,n,u),I=v=x=null),Wi(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Sr(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+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result)?(t.result=x.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function l6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;$g(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!qu(u));break}if(qu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&yT(t),Wp.call(lK,o)?lK[o](t,o,a):WP(t,'unknown document directive "'+o+'"')}if(Wi(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,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YP,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&WHe.test(t.input.slice(e,t.position))&&WP(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&KP(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,yf.extend({schema:fK},r))}function u6e(t,e){return IK(t,yf.extend({schema:fK},e))}Jw.exports.loadAll=wK;Jw.exports.load=IK;Jw.exports.safeLoadAll=c6e;Jw.exports.safeLoad=u6e});var WK=_((hxt,BT)=>{"use strict";var Zw=Vg(),$w=uy(),A6e=Vw(),f6e=fy(),QK=Object.prototype.toString,RK=Object.prototype.hasOwnProperty,p6e=9,Xw=10,h6e=13,g6e=32,d6e=33,m6e=34,FK=35,y6e=37,E6e=38,C6e=39,w6e=42,TK=44,I6e=45,LK=58,B6e=61,v6e=62,P6e=63,D6e=64,NK=91,OK=93,S6e=96,MK=123,b6e=124,UK=125,Bo={};Bo[0]="\\0";Bo[7]="\\a";Bo[8]="\\b";Bo[9]="\\t";Bo[10]="\\n";Bo[11]="\\v";Bo[12]="\\f";Bo[13]="\\r";Bo[27]="\\e";Bo[34]='\\"';Bo[92]="\\\\";Bo[133]="\\N";Bo[160]="\\_";Bo[8232]="\\L";Bo[8233]="\\P";var x6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function k6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&PK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!my(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&PK(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:qK:r>9&&_K(t)?KD:h?jK:GK}function N6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&x6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return F6e(t,p)}switch(L6e(e,u,t.indent,n,A)){case HK:return e;case qK:return"'"+e.replace(/'/g,"''")+"'";case GK:return"|"+SK(e,t.indent)+bK(DK(e,a));case jK:return">"+SK(e,t.indent)+bK(DK(O6e(e,n),a));case KD:return'"'+M6e(e,n)+'"';default:throw new tI("impossible error: invalid scalar style")}}()}function SK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` +`&&(n+=r),n+=u;return n}function CT(t,e){return` +`+Zw.repeat(" ",t.indent*e)}function R6e(t,e){var r,o,a;for(r=0,o=t.implicitTypes.length;r0?t.charCodeAt(n-1):null,v=v&&DK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return zP;A=n>0?t.charCodeAt(n-1):null,v=v&&DK(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:qK:r>9&&_K(t)?zP:h?jK:GK}function N6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&x6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return R6e(t,p)}switch(L6e(e,u,t.indent,n,A)){case HK:return e;case qK:return"'"+e.replace(/'/g,"''")+"'";case GK:return"|"+SK(e,t.indent)+bK(PK(e,a));case jK:return">"+SK(e,t.indent)+bK(PK(O6e(e,n),a));case zP:return'"'+M6e(e,n)+'"';default:throw new $w("impossible error: invalid scalar style")}}()}function SK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` `,a=o&&(t[t.length-2]===` `||t===` `),n=a?"+":o?"":"-";return r+n+` @@ -38,48 +38,48 @@ `:"")+xK(p,e),a=n}return o}function xK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` `+t.slice(a,n),a=n+1),u=A;return p+=` `,t.length-a>e&&u>a?p+=t.slice(a,u)+` -`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function M6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&my(r)?t[n]:a||vK(r)}return e}function U6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ed(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function q6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new tI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&$w===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=ET(t,e)),ed(t,e+1,E,!0,I)&&(t.dump&&$w===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function ed(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(q6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(H6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(_6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(U6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new tI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function G6e(t,e){var r=[],o=[],a,n;for(CT(t,r,o),a=0,n=o.length;a{"use strict";var zD=BK(),KK=WK();function VD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Jg();ki.exports.FAILSAFE_SCHEMA=HD();ki.exports.JSON_SCHEMA=pT();ki.exports.CORE_SCHEMA=hT();ki.exports.DEFAULT_SAFE_SCHEMA=py();ki.exports.DEFAULT_FULL_SCHEMA=Xw();ki.exports.load=zD.load;ki.exports.loadAll=zD.loadAll;ki.exports.safeLoad=zD.safeLoad;ki.exports.safeLoadAll=zD.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=Ay();ki.exports.MINIMAL_SCHEMA=HD();ki.exports.SAFE_SCHEMA=py();ki.exports.DEFAULT_SCHEMA=Xw();ki.exports.scan=VD("scan");ki.exports.parse=VD("parse");ki.exports.compose=VD("compose");ki.exports.addConstructor=VD("addConstructor")});var JK=_((hxt,VK)=>{"use strict";var Y6e=zK();VK.exports=Y6e});var ZK=_((gxt,XK)=>{"use strict";function W6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function td(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,td)}W6e(td,Error);td.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[pt]:Ne})))},fe=function($){return $},ue=function($){return $},me=sa("correct indentation"),he=" ",Be=Qn(" ",!1),we=function($){return $.length===ir*It},g=function($){return $.length===(ir+1)*It},Ee=function(){return ir++,!0},Pe=function(){return ir--,!0},ce=function(){return PA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Fe=/^[^\r\n\t ,\][{}:#"']/,At=hi(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return PA().replace(/^ *| *$/g,"")},at="--",Re=Qn("--",!1),ke=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),He=/^[^\r\n\t :,]/,Te=hi(["\r",` -`," "," ",":",","],!0,!1),Ve="null",qe=Qn("null",!1),b=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",J=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',be=Qn('"',!1),Le=function(){return""},ot=function($){return $},dt=function($){return $.join("")},Gt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",br=Qn("\\\\",!1),Wr=function(){return"\\"},Kn="\\/",Ls=Qn("\\/",!1),Ti=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ns="\\f",so=Qn("\\f",!1),uc=function(){return"\f"},uu="\\n",cp=Qn("\\n",!1),up=function(){return` -`},Os="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Ms="\\t",yl=Qn("\\t",!1),El=function(){return" "},ao="\\u",zn=Qn("\\u",!1),On=function($,ye,Ne,pt){return String.fromCharCode(parseInt(`0x${$}${ye}${Ne}${pt}`))},Li=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),rr=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ua=/^[ \t\n\r]/,hr=hi([" "," ",` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function M6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=Bo[r],e+=!a&&dy(r)?t[n]:a||vK(r)}return e}function U6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ed(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function q6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new $w("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Xw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=CT(t,e)),ed(t,e+1,E,!0,I)&&(t.dump&&Xw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function ed(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(q6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(H6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(_6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(U6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new $w("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function G6e(t,e){var r=[],o=[],a,n;for(wT(t,r,o),a=0,n=o.length;a{"use strict";var VP=BK(),KK=WK();function JP(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=as();ki.exports.Schema=Jg();ki.exports.FAILSAFE_SCHEMA=qP();ki.exports.JSON_SCHEMA=hT();ki.exports.CORE_SCHEMA=gT();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=Vw();ki.exports.load=VP.load;ki.exports.loadAll=VP.loadAll;ki.exports.safeLoad=VP.safeLoad;ki.exports.safeLoadAll=VP.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=qP();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=Vw();ki.exports.scan=JP("scan");ki.exports.parse=JP("parse");ki.exports.compose=JP("compose");ki.exports.addConstructor=JP("addConstructor")});var JK=_((dxt,VK)=>{"use strict";var Y6e=zK();VK.exports=Y6e});var ZK=_((mxt,XK)=>{"use strict";function W6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function td(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,td)}W6e(td,Error);td.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Ne})))},ae=function($){return $},ce=function($){return $},Ce=sa("correct indentation"),de=" ",Ie=Qn(" ",!1),Ee=function($){return $.length===or*It},g=function($){return $.length===(or+1)*It},me=function(){return or++,!0},De=function(){return or--,!0},he=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Be=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Te=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},at="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),je=/^[^\r\n\t :,]/,be=hi(["\r",` +`," "," ",":",","],!0,!1),$e="null",_e=Qn("null",!1),b=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},R="false",J=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',ke=Qn('"',!1),Le=function(){return""},ot=function($){return $},dt=function($){return $.join("")},Gt=/^[^"\\\0-\x1F\x7F]/,tr=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',ln=Qn('\\"',!1),kr=function(){return'"'},mr="\\\\",br=Qn("\\\\",!1),Kr=function(){return"\\"},Kn="\\/",Os=Qn("\\/",!1),Ti=function(){return"/"},gs="\\b",no=Qn("\\b",!1),Si=function(){return"\b"},Ms="\\f",io=Qn("\\f",!1),uc=function(){return"\f"},uu="\\n",cp=Qn("\\n",!1),up=function(){return` +`},Us="\\r",Pn=Qn("\\r",!1),so=function(){return"\r"},_s="\\t",yl=Qn("\\t",!1),El=function(){return" "},oo="\\u",zn=Qn("\\u",!1),On=function($,ye,Ne,ft){return String.fromCharCode(parseInt(`0x${$}${ye}${Ne}${ft}`))},Li=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),ir=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ua=/^[ \t\n\r]/,hr=hi([" "," ",` `,"\r"],!1,!1),Ac=`\r `,Au=Qn(`\r `,!1),fc=` `,Cl=Qn(` -`,!1),DA="\r",fu=Qn("\r",!1),Ce=0,Rt=0,pc=[{line:1,column:1}],Hi=0,pu=[],Yt=0,wl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function PA(){return t.substring(Rt,Ce)}function Ap(){return _o(Rt,Ce)}function hc($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),dc([sa($)],t.substring(Rt,Ce),ye)}function SA($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),lo($,ye)}function Qn($,ye){return{type:"literal",text:$,ignoreCase:ye}}function hi($,ye,Ne){return{type:"class",parts:$,inverted:ye,ignoreCase:Ne}}function gc(){return{type:"any"}}function bA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Ni($){var ye=pc[$],Ne;if(ye)return ye;for(Ne=$-1;!pc[Ne];)Ne--;for(ye=pc[Ne],ye={line:ye.line,column:ye.column};Ne<$;)t.charCodeAt(Ne)===10?(ye.line++,ye.column=1):ye.column++,Ne++;return pc[$]=ye,ye}function _o($,ye){var Ne=Ni($),pt=Ni(ye);return{start:{offset:$,line:Ne.line,column:Ne.column},end:{offset:ye,line:pt.line,column:pt.column}}}function Ze($){CeHi&&(Hi=Ce,pu=[]),pu.push($))}function lo($,ye){return new td($,null,null,ye)}function dc($,ye,Ne){return new td(td.buildMessage($,ye),$,ye,Ne)}function hu(){var $;return $=xA(),$}function qi(){var $,ye,Ne;for($=Ce,ye=[],Ne=gu();Ne!==r;)ye.push(Ne),Ne=gu();return ye!==r&&(Rt=$,ye=n(ye)),$=ye,$}function gu(){var $,ye,Ne,pt,ht;return $=Ce,ye=hs(),ye!==r?(t.charCodeAt(Ce)===45?(Ne=u,Ce++):(Ne=r,Yt===0&&Ze(A)),Ne!==r?(pt=Pn(),pt!==r?(ht=mc(),ht!==r?(Rt=$,ye=p(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,ye,Ne;for($=Ce,ye=[],Ne=Ha();Ne!==r;)ye.push(Ne),Ne=Ha();return ye!==r&&(Rt=$,ye=h(ye)),$=ye,$}function Ha(){var $,ye,Ne,pt,ht,Tt,er,$r,Gi;if($=Ce,ye=Pn(),ye===r&&(ye=null),ye!==r){if(Ne=Ce,t.charCodeAt(Ce)===35?(pt=E,Ce++):(pt=r,Yt===0&&Ze(I)),pt!==r){if(ht=[],Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r),Tt!==r)for(;Tt!==r;)ht.push(Tt),Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r);else ht=r;ht!==r?(pt=[pt,ht],Ne=pt):(Ce=Ne,Ne=r)}else Ce=Ne,Ne=r;if(Ne===r&&(Ne=null),Ne!==r){if(pt=[],ht=We(),ht!==r)for(;ht!==r;)pt.push(ht),ht=We();else pt=r;pt!==r?(Rt=$,ye=x(),$=ye):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,ye=hs(),ye!==r?(Ne=oa(),Ne!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(er=mc(),er!==r?(Rt=$,ye=N(Ne,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=hs(),ye!==r?(Ne=co(),Ne!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(er=mc(),er!==r?(Rt=$,ye=N(Ne,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,ye=hs(),ye!==r)if(Ne=co(),Ne!==r)if(pt=Pn(),pt!==r)if(ht=aa(),ht!==r){if(Tt=[],er=We(),er!==r)for(;er!==r;)Tt.push(er),er=We();else Tt=r;Tt!==r?(Rt=$,ye=N(Ne,ht),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,ye=hs(),ye!==r)if(Ne=co(),Ne!==r){if(pt=[],ht=Ce,Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(V)),er!==r?($r=Pn(),$r===r&&($r=null),$r!==r?(Gi=co(),Gi!==r?(Rt=ht,Tt=te(Ne,Gi),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r),ht!==r)for(;ht!==r;)pt.push(ht),ht=Ce,Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(V)),er!==r?($r=Pn(),$r===r&&($r=null),$r!==r?(Gi=co(),Gi!==r?(Rt=ht,Tt=te(Ne,Gi),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r);else pt=r;pt!==r?(ht=Pn(),ht===r&&(ht=null),ht!==r?(t.charCodeAt(Ce)===58?(Tt=C,Ce++):(Tt=r,Yt===0&&Ze(R)),Tt!==r?(er=Pn(),er===r&&(er=null),er!==r?($r=mc(),$r!==r?(Rt=$,ye=ae(Ne,pt,$r),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function mc(){var $,ye,Ne,pt,ht,Tt,er;if($=Ce,ye=Ce,Yt++,Ne=Ce,pt=tt(),pt!==r?(ht=Ht(),ht!==r?(t.charCodeAt(Ce)===45?(Tt=u,Ce++):(Tt=r,Yt===0&&Ze(A)),Tt!==r?(er=Pn(),er!==r?(pt=[pt,ht,Tt,er],Ne=pt):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r),Yt--,Ne!==r?(Ce=ye,ye=void 0):ye=r,ye!==r?(Ne=We(),Ne!==r?(pt=Fn(),pt!==r?(ht=qi(),ht!==r?(Tt=Ci(),Tt!==r?(Rt=$,ye=fe(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=tt(),ye!==r?(Ne=Fn(),Ne!==r?(pt=xA(),pt!==r?(ht=Ci(),ht!==r?(Rt=$,ye=fe(pt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,ye=Us(),ye!==r){if(Ne=[],pt=We(),pt!==r)for(;pt!==r;)Ne.push(pt),pt=We();else Ne=r;Ne!==r?(Rt=$,ye=ue(ye),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,ye,Ne;for(Yt++,$=Ce,ye=[],t.charCodeAt(Ce)===32?(Ne=he,Ce++):(Ne=r,Yt===0&&Ze(Be));Ne!==r;)ye.push(Ne),t.charCodeAt(Ce)===32?(Ne=he,Ce++):(Ne=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Ne=we(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],$=ye):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(ye=r,Yt===0&&Ze(me)),$}function Ht(){var $,ye,Ne;for($=Ce,ye=[],t.charCodeAt(Ce)===32?(Ne=he,Ce++):(Ne=r,Yt===0&&Ze(Be));Ne!==r;)ye.push(Ne),t.charCodeAt(Ce)===32?(Ne=he,Ce++):(Ne=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Ne=g(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],$=ye):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Rt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Rt=Ce,$=Pe(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,ye,Ne;if($=ds(),$===r){if($=Ce,ye=[],Ne=Ho(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=Ho();else ye=r;ye!==r&&(Rt=$,ye=ce()),$=ye}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,ye,Ne,pt,ht,Tt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Ie)),ye!==r){for(Ne=[],pt=Ce,ht=Pn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Ne.push(pt),pt=Ce,ht=Pn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Ne!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ne)),$}function Ho(){var $,ye,Ne,pt,ht;if($=Ce,t.substr(Ce,2)===at?(ye=at,Ce+=2):(ye=r,Yt===0&&Ze(Re)),ye===r&&(ye=null),ye!==r)if(ke.test(t.charAt(Ce))?(Ne=t.charAt(Ce),Ce++):(Ne=r,Yt===0&&Ze(xe)),Ne!==r){for(pt=[],He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));ht!==r;)pt.push(ht),He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));pt!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,ye;return $=Ce,t.substr(Ce,4)===Ve?(ye=Ve,Ce+=4):(ye=r,Yt===0&&Ze(qe)),ye!==r&&(Rt=$,ye=b()),$=ye,$}function gs(){var $,ye;return $=Ce,t.substr(Ce,4)===w?(ye=w,Ce+=4):(ye=r,Yt===0&&Ze(S)),ye!==r&&(Rt=$,ye=y()),$=ye,$===r&&($=Ce,t.substr(Ce,5)===F?(ye=F,Ce+=5):(ye=r,Yt===0&&Ze(J)),ye!==r&&(Rt=$,ye=X()),$=ye),$}function ds(){var $,ye,Ne,pt;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(be)),ye!==r?(t.charCodeAt(Ce)===34?(Ne=ie,Ce++):(Ne=r,Yt===0&&Ze(be)),Ne!==r?(Rt=$,ye=Le(),$=ye):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(be)),ye!==r?(Ne=ms(),Ne!==r?(t.charCodeAt(Ce)===34?(pt=ie,Ce++):(pt=r,Yt===0&&Ze(be)),pt!==r?(Rt=$,ye=ot(Ne),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(ye=r,Yt===0&&Ze(Z)),$}function ms(){var $,ye,Ne;if($=Ce,ye=[],Ne=_s(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=_s();else ye=r;return ye!==r&&(Rt=$,ye=dt(ye)),$=ye,$}function _s(){var $,ye,Ne,pt,ht,Tt;return Gt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===bt?(ye=bt,Ce+=2):(ye=r,Yt===0&&Ze(an)),ye!==r&&(Rt=$,ye=Qr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===mr?(ye=mr,Ce+=2):(ye=r,Yt===0&&Ze(br)),ye!==r&&(Rt=$,ye=Wr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Kn?(ye=Kn,Ce+=2):(ye=r,Yt===0&&Ze(Ls)),ye!==r&&(Rt=$,ye=Ti()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ps?(ye=ps,Ce+=2):(ye=r,Yt===0&&Ze(io)),ye!==r&&(Rt=$,ye=Si()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ns?(ye=Ns,Ce+=2):(ye=r,Yt===0&&Ze(so)),ye!==r&&(Rt=$,ye=uc()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===uu?(ye=uu,Ce+=2):(ye=r,Yt===0&&Ze(cp)),ye!==r&&(Rt=$,ye=up()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Os?(ye=Os,Ce+=2):(ye=r,Yt===0&&Ze(Dn)),ye!==r&&(Rt=$,ye=oo()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ms?(ye=Ms,Ce+=2):(ye=r,Yt===0&&Ze(yl)),ye!==r&&(Rt=$,ye=El()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ao?(ye=ao,Ce+=2):(ye=r,Yt===0&&Ze(zn)),ye!==r?(Ne=Un(),Ne!==r?(pt=Un(),pt!==r?(ht=Un(),ht!==r?(Tt=Un(),Tt!==r?(Rt=$,ye=On(Ne,pt,ht,Tt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Li.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(Mn)),$}function Pn(){var $,ye;if(Yt++,$=[],rr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe)),ye!==r)for(;ye!==r;)$.push(ye),rr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(_i)),$}function ys(){var $,ye;if(Yt++,$=[],Ua.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr)),ye!==r)for(;ye!==r;)$.push(ye),Ua.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ii)),$}function We(){var $,ye,Ne,pt,ht,Tt;if($=Ce,ye=tt(),ye!==r){for(Ne=[],pt=Ce,ht=Pn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Ne.push(pt),pt=Ce,ht=Pn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Ne!==r?(ye=[ye,Ne],$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===Ac?($=Ac,Ce+=2):($=r,Yt===0&&Ze(Au)),$===r&&(t.charCodeAt(Ce)===10?($=fc,Ce++):($=r,Yt===0&&Ze(Cl)),$===r&&(t.charCodeAt(Ce)===13?($=DA,Ce++):($=r,Yt===0&&Ze(fu)))),$}let It=2,ir=0;if(wl=a(),wl!==r&&Ce===t.length)return wl;throw wl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rz(t[e])):!1}function BT(t,e,r){if(t===null)return`null +`,!1),PA="\r",fu=Qn("\r",!1),we=0,Tt=0,pc=[{line:1,column:1}],Hi=0,pu=[],Yt=0,wl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,we)}function Ap(){return Uo(Tt,we)}function hc($,ye){throw ye=ye!==void 0?ye:Uo(Tt,we),dc([sa($)],t.substring(Tt,we),ye)}function SA($,ye){throw ye=ye!==void 0?ye:Uo(Tt,we),ao($,ye)}function Qn($,ye){return{type:"literal",text:$,ignoreCase:ye}}function hi($,ye,Ne){return{type:"class",parts:$,inverted:ye,ignoreCase:Ne}}function gc(){return{type:"any"}}function bA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Ni($){var ye=pc[$],Ne;if(ye)return ye;for(Ne=$-1;!pc[Ne];)Ne--;for(ye=pc[Ne],ye={line:ye.line,column:ye.column};Ne<$;)t.charCodeAt(Ne)===10?(ye.line++,ye.column=1):ye.column++,Ne++;return pc[$]=ye,ye}function Uo($,ye){var Ne=Ni($),ft=Ni(ye);return{start:{offset:$,line:Ne.line,column:Ne.column},end:{offset:ye,line:ft.line,column:ft.column}}}function Xe($){weHi&&(Hi=we,pu=[]),pu.push($))}function ao($,ye){return new td($,null,null,ye)}function dc($,ye,Ne){return new td(td.buildMessage($,ye),$,ye,Ne)}function hu(){var $;return $=xA(),$}function qi(){var $,ye,Ne;for($=we,ye=[],Ne=gu();Ne!==r;)ye.push(Ne),Ne=gu();return ye!==r&&(Tt=$,ye=n(ye)),$=ye,$}function gu(){var $,ye,Ne,ft,pt;return $=we,ye=ds(),ye!==r?(t.charCodeAt(we)===45?(Ne=u,we++):(Ne=r,Yt===0&&Xe(A)),Ne!==r?(ft=Dn(),ft!==r?(pt=mc(),pt!==r?(Tt=$,ye=p(pt),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r),$}function xA(){var $,ye,Ne;for($=we,ye=[],Ne=Ha();Ne!==r;)ye.push(Ne),Ne=Ha();return ye!==r&&(Tt=$,ye=h(ye)),$=ye,$}function Ha(){var $,ye,Ne,ft,pt,Lt,rr,$r,Gi;if($=we,ye=Dn(),ye===r&&(ye=null),ye!==r){if(Ne=we,t.charCodeAt(we)===35?(ft=E,we++):(ft=r,Yt===0&&Xe(I)),ft!==r){if(pt=[],Lt=we,rr=we,Yt++,$r=tt(),Yt--,$r===r?rr=void 0:(we=rr,rr=r),rr!==r?(t.length>we?($r=t.charAt(we),we++):($r=r,Yt===0&&Xe(v)),$r!==r?(rr=[rr,$r],Lt=rr):(we=Lt,Lt=r)):(we=Lt,Lt=r),Lt!==r)for(;Lt!==r;)pt.push(Lt),Lt=we,rr=we,Yt++,$r=tt(),Yt--,$r===r?rr=void 0:(we=rr,rr=r),rr!==r?(t.length>we?($r=t.charAt(we),we++):($r=r,Yt===0&&Xe(v)),$r!==r?(rr=[rr,$r],Lt=rr):(we=Lt,Lt=r)):(we=Lt,Lt=r);else pt=r;pt!==r?(ft=[ft,pt],Ne=ft):(we=Ne,Ne=r)}else we=Ne,Ne=r;if(Ne===r&&(Ne=null),Ne!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,ye=x(),$=ye):(we=$,$=r)}else we=$,$=r}else we=$,$=r;if($===r&&($=we,ye=ds(),ye!==r?(Ne=oa(),Ne!==r?(ft=Dn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(we)===58?(pt=C,we++):(pt=r,Yt===0&&Xe(F)),pt!==r?(Lt=Dn(),Lt===r&&(Lt=null),Lt!==r?(rr=mc(),rr!==r?(Tt=$,ye=N(Ne,rr),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r),$===r&&($=we,ye=ds(),ye!==r?(Ne=lo(),Ne!==r?(ft=Dn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(we)===58?(pt=C,we++):(pt=r,Yt===0&&Xe(F)),pt!==r?(Lt=Dn(),Lt===r&&(Lt=null),Lt!==r?(rr=mc(),rr!==r?(Tt=$,ye=N(Ne,rr),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r),$===r))){if($=we,ye=ds(),ye!==r)if(Ne=lo(),Ne!==r)if(ft=Dn(),ft!==r)if(pt=aa(),pt!==r){if(Lt=[],rr=We(),rr!==r)for(;rr!==r;)Lt.push(rr),rr=We();else Lt=r;Lt!==r?(Tt=$,ye=N(Ne,pt),$=ye):(we=$,$=r)}else we=$,$=r;else we=$,$=r;else we=$,$=r;else we=$,$=r;if($===r)if($=we,ye=ds(),ye!==r)if(Ne=lo(),Ne!==r){if(ft=[],pt=we,Lt=Dn(),Lt===r&&(Lt=null),Lt!==r?(t.charCodeAt(we)===44?(rr=U,we++):(rr=r,Yt===0&&Xe(V)),rr!==r?($r=Dn(),$r===r&&($r=null),$r!==r?(Gi=lo(),Gi!==r?(Tt=pt,Lt=te(Ne,Gi),pt=Lt):(we=pt,pt=r)):(we=pt,pt=r)):(we=pt,pt=r)):(we=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=we,Lt=Dn(),Lt===r&&(Lt=null),Lt!==r?(t.charCodeAt(we)===44?(rr=U,we++):(rr=r,Yt===0&&Xe(V)),rr!==r?($r=Dn(),$r===r&&($r=null),$r!==r?(Gi=lo(),Gi!==r?(Tt=pt,Lt=te(Ne,Gi),pt=Lt):(we=pt,pt=r)):(we=pt,pt=r)):(we=pt,pt=r)):(we=pt,pt=r);else ft=r;ft!==r?(pt=Dn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(we)===58?(Lt=C,we++):(Lt=r,Yt===0&&Xe(F)),Lt!==r?(rr=Dn(),rr===r&&(rr=null),rr!==r?($r=mc(),$r!==r?(Tt=$,ye=le(Ne,ft,$r),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)}else we=$,$=r;else we=$,$=r}return $}function mc(){var $,ye,Ne,ft,pt,Lt,rr;if($=we,ye=we,Yt++,Ne=we,ft=tt(),ft!==r?(pt=Ht(),pt!==r?(t.charCodeAt(we)===45?(Lt=u,we++):(Lt=r,Yt===0&&Xe(A)),Lt!==r?(rr=Dn(),rr!==r?(ft=[ft,pt,Lt,rr],Ne=ft):(we=Ne,Ne=r)):(we=Ne,Ne=r)):(we=Ne,Ne=r)):(we=Ne,Ne=r),Yt--,Ne!==r?(we=ye,ye=void 0):ye=r,ye!==r?(Ne=We(),Ne!==r?(ft=Rn(),ft!==r?(pt=qi(),pt!==r?(Lt=Ci(),Lt!==r?(Tt=$,ye=ae(pt),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r),$===r&&($=we,ye=tt(),ye!==r?(Ne=Rn(),Ne!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,ye=ae(ft),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r),$===r))if($=we,ye=Hs(),ye!==r){if(Ne=[],ft=We(),ft!==r)for(;ft!==r;)Ne.push(ft),ft=We();else Ne=r;Ne!==r?(Tt=$,ye=ce(ye),$=ye):(we=$,$=r)}else we=$,$=r;return $}function ds(){var $,ye,Ne;for(Yt++,$=we,ye=[],t.charCodeAt(we)===32?(Ne=de,we++):(Ne=r,Yt===0&&Xe(Ie));Ne!==r;)ye.push(Ne),t.charCodeAt(we)===32?(Ne=de,we++):(Ne=r,Yt===0&&Xe(Ie));return ye!==r?(Tt=we,Ne=Ee(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],$=ye):(we=$,$=r)):(we=$,$=r),Yt--,$===r&&(ye=r,Yt===0&&Xe(Ce)),$}function Ht(){var $,ye,Ne;for($=we,ye=[],t.charCodeAt(we)===32?(Ne=de,we++):(Ne=r,Yt===0&&Xe(Ie));Ne!==r;)ye.push(Ne),t.charCodeAt(we)===32?(Ne=de,we++):(Ne=r,Yt===0&&Xe(Ie));return ye!==r?(Tt=we,Ne=g(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],$=ye):(we=$,$=r)):(we=$,$=r),$}function Rn(){var $;return Tt=we,$=me(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=we,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ys(),$===r&&($=la()),$}function lo(){var $,ye,Ne;if($=ys(),$===r){if($=we,ye=[],Ne=_o(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=_o();else ye=r;ye!==r&&(Tt=$,ye=he()),$=ye}return $}function Hs(){var $;return $=wi(),$===r&&($=ms(),$===r&&($=ys(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ys(),$===r&&($=_o())),$}function la(){var $,ye,Ne,ft,pt,Lt;if(Yt++,$=we,ee.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Yt===0&&Xe(Be)),ye!==r){for(Ne=[],ft=we,pt=Dn(),pt===r&&(pt=null),pt!==r?(Te.test(t.charAt(we))?(Lt=t.charAt(we),we++):(Lt=r,Yt===0&&Xe(ht)),Lt!==r?(pt=[pt,Lt],ft=pt):(we=ft,ft=r)):(we=ft,ft=r);ft!==r;)Ne.push(ft),ft=we,pt=Dn(),pt===r&&(pt=null),pt!==r?(Te.test(t.charAt(we))?(Lt=t.charAt(we),we++):(Lt=r,Yt===0&&Xe(ht)),Lt!==r?(pt=[pt,Lt],ft=pt):(we=ft,ft=r)):(we=ft,ft=r);Ne!==r?(Tt=$,ye=H(),$=ye):(we=$,$=r)}else we=$,$=r;return Yt--,$===r&&(ye=r,Yt===0&&Xe(ne)),$}function _o(){var $,ye,Ne,ft,pt;if($=we,t.substr(we,2)===at?(ye=at,we+=2):(ye=r,Yt===0&&Xe(Re)),ye===r&&(ye=null),ye!==r)if(Qe.test(t.charAt(we))?(Ne=t.charAt(we),we++):(Ne=r,Yt===0&&Xe(xe)),Ne!==r){for(ft=[],je.test(t.charAt(we))?(pt=t.charAt(we),we++):(pt=r,Yt===0&&Xe(be));pt!==r;)ft.push(pt),je.test(t.charAt(we))?(pt=t.charAt(we),we++):(pt=r,Yt===0&&Xe(be));ft!==r?(Tt=$,ye=H(),$=ye):(we=$,$=r)}else we=$,$=r;else we=$,$=r;return $}function wi(){var $,ye;return $=we,t.substr(we,4)===$e?(ye=$e,we+=4):(ye=r,Yt===0&&Xe(_e)),ye!==r&&(Tt=$,ye=b()),$=ye,$}function ms(){var $,ye;return $=we,t.substr(we,4)===w?(ye=w,we+=4):(ye=r,Yt===0&&Xe(S)),ye!==r&&(Tt=$,ye=y()),$=ye,$===r&&($=we,t.substr(we,5)===R?(ye=R,we+=5):(ye=r,Yt===0&&Xe(J)),ye!==r&&(Tt=$,ye=X()),$=ye),$}function ys(){var $,ye,Ne,ft;return Yt++,$=we,t.charCodeAt(we)===34?(ye=ie,we++):(ye=r,Yt===0&&Xe(ke)),ye!==r?(t.charCodeAt(we)===34?(Ne=ie,we++):(Ne=r,Yt===0&&Xe(ke)),Ne!==r?(Tt=$,ye=Le(),$=ye):(we=$,$=r)):(we=$,$=r),$===r&&($=we,t.charCodeAt(we)===34?(ye=ie,we++):(ye=r,Yt===0&&Xe(ke)),ye!==r?(Ne=Es(),Ne!==r?(t.charCodeAt(we)===34?(ft=ie,we++):(ft=r,Yt===0&&Xe(ke)),ft!==r?(Tt=$,ye=ot(Ne),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)),Yt--,$===r&&(ye=r,Yt===0&&Xe(Z)),$}function Es(){var $,ye,Ne;if($=we,ye=[],Ne=qs(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=qs();else ye=r;return ye!==r&&(Tt=$,ye=dt(ye)),$=ye,$}function qs(){var $,ye,Ne,ft,pt,Lt;return Gt.test(t.charAt(we))?($=t.charAt(we),we++):($=r,Yt===0&&Xe(tr)),$===r&&($=we,t.substr(we,2)===bt?(ye=bt,we+=2):(ye=r,Yt===0&&Xe(ln)),ye!==r&&(Tt=$,ye=kr()),$=ye,$===r&&($=we,t.substr(we,2)===mr?(ye=mr,we+=2):(ye=r,Yt===0&&Xe(br)),ye!==r&&(Tt=$,ye=Kr()),$=ye,$===r&&($=we,t.substr(we,2)===Kn?(ye=Kn,we+=2):(ye=r,Yt===0&&Xe(Os)),ye!==r&&(Tt=$,ye=Ti()),$=ye,$===r&&($=we,t.substr(we,2)===gs?(ye=gs,we+=2):(ye=r,Yt===0&&Xe(no)),ye!==r&&(Tt=$,ye=Si()),$=ye,$===r&&($=we,t.substr(we,2)===Ms?(ye=Ms,we+=2):(ye=r,Yt===0&&Xe(io)),ye!==r&&(Tt=$,ye=uc()),$=ye,$===r&&($=we,t.substr(we,2)===uu?(ye=uu,we+=2):(ye=r,Yt===0&&Xe(cp)),ye!==r&&(Tt=$,ye=up()),$=ye,$===r&&($=we,t.substr(we,2)===Us?(ye=Us,we+=2):(ye=r,Yt===0&&Xe(Pn)),ye!==r&&(Tt=$,ye=so()),$=ye,$===r&&($=we,t.substr(we,2)===_s?(ye=_s,we+=2):(ye=r,Yt===0&&Xe(yl)),ye!==r&&(Tt=$,ye=El()),$=ye,$===r&&($=we,t.substr(we,2)===oo?(ye=oo,we+=2):(ye=r,Yt===0&&Xe(zn)),ye!==r?(Ne=Un(),Ne!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Lt=Un(),Lt!==r?(Tt=$,ye=On(Ne,ft,pt,Lt),$=ye):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)):(we=$,$=r)))))))))),$}function Un(){var $;return Li.test(t.charAt(we))?($=t.charAt(we),we++):($=r,Yt===0&&Xe(Mn)),$}function Dn(){var $,ye;if(Yt++,$=[],ir.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Yt===0&&Xe(Oe)),ye!==r)for(;ye!==r;)$.push(ye),ir.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Yt===0&&Xe(Oe));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Xe(_i)),$}function Cs(){var $,ye;if(Yt++,$=[],Ua.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Yt===0&&Xe(hr)),ye!==r)for(;ye!==r;)$.push(ye),Ua.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Yt===0&&Xe(hr));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Xe(ii)),$}function We(){var $,ye,Ne,ft,pt,Lt;if($=we,ye=tt(),ye!==r){for(Ne=[],ft=we,pt=Dn(),pt===r&&(pt=null),pt!==r?(Lt=tt(),Lt!==r?(pt=[pt,Lt],ft=pt):(we=ft,ft=r)):(we=ft,ft=r);ft!==r;)Ne.push(ft),ft=we,pt=Dn(),pt===r&&(pt=null),pt!==r?(Lt=tt(),Lt!==r?(pt=[pt,Lt],ft=pt):(we=ft,ft=r)):(we=ft,ft=r);Ne!==r?(ye=[ye,Ne],$=ye):(we=$,$=r)}else we=$,$=r;return $}function tt(){var $;return t.substr(we,2)===Ac?($=Ac,we+=2):($=r,Yt===0&&Xe(Au)),$===r&&(t.charCodeAt(we)===10?($=fc,we++):($=r,Yt===0&&Xe(Cl)),$===r&&(t.charCodeAt(we)===13?($=PA,we++):($=r,Yt===0&&Xe(fu)))),$}let It=2,or=0;if(wl=a(),wl!==r&&we===t.length)return wl;throw wl!==r&&we"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rz(t[e])):!1}function vT(t,e,r){if(t===null)return`null `;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} `;if(typeof t=="string")return`${ez(t)} `;if(Array.isArray(t)){if(t.length===0)return`[] `;let o=" ".repeat(e);return` -${t.map(n=>`${o}- ${BT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof JD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=$K.indexOf(p),I=$K.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!rz(o[p])).map((p,h)=>{let E=o[p],I=ez(p),v=BT(E,e+1,!0),x=h>0||r?n:"",C=I.length>1024?`? ${I} -${x}:`:`${I}:`,R=v.startsWith(` -`)?v:` ${v}`;return`${x}${C}${R}`}).join(e===0?` +${t.map(n=>`${o}- ${vT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XP?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=$K.indexOf(p),I=$K.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!rz(o[p])).map((p,h)=>{let E=o[p],I=ez(p),v=vT(E,e+1,!0),x=h>0||r?n:"",C=I.length>1024?`? ${I} +${x}:`:`${I}:`,F=v.startsWith(` +`)?v:` ${v}`;return`${x}${C}${F}`}).join(e===0?` `:"")||` `;return r?` -${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=BT(t,0,!1);return e!==` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=vT(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 V6e(t){return t.endsWith(` `)||(t+=` -`),(0,tz.parse)(t)}function X6e(t){if(J6e.test(t))return V6e(t);let e=(0,XD.safeLoad)(t,{schema:XD.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 Ki(t){return X6e(t)}var XD,tz,z6e,$K,JD,J6e,nz=Et(()=>{XD=$e(JK()),tz=$e(ZK()),z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],JD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=JD;J6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var rI={};zt(rI,{parseResolution:()=>MD,parseShell:()=>LD,parseSyml:()=>Ki,stringifyArgument:()=>cT,stringifyArgumentSegment:()=>uT,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>lT,stringifyCommandChain:()=>uy,stringifyCommandChainThen:()=>aT,stringifyCommandLine:()=>ND,stringifyCommandLineThen:()=>oT,stringifyEnvSegment:()=>TD,stringifyRedirectArgument:()=>Vw,stringifyResolution:()=>UD,stringifyShell:()=>cy,stringifyShellLine:()=>cy,stringifySyml:()=>Ba,stringifyValueArgument:()=>Wg});var Nl=Et(()=>{rW();oW();nz()});var sz=_((Cxt,vT)=>{"use strict";var Z6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=Z6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};vT.exports=iz;vT.exports.default=iz});var oz=_((wxt,$6e)=>{$6e.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:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{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:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{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:"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:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{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",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{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"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var rd=_(Za=>{"use strict";var lz=oz(),Gu=process.env;Object.defineProperty(Za,"_vendors",{value:lz.map(function(t){return t.constant})});Za.name=null;Za.isPR=null;lz.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return az(o)});if(Za[t.constant]=r,r)switch(Za.name=t.name,typeof t.pr){case"string":Za.isPR=!!Gu[t.pr];break;case"object":"env"in t.pr?Za.isPR=t.pr.env in Gu&&Gu[t.pr.env]!==t.pr.ne:"any"in t.pr?Za.isPR=t.pr.any.some(function(o){return!!Gu[o]}):Za.isPR=az(t.pr);break;default:Za.isPR=null}});Za.isCI=!!(Gu.CI||Gu.CONTINUOUS_INTEGRATION||Gu.BUILD_NUMBER||Gu.RUN_ID||Za.name);function az(t){return typeof t=="string"?!!Gu[t]:Object.keys(t).every(function(e){return Gu[e]===t[e]})}});var Hn,cn,nd,DT,ZD,cz,PT,ST,$D=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));nd=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,ZD=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cz=/^-[a-zA-Z]{2,}$/,PT=/^([^=]+)=([\s\S]*)$/,ST=process.env.DEBUG_CLI==="1"});var it,yy,eP,bT,tP=Et(()=>{$D();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},yy=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} +`),(0,tz.parse)(t)}function X6e(t){if(J6e.test(t))return V6e(t);let e=(0,ZP.safeLoad)(t,{schema:ZP.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 Ki(t){return X6e(t)}var ZP,tz,z6e,$K,XP,J6e,nz=Et(()=>{ZP=Ze(JK()),tz=Ze(ZK()),z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XP=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XP;J6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var eI={};zt(eI,{parseResolution:()=>UP,parseShell:()=>NP,parseSyml:()=>Ki,stringifyArgument:()=>uT,stringifyArgumentSegment:()=>AT,stringifyArithmeticExpression:()=>MP,stringifyCommand:()=>cT,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>lT,stringifyCommandLine:()=>OP,stringifyCommandLineThen:()=>aT,stringifyEnvSegment:()=>LP,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_P,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Wg});var Nl=Et(()=>{rW();oW();nz()});var sz=_((Ixt,PT)=>{"use strict";var Z6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=Z6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PT.exports=iz;PT.exports.default=iz});var oz=_((Bxt,$6e)=>{$6e.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:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{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:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{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:"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:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{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",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{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"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var rd=_(Za=>{"use strict";var lz=oz(),Gu=process.env;Object.defineProperty(Za,"_vendors",{value:lz.map(function(t){return t.constant})});Za.name=null;Za.isPR=null;lz.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return az(o)});if(Za[t.constant]=r,r)switch(Za.name=t.name,typeof t.pr){case"string":Za.isPR=!!Gu[t.pr];break;case"object":"env"in t.pr?Za.isPR=t.pr.env in Gu&&Gu[t.pr.env]!==t.pr.ne:"any"in t.pr?Za.isPR=t.pr.any.some(function(o){return!!Gu[o]}):Za.isPR=az(t.pr);break;default:Za.isPR=null}});Za.isCI=!!(Gu.CI||Gu.CONTINUOUS_INTEGRATION||Gu.BUILD_NUMBER||Gu.RUN_ID||Za.name);function az(t){return typeof t=="string"?!!Gu[t]:Object.keys(t).every(function(e){return Gu[e]===t[e]})}});var Hn,un,nd,DT,$P,cz,ST,bT,eD=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(un||(un={}));nd=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,$P=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cz=/^-[a-zA-Z]{2,}$/,ST=/^([^=]+)=([\s\S]*)$/,bT=process.env.DEBUG_CLI==="1"});var it,my,tD,xT,rD=Et(()=>{eD();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} ${this.candidates.map(({usage:a})=>`$ ${a}`).join(` `)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: $ ${o} -${bT(e)}`}else this.message=`Command not found; did you mean one of: +${xT(e)}`}else this.message=`Command not found; did you mean one of: ${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` `)} -${bT(e)}`}},eP=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: +${xT(e)}`}},tD=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: ${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` `)} -${bT(e)}`}},bT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function eqe(t){let e=t.split(` +${xT(e)}`}},xT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function eqe(t){let e=t.split(` `),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` -`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`)}function vo(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` `),t=eqe(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 `),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` @@ -87,66 +87,66 @@ ${bT(e)}`}},bT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPa `)}).join(` `)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var xT,uz,Az,kT=Et(()=>{xT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)xT[xT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uz={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${xT.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`},Az={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ko(t){return{...t,[nI]:!0}}function ju(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function rP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function iI(t,e){return e.length===1?new it(`${t}${rP(e[0],{mergeName:!0})}`):new it(`${t}: +`:""}var kT,uz,Az,QT=Et(()=>{kT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)kT[kT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uz={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${kT.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`},Az={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Wo(t){return{...t,[tI]:!0}}function ju(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nD(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function rI(t,e){return e.length===1?new it(`${t}${nD(e[0],{mergeName:!0})}`):new it(`${t}: ${e.map(r=>` -- ${rP(r)}`).join("")}`)}function id(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw iI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var nI,Ef=Et(()=>{tP();nI=Symbol("clipanion/isOption")});var zo={};zt(zo,{KeyRelationship:()=>Yu,TypeAssertionError:()=>zp,applyCascade:()=>aI,as:()=>Eqe,assert:()=>dqe,assertWithErrors:()=>mqe,cascade:()=>oP,fn:()=>Cqe,hasAtLeastOneKey:()=>OT,hasExactLength:()=>dz,hasForbiddenKeys:()=>Uqe,hasKeyRelationship:()=>cI,hasMaxLength:()=>Iqe,hasMinLength:()=>wqe,hasMutuallyExclusiveKeys:()=>_qe,hasRequiredKeys:()=>Mqe,hasUniqueItems:()=>Bqe,isArray:()=>nP,isAtLeast:()=>LT,isAtMost:()=>Pqe,isBase64:()=>Tqe,isBoolean:()=>lqe,isDate:()=>uqe,isDict:()=>pqe,isEnum:()=>Ks,isHexColor:()=>Rqe,isISO8601:()=>Fqe,isInExclusiveRange:()=>bqe,isInInclusiveRange:()=>Sqe,isInstanceOf:()=>gqe,isInteger:()=>NT,isJSON:()=>Lqe,isLiteral:()=>pz,isLowerCase:()=>xqe,isMap:()=>fqe,isNegative:()=>vqe,isNullable:()=>Oqe,isNumber:()=>RT,isObject:()=>hz,isOneOf:()=>TT,isOptional:()=>Nqe,isPartial:()=>hqe,isPayload:()=>cqe,isPositive:()=>Dqe,isRecord:()=>sP,isSet:()=>Aqe,isString:()=>Cy,isTuple:()=>iP,isUUID4:()=>Qqe,isUnknown:()=>FT,isUpperCase:()=>kqe,makeTrait:()=>gz,makeValidator:()=>Hr,matchesRegExp:()=>oI,softAssert:()=>yqe});function qn(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 Ey(t,e){if(t.length===0)return"nothing";if(t.length===1)return qn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>qn(n)).join(", ")}${a}${qn(o)}`}function Kp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:tqe.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function QT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function oqe(t,e){return r=>{t[e]=r}}function Wu(t,e){return r=>{let o=t[e];return t[e]=r,Wu(t,e).bind(null,o)}}function sI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pz(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${qn(t)} (got ${qn(e)})`):!0})}function Cy(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${qn(t)})`):!0})}function Ks(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pz([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${Ey(e,"or")} (got ${qn(a)})`):pr(n,`Expected a valid enumeration value (got ${qn(a)})`)})}function lqe(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=aqe.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${qn(t)})`)}return!0}})}function RT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${qn(t)})`)}return!0}})}function cqe(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${qn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${qn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Wu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function uqe(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fz.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${qn(t)})`)}return!0}})}function nP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${qn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",sI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Wu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",sI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${qn(o)})`)}})}function fqe(t,e){let r=nP(iP([t,e])),o=sP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",sI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Kp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",sI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Wu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",sI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${qn(a)})`)}})}function iP(t,{delimiter:e}={}){let r=dz(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${qn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${qn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${qn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Kp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Kp(n,h),coercion:Wu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Kp(n,h)}),`Extraneous property (got ${qn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:oqe(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function hqe(t){return hz(t,{extra:sP(FT())})}function gz(t){return()=>t}function Hr({test:t}){return gz(t)()}function dqe(t,e){if(!e(t))throw new zp}function mqe(t,e){let r=[];if(!e(t,{errors:r}))throw new zp({errors:r})}function yqe(t,e){}function Eqe(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Wu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Cqe(t,e){let r=iP(t);return(...o)=>{if(!r(o))throw new zp;return e(...o)}}function wqe(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Iqe(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dz(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Bqe({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function Dqe(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function LT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function Pqe(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Sqe(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function bqe(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function oI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${qn(e)})`)})}function xqe(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function kqe(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Qqe(){return Hr({test:(t,e)=>sqe.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${qn(t)})`)})}function Fqe(){return Hr({test:(t,e)=>fz.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${qn(t)})`)})}function Rqe({alpha:t=!1}){return Hr({test:(e,r)=>(t?rqe.test(e):nqe.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${qn(e)})`)})}function Tqe(){return Hr({test:(t,e)=>iqe.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${qn(t)})`)})}function Lqe(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${qn(e)})`)}return t(o,r)}})}function oP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Wu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function aI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return oP(t,r)}function Nqe(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Oqe(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function Mqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function OT(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${Ey(Array.from(o),"or")}`)})}function Uqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function _qe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${Ey(p,"and")}`):!0}})}function cI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=lI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Hqe[e],E=e===Yu.Forbids?"or":"and";return Hr({test:(I,v)=>{let x=new Set(Object.keys(I));if(!A(x,t,I)||u.has(I[t]))return!0;let C=[];for(let R of p)(A(x,R,I)&&!u.has(I[R]))!==h.expect&&C.push(R);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${QT(C.length,"property","properties")} ${Ey(C,E)}`):!0}})}var tqe,rqe,nqe,iqe,sqe,fz,aqe,gqe,TT,zp,lI,Yu,Hqe,$a=Et(()=>{tqe=/^[a-zA-Z_][a-zA-Z0-9_]*$/;rqe=/^#[0-9a-f]{6}$/i,nqe=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iqe=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,sqe=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fz=/^(?:[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)?)$/;aqe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);gqe=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${qn(e)})`)}),TT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});zp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +- ${nD(r)}`).join("")}`)}function id(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw rI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var tI,Ef=Et(()=>{rD();tI=Symbol("clipanion/isOption")});var Ko={};zt(Ko,{KeyRelationship:()=>Yu,TypeAssertionError:()=>zp,applyCascade:()=>sI,as:()=>Eqe,assert:()=>dqe,assertWithErrors:()=>mqe,cascade:()=>aD,fn:()=>Cqe,hasAtLeastOneKey:()=>MT,hasExactLength:()=>dz,hasForbiddenKeys:()=>Uqe,hasKeyRelationship:()=>aI,hasMaxLength:()=>Iqe,hasMinLength:()=>wqe,hasMutuallyExclusiveKeys:()=>_qe,hasRequiredKeys:()=>Mqe,hasUniqueItems:()=>Bqe,isArray:()=>iD,isAtLeast:()=>NT,isAtMost:()=>Dqe,isBase64:()=>Tqe,isBoolean:()=>lqe,isDate:()=>uqe,isDict:()=>pqe,isEnum:()=>Vs,isHexColor:()=>Fqe,isISO8601:()=>Rqe,isInExclusiveRange:()=>bqe,isInInclusiveRange:()=>Sqe,isInstanceOf:()=>gqe,isInteger:()=>OT,isJSON:()=>Lqe,isLiteral:()=>pz,isLowerCase:()=>xqe,isMap:()=>fqe,isNegative:()=>vqe,isNullable:()=>Oqe,isNumber:()=>TT,isObject:()=>hz,isOneOf:()=>LT,isOptional:()=>Nqe,isPartial:()=>hqe,isPayload:()=>cqe,isPositive:()=>Pqe,isRecord:()=>oD,isSet:()=>Aqe,isString:()=>Ey,isTuple:()=>sD,isUUID4:()=>Qqe,isUnknown:()=>FT,isUpperCase:()=>kqe,makeTrait:()=>gz,makeValidator:()=>Hr,matchesRegExp:()=>iI,softAssert:()=>yqe});function qn(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 yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return qn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>qn(n)).join(", ")}${a}${qn(o)}`}function Kp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:tqe.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function RT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function oqe(t,e){return r=>{t[e]=r}}function Wu(t,e){return r=>{let o=t[e];return t[e]=r,Wu(t,e).bind(null,o)}}function nI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pz(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${qn(t)} (got ${qn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${qn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pz([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${qn(a)})`):pr(n,`Expected a valid enumeration value (got ${qn(a)})`)})}function lqe(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=aqe.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${qn(t)})`)}return!0}})}function TT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${qn(t)})`)}return!0}})}function cqe(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${qn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${qn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Wu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function uqe(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fz.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${qn(t)})`)}return!0}})}function iD(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${qn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",nI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Wu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",nI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${qn(o)})`)}})}function fqe(t,e){let r=iD(sD([t,e])),o=oD(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",nI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Kp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",nI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Wu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",nI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${qn(a)})`)}})}function sD(t,{delimiter:e}={}){let r=dz(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${qn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${qn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${qn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Kp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Kp(n,h),coercion:Wu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Kp(n,h)}),`Extraneous property (got ${qn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:oqe(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function hqe(t){return hz(t,{extra:oD(FT())})}function gz(t){return()=>t}function Hr({test:t}){return gz(t)()}function dqe(t,e){if(!e(t))throw new zp}function mqe(t,e){let r=[];if(!e(t,{errors:r}))throw new zp({errors:r})}function yqe(t,e){}function Eqe(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Wu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Cqe(t,e){let r=sD(t);return(...o)=>{if(!r(o))throw new zp;return e(...o)}}function wqe(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Iqe(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dz(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Bqe({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function Pqe(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function NT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function Dqe(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Sqe(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function bqe(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function iI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${qn(e)})`)})}function xqe(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function kqe(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Qqe(){return Hr({test:(t,e)=>sqe.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${qn(t)})`)})}function Rqe(){return Hr({test:(t,e)=>fz.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${qn(t)})`)})}function Fqe({alpha:t=!1}){return Hr({test:(e,r)=>(t?rqe.test(e):nqe.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${qn(e)})`)})}function Tqe(){return Hr({test:(t,e)=>iqe.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${qn(t)})`)})}function Lqe(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${qn(e)})`)}return t(o,r)}})}function aD(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Wu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function sI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aD(t,r)}function Nqe(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Oqe(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function Mqe(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${RT(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function MT(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function Uqe(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${RT(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function _qe(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function aI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=oI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Hqe[e],E=e===Yu.Forbids?"or":"and";return Hr({test:(I,v)=>{let x=new Set(Object.keys(I));if(!A(x,t,I)||u.has(I[t]))return!0;let C=[];for(let F of p)(A(x,F,I)&&!u.has(I[F]))!==h.expect&&C.push(F);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${RT(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var tqe,rqe,nqe,iqe,sqe,fz,aqe,gqe,LT,zp,oI,Yu,Hqe,$a=Et(()=>{tqe=/^[a-zA-Z_][a-zA-Z0-9_]*$/;rqe=/^#[0-9a-f]{6}$/i,nqe=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iqe=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,sqe=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fz=/^(?:[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)?)$/;aqe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);gqe=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${qn(e)})`)}),LT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});zp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` `;for(let o of e)r+=` -- ${o}`}super(r)}};lI={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"})(Yu||(Yu={}));Hqe={[Yu.Forbids]:{expect:!1,message:"forbids using"},[Yu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{Ef();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>($a(),zo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw iI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=nI;nt.Default=[]});function va(t){ST&&console.log(t)}function yz(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function jqe(t,{prefix:e=""}={}){if(ST){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new yy(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Kqe(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Wqe(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Yqe(t,[...e,r]);return zqe(e,o.map(({state:a})=>a))}function Kqe(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 zqe(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===nd||v.requiredOptions.every(x=>x.some(C=>v.options.find(R=>R.name===C))));if(a.length===0)throw new yy(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:x})=>!x).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Vqe(E);if(I.length>1)throw new eP(t,I.map(v=>v.candidateUsage));return I[0]}function Vqe(t){let e=[],r=[];for(let o of t)o.selectedIndex===nd?r.push(o):e.push(o);return r.length>0&&e.push({...mz,path:Ez(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function Ez(t,e,...r){return e===void 0?Array.from(t):Ez(t.filter((o,a)=>o===e[a]),...r)}function el(){return{dynamics:[],shortcuts:[],statics:{}}}function Cz(t){return t===cn.SuccessNode||t===cn.ErrorNode}function MT(t,e=0){return{to:Cz(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function Jqe(t,e=0){let r=el();for(let[o,a]of t.dynamics)r.dynamics.push([o,MT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(MT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>MT(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function wy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Vo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function aP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var mz,Xqe,UT,tl,_T,Iy,lP=Et(()=>{$D();tP();mz={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:nd,partial:!1,tokens:[]};Xqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cz.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(PT);return!t.ignoreOptions&&!!n&&ZD.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&ZD.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!ZD.test(e)},UT={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(PT),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:tl}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},tl=Symbol(),_T=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===tl)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!==tl?this.arity.extra.push(e):this.arity.extra!==tl&&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===tl)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===tl?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yz(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,el()),Vo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,el());wy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,el());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Vo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",nd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Vo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Vo(e,x,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,x,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",x,"pushPositional"),h=x}let E=h;if(this.arity.extra===tl||this.arity.extra.length>0){let v=Mc(e,el());if(wy(e,h,v),this.arity.extra===tl){let x=Mc(e,el());this.arity.proxy||this.registerOptions(e,x),Ss(e,h,n,x,"pushExtraNoLimits"),Ss(e,x,n,x,"pushExtraNoLimits"),wy(e,x,v)}else for(let x=0;x0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),wy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Vo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Wqe(o,a,{endToken:u})}}}}});function Iz(){return cP.default&&"getColorDepth"in cP.default.WriteStream.prototype?cP.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 Bz(t){let e=wz;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=wz=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var cP,wz,vz=Et(()=>{cP=$e(ve("tty"),1)});var By,Dz=Et(()=>{Vp();By=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new By(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +- ${o}`}super(r)}};oI={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"})(Yu||(Yu={}));Hqe={[Yu.Forbids]:{expect:!1,message:"forbids using"},[Yu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{Ef();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>($a(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw rI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=tI;nt.Default=[]});function va(t){bT&&console.log(t)}function yz(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(un.InitialNode)}function jqe(t,{prefix:e=""}={}){if(bT){va(`${e}Nodes are:`);for(let r=0;rE!==un.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===un.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Kqe(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Wqe(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Yqe(t,[...e,r]);return zqe(e,o.map(({state:a})=>a))}function Kqe(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 zqe(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===nd||v.requiredOptions.every(x=>x.some(C=>v.options.find(F=>F.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:x})=>!x).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Vqe(E);if(I.length>1)throw new tD(t,I.map(v=>v.candidateUsage));return I[0]}function Vqe(t){let e=[],r=[];for(let o of t)o.selectedIndex===nd?r.push(o):e.push(o);return r.length>0&&e.push({...mz,path:Ez(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function Ez(t,e,...r){return e===void 0?Array.from(t):Ez(t.filter((o,a)=>o===e[a]),...r)}function el(){return{dynamics:[],shortcuts:[],statics:{}}}function Cz(t){return t===un.SuccessNode||t===un.ErrorNode}function UT(t,e=0){return{to:Cz(t.to)?t.to:t.to>=un.CustomNode?t.to+e-un.CustomNode+1:t.to+e,reducer:t.reducer}}function Jqe(t,e=0){let r=el();for(let[o,a]of t.dynamics)r.dynamics.push([o,UT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(UT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>UT(n,e));return r}function xs(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function zo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lD(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var mz,Xqe,_T,tl,HT,wy,cD=Et(()=>{eD();rD();mz={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:nd,partial:!1,tokens:[]};Xqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cz.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(ST);return!t.ignoreOptions&&!!n&&$P.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$P.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$P.test(e)},_T={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(ST),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:tl}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},tl=Symbol(),HT=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===tl)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!==tl?this.arity.extra.push(e):this.arity.extra!==tl&&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===tl)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===tl?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yz(),r=un.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,el()),zo(e,un.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,el());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,el());xs(e,p,"isHelp",v,["useHelp",this.cliIndex]),xs(e,v,"always",v,"pushExtra"),zo(e,v,Hn.EndOfInput,un.SuccessNode,["setSelectedIndex",nd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(zo(e,p,Hn.EndOfInput,un.ErrorNode,["setError","Not enough positional arguments"]),zo(e,p,Hn.EndOfPartialInput,un.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(zo(e,x,Hn.EndOfInput,un.ErrorNode,["setError","Not enough positional arguments"]),zo(e,x,Hn.EndOfPartialInput,un.SuccessNode,["setPartialIndex",this.cliIndex])),xs(e,h,"isNotOptionLike",x,"pushPositional"),h=x}let E=h;if(this.arity.extra===tl||this.arity.extra.length>0){let v=Mc(e,el());if(Cy(e,h,v),this.arity.extra===tl){let x=Mc(e,el());this.arity.proxy||this.registerOptions(e,x),xs(e,h,n,x,"pushExtraNoLimits"),xs(e,x,n,x,"pushExtraNoLimits"),Cy(e,x,v)}else for(let x=0;x0)&&this.registerOptions(e,C),xs(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(zo(e,E,Hn.EndOfInput,un.ErrorNode,["setError","Not enough positional arguments"]),zo(e,E,Hn.EndOfPartialInput,un.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Wqe(o,a,{endToken:u})}}}}});function Iz(){return uD.default&&"getColorDepth"in uD.default.WriteStream.prototype?uD.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 Bz(t){let e=wz;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=wz=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uD,wz,vz=Et(()=>{uD=Ze(ve("tty"),1)});var Iy,Pz=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: `),this.context.stdout.write(` `);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` `),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}}});async function bz(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kz(t);return as.from(r,e).runExit(o,a)}async function xz(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kz(t);return as.from(r,e).run(o,a)}function kz(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function Sz(t){return t()}var Pz,as,Qz=Et(()=>{$D();lP();kT();vz();Vp();Dz();Pz=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Iy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case nd:{let E=By.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[x,{transformer:C}]of I.specs.entries())v[x]=C(I.builder,x,p,h);return v}catch(x){throw x[Pz]=v,x}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=Bz(u))!==null&&a!==void 0?a:Sz,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(x=>x.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,x=>x.toUpperCase()),A+=` +`)}}}});async function bz(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kz(t);return ls.from(r,e).runExit(o,a)}async function xz(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kz(t);return ls.from(r,e).run(o,a)}function kz(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function Sz(t){return t()}var Dz,ls,Qz=Et(()=>{eD();cD();QT();vz();Vp();Pz();Dz=Symbol("clipanion/errorCommand");ls=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new ls(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...ls.defaultContext,...a};switch(p.selectedIndex){case nd:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[x,{transformer:C}]of I.specs.entries())v[x]=C(I.builder,x,p,h);return v}catch(x){throw x[Dz]=v,x}}break}}async run(e,r){var o,a;let n,u={...ls.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=Bz(u))!==null&&a!==void 0?a:Sz,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?vo(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?vo(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?vo(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[vo(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(x=>x.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=vo(p,{format:this.format(r),paragraphs:!1}).replace(/^./,x=>x.toUpperCase()),A+=` `),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} `,A+=` `);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} `,v.length>0){A+=` `,A+=`${this.format(r).header("Options")} -`;let x=v.reduce((C,R)=>Math.max(C,R.definition.length),0);A+=` -`;for(let{definition:C,description:R}of v)A+=` ${this.format(r).bold(C.padEnd(x))} ${Do(R,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`;let x=v.reduce((C,F)=>Math.max(C,F.definition.length),0);A+=` +`;for(let{definition:C,description:F}of v)A+=` ${this.format(r).bold(C.padEnd(x))} ${vo(F,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` `,A+=`${this.format(r).header("Details")} `,A+=` -`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=vo(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` `,A+=`${this.format(r).header("Examples")} `;for(let[x,C]of E)A+=` -`,A+=Do(x,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`,A+=vo(x,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} `}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[v,{index:x}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,R=p.get(C);typeof R>"u"&&p.set(C,R=[]);let{usage:N}=this.getUsageByIndex(x);R.push({commandClass:v,usage:N})}let h=Array.from(p.keys()).sort((v,x)=>v===null?-1:x===null?1:v.localeCompare(x,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} +`}else{let p=new Map;for(let[v,{index:x}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?vo(v.usage.category,{format:this.format(r),paragraphs:!1}):null,F=p.get(C);typeof F>"u"&&p.set(C,F=[]);let{usage:N}=this.getUsageByIndex(x);F.push({commandClass:v,usage:N})}let h=Array.from(p.keys()).sort((v,x)=>v===null?-1:x===null?1:v.localeCompare(x,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} `:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} `:A+=`${this.format(r).header(`${this.binaryVersion}`)} `,A+=` ${this.format(r).bold(a)}${this.binaryName} `):A+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let v of h){let x=p.get(v).slice().sort((R,N)=>R.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`;for(let v of h){let x=p.get(v).slice().sort((F,N)=>F.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` `,A+=`${this.format(r).header(`${C}`)} -`;for(let{commandClass:R,usage:N}of x){let U=R.usage.description||"undocumented";A+=` +`;for(let{commandClass:F,usage:N}of x){let U=F.usage.description||"undocumented";A+=` `,A+=` ${this.format(r).bold(N)} -`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` -`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[Pz])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`,A+=` ${vo(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=vo("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[Dz])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} `;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` `,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} -`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?uz:Az}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:Iz()}});var uI,Fz=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};uI.paths=[["--clipanion=definitions"]]});var AI,Rz=Et(()=>{Vp();AI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};AI.paths=[["-h"],["--help"]]});function uP(t={}){return Ko({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var HT=Et(()=>{Ef()});var fI,Tz=Et(()=>{Vp();HT();fI=class extends nt{constructor(){super(...arguments),this.args=uP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};fI.paths=[["--clipanion=tokens"]]});var pI,Lz=Et(()=>{Vp();pI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};pI.paths=[["-v"],["--version"]]});var qT={};zt(qT,{DefinitionsCommand:()=>uI,HelpCommand:()=>AI,TokensCommand:()=>fI,VersionCommand:()=>pI});var Nz=Et(()=>{Fz();Rz();Tz();Lz()});function Oz(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:x,value:C}of E.options)!A.has(x)||(I=x,v=v??[],v.push(C));return typeof v<"u"?id(I??h,v,a.validator):v}})}var Mz=Et(()=>{Ef()});function Uz(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var _z=Et(()=>{Ef()});function Hz(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var qz=Et(()=>{Ef()});function Gz(t={}){return Ko({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===tl||A.extra===!1&&uu)}})}var jz=Et(()=>{lP();Ef()});function Zqe(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,x=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,x=I.env[a.env]);for(let{name:C,value:R}of E.options)!A.has(C)||(v=C,x=R);return typeof x=="string"?id(v??h,x,a.validator):x}})}function $qe(t={}){let{required:e=!0}=t;return Ko({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{lP();Ef()});var ge={};zt(ge,{Array:()=>Oz,Boolean:()=>Uz,Counter:()=>Hz,Proxy:()=>uP,Rest:()=>Gz,String:()=>Yz,applyValidator:()=>id,cleanValidationError:()=>rP,formatError:()=>iI,isOptionSymbol:()=>nI,makeCommandOption:()=>Ko,rerouteArguments:()=>ju});var Kz=Et(()=>{Ef();HT();Mz();_z();qz();jz();Wz()});var hI={};zt(hI,{Builtins:()=>qT,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>xz,runExit:()=>bz});var qt=Et(()=>{tP();kT();Vp();Qz();Nz();Kz()});var zz=_((bkt,eGe)=>{eGe.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 Zz=_((xkt,Cf)=>{var Vz=ve("fs"),jT=ve("path"),tGe=ve("os"),rGe=ve("crypto"),nGe=zz(),YT=nGe.version,iGe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function sGe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:ls.defaultContext.colorDepth>1)?uz:Az}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};ls.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:Iz()}});var lI,Rz=Et(()=>{Vp();lI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};lI.paths=[["--clipanion=definitions"]]});var cI,Fz=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};cI.paths=[["-h"],["--help"]]});function AD(t={}){return Wo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qT=Et(()=>{Ef()});var uI,Tz=Et(()=>{Vp();qT();uI=class extends nt{constructor(){super(...arguments),this.args=AD()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};uI.paths=[["--clipanion=tokens"]]});var AI,Lz=Et(()=>{Vp();AI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};AI.paths=[["-v"],["--version"]]});var GT={};zt(GT,{DefinitionsCommand:()=>lI,HelpCommand:()=>cI,TokensCommand:()=>uI,VersionCommand:()=>AI});var Nz=Et(()=>{Rz();Fz();Tz();Lz()});function Oz(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Wo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:x,value:C}of E.options)!A.has(x)||(I=x,v=v??[],v.push(C));return typeof v<"u"?id(I??h,v,a.validator):v}})}var Mz=Et(()=>{Ef()});function Uz(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Wo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var _z=Et(()=>{Ef()});function Hz(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Wo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var qz=Et(()=>{Ef()});function Gz(t={}){return Wo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===tl||A.extra===!1&&uu)}})}var jz=Et(()=>{cD();Ef()});function Zqe(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Wo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,x=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,x=I.env[a.env]);for(let{name:C,value:F}of E.options)!A.has(C)||(v=C,x=F);return typeof x=="string"?id(v??h,x,a.validator):x}})}function $qe(t={}){let{required:e=!0}=t;return Wo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cD();Ef()});var ge={};zt(ge,{Array:()=>Oz,Boolean:()=>Uz,Counter:()=>Hz,Proxy:()=>AD,Rest:()=>Gz,String:()=>Yz,applyValidator:()=>id,cleanValidationError:()=>nD,formatError:()=>rI,isOptionSymbol:()=>tI,makeCommandOption:()=>Wo,rerouteArguments:()=>ju});var Kz=Et(()=>{Ef();qT();Mz();_z();qz();jz();Wz()});var fI={};zt(fI,{Builtins:()=>GT,Cli:()=>ls,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>vo,run:()=>xz,runExit:()=>bz});var qt=Et(()=>{rD();QT();Vp();Qz();Nz();Kz()});var zz=_((kkt,eGe)=>{eGe.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 Zz=_((Qkt,Cf)=>{var Vz=ve("fs"),YT=ve("path"),tGe=ve("os"),rGe=ve("crypto"),nGe=zz(),WT=nGe.version,iGe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function sGe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` `);let o;for(;(o=iGe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function oGe(t){let e=Xz(t),r=bs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=Jz(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return bs.parse(n)}function aGe(t){console.log(`[dotenv@${YT}][INFO] ${t}`)}function lGe(t){console.log(`[dotenv@${YT}][WARN] ${t}`)}function GT(t){console.log(`[dotenv@${YT}][DEBUG] ${t}`)}function Jz(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 cGe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function Xz(t){let e=jT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function uGe(t){return t[0]==="~"?jT.join(tGe.homedir(),t.slice(1)):t}function AGe(t){aGe("Loading env from encrypted .env.vault");let e=bs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),bs.populate(r,e,t),{parsed:e}}function fGe(t){let e=jT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=uGe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=bs.parse(Vz.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),bs.populate(n,a,t),{parsed:a}}catch(a){return o&>(`Failed to load ${e} ${a.message}`),{error:a}}}function pGe(t){let e=Xz(t);return Jz(t).length===0?bs.configDotenv(t):Vz.existsSync(e)?bs._configVault(t):(lGe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),bs.configDotenv(t))}function hGe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=rGe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function gGe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&>(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var bs={configDotenv:fGe,_configVault:AGe,_parseVault:oGe,config:pGe,decrypt:hGe,parse:sGe,populate:gGe};Cf.exports.configDotenv=bs.configDotenv;Cf.exports._configVault=bs._configVault;Cf.exports._parseVault=bs._parseVault;Cf.exports.config=bs.config;Cf.exports.decrypt=bs.decrypt;Cf.exports.parse=bs.parse;Cf.exports.populate=bs.populate;Cf.exports=bs});var eV=_((kkt,$z)=>{"use strict";$z.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var sd=_((Qkt,WT)=>{"use strict";var dGe=eV(),tV=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=dGe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};WT.exports=tV;WT.exports.default=tV});function Ku(t){return`YN${t.toString(10).padStart(4,"0")}`}function AP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,fP=Et(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var gI=_((Rkt,rV)=>{var mGe="2.0.0",yGe=Number.MAX_SAFE_INTEGER||9007199254740991,EGe=16,CGe=256-6,wGe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];rV.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:EGe,MAX_SAFE_BUILD_LENGTH:CGe,MAX_SAFE_INTEGER:yGe,RELEASE_TYPES:wGe,SEMVER_SPEC_VERSION:mGe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var dI=_((Tkt,nV)=>{var IGe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};nV.exports=IGe});var vy=_((wf,iV)=>{var{MAX_SAFE_COMPONENT_LENGTH:KT,MAX_SAFE_BUILD_LENGTH:BGe,MAX_LENGTH:vGe}=gI(),DGe=dI();wf=iV.exports={};var PGe=wf.re=[],SGe=wf.safeRe=[],lr=wf.src=[],cr=wf.t={},bGe=0,zT="[a-zA-Z0-9-]",xGe=[["\\s",1],["\\d",vGe],[zT,BGe]],kGe=t=>{for(let[e,r]of xGe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Vr=(t,e,r)=>{let o=kGe(e),a=bGe++;DGe(t,a,e),cr[t]=a,lr[a]=e,PGe[a]=new RegExp(e,r?"g":void 0),SGe[a]=new RegExp(o,r?"g":void 0)};Vr("NUMERICIDENTIFIER","0|[1-9]\\d*");Vr("NUMERICIDENTIFIERLOOSE","\\d+");Vr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zT}*`);Vr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Vr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Vr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Vr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Vr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Vr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Vr("BUILDIDENTIFIER",`${zT}+`);Vr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Vr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Vr("FULL",`^${lr[cr.FULLPLAIN]}$`);Vr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Vr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Vr("GTLT","((?:<|>)?=?)");Vr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Vr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Vr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Vr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Vr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Vr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Vr("COERCE",`(^|[^\\d])(\\d{1,${KT}})(?:\\.(\\d{1,${KT}}))?(?:\\.(\\d{1,${KT}}))?(?:$|[^\\d])`);Vr("COERCERTL",lr[cr.COERCE],!0);Vr("LONETILDE","(?:~>?)");Vr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);wf.tildeTrimReplace="$1~";Vr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Vr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Vr("LONECARET","(?:\\^)");Vr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);wf.caretTrimReplace="$1^";Vr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Vr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Vr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Vr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Vr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);wf.comparatorTrimReplace="$1$2$3";Vr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Vr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Vr("STAR","(<|>)?=?\\s*\\*");Vr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Vr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var pP=_((Lkt,sV)=>{var QGe=Object.freeze({loose:!0}),FGe=Object.freeze({}),RGe=t=>t?typeof t!="object"?QGe:t:FGe;sV.exports=RGe});var VT=_((Nkt,lV)=>{var oV=/^[0-9]+$/,aV=(t,e)=>{let r=oV.test(t),o=oV.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:taV(e,t);lV.exports={compareIdentifiers:aV,rcompareIdentifiers:TGe}});var Po=_((Okt,fV)=>{var hP=dI(),{MAX_LENGTH:cV,MAX_SAFE_INTEGER:gP}=gI(),{safeRe:uV,t:AV}=vy(),LGe=pP(),{compareIdentifiers:Dy}=VT(),rl=class{constructor(e,r){if(r=LGe(r),e instanceof rl){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>cV)throw new TypeError(`version is longer than ${cV} characters`);hP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?uV[AV.LOOSE]:uV[AV.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>gP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),Dy(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}};fV.exports=rl});var od=_((Mkt,hV)=>{var pV=Po(),NGe=(t,e,r=!1)=>{if(t instanceof pV)return t;try{return new pV(t,e)}catch(o){if(!r)return null;throw o}};hV.exports=NGe});var dV=_((Ukt,gV)=>{var OGe=od(),MGe=(t,e)=>{let r=OGe(t,e);return r?r.version:null};gV.exports=MGe});var yV=_((_kt,mV)=>{var UGe=od(),_Ge=(t,e)=>{let r=UGe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};mV.exports=_Ge});var wV=_((Hkt,CV)=>{var EV=Po(),HGe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new EV(t instanceof EV?t.version:t,r).inc(e,o,a).version}catch{return null}};CV.exports=HGe});var vV=_((qkt,BV)=>{var IV=od(),qGe=(t,e)=>{let r=IV(t,null,!0),o=IV(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};BV.exports=qGe});var PV=_((Gkt,DV)=>{var GGe=Po(),jGe=(t,e)=>new GGe(t,e).major;DV.exports=jGe});var bV=_((jkt,SV)=>{var YGe=Po(),WGe=(t,e)=>new YGe(t,e).minor;SV.exports=WGe});var kV=_((Ykt,xV)=>{var KGe=Po(),zGe=(t,e)=>new KGe(t,e).patch;xV.exports=zGe});var FV=_((Wkt,QV)=>{var VGe=od(),JGe=(t,e)=>{let r=VGe(t,e);return r&&r.prerelease.length?r.prerelease:null};QV.exports=JGe});var Ol=_((Kkt,TV)=>{var RV=Po(),XGe=(t,e,r)=>new RV(t,r).compare(new RV(e,r));TV.exports=XGe});var NV=_((zkt,LV)=>{var ZGe=Ol(),$Ge=(t,e,r)=>ZGe(e,t,r);LV.exports=$Ge});var MV=_((Vkt,OV)=>{var eje=Ol(),tje=(t,e)=>eje(t,e,!0);OV.exports=tje});var dP=_((Jkt,_V)=>{var UV=Po(),rje=(t,e,r)=>{let o=new UV(t,r),a=new UV(e,r);return o.compare(a)||o.compareBuild(a)};_V.exports=rje});var qV=_((Xkt,HV)=>{var nje=dP(),ije=(t,e)=>t.sort((r,o)=>nje(r,o,e));HV.exports=ije});var jV=_((Zkt,GV)=>{var sje=dP(),oje=(t,e)=>t.sort((r,o)=>sje(o,r,e));GV.exports=oje});var mI=_(($kt,YV)=>{var aje=Ol(),lje=(t,e,r)=>aje(t,e,r)>0;YV.exports=lje});var mP=_((eQt,WV)=>{var cje=Ol(),uje=(t,e,r)=>cje(t,e,r)<0;WV.exports=uje});var JT=_((tQt,KV)=>{var Aje=Ol(),fje=(t,e,r)=>Aje(t,e,r)===0;KV.exports=fje});var XT=_((rQt,zV)=>{var pje=Ol(),hje=(t,e,r)=>pje(t,e,r)!==0;zV.exports=hje});var yP=_((nQt,VV)=>{var gje=Ol(),dje=(t,e,r)=>gje(t,e,r)>=0;VV.exports=dje});var EP=_((iQt,JV)=>{var mje=Ol(),yje=(t,e,r)=>mje(t,e,r)<=0;JV.exports=yje});var ZT=_((sQt,XV)=>{var Eje=JT(),Cje=XT(),wje=mI(),Ije=yP(),Bje=mP(),vje=EP(),Dje=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return Eje(t,r,o);case"!=":return Cje(t,r,o);case">":return wje(t,r,o);case">=":return Ije(t,r,o);case"<":return Bje(t,r,o);case"<=":return vje(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};XV.exports=Dje});var $V=_((oQt,ZV)=>{var Pje=Po(),Sje=od(),{safeRe:CP,t:wP}=vy(),bje=(t,e)=>{if(t instanceof Pje)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(CP[wP.COERCE]);else{let o;for(;(o=CP[wP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),CP[wP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;CP[wP.COERCERTL].lastIndex=-1}return r===null?null:Sje(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ZV.exports=bje});var tJ=_((aQt,eJ)=>{"use strict";eJ.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var IP=_((lQt,rJ)=>{"use strict";rJ.exports=Cn;Cn.Node=ad;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.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};Cn.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};Cn.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 Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var Fje=IP(),ld=Symbol("max"),Bf=Symbol("length"),Py=Symbol("lengthCalculator"),EI=Symbol("allowStale"),cd=Symbol("maxAge"),If=Symbol("dispose"),nJ=Symbol("noDisposeOnSet"),xs=Symbol("lruList"),Uc=Symbol("cache"),sJ=Symbol("updateAgeOnGet"),$T=()=>1,tL=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[ld]=e.max||1/0,o=e.length||$T;if(this[Py]=typeof o!="function"?$T:o,this[EI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[cd]=e.maxAge||0,this[If]=e.dispose,this[nJ]=e.noDisposeOnSet||!1,this[sJ]=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[ld]=e||1/0,yI(this)}get max(){return this[ld]}set allowStale(e){this[EI]=!!e}get allowStale(){return this[EI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[cd]=e,yI(this)}get maxAge(){return this[cd]}set lengthCalculator(e){typeof e!="function"&&(e=$T),e!==this[Py]&&(this[Py]=e,this[Bf]=0,this[xs].forEach(r=>{r.length=this[Py](r.value,r.key),this[Bf]+=r.length})),yI(this)}get lengthCalculator(){return this[Py]}get length(){return this[Bf]}get itemCount(){return this[xs].length}rforEach(e,r){r=r||this;for(let o=this[xs].tail;o!==null;){let a=o.prev;iJ(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[xs].head;o!==null;){let a=o.next;iJ(this,e,o,r),o=a}}keys(){return this[xs].toArray().map(e=>e.key)}values(){return this[xs].toArray().map(e=>e.value)}reset(){this[If]&&this[xs]&&this[xs].length&&this[xs].forEach(e=>this[If](e.key,e.value)),this[Uc]=new Map,this[xs]=new Fje,this[Bf]=0}dump(){return this[xs].map(e=>BP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[xs]}set(e,r,o){if(o=o||this[cd],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Py](r,e);if(this[Uc].has(e)){if(n>this[ld])return Sy(this,this[Uc].get(e)),!1;let p=this[Uc].get(e).value;return this[If]&&(this[nJ]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[Bf]+=n-p.length,p.length=n,this.get(e),yI(this),!0}let u=new rL(e,r,n,a,o);return u.length>this[ld]?(this[If]&&this[If](e,r),!1):(this[Bf]+=u.length,this[xs].unshift(u),this[Uc].set(e,this[xs].head),yI(this),!0)}has(e){if(!this[Uc].has(e))return!1;let r=this[Uc].get(e).value;return!BP(this,r)}get(e){return eL(this,e,!0)}peek(e){return eL(this,e,!1)}pop(){let e=this[xs].tail;return e?(Sy(this,e),e.value):null}del(e){Sy(this,this[Uc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Uc].forEach((e,r)=>eL(this,r,!1))}},eL=(t,e,r)=>{let o=t[Uc].get(e);if(o){let a=o.value;if(BP(t,a)){if(Sy(t,o),!t[EI])return}else r&&(t[sJ]&&(o.value.now=Date.now()),t[xs].unshiftNode(o));return a.value}},BP=(t,e)=>{if(!e||!e.maxAge&&!t[cd])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[cd]&&r>t[cd]},yI=t=>{if(t[Bf]>t[ld])for(let e=t[xs].tail;t[Bf]>t[ld]&&e!==null;){let r=e.prev;Sy(t,e),e=r}},Sy=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[Bf]-=r.length,t[Uc].delete(r.key),t[xs].removeNode(e)}},rL=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},iJ=(t,e,r,o)=>{let a=r.value;BP(t,a)&&(Sy(t,r),t[EI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};oJ.exports=tL});var Ml=_((uQt,AJ)=>{var ud=class{constructor(e,r){if(r=Tje(r),e instanceof ud)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ud(e.raw,r);if(e instanceof nL)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!cJ(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&Hje(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&Uje)|(this.options.loose&&_je))+":"+e,a=lJ.get(o);if(a)return a;let n=this.options.loose,u=n?Da[Jo.HYPHENRANGELOOSE]:Da[Jo.HYPHENRANGE];e=e.replace(u,Xje(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[Jo.COMPARATORTRIM],Nje),ci("comparator trim",e),e=e.replace(Da[Jo.TILDETRIM],Oje),ci("tilde trim",e),e=e.replace(Da[Jo.CARETTRIM],Mje),ci("caret trim",e);let A=e.split(" ").map(I=>qje(I,this.options)).join(" ").split(/\s+/).map(I=>Jje(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[Jo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new nL(I,this.options));for(let I of h){if(cJ(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return lJ.set(o,E),E}intersects(e,r){if(!(e instanceof ud))throw new TypeError("a Range is required");return this.set.some(o=>uJ(o,r)&&e.set.some(a=>uJ(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Lje(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",Hje=t=>t.value==="",uJ=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},qje=(t,e)=>(ci("comp",t,e),t=Yje(t,e),ci("caret",t),t=Gje(t,e),ci("tildes",t),t=Kje(t,e),ci("xrange",t),t=Vje(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",Gje=(t,e)=>t.trim().split(/\s+/).map(r=>jje(r,e)).join(" "),jje=(t,e)=>{let r=e.loose?Da[Jo.TILDELOOSE]:Da[Jo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},Yje=(t,e)=>t.trim().split(/\s+/).map(r=>Wje(r,e)).join(" "),Wje=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[Jo.CARETLOOSE]:Da[Jo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},Kje=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>zje(r,e)).join(" ")),zje=(t,e)=>{t=t.trim();let r=e.loose?Da[Jo.XRANGELOOSE]:Da[Jo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},Vje=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[Jo.STAR],"")),Jje=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?Jo.GTE0PRE:Jo.GTE0],"")),Xje=t=>(e,r,o,a,n,u,A,p,h,E,I,v,x)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),Zje=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var CI=_((AQt,mJ)=>{var wI=Symbol("SemVer ANY"),by=class{static get ANY(){return wI}constructor(e,r){if(r=fJ(r),e instanceof by){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),sL("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===wI?this.value="":this.value=this.operator+this.semver.version,sL("comp",this)}parse(e){let r=this.options.loose?pJ[hJ.COMPARATORLOOSE]:pJ[hJ.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new gJ(o[2],this.options.loose):this.semver=wI}toString(){return this.value}test(e){if(sL("Comparator.test",e,this.options.loose),this.semver===wI||e===wI)return!0;if(typeof e=="string")try{e=new gJ(e,this.options)}catch{return!1}return iL(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof by))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new dJ(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new dJ(this.value,r).test(e.semver):(r=fJ(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("=")||iL(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||iL(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};mJ.exports=by;var fJ=pP(),{safeRe:pJ,t:hJ}=vy(),iL=ZT(),sL=dI(),gJ=Po(),dJ=Ml()});var II=_((fQt,yJ)=>{var $je=Ml(),e9e=(t,e,r)=>{try{e=new $je(e,r)}catch{return!1}return e.test(t)};yJ.exports=e9e});var CJ=_((pQt,EJ)=>{var t9e=Ml(),r9e=(t,e)=>new t9e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));EJ.exports=r9e});var IJ=_((hQt,wJ)=>{var n9e=Po(),i9e=Ml(),s9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new i9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new n9e(o,r))}),o};wJ.exports=s9e});var vJ=_((gQt,BJ)=>{var o9e=Po(),a9e=Ml(),l9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new a9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new o9e(o,r))}),o};BJ.exports=l9e});var SJ=_((dQt,PJ)=>{var oL=Po(),c9e=Ml(),DJ=mI(),u9e=(t,e)=>{t=new c9e(t,e);let r=new oL("0.0.0");if(t.test(r)||(r=new oL("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new oL(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||DJ(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||DJ(r,n))&&(r=n)}return r&&t.test(r)?r:null};PJ.exports=u9e});var xJ=_((mQt,bJ)=>{var A9e=Ml(),f9e=(t,e)=>{try{return new A9e(t,e).range||"*"}catch{return null}};bJ.exports=f9e});var vP=_((yQt,RJ)=>{var p9e=Po(),FJ=CI(),{ANY:h9e}=FJ,g9e=Ml(),d9e=II(),kJ=mI(),QJ=mP(),m9e=EP(),y9e=yP(),E9e=(t,e,r,o)=>{t=new p9e(t,o),e=new g9e(e,o);let a,n,u,A,p;switch(r){case">":a=kJ,n=m9e,u=QJ,A=">",p=">=";break;case"<":a=QJ,n=y9e,u=kJ,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(d9e(t,e,o))return!1;for(let h=0;h{x.semver===h9e&&(x=new FJ(">=0.0.0")),I=I||x,v=v||x,a(x.semver,I.semver,o)?I=x:u(x.semver,v.semver,o)&&(v=x)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};RJ.exports=E9e});var LJ=_((EQt,TJ)=>{var C9e=vP(),w9e=(t,e,r)=>C9e(t,e,">",r);TJ.exports=w9e});var OJ=_((CQt,NJ)=>{var I9e=vP(),B9e=(t,e,r)=>I9e(t,e,"<",r);NJ.exports=B9e});var _J=_((wQt,UJ)=>{var MJ=Ml(),v9e=(t,e,r)=>(t=new MJ(t,r),e=new MJ(e,r),t.intersects(e,r));UJ.exports=v9e});var qJ=_((IQt,HJ)=>{var D9e=II(),P9e=Ol();HJ.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>P9e(E,I,r));for(let E of u)D9e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var GJ=Ml(),lL=CI(),{ANY:aL}=lL,BI=II(),cL=Ol(),S9e=(t,e,r={})=>{if(t===e)return!0;t=new GJ(t,r),e=new GJ(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=x9e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},b9e=[new lL(">=0.0.0-0")],jJ=[new lL(">=0.0.0")],x9e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===aL){if(e.length===1&&e[0].semver===aL)return!0;r.includePrerelease?t=b9e:t=jJ}if(e.length===1&&e[0].semver===aL){if(r.includePrerelease)return!0;e=jJ}let o=new Set,a,n;for(let x of t)x.operator===">"||x.operator===">="?a=YJ(a,x,r):x.operator==="<"||x.operator==="<="?n=WJ(n,x,r):o.add(x.semver);if(o.size>1)return null;let u;if(a&&n){if(u=cL(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let x of o){if(a&&!BI(x,String(a),r)||n&&!BI(x,String(n),r))return null;for(let C of e)if(!BI(x,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let x of e){if(E=E||x.operator===">"||x.operator===">=",h=h||x.operator==="<"||x.operator==="<=",a){if(v&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===v.major&&x.semver.minor===v.minor&&x.semver.patch===v.patch&&(v=!1),x.operator===">"||x.operator===">="){if(A=YJ(a,x,r),A===x&&A!==a)return!1}else if(a.operator===">="&&!BI(a.semver,String(x),r))return!1}if(n){if(I&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===I.major&&x.semver.minor===I.minor&&x.semver.patch===I.patch&&(I=!1),x.operator==="<"||x.operator==="<="){if(p=WJ(n,x,r),p===x&&p!==n)return!1}else if(n.operator==="<="&&!BI(n.semver,String(x),r))return!1}if(!x.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},YJ=(t,e,r)=>{if(!t)return e;let o=cL(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},WJ=(t,e,r)=>{if(!t)return e;let o=cL(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};KJ.exports=S9e});var Jn=_((vQt,XJ)=>{var uL=vy(),VJ=gI(),k9e=Po(),JJ=VT(),Q9e=od(),F9e=dV(),R9e=yV(),T9e=wV(),L9e=vV(),N9e=PV(),O9e=bV(),M9e=kV(),U9e=FV(),_9e=Ol(),H9e=NV(),q9e=MV(),G9e=dP(),j9e=qV(),Y9e=jV(),W9e=mI(),K9e=mP(),z9e=JT(),V9e=XT(),J9e=yP(),X9e=EP(),Z9e=ZT(),$9e=$V(),e5e=CI(),t5e=Ml(),r5e=II(),n5e=CJ(),i5e=IJ(),s5e=vJ(),o5e=SJ(),a5e=xJ(),l5e=vP(),c5e=LJ(),u5e=OJ(),A5e=_J(),f5e=qJ(),p5e=zJ();XJ.exports={parse:Q9e,valid:F9e,clean:R9e,inc:T9e,diff:L9e,major:N9e,minor:O9e,patch:M9e,prerelease:U9e,compare:_9e,rcompare:H9e,compareLoose:q9e,compareBuild:G9e,sort:j9e,rsort:Y9e,gt:W9e,lt:K9e,eq:z9e,neq:V9e,gte:J9e,lte:X9e,cmp:Z9e,coerce:$9e,Comparator:e5e,Range:t5e,satisfies:r5e,toComparators:n5e,maxSatisfying:i5e,minSatisfying:s5e,minVersion:o5e,validRange:a5e,outside:l5e,gtr:c5e,ltr:u5e,intersects:A5e,simplifyRange:f5e,subset:p5e,SemVer:k9e,re:uL.re,src:uL.src,tokens:uL.t,SEMVER_SPEC_VERSION:VJ.SEMVER_SPEC_VERSION,RELEASE_TYPES:VJ.RELEASE_TYPES,compareIdentifiers:JJ.compareIdentifiers,rcompareIdentifiers:JJ.rcompareIdentifiers}});var $J=_((DQt,ZJ)=>{"use strict";function h5e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Ad(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ad)}h5e(Ad,Error);Ad.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Le[1]){case"|":return be|Le[3];case"&":return be&Le[3];case"^":return be^Le[3]}},Z)},v="!",x=Re("!",!1),C=function(Z){return!Z},R="(",N=Re("(",!1),U=")",V=Re(")",!1),te=function(Z){return Z},ae=/^[^ \t\n\r()!|&\^]/,fe=ke([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),ue=function(Z){return e.queryPattern.test(Z)},me=function(Z){return e.checkFn(Z)},he=Te("whitespace"),Be=/^[ \t\n\r]/,we=ke([" "," ",` -`,"\r"],!1,!1),g=0,Ee=0,Pe=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Fe(){return t.substring(Ee,g)}function At(){return qe(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function at(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function ke(Z,ie,be){return{type:"class",parts:Z,inverted:ie,ignoreCase:be}}function xe(){return{type:"any"}}function He(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Ve(Z){var ie=Pe[Z],be;if(ie)return ie;for(be=Z-1;!Pe[be];)be--;for(ie=Pe[be],ie={line:ie.line,column:ie.column};bece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new Ad(Z,null,null,ie)}function S(Z,ie,be){return new Ad(Ad.buildMessage(Z,ie),Z,ie,be)}function y(){var Z,ie,be,Le,ot,dt,Gt,$t;if(Z=g,ie=F(),ie!==r){for(be=[],Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?($t=F(),$t!==r?(ot=[ot,dt,Gt,$t],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);Le!==r;)be.push(Le),Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?($t=F(),$t!==r?(ot=[ot,dt,Gt,$t],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);be!==r?(Ee=Z,ie=I(ie,be),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,be,Le,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&b(x)),ie!==r?(be=F(),be!==r?(Ee=Z,ie=C(be),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=R,g++):(ie=r,ee===0&&b(N)),ie!==r?(be=X(),be!==r?(Le=y(),Le!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&b(V)),dt!==r?(Ee=Z,ie=te(Le),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=J())),Z}function J(){var Z,ie,be,Le,ot;if(Z=g,ie=X(),ie!==r){if(be=g,Le=[],ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe)),ot!==r)for(;ot!==r;)Le.push(ot),ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe));else Le=r;Le!==r?be=t.substring(be,g):be=Le,be!==r?(Ee=g,Le=ue(be),Le?Le=void 0:Le=r,Le!==r?(Ee=Z,ie=me(be),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));ie!==r;)Z.push(ie),Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));return ee--,Z===r&&(ie=r,ee===0&&b(he)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:d5e}=$J();DP.makeParser=(t=/[a-z]+/)=>(e,r)=>d5e(e,{queryPattern:t,checkFn:r});DP.parse=DP.makeParser()});var rX=_((SQt,tX)=>{"use strict";tX.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 AL=_((bQt,iX)=>{var vI=rX(),nX={};for(let t of Object.keys(vI))nX[vI[t]]=t;var Ar={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"]}};iX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function m5e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=nX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(vI)){let n=vI[a],u=m5e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.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};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var oX=_((xQt,sX)=>{var PP=AL();function y5e(){let t={},e=Object.keys(PP);for(let r=e.length,o=0;o{var fL=AL(),I5e=oX(),xy={},B5e=Object.keys(fL);function v5e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function D5e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:fL[t].channels}),Object.defineProperty(xy[t],"labels",{value:fL[t].labels});let e=I5e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=D5e(a),xy[t][o].raw=v5e(a)})});aX.exports=xy});var DI=_((QQt,pX)=>{"use strict";var cX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,uX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},SP=t=>t,fX=(t,e,r)=>[t,e,r],ky=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},pL,Qy=(t,e,r,o)=>{pL===void 0&&(pL=lX());let a=o?10:0,n={};for(let[u,A]of Object.entries(pL)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function P5e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",ky(e.color,"ansi",()=>Qy(cX,"ansi16",SP,!1)),ky(e.color,"ansi256",()=>Qy(uX,"ansi256",SP,!1)),ky(e.color,"ansi16m",()=>Qy(AX,"rgb",fX,!1)),ky(e.bgColor,"ansi",()=>Qy(cX,"ansi16",SP,!0)),ky(e.bgColor,"ansi256",()=>Qy(uX,"ansi256",SP,!0)),ky(e.bgColor,"ansi16m",()=>Qy(AX,"rgb",fX,!0)),e}Object.defineProperty(pX,"exports",{enumerable:!0,get:P5e})});var gX=_((FQt,hX)=>{"use strict";hX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var S5e=ve("os"),dX=ve("tty"),Ul=gX(),{env:ls}=process,Jp;Ul("no-color")||Ul("no-colors")||Ul("color=false")||Ul("color=never")?Jp=0:(Ul("color")||Ul("colors")||Ul("color=true")||Ul("color=always"))&&(Jp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Jp=1:ls.FORCE_COLOR==="false"?Jp=0:Jp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function hL(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function gL(t,e){if(Jp===0)return 0;if(Ul("color=16m")||Ul("color=full")||Ul("color=truecolor"))return 3;if(Ul("color=256"))return 2;if(t&&!e&&Jp===void 0)return 0;let r=Jp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=S5e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function b5e(t){let e=gL(t,t&&t.isTTY);return hL(e)}mX.exports={supportsColor:b5e,stdout:hL(gL(!0,dX.isatty(1))),stderr:hL(gL(!0,dX.isatty(2)))}});var EX=_((TQt,yX)=>{"use strict";var x5e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},k5e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function oGe(t){let e=Xz(t),r=ks.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=Jz(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return ks.parse(n)}function aGe(t){console.log(`[dotenv@${WT}][INFO] ${t}`)}function lGe(t){console.log(`[dotenv@${WT}][WARN] ${t}`)}function jT(t){console.log(`[dotenv@${WT}][DEBUG] ${t}`)}function Jz(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 cGe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function Xz(t){let e=YT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function uGe(t){return t[0]==="~"?YT.join(tGe.homedir(),t.slice(1)):t}function AGe(t){aGe("Loading env from encrypted .env.vault");let e=ks._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),ks.populate(r,e,t),{parsed:e}}function fGe(t){let e=YT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=uGe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=ks.parse(Vz.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),ks.populate(n,a,t),{parsed:a}}catch(a){return o&&jT(`Failed to load ${e} ${a.message}`),{error:a}}}function pGe(t){let e=Xz(t);return Jz(t).length===0?ks.configDotenv(t):Vz.existsSync(e)?ks._configVault(t):(lGe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),ks.configDotenv(t))}function hGe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=rGe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function gGe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&jT(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var ks={configDotenv:fGe,_configVault:AGe,_parseVault:oGe,config:pGe,decrypt:hGe,parse:sGe,populate:gGe};Cf.exports.configDotenv=ks.configDotenv;Cf.exports._configVault=ks._configVault;Cf.exports._parseVault=ks._parseVault;Cf.exports.config=ks.config;Cf.exports.decrypt=ks.decrypt;Cf.exports.parse=ks.parse;Cf.exports.populate=ks.populate;Cf.exports=ks});var eV=_((Rkt,$z)=>{"use strict";$z.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var sd=_((Fkt,KT)=>{"use strict";var dGe=eV(),tV=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=dGe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KT.exports=tV;KT.exports.default=tV});function Ku(t){return`YN${t.toString(10).padStart(4,"0")}`}function fD(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pD=Et(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var pI=_((Lkt,rV)=>{var mGe="2.0.0",yGe=Number.MAX_SAFE_INTEGER||9007199254740991,EGe=16,CGe=256-6,wGe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];rV.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:EGe,MAX_SAFE_BUILD_LENGTH:CGe,MAX_SAFE_INTEGER:yGe,RELEASE_TYPES:wGe,SEMVER_SPEC_VERSION:mGe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var hI=_((Nkt,nV)=>{var IGe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};nV.exports=IGe});var By=_((wf,iV)=>{var{MAX_SAFE_COMPONENT_LENGTH:zT,MAX_SAFE_BUILD_LENGTH:BGe,MAX_LENGTH:vGe}=pI(),PGe=hI();wf=iV.exports={};var DGe=wf.re=[],SGe=wf.safeRe=[],$t=wf.src=[],er=wf.t={},bGe=0,VT="[a-zA-Z0-9-]",xGe=[["\\s",1],["\\d",vGe],[VT,BGe]],kGe=t=>{for(let[e,r]of xGe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},jr=(t,e,r)=>{let o=kGe(e),a=bGe++;PGe(t,a,e),er[t]=a,$t[a]=e,DGe[a]=new RegExp(e,r?"g":void 0),SGe[a]=new RegExp(o,r?"g":void 0)};jr("NUMERICIDENTIFIER","0|[1-9]\\d*");jr("NUMERICIDENTIFIERLOOSE","\\d+");jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${VT}*`);jr("MAINVERSION",`(${$t[er.NUMERICIDENTIFIER]})\\.(${$t[er.NUMERICIDENTIFIER]})\\.(${$t[er.NUMERICIDENTIFIER]})`);jr("MAINVERSIONLOOSE",`(${$t[er.NUMERICIDENTIFIERLOOSE]})\\.(${$t[er.NUMERICIDENTIFIERLOOSE]})\\.(${$t[er.NUMERICIDENTIFIERLOOSE]})`);jr("PRERELEASEIDENTIFIER",`(?:${$t[er.NUMERICIDENTIFIER]}|${$t[er.NONNUMERICIDENTIFIER]})`);jr("PRERELEASEIDENTIFIERLOOSE",`(?:${$t[er.NUMERICIDENTIFIERLOOSE]}|${$t[er.NONNUMERICIDENTIFIER]})`);jr("PRERELEASE",`(?:-(${$t[er.PRERELEASEIDENTIFIER]}(?:\\.${$t[er.PRERELEASEIDENTIFIER]})*))`);jr("PRERELEASELOOSE",`(?:-?(${$t[er.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${$t[er.PRERELEASEIDENTIFIERLOOSE]})*))`);jr("BUILDIDENTIFIER",`${VT}+`);jr("BUILD",`(?:\\+(${$t[er.BUILDIDENTIFIER]}(?:\\.${$t[er.BUILDIDENTIFIER]})*))`);jr("FULLPLAIN",`v?${$t[er.MAINVERSION]}${$t[er.PRERELEASE]}?${$t[er.BUILD]}?`);jr("FULL",`^${$t[er.FULLPLAIN]}$`);jr("LOOSEPLAIN",`[v=\\s]*${$t[er.MAINVERSIONLOOSE]}${$t[er.PRERELEASELOOSE]}?${$t[er.BUILD]}?`);jr("LOOSE",`^${$t[er.LOOSEPLAIN]}$`);jr("GTLT","((?:<|>)?=?)");jr("XRANGEIDENTIFIERLOOSE",`${$t[er.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);jr("XRANGEIDENTIFIER",`${$t[er.NUMERICIDENTIFIER]}|x|X|\\*`);jr("XRANGEPLAIN",`[v=\\s]*(${$t[er.XRANGEIDENTIFIER]})(?:\\.(${$t[er.XRANGEIDENTIFIER]})(?:\\.(${$t[er.XRANGEIDENTIFIER]})(?:${$t[er.PRERELEASE]})?${$t[er.BUILD]}?)?)?`);jr("XRANGEPLAINLOOSE",`[v=\\s]*(${$t[er.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$t[er.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$t[er.XRANGEIDENTIFIERLOOSE]})(?:${$t[er.PRERELEASELOOSE]})?${$t[er.BUILD]}?)?)?`);jr("XRANGE",`^${$t[er.GTLT]}\\s*${$t[er.XRANGEPLAIN]}$`);jr("XRANGELOOSE",`^${$t[er.GTLT]}\\s*${$t[er.XRANGEPLAINLOOSE]}$`);jr("COERCEPLAIN",`(^|[^\\d])(\\d{1,${zT}})(?:\\.(\\d{1,${zT}}))?(?:\\.(\\d{1,${zT}}))?`);jr("COERCE",`${$t[er.COERCEPLAIN]}(?:$|[^\\d])`);jr("COERCEFULL",$t[er.COERCEPLAIN]+`(?:${$t[er.PRERELEASE]})?(?:${$t[er.BUILD]})?(?:$|[^\\d])`);jr("COERCERTL",$t[er.COERCE],!0);jr("COERCERTLFULL",$t[er.COERCEFULL],!0);jr("LONETILDE","(?:~>?)");jr("TILDETRIM",`(\\s*)${$t[er.LONETILDE]}\\s+`,!0);wf.tildeTrimReplace="$1~";jr("TILDE",`^${$t[er.LONETILDE]}${$t[er.XRANGEPLAIN]}$`);jr("TILDELOOSE",`^${$t[er.LONETILDE]}${$t[er.XRANGEPLAINLOOSE]}$`);jr("LONECARET","(?:\\^)");jr("CARETTRIM",`(\\s*)${$t[er.LONECARET]}\\s+`,!0);wf.caretTrimReplace="$1^";jr("CARET",`^${$t[er.LONECARET]}${$t[er.XRANGEPLAIN]}$`);jr("CARETLOOSE",`^${$t[er.LONECARET]}${$t[er.XRANGEPLAINLOOSE]}$`);jr("COMPARATORLOOSE",`^${$t[er.GTLT]}\\s*(${$t[er.LOOSEPLAIN]})$|^$`);jr("COMPARATOR",`^${$t[er.GTLT]}\\s*(${$t[er.FULLPLAIN]})$|^$`);jr("COMPARATORTRIM",`(\\s*)${$t[er.GTLT]}\\s*(${$t[er.LOOSEPLAIN]}|${$t[er.XRANGEPLAIN]})`,!0);wf.comparatorTrimReplace="$1$2$3";jr("HYPHENRANGE",`^\\s*(${$t[er.XRANGEPLAIN]})\\s+-\\s+(${$t[er.XRANGEPLAIN]})\\s*$`);jr("HYPHENRANGELOOSE",`^\\s*(${$t[er.XRANGEPLAINLOOSE]})\\s+-\\s+(${$t[er.XRANGEPLAINLOOSE]})\\s*$`);jr("STAR","(<|>)?=?\\s*\\*");jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hD=_((Okt,sV)=>{var QGe=Object.freeze({loose:!0}),RGe=Object.freeze({}),FGe=t=>t?typeof t!="object"?QGe:t:RGe;sV.exports=FGe});var JT=_((Mkt,lV)=>{var oV=/^[0-9]+$/,aV=(t,e)=>{let r=oV.test(t),o=oV.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:taV(e,t);lV.exports={compareIdentifiers:aV,rcompareIdentifiers:TGe}});var Po=_((Ukt,fV)=>{var gD=hI(),{MAX_LENGTH:cV,MAX_SAFE_INTEGER:dD}=pI(),{safeRe:uV,t:AV}=By(),LGe=hD(),{compareIdentifiers:vy}=JT(),rl=class{constructor(e,r){if(r=LGe(r),e instanceof rl){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>cV)throw new TypeError(`version is longer than ${cV} characters`);gD("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?uV[AV.LOOSE]:uV[AV.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dD||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dD||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dD||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(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}};fV.exports=rl});var od=_((_kt,hV)=>{var pV=Po(),NGe=(t,e,r=!1)=>{if(t instanceof pV)return t;try{return new pV(t,e)}catch(o){if(!r)return null;throw o}};hV.exports=NGe});var dV=_((Hkt,gV)=>{var OGe=od(),MGe=(t,e)=>{let r=OGe(t,e);return r?r.version:null};gV.exports=MGe});var yV=_((qkt,mV)=>{var UGe=od(),_Ge=(t,e)=>{let r=UGe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};mV.exports=_Ge});var wV=_((Gkt,CV)=>{var EV=Po(),HGe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new EV(t instanceof EV?t.version:t,r).inc(e,o,a).version}catch{return null}};CV.exports=HGe});var vV=_((jkt,BV)=>{var IV=od(),qGe=(t,e)=>{let r=IV(t,null,!0),o=IV(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};BV.exports=qGe});var DV=_((Ykt,PV)=>{var GGe=Po(),jGe=(t,e)=>new GGe(t,e).major;PV.exports=jGe});var bV=_((Wkt,SV)=>{var YGe=Po(),WGe=(t,e)=>new YGe(t,e).minor;SV.exports=WGe});var kV=_((Kkt,xV)=>{var KGe=Po(),zGe=(t,e)=>new KGe(t,e).patch;xV.exports=zGe});var RV=_((zkt,QV)=>{var VGe=od(),JGe=(t,e)=>{let r=VGe(t,e);return r&&r.prerelease.length?r.prerelease:null};QV.exports=JGe});var Ol=_((Vkt,TV)=>{var FV=Po(),XGe=(t,e,r)=>new FV(t,r).compare(new FV(e,r));TV.exports=XGe});var NV=_((Jkt,LV)=>{var ZGe=Ol(),$Ge=(t,e,r)=>ZGe(e,t,r);LV.exports=$Ge});var MV=_((Xkt,OV)=>{var eje=Ol(),tje=(t,e)=>eje(t,e,!0);OV.exports=tje});var mD=_((Zkt,_V)=>{var UV=Po(),rje=(t,e,r)=>{let o=new UV(t,r),a=new UV(e,r);return o.compare(a)||o.compareBuild(a)};_V.exports=rje});var qV=_(($kt,HV)=>{var nje=mD(),ije=(t,e)=>t.sort((r,o)=>nje(r,o,e));HV.exports=ije});var jV=_((eQt,GV)=>{var sje=mD(),oje=(t,e)=>t.sort((r,o)=>sje(o,r,e));GV.exports=oje});var gI=_((tQt,YV)=>{var aje=Ol(),lje=(t,e,r)=>aje(t,e,r)>0;YV.exports=lje});var yD=_((rQt,WV)=>{var cje=Ol(),uje=(t,e,r)=>cje(t,e,r)<0;WV.exports=uje});var XT=_((nQt,KV)=>{var Aje=Ol(),fje=(t,e,r)=>Aje(t,e,r)===0;KV.exports=fje});var ZT=_((iQt,zV)=>{var pje=Ol(),hje=(t,e,r)=>pje(t,e,r)!==0;zV.exports=hje});var ED=_((sQt,VV)=>{var gje=Ol(),dje=(t,e,r)=>gje(t,e,r)>=0;VV.exports=dje});var CD=_((oQt,JV)=>{var mje=Ol(),yje=(t,e,r)=>mje(t,e,r)<=0;JV.exports=yje});var $T=_((aQt,XV)=>{var Eje=XT(),Cje=ZT(),wje=gI(),Ije=ED(),Bje=yD(),vje=CD(),Pje=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return Eje(t,r,o);case"!=":return Cje(t,r,o);case">":return wje(t,r,o);case">=":return Ije(t,r,o);case"<":return Bje(t,r,o);case"<=":return vje(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};XV.exports=Pje});var $V=_((lQt,ZV)=>{var Dje=Po(),Sje=od(),{safeRe:wD,t:ID}=By(),bje=(t,e)=>{if(t instanceof Dje)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?wD[ID.COERCEFULL]:wD[ID.COERCE]);else{let p=e.includePrerelease?wD[ID.COERCERTLFULL]:wD[ID.COERCERTL],h;for(;(h=p.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||h.index+h[0].length!==r.index+r[0].length)&&(r=h),p.lastIndex=h.index+h[1].length+h[2].length;p.lastIndex=-1}if(r===null)return null;let o=r[2],a=r[3]||"0",n=r[4]||"0",u=e.includePrerelease&&r[5]?`-${r[5]}`:"",A=e.includePrerelease&&r[6]?`+${r[6]}`:"";return Sje(`${o}.${a}.${n}${u}${A}`,e)};ZV.exports=bje});var tJ=_((cQt,eJ)=>{"use strict";eJ.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BD=_((uQt,rJ)=>{"use strict";rJ.exports=Cn;Cn.Node=ad;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.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};Cn.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};Cn.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 Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var Rje=BD(),ld=Symbol("max"),Bf=Symbol("length"),Py=Symbol("lengthCalculator"),mI=Symbol("allowStale"),cd=Symbol("maxAge"),If=Symbol("dispose"),nJ=Symbol("noDisposeOnSet"),Qs=Symbol("lruList"),Uc=Symbol("cache"),sJ=Symbol("updateAgeOnGet"),eL=()=>1,rL=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[ld]=e.max||1/0,o=e.length||eL;if(this[Py]=typeof o!="function"?eL:o,this[mI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[cd]=e.maxAge||0,this[If]=e.dispose,this[nJ]=e.noDisposeOnSet||!1,this[sJ]=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[ld]=e||1/0,dI(this)}get max(){return this[ld]}set allowStale(e){this[mI]=!!e}get allowStale(){return this[mI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[cd]=e,dI(this)}get maxAge(){return this[cd]}set lengthCalculator(e){typeof e!="function"&&(e=eL),e!==this[Py]&&(this[Py]=e,this[Bf]=0,this[Qs].forEach(r=>{r.length=this[Py](r.value,r.key),this[Bf]+=r.length})),dI(this)}get lengthCalculator(){return this[Py]}get length(){return this[Bf]}get itemCount(){return this[Qs].length}rforEach(e,r){r=r||this;for(let o=this[Qs].tail;o!==null;){let a=o.prev;iJ(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[Qs].head;o!==null;){let a=o.next;iJ(this,e,o,r),o=a}}keys(){return this[Qs].toArray().map(e=>e.key)}values(){return this[Qs].toArray().map(e=>e.value)}reset(){this[If]&&this[Qs]&&this[Qs].length&&this[Qs].forEach(e=>this[If](e.key,e.value)),this[Uc]=new Map,this[Qs]=new Rje,this[Bf]=0}dump(){return this[Qs].map(e=>vD(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Qs]}set(e,r,o){if(o=o||this[cd],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Py](r,e);if(this[Uc].has(e)){if(n>this[ld])return Dy(this,this[Uc].get(e)),!1;let p=this[Uc].get(e).value;return this[If]&&(this[nJ]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[Bf]+=n-p.length,p.length=n,this.get(e),dI(this),!0}let u=new nL(e,r,n,a,o);return u.length>this[ld]?(this[If]&&this[If](e,r),!1):(this[Bf]+=u.length,this[Qs].unshift(u),this[Uc].set(e,this[Qs].head),dI(this),!0)}has(e){if(!this[Uc].has(e))return!1;let r=this[Uc].get(e).value;return!vD(this,r)}get(e){return tL(this,e,!0)}peek(e){return tL(this,e,!1)}pop(){let e=this[Qs].tail;return e?(Dy(this,e),e.value):null}del(e){Dy(this,this[Uc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Uc].forEach((e,r)=>tL(this,r,!1))}},tL=(t,e,r)=>{let o=t[Uc].get(e);if(o){let a=o.value;if(vD(t,a)){if(Dy(t,o),!t[mI])return}else r&&(t[sJ]&&(o.value.now=Date.now()),t[Qs].unshiftNode(o));return a.value}},vD=(t,e)=>{if(!e||!e.maxAge&&!t[cd])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[cd]&&r>t[cd]},dI=t=>{if(t[Bf]>t[ld])for(let e=t[Qs].tail;t[Bf]>t[ld]&&e!==null;){let r=e.prev;Dy(t,e),e=r}},Dy=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[Bf]-=r.length,t[Uc].delete(r.key),t[Qs].removeNode(e)}},nL=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},iJ=(t,e,r,o)=>{let a=r.value;vD(t,a)&&(Dy(t,r),t[mI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};oJ.exports=rL});var Ml=_((fQt,AJ)=>{var ud=class{constructor(e,r){if(r=Tje(r),e instanceof ud)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ud(e.raw,r);if(e instanceof iL)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!cJ(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&Hje(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&Uje)|(this.options.loose&&_je))+":"+e,a=lJ.get(o);if(a)return a;let n=this.options.loose,u=n?Pa[Vo.HYPHENRANGELOOSE]:Pa[Vo.HYPHENRANGE];e=e.replace(u,Xje(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Pa[Vo.COMPARATORTRIM],Nje),ci("comparator trim",e),e=e.replace(Pa[Vo.TILDETRIM],Oje),ci("tilde trim",e),e=e.replace(Pa[Vo.CARETTRIM],Mje),ci("caret trim",e);let A=e.split(" ").map(I=>qje(I,this.options)).join(" ").split(/\s+/).map(I=>Jje(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Pa[Vo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new iL(I,this.options));for(let I of h){if(cJ(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return lJ.set(o,E),E}intersects(e,r){if(!(e instanceof ud))throw new TypeError("a Range is required");return this.set.some(o=>uJ(o,r)&&e.set.some(a=>uJ(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Lje(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",Hje=t=>t.value==="",uJ=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},qje=(t,e)=>(ci("comp",t,e),t=Yje(t,e),ci("caret",t),t=Gje(t,e),ci("tildes",t),t=Kje(t,e),ci("xrange",t),t=Vje(t,e),ci("stars",t),t),Jo=t=>!t||t.toLowerCase()==="x"||t==="*",Gje=(t,e)=>t.trim().split(/\s+/).map(r=>jje(r,e)).join(" "),jje=(t,e)=>{let r=e.loose?Pa[Vo.TILDELOOSE]:Pa[Vo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Jo(a)?p="":Jo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Jo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},Yje=(t,e)=>t.trim().split(/\s+/).map(r=>Wje(r,e)).join(" "),Wje=(t,e)=>{ci("caret",t,e);let r=e.loose?Pa[Vo.CARETLOOSE]:Pa[Vo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Jo(n)?h="":Jo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Jo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},Kje=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>zje(r,e)).join(" ")),zje=(t,e)=>{t=t.trim();let r=e.loose?Pa[Vo.XRANGELOOSE]:Pa[Vo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Jo(n),E=h||Jo(u),I=E||Jo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},Vje=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Pa[Vo.STAR],"")),Jje=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Pa[e.includePrerelease?Vo.GTE0PRE:Vo.GTE0],"")),Xje=t=>(e,r,o,a,n,u,A,p,h,E,I,v,x)=>(Jo(o)?r="":Jo(a)?r=`>=${o}.0.0${t?"-0":""}`:Jo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Jo(h)?p="":Jo(E)?p=`<${+h+1}.0.0-0`:Jo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),Zje=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var yI=_((pQt,mJ)=>{var EI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return EI}constructor(e,r){if(r=fJ(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),oL("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===EI?this.value="":this.value=this.operator+this.semver.version,oL("comp",this)}parse(e){let r=this.options.loose?pJ[hJ.COMPARATORLOOSE]:pJ[hJ.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new gJ(o[2],this.options.loose):this.semver=EI}toString(){return this.value}test(e){if(oL("Comparator.test",e,this.options.loose),this.semver===EI||e===EI)return!0;if(typeof e=="string")try{e=new gJ(e,this.options)}catch{return!1}return sL(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new dJ(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new dJ(this.value,r).test(e.semver):(r=fJ(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("=")||sL(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||sL(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};mJ.exports=Sy;var fJ=hD(),{safeRe:pJ,t:hJ}=By(),sL=$T(),oL=hI(),gJ=Po(),dJ=Ml()});var CI=_((hQt,yJ)=>{var $je=Ml(),e9e=(t,e,r)=>{try{e=new $je(e,r)}catch{return!1}return e.test(t)};yJ.exports=e9e});var CJ=_((gQt,EJ)=>{var t9e=Ml(),r9e=(t,e)=>new t9e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));EJ.exports=r9e});var IJ=_((dQt,wJ)=>{var n9e=Po(),i9e=Ml(),s9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new i9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new n9e(o,r))}),o};wJ.exports=s9e});var vJ=_((mQt,BJ)=>{var o9e=Po(),a9e=Ml(),l9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new a9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new o9e(o,r))}),o};BJ.exports=l9e});var SJ=_((yQt,DJ)=>{var aL=Po(),c9e=Ml(),PJ=gI(),u9e=(t,e)=>{t=new c9e(t,e);let r=new aL("0.0.0");if(t.test(r)||(r=new aL("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new aL(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||PJ(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||PJ(r,n))&&(r=n)}return r&&t.test(r)?r:null};DJ.exports=u9e});var xJ=_((EQt,bJ)=>{var A9e=Ml(),f9e=(t,e)=>{try{return new A9e(t,e).range||"*"}catch{return null}};bJ.exports=f9e});var PD=_((CQt,FJ)=>{var p9e=Po(),RJ=yI(),{ANY:h9e}=RJ,g9e=Ml(),d9e=CI(),kJ=gI(),QJ=yD(),m9e=CD(),y9e=ED(),E9e=(t,e,r,o)=>{t=new p9e(t,o),e=new g9e(e,o);let a,n,u,A,p;switch(r){case">":a=kJ,n=m9e,u=QJ,A=">",p=">=";break;case"<":a=QJ,n=y9e,u=kJ,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(d9e(t,e,o))return!1;for(let h=0;h{x.semver===h9e&&(x=new RJ(">=0.0.0")),I=I||x,v=v||x,a(x.semver,I.semver,o)?I=x:u(x.semver,v.semver,o)&&(v=x)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};FJ.exports=E9e});var LJ=_((wQt,TJ)=>{var C9e=PD(),w9e=(t,e,r)=>C9e(t,e,">",r);TJ.exports=w9e});var OJ=_((IQt,NJ)=>{var I9e=PD(),B9e=(t,e,r)=>I9e(t,e,"<",r);NJ.exports=B9e});var _J=_((BQt,UJ)=>{var MJ=Ml(),v9e=(t,e,r)=>(t=new MJ(t,r),e=new MJ(e,r),t.intersects(e,r));UJ.exports=v9e});var qJ=_((vQt,HJ)=>{var P9e=CI(),D9e=Ol();HJ.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>D9e(E,I,r));for(let E of u)P9e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var GJ=Ml(),cL=yI(),{ANY:lL}=cL,wI=CI(),uL=Ol(),S9e=(t,e,r={})=>{if(t===e)return!0;t=new GJ(t,r),e=new GJ(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=x9e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},b9e=[new cL(">=0.0.0-0")],jJ=[new cL(">=0.0.0")],x9e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===lL){if(e.length===1&&e[0].semver===lL)return!0;r.includePrerelease?t=b9e:t=jJ}if(e.length===1&&e[0].semver===lL){if(r.includePrerelease)return!0;e=jJ}let o=new Set,a,n;for(let x of t)x.operator===">"||x.operator===">="?a=YJ(a,x,r):x.operator==="<"||x.operator==="<="?n=WJ(n,x,r):o.add(x.semver);if(o.size>1)return null;let u;if(a&&n){if(u=uL(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let x of o){if(a&&!wI(x,String(a),r)||n&&!wI(x,String(n),r))return null;for(let C of e)if(!wI(x,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let x of e){if(E=E||x.operator===">"||x.operator===">=",h=h||x.operator==="<"||x.operator==="<=",a){if(v&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===v.major&&x.semver.minor===v.minor&&x.semver.patch===v.patch&&(v=!1),x.operator===">"||x.operator===">="){if(A=YJ(a,x,r),A===x&&A!==a)return!1}else if(a.operator===">="&&!wI(a.semver,String(x),r))return!1}if(n){if(I&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===I.major&&x.semver.minor===I.minor&&x.semver.patch===I.patch&&(I=!1),x.operator==="<"||x.operator==="<="){if(p=WJ(n,x,r),p===x&&p!==n)return!1}else if(n.operator==="<="&&!wI(n.semver,String(x),r))return!1}if(!x.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},YJ=(t,e,r)=>{if(!t)return e;let o=uL(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},WJ=(t,e,r)=>{if(!t)return e;let o=uL(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};KJ.exports=S9e});var Jn=_((DQt,XJ)=>{var AL=By(),VJ=pI(),k9e=Po(),JJ=JT(),Q9e=od(),R9e=dV(),F9e=yV(),T9e=wV(),L9e=vV(),N9e=DV(),O9e=bV(),M9e=kV(),U9e=RV(),_9e=Ol(),H9e=NV(),q9e=MV(),G9e=mD(),j9e=qV(),Y9e=jV(),W9e=gI(),K9e=yD(),z9e=XT(),V9e=ZT(),J9e=ED(),X9e=CD(),Z9e=$T(),$9e=$V(),e5e=yI(),t5e=Ml(),r5e=CI(),n5e=CJ(),i5e=IJ(),s5e=vJ(),o5e=SJ(),a5e=xJ(),l5e=PD(),c5e=LJ(),u5e=OJ(),A5e=_J(),f5e=qJ(),p5e=zJ();XJ.exports={parse:Q9e,valid:R9e,clean:F9e,inc:T9e,diff:L9e,major:N9e,minor:O9e,patch:M9e,prerelease:U9e,compare:_9e,rcompare:H9e,compareLoose:q9e,compareBuild:G9e,sort:j9e,rsort:Y9e,gt:W9e,lt:K9e,eq:z9e,neq:V9e,gte:J9e,lte:X9e,cmp:Z9e,coerce:$9e,Comparator:e5e,Range:t5e,satisfies:r5e,toComparators:n5e,maxSatisfying:i5e,minSatisfying:s5e,minVersion:o5e,validRange:a5e,outside:l5e,gtr:c5e,ltr:u5e,intersects:A5e,simplifyRange:f5e,subset:p5e,SemVer:k9e,re:AL.re,src:AL.src,tokens:AL.t,SEMVER_SPEC_VERSION:VJ.SEMVER_SPEC_VERSION,RELEASE_TYPES:VJ.RELEASE_TYPES,compareIdentifiers:JJ.compareIdentifiers,rcompareIdentifiers:JJ.rcompareIdentifiers}});var $J=_((SQt,ZJ)=>{"use strict";function h5e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Ad(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ad)}h5e(Ad,Error);Ad.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Le[1]){case"|":return ke|Le[3];case"&":return ke&Le[3];case"^":return ke^Le[3]}},Z)},v="!",x=Re("!",!1),C=function(Z){return!Z},F="(",N=Re("(",!1),U=")",V=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,ae=Qe([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),ce=function(Z){return e.queryPattern.test(Z)},Ce=function(Z){return e.checkFn(Z)},de=be("whitespace"),Ie=/^[ \t\n\r]/,Ee=Qe([" "," ",` +`,"\r"],!1,!1),g=0,me=0,De=[{line:1,column:1}],he=0,ne=[],ee=0,Be;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Te(){return t.substring(me,g)}function ht(){return _e(me,g)}function H(Z,ie){throw ie=ie!==void 0?ie:_e(me,g),S([be(Z)],t.substring(me,g),ie)}function at(Z,ie){throw ie=ie!==void 0?ie:_e(me,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,ke){return{type:"class",parts:Z,inverted:ie,ignoreCase:ke}}function xe(){return{type:"any"}}function je(){return{type:"end"}}function be(Z){return{type:"other",description:Z}}function $e(Z){var ie=De[Z],ke;if(ie)return ie;for(ke=Z-1;!De[ke];)ke--;for(ie=De[ke],ie={line:ie.line,column:ie.column};kehe&&(he=g,ne=[]),ne.push(Z))}function w(Z,ie){return new Ad(Z,null,null,ie)}function S(Z,ie,ke){return new Ad(Ad.buildMessage(Z,ie),Z,ie,ke)}function y(){var Z,ie,ke,Le,ot,dt,Gt,tr;if(Z=g,ie=R(),ie!==r){for(ke=[],Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?(tr=R(),tr!==r?(ot=[ot,dt,Gt,tr],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);Le!==r;)ke.push(Le),Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?(tr=R(),tr!==r?(ot=[ot,dt,Gt,tr],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);ke!==r?(me=Z,ie=I(ie,ke),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function R(){var Z,ie,ke,Le,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&b(x)),ie!==r?(ke=R(),ke!==r?(me=Z,ie=C(ke),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=F,g++):(ie=r,ee===0&&b(N)),ie!==r?(ke=X(),ke!==r?(Le=y(),Le!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&b(V)),dt!==r?(me=Z,ie=te(Le),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=J())),Z}function J(){var Z,ie,ke,Le,ot;if(Z=g,ie=X(),ie!==r){if(ke=g,Le=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(ae)),ot!==r)for(;ot!==r;)Le.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(ae));else Le=r;Le!==r?ke=t.substring(ke,g):ke=Le,ke!==r?(me=g,Le=ce(ke),Le?Le=void 0:Le=r,Le!==r?(me=Z,ie=Ce(ke),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Ie.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(Ee));ie!==r;)Z.push(ie),Ie.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(Ee));return ee--,Z===r&&(ie=r,ee===0&&b(de)),Z}if(Be=a(),Be!==r&&g===t.length)return Be;throw Be!==r&&g{var{parse:d5e}=$J();DD.makeParser=(t=/[a-z]+/)=>(e,r)=>d5e(e,{queryPattern:t,checkFn:r});DD.parse=DD.makeParser()});var rX=_((xQt,tX)=>{"use strict";tX.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 fL=_((kQt,iX)=>{var II=rX(),nX={};for(let t of Object.keys(II))nX[II[t]]=t;var Ar={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"]}};iX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function m5e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=nX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(II)){let n=II[a],u=m5e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.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};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var oX=_((QQt,sX)=>{var SD=fL();function y5e(){let t={},e=Object.keys(SD);for(let r=e.length,o=0;o{var pL=fL(),I5e=oX(),by={},B5e=Object.keys(pL);function v5e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function P5e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{by[t]={},Object.defineProperty(by[t],"channels",{value:pL[t].channels}),Object.defineProperty(by[t],"labels",{value:pL[t].labels});let e=I5e(t);Object.keys(e).forEach(o=>{let a=e[o];by[t][o]=P5e(a),by[t][o].raw=v5e(a)})});aX.exports=by});var BI=_((FQt,pX)=>{"use strict";var cX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,uX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},bD=t=>t,fX=(t,e,r)=>[t,e,r],xy=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},hL,ky=(t,e,r,o)=>{hL===void 0&&(hL=lX());let a=o?10:0,n={};for(let[u,A]of Object.entries(hL)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function D5e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",xy(e.color,"ansi",()=>ky(cX,"ansi16",bD,!1)),xy(e.color,"ansi256",()=>ky(uX,"ansi256",bD,!1)),xy(e.color,"ansi16m",()=>ky(AX,"rgb",fX,!1)),xy(e.bgColor,"ansi",()=>ky(cX,"ansi16",bD,!0)),xy(e.bgColor,"ansi256",()=>ky(uX,"ansi256",bD,!0)),xy(e.bgColor,"ansi16m",()=>ky(AX,"rgb",fX,!0)),e}Object.defineProperty(pX,"exports",{enumerable:!0,get:D5e})});var gX=_((TQt,hX)=>{"use strict";hX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var S5e=ve("os"),dX=ve("tty"),Ul=gX(),{env:cs}=process,Jp;Ul("no-color")||Ul("no-colors")||Ul("color=false")||Ul("color=never")?Jp=0:(Ul("color")||Ul("colors")||Ul("color=true")||Ul("color=always"))&&(Jp=1);"FORCE_COLOR"in cs&&(cs.FORCE_COLOR==="true"?Jp=1:cs.FORCE_COLOR==="false"?Jp=0:Jp=cs.FORCE_COLOR.length===0?1:Math.min(parseInt(cs.FORCE_COLOR,10),3));function gL(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function dL(t,e){if(Jp===0)return 0;if(Ul("color=16m")||Ul("color=full")||Ul("color=truecolor"))return 3;if(Ul("color=256"))return 2;if(t&&!e&&Jp===void 0)return 0;let r=Jp||0;if(cs.TERM==="dumb")return r;if(process.platform==="win32"){let o=S5e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in cs)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in cs)||cs.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in cs)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(cs.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in cs)return 1;if(cs.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in cs){let o=parseInt((cs.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(cs.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(cs.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(cs.TERM)||"COLORTERM"in cs?1:r}function b5e(t){let e=dL(t,t&&t.isTTY);return gL(e)}mX.exports={supportsColor:b5e,stdout:gL(dL(!0,dX.isatty(1))),stderr:gL(dL(!0,dX.isatty(2)))}});var EX=_((NQt,yX)=>{"use strict";var x5e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},k5e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r `:` `)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};yX.exports={stringReplaceAll:x5e,stringEncaseCRLFWithFirstIndex:k5e}});var vX=_((LQt,BX)=>{"use strict";var Q5e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,F5e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,R5e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,T5e=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function IX(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)):T5e.get(t)||t}function L5e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(F5e))r.push(a[2].replace(R5e,(A,p,h)=>p?IX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function N5e(t){CX.lastIndex=0;let e=[],r;for(;(r=CX.exec(t))!==null;){let o=r[1];if(r[2]){let a=L5e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function wX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}BX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(Q5e,(n,u,A,p,h,E)=>{if(u)a.push(IX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:wX(t,r)(I)),r.push({inverse:A,styles:N5e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(wX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var IL=_((NQt,bX)=>{"use strict";var PI=DI(),{stdout:yL,stderr:EL}=dL(),{stringReplaceAll:O5e,stringEncaseCRLFWithFirstIndex:M5e}=EX(),DX=["ansi","ansi","ansi256","ansi16m"],Fy=Object.create(null),U5e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=yL?yL.level:0;t.level=e.level===void 0?r:e.level},CL=class{constructor(e){return PX(e)}},PX=t=>{let e={};return U5e(e,t),e.template=(...r)=>q5e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=CL,e.template};function bP(t){return PX(t)}for(let[t,e]of Object.entries(PI))Fy[t]={get(){let r=xP(this,wL(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Fy.visible={get(){let t=xP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SX)Fy[t]={get(){let{level:e}=this;return function(...r){let o=wL(PI.color[DX[e]][t](...r),PI.color.close,this._styler);return xP(this,o,this._isEmpty)}}};for(let t of SX){let e="bg"+t[0].toUpperCase()+t.slice(1);Fy[e]={get(){let{level:r}=this;return function(...o){let a=wL(PI.bgColor[DX[r]][t](...o),PI.bgColor.close,this._styler);return xP(this,a,this._isEmpty)}}}}var _5e=Object.defineProperties(()=>{},{...Fy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),wL=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},xP=(t,e,r)=>{let o=(...a)=>H5e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=_5e,o._generator=t,o._styler=e,o._isEmpty=r,o},H5e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=O5e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=M5e(e,a,o,n)),o+e+a},mL,q5e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";_l.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;_l.find=(t,e)=>t.nodes.find(r=>r.type===e);_l.exceedsLimit=(t,e,r=1,o)=>o===!1||!_l.isInteger(t)||!_l.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;_l.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};_l.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;_l.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;_l.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;_l.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);_l.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var xX=kP();kX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&xX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&xX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var FX=_((UQt,QX)=>{"use strict";QX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var HX=_((_Qt,_X)=>{"use strict";var RX=FX(),fd=(t,e,r)=>{if(RX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(RX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(fd.cache.hasOwnProperty(p))return fd.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let R=t+"|"+e;return o.capture?`(${R})`:o.wrap===!1?R:`(?:${R})`}let I=UX(t)||UX(e),v={min:t,max:e,a:h,b:E},x=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let R=E<0?Math.abs(E):1;C=TX(R,Math.abs(h),v,o),h=v.a=0}return E>=0&&(x=TX(h,E,v,o)),v.negatives=C,v.positives=x,v.result=G5e(C,x,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&x.length+C.length>1&&(v.result=`(?:${v.result})`),fd.cache[p]=v,v.result};function G5e(t,e,r){let o=BL(t,e,"-",!1,r)||[],a=BL(e,t,"",!1,r)||[],n=BL(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function j5e(t,e){let r=1,o=1,a=NX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=NX(t,r);for(a=OX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+MX(A.count),u=h+1;continue}r.isPadded&&(I=V5e(h,r,o)),E.string=I+E.pattern+MX(E.count),n.push(E),u=h+1,A=E}return n}function BL(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!LX(e,"string",A)&&n.push(r+A),o&&LX(e,"string",A)&&n.push(r+A)}return n}function W5e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function LX(t,e,r){return t.some(o=>o[e]===r)}function NX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function OX(t,e){return t-t%Math.pow(10,e)}function MX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function z5e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function UX(t){return/^-?(0+)\d/.test(t)}function V5e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}fd.cache={};fd.clearCache=()=>fd.cache={};_X.exports=fd});var PL=_((HQt,VX)=>{"use strict";var J5e=ve("util"),jX=HX(),qX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),X5e=t=>e=>t===!0?Number(e):String(e),vL=t=>typeof t=="number"||typeof t=="string"&&t!=="",bI=t=>Number.isInteger(+t),DL=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},Z5e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,$5e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},GX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},YX=(t,e,r,o)=>{if(r)return jX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},WX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return jX(t,e,r)},KX=(...t)=>new RangeError("Invalid range arguments: "+J5e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw KX([t,e]);return[]},t7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},r7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw KX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=DL(A)||DL(p)||DL(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&Z5e(t,e,o)===!1,x=o.transform||X5e(v);if(o.toRegex&&r===1)return YX(GX(t,I),GX(e,I),!0,o);let C={negatives:[],positives:[]},R=V=>C[V<0?"negatives":"positives"].push(Math.abs(V)),N=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?R(a):N.push($5e(x(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?e7e(C,o):WX(N,null,{wrap:!1,...o}):N},n7e=(t,e,r=1,o={})=>{if(!bI(t)&&t.length>1||!bI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return YX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?WX(E,null,{wrap:!1,options:o}):E},FP=(t,e,r,o={})=>{if(e==null&&vL(t))return[t];if(!vL(t)||!vL(e))return zX(t,e,o);if(typeof r=="function")return FP(t,e,1,{transform:r});if(qX(r))return FP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,bI(r)?bI(t)&&bI(e)?r7e(t,e,r,a):n7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!qX(r)?t7e(r,a):FP(t,e,1,r)};VX.exports=FP});var ZX=_((qQt,XX)=>{"use strict";var i7e=PL(),JX=kP(),s7e=(t,e={})=>{let r=(o,a={})=>{let n=JX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=JX.reduce(o.nodes),I=i7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};XX.exports=s7e});var tZ=_((GQt,eZ)=>{"use strict";var o7e=PL(),$X=QP(),Ry=kP(),pd=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ry.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(pd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?pd(a,n,r):a+n);return Ry.flatten(o)},a7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(pd(A.pop(),$X(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(pd(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Ry.reduce(a.nodes);if(Ry.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=o7e(...I,e);v.length===0&&(v=$X(a,e)),A.push(pd(A.pop(),v)),a.nodes=[];return}let p=Ry.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";rZ.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 lZ=_((YQt,aZ)=>{"use strict";var l7e=QP(),{MAX_LENGTH:iZ,CHAR_BACKSLASH:SL,CHAR_BACKTICK:c7e,CHAR_COMMA:u7e,CHAR_DOT:A7e,CHAR_LEFT_PARENTHESES:f7e,CHAR_RIGHT_PARENTHESES:p7e,CHAR_LEFT_CURLY_BRACE:h7e,CHAR_RIGHT_CURLY_BRACE:g7e,CHAR_LEFT_SQUARE_BRACKET:sZ,CHAR_RIGHT_SQUARE_BRACKET:oZ,CHAR_DOUBLE_QUOTE:d7e,CHAR_SINGLE_QUOTE:m7e,CHAR_NO_BREAK_SPACE:y7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:E7e}=nZ(),C7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(iZ,r.maxLength):iZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,x={},C=()=>t[E++],R=N=>{if(N.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&N.type==="text"){A.value+=N.value;return}return u.nodes.push(N),N.parent=u,N.prev=A,A=N,N};for(R({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let N=u.nodes.shift();u.nodes=[N,{type:"text",value:l7e(u)}]}R({type:"comma",value:v}),u.commas++;continue}if(v===A7e&&I>0&&u.commas===0){let N=u.nodes;if(I===0||N.length===0){R({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){N.pop();let U=N[N.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}R({type:"dot",value:v});continue}R({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(V=>{V.nodes||(V.type==="open"&&(V.isOpen=!0),V.type==="close"&&(V.isClose=!0),V.nodes||(V.type="text"),V.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(u);N.nodes.splice(U,1,...u.nodes)}while(n.length>0);return R({type:"eos"}),a};aZ.exports=C7e});var AZ=_((WQt,uZ)=>{"use strict";var cZ=QP(),w7e=ZX(),I7e=tZ(),B7e=lZ(),nl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=nl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(nl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};nl.parse=(t,e={})=>B7e(t,e);nl.stringify=(t,e={})=>cZ(typeof t=="string"?nl.parse(t,e):t,e);nl.compile=(t,e={})=>(typeof t=="string"&&(t=nl.parse(t,e)),w7e(t,e));nl.expand=(t,e={})=>{typeof t=="string"&&(t=nl.parse(t,e));let r=I7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};nl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?nl.compile(t,e):nl.expand(t,e);uZ.exports=nl});var xI=_((KQt,dZ)=>{"use strict";var v7e=ve("path"),zu="\\\\/",fZ=`[^${zu}]`,vf="\\.",D7e="\\+",P7e="\\?",RP="\\/",S7e="(?=.)",pZ="[^/]",bL=`(?:${RP}|$)`,hZ=`(?:^|${RP})`,xL=`${vf}{1,2}${bL}`,b7e=`(?!${vf})`,x7e=`(?!${hZ}${xL})`,k7e=`(?!${vf}{0,1}${bL})`,Q7e=`(?!${xL})`,F7e=`[^.${RP}]`,R7e=`${pZ}*?`,gZ={DOT_LITERAL:vf,PLUS_LITERAL:D7e,QMARK_LITERAL:P7e,SLASH_LITERAL:RP,ONE_CHAR:S7e,QMARK:pZ,END_ANCHOR:bL,DOTS_SLASH:xL,NO_DOT:b7e,NO_DOTS:x7e,NO_DOT_SLASH:k7e,NO_DOTS_SLASH:Q7e,QMARK_NO_DOT:F7e,STAR:R7e,START_ANCHOR:hZ},T7e={...gZ,SLASH_LITERAL:`[${zu}]`,QMARK:fZ,STAR:`${fZ}*?`,DOTS_SLASH:`${vf}{1,2}(?:[${zu}]|$)`,NO_DOT:`(?!${vf})`,NO_DOTS:`(?!(?:^|[${zu}])${vf}{1,2}(?:[${zu}]|$))`,NO_DOT_SLASH:`(?!${vf}{0,1}(?:[${zu}]|$))`,NO_DOTS_SLASH:`(?!${vf}{1,2}(?:[${zu}]|$))`,QMARK_NO_DOT:`[^.${zu}]`,START_ANCHOR:`(?:^|[${zu}])`,END_ANCHOR:`(?:[${zu}]|$)`},L7e={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"};dZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:L7e,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:v7e.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?T7e:gZ}}});var kI=_(Pa=>{"use strict";var N7e=ve("path"),O7e=process.platform==="win32",{REGEX_BACKSLASH:M7e,REGEX_REMOVE_BACKSLASH:U7e,REGEX_SPECIAL_CHARS:_7e,REGEX_SPECIAL_CHARS_GLOBAL:H7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>_7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(H7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(M7e,"/");Pa.removeBackslashes=t=>t.replace(U7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:O7e===!0||N7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var vZ=_((VQt,BZ)=>{"use strict";var mZ=kI(),{CHAR_ASTERISK:kL,CHAR_AT:q7e,CHAR_BACKWARD_SLASH:QI,CHAR_COMMA:G7e,CHAR_DOT:QL,CHAR_EXCLAMATION_MARK:FL,CHAR_FORWARD_SLASH:IZ,CHAR_LEFT_CURLY_BRACE:RL,CHAR_LEFT_PARENTHESES:TL,CHAR_LEFT_SQUARE_BRACKET:j7e,CHAR_PLUS:Y7e,CHAR_QUESTION_MARK:yZ,CHAR_RIGHT_CURLY_BRACE:W7e,CHAR_RIGHT_PARENTHESES:EZ,CHAR_RIGHT_SQUARE_BRACKET:K7e}=xI(),CZ=t=>t===IZ||t===QI,wZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,x=!1,C=!1,R=!1,N=!1,U=!1,V=!1,te=!1,ae=!1,fe=!1,ue=0,me,he,Be={value:"",depth:0,isGlob:!1},we=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(me=he,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),Pe&&C===!0&&I>0?(Pe=p.slice(0,I),ne=p.slice(I)):C===!0?(Pe="",ne=p):Pe=p,Pe&&Pe!==""&&Pe!=="/"&&Pe!==p&&CZ(Pe.charCodeAt(Pe.length-1))&&(Pe=Pe.slice(0,-1)),r.unescape===!0&&(ne&&(ne=mZ.removeBackslashes(ne)),Pe&&V===!0&&(Pe=mZ.removeBackslashes(Pe)));let ee={prefix:ce,input:t,start:E,base:Pe,glob:ne,isBrace:v,isBracket:x,isGlob:C,isExtglob:R,isGlobstar:N,negated:te,negatedExtglob:ae};if(r.tokens===!0&&(ee.maxDepth=0,CZ(he)||u.push(Be),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let Fe=0;Fe{"use strict";var TP=xI(),il=kI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:V7e,REGEX_NON_SPECIAL_CHARS:J7e,REGEX_SPECIAL_CHARS_BACKREF:X7e,REPLACEMENTS:DZ}=TP,Z7e=(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=>il.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,LL=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=DZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=il.isWindows(e),h=TP.globChars(p),E=TP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:x,ONE_CHAR:C,DOTS_SLASH:R,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:V,QMARK:te,QMARK_NO_DOT:ae,STAR:fe,START_ANCHOR:ue}=h,me=b=>`(${A}(?:(?!${ue}${b.dot?R:I}).)*?)`,he=r.dot?"":N,Be=r.dot?te:ae,we=r.bash===!0?me(r):fe;r.capture&&(we=`(${we})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=il.removePrefix(t,g),a=t.length;let Ee=[],Pe=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,Fe=g.peek=(b=1)=>t[g.index+b],At=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),at=(b="",w=0)=>{g.consumed+=b,g.index+=w},Re=b=>{g.output+=b.output!=null?b.output:b.value,at(b.value)},ke=()=>{let b=1;for(;Fe()==="!"&&(Fe(2)!=="("||Fe(3)==="?");)At(),g.start++,b++;return b%2===0?!1:(g.negated=!0,g.start++,!0)},xe=b=>{g[b]++,ce.push(b)},He=b=>{g[b]--,ce.pop()},Te=b=>{if(ne.type==="globstar"){let w=g.braces>0&&(b.type==="comma"||b.type==="brace"),S=b.extglob===!0||Ee.length&&(b.type==="pipe"||b.type==="paren");b.type!=="slash"&&b.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=we,g.output+=ne.output)}if(Ee.length&&b.type!=="paren"&&(Ee[Ee.length-1].inner+=b.value),(b.value||b.output)&&Re(b),ne&&ne.type==="text"&&b.type==="text"){ne.value+=b.value,ne.output=(ne.output||"")+b.value;return}b.prev=ne,u.push(b),ne=b},Ve=(b,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;xe("parens"),Te({type:b,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:At(),output:y}),Ee.push(S)},qe=b=>{let w=b.close+(r.capture?")":""),S;if(b.type==="negate"){let y=we;if(b.inner&&b.inner.length>1&&b.inner.includes("/")&&(y=me(r)),(y!==we||Ie()||/^\)+$/.test(H()))&&(w=b.close=`)$))${y}`),b.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=LL(S,{...e,fastpaths:!1}).output;w=b.close=`)${F})${y})`}b.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),He("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let b=!1,w=t.replace(X7e,(S,y,F,J,X,Z)=>J==="\\"?(b=!0,S):J==="?"?y?y+J+(X?te.repeat(X.length):""):Z===0?Be+(X?te.repeat(X.length):""):te.repeat(F.length):J==="."?I.repeat(F.length):J==="*"?y?y+J+(X?we:""):we:y?S:`\\${S}`);return b===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=il.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=At(),ee==="\0")continue;if(ee==="\\"){let S=Fe();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=At():ee+=At(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),J=ne.value.slice(y+2),X=V7e[J];if(X){ne.value=F+X,g.backtrack=!0,At(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&Fe()!==":"||ee==="-"&&Fe()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=il.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){xe("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){qe(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),He("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else xe("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}He("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||il.hasRegexChars(S))continue;let y=il.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};Pe.push(S),Te(S);continue}if(ee==="}"){let S=Pe[Pe.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),J=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&J.unshift(F[X].value);y=Z7e(J,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),J=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of J)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),He("braces"),Pe.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=Pe[Pe.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:x});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=Pe[Pe.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Ve("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=Fe(),F=ee;if(y==="<"&&!il.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:ae});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&Fe()==="("&&(Fe(2)!=="?"||!/[!=<:]/.test(Fe(3)))){Ve("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){ke();continue}}if(ee==="+"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Ve("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=J7e.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=we,g.backtrack=!0,g.globstar=!0,at(ee);continue}let b=H();if(r.noextglob!==!0&&/^\([^?]/.test(b)){Ve("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){at(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",J=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||b[0]&&b[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;b.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;b=b.slice(3),at("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=me(r),g.output=ne.output,g.globstar=!0,at(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!J&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=me(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,at(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&b[0]==="/"){let ie=b[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${me(r)}${x}|${x}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&b[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${x}|${me(r)}${x})`,g.output=ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=me(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,at(ee);continue}let w={type:"star",value:ee,output:we};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=he+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=V,ne.output+=V):(g.output+=he,ne.output+=he),Fe()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=il.escapeLast(g.output,"["),He("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=il.escapeLast(g.output,"("),He("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=il.escapeLast(g.output,"{"),He("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${x}?`}),g.backtrack===!0){g.output="";for(let b of g.tokens)g.output+=b.output!=null?b.output:b.value,b.suffix&&(g.output+=b.suffix)}return g};LL.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=DZ[t]||t;let n=il.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:x,START_ANCHOR:C}=TP.globChars(n),R=r.dot?I:E,N=r.dot?v:E,U=r.capture?"":"?:",V={negated:!1,prefix:""},te=r.bash===!0?".*?":x;r.capture&&(te=`(${te})`);let ae=he=>he.noglobstar===!0?te:`(${U}(?:(?!${C}${he.dot?h:u}).)*?)`,fe=he=>{switch(he){case"*":return`${R}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${R}${te}${u}${p}${te}`;case"*/*":return`${R}${te}${A}${p}${N}${te}`;case"**":return R+ae(r);case"**/*":return`(?:${R}${ae(r)}${A})?${N}${p}${te}`;case"**/*.*":return`(?:${R}${ae(r)}${A})?${N}${te}${u}${p}${te}`;case"**/.*":return`(?:${R}${ae(r)}${A})?${u}${p}${te}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(he);if(!Be)return;let we=fe(Be[1]);return we?we+u+Be[2]:void 0}}},ue=il.removePrefix(t,V),me=fe(ue);return me&&r.strictSlashes!==!0&&(me+=`${A}?`),me};PZ.exports=LL});var xZ=_((XQt,bZ)=>{"use strict";var $7e=ve("path"),eYe=vZ(),NL=SZ(),OL=kI(),tYe=xI(),rYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Mi(v,e,r));return v=>{for(let x of E){let C=x(v);if(C)return C}return!1}}let o=rYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=OL.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:x,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),R={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:x,isMatch:v};return typeof a.onResult=="function"&&a.onResult(R),v===!1?(R.isMatch=!1,I?R:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(R),R.isMatch=!1,I?R:!1):(typeof a.onMatch=="function"&&a.onMatch(R),I?R:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?OL.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=OL.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test($7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):NL(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>eYe(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=NL.fastpaths(t,e)),a.output||(a=NL(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=tYe;bZ.exports=Mi});var QZ=_((ZQt,kZ)=>{"use strict";kZ.exports=xZ()});var Zo=_(($Qt,LZ)=>{"use strict";var RZ=ve("util"),TZ=AZ(),Vu=QZ(),ML=kI(),FZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(FZ(t)||FZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!ML.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=ML.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?ML.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of TZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:TZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};LZ.exports=yi});var OZ=_((eFt,NZ)=>{"use strict";NZ.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 NP=_((tFt,MZ)=>{"use strict";var nYe=OZ();MZ.exports=t=>typeof t=="string"?t.replace(nYe(),""):t});var _Z=_((rFt,UZ)=>{function iYe(){this.__data__=[],this.size=0}UZ.exports=iYe});var Ly=_((nFt,HZ)=>{function sYe(t,e){return t===e||t!==t&&e!==e}HZ.exports=sYe});var FI=_((iFt,qZ)=>{var oYe=Ly();function aYe(t,e){for(var r=t.length;r--;)if(oYe(t[r][0],e))return r;return-1}qZ.exports=aYe});var jZ=_((sFt,GZ)=>{var lYe=FI(),cYe=Array.prototype,uYe=cYe.splice;function AYe(t){var e=this.__data__,r=lYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():uYe.call(e,r,1),--this.size,!0}GZ.exports=AYe});var WZ=_((oFt,YZ)=>{var fYe=FI();function pYe(t){var e=this.__data__,r=fYe(e,t);return r<0?void 0:e[r][1]}YZ.exports=pYe});var zZ=_((aFt,KZ)=>{var hYe=FI();function gYe(t){return hYe(this.__data__,t)>-1}KZ.exports=gYe});var JZ=_((lFt,VZ)=>{var dYe=FI();function mYe(t,e){var r=this.__data__,o=dYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}VZ.exports=mYe});var RI=_((cFt,XZ)=>{var yYe=_Z(),EYe=jZ(),CYe=WZ(),wYe=zZ(),IYe=JZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var BYe=RI();function vYe(){this.__data__=new BYe,this.size=0}ZZ.exports=vYe});var t$=_((AFt,e$)=>{function DYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}e$.exports=DYe});var n$=_((fFt,r$)=>{function PYe(t){return this.__data__.get(t)}r$.exports=PYe});var s$=_((pFt,i$)=>{function SYe(t){return this.__data__.has(t)}i$.exports=SYe});var UL=_((hFt,o$)=>{var bYe=typeof global=="object"&&global&&global.Object===Object&&global;o$.exports=bYe});var Hl=_((gFt,a$)=>{var xYe=UL(),kYe=typeof self=="object"&&self&&self.Object===Object&&self,QYe=xYe||kYe||Function("return this")();a$.exports=QYe});var hd=_((dFt,l$)=>{var FYe=Hl(),RYe=FYe.Symbol;l$.exports=RYe});var f$=_((mFt,A$)=>{var c$=hd(),u$=Object.prototype,TYe=u$.hasOwnProperty,LYe=u$.toString,TI=c$?c$.toStringTag:void 0;function NYe(t){var e=TYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=LYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}A$.exports=NYe});var h$=_((yFt,p$)=>{var OYe=Object.prototype,MYe=OYe.toString;function UYe(t){return MYe.call(t)}p$.exports=UYe});var gd=_((EFt,m$)=>{var g$=hd(),_Ye=f$(),HYe=h$(),qYe="[object Null]",GYe="[object Undefined]",d$=g$?g$.toStringTag:void 0;function jYe(t){return t==null?t===void 0?GYe:qYe:d$&&d$ in Object(t)?_Ye(t):HYe(t)}m$.exports=jYe});var sl=_((CFt,y$)=>{function YYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}y$.exports=YYe});var OP=_((wFt,E$)=>{var WYe=gd(),KYe=sl(),zYe="[object AsyncFunction]",VYe="[object Function]",JYe="[object GeneratorFunction]",XYe="[object Proxy]";function ZYe(t){if(!KYe(t))return!1;var e=WYe(t);return e==VYe||e==JYe||e==zYe||e==XYe}E$.exports=ZYe});var w$=_((IFt,C$)=>{var $Ye=Hl(),eWe=$Ye["__core-js_shared__"];C$.exports=eWe});var v$=_((BFt,B$)=>{var _L=w$(),I$=function(){var t=/[^.]+$/.exec(_L&&_L.keys&&_L.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function tWe(t){return!!I$&&I$ in t}B$.exports=tWe});var HL=_((vFt,D$)=>{var rWe=Function.prototype,nWe=rWe.toString;function iWe(t){if(t!=null){try{return nWe.call(t)}catch{}try{return t+""}catch{}}return""}D$.exports=iWe});var S$=_((DFt,P$)=>{var sWe=OP(),oWe=v$(),aWe=sl(),lWe=HL(),cWe=/[\\^$.*+?()[\]{}|]/g,uWe=/^\[object .+?Constructor\]$/,AWe=Function.prototype,fWe=Object.prototype,pWe=AWe.toString,hWe=fWe.hasOwnProperty,gWe=RegExp("^"+pWe.call(hWe).replace(cWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function dWe(t){if(!aWe(t)||oWe(t))return!1;var e=sWe(t)?gWe:uWe;return e.test(lWe(t))}P$.exports=dWe});var x$=_((PFt,b$)=>{function mWe(t,e){return t?.[e]}b$.exports=mWe});var Xp=_((SFt,k$)=>{var yWe=S$(),EWe=x$();function CWe(t,e){var r=EWe(t,e);return yWe(r)?r:void 0}k$.exports=CWe});var MP=_((bFt,Q$)=>{var wWe=Xp(),IWe=Hl(),BWe=wWe(IWe,"Map");Q$.exports=BWe});var LI=_((xFt,F$)=>{var vWe=Xp(),DWe=vWe(Object,"create");F$.exports=DWe});var L$=_((kFt,T$)=>{var R$=LI();function PWe(){this.__data__=R$?R$(null):{},this.size=0}T$.exports=PWe});var O$=_((QFt,N$)=>{function SWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}N$.exports=SWe});var U$=_((FFt,M$)=>{var bWe=LI(),xWe="__lodash_hash_undefined__",kWe=Object.prototype,QWe=kWe.hasOwnProperty;function FWe(t){var e=this.__data__;if(bWe){var r=e[t];return r===xWe?void 0:r}return QWe.call(e,t)?e[t]:void 0}M$.exports=FWe});var H$=_((RFt,_$)=>{var RWe=LI(),TWe=Object.prototype,LWe=TWe.hasOwnProperty;function NWe(t){var e=this.__data__;return RWe?e[t]!==void 0:LWe.call(e,t)}_$.exports=NWe});var G$=_((TFt,q$)=>{var OWe=LI(),MWe="__lodash_hash_undefined__";function UWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=OWe&&e===void 0?MWe:e,this}q$.exports=UWe});var Y$=_((LFt,j$)=>{var _We=L$(),HWe=O$(),qWe=U$(),GWe=H$(),jWe=G$();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var W$=Y$(),YWe=RI(),WWe=MP();function KWe(){this.size=0,this.__data__={hash:new W$,map:new(WWe||YWe),string:new W$}}K$.exports=KWe});var J$=_((OFt,V$)=>{function zWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}V$.exports=zWe});var NI=_((MFt,X$)=>{var VWe=J$();function JWe(t,e){var r=t.__data__;return VWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}X$.exports=JWe});var $$=_((UFt,Z$)=>{var XWe=NI();function ZWe(t){var e=XWe(this,t).delete(t);return this.size-=e?1:0,e}Z$.exports=ZWe});var tee=_((_Ft,eee)=>{var $We=NI();function eKe(t){return $We(this,t).get(t)}eee.exports=eKe});var nee=_((HFt,ree)=>{var tKe=NI();function rKe(t){return tKe(this,t).has(t)}ree.exports=rKe});var see=_((qFt,iee)=>{var nKe=NI();function iKe(t,e){var r=nKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}iee.exports=iKe});var UP=_((GFt,oee)=>{var sKe=z$(),oKe=$$(),aKe=tee(),lKe=nee(),cKe=see();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var uKe=RI(),AKe=MP(),fKe=UP(),pKe=200;function hKe(t,e){var r=this.__data__;if(r instanceof uKe){var o=r.__data__;if(!AKe||o.length{var gKe=RI(),dKe=$Z(),mKe=t$(),yKe=n$(),EKe=s$(),CKe=lee();function Uy(t){var e=this.__data__=new gKe(t);this.size=e.size}Uy.prototype.clear=dKe;Uy.prototype.delete=mKe;Uy.prototype.get=yKe;Uy.prototype.has=EKe;Uy.prototype.set=CKe;cee.exports=Uy});var Aee=_((WFt,uee)=>{var wKe="__lodash_hash_undefined__";function IKe(t){return this.__data__.set(t,wKe),this}uee.exports=IKe});var pee=_((KFt,fee)=>{function BKe(t){return this.__data__.has(t)}fee.exports=BKe});var gee=_((zFt,hee)=>{var vKe=UP(),DKe=Aee(),PKe=pee();function HP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new vKe;++e{function SKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function bKe(t,e){return t.has(e)}yee.exports=bKe});var qL=_((XFt,Cee)=>{var xKe=gee(),kKe=mee(),QKe=Eee(),FKe=1,RKe=2;function TKe(t,e,r,o,a,n){var u=r&FKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,x=r&RKe?new xKe:void 0;for(n.set(t,e),n.set(e,t);++I{var LKe=Hl(),NKe=LKe.Uint8Array;wee.exports=NKe});var Bee=_(($Ft,Iee)=>{function OKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Iee.exports=OKe});var Dee=_((eRt,vee)=>{function MKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}vee.exports=MKe});var kee=_((tRt,xee)=>{var Pee=hd(),See=jL(),UKe=Ly(),_Ke=qL(),HKe=Bee(),qKe=Dee(),GKe=1,jKe=2,YKe="[object Boolean]",WKe="[object Date]",KKe="[object Error]",zKe="[object Map]",VKe="[object Number]",JKe="[object RegExp]",XKe="[object Set]",ZKe="[object String]",$Ke="[object Symbol]",eze="[object ArrayBuffer]",tze="[object DataView]",bee=Pee?Pee.prototype:void 0,YL=bee?bee.valueOf:void 0;function rze(t,e,r,o,a,n,u){switch(r){case tze:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case eze:return!(t.byteLength!=e.byteLength||!n(new See(t),new See(e)));case YKe:case WKe:case VKe:return UKe(+t,+e);case KKe:return t.name==e.name&&t.message==e.message;case JKe:case ZKe:return t==e+"";case zKe:var A=HKe;case XKe:var p=o&GKe;if(A||(A=qKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=jKe,u.set(t,e);var E=_Ke(A(t),A(e),o,a,n,u);return u.delete(t),E;case $Ke:if(YL)return YL.call(t)==YL.call(e)}return!1}xee.exports=rze});var qP=_((rRt,Qee)=>{function nze(t,e){for(var r=-1,o=e.length,a=t.length;++r{var ize=Array.isArray;Fee.exports=ize});var WL=_((iRt,Ree)=>{var sze=qP(),oze=ql();function aze(t,e,r){var o=e(t);return oze(t)?o:sze(o,r(t))}Ree.exports=aze});var Lee=_((sRt,Tee)=>{function lze(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function cze(){return[]}Nee.exports=cze});var GP=_((aRt,Mee)=>{var uze=Lee(),Aze=KL(),fze=Object.prototype,pze=fze.propertyIsEnumerable,Oee=Object.getOwnPropertySymbols,hze=Oee?function(t){return t==null?[]:(t=Object(t),uze(Oee(t),function(e){return pze.call(t,e)}))}:Aze;Mee.exports=hze});var _ee=_((lRt,Uee)=>{function gze(t,e){for(var r=-1,o=Array(t);++r{function dze(t){return t!=null&&typeof t=="object"}Hee.exports=dze});var Gee=_((uRt,qee)=>{var mze=gd(),yze=Ju(),Eze="[object Arguments]";function Cze(t){return yze(t)&&mze(t)==Eze}qee.exports=Cze});var OI=_((ARt,Wee)=>{var jee=Gee(),wze=Ju(),Yee=Object.prototype,Ize=Yee.hasOwnProperty,Bze=Yee.propertyIsEnumerable,vze=jee(function(){return arguments}())?jee:function(t){return wze(t)&&Ize.call(t,"callee")&&!Bze.call(t,"callee")};Wee.exports=vze});var zee=_((fRt,Kee)=>{function Dze(){return!1}Kee.exports=Dze});var UI=_((MI,_y)=>{var Pze=Hl(),Sze=zee(),Xee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Vee=Xee&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,bze=Vee&&Vee.exports===Xee,Jee=bze?Pze.Buffer:void 0,xze=Jee?Jee.isBuffer:void 0,kze=xze||Sze;_y.exports=kze});var _I=_((pRt,Zee)=>{var Qze=9007199254740991,Fze=/^(?:0|[1-9]\d*)$/;function Rze(t,e){var r=typeof t;return e=e??Qze,!!e&&(r=="number"||r!="symbol"&&Fze.test(t))&&t>-1&&t%1==0&&t{var Tze=9007199254740991;function Lze(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Tze}$ee.exports=Lze});var tte=_((gRt,ete)=>{var Nze=gd(),Oze=jP(),Mze=Ju(),Uze="[object Arguments]",_ze="[object Array]",Hze="[object Boolean]",qze="[object Date]",Gze="[object Error]",jze="[object Function]",Yze="[object Map]",Wze="[object Number]",Kze="[object Object]",zze="[object RegExp]",Vze="[object Set]",Jze="[object String]",Xze="[object WeakMap]",Zze="[object ArrayBuffer]",$ze="[object DataView]",eVe="[object Float32Array]",tVe="[object Float64Array]",rVe="[object Int8Array]",nVe="[object Int16Array]",iVe="[object Int32Array]",sVe="[object Uint8Array]",oVe="[object Uint8ClampedArray]",aVe="[object Uint16Array]",lVe="[object Uint32Array]",ui={};ui[eVe]=ui[tVe]=ui[rVe]=ui[nVe]=ui[iVe]=ui[sVe]=ui[oVe]=ui[aVe]=ui[lVe]=!0;ui[Uze]=ui[_ze]=ui[Zze]=ui[Hze]=ui[$ze]=ui[qze]=ui[Gze]=ui[jze]=ui[Yze]=ui[Wze]=ui[Kze]=ui[zze]=ui[Vze]=ui[Jze]=ui[Xze]=!1;function cVe(t){return Mze(t)&&Oze(t.length)&&!!ui[Nze(t)]}ete.exports=cVe});var YP=_((dRt,rte)=>{function uVe(t){return function(e){return t(e)}}rte.exports=uVe});var WP=_((HI,Hy)=>{var AVe=UL(),nte=typeof HI=="object"&&HI&&!HI.nodeType&&HI,qI=nte&&typeof Hy=="object"&&Hy&&!Hy.nodeType&&Hy,fVe=qI&&qI.exports===nte,zL=fVe&&AVe.process,pVe=function(){try{var t=qI&&qI.require&&qI.require("util").types;return t||zL&&zL.binding&&zL.binding("util")}catch{}}();Hy.exports=pVe});var KP=_((mRt,ote)=>{var hVe=tte(),gVe=YP(),ite=WP(),ste=ite&&ite.isTypedArray,dVe=ste?gVe(ste):hVe;ote.exports=dVe});var VL=_((yRt,ate)=>{var mVe=_ee(),yVe=OI(),EVe=ql(),CVe=UI(),wVe=_I(),IVe=KP(),BVe=Object.prototype,vVe=BVe.hasOwnProperty;function DVe(t,e){var r=EVe(t),o=!r&&yVe(t),a=!r&&!o&&CVe(t),n=!r&&!o&&!a&&IVe(t),u=r||o||a||n,A=u?mVe(t.length,String):[],p=A.length;for(var h in t)(e||vVe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||wVe(h,p)))&&A.push(h);return A}ate.exports=DVe});var zP=_((ERt,lte)=>{var PVe=Object.prototype;function SVe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||PVe;return t===r}lte.exports=SVe});var JL=_((CRt,cte)=>{function bVe(t,e){return function(r){return t(e(r))}}cte.exports=bVe});var Ate=_((wRt,ute)=>{var xVe=JL(),kVe=xVe(Object.keys,Object);ute.exports=kVe});var pte=_((IRt,fte)=>{var QVe=zP(),FVe=Ate(),RVe=Object.prototype,TVe=RVe.hasOwnProperty;function LVe(t){if(!QVe(t))return FVe(t);var e=[];for(var r in Object(t))TVe.call(t,r)&&r!="constructor"&&e.push(r);return e}fte.exports=LVe});var GI=_((BRt,hte)=>{var NVe=OP(),OVe=jP();function MVe(t){return t!=null&&OVe(t.length)&&!NVe(t)}hte.exports=MVe});var VP=_((vRt,gte)=>{var UVe=VL(),_Ve=pte(),HVe=GI();function qVe(t){return HVe(t)?UVe(t):_Ve(t)}gte.exports=qVe});var XL=_((DRt,dte)=>{var GVe=WL(),jVe=GP(),YVe=VP();function WVe(t){return GVe(t,YVe,jVe)}dte.exports=WVe});var Ete=_((PRt,yte)=>{var mte=XL(),KVe=1,zVe=Object.prototype,VVe=zVe.hasOwnProperty;function JVe(t,e,r,o,a,n){var u=r&KVe,A=mte(t),p=A.length,h=mte(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:VVe.call(e,v)))return!1}var x=n.get(t),C=n.get(e);if(x&&C)return x==e&&C==t;var R=!0;n.set(t,e),n.set(e,t);for(var N=u;++I{var XVe=Xp(),ZVe=Hl(),$Ve=XVe(ZVe,"DataView");Cte.exports=$Ve});var Bte=_((bRt,Ite)=>{var eJe=Xp(),tJe=Hl(),rJe=eJe(tJe,"Promise");Ite.exports=rJe});var Dte=_((xRt,vte)=>{var nJe=Xp(),iJe=Hl(),sJe=nJe(iJe,"Set");vte.exports=sJe});var Ste=_((kRt,Pte)=>{var oJe=Xp(),aJe=Hl(),lJe=oJe(aJe,"WeakMap");Pte.exports=lJe});var jI=_((QRt,Tte)=>{var ZL=wte(),$L=MP(),eN=Bte(),tN=Dte(),rN=Ste(),Rte=gd(),qy=HL(),bte="[object Map]",cJe="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Fte="[object DataView]",uJe=qy(ZL),AJe=qy($L),fJe=qy(eN),pJe=qy(tN),hJe=qy(rN),dd=Rte;(ZL&&dd(new ZL(new ArrayBuffer(1)))!=Fte||$L&&dd(new $L)!=bte||eN&&dd(eN.resolve())!=xte||tN&&dd(new tN)!=kte||rN&&dd(new rN)!=Qte)&&(dd=function(t){var e=Rte(t),r=e==cJe?t.constructor:void 0,o=r?qy(r):"";if(o)switch(o){case uJe:return Fte;case AJe:return bte;case fJe:return xte;case pJe:return kte;case hJe:return Qte}return e});Tte.exports=dd});var qte=_((FRt,Hte)=>{var nN=_P(),gJe=qL(),dJe=kee(),mJe=Ete(),Lte=jI(),Nte=ql(),Ote=UI(),yJe=KP(),EJe=1,Mte="[object Arguments]",Ute="[object Array]",JP="[object Object]",CJe=Object.prototype,_te=CJe.hasOwnProperty;function wJe(t,e,r,o,a,n){var u=Nte(t),A=Nte(e),p=u?Ute:Lte(t),h=A?Ute:Lte(e);p=p==Mte?JP:p,h=h==Mte?JP:h;var E=p==JP,I=h==JP,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new nN),u||yJe(t)?gJe(t,e,r,o,a,n):dJe(t,e,p,r,o,a,n);if(!(r&EJe)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var R=x?t.value():t,N=C?e.value():e;return n||(n=new nN),a(R,N,r,o,n)}}return v?(n||(n=new nN),mJe(t,e,r,o,a,n)):!1}Hte.exports=wJe});var Wte=_((RRt,Yte)=>{var IJe=qte(),Gte=Ju();function jte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Gte(t)&&!Gte(e)?t!==t&&e!==e:IJe(t,e,r,o,jte,a)}Yte.exports=jte});var zte=_((TRt,Kte)=>{var BJe=Wte();function vJe(t,e){return BJe(t,e)}Kte.exports=vJe});var iN=_((LRt,Vte)=>{var DJe=Xp(),PJe=function(){try{var t=DJe(Object,"defineProperty");return t({},"",{}),t}catch{}}();Vte.exports=PJe});var XP=_((NRt,Xte)=>{var Jte=iN();function SJe(t,e,r){e=="__proto__"&&Jte?Jte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=SJe});var sN=_((ORt,Zte)=>{var bJe=XP(),xJe=Ly();function kJe(t,e,r){(r!==void 0&&!xJe(t[e],r)||r===void 0&&!(e in t))&&bJe(t,e,r)}Zte.exports=kJe});var ere=_((MRt,$te)=>{function QJe(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=QJe});var rre=_((URt,tre)=>{var FJe=ere(),RJe=FJe();tre.exports=RJe});var oN=_((YI,Gy)=>{var TJe=Hl(),ore=typeof YI=="object"&&YI&&!YI.nodeType&&YI,nre=ore&&typeof Gy=="object"&&Gy&&!Gy.nodeType&&Gy,LJe=nre&&nre.exports===ore,ire=LJe?TJe.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function NJe(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}Gy.exports=NJe});var ZP=_((_Rt,lre)=>{var are=jL();function OJe(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=OJe});var aN=_((HRt,cre)=>{var MJe=ZP();function UJe(t,e){var r=e?MJe(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=UJe});var $P=_((qRt,ure)=>{function _Je(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var HJe=sl(),Are=Object.create,qJe=function(){function t(){}return function(e){if(!HJe(e))return{};if(Are)return Are(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();fre.exports=qJe});var eS=_((jRt,hre)=>{var GJe=JL(),jJe=GJe(Object.getPrototypeOf,Object);hre.exports=jJe});var lN=_((YRt,gre)=>{var YJe=pre(),WJe=eS(),KJe=zP();function zJe(t){return typeof t.constructor=="function"&&!KJe(t)?YJe(WJe(t)):{}}gre.exports=zJe});var mre=_((WRt,dre)=>{var VJe=GI(),JJe=Ju();function XJe(t){return JJe(t)&&VJe(t)}dre.exports=XJe});var cN=_((KRt,Ere)=>{var ZJe=gd(),$Je=eS(),eXe=Ju(),tXe="[object Object]",rXe=Function.prototype,nXe=Object.prototype,yre=rXe.toString,iXe=nXe.hasOwnProperty,sXe=yre.call(Object);function oXe(t){if(!eXe(t)||ZJe(t)!=tXe)return!1;var e=$Je(t);if(e===null)return!0;var r=iXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&yre.call(r)==sXe}Ere.exports=oXe});var uN=_((zRt,Cre)=>{function aXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Cre.exports=aXe});var tS=_((VRt,wre)=>{var lXe=XP(),cXe=Ly(),uXe=Object.prototype,AXe=uXe.hasOwnProperty;function fXe(t,e,r){var o=t[e];(!(AXe.call(t,e)&&cXe(o,r))||r===void 0&&!(e in t))&&lXe(t,e,r)}wre.exports=fXe});var md=_((JRt,Ire)=>{var pXe=tS(),hXe=XP();function gXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function dXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Bre.exports=dXe});var Pre=_((ZRt,Dre)=>{var mXe=sl(),yXe=zP(),EXe=vre(),CXe=Object.prototype,wXe=CXe.hasOwnProperty;function IXe(t){if(!mXe(t))return EXe(t);var e=yXe(t),r=[];for(var o in t)o=="constructor"&&(e||!wXe.call(t,o))||r.push(o);return r}Dre.exports=IXe});var jy=_(($Rt,Sre)=>{var BXe=VL(),vXe=Pre(),DXe=GI();function PXe(t){return DXe(t)?BXe(t,!0):vXe(t)}Sre.exports=PXe});var xre=_((eTt,bre)=>{var SXe=md(),bXe=jy();function xXe(t){return SXe(t,bXe(t))}bre.exports=xXe});var Lre=_((tTt,Tre)=>{var kre=sN(),kXe=oN(),QXe=aN(),FXe=$P(),RXe=lN(),Qre=OI(),Fre=ql(),TXe=mre(),LXe=UI(),NXe=OP(),OXe=sl(),MXe=cN(),UXe=KP(),Rre=uN(),_Xe=xre();function HXe(t,e,r,o,a,n,u){var A=Rre(t,r),p=Rre(e,r),h=u.get(p);if(h){kre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Fre(p),x=!v&&LXe(p),C=!v&&!x&&UXe(p);E=p,v||x||C?Fre(A)?E=A:TXe(A)?E=FXe(A):x?(I=!1,E=kXe(p,!0)):C?(I=!1,E=QXe(p,!0)):E=[]:MXe(p)||Qre(p)?(E=A,Qre(A)?E=_Xe(A):(!OXe(A)||NXe(A))&&(E=RXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),kre(t,r,E)}Tre.exports=HXe});var Mre=_((rTt,Ore)=>{var qXe=_P(),GXe=sN(),jXe=rre(),YXe=Lre(),WXe=sl(),KXe=jy(),zXe=uN();function Nre(t,e,r,o,a){t!==e&&jXe(e,function(n,u){if(a||(a=new qXe),WXe(n))YXe(t,e,u,r,Nre,o,a);else{var A=o?o(zXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),GXe(t,u,A)}},KXe)}Ore.exports=Nre});var AN=_((nTt,Ure)=>{function VXe(t){return t}Ure.exports=VXe});var Hre=_((iTt,_re)=>{function JXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}_re.exports=JXe});var fN=_((sTt,Gre)=>{var XXe=Hre(),qre=Math.max;function ZXe(t,e,r){return e=qre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=qre(o.length-e,0),u=Array(n);++a{function $Xe(t){return function(){return t}}jre.exports=$Xe});var zre=_((aTt,Kre)=>{var eZe=Yre(),Wre=iN(),tZe=AN(),rZe=Wre?function(t,e){return Wre(t,"toString",{configurable:!0,enumerable:!1,value:eZe(e),writable:!0})}:tZe;Kre.exports=rZe});var Jre=_((lTt,Vre)=>{var nZe=800,iZe=16,sZe=Date.now;function oZe(t){var e=0,r=0;return function(){var o=sZe(),a=iZe-(o-r);if(r=o,a>0){if(++e>=nZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Vre.exports=oZe});var pN=_((cTt,Xre)=>{var aZe=zre(),lZe=Jre(),cZe=lZe(aZe);Xre.exports=cZe});var $re=_((uTt,Zre)=>{var uZe=AN(),AZe=fN(),fZe=pN();function pZe(t,e){return fZe(AZe(t,e,uZe),t+"")}Zre.exports=pZe});var tne=_((ATt,ene)=>{var hZe=Ly(),gZe=GI(),dZe=_I(),mZe=sl();function yZe(t,e,r){if(!mZe(r))return!1;var o=typeof e;return(o=="number"?gZe(r)&&dZe(e,r.length):o=="string"&&e in r)?hZe(r[e],t):!1}ene.exports=yZe});var nne=_((fTt,rne)=>{var EZe=$re(),CZe=tne();function wZe(t){return EZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&CZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var IZe=Mre(),BZe=nne(),vZe=BZe(function(t,e,r,o){IZe(t,e,r,o)});ine.exports=vZe});var _e={};zt(_e,{AsyncActions:()=>dN,BufferStream:()=>gN,CachingStrategy:()=>mne,DefaultStream:()=>mN,allSettledSafe:()=>_c,assertNever:()=>EN,bufferStream:()=>zy,buildIgnorePattern:()=>QZe,convertMapsToIndexableObjects:()=>nS,dynamicRequire:()=>Df,escapeRegExp:()=>PZe,getArrayWithDefault:()=>Yy,getFactoryWithDefault:()=>al,getMapWithDefault:()=>Wy,getSetWithDefault:()=>yd,groupBy:()=>IN,isIndexableObject:()=>hN,isPathLike:()=>FZe,isTaggedYarnVersion:()=>DZe,makeDeferred:()=>hne,mapAndFilter:()=>ol,mapAndFind:()=>KI,mergeIntoTarget:()=>Ene,overrideType:()=>SZe,parseBoolean:()=>zI,parseInt:()=>Vy,parseOptionalBoolean:()=>yne,plural:()=>rS,prettifyAsyncErrors:()=>Ky,prettifySyncErrors:()=>CN,releaseAfterUseAsync:()=>xZe,replaceEnvVariables:()=>iS,sortMap:()=>ks,toMerged:()=>RZe,tryParseOptionalBoolean:()=>wN,validateEnum:()=>bZe});function DZe(t){return!!(Ane.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function rS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function PZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function SZe(t){}function EN(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function bZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function ol(t,e){let r=[];for(let o of t){let a=e(o);a!==fne&&r.push(a)}return r}function KI(t,e){for(let r of t){let o=e(r);if(o!==pne)return o}}function hN(t){return typeof t=="object"&&t!==null}async function _c(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function nS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),hN(t))for(let e of Object.keys(t)){let r=t[e];hN(r)&&(t[e]=nS(r))}return t}function al(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function yd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Wy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function xZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Ky(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function CN(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function zy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function hne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function gne(t){return WI(le.fromPortablePath(t))}function dne(path){let physicalPath=le.fromPortablePath(path),currentCacheEntry=WI.cache[physicalPath];delete WI.cache[physicalPath];let result;try{result=gne(physicalPath);let freshCacheEntry=WI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{WI.cache[physicalPath]=currentCacheEntry}return result}function kZe(t){let e=one.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=dne(t);return one.set(t,{mtime:r.mtimeMs,instance:o}),o}function Df(t,{cachingStrategy:e=2}={}){switch(e){case 0:return dne(t);case 1:return kZe(t);case 2:return gne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function QZe(t){return t.length===0?null:t.map(e=>`(${cne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function iS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function zI(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 yne(t){return typeof t>"u"?t:zI(t)}function wN(t){try{return yne(t)}catch{return null}}function FZe(t){return!!(le.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Ene(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,lne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,ane.default)(h,p))||u.push(p);return u}});return n}function RZe(...t){return Ene({},...t)}function IN(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Vy(t){return typeof t=="string"?Number.parseInt(t,10):t}var ane,lne,cne,une,Ane,yN,fne,pne,gN,dN,mN,WI,one,mne,Gl=Et(()=>{Pt();qt();ane=$e(zte()),lne=$e(sne()),cne=$e(Zo()),une=$e(sd()),Ane=$e(Jn()),yN=ve("stream");fne=Symbol();ol.skip=fne;pne=Symbol();KI.skip=pne;gN=class extends yN.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};dN=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,une.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=hne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},mN=class extends yN.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},WI=eval("require");one=new Map;mne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(mne||{})});var Jy,BN,vN,Cne=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),BN=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(BN||{}),vN=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(vN||{})});var de={};zt(de,{LogLevel:()=>cS,Style:()=>oS,Type:()=>yt,addLogFilterSupport:()=>XI,applyColor:()=>zs,applyHyperlink:()=>Zy,applyStyle:()=>Ed,json:()=>Cd,jsonOrPretty:()=>NZe,mark:()=>xN,pretty:()=>Ut,prettyField:()=>Xu,prettyList:()=>bN,prettyTruncatedLocatorList:()=>lS,stripAnsi:()=>Xy.default,supportsColor:()=>aS,supportsHyperlinks:()=>SN,tuple:()=>Hc});function wne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function Hc(t,e){return[e,t]}function Ed(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function zs(t,e,r){if(!t.get("enableColors"))return e;let o=TZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:PN.level>=3?o[0]:o[1],n=typeof a=="number"?DN.ansi256(a):a.startsWith("#")?DN.hex(a):DN[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Zy(t,e,r){return t.get("enableHyperlinks")?LZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ut(t,e,r){if(e===null)return zs(t,"null",yt.NULL);if(Object.hasOwn(sS,r))return sS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return zs(t,e,r)}function bN(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ut(t,a,r)).join(o)}function Cd(t,e){if(t===null)return null;if(Object.hasOwn(sS,e))return sS[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 NZe(t,e,[r,o]){return t?Cd(r,o):Ut(e,r,o)}function xN(t){return{Check:zs(t,"\u2713","green"),Cross:zs(t,"\u2718","red"),Question:zs(t,"?","cyan")}}function Xu(t,{label:e,value:[r,o]}){return`${Ut(t,e,yt.CODE)}: ${Ut(t,r,o)}`}function lS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${qr(t,h)}, `,I=kN(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ut(t,p,yt.NUMBER))].join("")}function XI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let x=I.get("code");typeof x<"u"&&o.set(x,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let R=I.get("pattern");typeof R<"u"&&n.push([Ine.default.matcher(R,{contains:!0}),v])}n.reverse();let u=(I,v,x)=>{if(I===null||I===0)return x;let C=a.size>0||n.length>0?(0,Xy.default)(v):v;if(a.size>0){let R=a.get(C);if(typeof R<"u")return R??x}if(n.length>0){for(let[R,N]of n)if(R(C))return N??x}if(o.size>0){let R=o.get(Ku(I));if(typeof R<"u")return R??x}return x},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,x,C){switch(u(v,x,C)){case"info":A.call(I,v,x);break;case"warning":p.call(I,v??0,x);break;case"error":h.call(I,v??0,x);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,VI,Ine,Xy,Bne,yt,oS,PN,aS,SN,DN,TZe,So,sS,LZe,cS,jl=Et(()=>{Pt();JI=$e(IL()),VI=$e(rd());qt();Ine=$e(Zo()),Xy=$e(NP()),Bne=ve("util");fP();bo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},oS=(e=>(e[e.BOLD=2]="BOLD",e))(oS||{}),PN=VI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},aS=PN.level!==0,SN=aS&&!VI.default.GITHUB_ACTIONS&&!VI.default.CIRCLE&&!VI.default.GITLAB,DN=new JI.default.Instance(PN),TZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;sS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?zs(t,`${e}`,yt.NUMBER):zs(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Bne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>zs(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>qr(t,e),json:t=>ba(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>Gn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>ZI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?ba(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>QN(t,e,r),json:({locator:t,descriptor:e})=>({locator:ba(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Vs(e.selector))} \u27A4 ${zs(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Zy(t,zs(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>zs(t,wne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return zs(t,`${r} ${wne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>zs(t,le.fromPortablePath(e),yt.PATH),json:t=>le.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ut(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>Ed(t,a,2)),e),json:t=>t})};LZe=!!process.env.KONSOLE_VERSION;cS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(cS||{})});var vne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.splitWhen=$y.flatten=void 0;function OZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}$y.flatten=OZe;function MZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}$y.splitWhen=MZe});var Dne=_(uS=>{"use strict";Object.defineProperty(uS,"__esModule",{value:!0});uS.isEnoentCodeError=void 0;function UZe(t){return t.code==="ENOENT"}uS.isEnoentCodeError=UZe});var Pne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.createDirentFromStats=void 0;var FN=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 _Ze(t,e){return new FN(t,e)}AS.createDirentFromStats=_Ze});var Sne=_(Zu=>{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.removeLeadingDotSegment=Zu.escape=Zu.makeAbsolute=Zu.unixify=void 0;var HZe=ve("path"),qZe=2,GZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function jZe(t){return t.replace(/\\/g,"/")}Zu.unixify=jZe;function YZe(t,e){return HZe.resolve(t,e)}Zu.makeAbsolute=YZe;function WZe(t){return t.replace(GZe,"\\$2")}Zu.escape=WZe;function KZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(qZe)}return t}Zu.removeLeadingDotSegment=KZe});var xne=_((bTt,bne)=>{bne.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 Fne=_((xTt,Qne)=>{var zZe=xne(),kne={"{":"}","(":")","[":"]"},VZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=kne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},JZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var XZe=Fne(),ZZe=ve("path").posix.dirname,$Ze=ve("os").platform()==="win32",RN="/",e$e=/\\/g,t$e=/[\{\[].*[\}\]]$/,r$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,n$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Rne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&$Ze&&e.indexOf(RN)<0&&(e=e.replace(e$e,RN)),t$e.test(e)&&(e+=RN),e+="a";do e=ZZe(e);while(XZe(e)||r$e.test(e));return e.replace(n$e,"$1")}});var qne=_(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.matchAny=Gr.convertPatternsToRe=Gr.makeRe=Gr.getPatternParts=Gr.expandBraceExpansion=Gr.expandPatternsWithBraceExpansion=Gr.isAffectDepthOfReadingPattern=Gr.endsWithSlashGlobStar=Gr.hasGlobStar=Gr.getBaseDirectory=Gr.isPatternRelatedToParentDirectory=Gr.getPatternsOutsideCurrentDirectory=Gr.getPatternsInsideCurrentDirectory=Gr.getPositivePatterns=Gr.getNegativePatterns=Gr.isPositivePattern=Gr.isNegativePattern=Gr.convertToNegativePattern=Gr.convertToPositivePattern=Gr.isDynamicPattern=Gr.isStaticPattern=void 0;var i$e=ve("path"),s$e=Tne(),TN=Zo(),Lne="**",o$e="\\",a$e=/[*?]|^!/,l$e=/\[[^[]*]/,c$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,u$e=/[!*+?@]\([^(]*\)/,A$e=/,|\.\./;function Nne(t,e={}){return!One(t,e)}Gr.isStaticPattern=Nne;function One(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(o$e)||a$e.test(t)||l$e.test(t)||c$e.test(t)||e.extglob!==!1&&u$e.test(t)||e.braceExpansion!==!1&&f$e(t))}Gr.isDynamicPattern=One;function f$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return A$e.test(o)}function p$e(t){return fS(t)?t.slice(1):t}Gr.convertToPositivePattern=p$e;function h$e(t){return"!"+t}Gr.convertToNegativePattern=h$e;function fS(t){return t.startsWith("!")&&t[1]!=="("}Gr.isNegativePattern=fS;function Mne(t){return!fS(t)}Gr.isPositivePattern=Mne;function g$e(t){return t.filter(fS)}Gr.getNegativePatterns=g$e;function d$e(t){return t.filter(Mne)}Gr.getPositivePatterns=d$e;function m$e(t){return t.filter(e=>!LN(e))}Gr.getPatternsInsideCurrentDirectory=m$e;function y$e(t){return t.filter(LN)}Gr.getPatternsOutsideCurrentDirectory=y$e;function LN(t){return t.startsWith("..")||t.startsWith("./..")}Gr.isPatternRelatedToParentDirectory=LN;function E$e(t){return s$e(t,{flipBackslashes:!1})}Gr.getBaseDirectory=E$e;function C$e(t){return t.includes(Lne)}Gr.hasGlobStar=C$e;function Une(t){return t.endsWith("/"+Lne)}Gr.endsWithSlashGlobStar=Une;function w$e(t){let e=i$e.basename(t);return Une(t)||Nne(e)}Gr.isAffectDepthOfReadingPattern=w$e;function I$e(t){return t.reduce((e,r)=>e.concat(_ne(r)),[])}Gr.expandPatternsWithBraceExpansion=I$e;function _ne(t){return TN.braces(t,{expand:!0,nodupes:!0})}Gr.expandBraceExpansion=_ne;function B$e(t,e){let{parts:r}=TN.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}Gr.getPatternParts=B$e;function Hne(t,e){return TN.makeRe(t,e)}Gr.makeRe=Hne;function v$e(t,e){return t.map(r=>Hne(r,e))}Gr.convertPatternsToRe=v$e;function D$e(t,e){return e.some(r=>r.test(t))}Gr.matchAny=D$e});var Wne=_((FTt,Yne)=>{"use strict";var P$e=ve("stream"),Gne=P$e.PassThrough,S$e=Array.prototype.slice;Yne.exports=b$e;function b$e(){let t=[],e=S$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Gne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function x(C){function R(){C.removeListener("merge2UnpipeEnd",R),C.removeListener("end",R),n&&C.removeListener("error",N),v()}function N(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",R),C.on("end",R),n&&C.on("error",N),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(pS,"__esModule",{value:!0});pS.merge=void 0;var x$e=Wne();function k$e(t){let e=x$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Kne(t)),e.once("end",()=>Kne(t)),e}pS.merge=k$e;function Kne(t){t.forEach(e=>e.emit("close"))}});var Vne=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.isEmpty=eE.isString=void 0;function Q$e(t){return typeof t=="string"}eE.isString=Q$e;function F$e(t){return t===""}eE.isEmpty=F$e});var Pf=_(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.string=xo.stream=xo.pattern=xo.path=xo.fs=xo.errno=xo.array=void 0;var R$e=vne();xo.array=R$e;var T$e=Dne();xo.errno=T$e;var L$e=Pne();xo.fs=L$e;var N$e=Sne();xo.path=N$e;var O$e=qne();xo.pattern=O$e;var M$e=zne();xo.stream=M$e;var U$e=Vne();xo.string=U$e});var Zne=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Sf=Pf();function _$e(t,e){let r=Jne(t),o=Xne(t,e.ignore),a=r.filter(p=>Sf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Sf.pattern.isDynamicPattern(p,e)),u=NN(a,o,!1),A=NN(n,o,!0);return u.concat(A)}ko.generate=_$e;function NN(t,e,r){let o=[],a=Sf.pattern.getPatternsOutsideCurrentDirectory(t),n=Sf.pattern.getPatternsInsideCurrentDirectory(t),u=ON(a),A=ON(n);return o.push(...MN(u,e,r)),"."in A?o.push(UN(".",n,e,r)):o.push(...MN(A,e,r)),o}ko.convertPatternsToTasks=NN;function Jne(t){return Sf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Jne;function Xne(t,e){return Sf.pattern.getNegativePatterns(t).concat(e).map(Sf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=Xne;function ON(t){let e={};return t.reduce((r,o)=>{let a=Sf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=ON;function MN(t,e,r){return Object.keys(t).map(o=>UN(o,t[o],e,r))}ko.convertPatternGroupsToTasks=MN;function UN(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Sf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=UN});var eie=_(tE=>{"use strict";Object.defineProperty(tE,"__esModule",{value:!0});tE.removeDuplicateSlashes=tE.transform=void 0;var H$e=/(?!^)\/{2,}/g;function q$e(t){return t.map(e=>$ne(e))}tE.transform=q$e;function $ne(t){return t.replace(H$e,"/")}tE.removeDuplicateSlashes=$ne});var rie=_(hS=>{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.read=void 0;function G$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){tie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){_N(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){tie(r,n);return}_N(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),_N(r,u)})})}hS.read=G$e;function tie(t,e){t(e)}function _N(t,e){t(null,e)}});var nie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function j$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}gS.read=j$e});var iie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.createFileSystemAdapter=Zp.FILE_SYSTEM_ADAPTER=void 0;var dS=ve("fs");Zp.FILE_SYSTEM_ADAPTER={lstat:dS.lstat,stat:dS.stat,lstatSync:dS.lstatSync,statSync:dS.statSync};function Y$e(t){return t===void 0?Zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Zp.FILE_SYSTEM_ADAPTER),t)}Zp.createFileSystemAdapter=Y$e});var sie=_(qN=>{"use strict";Object.defineProperty(qN,"__esModule",{value:!0});var W$e=iie(),HN=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=W$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qN.default=HN});var wd=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.statSync=$p.stat=$p.Settings=void 0;var oie=rie(),K$e=nie(),GN=sie();$p.Settings=GN.default;function z$e(t,e,r){if(typeof e=="function"){oie.read(t,jN(),e);return}oie.read(t,jN(e),r)}$p.stat=z$e;function V$e(t,e){let r=jN(e);return K$e.read(t,r)}$p.statSync=V$e;function jN(t={}){return t instanceof GN.default?t:new GN.default(t)}});var lie=_((GTt,aie)=>{aie.exports=J$e;function J$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var YN=_(yS=>{"use strict";Object.defineProperty(yS,"__esModule",{value:!0});yS.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var mS=process.versions.node.split(".");if(mS[0]===void 0||mS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var cie=Number.parseInt(mS[0],10),X$e=Number.parseInt(mS[1],10),uie=10,Z$e=10,$$e=cie>uie,eet=cie===uie&&X$e>=Z$e;yS.IS_SUPPORT_READDIR_WITH_FILE_TYPES=$$e||eet});var Aie=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.createDirentFromStats=void 0;var WN=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 tet(t,e){return new WN(t,e)}ES.createDirentFromStats=tet});var KN=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.fs=void 0;var ret=Aie();CS.fs=ret});var zN=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.joinPathSegments=void 0;function net(t,e,r){return t.endsWith(r)?t+e:t+r+e}wS.joinPathSegments=net});var mie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.readdir=eh.readdirWithFileTypes=eh.read=void 0;var iet=wd(),fie=lie(),set=YN(),pie=KN(),hie=zN();function oet(t,e,r){if(!e.stats&&set.IS_SUPPORT_READDIR_WITH_FILE_TYPES){gie(t,e,r);return}die(t,e,r)}eh.read=oet;function gie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){IS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:hie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){VN(r,n);return}let u=n.map(A=>aet(A,e));fie(u,(A,p)=>{if(A!==null){IS(r,A);return}VN(r,p)})})}eh.readdirWithFileTypes=gie;function aet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=pie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function die(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){IS(r,o);return}let n=a.map(u=>{let A=hie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{iet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:pie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});fie(n,(u,A)=>{if(u!==null){IS(r,u);return}VN(r,A)})})}eh.readdir=die;function IS(t,e){t(e)}function VN(t,e){t(null,e)}});var Iie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.readdir=th.readdirWithFileTypes=th.read=void 0;var cet=wd(),uet=YN(),yie=KN(),Eie=zN();function Aet(t,e){return!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Cie(t,e):wie(t,e)}th.read=Aet;function Cie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Eie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=yie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}th.readdirWithFileTypes=Cie;function wie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Eie.joinPathSegments(t,o,e.pathSegmentSeparator),n=cet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:yie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}th.readdir=wie});var Bie=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.createFileSystemAdapter=rh.FILE_SYSTEM_ADAPTER=void 0;var rE=ve("fs");rh.FILE_SYSTEM_ADAPTER={lstat:rE.lstat,stat:rE.stat,lstatSync:rE.lstatSync,statSync:rE.statSync,readdir:rE.readdir,readdirSync:rE.readdirSync};function fet(t){return t===void 0?rh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},rh.FILE_SYSTEM_ADAPTER),t)}rh.createFileSystemAdapter=fet});var vie=_(XN=>{"use strict";Object.defineProperty(XN,"__esModule",{value:!0});var pet=ve("path"),het=wd(),get=Bie(),JN=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=get.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,pet.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new het.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XN.default=JN});var BS=_(nh=>{"use strict";Object.defineProperty(nh,"__esModule",{value:!0});nh.Settings=nh.scandirSync=nh.scandir=void 0;var Die=mie(),det=Iie(),ZN=vie();nh.Settings=ZN.default;function met(t,e,r){if(typeof e=="function"){Die.read(t,$N(),e);return}Die.read(t,$N(e),r)}nh.scandir=met;function yet(t,e){let r=$N(e);return det.read(t,r)}nh.scandirSync=yet;function $N(t={}){return t instanceof ZN.default?t:new ZN.default(t)}});var Sie=_(($Tt,Pie)=>{"use strict";function Eet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Pie.exports=Eet});var xie=_((eLt,eO)=>{"use strict";var Cet=Sie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=Cet(wet),a=null,n=null,u=0,A=null,p={push:R,drain:Yl,saturated:Yl,pause:E,paused:!1,concurrency:r,running:h,resume:x,idle:C,length:I,getQueue:v,unshift:N,empty:Yl,kill:V,killAndDrain:te,error:ae};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var fe=a,ue=0;fe;)fe=fe.next,ue++;return ue}function v(){for(var fe=a,ue=[];fe;)ue.push(fe.value),fe=fe.next;return ue}function x(){if(!!p.paused){p.paused=!1;for(var fe=0;fe{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.joinPathSegments=$u.replacePathSegmentSeparator=$u.isAppliedFilter=$u.isFatalError=void 0;function Bet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}$u.isFatalError=Bet;function vet(t,e){return t===null||t(e)}$u.isAppliedFilter=vet;function Det(t,e){return t.split(/[/\\]/).join(e)}$u.replacePathSegmentSeparator=Det;function Pet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}$u.joinPathSegments=Pet});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var bet=vS(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=bet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var xet=ve("events"),ket=BS(),Qet=xie(),DS=vS(),Fet=nO(),iO=class extends Fet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=ket.scandir,this._emitter=new xet.EventEmitter,this._queue=Qet(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!DS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=DS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),DS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&DS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var kie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Ret=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Ret.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Tet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Let(e,this._storage)}),this._reader.read()}};lO.default=aO;function Tet(t,e){t(e)}function Let(t,e){t(null,e)}});var Qie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Net=ve("stream"),Oet=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Oet.default(this._root,this._settings),this._stream=new Net.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}};uO.default=cO});var Fie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var Met=BS(),PS=vS(),Uet=nO(),AO=class extends Uet.default{constructor(){super(...arguments),this._scandir=Met.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!PS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Rie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var _et=Fie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new _et.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Tie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var Het=ve("path"),qet=BS(),gO=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,Het.sep),this.fsScandirSettings=new qet.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}};dO.default=gO});var bS=_(eA=>{"use strict";Object.defineProperty(eA,"__esModule",{value:!0});eA.Settings=eA.walkStream=eA.walkSync=eA.walk=void 0;var Lie=kie(),Get=Qie(),jet=Rie(),mO=Tie();eA.Settings=mO.default;function Yet(t,e,r){if(typeof e=="function"){new Lie.default(t,SS()).read(e);return}new Lie.default(t,SS(e)).read(r)}eA.walk=Yet;function Wet(t,e){let r=SS(e);return new jet.default(t,r).read()}eA.walkSync=Wet;function Ket(t,e){let r=SS(e);return new Get.default(t,r).read()}eA.walkStream=Ket;function SS(t={}){return t instanceof mO.default?t:new mO.default(t)}});var xS=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var zet=ve("path"),Vet=wd(),Nie=Pf(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Vet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Nie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Nie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Jet=ve("stream"),Xet=wd(),Zet=bS(),$et=xS(),CO=class extends $et.default{constructor(){super(...arguments),this._walkStream=Zet.walkStream,this._stat=Xet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Jet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Oie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var ett=bS(),ttt=xS(),rtt=IO(),BO=class extends ttt.default{constructor(){super(...arguments),this._walkAsync=ett.walk,this._readerStream=new rtt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Mie=_(PO=>{"use strict";Object.defineProperty(PO,"__esModule",{value:!0});var nE=Pf(),DO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=nE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return nE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>nE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:nE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return nE.array.splitWhen(e,r=>r.dynamic&&nE.pattern.hasGlobStar(r.pattern))}};PO.default=DO});var Uie=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});var ntt=Mie(),SO=class extends ntt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};bO.default=SO});var _ie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var kS=Pf(),itt=Uie(),xO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new itt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(kS.pattern.isAffectDepthOfReadingPattern);return kS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=kS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!kS.pattern.matchAny(e,r)}};kO.default=xO});var Hie=_(FO=>{"use strict";Object.defineProperty(FO,"__esModule",{value:!0});var Id=Pf(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Id.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Id.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Id.path.makeAbsolute(this._settings.cwd,e);return Id.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Id.path.removeLeadingDotSegment(e),n=Id.pattern.matchAny(a,r);return!n&&o?Id.pattern.matchAny(a+"/",r):n}};FO.default=QO});var qie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var stt=Pf(),RO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return stt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=RO});var jie=_(NO=>{"use strict";Object.defineProperty(NO,"__esModule",{value:!0});var Gie=Pf(),LO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Gie.path.makeAbsolute(this._settings.cwd,r),r=Gie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};NO.default=LO});var QS=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var ott=ve("path"),att=_ie(),ltt=Hie(),ctt=qie(),utt=jie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new ctt.default(this._settings),this.entryFilter=new ltt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new utt.default(this._settings)}_getRootDirectory(e){return ott.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}}};MO.default=OO});var Yie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var Att=Oie(),ftt=QS(),UO=class extends ftt.default{constructor(){super(...arguments),this._reader=new Att.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Wie=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var ptt=ve("stream"),htt=IO(),gtt=QS(),HO=class extends gtt.default{constructor(){super(...arguments),this._reader=new htt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new ptt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};qO.default=HO});var Kie=_(jO=>{"use strict";Object.defineProperty(jO,"__esModule",{value:!0});var dtt=wd(),mtt=bS(),ytt=xS(),GO=class extends ytt.default{constructor(){super(...arguments),this._walkSync=mtt.walkSync,this._statSync=dtt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};jO.default=GO});var zie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var Ett=Kie(),Ctt=QS(),YO=class extends Ctt.default{constructor(){super(...arguments),this._reader=new Ett.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Vie=_(sE=>{"use strict";Object.defineProperty(sE,"__esModule",{value:!0});sE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var iE=ve("fs"),wtt=ve("os"),Itt=Math.max(wtt.cpus().length,1);sE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:iE.lstat,lstatSync:iE.lstatSync,stat:iE.stat,statSync:iE.statSync,readdir:iE.readdir,readdirSync:iE.readdirSync};var KO=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,Itt),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)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},sE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};sE.default=KO});var RS=_((DLt,Zie)=>{"use strict";var Jie=Zne(),Xie=eie(),Btt=Yie(),vtt=Wie(),Dtt=zie(),zO=Vie(),Bd=Pf();async function VO(t,e){oE(t);let r=JO(t,Btt.default,e),o=await Promise.all(r);return Bd.array.flatten(o)}(function(t){function e(u,A){oE(u);let p=JO(u,Dtt.default,A);return Bd.array.flatten(p)}t.sync=e;function r(u,A){oE(u);let p=JO(u,vtt.default,A);return Bd.stream.merge(p)}t.stream=r;function o(u,A){oE(u);let p=Xie.transform([].concat(u)),h=new zO.default(A);return Jie.generate(p,h)}t.generateTasks=o;function a(u,A){oE(u);let p=new zO.default(A);return Bd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return oE(u),Bd.path.escape(u)}t.escapePath=n})(VO||(VO={}));function JO(t,e,r){let o=Xie.transform([].concat(t)),a=new zO.default(r),n=Jie.generate(o,a),u=new e(a);return n.map(u.read,u)}function oE(t){if(![].concat(t).every(o=>Bd.string.isString(o)&&!Bd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Zie.exports=VO});var wn={};zt(wn,{checksumFile:()=>LS,checksumPattern:()=>NS,makeHash:()=>Js});function Js(...t){let e=(0,TS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,TS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function NS(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:le.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:le.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=le.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,TS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var TS,XO,ih=Et(()=>{Pt();TS=ve("crypto"),XO=$e(RS())});var W={};zt(W,{areDescriptorsEqual:()=>nse,areIdentsEqual:()=>n1,areLocatorsEqual:()=>i1,areVirtualPackagesEquivalent:()=>Ttt,bindDescriptor:()=>Ftt,bindLocator:()=>Rtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>xtt,convertToIdent:()=>btt,convertToManifestRange:()=>jtt,copyPackage:()=>e1,devirtualizeDescriptor:()=>t1,devirtualizeLocator:()=>r1,ensureDevirtualizedDescriptor:()=>ktt,ensureDevirtualizedLocator:()=>Qtt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>bf,isVirtualLocator:()=>qc,makeDescriptor:()=>In,makeIdent:()=>tA,makeLocator:()=>Qs,makeRange:()=>_S,parseDescriptor:()=>sh,parseFileStyleRange:()=>qtt,parseIdent:()=>Vs,parseLocator:()=>xf,parseRange:()=>vd,prettyDependent:()=>QN,prettyDescriptor:()=>Gn,prettyIdent:()=>cs,prettyLocator:()=>qr,prettyLocatorNoColors:()=>kN,prettyRange:()=>cE,prettyReference:()=>o1,prettyResolution:()=>ZI,prettyWorkspace:()=>a1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>lE,sortDescriptors:()=>uE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>ba,tryParseDescriptor:()=>s1,tryParseIdent:()=>ise,tryParseLocator:()=>US,tryParseRange:()=>Htt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function tA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:Js(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:Js(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:Js(t.identHash,e),reference:e}}function btt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function xtt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function e1(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Qs(t,`virtual:${e}#${t.reference}`))}function bf(t){return t.range.startsWith($I)}function qc(t){return t.reference.startsWith($I)}function t1(t){if(!bf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(MS,""))}function r1(t){if(!qc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(MS,""))}function ktt(t){return bf(t)?In(t,t.range.replace(MS,"")):t}function Qtt(t){return qc(t)?Qs(t,t.reference.replace(MS,"")):t}function Ftt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${aE.default.stringify(e)}`)}function Rtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${aE.default.stringify(e)}`)}function n1(t,e){return t.identHash===e.identHash}function nse(t,e){return t.descriptorHash===e.descriptorHash}function i1(t,e){return t.locatorHash===e.locatorHash}function Ttt(t,e){if(!qc(t))throw new Error("Invalid package type");if(!qc(e))throw new Error("Invalid package type");if(!n1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!nse(r,o))return!1}return!0}function Vs(t){let e=ise(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ise(t){let e=t.match(Ltt);if(!e)return null;let[,r,o]=e;return tA(typeof r<"u"?r:null,o)}function sh(t,e=!1){let r=s1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function s1(t,e=!1){let r=e?t.match(Ntt):t.match(Ott);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(tA(u,a),A)}function xf(t,e=!1){let r=US(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function US(t,e=!1){let r=e?t.match(Mtt):t.match(Utt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(tA(u,a),A)}function vd(t,e){let r=t.match(_tt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?aE.default.parse(n):n,A=typeof r[4]<"u"?aE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Htt(t,e){try{return vd(t,e)}catch{return null}}function qtt(t,{protocol:e}){let{selector:r,params:o}=vd(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function $ie(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Gtt(t){return t===null?!1:Object.entries(t).length>0}function _S({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${$ie(e)}#`),a+=$ie(r),Gtt(o)&&(a+=`::${aE.default.stringify(o)}`),a}function jtt(t){let{params:e,protocol:r,source:o,selector:a}=vd(t);for(let n in e)n.startsWith("__")&&delete e[n];return _S({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ba(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function lE(t){let{protocol:e,selector:r}=vd(t.reference),o=e!==null?e.replace(Ytt,""):"exotic",a=ese.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ut(t,`@${e.scope}/`,yt.SCOPE)}${Ut(t,e.name,yt.NAME)}`:`${Ut(t,e.name,yt.NAME)}`}function HS(t){if(t.startsWith($I)){let e=HS(t.substring(t.indexOf("#")+1)),r=t.substring($I.length,$I.length+Ptt);return`${e} [${r}]`}else return t.replace(Wtt,"?[...]")}function cE(t,e){return`${Ut(t,HS(e),yt.RANGE)}`}function Gn(t,e){return`${cs(t,e)}${Ut(t,"@",yt.RANGE)}${cE(t,e.range)}`}function o1(t,e){return`${Ut(t,HS(e),yt.REFERENCE)}`}function qr(t,e){return`${cs(t,e)}${Ut(t,"@",yt.REFERENCE)}${o1(t,e.reference)}`}function kN(t){return`${fn(t)}@${HS(t.reference)}`}function uE(t){return ks(t,[e=>fn(e),e=>e.range])}function a1(t,e){return cs(t,e.anchoredLocator)}function ZI(t,e,r){let o=bf(e)?t1(e):e;return r===null?`${Gn(t,o)} \u2192 ${xN(t).Cross}`:o.identHash===r.identHash?`${Gn(t,o)} \u2192 ${o1(t,r.reference)}`:`${Gn(t,o)} \u2192 ${qr(t,r)}`}function QN(t,e,r){return r===null?`${qr(t,e)}`:`${qr(t,e)} (via ${cE(t,r.range)})`}function nM(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Stt(t.conditions,r=>{let[,o,a]=r.match(rse),n=e[o];return n?n.includes(a):!0}):!0}var aE,ese,tse,$I,Ptt,rse,Stt,MS,Ltt,Ntt,Ott,Mtt,Utt,_tt,Ytt,Wtt,bo=Et(()=>{aE=$e(ve("querystring")),ese=$e(Jn()),tse=$e(eX());jl();ih();Gl();bo();$I="virtual:",Ptt=5,rse=/(os|cpu|libc)=([a-z0-9_-]+)/,Stt=(0,tse.makeParser)(rse);MS=/^[^#]*#/;Ltt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ntt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Ott=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Utt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;_tt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Ytt=/:$/;Wtt=/\?.*/});var sse,ose=Et(()=>{bo();sse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Vs(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=a1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var l1,Xn,Dd=Et(()=>{l1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(l1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(l1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(l1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=l1;Xn.protocol="workspace:"});var kr={};zt(kr,{SemVer:()=>Ase.SemVer,clean:()=>ztt,getComparator:()=>cse,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>kf,simplifyRanges:()=>sM,stringifyComparator:()=>use,validRange:()=>xa});function kf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=ase.get(o);if(typeof a>"u")try{a=new oh.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ase.set(o,a||null)}else if(a===null)return!1;let n;try{n=new oh.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function xa(t){if(t.indexOf(":")!==-1)return null;let e=lse.get(t);if(typeof e<"u")return e;try{e=new oh.default.Range(t)}catch{e=null}return lse.set(t,e),e}function ztt(t){let e=Ktt.exec(t);return e?e[1]:null}function cse(t){if(t.semver===oh.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 iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?oh.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?oh.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=oh.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function use(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 sM(t){let e=t.map(o=>xa(o).set.map(a=>a.map(n=>cse(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>use(o)).join(" || ")}var oh,Ase,ase,lse,Ktt,Qf=Et(()=>{oh=$e(Jn()),Ase=$e(Jn()),ase=new Map;lse=new Map;Ktt=/^(?:[\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 fse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function pse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?wN(t):typeof t>"u"||typeof t=="boolean"?t:null}function hse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?hse(t,e[0]):`(${e.map(r=>hse(t,r)).join(" | ")})`}var gse,AE,Ot,fE=Et(()=>{Pt();Nl();gse=$e(Jn());Dd();Gl();Qf();bo();AE=class{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 async tryFind(e,{baseFs:r=new Tn}={}){let o=z.join(e,"package.json");try{return await AE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await AE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new AE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new AE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(pse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=fse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(pse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=fse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Vs(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Vs(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Vs(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Vs(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Vs(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!xa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=sh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=sh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:MD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Vs(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!gse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...uE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...uE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...uE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...uE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Vs(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[UD(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=AE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var mse=_((_Lt,dse)=>{var Vtt=Hl(),Jtt=function(){return Vtt.Date.now()};dse.exports=Jtt});var Ese=_((HLt,yse)=>{var Xtt=/\s/;function Ztt(t){for(var e=t.length;e--&&Xtt.test(t.charAt(e)););return e}yse.exports=Ztt});var wse=_((qLt,Cse)=>{var $tt=Ese(),ert=/^\s+/;function trt(t){return t&&t.slice(0,$tt(t)+1).replace(ert,"")}Cse.exports=trt});var pE=_((GLt,Ise)=>{var rrt=gd(),nrt=Ju(),irt="[object Symbol]";function srt(t){return typeof t=="symbol"||nrt(t)&&rrt(t)==irt}Ise.exports=srt});var Pse=_((jLt,Dse)=>{var ort=wse(),Bse=sl(),art=pE(),vse=0/0,lrt=/^[-+]0x[0-9a-f]+$/i,crt=/^0b[01]+$/i,urt=/^0o[0-7]+$/i,Art=parseInt;function frt(t){if(typeof t=="number")return t;if(art(t))return vse;if(Bse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=ort(t);var r=crt.test(t);return r||urt.test(t)?Art(t.slice(2),r?2:8):lrt.test(t)?vse:+t}Dse.exports=frt});var xse=_((YLt,bse)=>{var prt=sl(),aM=mse(),Sse=Pse(),hrt="Expected a function",grt=Math.max,drt=Math.min;function mrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(hrt);e=Sse(e)||0,prt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?grt(Sse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function x(ue){var me=o,he=a;return o=a=void 0,h=ue,u=t.apply(he,me),u}function C(ue){return h=ue,A=setTimeout(U,e),E?x(ue):u}function R(ue){var me=ue-p,he=ue-h,Be=e-me;return I?drt(Be,n-he):Be}function N(ue){var me=ue-p,he=ue-h;return p===void 0||me>=e||me<0||I&&he>=n}function U(){var ue=aM();if(N(ue))return V(ue);A=setTimeout(U,R(ue))}function V(ue){return A=void 0,v&&o?x(ue):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function ae(){return A===void 0?u:V(aM())}function fe(){var ue=aM(),me=N(ue);if(o=arguments,a=this,p=ue,me){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),x(p)}return A===void 0&&(A=setTimeout(U,e)),u}return fe.cancel=te,fe.flush=ae,fe}bse.exports=mrt});var lM=_((WLt,kse)=>{var yrt=xse(),Ert=sl(),Crt="Expected a function";function wrt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(Crt);return Ert(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),yrt(t,e,{leading:o,maxWait:e,trailing:a})}kse.exports=wrt});function Brt(t){return typeof t.reportCode<"u"}var Qse,Fse,Rse,Irt,Jt,Xs,Wl=Et(()=>{Qse=$e(lM()),Fse=ve("stream"),Rse=ve("string_decoder"),Irt=15,Jt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Qse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Irt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Brt(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 Fse.PassThrough,o=new Rse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var hE,cM=Et(()=>{Wl();bo();hE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new Jt(11,`${qr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Pd,uM=Et(()=>{bo();Pd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${Gn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${qr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var gE,AM=Et(()=>{Pt();bo();gE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return lE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new _u(A,{baseFs:r.packageFs,pathUtils:z});return{...r,packageFs:p}}}});var dE,c1,Tse=Et(()=>{dE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(dE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(dE.protocol)}supportsDescriptor(e,r){return dE.isVirtualDescriptor(e)}supportsLocator(e,r){return dE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},c1=dE;c1.protocol="virtual:"});var mE,fM=Et(()=>{Pt();Dd();mE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function u1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Lse(t){return typeof t>"u"?3:u1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function Drt(t){return u1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function Prt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!Drt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Nse(t,e){let r=u1(t)&&gM(t,e)?t[e]:void 0;return Prt(r)}function yE(t,e){return[t,e,Ose]}function dM(t){return Array.isArray(t)?t[2]===Ose:!1}function pM(t,e){if(u1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return yE(e,r)}return Array.isArray(t)?yE(e,t.map(r=>pM(r,e))):yE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:x,value:C}=Nse(v,r),R=Lse(C);if(R!==3){if(n??=R,R!==n||x==="hardReset"){p=A;break}if(R===2)return yE(I,C);if(u.unshift([I,C]),x==="reset"){p=E;break}x==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return yE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>pM(v,E)))));case 0:{let E=Object.assign({},...u.map(([,R])=>R)),I=Object.keys(E),v={},x=t.map(([R,N])=>[R,Nse(N,r).value]),C=vrt(x,([R,N])=>{let U=Lse(N);return U!==0&&U!==3});if(C!==-1){let R=x.slice(C+1);for(let N of I)v[N]=hM(R,e,N,0,R.length)}else for(let R of I)v[R]=hM(x,e,R,p,x.length);return yE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Mse(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function A1(t){return dM(t)?t[1]:t}function jS(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>jS(r));if(u1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=jS(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var vrt,Ose,Use=Et(()=>{vrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Ose=Symbol()});var YS={};zt(YS,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>EE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=le.toPortablePath(process.env.LOCALAPPDATA||le.join((0,yM.homedir)(),"AppData","Local"));return z.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=le.toPortablePath(process.env.XDG_DATA_HOME);return z.resolve(t,"yarn/berry")}return z.resolve(EE(),".yarn/berry")}function EE(){return le.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=z.relative(e,t);return r&&!r.startsWith("..")&&!z.isAbsolute(r)}var yM,WS=Et(()=>{Pt();yM=ve("os")});var Gse=_(CE=>{"use strict";var sNt=ve("net"),brt=ve("tls"),wM=ve("http"),_se=ve("https"),xrt=ve("events"),oNt=ve("assert"),krt=ve("util");CE.httpOverHttp=Qrt;CE.httpsOverHttp=Frt;CE.httpOverHttps=Rrt;CE.httpsOverHttps=Trt;function Qrt(t){var e=new Ff(t);return e.request=wM.request,e}function Frt(t){var e=new Ff(t);return e.request=wM.request,e.createSocket=Hse,e.defaultPort=443,e}function Rrt(t){var e=new Ff(t);return e.request=_se.request,e}function Trt(t){var e=new Ff(t);return e.request=_se.request,e.createSocket=Hse,e.defaultPort=443,e}function Ff(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=qse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Ff.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),ah("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,x){process.nextTick(function(){h(I,v,x)})}function h(I,v,x){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){ah("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(x.length>0){ah("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return ah("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),ah(`tunneling socket could not be established, cause=%s -`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Ff.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function Hse(t,e){var r=this;Ff.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=brt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function qse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{jse.exports=Gse()});var Tf=_((Rf,KS)=>{"use strict";Object.defineProperty(Rf,"__esModule",{value:!0});var Wse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Lrt(t){return Wse.includes(t)}var Nrt=["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",...Wse];function Ort(t){return Nrt.includes(t)}var Mrt=["null","undefined","string","number","bigint","boolean","symbol"];function Urt(t){return Mrt.includes(t)}function wE(t){return e=>typeof e===t}var{toString:Kse}=Object.prototype,f1=t=>{let e=Kse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&Se.domElement(t))return"HTMLElement";if(Ort(e))return e},Zn=t=>e=>f1(e)===t;function Se(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(Se.observable(t))return"Observable";if(Se.array(t))return"Array";if(Se.buffer(t))return"Buffer";let e=f1(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"}Se.undefined=wE("undefined");Se.string=wE("string");var _rt=wE("number");Se.number=t=>_rt(t)&&!Se.nan(t);Se.bigint=wE("bigint");Se.function_=wE("function");Se.null_=t=>t===null;Se.class_=t=>Se.function_(t)&&t.toString().startsWith("class ");Se.boolean=t=>t===!0||t===!1;Se.symbol=wE("symbol");Se.numericString=t=>Se.string(t)&&!Se.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));Se.array=(t,e)=>Array.isArray(t)?Se.function_(e)?t.every(e):!0:!1;Se.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};Se.blob=t=>Zn("Blob")(t);Se.nullOrUndefined=t=>Se.null_(t)||Se.undefined(t);Se.object=t=>!Se.null_(t)&&(typeof t=="object"||Se.function_(t));Se.iterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};Se.asyncIterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};Se.generator=t=>{var e,r;return Se.iterable(t)&&Se.function_((e=t)===null||e===void 0?void 0:e.next)&&Se.function_((r=t)===null||r===void 0?void 0:r.throw)};Se.asyncGenerator=t=>Se.asyncIterable(t)&&Se.function_(t.next)&&Se.function_(t.throw);Se.nativePromise=t=>Zn("Promise")(t);var Hrt=t=>{var e,r;return Se.function_((e=t)===null||e===void 0?void 0:e.then)&&Se.function_((r=t)===null||r===void 0?void 0:r.catch)};Se.promise=t=>Se.nativePromise(t)||Hrt(t);Se.generatorFunction=Zn("GeneratorFunction");Se.asyncGeneratorFunction=t=>f1(t)==="AsyncGeneratorFunction";Se.asyncFunction=t=>f1(t)==="AsyncFunction";Se.boundFunction=t=>Se.function_(t)&&!t.hasOwnProperty("prototype");Se.regExp=Zn("RegExp");Se.date=Zn("Date");Se.error=Zn("Error");Se.map=t=>Zn("Map")(t);Se.set=t=>Zn("Set")(t);Se.weakMap=t=>Zn("WeakMap")(t);Se.weakSet=t=>Zn("WeakSet")(t);Se.int8Array=Zn("Int8Array");Se.uint8Array=Zn("Uint8Array");Se.uint8ClampedArray=Zn("Uint8ClampedArray");Se.int16Array=Zn("Int16Array");Se.uint16Array=Zn("Uint16Array");Se.int32Array=Zn("Int32Array");Se.uint32Array=Zn("Uint32Array");Se.float32Array=Zn("Float32Array");Se.float64Array=Zn("Float64Array");Se.bigInt64Array=Zn("BigInt64Array");Se.bigUint64Array=Zn("BigUint64Array");Se.arrayBuffer=Zn("ArrayBuffer");Se.sharedArrayBuffer=Zn("SharedArrayBuffer");Se.dataView=Zn("DataView");Se.enumCase=(t,e)=>Object.values(e).includes(t);Se.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;Se.urlInstance=t=>Zn("URL")(t);Se.urlString=t=>{if(!Se.string(t))return!1;try{return new URL(t),!0}catch{return!1}};Se.truthy=t=>Boolean(t);Se.falsy=t=>!t;Se.nan=t=>Number.isNaN(t);Se.primitive=t=>Se.null_(t)||Urt(typeof t);Se.integer=t=>Number.isInteger(t);Se.safeInteger=t=>Number.isSafeInteger(t);Se.plainObject=t=>{if(Kse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};Se.typedArray=t=>Lrt(f1(t));var qrt=t=>Se.safeInteger(t)&&t>=0;Se.arrayLike=t=>!Se.nullOrUndefined(t)&&!Se.function_(t)&&qrt(t.length);Se.inRange=(t,e)=>{if(Se.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(Se.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Grt=1,jrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];Se.domElement=t=>Se.object(t)&&t.nodeType===Grt&&Se.string(t.nodeName)&&!Se.plainObject(t)&&jrt.every(e=>e in t);Se.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};Se.nodeStream=t=>Se.object(t)&&Se.function_(t.pipe)&&!Se.observable(t);Se.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>Se.integer(e)&&Math.abs(e%2)===t;Se.evenInteger=zse(0);Se.oddInteger=zse(1);Se.emptyArray=t=>Se.array(t)&&t.length===0;Se.nonEmptyArray=t=>Se.array(t)&&t.length>0;Se.emptyString=t=>Se.string(t)&&t.length===0;var Yrt=t=>Se.string(t)&&!/\S/.test(t);Se.emptyStringOrWhitespace=t=>Se.emptyString(t)||Yrt(t);Se.nonEmptyString=t=>Se.string(t)&&t.length>0;Se.nonEmptyStringAndNotWhitespace=t=>Se.string(t)&&!Se.emptyStringOrWhitespace(t);Se.emptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length===0;Se.nonEmptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length>0;Se.emptySet=t=>Se.set(t)&&t.size===0;Se.nonEmptySet=t=>Se.set(t)&&t.size>0;Se.emptyMap=t=>Se.map(t)&&t.size===0;Se.nonEmptyMap=t=>Se.map(t)&&t.size>0;Se.propertyKey=t=>Se.any([Se.string,Se.number,Se.symbol],t);Se.formData=t=>Zn("FormData")(t);Se.urlSearchParams=t=>Zn("URLSearchParams")(t);var Vse=(t,e,r)=>{if(!Se.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)};Se.any=(t,...e)=>(Se.array(t)?t:[t]).some(o=>Vse(Array.prototype.some,o,e));Se.all=(t,...e)=>Vse(Array.prototype.every,t,e);var Mt=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${Se(u)}\``))].join(", ")}`:`received value of type \`${Se(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Rf.assert={undefined:t=>Mt(Se.undefined(t),"undefined",t),string:t=>Mt(Se.string(t),"string",t),number:t=>Mt(Se.number(t),"number",t),bigint:t=>Mt(Se.bigint(t),"bigint",t),function_:t=>Mt(Se.function_(t),"Function",t),null_:t=>Mt(Se.null_(t),"null",t),class_:t=>Mt(Se.class_(t),"Class",t),boolean:t=>Mt(Se.boolean(t),"boolean",t),symbol:t=>Mt(Se.symbol(t),"symbol",t),numericString:t=>Mt(Se.numericString(t),"string with a number",t),array:(t,e)=>{Mt(Se.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Mt(Se.buffer(t),"Buffer",t),blob:t=>Mt(Se.blob(t),"Blob",t),nullOrUndefined:t=>Mt(Se.nullOrUndefined(t),"null or undefined",t),object:t=>Mt(Se.object(t),"Object",t),iterable:t=>Mt(Se.iterable(t),"Iterable",t),asyncIterable:t=>Mt(Se.asyncIterable(t),"AsyncIterable",t),generator:t=>Mt(Se.generator(t),"Generator",t),asyncGenerator:t=>Mt(Se.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Mt(Se.nativePromise(t),"native Promise",t),promise:t=>Mt(Se.promise(t),"Promise",t),generatorFunction:t=>Mt(Se.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Mt(Se.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Mt(Se.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Mt(Se.boundFunction(t),"Function",t),regExp:t=>Mt(Se.regExp(t),"RegExp",t),date:t=>Mt(Se.date(t),"Date",t),error:t=>Mt(Se.error(t),"Error",t),map:t=>Mt(Se.map(t),"Map",t),set:t=>Mt(Se.set(t),"Set",t),weakMap:t=>Mt(Se.weakMap(t),"WeakMap",t),weakSet:t=>Mt(Se.weakSet(t),"WeakSet",t),int8Array:t=>Mt(Se.int8Array(t),"Int8Array",t),uint8Array:t=>Mt(Se.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Mt(Se.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Mt(Se.int16Array(t),"Int16Array",t),uint16Array:t=>Mt(Se.uint16Array(t),"Uint16Array",t),int32Array:t=>Mt(Se.int32Array(t),"Int32Array",t),uint32Array:t=>Mt(Se.uint32Array(t),"Uint32Array",t),float32Array:t=>Mt(Se.float32Array(t),"Float32Array",t),float64Array:t=>Mt(Se.float64Array(t),"Float64Array",t),bigInt64Array:t=>Mt(Se.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Mt(Se.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Mt(Se.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Mt(Se.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Mt(Se.dataView(t),"DataView",t),enumCase:(t,e)=>Mt(Se.enumCase(t,e),"EnumCase",t),urlInstance:t=>Mt(Se.urlInstance(t),"URL",t),urlString:t=>Mt(Se.urlString(t),"string with a URL",t),truthy:t=>Mt(Se.truthy(t),"truthy",t),falsy:t=>Mt(Se.falsy(t),"falsy",t),nan:t=>Mt(Se.nan(t),"NaN",t),primitive:t=>Mt(Se.primitive(t),"primitive",t),integer:t=>Mt(Se.integer(t),"integer",t),safeInteger:t=>Mt(Se.safeInteger(t),"integer",t),plainObject:t=>Mt(Se.plainObject(t),"plain object",t),typedArray:t=>Mt(Se.typedArray(t),"TypedArray",t),arrayLike:t=>Mt(Se.arrayLike(t),"array-like",t),domElement:t=>Mt(Se.domElement(t),"HTMLElement",t),observable:t=>Mt(Se.observable(t),"Observable",t),nodeStream:t=>Mt(Se.nodeStream(t),"Node.js Stream",t),infinite:t=>Mt(Se.infinite(t),"infinite number",t),emptyArray:t=>Mt(Se.emptyArray(t),"empty array",t),nonEmptyArray:t=>Mt(Se.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Mt(Se.emptyString(t),"empty string",t),emptyStringOrWhitespace:t=>Mt(Se.emptyStringOrWhitespace(t),"empty string or whitespace",t),nonEmptyString:t=>Mt(Se.nonEmptyString(t),"non-empty string",t),nonEmptyStringAndNotWhitespace:t=>Mt(Se.nonEmptyStringAndNotWhitespace(t),"non-empty string and not whitespace",t),emptyObject:t=>Mt(Se.emptyObject(t),"empty object",t),nonEmptyObject:t=>Mt(Se.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Mt(Se.emptySet(t),"empty set",t),nonEmptySet:t=>Mt(Se.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Mt(Se.emptyMap(t),"empty map",t),nonEmptyMap:t=>Mt(Se.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Mt(Se.propertyKey(t),"PropertyKey",t),formData:t=>Mt(Se.formData(t),"FormData",t),urlSearchParams:t=>Mt(Se.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Mt(Se.evenInteger(t),"even integer",t),oddInteger:t=>Mt(Se.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Mt(Se.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Mt(Se.inRange(t,e),"in range",t),any:(t,...e)=>Mt(Se.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Mt(Se.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(Se,{class:{value:Se.class_},function:{value:Se.function_},null:{value:Se.null_}});Object.defineProperties(Rf.assert,{class:{value:Rf.assert.class_},function:{value:Rf.assert.function_},null:{value:Rf.assert.null_}});Rf.default=Se;KS.exports=Se;KS.exports.default=Se;KS.exports.assert=Rf.assert});var Jse=_((cNt,BM)=>{"use strict";var zS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},IE=class{static fn(e){return(...r)=>new IE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new zS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(IE.prototype,Promise.prototype);BM.exports=IE;BM.exports.CancelError=zS});var Xse=_((DM,PM)=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});function Wrt(t){return t.encrypted}var vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),Wrt(t)&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};DM.default=vM;PM.exports=vM;PM.exports.default=vM});var Zse=_((bM,xM)=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var Krt=Xse(),zrt=Number(process.versions.node.split(".")[0]),SM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Krt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};bM.default=SM;xM.exports=SM;xM.exports.default=SM});var soe=_((uNt,FM)=>{"use strict";var{V4MAPPED:Vrt,ADDRCONFIG:Jrt,ALL:ioe,promises:{Resolver:$se},lookup:Xrt}=ve("dns"),{promisify:kM}=ve("util"),Zrt=ve("os"),BE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),eoe=Symbol("expires"),$rt=typeof ioe=="number",toe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},ent=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},roe=()=>{let t=!1,e=!1;for(let r of Object.values(Zrt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},tnt=t=>Symbol.iterator in t,noe={ttl:!0},rnt={all:!0},VS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new $se,lookup:u=Xrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof $se?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=roe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Vrt&&($rt&&r.hints&ioe||a.length===0)?ent(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Jrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,noe),this._resolve6(e,noe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[eoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}tnt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,rnt);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[eoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[BE](r,o))}uninstall(e){if(toe(e),e[BE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[BE],delete e[BE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=roe(),(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()}};FM.exports=VS;FM.exports.default=VS});var loe=_((ANt,RM)=>{"use strict";var nnt=typeof URL>"u"?ve("url").URL:URL,int="text/plain",snt="us-ascii",ooe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),ont=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(x=>x.trim());return I==="charset"&&(v=v.toLowerCase(),v===snt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==int)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},aoe=(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 ont(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new nnt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];ooe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])ooe(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};RM.exports=aoe;RM.exports.default=aoe});var Aoe=_((fNt,uoe)=>{uoe.exports=coe;function coe(t,e){if(t&&e)return coe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var foe=Aoe();TM.exports=foe(JS);TM.exports.strict=foe(poe);JS.proto=JS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return JS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return poe(this)},configurable:!0})});function JS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function poe(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 NM=_((hNt,goe)=>{var ant=LM(),lnt=function(){},cnt=function(t){return t.setHeader&&typeof t.abort=="function"},unt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},hoe=function(t,e,r){if(typeof e=="function")return hoe(t,null,e);e||(e={}),r=ant(r||lnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},x=function(){t.req.on("finish",p)};return cnt(t)?(t.on("complete",p),t.on("abort",v),t.req?x():t.on("request",x)):u&&!o&&(t.on("end",A),t.on("close",A)),unt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",x),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};goe.exports=hoe});var yoe=_((gNt,moe)=>{var Ant=LM(),fnt=NM(),OM=ve("fs"),p1=function(){},pnt=/^v?\.0/.test(process.version),XS=function(t){return typeof t=="function"},hnt=function(t){return!pnt||!OM?!1:(t instanceof(OM.ReadStream||p1)||t instanceof(OM.WriteStream||p1))&&XS(t.close)},gnt=function(t){return t.setHeader&&XS(t.abort)},dnt=function(t,e,r,o){o=Ant(o);var a=!1;t.on("close",function(){a=!0}),fnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,hnt(t))return t.close(p1);if(gnt(t))return t.abort();if(XS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},doe=function(t){t()},mnt=function(t,e){return t.pipe(e)},ynt=function(){var t=Array.prototype.slice.call(arguments),e=XS(t[t.length-1]||p1)&&t.pop()||p1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return dnt(a,u,A,function(p){r||(r=p),p&&o.forEach(doe),!u&&(o.forEach(doe),e(r))})});return t.reduce(mnt)};moe.exports=ynt});var Coe=_((dNt,Eoe)=>{"use strict";var{PassThrough:Ent}=ve("stream");Eoe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Ent({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var woe=_((mNt,vE)=>{"use strict";var Cnt=yoe(),wnt=Coe(),ZS=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function $S(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=Cnt(t,wnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new ZS)})}),o.getBufferedValue()}vE.exports=$S;vE.exports.default=$S;vE.exports.buffer=(t,e)=>$S(t,{...e,encoding:"buffer"});vE.exports.array=(t,e)=>$S(t,{...e,array:!0});vE.exports.MaxBufferError=ZS});var Boe=_((ENt,Ioe)=>{"use strict";var Int=new Set([200,203,204,206,300,301,308,404,405,410,414,501]),Bnt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),vnt=new Set([500,502,503,504]),Dnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Pnt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Sd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Snt(t){return t?vnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let o of r){let[a,n]=o.split(/=/,2);e[a.trim()]=n===void 0?!0:n.trim().replace(/^"|"$/g,"")}return e}function bnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Ioe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(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=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":bnt(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())&&Bnt.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||Int.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=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)Dnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Sd(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 Sd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Sd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Sd(this._rescc["stale-if-error"]),o=e+Sd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Sd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Sd(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()&&Snt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!Pnt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var eb=_((CNt,voe)=>{"use strict";voe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Poe=_((wNt,Doe)=>{"use strict";var xnt=ve("stream").Readable,knt=eb(),UM=class extends xnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=knt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Doe.exports=UM});var boe=_((INt,Soe)=>{"use strict";var Qnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Soe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Qnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var koe=_((BNt,xoe)=>{"use strict";var Fnt=ve("stream").PassThrough,Rnt=boe(),Tnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Fnt;return Rnt(t,e),t.pipe(e)};xoe.exports=Tnt});var Qoe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.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 Loe=_((DNt,Toe)=>{"use strict";var Lnt=ve("events"),Foe=Qoe(),Nnt=t=>{let e={redis:"@keyv/redis",rediss:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql",etcd:"@keyv/etcd",offline:"@keyv/offline",tiered:"@keyv/tiered"};if(t.adapter||t.uri){let r=t.adapter||/^[^:+]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},Roe=["sqlite","postgres","mysql","mongo","redis","tiered"],HM=class extends Lnt{constructor(e,{emitErrors:r=!0,...o}={}){if(super(),this.opts={namespace:"keyv",serialize:Foe.stringify,deserialize:Foe.parse,...typeof e=="string"?{uri:e}:e,...o},!this.opts.store){let n={...this.opts};this.opts.store=Nnt(n)}if(this.opts.compression){let n=this.opts.compression;this.opts.serialize=n.serialize.bind(n),this.opts.deserialize=n.deserialize.bind(n)}typeof this.opts.store.on=="function"&&r&&this.opts.store.on("error",n=>this.emit("error",n)),this.opts.store.namespace=this.opts.namespace;let a=n=>async function*(){for await(let[u,A]of typeof n=="function"?n(this.opts.store.namespace):n){let p=await this.opts.deserialize(A);if(!(this.opts.store.namespace&&!u.includes(this.opts.store.namespace))){if(typeof p.expires=="number"&&Date.now()>p.expires){this.delete(u);continue}yield[this._getKeyUnprefix(u),p.value]}}};typeof this.opts.store[Symbol.iterator]=="function"&&this.opts.store instanceof Map?this.iterator=a(this.opts.store):typeof this.opts.store.iterator=="function"&&this.opts.store.opts&&this._checkIterableAdaptar()&&(this.iterator=a(this.opts.store.iterator.bind(this.opts.store)))}_checkIterableAdaptar(){return Roe.includes(this.opts.store.opts.dialect)||Roe.findIndex(e=>this.opts.store.opts.url.includes(e))>=0}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}_getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}_getKeyUnprefix(e){return e.split(":").splice(1).join(":")}get(e,r){let{store:o}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefixArray(e):this._getKeyPrefix(e);if(a&&o.getMany===void 0){let u=[];for(let A of n)u.push(Promise.resolve().then(()=>o.get(A)).then(p=>typeof p=="string"?this.opts.deserialize(p):this.opts.compression?this.opts.deserialize(p):p).then(p=>{if(p!=null)return typeof p.expires=="number"&&Date.now()>p.expires?this.delete(A).then(()=>{}):r&&r.raw?p:p.value}));return Promise.allSettled(u).then(A=>{let p=[];for(let h of A)p.push(h.value);return p})}return Promise.resolve().then(()=>a?o.getMany(n):o.get(n)).then(u=>typeof u=="string"?this.opts.deserialize(u):this.opts.compression?this.opts.deserialize(u):u).then(u=>{if(u!=null)return a?u.map((A,p)=>{if(typeof A=="string"&&(A=this.opts.deserialize(A)),A!=null){if(typeof A.expires=="number"&&Date.now()>A.expires){this.delete(e[p]).then(()=>{});return}return r&&r.raw?A:A.value}}):typeof u.expires=="number"&&Date.now()>u.expires?this.delete(e).then(()=>{}):r&&r.raw?u:u.value})}set(e,r,o){let a=this._getKeyPrefix(e);typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let u=typeof o=="number"?Date.now()+o:null;return typeof r=="symbol"&&this.emit("error","symbol cannot be serialized"),r={value:r,expires:u},this.opts.serialize(r)}).then(u=>n.set(a,u,o)).then(()=>!0)}delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKeyPrefixArray(e);if(r.deleteMany===void 0){let n=[];for(let u of a)n.push(r.delete(u));return Promise.allSettled(n).then(u=>u.every(A=>A.value===!0))}return Promise.resolve().then(()=>r.deleteMany(a))}let o=this._getKeyPrefix(e);return Promise.resolve().then(()=>r.delete(o))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}has(e){let r=this._getKeyPrefix(e),{store:o}=this.opts;return Promise.resolve().then(async()=>typeof o.has=="function"?o.has(r):await o.get(r)!==void 0)}disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")return e.disconnect()}};Toe.exports=HM});var Moe=_((SNt,Ooe)=>{"use strict";var Ont=ve("events"),tb=ve("url"),Mnt=loe(),Unt=woe(),qM=Boe(),Noe=Poe(),_nt=eb(),Hnt=koe(),qnt=Loe(),Gc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new qnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=GM(tb.parse(r)),r={};else if(r instanceof tb.URL)a=GM(tb.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),x=v.length>0?`?${v.join("?")}`:"";a=GM({...r,pathname:I,search:x})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Gnt(a)},r.headers=_nt(r.headers);let n=new Ont,u=Mnt(tb.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,x,C=new Promise(N=>{x=()=>{v||(v=!0,N())}}),R=N=>{if(p&&!I.forceRefresh){N.status=N.statusCode;let V=qM.fromObject(p.cachePolicy).revalidatedPolicy(I,N);if(!V.modified){let te=V.policy.responseHeaders();N=new Noe(p.statusCode,te,p.body,p.url),N.cachePolicy=V.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new qM(I,N,I),N.fromCache=!1);let U;I.cache&&N.cachePolicy.storable()?(U=Hnt(N),(async()=>{try{let V=Unt.buffer(N);if(await Promise.race([C,new Promise(ue=>N.once("end",ue))]),v)return;let te=await V,ae={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:te},fe=I.strictTtl?N.cachePolicy.timeToLive():void 0;I.maxTtl&&(fe=fe?Math.min(fe,I.maxTtl):I.maxTtl),await this.cache.set(A,ae,fe)}catch(V){n.emit("error",new Gc.CacheError(V))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(V){n.emit("error",new Gc.CacheError(V))}})(),n.emit("response",U||N),typeof o=="function"&&o(U||N)};try{let N=e(I,R);N.once("error",x),N.once("abort",x),n.emit("request",N)}catch(N){n.emit("error",new Gc.RequestError(N))}};return(async()=>{let I=async x=>{await Promise.resolve();let C=x.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(x);let R=qM.fromObject(C.cachePolicy);if(R.satisfiesWithoutRevalidation(x)&&!x.forceRefresh){let N=R.responseHeaders(),U=new Noe(C.statusCode,N,C.body,C.url);U.cachePolicy=R,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,x.headers=R.revalidationHeaders(x),E(x)},v=x=>n.emit("error",new Gc.CacheError(x));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(x){r.automaticFailover&&!h&&E(r),n.emit("error",new Gc.CacheError(x))}})(),n}}};function Gnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function GM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}Gc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};Gc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=Gc});var _oe=_((kNt,Uoe)=>{"use strict";var jnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Uoe.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(jnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QNt,Hoe)=>{"use strict";var{Transform:Ynt,PassThrough:Wnt}=ve("stream"),jM=ve("zlib"),Knt=_oe();Hoe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof jM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Ynt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Wnt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?jM.createBrotliDecompress():jM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Knt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((FNt,Goe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=YM});var zM=_((RNt,Koe)=>{"use strict";var znt=ve("events"),Vnt=ve("tls"),Jnt=ve("http2"),Xnt=WM(),ea=Symbol("currentStreamsCount"),joe=Symbol("request"),Kl=Symbol("cachedOriginSet"),DE=Symbol("gracefullyClosing"),Znt=["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"],$nt=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},eit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Kl].lengthe[Kl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Woe(r)},tit=(t,e)=>{for(let r of t)e[Kl].lengthr[Kl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Woe(e)},Yoe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[rA.kCurrentStreamsCount]{t[DE]=!0,t[ea]===0&&t.close()},rA=class extends znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new Xnt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of Znt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=rA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,x;for(let C of E){let R=C.remoteSettings.maxConcurrentStreams;if(R=R||C[DE]||C.destroyed)continue;x||(I=R),N>v&&(x=C,v=N)}}if(x){if(o.length!==1){for(let{reject:C}of o){let R=new Error(`Expected the length of listeners to be 1, got ${o.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);C(R)}return}o[0].resolve(x);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=Jnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[DE]=!1;let x=()=>v[ea]{this.tlsSessionCache.set(E,N)}),v.once("error",N=>{for(let{reject:U}of o)U(N);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[u];N.splice(N.indexOf(v),1),N.length===0&&delete this.sessions[u]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(N);p()}this._tryToCreateNewSession(u,A)});let R=()=>{if(!(!(u in this.queue)||!x())){for(let N of v[Kl])if(N in this.queue[u]){let{listeners:U}=this.queue[u][N];for(;U.length!==0&&x();)U.shift().resolve(v);let V=this.queue[u];if(V[N].listeners.length===0&&(delete V[N],Object.keys(V).length===0)){delete this.queue[u];break}if(!x())break}}};v.on("origin",()=>{v[Kl]=v.originSet,x()&&(R(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of o)U.reject(N);v.destroy();return}v[Kl]=v.originSet;{let N=this.sessions;if(u in N){let U=N[u];U.splice($nt(U,v,eit),0,v)}else N[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),R(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{R(),KM(this.sessions[u],v)})}),v[joe]=v.request,v.request=(N,U)=>{if(v[DE])throw new Error("The session is gracefully closing. No new streams are allowed.");let V=v[joe](N,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,V.once("close",()=>{if(C=x(),--v[ea],!v.destroyed&&!v.closed&&(tit(this.sessions[u],v),x()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[DE])?v.close():(KM(this.sessions[u],v),R())}}),V}}catch(v){for(let x of o)x.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return rA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Vnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Yoe({agent:this,isFree:!0})}get busySessions(){return Yoe({agent:this,isFree:!1})}};rA.kCurrentStreamsCount=ea;rA.kGracefullyClosing=DE;Koe.exports={Agent:rA,globalAgent:new rA}});var JM=_((TNt,zoe)=>{"use strict";var{Readable:rit}=ve("stream"),VM=class extends rit{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()}};zoe.exports=VM});var XM=_((LNt,Voe)=>{"use strict";Voe.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 Xoe=_((NNt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var $oe=_((ONt,Zoe)=>{"use strict";Zoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var tae=_((UNt,eae)=>{"use strict";var PE=(t,e,r)=>{eae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};PE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});PE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);PE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);PE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);PE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);PE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((_Nt,lae)=>{"use strict";var nit=ve("http2"),{Writable:iit}=ve("stream"),{Agent:rae,globalAgent:sit}=zM(),oit=JM(),ait=XM(),lit=Xoe(),cit=$oe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:uit,ERR_HTTP_HEADERS_SENT:nae,ERR_INVALID_HTTP_TOKEN:Ait,ERR_HTTP_INVALID_HEADER_VALUE:fit,ERR_INVALID_CHAR:pit}=tae(),{HTTP2_HEADER_STATUS:iae,HTTP2_HEADER_METHOD:sae,HTTP2_HEADER_PATH:oae,HTTP2_METHOD_CONNECT:hit}=nit.constants,Qo=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),aae=Symbol("options"),rb=Symbol("flushedHeaders"),h1=Symbol("jobs"),git=/^[\^`\-\w!#$%&*+.|~]+$/,dit=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends iit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new rae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new rae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=sit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new uit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[h1]=[],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[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[aae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[rb]=!1}get method(){return this[Qo][sae]}set method(e){e&&(this[Qo][sae]=e.toUpperCase())}get path(){return this[Qo][oae]}set path(e){e&&(this[Qo][oae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[h1].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[h1].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[rb]||this.destroyed)return;this[rb]=!0;let e=this.method===hit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||lit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new oit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[iae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[iae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[h1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[aae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[rb]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new nae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new nae("set");if(typeof e!="string"||!git.test(e)&&!cit(e))throw new Ait("Header name",e);if(typeof r>"u")throw new fit(r,e);if(dit.test(r))throw new pit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[h1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};lae.exports=t4});var uae=_((HNt,cae)=>{"use strict";var mit=ve("tls");cae.exports=(t={},e=mit.connect)=>new Promise((r,o)=>{let a=!1,n,u=async()=>{await p,n.off("timeout",A),n.off("error",o),t.resolveSocket?(r({alpnProtocol:n.alpnProtocol,socket:n,timeout:a}),a&&(await Promise.resolve(),n.emit("timeout"))):(n.destroy(),r({alpnProtocol:n.alpnProtocol,timeout:a}))},A=async()=>{a=!0,u()},p=(async()=>{try{n=await e(t,u),n.on("error",o),n.once("timeout",A)}catch(h){o(h)}})()})});var fae=_((qNt,Aae)=>{"use strict";var yit=ve("net");Aae.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]),yit.isIP(e)?"":e}});var gae=_((GNt,i4)=>{"use strict";var pae=ve("http"),n4=ve("https"),Eit=uae(),Cit=WM(),wit=r4(),Iit=fae(),Bit=XM(),nb=new Cit({maxSize:100}),g1=new Map,hae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},vit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!nb.has(e)){if(g1.has(e))return(await g1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Eit(t);g1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(nb.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?hae(o,n,t):n.destroy():A.createConnection===p?hae(A,n,t):n.destroy()}return g1.delete(e),u}catch(n){throw g1.delete(e),n}}return nb.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Bit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Iit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:pae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await vit(e)==="h2"?(a&&(e.agent=a.http2),new wit(e,r)):pae.request(e,r)};i4.exports.protocolCache=nb});var mae=_((jNt,dae)=>{"use strict";var Dit=ve("http2"),Pit=zM(),s4=r4(),Sit=JM(),bit=gae(),xit=(t,e,r)=>new s4(t,e,r),kit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};dae.exports={...Dit,ClientRequest:s4,IncomingMessage:Sit,...Pit,request:xit,get:kit,auto:bit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var yae=Tf();o4.default=t=>yae.default.nodeStream(t)&&yae.default.function_(t.getBoundary)});var Iae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Cae=ve("fs"),wae=ve("util"),Eae=Tf(),Qit=a4(),Fit=wae.promisify(Cae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Eae.default.string(t))return Buffer.byteLength(t);if(Eae.default.buffer(t))return t.length;if(Qit.default(t))return wae.promisify(t.getLength.bind(t))();if(t instanceof Cae.ReadStream){let{size:r}=await Fit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Rit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Rit});var Bae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Dae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.TimeoutError=void 0;var Tit=ve("net"),Lit=Bae(),vae=Symbol("reentry"),Nit=()=>{},ib=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};d1.TimeoutError=ib;d1.default=(t,e,r)=>{if(vae in t)return Nit;t[vae]=!0;let o=[],{once:a,unhandleAll:n}=Lit.default(),u=(I,v,x)=>{var C;let R=setTimeout(v,I,I,x);(C=R.unref)===null||C===void 0||C.call(R);let N=()=>{clearTimeout(R)};return o.push(N),N},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new ib(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:x}=t;if(I.connecting){let C=Boolean(x??Tit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let R=u(e.lookup,h,"lookup");a(I,"lookup",R)}if(typeof e.connect<"u"){let R=()=>u(e.connect,h,"connect");C?a(I,"connect",R()):a(I,"lookup",N=>{N===null&&a(I,"connect",R())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let R=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",R)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Pae=Tf();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Pae.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 Pae.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 bae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Oit=ve("url"),Mit=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Oit.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 Mit)e[n]&&(a[n]=e[n].toString());return a}});var xae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=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)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var Uit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=Uit});var Qae=_(bd=>{"use strict";Object.defineProperty(bd,"__esModule",{value:!0});bd.dnsLookupIpVersionToFamily=bd.isDnsLookupIpVersion=void 0;var kae={auto:0,ipv4:4,ipv6:6};bd.isDnsLookupIpVersion=t=>t in kae;bd.dnsLookupIpVersionToFamily=t=>{if(bd.isDnsLookupIpVersion(t))return kae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(sb=>{"use strict";Object.defineProperty(sb,"__esModule",{value:!0});sb.isResponseOk=void 0;sb.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Fae=new Set;E4.default=t=>{Fae.has(t)||(Fae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Tae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Tf(),_it=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=_it});var Lae=_(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.retryAfterStatusCodes=void 0;m1.retryAfterStatusCodes=new Set([413,429,503]);var Hit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};m1.default=Hit});var C1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=ve("util"),Oae=ve("stream"),qit=ve("fs"),lh=ve("url"),Mae=ve("http"),w4=ve("http"),Git=ve("https"),jit=Zse(),Yit=soe(),Uae=Moe(),Wit=qoe(),Kit=mae(),zit=eb(),st=Tf(),Vit=Iae(),_ae=a4(),Jit=u4(),Hae=Dae(),Xit=Sae(),qae=bae(),Zit=xae(),$it=m4(),Gae=Qae(),est=y4(),ch=Rae(),tst=Tae(),rst=Lae(),I4,Zs=Symbol("request"),lb=Symbol("response"),SE=Symbol("responseSize"),bE=Symbol("downloadedSize"),xE=Symbol("bodySize"),kE=Symbol("uploadedSize"),ob=Symbol("serverResponsesPiped"),jae=Symbol("unproxyEvents"),Yae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Wae=Symbol("startedReading"),QE=Symbol("stopReading"),ab=Symbol("triggerRead"),uh=Symbol("body"),y1=Symbol("jobs"),Kae=Symbol("originalResponse"),zae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var nst=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function ist(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function sst(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new Zit.default,ost=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),ast=new Set([300,301,302,303,304,307,308]),lst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of lst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var zi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof db?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[lb]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`,a)}while(o!==-1);return n+=t.substr(a),n};yX.exports={stringReplaceAll:x5e,stringEncaseCRLFWithFirstIndex:k5e}});var vX=_((OQt,BX)=>{"use strict";var Q5e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,R5e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,F5e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,T5e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function IX(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)):T5e.get(t)||t}function L5e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(R5e))r.push(a[2].replace(F5e,(A,p,h)=>p?IX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function N5e(t){CX.lastIndex=0;let e=[],r;for(;(r=CX.exec(t))!==null;){let o=r[1];if(r[2]){let a=L5e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function wX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}BX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(Q5e,(n,u,A,p,h,E)=>{if(u)a.push(IX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:wX(t,r)(I)),r.push({inverse:A,styles:N5e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(wX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var BL=_((MQt,bX)=>{"use strict";var vI=BI(),{stdout:EL,stderr:CL}=mL(),{stringReplaceAll:O5e,stringEncaseCRLFWithFirstIndex:M5e}=EX(),PX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),U5e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=EL?EL.level:0;t.level=e.level===void 0?r:e.level},wL=class{constructor(e){return DX(e)}},DX=t=>{let e={};return U5e(e,t),e.template=(...r)=>q5e(e.template,...r),Object.setPrototypeOf(e,xD.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=wL,e.template};function xD(t){return DX(t)}for(let[t,e]of Object.entries(vI))Qy[t]={get(){let r=kD(this,IL(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kD(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=IL(vI.color[PX[e]][t](...r),vI.color.close,this._styler);return kD(this,o,this._isEmpty)}}};for(let t of SX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=IL(vI.bgColor[PX[r]][t](...o),vI.bgColor.close,this._styler);return kD(this,a,this._isEmpty)}}}}var _5e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),IL=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kD=(t,e,r)=>{let o=(...a)=>H5e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=_5e,o._generator=t,o._styler=e,o._isEmpty=r,o},H5e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=O5e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=M5e(e,a,o,n)),o+e+a},yL,q5e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";_l.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;_l.find=(t,e)=>t.nodes.find(r=>r.type===e);_l.exceedsLimit=(t,e,r=1,o)=>o===!1||!_l.isInteger(t)||!_l.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;_l.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};_l.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;_l.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;_l.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;_l.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);_l.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var xX=QD();kX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&xX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&xX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((HQt,QX)=>{"use strict";QX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var HX=_((qQt,_X)=>{"use strict";var FX=RX(),fd=(t,e,r)=>{if(FX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(FX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(fd.cache.hasOwnProperty(p))return fd.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let F=t+"|"+e;return o.capture?`(${F})`:o.wrap===!1?F:`(?:${F})`}let I=UX(t)||UX(e),v={min:t,max:e,a:h,b:E},x=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let F=E<0?Math.abs(E):1;C=TX(F,Math.abs(h),v,o),h=v.a=0}return E>=0&&(x=TX(h,E,v,o)),v.negatives=C,v.positives=x,v.result=G5e(C,x,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&x.length+C.length>1&&(v.result=`(?:${v.result})`),fd.cache[p]=v,v.result};function G5e(t,e,r){let o=vL(t,e,"-",!1,r)||[],a=vL(e,t,"",!1,r)||[],n=vL(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function j5e(t,e){let r=1,o=1,a=NX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=NX(t,r);for(a=OX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+MX(A.count),u=h+1;continue}r.isPadded&&(I=V5e(h,r,o)),E.string=I+E.pattern+MX(E.count),n.push(E),u=h+1,A=E}return n}function vL(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!LX(e,"string",A)&&n.push(r+A),o&&LX(e,"string",A)&&n.push(r+A)}return n}function W5e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function LX(t,e,r){return t.some(o=>o[e]===r)}function NX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function OX(t,e){return t-t%Math.pow(10,e)}function MX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function z5e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function UX(t){return/^-?(0+)\d/.test(t)}function V5e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}fd.cache={};fd.clearCache=()=>fd.cache={};_X.exports=fd});var SL=_((GQt,VX)=>{"use strict";var J5e=ve("util"),jX=HX(),qX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),X5e=t=>e=>t===!0?Number(e):String(e),PL=t=>typeof t=="number"||typeof t=="string"&&t!=="",DI=t=>Number.isInteger(+t),DL=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},Z5e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,$5e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},GX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},YX=(t,e,r,o)=>{if(r)return jX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},WX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return jX(t,e,r)},KX=(...t)=>new RangeError("Invalid range arguments: "+J5e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw KX([t,e]);return[]},t7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},r7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw KX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=DL(A)||DL(p)||DL(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&Z5e(t,e,o)===!1,x=o.transform||X5e(v);if(o.toRegex&&r===1)return YX(GX(t,I),GX(e,I),!0,o);let C={negatives:[],positives:[]},F=V=>C[V<0?"negatives":"positives"].push(Math.abs(V)),N=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?F(a):N.push($5e(x(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?e7e(C,o):WX(N,null,{wrap:!1,...o}):N},n7e=(t,e,r=1,o={})=>{if(!DI(t)&&t.length>1||!DI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return YX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?WX(E,null,{wrap:!1,options:o}):E},FD=(t,e,r,o={})=>{if(e==null&&PL(t))return[t];if(!PL(t)||!PL(e))return zX(t,e,o);if(typeof r=="function")return FD(t,e,1,{transform:r});if(qX(r))return FD(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,DI(r)?DI(t)&&DI(e)?r7e(t,e,r,a):n7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!qX(r)?t7e(r,a):FD(t,e,1,r)};VX.exports=FD});var ZX=_((jQt,XX)=>{"use strict";var i7e=SL(),JX=QD(),s7e=(t,e={})=>{let r=(o,a={})=>{let n=JX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=JX.reduce(o.nodes),I=i7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};XX.exports=s7e});var tZ=_((YQt,eZ)=>{"use strict";var o7e=SL(),$X=RD(),Ry=QD(),pd=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ry.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(pd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?pd(a,n,r):a+n);return Ry.flatten(o)},a7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(pd(A.pop(),$X(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(pd(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Ry.reduce(a.nodes);if(Ry.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=o7e(...I,e);v.length===0&&(v=$X(a,e)),A.push(pd(A.pop(),v)),a.nodes=[];return}let p=Ry.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";rZ.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 lZ=_((KQt,aZ)=>{"use strict";var l7e=RD(),{MAX_LENGTH:iZ,CHAR_BACKSLASH:bL,CHAR_BACKTICK:c7e,CHAR_COMMA:u7e,CHAR_DOT:A7e,CHAR_LEFT_PARENTHESES:f7e,CHAR_RIGHT_PARENTHESES:p7e,CHAR_LEFT_CURLY_BRACE:h7e,CHAR_RIGHT_CURLY_BRACE:g7e,CHAR_LEFT_SQUARE_BRACKET:sZ,CHAR_RIGHT_SQUARE_BRACKET:oZ,CHAR_DOUBLE_QUOTE:d7e,CHAR_SINGLE_QUOTE:m7e,CHAR_NO_BREAK_SPACE:y7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:E7e}=nZ(),C7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(iZ,r.maxLength):iZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,x={},C=()=>t[E++],F=N=>{if(N.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&N.type==="text"){A.value+=N.value;return}return u.nodes.push(N),N.parent=u,N.prev=A,A=N,N};for(F({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let N=u.nodes.shift();u.nodes=[N,{type:"text",value:l7e(u)}]}F({type:"comma",value:v}),u.commas++;continue}if(v===A7e&&I>0&&u.commas===0){let N=u.nodes;if(I===0||N.length===0){F({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){N.pop();let U=N[N.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}F({type:"dot",value:v});continue}F({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(V=>{V.nodes||(V.type==="open"&&(V.isOpen=!0),V.type==="close"&&(V.isClose=!0),V.nodes||(V.type="text"),V.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(u);N.nodes.splice(U,1,...u.nodes)}while(n.length>0);return F({type:"eos"}),a};aZ.exports=C7e});var AZ=_((zQt,uZ)=>{"use strict";var cZ=RD(),w7e=ZX(),I7e=tZ(),B7e=lZ(),nl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=nl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(nl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};nl.parse=(t,e={})=>B7e(t,e);nl.stringify=(t,e={})=>cZ(typeof t=="string"?nl.parse(t,e):t,e);nl.compile=(t,e={})=>(typeof t=="string"&&(t=nl.parse(t,e)),w7e(t,e));nl.expand=(t,e={})=>{typeof t=="string"&&(t=nl.parse(t,e));let r=I7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};nl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?nl.compile(t,e):nl.expand(t,e);uZ.exports=nl});var SI=_((VQt,dZ)=>{"use strict";var v7e=ve("path"),zu="\\\\/",fZ=`[^${zu}]`,vf="\\.",P7e="\\+",D7e="\\?",TD="\\/",S7e="(?=.)",pZ="[^/]",xL=`(?:${TD}|$)`,hZ=`(?:^|${TD})`,kL=`${vf}{1,2}${xL}`,b7e=`(?!${vf})`,x7e=`(?!${hZ}${kL})`,k7e=`(?!${vf}{0,1}${xL})`,Q7e=`(?!${kL})`,R7e=`[^.${TD}]`,F7e=`${pZ}*?`,gZ={DOT_LITERAL:vf,PLUS_LITERAL:P7e,QMARK_LITERAL:D7e,SLASH_LITERAL:TD,ONE_CHAR:S7e,QMARK:pZ,END_ANCHOR:xL,DOTS_SLASH:kL,NO_DOT:b7e,NO_DOTS:x7e,NO_DOT_SLASH:k7e,NO_DOTS_SLASH:Q7e,QMARK_NO_DOT:R7e,STAR:F7e,START_ANCHOR:hZ},T7e={...gZ,SLASH_LITERAL:`[${zu}]`,QMARK:fZ,STAR:`${fZ}*?`,DOTS_SLASH:`${vf}{1,2}(?:[${zu}]|$)`,NO_DOT:`(?!${vf})`,NO_DOTS:`(?!(?:^|[${zu}])${vf}{1,2}(?:[${zu}]|$))`,NO_DOT_SLASH:`(?!${vf}{0,1}(?:[${zu}]|$))`,NO_DOTS_SLASH:`(?!${vf}{1,2}(?:[${zu}]|$))`,QMARK_NO_DOT:`[^.${zu}]`,START_ANCHOR:`(?:^|[${zu}])`,END_ANCHOR:`(?:[${zu}]|$)`},L7e={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"};dZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:L7e,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:v7e.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?T7e:gZ}}});var bI=_(Da=>{"use strict";var N7e=ve("path"),O7e=process.platform==="win32",{REGEX_BACKSLASH:M7e,REGEX_REMOVE_BACKSLASH:U7e,REGEX_SPECIAL_CHARS:_7e,REGEX_SPECIAL_CHARS_GLOBAL:H7e}=SI();Da.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Da.hasRegexChars=t=>_7e.test(t);Da.isRegexChar=t=>t.length===1&&Da.hasRegexChars(t);Da.escapeRegex=t=>t.replace(H7e,"\\$1");Da.toPosixSlashes=t=>t.replace(M7e,"/");Da.removeBackslashes=t=>t.replace(U7e,e=>e==="\\"?"":e);Da.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Da.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:O7e===!0||N7e.sep==="\\";Da.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Da.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Da.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Da.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var vZ=_((XQt,BZ)=>{"use strict";var mZ=bI(),{CHAR_ASTERISK:QL,CHAR_AT:q7e,CHAR_BACKWARD_SLASH:xI,CHAR_COMMA:G7e,CHAR_DOT:RL,CHAR_EXCLAMATION_MARK:FL,CHAR_FORWARD_SLASH:IZ,CHAR_LEFT_CURLY_BRACE:TL,CHAR_LEFT_PARENTHESES:LL,CHAR_LEFT_SQUARE_BRACKET:j7e,CHAR_PLUS:Y7e,CHAR_QUESTION_MARK:yZ,CHAR_RIGHT_CURLY_BRACE:W7e,CHAR_RIGHT_PARENTHESES:EZ,CHAR_RIGHT_SQUARE_BRACKET:K7e}=SI(),CZ=t=>t===IZ||t===xI,wZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,x=!1,C=!1,F=!1,N=!1,U=!1,V=!1,te=!1,le=!1,ae=!1,ce=0,Ce,de,Ie={value:"",depth:0,isGlob:!1},Ee=()=>h>=o,g=()=>p.charCodeAt(h+1),me=()=>(Ce=de,p.charCodeAt(++h));for(;h0&&(he=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&CZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=mZ.removeBackslashes(ne)),De&&V===!0&&(De=mZ.removeBackslashes(De)));let ee={prefix:he,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:x,isGlob:C,isExtglob:F,isGlobstar:N,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,CZ(de)||u.push(Ie),ee.tokens=u),r.parts===!0||r.tokens===!0){let Be;for(let Te=0;Te{"use strict";var LD=SI(),il=bI(),{MAX_LENGTH:ND,POSIX_REGEX_SOURCE:V7e,REGEX_NON_SPECIAL_CHARS:J7e,REGEX_SPECIAL_CHARS_BACKREF:X7e,REPLACEMENTS:PZ}=LD,Z7e=(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=>il.escapeRegex(a)).join("..")}return r},Fy=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,NL=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=PZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(ND,r.maxLength):ND,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=il.isWindows(e),h=LD.globChars(p),E=LD.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:x,ONE_CHAR:C,DOTS_SLASH:F,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:V,QMARK:te,QMARK_NO_DOT:le,STAR:ae,START_ANCHOR:ce}=h,Ce=b=>`(${A}(?:(?!${ce}${b.dot?F:I}).)*?)`,de=r.dot?"":N,Ie=r.dot?te:le,Ee=r.bash===!0?Ce(r):ae;r.capture&&(Ee=`(${Ee})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=il.removePrefix(t,g),a=t.length;let me=[],De=[],he=[],ne=n,ee,Be=()=>g.index===a-1,Te=g.peek=(b=1)=>t[g.index+b],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),at=(b="",w=0)=>{g.consumed+=b,g.index+=w},Re=b=>{g.output+=b.output!=null?b.output:b.value,at(b.value)},Qe=()=>{let b=1;for(;Te()==="!"&&(Te(2)!=="("||Te(3)==="?");)ht(),g.start++,b++;return b%2===0?!1:(g.negated=!0,g.start++,!0)},xe=b=>{g[b]++,he.push(b)},je=b=>{g[b]--,he.pop()},be=b=>{if(ne.type==="globstar"){let w=g.braces>0&&(b.type==="comma"||b.type==="brace"),S=b.extglob===!0||me.length&&(b.type==="pipe"||b.type==="paren");b.type!=="slash"&&b.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Ee,g.output+=ne.output)}if(me.length&&b.type!=="paren"&&(me[me.length-1].inner+=b.value),(b.value||b.output)&&Re(b),ne&&ne.type==="text"&&b.type==="text"){ne.value+=b.value,ne.output=(ne.output||"")+b.value;return}b.prev=ne,u.push(b),ne=b},$e=(b,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;xe("parens"),be({type:b,value:w,output:g.output?"":C}),be({type:"paren",extglob:!0,value:ht(),output:y}),me.push(S)},_e=b=>{let w=b.close+(r.capture?")":""),S;if(b.type==="negate"){let y=Ee;if(b.inner&&b.inner.length>1&&b.inner.includes("/")&&(y=Ce(r)),(y!==Ee||Be()||/^\)+$/.test(H()))&&(w=b.close=`)$))${y}`),b.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let R=NL(S,{...e,fastpaths:!1}).output;w=b.close=`)${R})${y})`}b.prev.type==="bos"&&(g.negatedExtglob=!0)}be({type:"paren",extglob:!0,value:ee,output:w}),je("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let b=!1,w=t.replace(X7e,(S,y,R,J,X,Z)=>J==="\\"?(b=!0,S):J==="?"?y?y+J+(X?te.repeat(X.length):""):Z===0?Ie+(X?te.repeat(X.length):""):te.repeat(R.length):J==="."?I.repeat(R.length):J==="*"?y?y+J+(X?Ee:""):Ee:y?S:`\\${S}`);return b===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=il.wrapOutput(w,g,e),g)}for(;!Be();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=Te();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",be({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),R=0;if(y&&y[0].length>2&&(R=y[0].length,g.index+=R,R%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){be({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),R=ne.value.slice(0,y),J=ne.value.slice(y+2),X=V7e[J];if(X){ne.value=R+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&Te()!==":"||ee==="-"&&Te()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=il.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&be({type:"text",value:ee});continue}if(ee==="("){xe("parens"),be({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Fy("opening","("));let S=me[me.length-1];if(S&&g.parens===S.parens+1){_e(me.pop());continue}be({type:"paren",value:ee,output:g.parens?")":"\\)"}),je("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Fy("closing","]"));ee=`\\${ee}`}else xe("brackets");be({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){be({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Fy("opening","["));be({type:"text",value:ee,output:`\\${ee}`});continue}je("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||il.hasRegexChars(S))continue;let y=il.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),be(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){be({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let R=u.slice(),J=[];for(let X=R.length-1;X>=0&&(u.pop(),R[X].type!=="brace");X--)R[X].type!=="dots"&&J.unshift(R[X].value);y=Z7e(J,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let R=g.output.slice(0,S.outputIndex),J=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=R;for(let X of J)g.output+=X.output||X.value}be({type:"brace",value:ee,output:y}),je("braces"),De.pop();continue}if(ee==="|"){me.length>0&&me[me.length-1].conditions++,be({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&he[he.length-1]==="braces"&&(y.comma=!0,S="|"),be({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}be({type:"slash",value:ee,output:x});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){be({type:"text",value:ee,output:I});continue}be({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){$e("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=Te(),R=ee;if(y==="<"&&!il.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(R=`\\${ee}`),be({type:"text",value:ee,output:R});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){be({type:"qmark",value:ee,output:le});continue}be({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&Te()==="("&&(Te(2)!=="?"||!/[!=<:]/.test(Te(3)))){$e("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){$e("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){be({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){be({type:"plus",value:ee});continue}be({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&Te()==="("&&Te(2)!=="?"){be({type:"at",extglob:!0,value:ee,output:""});continue}be({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=J7e.exec(H());S&&(ee+=S[0],g.index+=S[0].length),be({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Ee,g.backtrack=!0,g.globstar=!0,at(ee);continue}let b=H();if(r.noextglob!==!0&&/^\([^?]/.test(b)){$e("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){at(ee);continue}let S=ne.prev,y=S.prev,R=S.type==="slash"||S.type==="bos",J=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!R||b[0]&&b[0]!=="/")){be({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=me.length&&(S.type==="pipe"||S.type==="paren");if(!R&&S.type!=="paren"&&!X&&!Z){be({type:"star",value:ee,output:""});continue}for(;b.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;b=b.slice(3),at("/**",3)}if(S.type==="bos"&&Be()){ne.type="globstar",ne.value+=ee,ne.output=Ce(r),g.output=ne.output,g.globstar=!0,at(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!J&&Be()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=Ce(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,at(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&b[0]==="/"){let ie=b[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${Ce(r)}${x}|${x}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,at(ee+ht()),be({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&b[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${x}|${Ce(r)}${x})`,g.output=ne.output,g.globstar=!0,at(ee+ht()),be({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=Ce(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,at(ee);continue}let w={type:"star",value:ee,output:Ee};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=de+w.output),be(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,be(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=V,ne.output+=V):(g.output+=de,ne.output+=de),Te()!=="*"&&(g.output+=C,ne.output+=C)),be(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Fy("closing","]"));g.output=il.escapeLast(g.output,"["),je("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Fy("closing",")"));g.output=il.escapeLast(g.output,"("),je("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Fy("closing","}"));g.output=il.escapeLast(g.output,"{"),je("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&be({type:"maybe_slash",value:"",output:`${x}?`}),g.backtrack===!0){g.output="";for(let b of g.tokens)g.output+=b.output!=null?b.output:b.value,b.suffix&&(g.output+=b.suffix)}return g};NL.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(ND,r.maxLength):ND,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=PZ[t]||t;let n=il.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:x,START_ANCHOR:C}=LD.globChars(n),F=r.dot?I:E,N=r.dot?v:E,U=r.capture?"":"?:",V={negated:!1,prefix:""},te=r.bash===!0?".*?":x;r.capture&&(te=`(${te})`);let le=de=>de.noglobstar===!0?te:`(${U}(?:(?!${C}${de.dot?h:u}).)*?)`,ae=de=>{switch(de){case"*":return`${F}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${F}${te}${u}${p}${te}`;case"*/*":return`${F}${te}${A}${p}${N}${te}`;case"**":return F+le(r);case"**/*":return`(?:${F}${le(r)}${A})?${N}${p}${te}`;case"**/*.*":return`(?:${F}${le(r)}${A})?${N}${te}${u}${p}${te}`;case"**/.*":return`(?:${F}${le(r)}${A})?${u}${p}${te}`;default:{let Ie=/^(.*?)\.(\w+)$/.exec(de);if(!Ie)return;let Ee=ae(Ie[1]);return Ee?Ee+u+Ie[2]:void 0}}},ce=il.removePrefix(t,V),Ce=ae(ce);return Ce&&r.strictSlashes!==!0&&(Ce+=`${A}?`),Ce};DZ.exports=NL});var xZ=_(($Qt,bZ)=>{"use strict";var $7e=ve("path"),eYe=vZ(),OL=SZ(),ML=bI(),tYe=SI(),rYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Mi(v,e,r));return v=>{for(let x of E){let C=x(v);if(C)return C}return!1}}let o=rYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=ML.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:x,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),F={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:x,isMatch:v};return typeof a.onResult=="function"&&a.onResult(F),v===!1?(F.isMatch=!1,I?F:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(F),F.isMatch=!1,I?F:!1):(typeof a.onMatch=="function"&&a.onMatch(F),I?F:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?ML.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=ML.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test($7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):OL(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>eYe(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=OL.fastpaths(t,e)),a.output||(a=OL(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=tYe;bZ.exports=Mi});var QZ=_((eRt,kZ)=>{"use strict";kZ.exports=xZ()});var Xo=_((tRt,LZ)=>{"use strict";var FZ=ve("util"),TZ=AZ(),Vu=QZ(),UL=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${FZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!UL.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${FZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=UL.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?UL.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of TZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:TZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};LZ.exports=yi});var OZ=_((rRt,NZ)=>{"use strict";NZ.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 OD=_((nRt,MZ)=>{"use strict";var nYe=OZ();MZ.exports=t=>typeof t=="string"?t.replace(nYe(),""):t});var _Z=_((iRt,UZ)=>{function iYe(){this.__data__=[],this.size=0}UZ.exports=iYe});var Ty=_((sRt,HZ)=>{function sYe(t,e){return t===e||t!==t&&e!==e}HZ.exports=sYe});var kI=_((oRt,qZ)=>{var oYe=Ty();function aYe(t,e){for(var r=t.length;r--;)if(oYe(t[r][0],e))return r;return-1}qZ.exports=aYe});var jZ=_((aRt,GZ)=>{var lYe=kI(),cYe=Array.prototype,uYe=cYe.splice;function AYe(t){var e=this.__data__,r=lYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():uYe.call(e,r,1),--this.size,!0}GZ.exports=AYe});var WZ=_((lRt,YZ)=>{var fYe=kI();function pYe(t){var e=this.__data__,r=fYe(e,t);return r<0?void 0:e[r][1]}YZ.exports=pYe});var zZ=_((cRt,KZ)=>{var hYe=kI();function gYe(t){return hYe(this.__data__,t)>-1}KZ.exports=gYe});var JZ=_((uRt,VZ)=>{var dYe=kI();function mYe(t,e){var r=this.__data__,o=dYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}VZ.exports=mYe});var QI=_((ARt,XZ)=>{var yYe=_Z(),EYe=jZ(),CYe=WZ(),wYe=zZ(),IYe=JZ();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var BYe=QI();function vYe(){this.__data__=new BYe,this.size=0}ZZ.exports=vYe});var t$=_((pRt,e$)=>{function PYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}e$.exports=PYe});var n$=_((hRt,r$)=>{function DYe(t){return this.__data__.get(t)}r$.exports=DYe});var s$=_((gRt,i$)=>{function SYe(t){return this.__data__.has(t)}i$.exports=SYe});var _L=_((dRt,o$)=>{var bYe=typeof global=="object"&&global&&global.Object===Object&&global;o$.exports=bYe});var Hl=_((mRt,a$)=>{var xYe=_L(),kYe=typeof self=="object"&&self&&self.Object===Object&&self,QYe=xYe||kYe||Function("return this")();a$.exports=QYe});var hd=_((yRt,l$)=>{var RYe=Hl(),FYe=RYe.Symbol;l$.exports=FYe});var f$=_((ERt,A$)=>{var c$=hd(),u$=Object.prototype,TYe=u$.hasOwnProperty,LYe=u$.toString,RI=c$?c$.toStringTag:void 0;function NYe(t){var e=TYe.call(t,RI),r=t[RI];try{t[RI]=void 0;var o=!0}catch{}var a=LYe.call(t);return o&&(e?t[RI]=r:delete t[RI]),a}A$.exports=NYe});var h$=_((CRt,p$)=>{var OYe=Object.prototype,MYe=OYe.toString;function UYe(t){return MYe.call(t)}p$.exports=UYe});var gd=_((wRt,m$)=>{var g$=hd(),_Ye=f$(),HYe=h$(),qYe="[object Null]",GYe="[object Undefined]",d$=g$?g$.toStringTag:void 0;function jYe(t){return t==null?t===void 0?GYe:qYe:d$&&d$ in Object(t)?_Ye(t):HYe(t)}m$.exports=jYe});var sl=_((IRt,y$)=>{function YYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}y$.exports=YYe});var MD=_((BRt,E$)=>{var WYe=gd(),KYe=sl(),zYe="[object AsyncFunction]",VYe="[object Function]",JYe="[object GeneratorFunction]",XYe="[object Proxy]";function ZYe(t){if(!KYe(t))return!1;var e=WYe(t);return e==VYe||e==JYe||e==zYe||e==XYe}E$.exports=ZYe});var w$=_((vRt,C$)=>{var $Ye=Hl(),eWe=$Ye["__core-js_shared__"];C$.exports=eWe});var v$=_((PRt,B$)=>{var HL=w$(),I$=function(){var t=/[^.]+$/.exec(HL&&HL.keys&&HL.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function tWe(t){return!!I$&&I$ in t}B$.exports=tWe});var qL=_((DRt,P$)=>{var rWe=Function.prototype,nWe=rWe.toString;function iWe(t){if(t!=null){try{return nWe.call(t)}catch{}try{return t+""}catch{}}return""}P$.exports=iWe});var S$=_((SRt,D$)=>{var sWe=MD(),oWe=v$(),aWe=sl(),lWe=qL(),cWe=/[\\^$.*+?()[\]{}|]/g,uWe=/^\[object .+?Constructor\]$/,AWe=Function.prototype,fWe=Object.prototype,pWe=AWe.toString,hWe=fWe.hasOwnProperty,gWe=RegExp("^"+pWe.call(hWe).replace(cWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function dWe(t){if(!aWe(t)||oWe(t))return!1;var e=sWe(t)?gWe:uWe;return e.test(lWe(t))}D$.exports=dWe});var x$=_((bRt,b$)=>{function mWe(t,e){return t?.[e]}b$.exports=mWe});var Xp=_((xRt,k$)=>{var yWe=S$(),EWe=x$();function CWe(t,e){var r=EWe(t,e);return yWe(r)?r:void 0}k$.exports=CWe});var UD=_((kRt,Q$)=>{var wWe=Xp(),IWe=Hl(),BWe=wWe(IWe,"Map");Q$.exports=BWe});var FI=_((QRt,R$)=>{var vWe=Xp(),PWe=vWe(Object,"create");R$.exports=PWe});var L$=_((RRt,T$)=>{var F$=FI();function DWe(){this.__data__=F$?F$(null):{},this.size=0}T$.exports=DWe});var O$=_((FRt,N$)=>{function SWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}N$.exports=SWe});var U$=_((TRt,M$)=>{var bWe=FI(),xWe="__lodash_hash_undefined__",kWe=Object.prototype,QWe=kWe.hasOwnProperty;function RWe(t){var e=this.__data__;if(bWe){var r=e[t];return r===xWe?void 0:r}return QWe.call(e,t)?e[t]:void 0}M$.exports=RWe});var H$=_((LRt,_$)=>{var FWe=FI(),TWe=Object.prototype,LWe=TWe.hasOwnProperty;function NWe(t){var e=this.__data__;return FWe?e[t]!==void 0:LWe.call(e,t)}_$.exports=NWe});var G$=_((NRt,q$)=>{var OWe=FI(),MWe="__lodash_hash_undefined__";function UWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=OWe&&e===void 0?MWe:e,this}q$.exports=UWe});var Y$=_((ORt,j$)=>{var _We=L$(),HWe=O$(),qWe=U$(),GWe=H$(),jWe=G$();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var W$=Y$(),YWe=QI(),WWe=UD();function KWe(){this.size=0,this.__data__={hash:new W$,map:new(WWe||YWe),string:new W$}}K$.exports=KWe});var J$=_((URt,V$)=>{function zWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}V$.exports=zWe});var TI=_((_Rt,X$)=>{var VWe=J$();function JWe(t,e){var r=t.__data__;return VWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}X$.exports=JWe});var $$=_((HRt,Z$)=>{var XWe=TI();function ZWe(t){var e=XWe(this,t).delete(t);return this.size-=e?1:0,e}Z$.exports=ZWe});var tee=_((qRt,eee)=>{var $We=TI();function eKe(t){return $We(this,t).get(t)}eee.exports=eKe});var nee=_((GRt,ree)=>{var tKe=TI();function rKe(t){return tKe(this,t).has(t)}ree.exports=rKe});var see=_((jRt,iee)=>{var nKe=TI();function iKe(t,e){var r=nKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}iee.exports=iKe});var _D=_((YRt,oee)=>{var sKe=z$(),oKe=$$(),aKe=tee(),lKe=nee(),cKe=see();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var uKe=QI(),AKe=UD(),fKe=_D(),pKe=200;function hKe(t,e){var r=this.__data__;if(r instanceof uKe){var o=r.__data__;if(!AKe||o.length{var gKe=QI(),dKe=$Z(),mKe=t$(),yKe=n$(),EKe=s$(),CKe=lee();function My(t){var e=this.__data__=new gKe(t);this.size=e.size}My.prototype.clear=dKe;My.prototype.delete=mKe;My.prototype.get=yKe;My.prototype.has=EKe;My.prototype.set=CKe;cee.exports=My});var Aee=_((zRt,uee)=>{var wKe="__lodash_hash_undefined__";function IKe(t){return this.__data__.set(t,wKe),this}uee.exports=IKe});var pee=_((VRt,fee)=>{function BKe(t){return this.__data__.has(t)}fee.exports=BKe});var gee=_((JRt,hee)=>{var vKe=_D(),PKe=Aee(),DKe=pee();function qD(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new vKe;++e{function SKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function bKe(t,e){return t.has(e)}yee.exports=bKe});var jL=_(($Rt,Cee)=>{var xKe=gee(),kKe=mee(),QKe=Eee(),RKe=1,FKe=2;function TKe(t,e,r,o,a,n){var u=r&RKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,x=r&FKe?new xKe:void 0;for(n.set(t,e),n.set(e,t);++I{var LKe=Hl(),NKe=LKe.Uint8Array;wee.exports=NKe});var Bee=_((tFt,Iee)=>{function OKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Iee.exports=OKe});var Pee=_((rFt,vee)=>{function MKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}vee.exports=MKe});var kee=_((nFt,xee)=>{var Dee=hd(),See=YL(),UKe=Ty(),_Ke=jL(),HKe=Bee(),qKe=Pee(),GKe=1,jKe=2,YKe="[object Boolean]",WKe="[object Date]",KKe="[object Error]",zKe="[object Map]",VKe="[object Number]",JKe="[object RegExp]",XKe="[object Set]",ZKe="[object String]",$Ke="[object Symbol]",eze="[object ArrayBuffer]",tze="[object DataView]",bee=Dee?Dee.prototype:void 0,WL=bee?bee.valueOf:void 0;function rze(t,e,r,o,a,n,u){switch(r){case tze:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case eze:return!(t.byteLength!=e.byteLength||!n(new See(t),new See(e)));case YKe:case WKe:case VKe:return UKe(+t,+e);case KKe:return t.name==e.name&&t.message==e.message;case JKe:case ZKe:return t==e+"";case zKe:var A=HKe;case XKe:var p=o&GKe;if(A||(A=qKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=jKe,u.set(t,e);var E=_Ke(A(t),A(e),o,a,n,u);return u.delete(t),E;case $Ke:if(WL)return WL.call(t)==WL.call(e)}return!1}xee.exports=rze});var GD=_((iFt,Qee)=>{function nze(t,e){for(var r=-1,o=e.length,a=t.length;++r{var ize=Array.isArray;Ree.exports=ize});var KL=_((oFt,Fee)=>{var sze=GD(),oze=ql();function aze(t,e,r){var o=e(t);return oze(t)?o:sze(o,r(t))}Fee.exports=aze});var Lee=_((aFt,Tee)=>{function lze(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function cze(){return[]}Nee.exports=cze});var jD=_((cFt,Mee)=>{var uze=Lee(),Aze=zL(),fze=Object.prototype,pze=fze.propertyIsEnumerable,Oee=Object.getOwnPropertySymbols,hze=Oee?function(t){return t==null?[]:(t=Object(t),uze(Oee(t),function(e){return pze.call(t,e)}))}:Aze;Mee.exports=hze});var _ee=_((uFt,Uee)=>{function gze(t,e){for(var r=-1,o=Array(t);++r{function dze(t){return t!=null&&typeof t=="object"}Hee.exports=dze});var Gee=_((fFt,qee)=>{var mze=gd(),yze=Ju(),Eze="[object Arguments]";function Cze(t){return yze(t)&&mze(t)==Eze}qee.exports=Cze});var LI=_((pFt,Wee)=>{var jee=Gee(),wze=Ju(),Yee=Object.prototype,Ize=Yee.hasOwnProperty,Bze=Yee.propertyIsEnumerable,vze=jee(function(){return arguments}())?jee:function(t){return wze(t)&&Ize.call(t,"callee")&&!Bze.call(t,"callee")};Wee.exports=vze});var zee=_((hFt,Kee)=>{function Pze(){return!1}Kee.exports=Pze});var OI=_((NI,Uy)=>{var Dze=Hl(),Sze=zee(),Xee=typeof NI=="object"&&NI&&!NI.nodeType&&NI,Vee=Xee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,bze=Vee&&Vee.exports===Xee,Jee=bze?Dze.Buffer:void 0,xze=Jee?Jee.isBuffer:void 0,kze=xze||Sze;Uy.exports=kze});var MI=_((gFt,Zee)=>{var Qze=9007199254740991,Rze=/^(?:0|[1-9]\d*)$/;function Fze(t,e){var r=typeof t;return e=e??Qze,!!e&&(r=="number"||r!="symbol"&&Rze.test(t))&&t>-1&&t%1==0&&t{var Tze=9007199254740991;function Lze(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Tze}$ee.exports=Lze});var tte=_((mFt,ete)=>{var Nze=gd(),Oze=YD(),Mze=Ju(),Uze="[object Arguments]",_ze="[object Array]",Hze="[object Boolean]",qze="[object Date]",Gze="[object Error]",jze="[object Function]",Yze="[object Map]",Wze="[object Number]",Kze="[object Object]",zze="[object RegExp]",Vze="[object Set]",Jze="[object String]",Xze="[object WeakMap]",Zze="[object ArrayBuffer]",$ze="[object DataView]",eVe="[object Float32Array]",tVe="[object Float64Array]",rVe="[object Int8Array]",nVe="[object Int16Array]",iVe="[object Int32Array]",sVe="[object Uint8Array]",oVe="[object Uint8ClampedArray]",aVe="[object Uint16Array]",lVe="[object Uint32Array]",ui={};ui[eVe]=ui[tVe]=ui[rVe]=ui[nVe]=ui[iVe]=ui[sVe]=ui[oVe]=ui[aVe]=ui[lVe]=!0;ui[Uze]=ui[_ze]=ui[Zze]=ui[Hze]=ui[$ze]=ui[qze]=ui[Gze]=ui[jze]=ui[Yze]=ui[Wze]=ui[Kze]=ui[zze]=ui[Vze]=ui[Jze]=ui[Xze]=!1;function cVe(t){return Mze(t)&&Oze(t.length)&&!!ui[Nze(t)]}ete.exports=cVe});var WD=_((yFt,rte)=>{function uVe(t){return function(e){return t(e)}}rte.exports=uVe});var KD=_((UI,_y)=>{var AVe=_L(),nte=typeof UI=="object"&&UI&&!UI.nodeType&&UI,_I=nte&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,fVe=_I&&_I.exports===nte,VL=fVe&&AVe.process,pVe=function(){try{var t=_I&&_I.require&&_I.require("util").types;return t||VL&&VL.binding&&VL.binding("util")}catch{}}();_y.exports=pVe});var zD=_((EFt,ote)=>{var hVe=tte(),gVe=WD(),ite=KD(),ste=ite&&ite.isTypedArray,dVe=ste?gVe(ste):hVe;ote.exports=dVe});var JL=_((CFt,ate)=>{var mVe=_ee(),yVe=LI(),EVe=ql(),CVe=OI(),wVe=MI(),IVe=zD(),BVe=Object.prototype,vVe=BVe.hasOwnProperty;function PVe(t,e){var r=EVe(t),o=!r&&yVe(t),a=!r&&!o&&CVe(t),n=!r&&!o&&!a&&IVe(t),u=r||o||a||n,A=u?mVe(t.length,String):[],p=A.length;for(var h in t)(e||vVe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||wVe(h,p)))&&A.push(h);return A}ate.exports=PVe});var VD=_((wFt,lte)=>{var DVe=Object.prototype;function SVe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||DVe;return t===r}lte.exports=SVe});var XL=_((IFt,cte)=>{function bVe(t,e){return function(r){return t(e(r))}}cte.exports=bVe});var Ate=_((BFt,ute)=>{var xVe=XL(),kVe=xVe(Object.keys,Object);ute.exports=kVe});var pte=_((vFt,fte)=>{var QVe=VD(),RVe=Ate(),FVe=Object.prototype,TVe=FVe.hasOwnProperty;function LVe(t){if(!QVe(t))return RVe(t);var e=[];for(var r in Object(t))TVe.call(t,r)&&r!="constructor"&&e.push(r);return e}fte.exports=LVe});var HI=_((PFt,hte)=>{var NVe=MD(),OVe=YD();function MVe(t){return t!=null&&OVe(t.length)&&!NVe(t)}hte.exports=MVe});var JD=_((DFt,gte)=>{var UVe=JL(),_Ve=pte(),HVe=HI();function qVe(t){return HVe(t)?UVe(t):_Ve(t)}gte.exports=qVe});var ZL=_((SFt,dte)=>{var GVe=KL(),jVe=jD(),YVe=JD();function WVe(t){return GVe(t,YVe,jVe)}dte.exports=WVe});var Ete=_((bFt,yte)=>{var mte=ZL(),KVe=1,zVe=Object.prototype,VVe=zVe.hasOwnProperty;function JVe(t,e,r,o,a,n){var u=r&KVe,A=mte(t),p=A.length,h=mte(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:VVe.call(e,v)))return!1}var x=n.get(t),C=n.get(e);if(x&&C)return x==e&&C==t;var F=!0;n.set(t,e),n.set(e,t);for(var N=u;++I{var XVe=Xp(),ZVe=Hl(),$Ve=XVe(ZVe,"DataView");Cte.exports=$Ve});var Bte=_((kFt,Ite)=>{var eJe=Xp(),tJe=Hl(),rJe=eJe(tJe,"Promise");Ite.exports=rJe});var Pte=_((QFt,vte)=>{var nJe=Xp(),iJe=Hl(),sJe=nJe(iJe,"Set");vte.exports=sJe});var Ste=_((RFt,Dte)=>{var oJe=Xp(),aJe=Hl(),lJe=oJe(aJe,"WeakMap");Dte.exports=lJe});var qI=_((FFt,Tte)=>{var $L=wte(),eN=UD(),tN=Bte(),rN=Pte(),nN=Ste(),Fte=gd(),Hy=qL(),bte="[object Map]",cJe="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Rte="[object DataView]",uJe=Hy($L),AJe=Hy(eN),fJe=Hy(tN),pJe=Hy(rN),hJe=Hy(nN),dd=Fte;($L&&dd(new $L(new ArrayBuffer(1)))!=Rte||eN&&dd(new eN)!=bte||tN&&dd(tN.resolve())!=xte||rN&&dd(new rN)!=kte||nN&&dd(new nN)!=Qte)&&(dd=function(t){var e=Fte(t),r=e==cJe?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case uJe:return Rte;case AJe:return bte;case fJe:return xte;case pJe:return kte;case hJe:return Qte}return e});Tte.exports=dd});var qte=_((TFt,Hte)=>{var iN=HD(),gJe=jL(),dJe=kee(),mJe=Ete(),Lte=qI(),Nte=ql(),Ote=OI(),yJe=zD(),EJe=1,Mte="[object Arguments]",Ute="[object Array]",XD="[object Object]",CJe=Object.prototype,_te=CJe.hasOwnProperty;function wJe(t,e,r,o,a,n){var u=Nte(t),A=Nte(e),p=u?Ute:Lte(t),h=A?Ute:Lte(e);p=p==Mte?XD:p,h=h==Mte?XD:h;var E=p==XD,I=h==XD,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iN),u||yJe(t)?gJe(t,e,r,o,a,n):dJe(t,e,p,r,o,a,n);if(!(r&EJe)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var F=x?t.value():t,N=C?e.value():e;return n||(n=new iN),a(F,N,r,o,n)}}return v?(n||(n=new iN),mJe(t,e,r,o,a,n)):!1}Hte.exports=wJe});var Wte=_((LFt,Yte)=>{var IJe=qte(),Gte=Ju();function jte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Gte(t)&&!Gte(e)?t!==t&&e!==e:IJe(t,e,r,o,jte,a)}Yte.exports=jte});var zte=_((NFt,Kte)=>{var BJe=Wte();function vJe(t,e){return BJe(t,e)}Kte.exports=vJe});var sN=_((OFt,Vte)=>{var PJe=Xp(),DJe=function(){try{var t=PJe(Object,"defineProperty");return t({},"",{}),t}catch{}}();Vte.exports=DJe});var ZD=_((MFt,Xte)=>{var Jte=sN();function SJe(t,e,r){e=="__proto__"&&Jte?Jte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=SJe});var oN=_((UFt,Zte)=>{var bJe=ZD(),xJe=Ty();function kJe(t,e,r){(r!==void 0&&!xJe(t[e],r)||r===void 0&&!(e in t))&&bJe(t,e,r)}Zte.exports=kJe});var ere=_((_Ft,$te)=>{function QJe(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=QJe});var rre=_((HFt,tre)=>{var RJe=ere(),FJe=RJe();tre.exports=FJe});var aN=_((GI,qy)=>{var TJe=Hl(),ore=typeof GI=="object"&&GI&&!GI.nodeType&&GI,nre=ore&&typeof qy=="object"&&qy&&!qy.nodeType&&qy,LJe=nre&&nre.exports===ore,ire=LJe?TJe.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function NJe(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}qy.exports=NJe});var $D=_((qFt,lre)=>{var are=YL();function OJe(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=OJe});var lN=_((GFt,cre)=>{var MJe=$D();function UJe(t,e){var r=e?MJe(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=UJe});var eS=_((jFt,ure)=>{function _Je(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var HJe=sl(),Are=Object.create,qJe=function(){function t(){}return function(e){if(!HJe(e))return{};if(Are)return Are(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();fre.exports=qJe});var tS=_((WFt,hre)=>{var GJe=XL(),jJe=GJe(Object.getPrototypeOf,Object);hre.exports=jJe});var cN=_((KFt,gre)=>{var YJe=pre(),WJe=tS(),KJe=VD();function zJe(t){return typeof t.constructor=="function"&&!KJe(t)?YJe(WJe(t)):{}}gre.exports=zJe});var mre=_((zFt,dre)=>{var VJe=HI(),JJe=Ju();function XJe(t){return JJe(t)&&VJe(t)}dre.exports=XJe});var uN=_((VFt,Ere)=>{var ZJe=gd(),$Je=tS(),eXe=Ju(),tXe="[object Object]",rXe=Function.prototype,nXe=Object.prototype,yre=rXe.toString,iXe=nXe.hasOwnProperty,sXe=yre.call(Object);function oXe(t){if(!eXe(t)||ZJe(t)!=tXe)return!1;var e=$Je(t);if(e===null)return!0;var r=iXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&yre.call(r)==sXe}Ere.exports=oXe});var AN=_((JFt,Cre)=>{function aXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Cre.exports=aXe});var rS=_((XFt,wre)=>{var lXe=ZD(),cXe=Ty(),uXe=Object.prototype,AXe=uXe.hasOwnProperty;function fXe(t,e,r){var o=t[e];(!(AXe.call(t,e)&&cXe(o,r))||r===void 0&&!(e in t))&&lXe(t,e,r)}wre.exports=fXe});var md=_((ZFt,Ire)=>{var pXe=rS(),hXe=ZD();function gXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function dXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Bre.exports=dXe});var Dre=_((eTt,Pre)=>{var mXe=sl(),yXe=VD(),EXe=vre(),CXe=Object.prototype,wXe=CXe.hasOwnProperty;function IXe(t){if(!mXe(t))return EXe(t);var e=yXe(t),r=[];for(var o in t)o=="constructor"&&(e||!wXe.call(t,o))||r.push(o);return r}Pre.exports=IXe});var Gy=_((tTt,Sre)=>{var BXe=JL(),vXe=Dre(),PXe=HI();function DXe(t){return PXe(t)?BXe(t,!0):vXe(t)}Sre.exports=DXe});var xre=_((rTt,bre)=>{var SXe=md(),bXe=Gy();function xXe(t){return SXe(t,bXe(t))}bre.exports=xXe});var Lre=_((nTt,Tre)=>{var kre=oN(),kXe=aN(),QXe=lN(),RXe=eS(),FXe=cN(),Qre=LI(),Rre=ql(),TXe=mre(),LXe=OI(),NXe=MD(),OXe=sl(),MXe=uN(),UXe=zD(),Fre=AN(),_Xe=xre();function HXe(t,e,r,o,a,n,u){var A=Fre(t,r),p=Fre(e,r),h=u.get(p);if(h){kre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),x=!v&&LXe(p),C=!v&&!x&&UXe(p);E=p,v||x||C?Rre(A)?E=A:TXe(A)?E=RXe(A):x?(I=!1,E=kXe(p,!0)):C?(I=!1,E=QXe(p,!0)):E=[]:MXe(p)||Qre(p)?(E=A,Qre(A)?E=_Xe(A):(!OXe(A)||NXe(A))&&(E=FXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),kre(t,r,E)}Tre.exports=HXe});var Mre=_((iTt,Ore)=>{var qXe=HD(),GXe=oN(),jXe=rre(),YXe=Lre(),WXe=sl(),KXe=Gy(),zXe=AN();function Nre(t,e,r,o,a){t!==e&&jXe(e,function(n,u){if(a||(a=new qXe),WXe(n))YXe(t,e,u,r,Nre,o,a);else{var A=o?o(zXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),GXe(t,u,A)}},KXe)}Ore.exports=Nre});var fN=_((sTt,Ure)=>{function VXe(t){return t}Ure.exports=VXe});var Hre=_((oTt,_re)=>{function JXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}_re.exports=JXe});var pN=_((aTt,Gre)=>{var XXe=Hre(),qre=Math.max;function ZXe(t,e,r){return e=qre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=qre(o.length-e,0),u=Array(n);++a{function $Xe(t){return function(){return t}}jre.exports=$Xe});var zre=_((cTt,Kre)=>{var eZe=Yre(),Wre=sN(),tZe=fN(),rZe=Wre?function(t,e){return Wre(t,"toString",{configurable:!0,enumerable:!1,value:eZe(e),writable:!0})}:tZe;Kre.exports=rZe});var Jre=_((uTt,Vre)=>{var nZe=800,iZe=16,sZe=Date.now;function oZe(t){var e=0,r=0;return function(){var o=sZe(),a=iZe-(o-r);if(r=o,a>0){if(++e>=nZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Vre.exports=oZe});var hN=_((ATt,Xre)=>{var aZe=zre(),lZe=Jre(),cZe=lZe(aZe);Xre.exports=cZe});var $re=_((fTt,Zre)=>{var uZe=fN(),AZe=pN(),fZe=hN();function pZe(t,e){return fZe(AZe(t,e,uZe),t+"")}Zre.exports=pZe});var tne=_((pTt,ene)=>{var hZe=Ty(),gZe=HI(),dZe=MI(),mZe=sl();function yZe(t,e,r){if(!mZe(r))return!1;var o=typeof e;return(o=="number"?gZe(r)&&dZe(e,r.length):o=="string"&&e in r)?hZe(r[e],t):!1}ene.exports=yZe});var nne=_((hTt,rne)=>{var EZe=$re(),CZe=tne();function wZe(t){return EZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&CZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var IZe=Mre(),BZe=nne(),vZe=BZe(function(t,e,r,o){IZe(t,e,r,o)});ine.exports=vZe});var He={};zt(He,{AsyncActions:()=>mN,BufferStream:()=>dN,CachingStrategy:()=>mne,DefaultStream:()=>yN,allSettledSafe:()=>_c,assertNever:()=>CN,bufferStream:()=>Wy,buildIgnorePattern:()=>QZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>Pf,escapeRegExp:()=>DZe,getArrayWithDefault:()=>WI,getFactoryWithDefault:()=>al,getMapWithDefault:()=>KI,getSetWithDefault:()=>jy,groupBy:()=>TZe,isIndexableObject:()=>gN,isPathLike:()=>RZe,isTaggedYarnVersion:()=>PZe,makeDeferred:()=>hne,mapAndFilter:()=>ol,mapAndFind:()=>YI,mergeIntoTarget:()=>Ene,overrideType:()=>SZe,parseBoolean:()=>zI,parseInt:()=>Ky,parseOptionalBoolean:()=>yne,plural:()=>nS,prettifyAsyncErrors:()=>Yy,prettifySyncErrors:()=>wN,releaseAfterUseAsync:()=>xZe,replaceEnvVariables:()=>sS,sortMap:()=>Rs,toMerged:()=>FZe,tryParseOptionalBoolean:()=>IN,validateEnum:()=>bZe});function PZe(t){return!!(Ane.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function DZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function SZe(t){}function CN(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function bZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function ol(t,e){let r=[];for(let o of t){let a=e(o);a!==fne&&r.push(a)}return r}function YI(t,e){for(let r of t){let o=e(r);if(o!==pne)return o}}function gN(t){return typeof t=="object"&&t!==null}async function _c(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gN(t))for(let e of Object.keys(t)){let r=t[e];gN(r)&&(t[e]=iS(r))}return t}function al(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function WI(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function jy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function KI(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function xZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Yy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wN(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Wy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function hne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function gne(t){return jI(ue.fromPortablePath(t))}function dne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=jI.cache[physicalPath];delete jI.cache[physicalPath];let result;try{result=gne(physicalPath);let freshCacheEntry=jI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{jI.cache[physicalPath]=currentCacheEntry}return result}function kZe(t){let e=one.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=dne(t);return one.set(t,{mtime:r.mtimeMs,instance:o}),o}function Pf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return dne(t);case 1:return kZe(t);case 2:return gne(t);default:throw new Error("Unsupported caching strategy")}}function Rs(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function QZe(t){return t.length===0?null:t.map(e=>`(${cne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function zI(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 yne(t){return typeof t>"u"?t:zI(t)}function IN(t){try{return yne(t)}catch{return null}}function RZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Ene(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,lne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,ane.default)(h,p))||u.push(p);return u}});return n}function FZe(...t){return Ene({},...t)}function TZe(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var ane,lne,cne,une,Ane,EN,fne,pne,dN,mN,yN,jI,one,mne,Gl=Et(()=>{Dt();qt();ane=Ze(zte()),lne=Ze(sne()),cne=Ze(Xo()),une=Ze(sd()),Ane=Ze(Jn()),EN=ve("stream");fne=Symbol();ol.skip=fne;pne=Symbol();YI.skip=pne;dN=class extends EN.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mN=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,une.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=hne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yN=class extends EN.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},jI=eval("require");one=new Map;mne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(mne||{})});var zy,BN,vN,Cne=Et(()=>{zy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(zy||{}),BN=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(BN||{}),vN=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(vN||{})});var fe={};zt(fe,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>XI,applyColor:()=>Js,applyHyperlink:()=>Jy,applyStyle:()=>yd,json:()=>Ed,jsonOrPretty:()=>OZe,mark:()=>xN,pretty:()=>Ut,prettyField:()=>Xu,prettyList:()=>bN,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>Vy.default,supportsColor:()=>lS,supportsHyperlinks:()=>SN,tuple:()=>Hc});function wne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function Hc(t,e){return[e,t]}function yd(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Js(t,e,r){if(!t.get("enableColors"))return e;let o=LZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:DN.level>=3?o[0]:o[1],n=typeof a=="number"?PN.ansi256(a):a.startsWith("#")?PN.hex(a):PN[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Jy(t,e,r){return t.get("enableHyperlinks")?NZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ut(t,e,r){if(e===null)return Js(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Js(t,e,r)}function bN(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ut(t,a,r)).join(o)}function Ed(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[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 OZe(t,e,[r,o]){return t?Ed(r,o):Ut(e,r,o)}function xN(t){return{Check:Js(t,"\u2713","green"),Cross:Js(t,"\u2718","red"),Question:Js(t,"?","cyan")}}function Xu(t,{label:e,value:[r,o]}){return`${Ut(t,e,yt.CODE)}: ${Ut(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${qr(t,h)}, `,I=kN(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ut(t,p,yt.NUMBER))].join("")}function XI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let x=I.get("code");typeof x<"u"&&o.set(x,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let F=I.get("pattern");typeof F<"u"&&n.push([Ine.default.matcher(F,{contains:!0}),v])}n.reverse();let u=(I,v,x)=>{if(I===null||I===0)return x;let C=a.size>0||n.length>0?(0,Vy.default)(v):v;if(a.size>0){let F=a.get(C);if(typeof F<"u")return F??x}if(n.length>0){for(let[F,N]of n)if(F(C))return N??x}if(o.size>0){let F=o.get(Ku(I));if(typeof F<"u")return F??x}return x},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,x,C){switch(u(v,x,C)){case"info":A.call(I,v,x);break;case"warning":p.call(I,v??0,x);break;case"error":h.call(I,v??0,x);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,VI,Ine,Vy,Bne,yt,aS,DN,lS,SN,PN,LZe,Do,oS,NZe,uS,jl=Et(()=>{Dt();JI=Ze(BL()),VI=Ze(rd());qt();Ine=Ze(Xo()),Vy=Ze(OD()),Bne=ve("util");pD();So();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),DN=VI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=DN.level!==0,SN=lS&&!VI.default.GITHUB_ACTIONS&&!VI.default.CIRCLE&&!VI.default.GITLAB,PN=new JI.default.Instance(DN),LZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),Do=t=>t;oS={[yt.ID]:Do({pretty:(t,e)=>typeof e=="number"?Js(t,`${e}`,yt.NUMBER):Js(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:Do({pretty:(t,e)=>(0,Bne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:Do({pretty:(t,e)=>Js(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:Do({pretty:(t,e)=>us(t,e),json:t=>rn(t)}),[yt.LOCATOR]:Do({pretty:(t,e)=>qr(t,e),json:t=>ba(t)}),[yt.DESCRIPTOR]:Do({pretty:(t,e)=>Gn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:Do({pretty:(t,{descriptor:e,locator:r})=>ZI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?ba(e):null})}),[yt.DEPENDENT]:Do({pretty:(t,{locator:e,descriptor:r})=>QN(t,e,r),json:({locator:t,descriptor:e})=>({locator:ba(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:Do({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${us(t,e.parentDescriptor)} \u27A4 ${Js(t,"dependencies",yt.CODE)} \u27A4 ${us(t,e.descriptor)}`;case"PeerDependency":return`${us(t,e.parentDescriptor)} \u27A4 ${Js(t,"peerDependencies",yt.CODE)} \u27A4 ${us(t,e.descriptor)}`;case"PeerDependencyMeta":return`${us(t,e.parentDescriptor)} \u27A4 ${Js(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${us(t,Zo(e.selector))} \u27A4 ${Js(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${rn(t.parentDescriptor)} > ${rn(t.descriptor)}`;case"PeerDependency":return`${rn(t.parentDescriptor)} >> ${rn(t.descriptor)}`;case"PeerDependencyMeta":return`${rn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:Do({pretty:(t,e)=>(t.get(e),Jy(t,Js(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:Do({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:Do({pretty:(t,e)=>Js(t,wne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:Do({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Js(t,`${r} ${wne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:Do({pretty:(t,e)=>Js(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:Do({pretty:(t,{text:e,format:r,paragraphs:o})=>vo(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:Do({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ut(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>yd(t,a,2)),e),json:t=>t})};NZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var vne=_(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.splitWhen=Xy.flatten=void 0;function MZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Xy.flatten=MZe;function UZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Xy.splitWhen=UZe});var Pne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function _Ze(t){return t.code==="ENOENT"}AS.isEnoentCodeError=_Ze});var Dne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var RN=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 HZe(t,e){return new RN(t,e)}fS.createDirentFromStats=HZe});var Sne=_(Zu=>{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.removeLeadingDotSegment=Zu.escape=Zu.makeAbsolute=Zu.unixify=void 0;var qZe=ve("path"),GZe=2,jZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function YZe(t){return t.replace(/\\/g,"/")}Zu.unixify=YZe;function WZe(t,e){return qZe.resolve(t,e)}Zu.makeAbsolute=WZe;function KZe(t){return t.replace(jZe,"\\$2")}Zu.escape=KZe;function zZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(GZe)}return t}Zu.removeLeadingDotSegment=zZe});var xne=_((kTt,bne)=>{bne.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 Rne=_((QTt,Qne)=>{var VZe=xne(),kne={"{":"}","(":")","[":"]"},JZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=kne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},XZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var ZZe=Rne(),$Ze=ve("path").posix.dirname,e$e=ve("os").platform()==="win32",FN="/",t$e=/\\/g,r$e=/[\{\[].*[\}\]]$/,n$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,i$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Fne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&e$e&&e.indexOf(FN)<0&&(e=e.replace(t$e,FN)),r$e.test(e)&&(e+=FN),e+="a";do e=$Ze(e);while(ZZe(e)||n$e.test(e));return e.replace(i$e,"$1")}});var qne=_(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.matchAny=Gr.convertPatternsToRe=Gr.makeRe=Gr.getPatternParts=Gr.expandBraceExpansion=Gr.expandPatternsWithBraceExpansion=Gr.isAffectDepthOfReadingPattern=Gr.endsWithSlashGlobStar=Gr.hasGlobStar=Gr.getBaseDirectory=Gr.isPatternRelatedToParentDirectory=Gr.getPatternsOutsideCurrentDirectory=Gr.getPatternsInsideCurrentDirectory=Gr.getPositivePatterns=Gr.getNegativePatterns=Gr.isPositivePattern=Gr.isNegativePattern=Gr.convertToNegativePattern=Gr.convertToPositivePattern=Gr.isDynamicPattern=Gr.isStaticPattern=void 0;var s$e=ve("path"),o$e=Tne(),TN=Xo(),Lne="**",a$e="\\",l$e=/[*?]|^!/,c$e=/\[[^[]*]/,u$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,A$e=/[!*+?@]\([^(]*\)/,f$e=/,|\.\./;function Nne(t,e={}){return!One(t,e)}Gr.isStaticPattern=Nne;function One(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(a$e)||l$e.test(t)||c$e.test(t)||u$e.test(t)||e.extglob!==!1&&A$e.test(t)||e.braceExpansion!==!1&&p$e(t))}Gr.isDynamicPattern=One;function p$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return f$e.test(o)}function h$e(t){return pS(t)?t.slice(1):t}Gr.convertToPositivePattern=h$e;function g$e(t){return"!"+t}Gr.convertToNegativePattern=g$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}Gr.isNegativePattern=pS;function Mne(t){return!pS(t)}Gr.isPositivePattern=Mne;function d$e(t){return t.filter(pS)}Gr.getNegativePatterns=d$e;function m$e(t){return t.filter(Mne)}Gr.getPositivePatterns=m$e;function y$e(t){return t.filter(e=>!LN(e))}Gr.getPatternsInsideCurrentDirectory=y$e;function E$e(t){return t.filter(LN)}Gr.getPatternsOutsideCurrentDirectory=E$e;function LN(t){return t.startsWith("..")||t.startsWith("./..")}Gr.isPatternRelatedToParentDirectory=LN;function C$e(t){return o$e(t,{flipBackslashes:!1})}Gr.getBaseDirectory=C$e;function w$e(t){return t.includes(Lne)}Gr.hasGlobStar=w$e;function Une(t){return t.endsWith("/"+Lne)}Gr.endsWithSlashGlobStar=Une;function I$e(t){let e=s$e.basename(t);return Une(t)||Nne(e)}Gr.isAffectDepthOfReadingPattern=I$e;function B$e(t){return t.reduce((e,r)=>e.concat(_ne(r)),[])}Gr.expandPatternsWithBraceExpansion=B$e;function _ne(t){return TN.braces(t,{expand:!0,nodupes:!0})}Gr.expandBraceExpansion=_ne;function v$e(t,e){let{parts:r}=TN.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}Gr.getPatternParts=v$e;function Hne(t,e){return TN.makeRe(t,e)}Gr.makeRe=Hne;function P$e(t,e){return t.map(r=>Hne(r,e))}Gr.convertPatternsToRe=P$e;function D$e(t,e){return e.some(r=>r.test(t))}Gr.matchAny=D$e});var Wne=_((TTt,Yne)=>{"use strict";var S$e=ve("stream"),Gne=S$e.PassThrough,b$e=Array.prototype.slice;Yne.exports=x$e;function x$e(){let t=[],e=b$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Gne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function x(C){function F(){C.removeListener("merge2UnpipeEnd",F),C.removeListener("end",F),n&&C.removeListener("error",N),v()}function N(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",F),C.on("end",F),n&&C.on("error",N),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var k$e=Wne();function Q$e(t){let e=k$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Kne(t)),e.once("end",()=>Kne(t)),e}hS.merge=Q$e;function Kne(t){t.forEach(e=>e.emit("close"))}});var Vne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.isEmpty=Zy.isString=void 0;function R$e(t){return typeof t=="string"}Zy.isString=R$e;function F$e(t){return t===""}Zy.isEmpty=F$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var T$e=vne();bo.array=T$e;var L$e=Pne();bo.errno=L$e;var N$e=Dne();bo.fs=N$e;var O$e=Sne();bo.path=O$e;var M$e=qne();bo.pattern=M$e;var U$e=zne();bo.stream=U$e;var _$e=Vne();bo.string=_$e});var Zne=_(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.convertPatternGroupToTask=xo.convertPatternGroupsToTasks=xo.groupPatternsByBaseDirectory=xo.getNegativePatternsAsPositive=xo.getPositivePatterns=xo.convertPatternsToTasks=xo.generate=void 0;var Sf=Df();function H$e(t,e){let r=Jne(t),o=Xne(t,e.ignore),a=r.filter(p=>Sf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Sf.pattern.isDynamicPattern(p,e)),u=NN(a,o,!1),A=NN(n,o,!0);return u.concat(A)}xo.generate=H$e;function NN(t,e,r){let o=[],a=Sf.pattern.getPatternsOutsideCurrentDirectory(t),n=Sf.pattern.getPatternsInsideCurrentDirectory(t),u=ON(a),A=ON(n);return o.push(...MN(u,e,r)),"."in A?o.push(UN(".",n,e,r)):o.push(...MN(A,e,r)),o}xo.convertPatternsToTasks=NN;function Jne(t){return Sf.pattern.getPositivePatterns(t)}xo.getPositivePatterns=Jne;function Xne(t,e){return Sf.pattern.getNegativePatterns(t).concat(e).map(Sf.pattern.convertToPositivePattern)}xo.getNegativePatternsAsPositive=Xne;function ON(t){let e={};return t.reduce((r,o)=>{let a=Sf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}xo.groupPatternsByBaseDirectory=ON;function MN(t,e,r){return Object.keys(t).map(o=>UN(o,t[o],e,r))}xo.convertPatternGroupsToTasks=MN;function UN(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Sf.pattern.convertToNegativePattern))}}xo.convertPatternGroupToTask=UN});var eie=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.removeDuplicateSlashes=$y.transform=void 0;var q$e=/(?!^)\/{2,}/g;function G$e(t){return t.map(e=>$ne(e))}$y.transform=G$e;function $ne(t){return t.replace(q$e,"/")}$y.removeDuplicateSlashes=$ne});var rie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function j$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){tie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){_N(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){tie(r,n);return}_N(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),_N(r,u)})})}gS.read=j$e;function tie(t,e){t(e)}function _N(t,e){t(null,e)}});var nie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function Y$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=Y$e});var iie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.createFileSystemAdapter=Zp.FILE_SYSTEM_ADAPTER=void 0;var mS=ve("fs");Zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function W$e(t){return t===void 0?Zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Zp.FILE_SYSTEM_ADAPTER),t)}Zp.createFileSystemAdapter=W$e});var sie=_(qN=>{"use strict";Object.defineProperty(qN,"__esModule",{value:!0});var K$e=iie(),HN=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=K$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qN.default=HN});var Cd=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.statSync=$p.stat=$p.Settings=void 0;var oie=rie(),z$e=nie(),GN=sie();$p.Settings=GN.default;function V$e(t,e,r){if(typeof e=="function"){oie.read(t,jN(),e);return}oie.read(t,jN(e),r)}$p.stat=V$e;function J$e(t,e){let r=jN(e);return z$e.read(t,r)}$p.statSync=J$e;function jN(t={}){return t instanceof GN.default?t:new GN.default(t)}});var lie=_((YTt,aie)=>{aie.exports=X$e;function X$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var YN=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var cie=Number.parseInt(yS[0],10),Z$e=Number.parseInt(yS[1],10),uie=10,$$e=10,eet=cie>uie,tet=cie===uie&&Z$e>=$$e;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=eet||tet});var Aie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var WN=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 ret(t,e){return new WN(t,e)}CS.createDirentFromStats=ret});var KN=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var net=Aie();wS.fs=net});var zN=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function iet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=iet});var mie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.readdir=eh.readdirWithFileTypes=eh.read=void 0;var set=Cd(),fie=lie(),oet=YN(),pie=KN(),hie=zN();function aet(t,e,r){if(!e.stats&&oet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){gie(t,e,r);return}die(t,e,r)}eh.read=aet;function gie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:hie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){VN(r,n);return}let u=n.map(A=>cet(A,e));fie(u,(A,p)=>{if(A!==null){BS(r,A);return}VN(r,p)})})}eh.readdirWithFileTypes=gie;function cet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=pie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function die(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=hie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{set.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:pie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});fie(n,(u,A)=>{if(u!==null){BS(r,u);return}VN(r,A)})})}eh.readdir=die;function BS(t,e){t(e)}function VN(t,e){t(null,e)}});var Iie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.readdir=th.readdirWithFileTypes=th.read=void 0;var uet=Cd(),Aet=YN(),yie=KN(),Eie=zN();function fet(t,e){return!e.stats&&Aet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Cie(t,e):wie(t,e)}th.read=fet;function Cie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Eie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=yie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}th.readdirWithFileTypes=Cie;function wie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Eie.joinPathSegments(t,o,e.pathSegmentSeparator),n=uet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:yie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}th.readdir=wie});var Bie=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.createFileSystemAdapter=rh.FILE_SYSTEM_ADAPTER=void 0;var eE=ve("fs");rh.FILE_SYSTEM_ADAPTER={lstat:eE.lstat,stat:eE.stat,lstatSync:eE.lstatSync,statSync:eE.statSync,readdir:eE.readdir,readdirSync:eE.readdirSync};function pet(t){return t===void 0?rh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},rh.FILE_SYSTEM_ADAPTER),t)}rh.createFileSystemAdapter=pet});var vie=_(XN=>{"use strict";Object.defineProperty(XN,"__esModule",{value:!0});var het=ve("path"),get=Cd(),det=Bie(),JN=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=det.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,het.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new get.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XN.default=JN});var vS=_(nh=>{"use strict";Object.defineProperty(nh,"__esModule",{value:!0});nh.Settings=nh.scandirSync=nh.scandir=void 0;var Pie=mie(),met=Iie(),ZN=vie();nh.Settings=ZN.default;function yet(t,e,r){if(typeof e=="function"){Pie.read(t,$N(),e);return}Pie.read(t,$N(e),r)}nh.scandir=yet;function Eet(t,e){let r=$N(e);return met.read(t,r)}nh.scandirSync=Eet;function $N(t={}){return t instanceof ZN.default?t:new ZN.default(t)}});var Sie=_((tLt,Die)=>{"use strict";function Cet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Die.exports=Cet});var xie=_((rLt,eO)=>{"use strict";var wet=Sie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=wet(Iet),a=null,n=null,u=0,A=null,p={push:F,drain:Yl,saturated:Yl,pause:E,paused:!1,concurrency:r,running:h,resume:x,idle:C,length:I,getQueue:v,unshift:N,empty:Yl,kill:V,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var ae=a,ce=0;ae;)ae=ae.next,ce++;return ce}function v(){for(var ae=a,ce=[];ae;)ce.push(ae.value),ae=ae.next;return ce}function x(){if(!!p.paused){p.paused=!1;for(var ae=0;ae{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.joinPathSegments=$u.replacePathSegmentSeparator=$u.isAppliedFilter=$u.isFatalError=void 0;function vet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}$u.isFatalError=vet;function Pet(t,e){return t===null||t(e)}$u.isAppliedFilter=Pet;function Det(t,e){return t.split(/[/\\]/).join(e)}$u.replacePathSegmentSeparator=Det;function bet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}$u.joinPathSegments=bet});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var xet=PS(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=xet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var ket=ve("events"),Qet=vS(),Ret=xie(),DS=PS(),Fet=nO(),iO=class extends Fet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Qet.scandir,this._emitter=new ket.EventEmitter,this._queue=Ret(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!DS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=DS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),DS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&DS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var kie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Tet=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Tet.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Let(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Net(e,this._storage)}),this._reader.read()}};lO.default=aO;function Let(t,e){t(e)}function Net(t,e){t(null,e)}});var Qie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Oet=ve("stream"),Met=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._stream=new Oet.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}};uO.default=cO});var Rie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var Uet=vS(),SS=PS(),_et=nO(),AO=class extends _et.default{constructor(){super(...arguments),this._scandir=Uet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Fie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var Het=Rie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Tie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var qet=ve("path"),Get=vS(),gO=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,qet.sep),this.fsScandirSettings=new Get.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}};dO.default=gO});var xS=_(eA=>{"use strict";Object.defineProperty(eA,"__esModule",{value:!0});eA.Settings=eA.walkStream=eA.walkSync=eA.walk=void 0;var Lie=kie(),jet=Qie(),Yet=Fie(),mO=Tie();eA.Settings=mO.default;function Wet(t,e,r){if(typeof e=="function"){new Lie.default(t,bS()).read(e);return}new Lie.default(t,bS(e)).read(r)}eA.walk=Wet;function Ket(t,e){let r=bS(e);return new Yet.default(t,r).read()}eA.walkSync=Ket;function zet(t,e){let r=bS(e);return new jet.default(t,r).read()}eA.walkStream=zet;function bS(t={}){return t instanceof mO.default?t:new mO.default(t)}});var kS=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var Vet=ve("path"),Jet=Cd(),Nie=Df(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Jet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Vet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Nie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Nie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Xet=ve("stream"),Zet=Cd(),$et=xS(),ett=kS(),CO=class extends ett.default{constructor(){super(...arguments),this._walkStream=$et.walkStream,this._stat=Zet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Xet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Oie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var ttt=xS(),rtt=kS(),ntt=IO(),BO=class extends rtt.default{constructor(){super(...arguments),this._walkAsync=ttt.walk,this._readerStream=new ntt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Mie=_(DO=>{"use strict";Object.defineProperty(DO,"__esModule",{value:!0});var tE=Df(),PO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=tE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return tE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>tE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:tE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return tE.array.splitWhen(e,r=>r.dynamic&&tE.pattern.hasGlobStar(r.pattern))}};DO.default=PO});var Uie=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});var itt=Mie(),SO=class extends itt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};bO.default=SO});var _ie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var QS=Df(),stt=Uie(),xO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new stt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};kO.default=xO});var Hie=_(RO=>{"use strict";Object.defineProperty(RO,"__esModule",{value:!0});var wd=Df(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=wd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=wd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=wd.path.makeAbsolute(this._settings.cwd,e);return wd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=wd.path.removeLeadingDotSegment(e),n=wd.pattern.matchAny(a,r);return!n&&o?wd.pattern.matchAny(a+"/",r):n}};RO.default=QO});var qie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var ott=Df(),FO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ott.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=FO});var jie=_(NO=>{"use strict";Object.defineProperty(NO,"__esModule",{value:!0});var Gie=Df(),LO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Gie.path.makeAbsolute(this._settings.cwd,r),r=Gie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};NO.default=LO});var RS=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var att=ve("path"),ltt=_ie(),ctt=Hie(),utt=qie(),Att=jie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new utt.default(this._settings),this.entryFilter=new ctt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new ltt.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new Att.default(this._settings)}_getRootDirectory(e){return att.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}}};MO.default=OO});var Yie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var ftt=Oie(),ptt=RS(),UO=class extends ptt.default{constructor(){super(...arguments),this._reader=new ftt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Wie=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var htt=ve("stream"),gtt=IO(),dtt=RS(),HO=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new htt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};qO.default=HO});var Kie=_(jO=>{"use strict";Object.defineProperty(jO,"__esModule",{value:!0});var mtt=Cd(),ytt=xS(),Ett=kS(),GO=class extends Ett.default{constructor(){super(...arguments),this._walkSync=ytt.walkSync,this._statSync=mtt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};jO.default=GO});var zie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var Ctt=Kie(),wtt=RS(),YO=class extends wtt.default{constructor(){super(...arguments),this._reader=new Ctt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Vie=_(nE=>{"use strict";Object.defineProperty(nE,"__esModule",{value:!0});nE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var rE=ve("fs"),Itt=ve("os"),Btt=Math.max(Itt.cpus().length,1);nE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:rE.lstat,lstatSync:rE.lstatSync,stat:rE.stat,statSync:rE.statSync,readdir:rE.readdir,readdirSync:rE.readdirSync};var KO=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,Btt),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)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},nE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};nE.default=KO});var TS=_((SLt,Zie)=>{"use strict";var Jie=Zne(),Xie=eie(),vtt=Yie(),Ptt=Wie(),Dtt=zie(),zO=Vie(),Id=Df();async function VO(t,e){iE(t);let r=JO(t,vtt.default,e),o=await Promise.all(r);return Id.array.flatten(o)}(function(t){function e(u,A){iE(u);let p=JO(u,Dtt.default,A);return Id.array.flatten(p)}t.sync=e;function r(u,A){iE(u);let p=JO(u,Ptt.default,A);return Id.stream.merge(p)}t.stream=r;function o(u,A){iE(u);let p=Xie.transform([].concat(u)),h=new zO.default(A);return Jie.generate(p,h)}t.generateTasks=o;function a(u,A){iE(u);let p=new zO.default(A);return Id.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return iE(u),Id.path.escape(u)}t.escapePath=n})(VO||(VO={}));function JO(t,e,r){let o=Xie.transform([].concat(t)),a=new zO.default(r),n=Jie.generate(o,a),u=new e(a);return n.map(u.read,u)}function iE(t){if(![].concat(t).every(o=>Id.string.isString(o)&&!Id.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Zie.exports=VO});var wn={};zt(wn,{checksumFile:()=>NS,checksumPattern:()=>OS,makeHash:()=>zi});function zi(...t){let e=(0,LS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function NS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,LS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function OS(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,LS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var LS,XO,ih=Et(()=>{Dt();LS=ve("crypto"),XO=Ze(TS())});var j={};zt(j,{allPeerRequests:()=>l1,areDescriptorsEqual:()=>nse,areIdentsEqual:()=>n1,areLocatorsEqual:()=>i1,areVirtualPackagesEquivalent:()=>Ltt,bindDescriptor:()=>Ftt,bindLocator:()=>Ttt,convertDescriptorToLocator:()=>MS,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>ktt,convertToIdent:()=>xtt,convertToManifestRange:()=>Ytt,copyPackage:()=>e1,devirtualizeDescriptor:()=>t1,devirtualizeLocator:()=>r1,ensureDevirtualizedDescriptor:()=>Qtt,ensureDevirtualizedLocator:()=>Rtt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>GS,isVirtualDescriptor:()=>bf,isVirtualLocator:()=>qc,makeDescriptor:()=>In,makeIdent:()=>tA,makeLocator:()=>Fs,makeRange:()=>HS,parseDescriptor:()=>sh,parseFileStyleRange:()=>Gtt,parseIdent:()=>Zo,parseLocator:()=>xf,parseRange:()=>Bd,prettyDependent:()=>QN,prettyDescriptor:()=>Gn,prettyIdent:()=>us,prettyLocator:()=>qr,prettyLocatorNoColors:()=>kN,prettyRange:()=>aE,prettyReference:()=>o1,prettyResolution:()=>ZI,prettyWorkspace:()=>a1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>oE,sortDescriptors:()=>lE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>rn,stringifyLocator:()=>ba,tryParseDescriptor:()=>s1,tryParseIdent:()=>ise,tryParseLocator:()=>_S,tryParseRange:()=>qtt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function tA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zi(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zi(t.identHash,e),range:e}}function Fs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zi(t.identHash,e),reference:e}}function xtt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function MS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function ktt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function e1(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Fs(t,`virtual:${e}#${t.reference}`))}function bf(t){return t.range.startsWith($I)}function qc(t){return t.reference.startsWith($I)}function t1(t){if(!bf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function r1(t){if(!qc(t))throw new Error("Not a virtual descriptor");return Fs(t,t.reference.replace(US,""))}function Qtt(t){return bf(t)?In(t,t.range.replace(US,"")):t}function Rtt(t){return qc(t)?Fs(t,t.reference.replace(US,"")):t}function Ftt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${sE.default.stringify(e)}`)}function Ttt(t,e){return t.reference.includes("::")?t:Fs(t,`${t.reference}::${sE.default.stringify(e)}`)}function n1(t,e){return t.identHash===e.identHash}function nse(t,e){return t.descriptorHash===e.descriptorHash}function i1(t,e){return t.locatorHash===e.locatorHash}function Ltt(t,e){if(!qc(t))throw new Error("Invalid package type");if(!qc(e))throw new Error("Invalid package type");if(!n1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!nse(r,o))return!1}return!0}function Zo(t){let e=ise(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ise(t){let e=t.match(Ntt);if(!e)return null;let[,r,o]=e;return tA(typeof r<"u"?r:null,o)}function sh(t,e=!1){let r=s1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function s1(t,e=!1){let r=e?t.match(Ott):t.match(Mtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(tA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(Utt):t.match(_tt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Fs(tA(u,a),A)}function Bd(t,e){let r=t.match(Htt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?sE.default.parse(n):n,A=typeof r[4]<"u"?sE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function qtt(t,e){try{return Bd(t,e)}catch{return null}}function Gtt(t,{protocol:e}){let{selector:r,params:o}=Bd(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function $ie(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function jtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${$ie(e)}#`),a+=$ie(r),jtt(o)&&(a+=`::${sE.default.stringify(o)}`),a}function Ytt(t){let{params:e,protocol:r,source:o,selector:a}=Bd(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function rn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ba(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function oE(t){let{protocol:e,selector:r}=Bd(t.reference),o=e!==null?e.replace(Wtt,""):"exotic",a=ese.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function us(t,e){return e.scope?`${Ut(t,`@${e.scope}/`,yt.SCOPE)}${Ut(t,e.name,yt.NAME)}`:`${Ut(t,e.name,yt.NAME)}`}function qS(t){if(t.startsWith($I)){let e=qS(t.substring(t.indexOf("#")+1)),r=t.substring($I.length,$I.length+Stt);return`${e} [${r}]`}else return t.replace(Ktt,"?[...]")}function aE(t,e){return`${Ut(t,qS(e),yt.RANGE)}`}function Gn(t,e){return`${us(t,e)}${Ut(t,"@",yt.RANGE)}${aE(t,e.range)}`}function o1(t,e){return`${Ut(t,qS(e),yt.REFERENCE)}`}function qr(t,e){return`${us(t,e)}${Ut(t,"@",yt.REFERENCE)}${o1(t,e.reference)}`}function kN(t){return`${rn(t)}@${qS(t.reference)}`}function lE(t){return Rs(t,[e=>rn(e),e=>e.range])}function a1(t,e){return us(t,e.anchoredLocator)}function ZI(t,e,r){let o=bf(e)?t1(e):e;return r===null?`${Gn(t,o)} \u2192 ${xN(t).Cross}`:o.identHash===r.identHash?`${Gn(t,o)} \u2192 ${o1(t,r.reference)}`:`${Gn(t,o)} \u2192 ${qr(t,r)}`}function QN(t,e,r){return r===null?`${qr(t,e)}`:`${qr(t,e)} (via ${aE(t,r.range)})`}function nM(t){return`node_modules/${rn(t)}`}function GS(t,e){return t.conditions?btt(t.conditions,r=>{let[,o,a]=r.match(rse),n=e[o];return n?n.includes(a):!0}):!0}function l1(t){let e=new Set;if("children"in t)e.add(t);else for(let r of t.requests.values())e.add(r);for(let r of e)for(let o of r.children.values())e.add(o);return e}var sE,ese,tse,$I,Stt,rse,btt,US,Ntt,Ott,Mtt,Utt,_tt,Htt,Wtt,Ktt,So=Et(()=>{sE=Ze(ve("querystring")),ese=Ze(Jn()),tse=Ze(eX());jl();ih();Gl();So();$I="virtual:",Stt=5,rse=/(os|cpu|libc)=([a-z0-9_-]+)/,btt=(0,tse.makeParser)(rse);US=/^[^#]*#/;Ntt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ott=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Utt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Htt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Wtt=/:$/;Ktt=/\?.*/});var sse,ose=Et(()=>{So();sse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==rn(r)||e.configuration.normalizeLocator(Fs(Zo(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==rn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=a1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var c1,Xn,vd=Et(()=>{c1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(c1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(c1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(c1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=c1;Xn.protocol="workspace:"});var Lr={};zt(Lr,{SemVer:()=>Ase.SemVer,clean:()=>Vtt,getComparator:()=>cse,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>kf,simplifyRanges:()=>sM,stringifyComparator:()=>use,validRange:()=>xa});function kf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=ase.get(o);if(typeof a>"u")try{a=new oh.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ase.set(o,a||null)}else if(a===null)return!1;let n;try{n=new oh.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function xa(t){if(t.indexOf(":")!==-1)return null;let e=lse.get(t);if(typeof e<"u")return e;try{e=new oh.default.Range(t)}catch{e=null}return lse.set(t,e),e}function Vtt(t){let e=ztt.exec(t);return e?e[1]:null}function cse(t){if(t.semver===oh.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 iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?oh.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?oh.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=oh.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function use(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 sM(t){let e=t.map(o=>xa(o).set.map(a=>a.map(n=>cse(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>use(o)).join(" || ")}var oh,Ase,ase,lse,ztt,Qf=Et(()=>{oh=Ze(Jn()),Ase=Ze(Jn()),ase=new Map;lse=new Map;ztt=/^(?:[\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 fse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function pse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function jS(t,{yamlCompatibilityMode:e}){return e?IN(t):typeof t>"u"||typeof t=="boolean"?t:null}function hse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?hse(t,e[0]):`(${e.map(r=>hse(t,r)).join(" | ")})`}var gse,cE,Ot,uE=Et(()=>{Dt();Nl();gse=Ze(Jn());vd();Gl();Qf();So();cE=class{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 async tryFind(e,{baseFs:r=new Tn}={}){let o=z.join(e,"package.json");try{return await cE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await cE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new cE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new cE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(pse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=fse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(pse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=fse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Zo(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Zo(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!xa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=sh(n),p=this.ensureDependencyMeta(A),h=jS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=jS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=jS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=sh(n),p=this.ensurePeerDependencyMeta(A),h=jS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UP(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!gse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=rn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=rn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=rn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(rn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...lE(o).map(n=>({[rn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...lE(a).map(n=>({[rn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...lE(this.devDependencies.values()).map(n=>({[rn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...lE(this.peerDependencies.values()).map(n=>({[rn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of Rs(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of Rs(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Zo(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...Rs(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_P(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=cE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var mse=_((qLt,dse)=>{var Jtt=Hl(),Xtt=function(){return Jtt.Date.now()};dse.exports=Xtt});var Ese=_((GLt,yse)=>{var Ztt=/\s/;function $tt(t){for(var e=t.length;e--&&Ztt.test(t.charAt(e)););return e}yse.exports=$tt});var wse=_((jLt,Cse)=>{var ert=Ese(),trt=/^\s+/;function rrt(t){return t&&t.slice(0,ert(t)+1).replace(trt,"")}Cse.exports=rrt});var AE=_((YLt,Ise)=>{var nrt=gd(),irt=Ju(),srt="[object Symbol]";function ort(t){return typeof t=="symbol"||irt(t)&&nrt(t)==srt}Ise.exports=ort});var Dse=_((WLt,Pse)=>{var art=wse(),Bse=sl(),lrt=AE(),vse=0/0,crt=/^[-+]0x[0-9a-f]+$/i,urt=/^0b[01]+$/i,Art=/^0o[0-7]+$/i,frt=parseInt;function prt(t){if(typeof t=="number")return t;if(lrt(t))return vse;if(Bse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=art(t);var r=urt.test(t);return r||Art.test(t)?frt(t.slice(2),r?2:8):crt.test(t)?vse:+t}Pse.exports=prt});var xse=_((KLt,bse)=>{var hrt=sl(),aM=mse(),Sse=Dse(),grt="Expected a function",drt=Math.max,mrt=Math.min;function yrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(grt);e=Sse(e)||0,hrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?drt(Sse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function x(ce){var Ce=o,de=a;return o=a=void 0,h=ce,u=t.apply(de,Ce),u}function C(ce){return h=ce,A=setTimeout(U,e),E?x(ce):u}function F(ce){var Ce=ce-p,de=ce-h,Ie=e-Ce;return I?mrt(Ie,n-de):Ie}function N(ce){var Ce=ce-p,de=ce-h;return p===void 0||Ce>=e||Ce<0||I&&de>=n}function U(){var ce=aM();if(N(ce))return V(ce);A=setTimeout(U,F(ce))}function V(ce){return A=void 0,v&&o?x(ce):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:V(aM())}function ae(){var ce=aM(),Ce=N(ce);if(o=arguments,a=this,p=ce,Ce){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),x(p)}return A===void 0&&(A=setTimeout(U,e)),u}return ae.cancel=te,ae.flush=le,ae}bse.exports=yrt});var lM=_((zLt,kse)=>{var Ert=xse(),Crt=sl(),wrt="Expected a function";function Irt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(wrt);return Crt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Ert(t,e,{leading:o,maxWait:e,trailing:a})}kse.exports=Irt});function vrt(t){return typeof t.reportCode<"u"}var Qse,Rse,Fse,Brt,Jt,Xs,Wl=Et(()=>{Qse=Ze(lM()),Rse=ve("stream"),Fse=ve("string_decoder"),Brt=15,Jt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Qse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Brt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){vrt(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 Rse.PassThrough,o=new Fse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var fE,cM=Et(()=>{Wl();So();fE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new Jt(11,`${qr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Pd,uM=Et(()=>{So();Pd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${Gn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${qr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var pE,AM=Et(()=>{Dt();So();pE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Fs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Fs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return oE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new _u(A,{baseFs:r.packageFs,pathUtils:z});return{...r,packageFs:p}}}});var hE,u1,Tse=Et(()=>{hE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(hE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(hE.protocol)}supportsDescriptor(e,r){return hE.isVirtualDescriptor(e)}supportsLocator(e,r){return hE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},u1=hE;u1.protocol="virtual:"});var gE,fM=Et(()=>{Dt();vd();gE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function A1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Lse(t){return typeof t>"u"?3:A1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function Drt(t){return A1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function Srt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!Drt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Nse(t,e){let r=A1(t)&&gM(t,e)?t[e]:void 0;return Srt(r)}function dE(t,e){return[t,e,Ose]}function dM(t){return Array.isArray(t)?t[2]===Ose:!1}function pM(t,e){if(A1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return dE(e,r)}return Array.isArray(t)?dE(e,t.map(r=>pM(r,e))):dE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:x,value:C}=Nse(v,r),F=Lse(C);if(F!==3){if(n??=F,F!==n||x==="hardReset"){p=A;break}if(F===2)return dE(I,C);if(u.unshift([I,C]),x==="reset"){p=E;break}x==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return dE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>pM(v,E)))));case 0:{let E=Object.assign({},...u.map(([,F])=>F)),I=Object.keys(E),v={},x=t.map(([F,N])=>[F,Nse(N,r).value]),C=Prt(x,([F,N])=>{let U=Lse(N);return U!==0&&U!==3});if(C!==-1){let F=x.slice(C+1);for(let N of I)v[N]=hM(F,e,N,0,F.length)}else for(let F of I)v[F]=hM(x,e,F,p,x.length);return dE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Mse(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function f1(t){return dM(t)?t[1]:t}function YS(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(A1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var Prt,Ose,Use=Et(()=>{Prt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Ose=Symbol()});var WS={};zt(WS,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>mE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,yM.homedir)(),"AppData","Local"));return z.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return z.resolve(t,"yarn/berry")}return z.resolve(mE(),".yarn/berry")}function mE(){return ue.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=z.relative(e,t);return r&&!r.startsWith("..")&&!z.isAbsolute(r)}var yM,KS=Et(()=>{Dt();yM=ve("os")});var Gse=_(yE=>{"use strict";var aNt=ve("net"),xrt=ve("tls"),wM=ve("http"),_se=ve("https"),krt=ve("events"),lNt=ve("assert"),Qrt=ve("util");yE.httpOverHttp=Rrt;yE.httpsOverHttp=Frt;yE.httpOverHttps=Trt;yE.httpsOverHttps=Lrt;function Rrt(t){var e=new Rf(t);return e.request=wM.request,e}function Frt(t){var e=new Rf(t);return e.request=wM.request,e.createSocket=Hse,e.defaultPort=443,e}function Trt(t){var e=new Rf(t);return e.request=_se.request,e}function Lrt(t){var e=new Rf(t);return e.request=_se.request,e.createSocket=Hse,e.defaultPort=443,e}function Rf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=qse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Rf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),ah("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,x){process.nextTick(function(){h(I,v,x)})}function h(I,v,x){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){ah("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(x.length>0){ah("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return ah("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),ah(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Rf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function Hse(t,e){var r=this;Rf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=xrt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function qse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{jse.exports=Gse()});var Tf=_((Ff,zS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Wse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Nrt(t){return Wse.includes(t)}var Ort=["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",...Wse];function Mrt(t){return Ort.includes(t)}var Urt=["null","undefined","string","number","bigint","boolean","symbol"];function _rt(t){return Urt.includes(t)}function EE(t){return e=>typeof e===t}var{toString:Kse}=Object.prototype,p1=t=>{let e=Kse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&Se.domElement(t))return"HTMLElement";if(Mrt(e))return e},Zn=t=>e=>p1(e)===t;function Se(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(Se.observable(t))return"Observable";if(Se.array(t))return"Array";if(Se.buffer(t))return"Buffer";let e=p1(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"}Se.undefined=EE("undefined");Se.string=EE("string");var Hrt=EE("number");Se.number=t=>Hrt(t)&&!Se.nan(t);Se.bigint=EE("bigint");Se.function_=EE("function");Se.null_=t=>t===null;Se.class_=t=>Se.function_(t)&&t.toString().startsWith("class ");Se.boolean=t=>t===!0||t===!1;Se.symbol=EE("symbol");Se.numericString=t=>Se.string(t)&&!Se.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));Se.array=(t,e)=>Array.isArray(t)?Se.function_(e)?t.every(e):!0:!1;Se.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};Se.blob=t=>Zn("Blob")(t);Se.nullOrUndefined=t=>Se.null_(t)||Se.undefined(t);Se.object=t=>!Se.null_(t)&&(typeof t=="object"||Se.function_(t));Se.iterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};Se.asyncIterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};Se.generator=t=>{var e,r;return Se.iterable(t)&&Se.function_((e=t)===null||e===void 0?void 0:e.next)&&Se.function_((r=t)===null||r===void 0?void 0:r.throw)};Se.asyncGenerator=t=>Se.asyncIterable(t)&&Se.function_(t.next)&&Se.function_(t.throw);Se.nativePromise=t=>Zn("Promise")(t);var qrt=t=>{var e,r;return Se.function_((e=t)===null||e===void 0?void 0:e.then)&&Se.function_((r=t)===null||r===void 0?void 0:r.catch)};Se.promise=t=>Se.nativePromise(t)||qrt(t);Se.generatorFunction=Zn("GeneratorFunction");Se.asyncGeneratorFunction=t=>p1(t)==="AsyncGeneratorFunction";Se.asyncFunction=t=>p1(t)==="AsyncFunction";Se.boundFunction=t=>Se.function_(t)&&!t.hasOwnProperty("prototype");Se.regExp=Zn("RegExp");Se.date=Zn("Date");Se.error=Zn("Error");Se.map=t=>Zn("Map")(t);Se.set=t=>Zn("Set")(t);Se.weakMap=t=>Zn("WeakMap")(t);Se.weakSet=t=>Zn("WeakSet")(t);Se.int8Array=Zn("Int8Array");Se.uint8Array=Zn("Uint8Array");Se.uint8ClampedArray=Zn("Uint8ClampedArray");Se.int16Array=Zn("Int16Array");Se.uint16Array=Zn("Uint16Array");Se.int32Array=Zn("Int32Array");Se.uint32Array=Zn("Uint32Array");Se.float32Array=Zn("Float32Array");Se.float64Array=Zn("Float64Array");Se.bigInt64Array=Zn("BigInt64Array");Se.bigUint64Array=Zn("BigUint64Array");Se.arrayBuffer=Zn("ArrayBuffer");Se.sharedArrayBuffer=Zn("SharedArrayBuffer");Se.dataView=Zn("DataView");Se.enumCase=(t,e)=>Object.values(e).includes(t);Se.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;Se.urlInstance=t=>Zn("URL")(t);Se.urlString=t=>{if(!Se.string(t))return!1;try{return new URL(t),!0}catch{return!1}};Se.truthy=t=>Boolean(t);Se.falsy=t=>!t;Se.nan=t=>Number.isNaN(t);Se.primitive=t=>Se.null_(t)||_rt(typeof t);Se.integer=t=>Number.isInteger(t);Se.safeInteger=t=>Number.isSafeInteger(t);Se.plainObject=t=>{if(Kse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};Se.typedArray=t=>Nrt(p1(t));var Grt=t=>Se.safeInteger(t)&&t>=0;Se.arrayLike=t=>!Se.nullOrUndefined(t)&&!Se.function_(t)&&Grt(t.length);Se.inRange=(t,e)=>{if(Se.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(Se.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var jrt=1,Yrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];Se.domElement=t=>Se.object(t)&&t.nodeType===jrt&&Se.string(t.nodeName)&&!Se.plainObject(t)&&Yrt.every(e=>e in t);Se.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};Se.nodeStream=t=>Se.object(t)&&Se.function_(t.pipe)&&!Se.observable(t);Se.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>Se.integer(e)&&Math.abs(e%2)===t;Se.evenInteger=zse(0);Se.oddInteger=zse(1);Se.emptyArray=t=>Se.array(t)&&t.length===0;Se.nonEmptyArray=t=>Se.array(t)&&t.length>0;Se.emptyString=t=>Se.string(t)&&t.length===0;var Wrt=t=>Se.string(t)&&!/\S/.test(t);Se.emptyStringOrWhitespace=t=>Se.emptyString(t)||Wrt(t);Se.nonEmptyString=t=>Se.string(t)&&t.length>0;Se.nonEmptyStringAndNotWhitespace=t=>Se.string(t)&&!Se.emptyStringOrWhitespace(t);Se.emptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length===0;Se.nonEmptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length>0;Se.emptySet=t=>Se.set(t)&&t.size===0;Se.nonEmptySet=t=>Se.set(t)&&t.size>0;Se.emptyMap=t=>Se.map(t)&&t.size===0;Se.nonEmptyMap=t=>Se.map(t)&&t.size>0;Se.propertyKey=t=>Se.any([Se.string,Se.number,Se.symbol],t);Se.formData=t=>Zn("FormData")(t);Se.urlSearchParams=t=>Zn("URLSearchParams")(t);var Vse=(t,e,r)=>{if(!Se.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)};Se.any=(t,...e)=>(Se.array(t)?t:[t]).some(o=>Vse(Array.prototype.some,o,e));Se.all=(t,...e)=>Vse(Array.prototype.every,t,e);var Mt=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${Se(u)}\``))].join(", ")}`:`received value of type \`${Se(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Mt(Se.undefined(t),"undefined",t),string:t=>Mt(Se.string(t),"string",t),number:t=>Mt(Se.number(t),"number",t),bigint:t=>Mt(Se.bigint(t),"bigint",t),function_:t=>Mt(Se.function_(t),"Function",t),null_:t=>Mt(Se.null_(t),"null",t),class_:t=>Mt(Se.class_(t),"Class",t),boolean:t=>Mt(Se.boolean(t),"boolean",t),symbol:t=>Mt(Se.symbol(t),"symbol",t),numericString:t=>Mt(Se.numericString(t),"string with a number",t),array:(t,e)=>{Mt(Se.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Mt(Se.buffer(t),"Buffer",t),blob:t=>Mt(Se.blob(t),"Blob",t),nullOrUndefined:t=>Mt(Se.nullOrUndefined(t),"null or undefined",t),object:t=>Mt(Se.object(t),"Object",t),iterable:t=>Mt(Se.iterable(t),"Iterable",t),asyncIterable:t=>Mt(Se.asyncIterable(t),"AsyncIterable",t),generator:t=>Mt(Se.generator(t),"Generator",t),asyncGenerator:t=>Mt(Se.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Mt(Se.nativePromise(t),"native Promise",t),promise:t=>Mt(Se.promise(t),"Promise",t),generatorFunction:t=>Mt(Se.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Mt(Se.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Mt(Se.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Mt(Se.boundFunction(t),"Function",t),regExp:t=>Mt(Se.regExp(t),"RegExp",t),date:t=>Mt(Se.date(t),"Date",t),error:t=>Mt(Se.error(t),"Error",t),map:t=>Mt(Se.map(t),"Map",t),set:t=>Mt(Se.set(t),"Set",t),weakMap:t=>Mt(Se.weakMap(t),"WeakMap",t),weakSet:t=>Mt(Se.weakSet(t),"WeakSet",t),int8Array:t=>Mt(Se.int8Array(t),"Int8Array",t),uint8Array:t=>Mt(Se.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Mt(Se.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Mt(Se.int16Array(t),"Int16Array",t),uint16Array:t=>Mt(Se.uint16Array(t),"Uint16Array",t),int32Array:t=>Mt(Se.int32Array(t),"Int32Array",t),uint32Array:t=>Mt(Se.uint32Array(t),"Uint32Array",t),float32Array:t=>Mt(Se.float32Array(t),"Float32Array",t),float64Array:t=>Mt(Se.float64Array(t),"Float64Array",t),bigInt64Array:t=>Mt(Se.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Mt(Se.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Mt(Se.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Mt(Se.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Mt(Se.dataView(t),"DataView",t),enumCase:(t,e)=>Mt(Se.enumCase(t,e),"EnumCase",t),urlInstance:t=>Mt(Se.urlInstance(t),"URL",t),urlString:t=>Mt(Se.urlString(t),"string with a URL",t),truthy:t=>Mt(Se.truthy(t),"truthy",t),falsy:t=>Mt(Se.falsy(t),"falsy",t),nan:t=>Mt(Se.nan(t),"NaN",t),primitive:t=>Mt(Se.primitive(t),"primitive",t),integer:t=>Mt(Se.integer(t),"integer",t),safeInteger:t=>Mt(Se.safeInteger(t),"integer",t),plainObject:t=>Mt(Se.plainObject(t),"plain object",t),typedArray:t=>Mt(Se.typedArray(t),"TypedArray",t),arrayLike:t=>Mt(Se.arrayLike(t),"array-like",t),domElement:t=>Mt(Se.domElement(t),"HTMLElement",t),observable:t=>Mt(Se.observable(t),"Observable",t),nodeStream:t=>Mt(Se.nodeStream(t),"Node.js Stream",t),infinite:t=>Mt(Se.infinite(t),"infinite number",t),emptyArray:t=>Mt(Se.emptyArray(t),"empty array",t),nonEmptyArray:t=>Mt(Se.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Mt(Se.emptyString(t),"empty string",t),emptyStringOrWhitespace:t=>Mt(Se.emptyStringOrWhitespace(t),"empty string or whitespace",t),nonEmptyString:t=>Mt(Se.nonEmptyString(t),"non-empty string",t),nonEmptyStringAndNotWhitespace:t=>Mt(Se.nonEmptyStringAndNotWhitespace(t),"non-empty string and not whitespace",t),emptyObject:t=>Mt(Se.emptyObject(t),"empty object",t),nonEmptyObject:t=>Mt(Se.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Mt(Se.emptySet(t),"empty set",t),nonEmptySet:t=>Mt(Se.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Mt(Se.emptyMap(t),"empty map",t),nonEmptyMap:t=>Mt(Se.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Mt(Se.propertyKey(t),"PropertyKey",t),formData:t=>Mt(Se.formData(t),"FormData",t),urlSearchParams:t=>Mt(Se.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Mt(Se.evenInteger(t),"even integer",t),oddInteger:t=>Mt(Se.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Mt(Se.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Mt(Se.inRange(t,e),"in range",t),any:(t,...e)=>Mt(Se.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Mt(Se.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(Se,{class:{value:Se.class_},function:{value:Se.function_},null:{value:Se.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=Se;zS.exports=Se;zS.exports.default=Se;zS.exports.assert=Ff.assert});var Jse=_((ANt,BM)=>{"use strict";var VS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},CE=class{static fn(e){return(...r)=>new CE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new VS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(CE.prototype,Promise.prototype);BM.exports=CE;BM.exports.CancelError=VS});var Xse=_((PM,DM)=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});function Krt(t){return t.encrypted}var vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),Krt(t)&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};PM.default=vM;DM.exports=vM;DM.exports.default=vM});var Zse=_((bM,xM)=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var zrt=Xse(),Vrt=Number(process.versions.node.split(".")[0]),SM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Vrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),zrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};bM.default=SM;xM.exports=SM;xM.exports.default=SM});var soe=_((fNt,RM)=>{"use strict";var{V4MAPPED:Jrt,ADDRCONFIG:Xrt,ALL:ioe,promises:{Resolver:$se},lookup:Zrt}=ve("dns"),{promisify:kM}=ve("util"),$rt=ve("os"),wE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),eoe=Symbol("expires"),ent=typeof ioe=="number",toe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},tnt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},roe=()=>{let t=!1,e=!1;for(let r of Object.values($rt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},rnt=t=>Symbol.iterator in t,noe={ttl:!0},nnt={all:!0},JS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new $se,lookup:u=Zrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof $se?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=roe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Jrt&&(ent&&r.hints&ioe||a.length===0)?tnt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Xrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,noe),this._resolve6(e,noe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[eoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}rnt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,nnt);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[eoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[wE](r,o))}uninstall(e){if(toe(e),e[wE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[wE],delete e[wE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=roe(),(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()}};RM.exports=JS;RM.exports.default=JS});var loe=_((pNt,FM)=>{"use strict";var int=typeof URL>"u"?ve("url").URL:URL,snt="text/plain",ont="us-ascii",ooe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),ant=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(x=>x.trim());return I==="charset"&&(v=v.toLowerCase(),v===ont)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==snt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},aoe=(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 ant(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new int(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];ooe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])ooe(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};FM.exports=aoe;FM.exports.default=aoe});var Aoe=_((hNt,uoe)=>{uoe.exports=coe;function coe(t,e){if(t&&e)return coe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var foe=Aoe();TM.exports=foe(XS);TM.exports.strict=foe(poe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return poe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function poe(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 NM=_((dNt,goe)=>{var lnt=LM(),cnt=function(){},unt=function(t){return t.setHeader&&typeof t.abort=="function"},Ant=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},hoe=function(t,e,r){if(typeof e=="function")return hoe(t,null,e);e||(e={}),r=lnt(r||cnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},x=function(){t.req.on("finish",p)};return unt(t)?(t.on("complete",p),t.on("abort",v),t.req?x():t.on("request",x)):u&&!o&&(t.on("end",A),t.on("close",A)),Ant(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",x),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};goe.exports=hoe});var yoe=_((mNt,moe)=>{var fnt=LM(),pnt=NM(),OM=ve("fs"),h1=function(){},hnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},gnt=function(t){return!hnt||!OM?!1:(t instanceof(OM.ReadStream||h1)||t instanceof(OM.WriteStream||h1))&&ZS(t.close)},dnt=function(t){return t.setHeader&&ZS(t.abort)},mnt=function(t,e,r,o){o=fnt(o);var a=!1;t.on("close",function(){a=!0}),pnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,gnt(t))return t.close(h1);if(dnt(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},doe=function(t){t()},ynt=function(t,e){return t.pipe(e)},Ent=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||h1)&&t.pop()||h1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return mnt(a,u,A,function(p){r||(r=p),p&&o.forEach(doe),!u&&(o.forEach(doe),e(r))})});return t.reduce(ynt)};moe.exports=Ent});var Coe=_((yNt,Eoe)=>{"use strict";var{PassThrough:Cnt}=ve("stream");Eoe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Cnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var woe=_((ENt,IE)=>{"use strict";var wnt=yoe(),Int=Coe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function eb(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=wnt(t,Int(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}IE.exports=eb;IE.exports.default=eb;IE.exports.buffer=(t,e)=>eb(t,{...e,encoding:"buffer"});IE.exports.array=(t,e)=>eb(t,{...e,array:!0});IE.exports.MaxBufferError=$S});var Boe=_((wNt,Ioe)=>{"use strict";var Bnt=new Set([200,203,204,206,300,301,308,404,405,410,414,501]),vnt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Pnt=new Set([500,502,503,504]),Dnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Snt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function bnt(t){return t?Pnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let o of r){let[a,n]=o.split(/=/,2);e[a.trim()]=n===void 0?!0:n.trim().replace(/^"|"$/g,"")}return e}function xnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Ioe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(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=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":xnt(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())&&vnt.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||Bnt.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=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)Dnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(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 Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(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()&&bnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!Snt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tb=_((INt,voe)=>{"use strict";voe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Doe=_((BNt,Poe)=>{"use strict";var knt=ve("stream").Readable,Qnt=tb(),UM=class extends knt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Qnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Poe.exports=UM});var boe=_((vNt,Soe)=>{"use strict";var Rnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Soe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Rnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var koe=_((PNt,xoe)=>{"use strict";var Fnt=ve("stream").PassThrough,Tnt=boe(),Lnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Fnt;return Tnt(t,e),t.pipe(e)};xoe.exports=Lnt});var Qoe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.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 Loe=_((SNt,Toe)=>{"use strict";var Nnt=ve("events"),Roe=Qoe(),Ont=t=>{let e={redis:"@keyv/redis",rediss:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql",etcd:"@keyv/etcd",offline:"@keyv/offline",tiered:"@keyv/tiered"};if(t.adapter||t.uri){let r=t.adapter||/^[^:+]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},Foe=["sqlite","postgres","mysql","mongo","redis","tiered"],HM=class extends Nnt{constructor(e,{emitErrors:r=!0,...o}={}){if(super(),this.opts={namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse,...typeof e=="string"?{uri:e}:e,...o},!this.opts.store){let n={...this.opts};this.opts.store=Ont(n)}if(this.opts.compression){let n=this.opts.compression;this.opts.serialize=n.serialize.bind(n),this.opts.deserialize=n.deserialize.bind(n)}typeof this.opts.store.on=="function"&&r&&this.opts.store.on("error",n=>this.emit("error",n)),this.opts.store.namespace=this.opts.namespace;let a=n=>async function*(){for await(let[u,A]of typeof n=="function"?n(this.opts.store.namespace):n){let p=await this.opts.deserialize(A);if(!(this.opts.store.namespace&&!u.includes(this.opts.store.namespace))){if(typeof p.expires=="number"&&Date.now()>p.expires){this.delete(u);continue}yield[this._getKeyUnprefix(u),p.value]}}};typeof this.opts.store[Symbol.iterator]=="function"&&this.opts.store instanceof Map?this.iterator=a(this.opts.store):typeof this.opts.store.iterator=="function"&&this.opts.store.opts&&this._checkIterableAdaptar()&&(this.iterator=a(this.opts.store.iterator.bind(this.opts.store)))}_checkIterableAdaptar(){return Foe.includes(this.opts.store.opts.dialect)||Foe.findIndex(e=>this.opts.store.opts.url.includes(e))>=0}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}_getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}_getKeyUnprefix(e){return e.split(":").splice(1).join(":")}get(e,r){let{store:o}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefixArray(e):this._getKeyPrefix(e);if(a&&o.getMany===void 0){let u=[];for(let A of n)u.push(Promise.resolve().then(()=>o.get(A)).then(p=>typeof p=="string"?this.opts.deserialize(p):this.opts.compression?this.opts.deserialize(p):p).then(p=>{if(p!=null)return typeof p.expires=="number"&&Date.now()>p.expires?this.delete(A).then(()=>{}):r&&r.raw?p:p.value}));return Promise.allSettled(u).then(A=>{let p=[];for(let h of A)p.push(h.value);return p})}return Promise.resolve().then(()=>a?o.getMany(n):o.get(n)).then(u=>typeof u=="string"?this.opts.deserialize(u):this.opts.compression?this.opts.deserialize(u):u).then(u=>{if(u!=null)return a?u.map((A,p)=>{if(typeof A=="string"&&(A=this.opts.deserialize(A)),A!=null){if(typeof A.expires=="number"&&Date.now()>A.expires){this.delete(e[p]).then(()=>{});return}return r&&r.raw?A:A.value}}):typeof u.expires=="number"&&Date.now()>u.expires?this.delete(e).then(()=>{}):r&&r.raw?u:u.value})}set(e,r,o){let a=this._getKeyPrefix(e);typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let u=typeof o=="number"?Date.now()+o:null;return typeof r=="symbol"&&this.emit("error","symbol cannot be serialized"),r={value:r,expires:u},this.opts.serialize(r)}).then(u=>n.set(a,u,o)).then(()=>!0)}delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKeyPrefixArray(e);if(r.deleteMany===void 0){let n=[];for(let u of a)n.push(r.delete(u));return Promise.allSettled(n).then(u=>u.every(A=>A.value===!0))}return Promise.resolve().then(()=>r.deleteMany(a))}let o=this._getKeyPrefix(e);return Promise.resolve().then(()=>r.delete(o))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}has(e){let r=this._getKeyPrefix(e),{store:o}=this.opts;return Promise.resolve().then(async()=>typeof o.has=="function"?o.has(r):await o.get(r)!==void 0)}disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")return e.disconnect()}};Toe.exports=HM});var Moe=_((xNt,Ooe)=>{"use strict";var Mnt=ve("events"),rb=ve("url"),Unt=loe(),_nt=woe(),qM=Boe(),Noe=Doe(),Hnt=tb(),qnt=koe(),Gnt=Loe(),Gc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Gnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=GM(rb.parse(r)),r={};else if(r instanceof rb.URL)a=GM(rb.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),x=v.length>0?`?${v.join("?")}`:"";a=GM({...r,pathname:I,search:x})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...jnt(a)},r.headers=Hnt(r.headers);let n=new Mnt,u=Unt(rb.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,x,C=new Promise(N=>{x=()=>{v||(v=!0,N())}}),F=N=>{if(p&&!I.forceRefresh){N.status=N.statusCode;let V=qM.fromObject(p.cachePolicy).revalidatedPolicy(I,N);if(!V.modified){let te=V.policy.responseHeaders();N=new Noe(p.statusCode,te,p.body,p.url),N.cachePolicy=V.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new qM(I,N,I),N.fromCache=!1);let U;I.cache&&N.cachePolicy.storable()?(U=qnt(N),(async()=>{try{let V=_nt.buffer(N);if(await Promise.race([C,new Promise(ce=>N.once("end",ce))]),v)return;let te=await V,le={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:te},ae=I.strictTtl?N.cachePolicy.timeToLive():void 0;I.maxTtl&&(ae=ae?Math.min(ae,I.maxTtl):I.maxTtl),await this.cache.set(A,le,ae)}catch(V){n.emit("error",new Gc.CacheError(V))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(V){n.emit("error",new Gc.CacheError(V))}})(),n.emit("response",U||N),typeof o=="function"&&o(U||N)};try{let N=e(I,F);N.once("error",x),N.once("abort",x),n.emit("request",N)}catch(N){n.emit("error",new Gc.RequestError(N))}};return(async()=>{let I=async x=>{await Promise.resolve();let C=x.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(x);let F=qM.fromObject(C.cachePolicy);if(F.satisfiesWithoutRevalidation(x)&&!x.forceRefresh){let N=F.responseHeaders(),U=new Noe(C.statusCode,N,C.body,C.url);U.cachePolicy=F,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,x.headers=F.revalidationHeaders(x),E(x)},v=x=>n.emit("error",new Gc.CacheError(x));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(x){r.automaticFailover&&!h&&E(r),n.emit("error",new Gc.CacheError(x))}})(),n}}};function jnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function GM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}Gc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};Gc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=Gc});var _oe=_((RNt,Uoe)=>{"use strict";var Ynt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Uoe.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(Ynt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((FNt,Hoe)=>{"use strict";var{Transform:Wnt,PassThrough:Knt}=ve("stream"),jM=ve("zlib"),znt=_oe();Hoe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof jM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Wnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Knt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?jM.createBrotliDecompress():jM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),znt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((TNt,Goe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=YM});var zM=_((LNt,Koe)=>{"use strict";var Vnt=ve("events"),Jnt=ve("tls"),Xnt=ve("http2"),Znt=WM(),ea=Symbol("currentStreamsCount"),joe=Symbol("request"),Kl=Symbol("cachedOriginSet"),BE=Symbol("gracefullyClosing"),$nt=["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"],eit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},tit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Kl].lengthe[Kl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Woe(r)},rit=(t,e)=>{for(let r of t)e[Kl].lengthr[Kl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Woe(e)},Yoe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[rA.kCurrentStreamsCount]{t[BE]=!0,t[ea]===0&&t.close()},rA=class extends Vnt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new Znt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of $nt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=rA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,x;for(let C of E){let F=C.remoteSettings.maxConcurrentStreams;if(F=F||C[BE]||C.destroyed)continue;x||(I=F),N>v&&(x=C,v=N)}}if(x){if(o.length!==1){for(let{reject:C}of o){let F=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(F)}return}o[0].resolve(x);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=Xnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[BE]=!1;let x=()=>v[ea]{this.tlsSessionCache.set(E,N)}),v.once("error",N=>{for(let{reject:U}of o)U(N);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[u];N.splice(N.indexOf(v),1),N.length===0&&delete this.sessions[u]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(N);p()}this._tryToCreateNewSession(u,A)});let F=()=>{if(!(!(u in this.queue)||!x())){for(let N of v[Kl])if(N in this.queue[u]){let{listeners:U}=this.queue[u][N];for(;U.length!==0&&x();)U.shift().resolve(v);let V=this.queue[u];if(V[N].listeners.length===0&&(delete V[N],Object.keys(V).length===0)){delete this.queue[u];break}if(!x())break}}};v.on("origin",()=>{v[Kl]=v.originSet,x()&&(F(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of o)U.reject(N);v.destroy();return}v[Kl]=v.originSet;{let N=this.sessions;if(u in N){let U=N[u];U.splice(eit(U,v,tit),0,v)}else N[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),F(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{F(),KM(this.sessions[u],v)})}),v[joe]=v.request,v.request=(N,U)=>{if(v[BE])throw new Error("The session is gracefully closing. No new streams are allowed.");let V=v[joe](N,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,V.once("close",()=>{if(C=x(),--v[ea],!v.destroyed&&!v.closed&&(rit(this.sessions[u],v),x()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[BE])?v.close():(KM(this.sessions[u],v),F())}}),V}}catch(v){for(let x of o)x.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return rA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Jnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Yoe({agent:this,isFree:!0})}get busySessions(){return Yoe({agent:this,isFree:!1})}};rA.kCurrentStreamsCount=ea;rA.kGracefullyClosing=BE;Koe.exports={Agent:rA,globalAgent:new rA}});var JM=_((NNt,zoe)=>{"use strict";var{Readable:nit}=ve("stream"),VM=class extends nit{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()}};zoe.exports=VM});var XM=_((ONt,Voe)=>{"use strict";Voe.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 Xoe=_((MNt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var $oe=_((UNt,Zoe)=>{"use strict";Zoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var tae=_((HNt,eae)=>{"use strict";var vE=(t,e,r)=>{eae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};vE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});vE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);vE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);vE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);vE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);vE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((qNt,lae)=>{"use strict";var iit=ve("http2"),{Writable:sit}=ve("stream"),{Agent:rae,globalAgent:oit}=zM(),ait=JM(),lit=XM(),cit=Xoe(),uit=$oe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:Ait,ERR_HTTP_HEADERS_SENT:nae,ERR_INVALID_HTTP_TOKEN:fit,ERR_HTTP_INVALID_HEADER_VALUE:pit,ERR_INVALID_CHAR:hit}=tae(),{HTTP2_HEADER_STATUS:iae,HTTP2_HEADER_METHOD:sae,HTTP2_HEADER_PATH:oae,HTTP2_METHOD_CONNECT:git}=iit.constants,ko=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),aae=Symbol("options"),nb=Symbol("flushedHeaders"),g1=Symbol("jobs"),dit=/^[\^`\-\w!#$%&*+.|~]+$/,mit=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends sit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=lit(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new rae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new rae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=oit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new Ait(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[ko]=Object.create(null),this[g1]=[],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[ko])&&(this[ko].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[aae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[ko]||(this[ko][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[ko]||(this[ko][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nb]=!1}get method(){return this[ko][sae]}set method(e){e&&(this[ko][sae]=e.toUpperCase())}get path(){return this[ko][oae]}set path(e){e&&(this[ko][oae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[g1].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[g1].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[nb]||this.destroyed)return;this[nb]=!0;let e=this.method===git,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||cit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new ait(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[iae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[iae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[g1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[ko]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[aae],this[ko]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[ko][e.toLowerCase()]}get headersSent(){return this[nb]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new nae("remove");delete this[ko][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new nae("set");if(typeof e!="string"||!dit.test(e)&&!uit(e))throw new fit("Header name",e);if(typeof r>"u")throw new pit(r,e);if(mit.test(r))throw new hit("header content",e);this[ko][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[g1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};lae.exports=t4});var uae=_((GNt,cae)=>{"use strict";var yit=ve("tls");cae.exports=(t={},e=yit.connect)=>new Promise((r,o)=>{let a=!1,n,u=async()=>{await p,n.off("timeout",A),n.off("error",o),t.resolveSocket?(r({alpnProtocol:n.alpnProtocol,socket:n,timeout:a}),a&&(await Promise.resolve(),n.emit("timeout"))):(n.destroy(),r({alpnProtocol:n.alpnProtocol,timeout:a}))},A=async()=>{a=!0,u()},p=(async()=>{try{n=await e(t,u),n.on("error",o),n.once("timeout",A)}catch(h){o(h)}})()})});var fae=_((jNt,Aae)=>{"use strict";var Eit=ve("net");Aae.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]),Eit.isIP(e)?"":e}});var gae=_((YNt,i4)=>{"use strict";var pae=ve("http"),n4=ve("https"),Cit=uae(),wit=WM(),Iit=r4(),Bit=fae(),vit=XM(),ib=new wit({maxSize:100}),d1=new Map,hae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},Pit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ib.has(e)){if(d1.has(e))return(await d1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Cit(t);d1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ib.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?hae(o,n,t):n.destroy():A.createConnection===p?hae(A,n,t):n.destroy()}return d1.delete(e),u}catch(n){throw d1.delete(e),n}}return ib.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=vit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Bit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:pae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await Pit(e)==="h2"?(a&&(e.agent=a.http2),new Iit(e,r)):pae.request(e,r)};i4.exports.protocolCache=ib});var mae=_((WNt,dae)=>{"use strict";var Dit=ve("http2"),Sit=zM(),s4=r4(),bit=JM(),xit=gae(),kit=(t,e,r)=>new s4(t,e,r),Qit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};dae.exports={...Dit,ClientRequest:s4,IncomingMessage:bit,...Sit,request:kit,get:Qit,auto:xit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var yae=Tf();o4.default=t=>yae.default.nodeStream(t)&&yae.default.function_(t.getBoundary)});var Iae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Cae=ve("fs"),wae=ve("util"),Eae=Tf(),Rit=a4(),Fit=wae.promisify(Cae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Eae.default.string(t))return Buffer.byteLength(t);if(Eae.default.buffer(t))return t.length;if(Rit.default(t))return wae.promisify(t.getLength.bind(t))();if(t instanceof Cae.ReadStream){let{size:r}=await Fit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Tit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Tit});var Bae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.TimeoutError=void 0;var Lit=ve("net"),Nit=Bae(),vae=Symbol("reentry"),Oit=()=>{},sb=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};m1.TimeoutError=sb;m1.default=(t,e,r)=>{if(vae in t)return Oit;t[vae]=!0;let o=[],{once:a,unhandleAll:n}=Nit.default(),u=(I,v,x)=>{var C;let F=setTimeout(v,I,I,x);(C=F.unref)===null||C===void 0||C.call(F);let N=()=>{clearTimeout(F)};return o.push(N),N},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sb(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:x}=t;if(I.connecting){let C=Boolean(x??Lit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let F=u(e.lookup,h,"lookup");a(I,"lookup",F)}if(typeof e.connect<"u"){let F=()=>u(e.connect,h,"connect");C?a(I,"connect",F()):a(I,"lookup",N=>{N===null&&a(I,"connect",F())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let F=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",F)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Dae=Tf();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Dae.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 Dae.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 bae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Mit=ve("url"),Uit=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Mit.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 Uit)e[n]&&(a[n]=e[n].toString());return a}});var xae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=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)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var _it=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=_it});var Qae=_(Sd=>{"use strict";Object.defineProperty(Sd,"__esModule",{value:!0});Sd.dnsLookupIpVersionToFamily=Sd.isDnsLookupIpVersion=void 0;var kae={auto:0,ipv4:4,ipv6:6};Sd.isDnsLookupIpVersion=t=>t in kae;Sd.dnsLookupIpVersionToFamily=t=>{if(Sd.isDnsLookupIpVersion(t))return kae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(ob=>{"use strict";Object.defineProperty(ob,"__esModule",{value:!0});ob.isResponseOk=void 0;ob.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Fae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Rae=new Set;E4.default=t=>{Rae.has(t)||(Rae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Tae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Tf(),Hit=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=Hit});var Lae=_(y1=>{"use strict";Object.defineProperty(y1,"__esModule",{value:!0});y1.retryAfterStatusCodes=void 0;y1.retryAfterStatusCodes=new Set([413,429,503]);var qit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};y1.default=qit});var w1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=ve("util"),Oae=ve("stream"),Git=ve("fs"),lh=ve("url"),Mae=ve("http"),w4=ve("http"),jit=ve("https"),Yit=Zse(),Wit=soe(),Uae=Moe(),Kit=qoe(),zit=mae(),Vit=tb(),st=Tf(),Jit=Iae(),_ae=a4(),Xit=u4(),Hae=Pae(),Zit=Sae(),qae=bae(),$it=xae(),est=m4(),Gae=Qae(),tst=y4(),ch=Fae(),rst=Tae(),nst=Lae(),I4,Zs=Symbol("request"),ub=Symbol("response"),PE=Symbol("responseSize"),DE=Symbol("downloadedSize"),SE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ab=Symbol("serverResponsesPiped"),jae=Symbol("unproxyEvents"),Yae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Wae=Symbol("startedReading"),xE=Symbol("stopReading"),lb=Symbol("triggerRead"),uh=Symbol("body"),E1=Symbol("jobs"),Kae=Symbol("originalResponse"),zae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ist=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function sst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function ost(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new $it.default,ast=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),lst=new Set([300,301,302,303,304,307,308]),cst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of cst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Vi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof mb?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[ub]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` `).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` `).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` `)}${A.reverse().join(` -`)}`}}};Bn.RequestError=zi;var ub=class extends zi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ub;var Ab=class extends zi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ab;var fb=class extends zi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fb;var pb=class extends zi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=pb;var hb=class extends zi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hb;var E1=class extends zi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=E1;var gb=class extends zi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gb;var cst=["socket","connect","continue","information","upgrade","timeout"],db=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[bE]=0,this[kE]=0,this.requestInitialized=!1,this[ob]=new Set,this.redirects=[],this[QE]=!1,this[ab]=!1,this[y1]=[],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 w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof qit.ReadStream&&await ost(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[Zs])===null||h===void 0||h.destroy();return}for(let I of this[y1])I();this[y1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof zi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new lh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let x;if(st.default.string(r.searchParams)||r.searchParams instanceof lh.URLSearchParams)x=new lh.URLSearchParams(r.searchParams);else{ist(r.searchParams),x=new lh.URLSearchParams;for(let C in r.searchParams){let R=r.searchParams[C];R===null?x.append(C,""):R!==void 0&&x.append(C,R)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,R)=>{x.has(R)||x.append(R,C)}),r.searchParams=x}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:x}=r;Object.defineProperty(r,"prefixUrl",{set:R=>{let N=r.url;if(!N.href.startsWith(R))throw new Error(`Cannot change \`prefixUrl\` from ${x} to ${R}: ${N.href}`);r.url=new lh.URL(R+N.href.slice(x.length)),x=R},get:()=>x});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new lh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gb(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:x,getCookieString:C}=E;st.assert.function_(x),st.assert.function_(C),x.length===4&&C.length===0&&(x=Nae.promisify(x.bind(r.cookieJar)),C=Nae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:x,getCookieString:C})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Uae((x,C)=>{let R=x[Zs](x,C);return st.default.promise(R)&&(R.once=(N,U)=>{if(N==="error")R.catch(U);else if(N==="abort")(async()=>{try{(await R).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${N}`);return R}),R},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new Yit.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let x of Bn.knownHookEvents)if(x in r.hooks)if(st.default.array(r.hooks[x]))r.hooks[x]=[...r.hooks[x]];else throw new TypeError(`Parameter \`${x}\` must be an Array, got ${st.default(r.hooks[x])}`);else r.hooks[x]=[];if(o&&!v)for(let x of Bn.knownHookEvents)o.hooks[x].length>0&&(r.hooks[x]=[...o.hooks[x],...r.hooks[x]]);if("family"in r&&ch.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ch.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ch.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ch.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ch.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ch.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ch.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ch.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 x in r.agent)if(x!=="http"&&x!=="https"&&x!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${x}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),tst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!_ae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(_ae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[uh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[uh]=new lh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[uh]=e.stringifyJson(e.json));let h=await Vit.default(this[uh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=Wit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Mae.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[Yae]=n.isFromCache,this[SE]=Number(e.headers["content-length"])||void 0,this[lb]=e,e.once("end",()=>{this[SE]=this[bE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new E1(A,this))}),e.once("aborted",()=>{this._beforeError(new E1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&ast.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[jae]()),(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[uh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ub(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new lh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!est.isResponseOk(n)){this._beforeError(new Ab(n));return}e.on("readable",()=>{this[ab]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ob])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;jit.default(e),this[B4]=Hae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof Hae.TimeoutError?new hb(p,this.timings,this):new zi(p.message,p,this),this._beforeError(p)}),this[jae]=Jit.default(e,this,cst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[uh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new pb(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,Xit.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=nst?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let V=await U(u);if(!st.default.undefined(V)){u.request=()=>V;break}}u.body&&this[uh]!==u.body&&(this[uh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:V,path:te}=U.groups;Object.assign(u,{socketPath:V,path:te,host:""})}}let v=I.protocol==="https:",x;u.http2?x=Kit.auto:x=v?Git.request:Mae.request;let C=(e=u.request)!==null&&e!==void 0?e:x,R=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let N=u;if(N.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,N.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{N.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(N.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(N.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(N.ca=u.https.certificateAuthority),u.https.certificate&&(N.cert=u.https.certificate),u.https.key&&(N.key=u.https.key),u.https.passphrase&&(N.passphrase=u.https.passphrase),u.https.pfx&&(N.pfx=u.https.pfx));try{let U=await R(I,N);st.default.undefined(U)&&(U=x(I,N)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete N.rejectUnauthorized,u.https.checkServerIdentity&&delete N.checkServerIdentity,u.https.certificateAuthority&&delete N.ca,u.https.certificate&&delete N.cert,u.https.key&&delete N.key,u.https.passphrase&&delete N.passphrase,u.https.pfx&&delete N.pfx),sst(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 Uae.CacheError?new fb(U,this):new zi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new zi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[QE])return;let{options:r}=this,o=this.retryCount+1;this[QE]=!0,e instanceof zi||(e=new zi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await $it.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:rst.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new zi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new zi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[zae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[ab]=!0;let e=this[lb];if(e&&!this[QE]){e.readableLength&&(this[ab]=!1);let r;for(;(r=e.read())!==null;){this[bE]+=r.length,this[Wae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[y1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[kE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[kE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[y1].push(r)}_destroy(e,r){var o;this[QE]=!0,clearTimeout(this[zae]),Zs in this&&(this[B4](),!((o=this[lb])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof zi)&&(e=new zi(e.message,e,this)),r(e)}get _isAboutToError(){return this[QE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[SE]?e=this[bE]/this[SE]:this[SE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[SE]}}get uploadProgress(){let e;return this[xE]?e=this[kE]/this[xE]:this[xE]===this[kE]?e=1:e=0,{percent:e,transferred:this[kE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Yae]}pipe(e,r){if(this[Wae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ob].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ob].delete(e),super.unpipe(e),this}};Bn.default=db});var w1=_(jc=>{"use strict";var ust=jc&&jc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Ast=jc&&jc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&ust(e,t,r)};Object.defineProperty(jc,"__esModule",{value:!0});jc.CancelError=jc.ParseError=void 0;var Vae=C1(),D4=class extends Vae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};jc.ParseError=D4;var P4=class extends Vae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};jc.CancelError=P4;Ast(C1(),jc)});var Xae=_(S4=>{"use strict";Object.defineProperty(S4,"__esModule",{value:!0});var Jae=w1(),fst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};S4.default=fst});var b4=_(Ah=>{"use strict";var pst=Ah&&Ah.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),hst=Ah&&Ah.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&pst(e,t,r)};Object.defineProperty(Ah,"__esModule",{value:!0});var gst=ve("events"),dst=Tf(),mst=Jse(),mb=w1(),Zae=Xae(),$ae=C1(),yst=u4(),Est=m4(),ele=y4(),Cst=["request","response","redirect","uploadProgress","downloadProgress"];function tle(t){let e,r,o=new gst.EventEmitter,a=new mst((u,A,p)=>{let h=E=>{let I=new $ae.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mb.CancelError(I))),e=I,I.once("response",async C=>{var R;if(C.retryCount=E,C.request.aborted)return;let N;try{N=await Est.default(I),C.rawBody=N}catch{return}if(I._isAboutToError)return;let U=((R=C.headers["content-encoding"])!==null&&R!==void 0?R:"").toLowerCase(),V=["gzip","deflate","br"].includes(U),{options:te}=I;if(V&&!te.decompress)C.body=N;else try{C.body=Zae.default(C,te.responseType,te.parseJson,te.encoding)}catch(ae){if(C.body=N.toString(),ele.isResponseOk(C)){I._beforeError(ae);return}}try{for(let[ae,fe]of te.hooks.afterResponse.entries())C=await fe(C,async ue=>{let me=$ae.default.normalizeArguments(void 0,{...ue,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ae);for(let Be of me.hooks.beforeRetry)await Be(me);let he=tle(me);return p(()=>{he.catch(()=>{}),he.cancel()}),he})}catch(ae){I._beforeError(new mb.RequestError(ae.message,ae,I));return}if(!ele.isResponseOk(C)){I._beforeError(new mb.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:R}=I;if(C instanceof mb.HTTPError&&!R.throwHttpErrors){let{response:N}=C;u(I.options.resolveBodyOnly?N.body:N);return}A(C)};I.once("error",v);let x=I.options.body;I.once("retry",(C,R)=>{var N,U;if(x===((N=R.request)===null||N===void 0?void 0:N.options.body)&&dst.default.nodeStream((U=R.request)===null||U===void 0?void 0:U.options.body)){v(R);return}h(C)}),yst.default(I,o,Cst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Zae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}Ah.default=tle;hst(w1(),Ah)});var rle=_(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});var wst=w1();function Ist(t,...e){let r=(async()=>{if(t instanceof wst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}x4.default=Ist});var sle=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var nle=Tf();function ile(t){for(let e of Object.values(t))(nle.default.plainObject(e)||nle.default.array(e))&&ile(e);return Object.freeze(t)}k4.default=ile});var ale=_(ole=>{"use strict";Object.defineProperty(ole,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var Bst=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),vst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Bst(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var lle=Tf(),zl=b4(),Dst=rle(),Eb=C1(),Pst=sle(),Sst={RequestError:zl.RequestError,CacheError:zl.CacheError,ReadError:zl.ReadError,HTTPError:zl.HTTPError,MaxRedirectsError:zl.MaxRedirectsError,TimeoutError:zl.TimeoutError,ParseError:zl.ParseError,CancelError:zl.CancelError,UnsupportedProtocolError:zl.UnsupportedProtocolError,UploadError:zl.UploadError},bst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yb}=Eb.default,cle=(...t)=>{let e;for(let r of t)e=yb(void 0,r,e);return e},xst=t=>t.isStream?new Eb.default(void 0,t):zl.default(t),kst=t=>"defaults"in t&&"options"in t.defaults,Qst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var ule=(t,e)=>{if(t)for(let r of t)r(e)},Ale=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?xst:h);if(lle.default.plainObject(o)){let E={...o,...a};Eb.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{ule(t.options.hooks.init,a),ule((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yb(o,a,n??t.options);if(I[Eb.kIsNormalizedAlready]=!0,E)throw new zl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return Dst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)kst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),Ale({options:cle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yb(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!lle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Qst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Sst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:Pst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=cle,e};Vl.default=Ale;vst(ale(),Vl)});var hle=_((Lf,Cb)=>{"use strict";var Fst=Lf&&Lf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),fle=Lf&&Lf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Fst(e,t,r)};Object.defineProperty(Lf,"__esModule",{value:!0});var Rst=ve("url"),ple=Q4(),Tst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Rst.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:[ple.defaultHandler],mutableDefaults:!1},F4=ple.default(Tst);Lf.default=F4;Cb.exports=F4;Cb.exports.default=F4;Cb.exports.__esModule=!0;fle(Q4(),Lf);fle(b4(),Lf)});var nn={};zt(nn,{Method:()=>wle,del:()=>Ust,get:()=>N4,getNetworkSettings:()=>Cle,post:()=>O4,put:()=>Mst,request:()=>I1});function mle(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function R4(t){return al(dle,t,()=>oe.readFilePromise(t).then(e=>(dle.set(t,e),e)))}function Ost({statusCode:t,statusMessage:e},r){let o=Ut(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Zy(r,`${o}${e?` (${e})`:""}`,a)}async function wb(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ut(e,"httpTimeout",yt.SETTING)})`);let n=new Jt(35,a,u=>{o.response&&u.reportError(35,` ${Xu(e,{label:"Response Code",value:Hc(yt.NO_HINT,Ost(o.response,e))})}`),o.request&&(u.reportError(35,` ${Xu(e,{label:"Request Method",value:Hc(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${Xu(e,{label:"Request URL",value:Hc(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${Xu(e,{label:"Request Redirects",value:Hc(yt.NO_HINT,bN(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${Xu(e,{label:"Request Retry Count",value:Hc(yt.NO_HINT,`${Ut(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ut(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function Cle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(L4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function I1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await _st(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function N4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>wb(I1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():al(gle,t,()=>u().then(p=>(gle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function Mst(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Ust(t,{customErrorMessage:e,...r}){return(await wb(I1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function _st(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=Cle(A,{configuration:r});if(p.enableNetwork===!1)throw new Jt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!L4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new Jt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?T4.default.httpOverHttp(mle(p.httpProxy)):Lst,https:p.httpsProxy?T4.default.httpsOverHttp(mle(p.httpsProxy)):Nst},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),x=r.get("enableStrictSsl"),C=p.httpsCaFilePath,R=p.httpsCertFilePath,N=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(hle())),V=C?await R4(C):void 0,te=R?await R4(R):void 0,ae=N?await R4(N):void 0,fe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:x,certificateAuthority:V,certificate:te,key:ae},...E});return r.getLimit("networkConcurrency")(()=>fe(A))}var yle,Ele,L4,T4,gle,dle,Lst,Nst,wle,Ib=Et(()=>{Pt();yle=ve("https"),Ele=ve("http"),L4=$e(Zo()),T4=$e(Yse());Wl();jl();Gl();gle=new Map,dle=new Map,Lst=new Ele.Agent({keepAlive:!0}),Nst=new yle.Agent({keepAlive:!0});wle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(wle||{})});var Vi={};zt(Vi,{availableParallelism:()=>U4,getArchitecture:()=>B1,getArchitectureName:()=>Yst,getArchitectureSet:()=>M4,getCaller:()=>Vst,major:()=>Hst,openUrl:()=>qst});function jst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Gst)}catch{}if(typeof t<"u"){if(t&&(t.includes("GLIBC")||t.includes("libc")))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return KI(r,a=>{let n=a.match(o);if(!n)return KI.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 B1(){return Ble=Ble??{os:process.platform,cpu:process.arch,libc:jst()}}function Yst(t=B1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=B1();return vle=vle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function zst(t){let e=Wst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Kst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Vst(){let e=new Error().stack.split(` -`)[3];return zst(e)}function U4(){return typeof Bb.default.availableParallelism<"u"?Bb.default.availableParallelism():Math.max(1,Bb.default.cpus().length)}var Bb,Hst,Ile,qst,Gst,Ble,vle,Wst,Kst,vb=Et(()=>{Pt();Bb=$e(ve("os"));Db();Gl();Hst=Number(process.versions.node.split(".")[0]),Ile=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),qst=typeof Ile<"u"?async t=>{try{return await _4(Ile,[t],{cwd:z.cwd()}),!0}catch{return!1}}:void 0,Gst="/usr/bin/ldd";Wst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Kst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=A1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=A1(r);switch(o.type){case"ANY":return jS(n);case"SHAPE":return $st(t,e,r,o,a);case"MAP":return eot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return zI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=iS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=mM(r);return E&&E[0]!=="<"&&(h=z.dirname(E)),z.resolve(h,le.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return zI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function $st(t,e,r,o,a){let n=A1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function eot(t,e,r,o,a){let n=A1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,E,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>z.normalize(o)):z.isAbsolute(e.default)?z.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>z.resolve(t.projectCwd,o)):z.resolve(t.projectCwd,e.default);default:return e.default}}function Sb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Zst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return le.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(Sb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=Sb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=Sb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function tot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bb)&&(e=(0,Ple.default)(e.slice(bb.length)),t[e]=r);return t}function G4(){let t=`${bb}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return j4}async function Dle(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function rot(t,e){return Buffer.compare(...await Promise.all([Dle(t),Dle(e)]))===0}async function not(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function sot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await iot(r,e)?null:r}var Ple,Nf,Sle,ble,xle,q4,Jst,v1,Xst,FE,bb,j4,Zst,D1,kle,xb,Pb,iot,nA,Ke,P1=Et(()=>{Pt();Nl();Ple=$e(sz()),Nf=$e(rd());qt();Sle=$e(Zz()),ble=ve("module"),xle=$e(sd()),q4=ve("stream");ose();fE();cM();uM();AM();Tse();fM();Dd();Use();WS();jl();ih();Ib();Gl();vb();Qf();bo();Jst=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=le.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),v1=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"]),Xst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),FE=/^(?!v)[a-z0-9._-]+$/i,bb="yarn_",j4=".yarnrc.yml",Zst="********",D1=(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))(D1||{}),kle=yt,xb=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(xb||{}),Pb={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:EM()},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:G4()},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:aS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SN,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.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:!Nf.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:!Nf.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:U4()},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(cS),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:Nf.isPR&&Jst,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},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}}}}}}}};iot=process.platform==="win32"?rot:not;nA=class{constructor(e){this.isCI=Nf.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 create(e,r,o){let a=new nA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Pb);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=tot();delete u.rcFilename;let A=new nA(e),p=await nA.findRcFiles(e),h=await nA.findFolderRcFile(EE());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=Mse(p.map(ue=>[ue.path,ue.data])),I=Bt.dot,v=new Set(Object.keys(Pb)),x=({yarnPath:ue,ignorePath:me,injectEnvironmentFiles:he})=>({yarnPath:ue,ignorePath:me,injectEnvironmentFiles:he}),C=({yarnPath:ue,ignorePath:me,injectEnvironmentFiles:he,...Be})=>{let we={};for(let[g,Ee]of Object.entries(Be))v.has(g)&&(we[g]=Ee);return we},R=({yarnPath:ue,ignorePath:me,...he})=>{let Be={};for(let[we,g]of Object.entries(he))v.has(we)||(Be[we]=g);return Be};if(A.importSettings(x(Pb)),A.useWithSource("",x(u),e,{strict:!1}),E){let[ue,me]=E;A.useWithSource(ue,x(me),I,{strict:!1})}if(a){if(await sot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await nA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=N;let U=Object.assign(Object.create(null),process.env);A.env=U;let V=await Promise.all(A.get("injectEnvironmentFiles").map(async ue=>{let me=ue.endsWith("?")?await oe.readFilePromise(ue.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ue,"utf8");return(0,Sle.parse)(me)}));for(let ue of V)for(let[me,he]of Object.entries(ue))A.env[me]=iS(he,{env:U});if(A.importSettings(C(Pb)),A.useWithSource("",C(u),e,{strict:o}),E){let[ue,me]=E;A.useWithSource(ue,C(me),I,{strict:o})}let te=ue=>"default"in ue?ue.default:ue,ae=new Map([["@@core",sse]]);if(r!==null)for(let ue of r.plugins.keys())ae.set(ue,te(r.modules.get(ue)));for(let[ue,me]of ae)A.activatePlugin(ue,me);let fe=new Map([]);if(r!==null){let ue=new Map;for(let Be of ble.builtinModules)ue.set(Be,()=>Df(Be));for(let[Be,we]of r.modules)ue.set(Be,()=>we);let me=new Set,he=async(Be,we)=>{let{factory:g,name:Ee}=Df(Be);if(!g||me.has(Ee))return;let Pe=new Map(ue),ce=ee=>{if(Pe.has(ee))return Pe.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Ky(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${we})`);ue.set(Ee,()=>ne),me.add(Ee),fe.set(Ee,ne)};if(u.plugins)for(let Be of u.plugins.split(";")){let we=z.resolve(e,le.toPortablePath(Be));await he(we,"")}for(let{path:Be,cwd:we,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let Pe=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(v1.has(ce))continue;let ee=z.resolve(we,le.toPortablePath(Pe));if(!await oe.existsPromise(ee)){if(!ce){let At=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,".gitignore",yt.NAME),at=Ut(A,A.values.get("rcFilename"),yt.NAME),Re=Ut(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${At} plugin - please try to remove the plugin from ${at} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let At=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${At} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await N4(ce,{configuration:A}),Fe=Js(Ie);if(ne&&ne!==Fe){let At=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,A.values.get("rcFilename"),yt.NAME),at=Ut(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${At} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${at} to reimport it.`)}await oe.mkdirPromise(z.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await he(ee,Be)}}for(let[ue,me]of fe)A.activatePlugin(ue,me);if(A.useWithSource("",R(u),e,{strict:o}),E){let[ue,me]=E;A.useWithSource(ue,R(me),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=G4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=z.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=z.dirname(n)}return o}static async findFolderRcFile(e){let r=z.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(z.join(a,dr.lockfile)))return a;oe.existsSync(z.join(a,dr.manifest))&&(r=a),o=z.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=G4(),n=z.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===nA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await nA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=EE();return await nA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ut(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&Xst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bb}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=EE(),v=e[0]!=="<"?z.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ut(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return Sb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ut(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ut(this,"STDERR","red")}`);n=new q4.PassThrough,n.pipe(p),n.pipe(A),u=new q4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Pd([new c1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new hE([new gE,new mE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=B1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=ol(n,u=>u==="current"?e.libc??ol.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!xa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=Yy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,x]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:x})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(sh(o,!0),nS(a),{userProvided:!0});return e}normalizeLocator(e){return xa(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):FE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return xa(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):FE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=e1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!kf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",al(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:EN(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Vs(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=tA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return al(this.limits,e,()=>(0,xle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=nA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};zt(Ur,{EndStrategy:()=>J4,ExecError:()=>kb,PipeError:()=>S1,execvp:()=>_4,pipevp:()=>Yc});function xd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function z4(){for(let t of kd)t.kill()}async function Yc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":xd(n)&&(h[0]=n),xd(u)&&(h[1]=u),xd(A)&&(h[2]=A);let E=(0,V4.default)(t,e,{cwd:le.fromPortablePath(r),env:{...o,PWD:le.fromPortablePath(r)},stdio:h});kd.add(E),kd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",z4)),!xd(n)&&n!==null&&n.pipe(E.stdin),xd(u)||E.stdout.pipe(u,{end:!1}),xd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))xd(v)||v.end()};return new Promise((v,x)=>{E.on("error",C=>{kd.delete(E),kd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),x(C)}),E.on("close",(C,R)=>{kd.delete(E),kd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:X4(C,R)}):x(new S1({fileName:t,code:C,signal:R}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=le.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,V4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",x=>{let C=Ke.create(r),R=Ut(C,t,yt.PATH);v(new Jt(1,`Process ${R} failed to spawn`,N=>{N.reportError(1,` ${Xu(C,{label:"Thrown Error",value:Hc(yt.NO_HINT,x.message)})}`)}))}),E.on("close",(x,C)=>{let R=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);x===0||!n?I({code:X4(x,C),stdout:R,stderr:N}):v(new kb({fileName:t,code:x,signal:C,stdout:R,stderr:N}))})})}function X4(t,e){let r=oot.get(e);return typeof r<"u"?128+r:t??1}function aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${Xu(r,t!==null?{label:"Exit Code",value:Hc(yt.NUMBER,t)}:{label:"Exit Signal",value:Hc(yt.CODE,e)})}`)}var V4,J4,S1,kb,kd,oot,Db=Et(()=>{Pt();V4=$e(sT());P1();Wl();jl();J4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(J4||{}),S1=class extends Jt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(z.cwd()),u=Ut(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{aot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},kb=class extends S1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};kd=new Set;oot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Fle(t){Qle=t}function b1(){return typeof Z4>"u"&&(Z4=Qle()),Z4}var Z4,Qle,$4=Et(()=>{Qle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Qb,tU)=>{var lot=Object.assign({},ve("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function x(We){return r.locateFile?r.locateFile(We,v):v+We}var C,R,N,U;I&&(E?v=ve("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var ir=ii(tt);return ir?It?ir:ir.toString():(N||(N=lot),U||(U=ve("path")),tt=U.normalize(tt),N.readFileSync(tt,It?null:"utf8"))},R=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var V=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ae=0,fe=function(We){ae=We},ue;r.wasmBinary&&(ue=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function he(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return He[We>>0];case"i8":return He[We>>0];case"i16":return up((We>>1)*2);case"i32":return Os((We>>2)*4);case"i64":return Os((We>>2)*4);case"float":return uu((We>>2)*4);case"double":return cp((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Be,we=!1,g;function Ee(We,tt){We||Ti("Assertion failed: "+tt)}function Pe(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,ir,$){var ye={string:function(es){var bi=0;if(es!=null&&es!==0){var qo=(es.length<<2)+1;bi=Un(qo),At(es,bi,qo)}return bi},array:function(es){var bi=Un(es.length);return Re(es,bi),bi}};function Ne(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var pt=Pe(We),ht=[],Tt=0;if(ir)for(var er=0;er=It)&&Te[ir];)++ir;return ee.decode(Te.subarray(We,ir))}function Fe(We,tt,It,ir){if(!(ir>0))return 0;for(var $=It,ye=It+ir-1,Ne=0;Ne=55296&&pt<=57343){var ht=We.charCodeAt(++Ne);pt=65536+((pt&1023)<<10)|ht&1023}if(pt<=127){if(It>=ye)break;tt[It++]=pt}else if(pt<=2047){if(It+1>=ye)break;tt[It++]=192|pt>>6,tt[It++]=128|pt&63}else if(pt<=65535){if(It+2>=ye)break;tt[It++]=224|pt>>12,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}else{if(It+3>=ye)break;tt[It++]=240|pt>>18,tt[It++]=128|pt>>12&63,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}}return tt[It]=0,It-$}function At(We,tt,It){return Fe(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&ir<=57343&&(ir=65536+((ir&1023)<<10)|We.charCodeAt(++It)&1023),ir<=127?++tt:ir<=2047?tt+=2:ir<=65535?tt+=3:tt+=4}return tt}function at(We){var tt=H(We)+1,It=Ni(tt);return It&&Fe(We,He,It,tt),It}function Re(We,tt){He.set(We,tt)}function ke(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,He,Te,Ve,qe,b,w,S,y,F;function J(We){xe=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=He=new Int8Array(We),r.HEAP16=Ve=new Int16Array(We),r.HEAP32=b=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=qe=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],be=[],Le=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());oo(ie)}function Gt(){ot=!0,oo(be)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Le)}function bt(We){ie.unshift(We)}function an(We){be.unshift(We)}function Qr(We){Le.unshift(We)}var mr=0,br=null,Wr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ls(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(br!==null&&(clearInterval(br),br=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),we=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="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//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASELIAMhBQsgBkIuEBciA0UEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyAFEBwMAgsgA0GjEkGoEiACQYACcSIHG0EEECwgB0UEQCADIAkEf0EtBSABLwEIC0H//wNxEA0LIAMgCQR/QS0FIAEvAQoLQf//A3EQDSADIAEvAQwQDSADIAsEf0HjAAUgASgCEAtB//8DcRANIAYgASgCFDYCPAJ/IAZBPGoQjQEiCEUEQEEAIQlBIQwBCwJ/IAgoAhQiBEHQAE4EQCAEQQl0DAELIAhB0AA2AhRBgMACCyEEIAgoAgRBBXQgCCgCCEELdGogCCgCAEEBdmohCSAIKAIMIAQgCCgCEEEFdGpqQaDAAWoLIQQgAyAJQf//A3EQDSADIARB//8DcRANIAMCfyALBEBBACABKQMoQhRUDQEaCyABKAIYCxASIAEpAyAhDCADAn8gAwJ/AkAgBwRAIAxC/v///w9YBEAgASkDKEL/////D1QNAgsgA0F/EBJBfwwDC0F/IAxC/v///w9WDQEaCyAMpwsQEiABKQMoIgxC/////w8gDEL/////D1QbpwsQEiADIAEoAjAiBAR/IAQvAQQFQQALQf//A3EQDSADIAEoAjQgAhBsIAVBgAYQbGpB//8DcRANIAdFBEAgAyABKAI4IgQEfyAELwEEBUEAC0H//wNxEA0gAyABLwE8EA0gAyABLwFAEA0gAyABKAJEEBIgAyABKQNIIgxC/////w8gDEL/////D1QbpxASCyADLQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAMQCCAFEBwMAgsgACAGIAMtAAAEfiADKQMQBUIACxAbIQQgAxAIIARBf0wNACABKAIwIgMEQCAAIAMQYUF/TA0BCyAFBEAgACAFQYAGEGtBf0wNAQsgBRAcIAEoAjQiBQRAIAAgBSACEGtBAEgNAgsgBw0CIAEoAjgiAUUNAiAAIAEQYUEATg0CDAELIAUQHAtBfyEKCyAGQUBrJAAgCgtNAQJ/IAEtAAAhAgJAIAAtAAAiA0UNACACIANHDQADQCABLQABIQIgAC0AASIDRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAyACawvcAwICfgF/IAOtIQQgACkDmC4hBQJAIAACfyAAAn4gACgCoC4iBkEDaiIDQT9NBEAgBCAGrYYgBYQMAQsgBkHAAEYEQCAAKAIEIAAoAhBqIAU3AAAgACgCEEEIagwCCyAAKAIEIAAoAhBqIAQgBq2GIAWENwAAIAAgACgCEEEIajYCECAGQT1rIQMgBEHAACAGa62ICyIENwOYLiAAIAM2AqAuIANBOU4EQCAAKAIEIAAoAhBqIAQ3AAAgACAAKAIQQQhqNgIQDAILIANBGU4EQCAAKAIEIAAoAhBqIAQ+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiBDcDmC4gACAAKAKgLkEgayIDNgKgLgsgA0EJTgR/IAAoAgQgACgCEGogBD0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghBCAAKAKgLkEQawUgAwtBAUgNASAAKAIQCyIDQQFqNgIQIAAoAgQgA2ogBDwAAAsgAEEANgKgLiAAQgA3A5guIAAoAgQgACgCEGogAjsAACAAIAAoAhBBAmoiAzYCECAAKAIEIANqIAJBf3M7AAAgACAAKAIQQQJqIgM2AhAgAgRAIAAoAgQgA2ogASACEAcaIAAgACgCECACajYCEAsLrAQCAX8BfgJAIAANACABUA0AIAMEQCADQQA2AgQgA0ESNgIAC0EADwsCQAJAIAAgASACIAMQiQEiBEUNAEEYEAkiAkUEQCADBEAgA0EANgIEIANBDjYCAAsCQCAEKAIoIgBFBEAgBCkDGCEBDAELIABBADYCKCAEKAIoQgA3AyAgBCAEKQMYIgUgBCkDICIBIAEgBVQbIgE3AxgLIAQpAwggAVYEQANAIAQoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAQpAwhUDQALCyAEKAIAEAYgBCgCBBAGIAQQBgwBCyACQQA2AhQgAiAENgIQIAJBABABNgIMIAJBADYCCCACQgA3AgACf0E4EAkiAEUEQCADBEAgA0EANgIEIANBDjYCAAtBAAwBCyAAQQA2AgggAEIANwMAIABCADcDICAAQoCAgIAQNwIsIABBADoAKCAAQQA2AhQgAEIANwIMIABBADsBNCAAIAI2AgggAEEkNgIEIABCPyACQQBCAEEOQSQRDAAiASABQgBTGzcDGCAACyIADQEgAigCECIDBEACQCADKAIoIgBFBEAgAykDGCEBDAELIABBADYCKCADKAIoQgA3AyAgAyADKQMYIgUgAykDICIBIAEgBVQbIgE3AxgLIAMpAwggAVYEQANAIAMoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAMpAwhUDQALCyADKAIAEAYgAygCBBAGIAMQBgsgAhAGC0EAIQALIAALiwwBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQciEASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RB3IQBakYaIAAoAgwiAyAERw0CQbSEAUG0hAEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgNHBEAgACgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAAQRRqIgIoAgAiBA0AIABBEGoiAigCACIEDQBBACEDDAELA0AgAiEHIAQiA0EUaiICKAIAIgQNACADQRBqIQIgAygCECIEDQALIAdBADYCAAsgBkUNAgJAIAAgACgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAM2AgAgA0UNAwsgAyAGNgIYIAAoAhAiAgRAIAMgAjYCECACIAM2AhgLIAAoAhQiAkUNAiADIAI2AhQgAiADNgIYDAILIAUoAgQiAkEDcUEDRw0BQbyEASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEAgBUHMhAEoAgBGBEBBzIQBIAA2AgBBwIQBQcCEASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQciEASgCAEcNA0G8hAFBADYCAEHIhAFBADYCAA8LIAVByIQBKAIARgRAQciEASAANgIAQbyEAUG8hAEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QdyEAWpGGiAEIAUoAgwiA0YEQEG0hAFBtIQBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgNHBEAgBSgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAFQRRqIgQoAgAiAg0AIAVBEGoiBCgCACICDQBBACEDDAELA0AgBCEHIAIiA0EUaiIEKAIAIgINACADQRBqIQQgAygCECICDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAM2AgAgA0UNAQsgAyAGNgIYIAUoAhAiAgRAIAMgAjYCECACIAM2AhgLIAUoAhQiAkUNACADIAI2AhQgAiADNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABByIQBKAIARw0BQbyEASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUEDdiICQQN0QdyEAWohAQJ/QbSEASgCACIDQQEgAnQiAnFFBEBBtIQBIAIgA3I2AgAgAQwBCyABKAIICyECIAEgADYCCCACIAA2AgwgACABNgIMIAAgAjYCCA8LQR8hAiAAQgA3AhAgAUH///8HTQRAIAFBCHYiAiACQYD+P2pBEHZBCHEiBHQiAiACQYDgH2pBEHZBBHEiA3QiAiACQYCAD2pBEHZBAnEiAnRBD3YgAyAEciACcmsiAkEBdCABIAJBFWp2QQFxckEcaiECCyAAIAI2AhwgAkECdEHkhgFqIQcCQAJAQbiEASgCACIEQQEgAnQiA3FFBEBBuIQBIAMgBHI2AgAgByAANgIAIAAgBzYCGAwBCyABQQBBGSACQQF2ayACQR9GG3QhAiAHKAIAIQMDQCADIgQoAgRBeHEgAUYNAiACQR12IQMgAkEBdCECIAQgA0EEcWoiB0EQaigCACIDDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC1gCAX8BfgJAAn9BACAARQ0AGiAArUIChiICpyIBIABBBHJBgIAESQ0AGkF/IAEgAkIgiKcbCyIBEAkiAEUNACAAQQRrLQAAQQNxRQ0AIABBACABEBkLIAALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIAFBAWohASAAQQFqIQAgAkEBayICDQEMAgsLIAQgBWshAwsgAwsUACAAEEAgACgCABAgIAAoAgQQIAutBAIBfgV/IwBBEGsiBCQAIAAgAWshBgJAAkAgAUEBRgRAIAAgBi0AACACEBkMAQsgAUEJTwRAIAAgBikAADcAACAAIAJBAWtBB3FBAWoiBWohACACIAVrIgFFDQIgBSAGaiECA0AgACACKQAANwAAIAJBCGohAiAAQQhqIQAgAUEIayIBDQALDAILAkACQAJAAkAgAUEEaw4FAAICAgECCyAEIAYoAAAiATYCBCAEIAE2AgAMAgsgBCAGKQAANwMADAELQQghByAEQQhqIQgDQCAIIAYgByABIAEgB0sbIgUQByAFaiEIIAcgBWsiBw0ACyAEIAQpAwg3AwALAkAgBQ0AIAJBEEkNACAEKQMAIQMgAkEQayIGQQR2QQFqQQdxIgEEQANAIAAgAzcACCAAIAM3AAAgAkEQayECIABBEGohACABQQFrIgENAAsLIAZB8ABJDQADQCAAIAM3AHggACADNwBwIAAgAzcAaCAAIAM3AGAgACADNwBYIAAgAzcAUCAAIAM3AEggACADNwBAIAAgAzcAOCAAIAM3ADAgACADNwAoIAAgAzcAICAAIAM3ABggACADNwAQIAAgAzcACCAAIAM3AAAgAEGAAWohACACQYABayICQQ9LDQALCyACQQhPBEBBCCAFayEBA0AgACAEKQMANwAAIAAgAWohACACIAFrIgJBB0sNAAsLIAJFDQEgACAEIAIQBxoLIAAgAmohAAsgBEEQaiQAIAALXwECfyAAKAIIIgEEQCABEAsgAEEANgIICwJAIAAoAgQiAUUNACABKAIAIgJBAXFFDQAgASgCEEF+Rw0AIAEgAkF+cSICNgIAIAINACABECAgAEEANgIECyAAQQA6AAwL1wICBH8BfgJAAkAgACgCQCABp0EEdGooAgAiA0UEQCACBEAgAkEANgIEIAJBFDYCAAsMAQsgACgCACADKQNIIgdBABAUIQMgACgCACEAIANBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQtCACEBIwBBEGsiBiQAQX8hAwJAIABCGkEBEBRBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsgAEIEIAZBCmogAhAtIgRFDQBBHiEAQQEhBQNAIAQQDCAAaiEAIAVBAkcEQCAFQQFqIQUMAQsLIAQtAAAEfyAEKQMQIAQpAwhRBUEAC0UEQCACBEAgAkEANgIEIAJBFDYCAAsgBBAIDAELIAQQCCAAIQMLIAZBEGokACADIgBBAEgNASAHIACtfCIBQn9VDQEgAgRAIAJBFjYCBCACQQQ2AgALC0IAIQELIAELYAIBfgF/AkAgAEUNACAAQQhqEF8iAEUNACABIAEoAjBBAWo2AjAgACADNgIIIAAgAjYCBCAAIAE2AgAgAEI/IAEgA0EAQgBBDiACEQoAIgQgBEIAUxs3AxggACEFCyAFCyIAIAAoAiRBAWtBAU0EQCAAQQBCAEEKEA4aIABBADYCJAsLbgACQAJAAkAgA0IQVA0AIAJFDQECfgJAAkACQCACKAIIDgMCAAEECyACKQMAIAB8DAILIAIpAwAgAXwMAQsgAikDAAsiA0IAUw0AIAEgA1oNAgsgBARAIARBADYCBCAEQRI2AgALC0J/IQMLIAMLggICAX8CfgJAQQEgAiADGwRAIAIgA2oQCSIFRQRAIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgAq0hBgJAAkAgAARAIAAgBhATIgBFBEAgBARAIARBADYCBCAEQQ42AgALDAULIAUgACACEAcaIAMNAQwCCyABIAUgBhARIgdCf1cEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMBAsgBiAHVQRAIAQEQCAEQQA2AgQgBEERNgIACwwECyADRQ0BCyACIAVqIgBBADoAACACQQFIDQAgBSECA0AgAi0AAEUEQCACQSA6AAALIAJBAWoiAiAASQ0ACwsLIAUPCyAFEAZBAAuBAQEBfwJAIAAEQCADQYAGcSEFQQAhAwNAAkAgAC8BCCACRw0AIAUgACgCBHFFDQAgA0EATg0DIANBAWohAwsgACgCACIADQALCyAEBEAgBEEANgIEIARBCTYCAAtBAA8LIAEEQCABIAAvAQo7AQALIAAvAQpFBEBBwBQPCyAAKAIMC1cBAX9BEBAJIgNFBEBBAA8LIAMgATsBCiADIAA7AQggA0GABjYCBCADQQA2AgACQCABBEAgAyACIAEQYyIANgIMIAANASADEAZBAA8LIANBADYCDAsgAwvuBQIEfwV+IwBB4ABrIgQkACAEQQhqIgNCADcDICADQQA2AhggA0L/////DzcDECADQQA7AQwgA0G/hig2AgggA0EBOgAGIANBADsBBCADQQA2AgAgA0IANwNIIANBgIDYjXg2AkQgA0IANwMoIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcDUCABKQMIUCIDRQRAIAEoAgAoAgApA0ghBwsCfgJAIAMEQCAHIQkMAQsgByEJA0AgCqdBBHQiBSABKAIAaigCACIDKQNIIgggCSAIIAlUGyIJIAEpAyBWBEAgAgRAIAJBADYCBCACQRM2AgALQn8MAwsgAygCMCIGBH8gBi8BBAVBAAtB//8Dca0gCCADKQMgfHxCHnwiCCAHIAcgCFQbIgcgASkDIFYEQCACBEAgAkEANgIEIAJBEzYCAAtCfwwDCyAAKAIAIAEoAgAgBWooAgApA0hBABAUIQYgACgCACEDIAZBf0wEQCACBEAgAiADKAIMNgIAIAIgAygCEDYCBAtCfwwDCyAEQQhqIANBAEEBIAIQaEJ/UQRAIARBCGoQNkJ/DAMLAkACQCABKAIAIAVqKAIAIgMvAQogBC8BEkkNACADKAIQIAQoAhhHDQAgAygCFCAEKAIcRw0AIAMoAjAgBCgCOBBiRQ0AAkAgBCgCICIGIAMoAhhHBEAgBCkDKCEIDAELIAMpAyAiCyAEKQMoIghSDQAgCyEIIAMpAyggBCkDMFENAgsgBC0AFEEIcUUNACAGDQAgCEIAUg0AIAQpAzBQDQELIAIEQCACQQA2AgQgAkEVNgIACyAEQQhqEDZCfwwDCyABKAIAIAVqKAIAKAI0IAQoAjwQbyEDIAEoAgAgBWooAgAiBUEBOgAEIAUgAzYCNCAEQQA2AjwgBEEIahA2IApCAXwiCiABKQMIVA0ACwsgByAJfSIHQv///////////wAgB0L///////////8AVBsLIQcgBEHgAGokACAHC8YBAQJ/QdgAEAkiAUUEQCAABEAgAEEANgIEIABBDjYCAAtBAA8LIAECf0EYEAkiAkUEQCAABEAgAEEANgIEIABBDjYCAAtBAAwBCyACQQA2AhAgAkIANwMIIAJBADYCACACCyIANgJQIABFBEAgARAGQQAPCyABQgA3AwAgAUEANgIQIAFCADcCCCABQgA3AhQgAUEANgJUIAFCADcCHCABQgA3ACEgAUIANwMwIAFCADcDOCABQUBrQgA3AwAgAUIANwNIIAELgBMCD38CfiMAQdAAayIFJAAgBSABNgJMIAVBN2ohEyAFQThqIRBBACEBA0ACQCAOQQBIDQBB/////wcgDmsgAUgEQEGEhAFBPTYCAEF/IQ4MAQsgASAOaiEOCyAFKAJMIgchAQJAAkACQAJAAkACQAJAAkAgBQJ/AkAgBy0AACIGBEADQAJAAkAgBkH/AXEiBkUEQCABIQYMAQsgBkElRw0BIAEhBgNAIAEtAAFBJUcNASAFIAFBAmoiCDYCTCAGQQFqIQYgAS0AAiEMIAghASAMQSVGDQALCyAGIAdrIQEgAARAIAAgByABEC4LIAENDSAFKAJMIQEgBSgCTCwAAUEwa0EKTw0DIAEtAAJBJEcNAyABLAABQTBrIQ9BASERIAFBA2oMBAsgBSABQQFqIgg2AkwgAS0AASEGIAghAQwACwALIA4hDSAADQggEUUNAkEBIQEDQCAEIAFBAnRqKAIAIgAEQCADIAFBA3RqIAAgAhB4QQEhDSABQQFqIgFBCkcNAQwKCwtBASENIAFBCk8NCANAIAQgAUECdGooAgANCCABQQFqIgFBCkcNAAsMCAtBfyEPIAFBAWoLIgE2AkxBACEIAkAgASwAACIKQSBrIgZBH0sNAEEBIAZ0IgZBidEEcUUNAANAAkAgBSABQQFqIgg2AkwgASwAASIKQSBrIgFBIE8NAEEBIAF0IgFBidEEcUUNACABIAZyIQYgCCEBDAELCyAIIQEgBiEICwJAIApBKkYEQCAFAn8CQCABLAABQTBrQQpPDQAgBSgCTCIBLQACQSRHDQAgASwAAUECdCAEakHAAWtBCjYCACABLAABQQN0IANqQYADaygCACELQQEhESABQQNqDAELIBENCEEAIRFBACELIAAEQCACIAIoAgAiAUEEajYCACABKAIAIQsLIAUoAkxBAWoLIgE2AkwgC0F/Sg0BQQAgC2shCyAIQYDAAHIhCAwBCyAFQcwAahB3IgtBAEgNBiAFKAJMIQELQX8hCQJAIAEtAABBLkcNACABLQABQSpGBEACQCABLAACQTBrQQpPDQAgBSgCTCIBLQADQSRHDQAgASwAAkECdCAEakHAAWtBCjYCACABLAACQQN0IANqQYADaygCACEJIAUgAUEEaiIBNgJMDAILIBENByAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCSAFIAUoAkxBAmoiATYCTAwBCyAFIAFBAWo2AkwgBUHMAGoQdyEJIAUoAkwhAQtBACEGA0AgBiESQX8hDSABLAAAQcEAa0E5Sw0HIAUgAUEBaiIKNgJMIAEsAAAhBiAKIQEgBiASQTpsakGf7ABqLQAAIgZBAWtBCEkNAAsgBkETRg0CIAZFDQYgD0EATgRAIAQgD0ECdGogBjYCACAFIAMgD0EDdGopAwA3A0AMBAsgAA0BC0EAIQ0MBQsgBUFAayAGIAIQeCAFKAJMIQoMAgsgD0F/Sg0DC0EAIQEgAEUNBAsgCEH//3txIgwgCCAIQYDAAHEbIQZBACENQaQIIQ8gECEIAkACQAJAAn8CQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgCkEBaywAACIBQV9xIAEgAUEPcUEDRhsgASASGyIBQdgAaw4hBBISEhISEhISDhIPBg4ODhIGEhISEgIFAxISCRIBEhIEAAsCQCABQcEAaw4HDhILEg4ODgALIAFB0wBGDQkMEQsgBSkDQCEUQaQIDAULQQAhAQJAAkACQAJAAkACQAJAIBJB/wFxDggAAQIDBBcFBhcLIAUoAkAgDjYCAAwWCyAFKAJAIA42AgAMFQsgBSgCQCAOrDcDAAwUCyAFKAJAIA47AQAMEwsgBSgCQCAOOgAADBILIAUoAkAgDjYCAAwRCyAFKAJAIA6sNwMADBALIAlBCCAJQQhLGyEJIAZBCHIhBkH4ACEBCyAQIQcgAUEgcSEMIAUpA0AiFFBFBEADQCAHQQFrIgcgFKdBD3FBsPAAai0AACAMcjoAACAUQg9WIQogFEIEiCEUIAoNAAsLIAUpA0BQDQMgBkEIcUUNAyABQQR2QaQIaiEPQQIhDQwDCyAQIQEgBSkDQCIUUEUEQANAIAFBAWsiASAUp0EHcUEwcjoAACAUQgdWIQcgFEIDiCEUIAcNAAsLIAEhByAGQQhxRQ0CIAkgECAHayIBQQFqIAEgCUgbIQkMAgsgBSkDQCIUQn9XBEAgBUIAIBR9IhQ3A0BBASENQaQIDAELIAZBgBBxBEBBASENQaUIDAELQaYIQaQIIAZBAXEiDRsLIQ8gECEBAkAgFEKAgICAEFQEQCAUIRUMAQsDQCABQQFrIgEgFCAUQgqAIhVCCn59p0EwcjoAACAUQv////+fAVYhByAVIRQgBw0ACwsgFaciBwRAA0AgAUEBayIBIAcgB0EKbiIMQQpsa0EwcjoAACAHQQlLIQogDCEHIAoNAAsLIAEhBwsgBkH//3txIAYgCUF/ShshBgJAIAUpA0AiFEIAUg0AIAkNAEEAIQkgECEHDAoLIAkgFFAgECAHa2oiASABIAlIGyEJDAkLIAUoAkAiAUGKEiABGyIHQQAgCRB6IgEgByAJaiABGyEIIAwhBiABIAdrIAkgARshCQwICyAJBEAgBSgCQAwCC0EAIQEgAEEgIAtBACAGECcMAgsgBUEANgIMIAUgBSkDQD4CCCAFIAVBCGo2AkBBfyEJIAVBCGoLIQhBACEBAkADQCAIKAIAIgdFDQECQCAFQQRqIAcQeSIHQQBIIgwNACAHIAkgAWtLDQAgCEEEaiEIIAkgASAHaiIBSw0BDAILC0F/IQ0gDA0FCyAAQSAgCyABIAYQJyABRQRAQQAhAQwBC0EAIQggBSgCQCEKA0AgCigCACIHRQ0BIAVBBGogBxB5IgcgCGoiCCABSg0BIAAgBUEEaiAHEC4gCkEEaiEKIAEgCEsNAAsLIABBICALIAEgBkGAwABzECcgCyABIAEgC0gbIQEMBQsgACAFKwNAIAsgCSAGIAFBABEdACEBDAQLIAUgBSkDQDwAN0EBIQkgEyEHIAwhBgwCC0F/IQ0LIAVB0ABqJAAgDQ8LIABBICANIAggB2siDCAJIAkgDEgbIgpqIgggCyAIIAtKGyIBIAggBhAnIAAgDyANEC4gAEEwIAEgCCAGQYCABHMQJyAAQTAgCiAMQQAQJyAAIAcgDBAuIABBICABIAggBkGAwABzECcMAAsAC54DAgR/AX4gAARAIAAoAgAiAQRAIAEQGhogACgCABALCyAAKAIcEAYgACgCIBAQIAAoAiQQECAAKAJQIgMEQCADKAIQIgIEQCADKAIAIgEEfwNAIAIgBEECdGooAgAiAgRAA0AgAigCGCEBIAIQBiABIgINAAsgAygCACEBCyABIARBAWoiBEsEQCADKAIQIQIMAQsLIAMoAhAFIAILEAYLIAMQBgsgACgCQCIBBEAgACkDMFAEfyABBSABED5CAiEFAkAgACkDMEICVA0AQQEhAgNAIAAoAkAgAkEEdGoQPiAFIAApAzBaDQEgBachAiAFQgF8IQUMAAsACyAAKAJACxAGCwJAIAAoAkRFDQBBACECQgEhBQNAIAAoAkwgAkECdGooAgAiAUEBOgAoIAFBDGoiASgCAEUEQCABBEAgAUEANgIEIAFBCDYCAAsLIAUgADUCRFoNASAFpyECIAVCAXwhBQwACwALIAAoAkwQBiAAKAJUIgIEQCACKAIIIgEEQCACKAIMIAERAwALIAIQBgsgAEEIahAxIAAQBgsL6gMCAX4EfwJAIAAEfiABRQRAIAMEQCADQQA2AgQgA0ESNgIAC0J/DwsgAkGDIHEEQAJAIAApAzBQDQBBPEE9IAJBAXEbIQcgAkECcUUEQANAIAAgBCACIAMQUyIFBEAgASAFIAcRAgBFDQYLIARCAXwiBCAAKQMwVA0ADAILAAsDQCAAIAQgAiADEFMiBQRAIAECfyAFECJBAWohBgNAQQAgBkUNARogBSAGQQFrIgZqIggtAABBL0cNAAsgCAsiBkEBaiAFIAYbIAcRAgBFDQULIARCAXwiBCAAKQMwVA0ACwsgAwRAIANBADYCBCADQQk2AgALQn8PC0ESIQYCQAJAIAAoAlAiBUUNACABRQ0AQQkhBiAFKQMIUA0AIAUoAhAgAS0AACIHBH9CpesKIQQgASEAA0AgBCAHrUL/AYN8IQQgAC0AASIHBEAgAEEBaiEAIARC/////w+DQiF+IQQMAQsLIASnBUGFKgsgBSgCAHBBAnRqKAIAIgBFDQADQCABIAAoAgAQOEUEQCACQQhxBEAgACkDCCIEQn9RDQMMBAsgACkDECIEQn9RDQIMAwsgACgCGCIADQALCyADBEAgA0EANgIEIAMgBjYCAAtCfyEECyAEBUJ/Cw8LIAMEQCADQgA3AgALIAQL3AQCB38BfgJAAkAgAEUNACABRQ0AIAJCf1UNAQsgBARAIARBADYCBCAEQRI2AgALQQAPCwJAIAAoAgAiB0UEQEGAAiEHQYACEDwiBkUNASAAKAIQEAYgAEGAAjYCACAAIAY2AhALAkACQCAAKAIQIAEtAAAiBQR/QqXrCiEMIAEhBgNAIAwgBa1C/wGDfCEMIAYtAAEiBQRAIAZBAWohBiAMQv////8Pg0IhfiEMDAELCyAMpwVBhSoLIgYgB3BBAnRqIggoAgAiBQRAA0ACQCAFKAIcIAZHDQAgASAFKAIAEDgNAAJAIANBCHEEQCAFKQMIQn9SDQELIAUpAxBCf1ENBAsgBARAIARBADYCBCAEQQo2AgALQQAPCyAFKAIYIgUNAAsLQSAQCSIFRQ0CIAUgATYCACAFIAgoAgA2AhggCCAFNgIAIAVCfzcDCCAFIAY2AhwgACAAKQMIQgF8Igw3AwggDLogB7hEAAAAAAAA6D+iZEUNACAHQQBIDQAgByAHQQF0IghGDQAgCBA8IgpFDQECQCAMQgAgBxtQBEAgACgCECEJDAELIAAoAhAhCUEAIQQDQCAJIARBAnRqKAIAIgYEQANAIAYoAhghASAGIAogBigCHCAIcEECdGoiCygCADYCGCALIAY2AgAgASIGDQALCyAEQQFqIgQgB0cNAAsLIAkQBiAAIAg2AgAgACAKNgIQCyADQQhxBEAgBSACNwMICyAFIAI3AxBBAQ8LIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgBARAIARBADYCBCAEQQ42AgALQQAL3Q8BF38jAEFAaiIHQgA3AzAgB0IANwM4IAdCADcDICAHQgA3AygCQAJAAkACQAJAIAIEQCACQQNxIQggAkEBa0EDTwRAIAJBfHEhBgNAIAdBIGogASAJQQF0IgxqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBAnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBHJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgCUEEaiEJIAZBBGsiBg0ACwsgCARAA0AgB0EgaiABIAlBAXRqLwEAQQF0aiIGIAYvAQBBAWo7AQAgCUEBaiEJIAhBAWsiCA0ACwsgBCgCACEJQQ8hCyAHLwE+IhENAgwBCyAEKAIAIQkLQQ4hC0EAIREgBy8BPA0AQQ0hCyAHLwE6DQBBDCELIAcvATgNAEELIQsgBy8BNg0AQQohCyAHLwE0DQBBCSELIAcvATINAEEIIQsgBy8BMA0AQQchCyAHLwEuDQBBBiELIAcvASwNAEEFIQsgBy8BKg0AQQQhCyAHLwEoDQBBAyELIAcvASYNAEECIQsgBy8BJA0AIAcvASJFBEAgAyADKAIAIgBBBGo2AgAgAEHAAjYBACADIAMoAgAiAEEEajYCACAAQcACNgEAQQEhDQwDCyAJQQBHIRtBASELQQEhCQwBCyALIAkgCSALSxshG0EBIQ5BASEJA0AgB0EgaiAJQQF0ai8BAA0BIAlBAWoiCSALRw0ACyALIQkLQX8hCCAHLwEiIg9BAksNAUEEIAcvASQiECAPQQF0amsiBkEASA0BIAZBAXQgBy8BJiISayIGQQBIDQEgBkEBdCAHLwEoIhNrIgZBAEgNASAGQQF0IAcvASoiFGsiBkEASA0BIAZBAXQgBy8BLCIVayIGQQBIDQEgBkEBdCAHLwEuIhZrIgZBAEgNASAGQQF0IAcvATAiF2siBkEASA0BIAZBAXQgBy8BMiIZayIGQQBIDQEgBkEBdCAHLwE0IhxrIgZBAEgNASAGQQF0IAcvATYiDWsiBkEASA0BIAZBAXQgBy8BOCIYayIGQQBIDQEgBkEBdCAHLwE6IgxrIgZBAEgNASAGQQF0IAcvATwiCmsiBkEASA0BIAZBAXQgEWsiBkEASA0BIAZBACAARSAOchsNASAJIBtLIRpBACEIIAdBADsBAiAHIA87AQQgByAPIBBqIgY7AQYgByAGIBJqIgY7AQggByAGIBNqIgY7AQogByAGIBRqIgY7AQwgByAGIBVqIgY7AQ4gByAGIBZqIgY7ARAgByAGIBdqIgY7ARIgByAGIBlqIgY7ARQgByAGIBxqIgY7ARYgByAGIA1qIgY7ARggByAGIBhqIgY7ARogByAGIAxqIgY7ARwgByAGIApqOwEeAkAgAkUNACACQQFHBEAgAkF+cSEGA0AgASAIQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAg7AQALIAEgCEEBciIMQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAw7AQALIAhBAmohCCAGQQJrIgYNAAsLIAJBAXFFDQAgASAIQQF0ai8BACICRQ0AIAcgAkEBdGoiAiACLwEAIgJBAWo7AQAgBSACQQF0aiAIOwEACyAJIBsgGhshDUEUIRBBACEWIAUiCiEYQQAhEgJAAkACQCAADgICAAELQQEhCCANQQpLDQNBgQIhEEHw2QAhGEGw2QAhCkEBIRIMAQsgAEECRiEWQQAhEEHw2gAhGEGw2gAhCiAAQQJHBEAMAQtBASEIIA1BCUsNAgtBASANdCITQQFrIRwgAygCACEUQQAhFSANIQZBACEPQQAhDkF/IQIDQEEBIAZ0IRoCQANAIAkgD2shFwJAIAUgFUEBdGovAQAiCCAQTwRAIAogCCAQa0EBdCIAai8BACERIAAgGGotAAAhAAwBC0EAQeAAIAhBAWogEEkiBhshACAIQQAgBhshEQsgDiAPdiEMQX8gF3QhBiAaIQgDQCAUIAYgCGoiCCAMakECdGoiGSAROwECIBkgFzoAASAZIAA6AAAgCA0AC0EBIAlBAWt0IQYDQCAGIgBBAXYhBiAAIA5xDQALIAdBIGogCUEBdGoiBiAGLwEAQQFrIgY7AQAgAEEBayAOcSAAakEAIAAbIQ4gFUEBaiEVIAZB//8DcUUEQCAJIAtGDQIgASAFIBVBAXRqLwEAQQF0ai8BACEJCyAJIA1NDQAgDiAccSIAIAJGDQALQQEgCSAPIA0gDxsiD2siBnQhAiAJIAtJBEAgCyAPayEMIAkhCAJAA0AgAiAHQSBqIAhBAXRqLwEAayICQQFIDQEgAkEBdCECIAZBAWoiBiAPaiIIIAtJDQALIAwhBgtBASAGdCECC0EBIQggEiACIBNqIhNBtApLcQ0DIBYgE0HQBEtxDQMgAygCACICIABBAnRqIgggDToAASAIIAY6AAAgCCAUIBpBAnRqIhQgAmtBAnY7AQIgACECDAELCyAOBEAgFCAOQQJ0aiIAQQA7AQIgACAXOgABIABBwAA6AAALIAMgAygCACATQQJ0ajYCAAsgBCANNgIAQQAhCAsgCAusAQICfgF/IAFBAmqtIQIgACkDmC4hAwJAIAAoAqAuIgFBA2oiBEE/TQRAIAIgAa2GIAOEIQIMAQsgAUHAAEYEQCAAKAIEIAAoAhBqIAM3AAAgACAAKAIQQQhqNgIQQQMhBAwBCyAAKAIEIAAoAhBqIAIgAa2GIAOENwAAIAAgACgCEEEIajYCECABQT1rIQQgAkHAACABa62IIQILIAAgAjcDmC4gACAENgKgLguXAwICfgN/QYDJADMBACECIAApA5guIQMCQCAAKAKgLiIFQYLJAC8BACIGaiIEQT9NBEAgAiAFrYYgA4QhAgwBCyAFQcAARgRAIAAoAgQgACgCEGogAzcAACAAIAAoAhBBCGo2AhAgBiEEDAELIAAoAgQgACgCEGogAiAFrYYgA4Q3AAAgACAAKAIQQQhqNgIQIARBQGohBCACQcAAIAVrrYghAgsgACACNwOYLiAAIAQ2AqAuIAEEQAJAIARBOU4EQCAAKAIEIAAoAhBqIAI3AAAgACAAKAIQQQhqNgIQDAELIARBGU4EQCAAKAIEIAAoAhBqIAI+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiAjcDmC4gACAAKAKgLkEgayIENgKgLgsgBEEJTgR/IAAoAgQgACgCEGogAj0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghAiAAKAKgLkEQawUgBAtBAUgNACAAIAAoAhAiAUEBajYCECABIAAoAgRqIAI8AAALIABBADYCoC4gAEIANwOYLgsL8hQBEn8gASgCCCICKAIAIQUgAigCDCEHIAEoAgAhCCAAQoCAgIDQxwA3A6ApQQAhAgJAAkAgB0EASgRAQX8hDANAAkAgCCACQQJ0aiIDLwEABEAgACAAKAKgKUEBaiIDNgKgKSAAIANBAnRqQawXaiACNgIAIAAgAmpBqClqQQA6AAAgAiEMDAELIANBADsBAgsgAkEBaiICIAdHDQALIABB/C1qIQ8gAEH4LWohESAAKAKgKSIEQQFKDQIMAQsgAEH8LWohDyAAQfgtaiERQX8hDAsDQCAAIARBAWoiAjYCoCkgACACQQJ0akGsF2ogDEEBaiIDQQAgDEECSCIGGyICNgIAIAggAkECdCIEakEBOwEAIAAgAmpBqClqQQA6AAAgACAAKAL4LUEBazYC+C0gBQRAIA8gDygCACAEIAVqLwECazYCAAsgAyAMIAYbIQwgACgCoCkiBEECSA0ACwsgASAMNgIEIARBAXYhBgNAIAAgBkECdGpBrBdqKAIAIQkCQCAGIgJBAXQiAyAESg0AIAggCUECdGohCiAAIAlqQagpaiENIAYhBQNAAkAgAyAETgRAIAMhAgwBCyAIIABBrBdqIgIgA0EBciIEQQJ0aigCACILQQJ0ai8BACIOIAggAiADQQJ0aigCACIQQQJ0ai8BACICTwRAIAIgDkcEQCADIQIMAgsgAyECIABBqClqIgMgC2otAAAgAyAQai0AAEsNAQsgBCECCyAKLwEAIgQgCCAAIAJBAnRqQawXaigCACIDQQJ0ai8BACILSQRAIAUhAgwCCwJAIAQgC0cNACANLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAAgAkECdGpBrBdqIAk2AgAgBkECTgRAIAZBAWshBiAAKAKgKSEEDAELCyAAKAKgKSEDA0AgByEGIAAgA0EBayIENgKgKSAAKAKwFyEKIAAgACADQQJ0akGsF2ooAgAiCTYCsBdBASECAkAgA0EDSA0AIAggCUECdGohDSAAIAlqQagpaiELQQIhA0EBIQUDQAJAIAMgBE4EQCADIQIMAQsgCCAAQawXaiICIANBAXIiB0ECdGooAgAiBEECdGovAQAiDiAIIAIgA0ECdGooAgAiEEECdGovAQAiAk8EQCACIA5HBEAgAyECDAILIAMhAiAAQagpaiIDIARqLQAAIAMgEGotAABLDQELIAchAgsgDS8BACIHIAggACACQQJ0akGsF2ooAgAiA0ECdGovAQAiBEkEQCAFIQIMAgsCQCAEIAdHDQAgCy0AACAAIANqQagpai0AAEsNACAFIQIMAgsgACAFQQJ0akGsF2ogAzYCACACIQUgAkEBdCIDIAAoAqApIgRMDQALC0ECIQMgAEGsF2oiByACQQJ0aiAJNgIAIAAgACgCpClBAWsiBTYCpCkgACgCsBchAiAHIAVBAnRqIAo2AgAgACAAKAKkKUEBayIFNgKkKSAHIAVBAnRqIAI2AgAgCCAGQQJ0aiINIAggAkECdGoiBS8BACAIIApBAnRqIgQvAQBqOwEAIABBqClqIgkgBmoiCyACIAlqLQAAIgIgCSAKai0AACIKIAIgCksbQQFqOgAAIAUgBjsBAiAEIAY7AQIgACAGNgKwF0EBIQVBASECAkAgACgCoCkiBEECSA0AA0AgDS8BACIKIAggAAJ/IAMgAyAETg0AGiAIIAcgA0EBciICQQJ0aigCACIEQQJ0ai8BACIOIAggByADQQJ0aigCACIQQQJ0ai8BACISTwRAIAMgDiASRw0BGiADIAQgCWotAAAgCSAQai0AAEsNARoLIAILIgJBAnRqQawXaigCACIDQQJ0ai8BACIESQRAIAUhAgwCCwJAIAQgCkcNACALLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAZBAWohByAAIAJBAnRqQawXaiAGNgIAIAAoAqApIgNBAUoNAAsgACAAKAKkKUEBayICNgKkKSAAQawXaiIDIAJBAnRqIAAoArAXNgIAIAEoAgQhCSABKAIIIgIoAhAhBiACKAIIIQogAigCBCEQIAIoAgAhDSABKAIAIQcgAEGkF2pCADcBACAAQZwXakIANwEAIABBlBdqQgA3AQAgAEGMF2oiAUIANwEAQQAhBSAHIAMgACgCpClBAnRqKAIAQQJ0akEAOwECAkAgACgCpCkiAkG7BEoNACACQQFqIQIDQCAHIAAgAkECdGpBrBdqKAIAIgRBAnQiEmoiCyAHIAsvAQJBAnRqLwECIgNBAWogBiADIAZJGyIOOwECIAMgBk8hEwJAIAQgCUoNACAAIA5BAXRqQYwXaiIDIAMvAQBBAWo7AQBBACEDIAQgCk4EQCAQIAQgCmtBAnRqKAIAIQMLIBEgESgCACALLwEAIgQgAyAOamxqNgIAIA1FDQAgDyAPKAIAIAMgDSASai8BAmogBGxqNgIACyAFIBNqIQUgAkEBaiICQb0ERw0ACyAFRQ0AIAAgBkEBdGpBjBdqIQQDQCAGIQIDQCAAIAIiA0EBayICQQF0akGMF2oiDy8BACIKRQ0ACyAPIApBAWs7AQAgACADQQF0akGMF2oiAiACLwEAQQJqOwEAIAQgBC8BAEEBayIDOwEAIAVBAkohAiAFQQJrIQUgAg0ACyAGRQ0AQb0EIQIDQCADQf//A3EiBQRAA0AgACACQQFrIgJBAnRqQawXaigCACIDIAlKDQAgByADQQJ0aiIDLwECIAZHBEAgESARKAIAIAYgAy8BAGxqIgQ2AgAgESAEIAMvAQAgAy8BAmxrNgIAIAMgBjsBAgsgBUEBayIFDQALCyAGQQFrIgZFDQEgACAGQQF0akGMF2ovAQAhAwwACwALIwBBIGsiAiABIgAvAQBBAXQiATsBAiACIAEgAC8BAmpBAXQiATsBBCACIAEgAC8BBGpBAXQiATsBBiACIAEgAC8BBmpBAXQiATsBCCACIAEgAC8BCGpBAXQiATsBCiACIAEgAC8BCmpBAXQiATsBDCACIAEgAC8BDGpBAXQiATsBDiACIAEgAC8BDmpBAXQiATsBECACIAEgAC8BEGpBAXQiATsBEiACIAEgAC8BEmpBAXQiATsBFCACIAEgAC8BFGpBAXQiATsBFiACIAEgAC8BFmpBAXQiATsBGCACIAEgAC8BGGpBAXQiATsBGiACIAEgAC8BGmpBAXQiATsBHCACIAAvARwgAWpBAXQ7AR5BACEAIAxBAE4EQANAIAggAEECdGoiAy8BAiIBBEAgAiABQQF0aiIFIAUvAQAiBUEBajsBACADIAWtQoD+A4NCCIhCgpCAgQh+QpDCiKKIAYNCgYKEiBB+QiCIp0H/AXEgBUH/AXGtQoKQgIEIfkKQwoiiiAGDQoGChIgQfkIYiKdBgP4DcXJBECABa3Y7AQALIAAgDEchASAAQQFqIQAgAQ0ACwsLcgEBfyMAQRBrIgQkAAJ/QQAgAEUNABogAEEIaiEAIAFFBEAgAlBFBEAgAARAIABBADYCBCAAQRI2AgALQQAMAgtBAEIAIAMgABA6DAELIAQgAjcDCCAEIAE2AgAgBEIBIAMgABA6CyEAIARBEGokACAACyIAIAAgASACIAMQJiIARQRAQQAPCyAAKAIwQQAgAiADECULAwABC8gFAQR/IABB//8DcSEDIABBEHYhBEEBIQAgAkEBRgRAIAMgAS0AAGpB8f8DcCIAIARqQfH/A3BBEHQgAHIPCwJAIAEEfyACQRBJDQECQCACQa8rSwRAA0AgAkGwK2shAkG1BSEFIAEhAANAIAMgAC0AAGoiAyAEaiADIAAtAAFqIgNqIAMgAC0AAmoiA2ogAyAALQADaiIDaiADIAAtAARqIgNqIAMgAC0ABWoiA2ogAyAALQAGaiIDaiADIAAtAAdqIgNqIQQgBQRAIABBCGohACAFQQFrIQUMAQsLIARB8f8DcCEEIANB8f8DcCEDIAFBsCtqIQEgAkGvK0sNAAsgAkEISQ0BCwNAIAMgAS0AAGoiACAEaiAAIAEtAAFqIgBqIAAgAS0AAmoiAGogACABLQADaiIAaiAAIAEtAARqIgBqIAAgAS0ABWoiAGogACABLQAGaiIAaiAAIAEtAAdqIgNqIQQgAUEIaiEBIAJBCGsiAkEHSw0ACwsCQCACRQ0AIAJBAWshBiACQQNxIgUEQCABIQADQCACQQFrIQIgAyAALQAAaiIDIARqIQQgAEEBaiIBIQAgBUEBayIFDQALCyAGQQNJDQADQCADIAEtAABqIgAgAS0AAWoiBSABLQACaiIGIAEtAANqIgMgBiAFIAAgBGpqamohBCABQQRqIQEgAkEEayICDQALCyADQfH/A3AgBEHx/wNwQRB0cgVBAQsPCwJAIAJFDQAgAkEBayEGIAJBA3EiBQRAIAEhAANAIAJBAWshAiADIAAtAABqIgMgBGohBCAAQQFqIgEhACAFQQFrIgUNAAsLIAZBA0kNAANAIAMgAS0AAGoiACABLQABaiIFIAEtAAJqIgYgAS0AA2oiAyAGIAUgACAEampqaiEEIAFBBGohASACQQRrIgINAAsLIANB8f8DcCAEQfH/A3BBEHRyCx8AIAAgAiADQcCAASgCABEAACEAIAEgAiADEAcaIAALIwAgACAAKAJAIAIgA0HUgAEoAgARAAA2AkAgASACIAMQBxoLzSoCGH8HfiAAKAIMIgIgACgCECIDaiEQIAMgAWshASAAKAIAIgUgACgCBGohA0F/IAAoAhwiBygCpAF0IQRBfyAHKAKgAXQhCyAHKAI4IQwCf0EAIAcoAiwiEUUNABpBACACIAxJDQAaIAJBhAJqIAwgEWpNCyEWIBBBgwJrIRMgASACaiEXIANBDmshFCAEQX9zIRggC0F/cyESIAcoApwBIRUgBygCmAEhDSAHKAKIASEIIAc1AoQBIR0gBygCNCEOIAcoAjAhGSAQQQFqIQ8DQCAIQThyIQYgBSAIQQN2QQdxayELAn8gAiANIAUpAAAgCK2GIB2EIh2nIBJxQQJ0IgFqIgMtAAAiBA0AGiACIAEgDWoiAS0AAjoAACAGIAEtAAEiAWshBiACQQFqIA0gHSABrYgiHacgEnFBAnQiAWoiAy0AACIEDQAaIAIgASANaiIDLQACOgABIAYgAy0AASIDayEGIA0gHSADrYgiHacgEnFBAnRqIgMtAAAhBCACQQJqCyEBIAtBB2ohBSAGIAMtAAEiAmshCCAdIAKtiCEdAkACQAJAIARB/wFxRQ0AAkACQAJAAkACQANAIARBEHEEQCAVIB0gBK1CD4OIIhqnIBhxQQJ0aiECAn8gCCAEQQ9xIgZrIgRBG0sEQCAEIQggBQwBCyAEQThyIQggBSkAACAErYYgGoQhGiAFIARBA3ZrQQdqCyELIAMzAQIhGyAIIAItAAEiA2shCCAaIAOtiCEaIAItAAAiBEEQcQ0CA0AgBEHAAHFFBEAgCCAVIAIvAQJBAnRqIBqnQX8gBHRBf3NxQQJ0aiICLQABIgNrIQggGiADrYghGiACLQAAIgRBEHFFDQEMBAsLIAdB0f4ANgIEIABB7A42AhggGiEdDAMLIARB/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/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcNAQsCfwJ/An8gASgCBCICBEAgBCAAKAIoIAIQHiAAKAIcIQELIAEoAlAiAgsEQCAAKAIkIAAoAiggAhAeIAAoAhwhAQsgASgCTCICCwRAIAAoAiQgACgCKCACEB4gACgCHCEBCyABKAJIIgILBEAgACgCJCAAKAIoIAIQHiAAKAIcIQELIAAoAiQgACgCKCABEB4gAEEANgIcQX1BACADQfEARhshAgsgAgvrCQEIfyAAKAIwIgMgACgCDEEFayICIAIgA0sbIQggACgCACIEKAIEIQkgAUEERiEHAkADQCAEKAIQIgMgACgCoC5BKmpBA3UiAkkEQEEBIQYMAgsgCCADIAJrIgMgACgCaCAAKAJYayICIAQoAgRqIgVB//8DIAVB//8DSRsiBiADIAZJGyIDSwRAQQEhBiADQQBHIAdyRQ0CIAFFDQIgAyAFRw0CCyAAQQBBACAHIAMgBUZxIgUQOSAAIAAoAhBBBGsiBDYCECAAKAIEIARqIAM7AAAgACAAKAIQQQJqIgQ2AhAgACgCBCAEaiADQX9zOwAAIAAgACgCEEECajYCECAAKAIAEAoCfyACBEAgACgCACgCDCAAKAJIIAAoAlhqIAMgAiACIANLGyICEAcaIAAoAgAiBCAEKAIMIAJqNgIMIAQgBCgCECACazYCECAEIAQoAhQgAmo2AhQgACAAKAJYIAJqNgJYIAMgAmshAwsgAwsEQCAAKAIAIgIgAigCDCADEIMBIAAoAgAiAiACKAIMIANqNgIMIAIgAigCECADazYCECACIAIoAhQgA2o2AhQLIAAoAgAhBCAFRQ0AC0EAIQYLAkAgCSAEKAIEayICRQRAIAAoAmghAwwBCwJAIAAoAjAiAyACTQRAIABBAjYCgC4gACgCSCAEKAIAIANrIAMQBxogACAAKAIwIgM2AoQuIAAgAzYCaAwBCyACIAAoAkQgACgCaCIFa08EQCAAIAUgA2siBDYCaCAAKAJIIgUgAyAFaiAEEAcaIAAoAoAuIgNBAU0EQCAAIANBAWo2AoAuCyAAIAAoAmgiBSAAKAKELiIDIAMgBUsbNgKELiAAKAIAIQQLIAAoAkggBWogBCgCACACayACEAcaIAAgACgCaCACaiIDNgJoIAAgACgCMCAAKAKELiIEayIFIAIgAiAFSxsgBGo2AoQuCyAAIAM2AlgLIAAgAyAAKAJAIgIgAiADSRs2AkBBAyECAkAgBkUNACAAKAIAIgUoAgQhAgJAAkAgAUF7cUUNACACDQBBASECIAMgACgCWEYNAiAAKAJEIANrIQRBACECDAELIAIgACgCRCADayIETQ0AIAAoAlgiByAAKAIwIgZIDQAgACADIAZrIgM2AmggACAHIAZrNgJYIAAoAkgiAiACIAZqIAMQBxogACgCgC4iA0EBTQRAIAAgA0EBajYCgC4LIAAgACgCaCIDIAAoAoQuIgIgAiADSxs2AoQuIAAoAjAgBGohBCAAKAIAIgUoAgQhAgsCQCACIAQgAiAESRsiAkUEQCAAKAIwIQUMAQsgBSAAKAJIIANqIAIQgwEgACAAKAJoIAJqIgM2AmggACAAKAIwIgUgACgChC4iBGsiBiACIAIgBksbIARqNgKELgsgACADIAAoAkAiAiACIANJGzYCQCADIAAoAlgiBmsiAyAFIAAoAgwgACgCoC5BKmpBA3VrIgJB//8DIAJB//8DSRsiBCAEIAVLG0kEQEEAIQIgAUEERiADQQBHckUNASABRQ0BIAAoAgAoAgQNASADIARLDQELQQAhAiABQQRGBEAgACgCACgCBEUgAyAETXEhAgsgACAAKAJIIAZqIAQgAyADIARLGyIBIAIQOSAAIAAoAlggAWo2AlggACgCABAKQQJBACACGw8LIAIL/woCCn8DfiAAKQOYLiENIAAoAqAuIQQgAkEATgRAQQRBAyABLwECIggbIQlBB0GKASAIGyEFQX8hCgNAIAghByABIAsiDEEBaiILQQJ0ai8BAiEIAkACQCAGQQFqIgMgBU4NACAHIAhHDQAgAyEGDAELAkAgAyAJSARAIAAgB0ECdGoiBkHOFWohCSAGQcwVaiEKA0AgCjMBACEPAn8gBCAJLwEAIgZqIgVBP00EQCAPIASthiANhCENIAUMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIA8hDSAGDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIA9BwAAgBGutiCENIAVBQGoLIQQgA0EBayIDDQALDAELIAcEQAJAIAcgCkYEQCANIQ8gBCEFIAMhBgwBCyAAIAdBAnRqIgNBzBVqMwEAIQ8gBCADQc4Vai8BACIDaiIFQT9NBEAgDyAErYYgDYQhDwwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgAyEFDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIAVBQGohBSAPQcAAIARrrYghDwsgADMBjBYhDgJAIAUgAC8BjhYiBGoiA0E/TQRAIA4gBa2GIA+EIQ4MAQsgBUHAAEYEQCAAKAIEIAAoAhBqIA83AAAgACAAKAIQQQhqNgIQIAQhAwwBCyAAKAIEIAAoAhBqIA4gBa2GIA+ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAFa62IIQ4LIAasQgN9IQ0gA0E9TQRAIANBAmohBCANIAOthiAOhCENDAILIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEECIQQMAgsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E+ayEEIA1BwAAgA2utiCENDAELIAZBCUwEQCAAMwGQFiEOAkAgBCAALwGSFiIFaiIDQT9NBEAgDiAErYYgDYQhDgwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgBSEDDAELIAAoAgQgACgCEGogDiAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyAOQcAAIARrrYghDgsgBqxCAn0hDSADQTxNBEAgA0EDaiEEIA0gA62GIA6EIQ0MAgsgA0HAAEYEQCAAKAIEIAAoAhBqIA43AAAgACAAKAIQQQhqNgIQQQMhBAwCCyAAKAIEIAAoAhBqIA0gA62GIA6ENwAAIAAgACgCEEEIajYCECADQT1rIQQgDUHAACADa62IIQ0MAQsgADMBlBYhDgJAIAQgAC8BlhYiBWoiA0E/TQRAIA4gBK2GIA2EIQ4MAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIAUhAwwBCyAAKAIEIAAoAhBqIA4gBK2GIA2ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAEa62IIQ4LIAatQgp9IQ0gA0E4TQRAIANBB2ohBCANIAOthiAOhCENDAELIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEEHIQQMAQsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E5ayEEIA1BwAAgA2utiCENC0EAIQYCfyAIRQRAQYoBIQVBAwwBC0EGQQcgByAIRiIDGyEFQQNBBCADGwshCSAHIQoLIAIgDEcNAAsLIAAgBDYCoC4gACANNwOYLgv5BQIIfwJ+AkAgACgC8C1FBEAgACkDmC4hCyAAKAKgLiEDDAELA0AgCSIDQQNqIQkgAyAAKALsLWoiAy0AAiEFIAApA5guIQwgACgCoC4hBAJAIAMvAAAiB0UEQCABIAVBAnRqIgMzAQAhCyAEIAMvAQIiBWoiA0E/TQRAIAsgBK2GIAyEIQsMAgsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAUhAwwCCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsMAQsgBUGAzwBqLQAAIghBAnQiBiABaiIDQYQIajMBACELIANBhghqLwEAIQMgCEEIa0ETTQRAIAUgBkGA0QBqKAIAa60gA62GIAuEIQsgBkHA0wBqKAIAIANqIQMLIAMgAiAHQQFrIgcgB0EHdkGAAmogB0GAAkkbQYDLAGotAAAiBUECdCIIaiIKLwECaiEGIAozAQAgA62GIAuEIQsgBCAFQQRJBH8gBgUgByAIQYDSAGooAgBrrSAGrYYgC4QhCyAIQcDUAGooAgAgBmoLIgVqIgNBP00EQCALIASthiAMhCELDAELIARBwABGBEAgACgCBCAAKAIQaiAMNwAAIAAgACgCEEEIajYCECAFIQMMAQsgACgCBCAAKAIQaiALIASthiAMhDcAACAAIAAoAhBBCGo2AhAgA0FAaiEDIAtBwAAgBGutiCELCyAAIAs3A5guIAAgAzYCoC4gCSAAKALwLUkNAAsLIAFBgAhqMwEAIQwCQCADIAFBgghqLwEAIgJqIgFBP00EQCAMIAOthiALhCEMDAELIANBwABGBEAgACgCBCAAKAIQaiALNwAAIAAgACgCEEEIajYCECACIQEMAQsgACgCBCAAKAIQaiAMIAOthiALhDcAACAAIAAoAhBBCGo2AhAgAUFAaiEBIAxBwAAgA2utiCEMCyAAIAw3A5guIAAgATYCoC4L8AQBA38gAEHkAWohAgNAIAIgAUECdCIDakEAOwEAIAIgA0EEcmpBADsBACABQQJqIgFBngJHDQALIABBADsBzBUgAEEAOwHYEyAAQZQWakEAOwEAIABBkBZqQQA7AQAgAEGMFmpBADsBACAAQYgWakEAOwEAIABBhBZqQQA7AQAgAEGAFmpBADsBACAAQfwVakEAOwEAIABB+BVqQQA7AQAgAEH0FWpBADsBACAAQfAVakEAOwEAIABB7BVqQQA7AQAgAEHoFWpBADsBACAAQeQVakEAOwEAIABB4BVqQQA7AQAgAEHcFWpBADsBACAAQdgVakEAOwEAIABB1BVqQQA7AQAgAEHQFWpBADsBACAAQcwUakEAOwEAIABByBRqQQA7AQAgAEHEFGpBADsBACAAQcAUakEAOwEAIABBvBRqQQA7AQAgAEG4FGpBADsBACAAQbQUakEAOwEAIABBsBRqQQA7AQAgAEGsFGpBADsBACAAQagUakEAOwEAIABBpBRqQQA7AQAgAEGgFGpBADsBACAAQZwUakEAOwEAIABBmBRqQQA7AQAgAEGUFGpBADsBACAAQZAUakEAOwEAIABBjBRqQQA7AQAgAEGIFGpBADsBACAAQYQUakEAOwEAIABBgBRqQQA7AQAgAEH8E2pBADsBACAAQfgTakEAOwEAIABB9BNqQQA7AQAgAEHwE2pBADsBACAAQewTakEAOwEAIABB6BNqQQA7AQAgAEHkE2pBADsBACAAQeATakEAOwEAIABB3BNqQQA7AQAgAEIANwL8LSAAQeQJakEBOwEAIABBADYC+C0gAEEANgLwLQuKAwIGfwR+QcgAEAkiBEUEQEEADwsgBEIANwMAIARCADcDMCAEQQA2AiggBEIANwMgIARCADcDGCAEQgA3AxAgBEIANwMIIARCADcDOCABUARAIARBCBAJIgA2AgQgAEUEQCAEEAYgAwRAIANBADYCBCADQQ42AgALQQAPCyAAQgA3AwAgBA8LAkAgAaciBUEEdBAJIgZFDQAgBCAGNgIAIAVBA3RBCGoQCSIFRQ0AIAQgATcDECAEIAU2AgQDQCAAIAynIghBBHRqIgcpAwgiDVBFBEAgBygCACIHRQRAIAMEQCADQQA2AgQgA0ESNgIACyAGEAYgBRAGIAQQBkEADwsgBiAKp0EEdGoiCSANNwMIIAkgBzYCACAFIAhBA3RqIAs3AwAgCyANfCELIApCAXwhCgsgDEIBfCIMIAFSDQALIAQgCjcDCCAEQgAgCiACGzcDGCAFIAqnQQN0aiALNwMAIAQgCzcDMCAEDwsgAwRAIANBADYCBCADQQ42AgALIAYQBiAEEAZBAAvlAQIDfwF+QX8hBQJAIAAgASACQQAQJiIERQ0AIAAgASACEIsBIgZFDQACfgJAIAJBCHENACAAKAJAIAGnQQR0aigCCCICRQ0AIAIgAxAhQQBOBEAgAykDAAwCCyAAQQhqIgAEQCAAQQA2AgQgAEEPNgIAC0F/DwsgAxAqIAMgBCgCGDYCLCADIAQpAyg3AxggAyAEKAIUNgIoIAMgBCkDIDcDICADIAQoAhA7ATAgAyAELwFSOwEyQvwBQtwBIAQtAAYbCyEHIAMgBjYCCCADIAE3AxAgAyAHQgOENwMAQQAhBQsgBQspAQF/IAAgASACIABBCGoiABAmIgNFBEBBAA8LIAMoAjBBACACIAAQJQuAAwEGfwJ/An9BMCABQYB/Sw0BGgJ/IAFBgH9PBEBBhIQBQTA2AgBBAAwBC0EAQRAgAUELakF4cSABQQtJGyIFQcwAahAJIgFFDQAaIAFBCGshAgJAIAFBP3FFBEAgAiEBDAELIAFBBGsiBigCACIHQXhxIAFBP2pBQHFBCGsiASABQUBrIAEgAmtBD0sbIgEgAmsiA2shBCAHQQNxRQRAIAIoAgAhAiABIAQ2AgQgASACIANqNgIADAELIAEgBCABKAIEQQFxckECcjYCBCABIARqIgQgBCgCBEEBcjYCBCAGIAMgBigCAEEBcXJBAnI2AgAgAiADaiIEIAQoAgRBAXI2AgQgAiADEDsLAkAgASgCBCICQQNxRQ0AIAJBeHEiAyAFQRBqTQ0AIAEgBSACQQFxckECcjYCBCABIAVqIgIgAyAFayIFQQNyNgIEIAEgA2oiAyADKAIEQQFyNgIEIAIgBRA7CyABQQhqCyIBRQsEQEEwDwsgACABNgIAQQALCwoAIABBiIQBEAQL6AIBBX8gACgCUCEBIAAvATAhBEEEIQUDQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgBUGAgARGRQRAIAFBCGohASAFQQRqIQUMAQsLAkAgBEUNACAEQQNxIQUgACgCTCEBIARBAWtBA08EQCAEIAVrIQADQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgAUEIaiEBIABBBGsiAA0ACwsgBUUNAANAIAFBACABLwEAIgAgBGsiAiAAIAJJGzsBACABQQJqIQEgBUEBayIFDQALCwuDAQEEfyACQQFOBEAgAiAAKAJIIAFqIgJqIQMgACgCUCEEA0AgBCACKAAAQbHz3fF5bEEPdkH+/wdxaiIFLwEAIgYgAUH//wNxRwRAIAAoAkwgASAAKAI4cUH//wNxQQF0aiAGOwEAIAUgATsBAAsgAUEBaiEBIAJBAWoiAiADSQ0ACwsLUAECfyABIAAoAlAgACgCSCABaigAAEGx893xeWxBD3ZB/v8HcWoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILugEBAX8jAEEQayICJAAgAkEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgARBYIAJBEGokAAu9AQEBfyMAQRBrIgEkACABQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEANgJAIAFBEGokAEEAC70BAQF/IwBBEGsiASQAIAFBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAKAJAIQAgAUEQaiQAIAALvgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQVyAEQRBqJAALygEAIwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAAoAkAgASACQdSAASgCABEAADYCQCADQRBqJAALwAEBAX8jAEEQayIDJAAgA0EAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACEF0hACADQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFwhACACQRBqJAAgAAu2AQEBfyMAQRBrIgAkACAAQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEQaiQAQQgLwgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQWSEAIARBEGokACAAC8IBAQF/IwBBEGsiBCQAIARBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAiADEFYhACAEQRBqJAAgAAsHACAALwEwC8ABAQF/IwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAhBVIQAgA0EQaiQAIAALBwAgACgCQAsaACAAIAAoAkAgASACQdSAASgCABEAADYCQAsLACAAQQA2AkBBAAsHACAAKAIgCwQAQQgLzgUCA34BfyMAQYBAaiIIJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDhECAwwFAAEECAkJCQkJCQcJBgkLIANCCFoEfiACIAEoAmQ2AgAgAiABKAJoNgIEQggFQn8LIQYMCwsgARAGDAoLIAEoAhAiAgRAIAIgASkDGCABQeQAaiICEEEiA1ANCCABKQMIIgVCf4UgA1QEQCACBEAgAkEANgIEIAJBFTYCAAsMCQsgAUEANgIQIAEgAyAFfDcDCCABIAEpAwAgA3w3AwALIAEtAHgEQCABKQMAIQUMCQtCACEDIAEpAwAiBVAEQCABQgA3AyAMCgsDQCAAIAggBSADfSIFQoDAACAFQoDAAFQbEBEiB0J/VwRAIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwJCyAHUEUEQCABKQMAIgUgAyAHfCIDWA0KDAELCyABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEpAwggASkDICIFfSIHIAMgAyAHVhsiA1ANCAJAIAEtAHhFDQAgACAFQQAQFEF/Sg0AIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwHCyAAIAIgAxARIgZCf1cEQCABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEgASkDICAGfCIDNwMgIAZCAFINCEIAIQYgAyABKQMIWg0IIAFB5ABqBEAgAUEANgJoIAFBETYCZAsMBgsgASkDICABKQMAIgV9IAEpAwggBX0gAiADIAFB5ABqEEQiA0IAUw0FIAEgASkDACADfDcDIAwHCyACIAFBKGoQYEEfdawhBgwGCyABMABgIQYMBQsgASkDcCEGDAQLIAEpAyAgASkDAH0hBgwDCyABQeQAagRAIAFBADYCaCABQRw2AmQLC0J/IQYMAQsgASAFNwMgCyAIQYBAayQAIAYLBwAgACgCAAsPACAAIAAoAjBBAWo2AjALGABB+IMBQgA3AgBBgIQBQQA2AgBB+IMBCwcAIABBDGoLBwAgACgCLAsHACAAKAIoCwcAIAAoAhgLFQAgACABrSACrUIghoQgAyAEEIoBCxMBAX4gABAzIgFCIIinEAAgAacLbwEBfiABrSACrUIghoQhBSMAQRBrIgEkAAJ/IABFBEAgBVBFBEAgBARAIARBADYCBCAEQRI2AgALQQAMAgtBAEIAIAMgBBA6DAELIAEgBTcDCCABIAA2AgAgAUIBIAMgBBA6CyEAIAFBEGokACAACxQAIAAgASACrSADrUIghoQgBBBSC9oCAgJ/AX4CfyABrSACrUIghoQiByAAKQMwVEEAIARBCkkbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/DAELIAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtBfwwBCyADBH8gA0H//wNxQQhGIANBfUtyBUEBC0UEQCAAQQhqBEAgAEEANgIMIABBEDYCCAtBfwwBCyAAKAJAIgEgB6ciBUEEdGooAgAiAgR/IAIoAhAgA0YFIANBf0YLIQYgASAFQQR0aiIBIQUgASgCBCEBAkAgBgRAIAFFDQEgAUEAOwFQIAEgASgCAEF+cSIANgIAIAANASABECAgBUEANgIEQQAMAgsCQCABDQAgBSACECsiATYCBCABDQAgAEEIagRAIABBADYCDCAAQQ42AggLQX8MAgsgASAEOwFQIAEgAzYCECABIAEoAgBBAXI2AgALQQALCxwBAX4gACABIAIgAEEIahBMIgNCIIinEAAgA6cLHwEBfiAAIAEgAq0gA61CIIaEEBEiBEIgiKcQACAEpwteAQF+An5CfyAARQ0AGiAAKQMwIgIgAUEIcUUNABpCACACUA0AGiAAKAJAIQADQCACIAKnQQR0IABqQRBrKAIADQEaIAJCAX0iAkIAUg0AC0IACyICQiCIpxAAIAKnCxMAIAAgAa0gAq1CIIaEIAMQiwELnwEBAn4CfiACrSADrUIghoQhBUJ/IQQCQCAARQ0AIAAoAgQNACAAQQRqIQIgBUJ/VwRAIAIEQCACQQA2AgQgAkESNgIAC0J/DAILQgAhBCAALQAQDQAgBVANACAAKAIUIAEgBRARIgRCf1UNACAAKAIUIQAgAgRAIAIgACgCDDYCACACIAAoAhA2AgQLQn8hBAsgBAsiBEIgiKcQACAEpwueAQEBfwJ/IAAgACABrSACrUIghoQgAyAAKAIcEH8iAQRAIAEQMkF/TARAIABBCGoEQCAAIAEoAgw2AgggACABKAIQNgIMCyABEAtBAAwCC0EYEAkiBEUEQCAAQQhqBEAgAEEANgIMIABBDjYCCAsgARALQQAMAgsgBCAANgIAIARBADYCDCAEQgA3AgQgBCABNgIUIARBADoAEAsgBAsLsQICAX8BfgJ/QX8hBAJAIAAgAa0gAq1CIIaEIgZBAEEAECZFDQAgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAILIAAoAkAiASAGpyICQQR0aiIEKAIIIgUEQEEAIQQgBSADEHFBf0oNASAAQQhqBEAgAEEANgIMIABBDzYCCAtBfwwCCwJAIAQoAgAiBQRAIAUoAhQgA0YNAQsCQCABIAJBBHRqIgEoAgQiBA0AIAEgBRArIgQ2AgQgBA0AIABBCGoEQCAAQQA2AgwgAEEONgIIC0F/DAMLIAQgAzYCFCAEIAQoAgBBIHI2AgBBAAwCC0EAIQQgASACQQR0aiIBKAIEIgBFDQAgACAAKAIAQV9xIgI2AgAgAg0AIAAQICABQQA2AgQLIAQLCxQAIAAgAa0gAq1CIIaEIAQgBRBzCxIAIAAgAa0gAq1CIIaEIAMQFAtBAQF+An4gAUEAIAIbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0J/DAELIAAgASACIAMQdAsiBEIgiKcQACAEpwvGAwIFfwF+An4CQAJAIAAiBC0AGEECcQRAIARBCGoEQCAEQQA2AgwgBEEZNgIICwwBCyABRQRAIARBCGoEQCAEQQA2AgwgBEESNgIICwwBCyABECIiByABakEBay0AAEEvRwRAIAdBAmoQCSIARQRAIARBCGoEQCAEQQA2AgwgBEEONgIICwwCCwJAAkAgACIGIAEiBXNBA3ENACAFQQNxBEADQCAGIAUtAAAiAzoAACADRQ0DIAZBAWohBiAFQQFqIgVBA3ENAAsLIAUoAgAiA0F/cyADQYGChAhrcUGAgYKEeHENAANAIAYgAzYCACAFKAIEIQMgBkEEaiEGIAVBBGohBSADQYGChAhrIANBf3NxQYCBgoR4cUUNAAsLIAYgBS0AACIDOgAAIANFDQADQCAGIAUtAAEiAzoAASAGQQFqIQYgBUEBaiEFIAMNAAsLIAcgACIDakEvOwAACyAEQQBCAEEAEFIiAEUEQCADEAYMAQsgBCADIAEgAxsgACACEHQhCCADEAYgCEJ/VwRAIAAQCyAIDAMLIAQgCEEDQYCA/I8EEHNBf0oNASAEIAgQchoLQn8hCAsgCAsiCEIgiKcQACAIpwsQACAAIAGtIAKtQiCGhBByCxYAIAAgAa0gAq1CIIaEIAMgBCAFEGYL3iMDD38IfgF8IwBB8ABrIgkkAAJAIAFBAE5BACAAG0UEQCACBEAgAkEANgIEIAJBEjYCAAsMAQsgACkDGCISAn5BsIMBKQMAIhNCf1EEQCAJQoOAgIBwNwMwIAlChoCAgPAANwMoIAlCgYCAgCA3AyBBsIMBQQAgCUEgahAkNwMAIAlCj4CAgHA3AxAgCUKJgICAoAE3AwAgCUKMgICA0AE3AwhBuIMBQQggCRAkNwMAQbCDASkDACETCyATC4MgE1IEQCACBEAgAkEANgIEIAJBHDYCAAsMAQsgASABQRByQbiDASkDACITIBKDIBNRGyIKQRhxQRhGBEAgAgRAIAJBADYCBCACQRk2AgALDAELIAlBOGoQKgJAIAAgCUE4ahAhBEACQCAAKAIMQQVGBEAgACgCEEEsRg0BCyACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAgsgCkEBcUUEQCACBEAgAkEANgIEIAJBCTYCAAsMAwsgAhBJIgVFDQEgBSAKNgIEIAUgADYCACAKQRBxRQ0CIAUgBSgCFEECcjYCFCAFIAUoAhhBAnI2AhgMAgsgCkECcQRAIAIEQCACQQA2AgQgAkEKNgIACwwCCyAAEDJBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsCfyAKQQhxBEACQCACEEkiAUUNACABIAo2AgQgASAANgIAIApBEHFFDQAgASABKAIUQQJyNgIUIAEgASgCGEECcjYCGAsgAQwBCyMAQUBqIg4kACAOQQhqECoCQCAAIA5BCGoQIUF/TARAIAIEQCACIAAoAgw2AgAgAiAAKAIQNgIECwwBCyAOLQAIQQRxRQRAIAIEQCACQYoBNgIEIAJBBDYCAAsMAQsgDikDICETIAIQSSIFRQRAQQAhBQwBCyAFIAo2AgQgBSAANgIAIApBEHEEQCAFIAUoAhRBAnI2AhQgBSAFKAIYQQJyNgIYCwJAAkACQCATUARAAn8gACEBAkADQCABKQMYQoCAEINCAFINASABKAIAIgENAAtBAQwBCyABQQBCAEESEA6nCw0EIAVBCGoEQCAFQQA2AgwgBUETNgIICwwBCyMAQdAAayIBJAACQCATQhVYBEAgBUEIagRAIAVBADYCDCAFQRM2AggLDAELAkACQCAFKAIAQgAgE0KqgAQgE0KqgARUGyISfUECEBRBf0oNACAFKAIAIgMoAgxBBEYEQCADKAIQQRZGDQELIAVBCGoEQCAFIAMoAgw2AgggBSADKAIQNgIMCwwBCyAFKAIAEDMiE0J/VwRAIAUoAgAhAyAFQQhqIggEQCAIIAMoAgw2AgAgCCADKAIQNgIECwwBCyAFKAIAIBJBACAFQQhqIg8QLSIERQ0BIBJCqoAEWgRAAkAgBCkDCEIUVARAIARBADoAAAwBCyAEQhQ3AxAgBEEBOgAACwsgAQRAIAFBADYCBCABQRM2AgALIARCABATIQwCQCAELQAABH4gBCkDCCAEKQMQfQVCAAunIgdBEmtBA0sEQEJ/IRcDQCAMQQFrIQMgByAMakEVayEGAkADQCADQQFqIgNB0AAgBiADaxB6IgNFDQEgA0EBaiIMQZ8SQQMQPQ0ACwJAIAMgBCgCBGusIhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBC0AAAR+IAQpAxAFQgALIRICQCAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsgBEIEEBMoAABB0JaVMEcEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsCQAJAAkAgEkIUVA0AIAQoAgQgEqdqQRRrKAAAQdCWmThHDQACQCASQhR9IhQgBCIDKQMIVgRAIANBADoAAAwBCyADIBQ3AxAgA0EBOgAACyAFKAIUIRAgBSgCACEGIAMtAAAEfiAEKQMQBUIACyEWIARCBBATGiAEEAwhCyAEEAwhDSAEEB0iFEJ/VwRAIAEEQCABQRY2AgQgAUEENgIACwwECyAUQjh8IhUgEyAWfCIWVgRAIAEEQCABQQA2AgQgAUEVNgIACwwECwJAAkAgEyAUVg0AIBUgEyAEKQMIfFYNAAJAIBQgE30iFSAEKQMIVgRAIANBADoAAAwBCyADIBU3AxAgA0EBOgAAC0EAIQcMAQsgBiAUQQAQFEF/TARAIAEEQCABIAYoAgw2AgAgASAGKAIQNgIECwwFC0EBIQcgBkI4IAFBEGogARAtIgNFDQQLIANCBBATKAAAQdCWmTBHBEAgAQRAIAFBADYCBCABQRU2AgALIAdFDQQgAxAIDAQLIAMQHSEVAkAgEEEEcSIGRQ0AIBQgFXxCDHwgFlENACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgA0IEEBMaIAMQFSIQIAsgC0H//wNGGyELIAMQFSIRIA0gDUH//wNGGyENAkAgBkUNACANIBFGQQAgCyAQRhsNACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgCyANcgRAIAEEQCABQQA2AgQgAUEBNgIACyAHRQ0EIAMQCAwECyADEB0iGCADEB1SBEAgAQRAIAFBADYCBCABQQE2AgALIAdFDQQgAxAIDAQLIAMQHSEVIAMQHSEWIAMtAABFBEAgAQRAIAFBADYCBCABQRQ2AgALIAdFDQQgAxAIDAQLIAcEQCADEAgLAkAgFkIAWQRAIBUgFnwiGSAWWg0BCyABBEAgAUEWNgIEIAFBBDYCAAsMBAsgEyAUfCIUIBlUBEAgAQRAIAFBADYCBCABQRU2AgALDAQLAkAgBkUNACAUIBlRDQAgAQRAIAFBADYCBCABQRU2AgALDAQLIBggFUIugFgNASABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCASIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAUoAhQhAyAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsgBC0AAAR+IAQpAxAFQgALIRQgBEIEEBMaIAQQFQRAIAEEQCABQQA2AgQgAUEBNgIACwwDCyAEEAwgBBAMIgZHBEAgAQRAIAFBADYCBCABQRM2AgALDAMLIAQQFSEHIAQQFa0iFiAHrSIVfCIYIBMgFHwiFFYEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCADQQRxRQ0AIBQgGFENACABBEAgAUEANgIEIAFBFTYCAAsMAwsgBq0gARBqIgNFDQIgAyAWNwMgIAMgFTcDGCADQQA6ACwMAQsgGCABEGoiA0UNASADIBY3AyAgAyAVNwMYIANBAToALAsCQCASQhR8IhQgBCkDCFYEQCAEQQA6AAAMAQsgBCAUNwMQIARBAToAAAsgBBAMIQYCQCADKQMYIAMpAyB8IBIgE3xWDQACQCAGRQRAIAUtAARBBHFFDQELAkAgEkIWfCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIACyIUIAatIhJUDQEgBS0ABEEEcUEAIBIgFFIbDQEgBkUNACADIAQgEhATIAZBACABEDUiBjYCKCAGDQAgAxAWDAILAkAgEyADKQMgIhJYBEACQCASIBN9IhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBCADKQMYEBMiBkUNAiAGIAMpAxgQFyIHDQEgAQRAIAFBADYCBCABQQ42AgALIAMQFgwDCyAFKAIAIBJBABAUIQcgBSgCACEGIAdBf0wEQCABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAMLQQAhByAGEDMgAykDIFENACABBEAgAUEANgIEIAFBEzYCAAsgAxAWDAILQgAhFAJAAkAgAykDGCIWUEUEQANAIBQgAykDCFIiC0UEQCADLQAsDQMgFkIuVA0DAn8CQCADKQMQIhVCgIAEfCISIBVaQQAgEkKAgICAAVQbRQ0AIAMoAgAgEqdBBHQQNCIGRQ0AIAMgBjYCAAJAIAMpAwgiFSASWg0AIAYgFadBBHRqIgZCADcCACAGQgA3AAUgFUIBfCIVIBJRDQADQCADKAIAIBWnQQR0aiIGQgA3AgAgBkIANwAFIBVCAXwiFSASUg0ACwsgAyASNwMIIAMgEjcDEEEBDAELIAEEQCABQQA2AgQgAUEONgIAC0EAC0UNBAtB2AAQCSIGBH8gBkIANwMgIAZBADYCGCAGQv////8PNwMQIAZBADsBDCAGQb+GKDYCCCAGQQE6AAYgBkEAOwEEIAZBADYCACAGQgA3A0ggBkGAgNiNeDYCRCAGQgA3AyggBkIANwMwIAZCADcDOCAGQUBrQQA7AQAgBkIANwNQIAYFQQALIQYgAygCACAUp0EEdGogBjYCAAJAIAYEQCAGIAUoAgAgB0EAIAEQaCISQn9VDQELIAsNBCABKAIAQRNHDQQgAQRAIAFBADYCBCABQRU2AgALDAQLIBRCAXwhFCAWIBJ9IhZCAFINAAsLIBQgAykDCFINAAJAIAUtAARBBHFFDQAgBwRAIActAAAEfyAHKQMQIAcpAwhRBUEAC0UNAgwBCyAFKAIAEDMiEkJ/VwRAIAUoAgAhBiABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAULIBIgAykDGCADKQMgfFINAQsgBxAIAn4gCARAAn8gF0IAVwRAIAUgCCABEEghFwsgBSADIAEQSCISIBdVCwRAIAgQFiASDAILIAMQFgwFC0IAIAUtAARBBHFFDQAaIAUgAyABEEgLIRcgAyEIDAMLIAEEQCABQQA2AgQgAUEVNgIACyAHEAggAxAWDAILIAMQFiAHEAgMAQsgAQRAIAFBADYCBCABQRU2AgALIAMQFgsCQCAMIAQoAgRrrCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIAC6ciB0ESa0EDSw0BCwsgBBAIIBdCf1UNAwwBCyAEEAgLIA8iAwRAIAMgASgCADYCACADIAEoAgQ2AgQLIAgQFgtBACEICyABQdAAaiQAIAgNAQsgAgRAIAIgBSgCCDYCACACIAUoAgw2AgQLDAELIAUgCCgCADYCQCAFIAgpAwg3AzAgBSAIKQMQNwM4IAUgCCgCKDYCICAIEAYgBSgCUCEIIAVBCGoiBCEBQQAhBwJAIAUpAzAiE1ANAEGAgICAeCEGAn8gE7pEAAAAAAAA6D+jRAAA4P///+9BpCIaRAAAAAAAAPBBYyAaRAAAAAAAAAAAZnEEQCAaqwwBC0EACyIDQYCAgIB4TQRAIANBAWsiA0EBdiADciIDQQJ2IANyIgNBBHYgA3IiA0EIdiADciIDQRB2IANyQQFqIQYLIAYgCCgCACIMTQ0AIAYQPCILRQRAIAEEQCABQQA2AgQgAUEONgIACwwBCwJAIAgpAwhCACAMG1AEQCAIKAIQIQ8MAQsgCCgCECEPA0AgDyAHQQJ0aigCACIBBEADQCABKAIYIQMgASALIAEoAhwgBnBBAnRqIg0oAgA2AhggDSABNgIAIAMiAQ0ACwsgB0EBaiIHIAxHDQALCyAPEAYgCCAGNgIAIAggCzYCEAsCQCAFKQMwUA0AQgAhEwJAIApBBHFFBEADQCAFKAJAIBOnQQR0aigCACgCMEEAQQAgAhAlIgFFDQQgBSgCUCABIBNBCCAEEE1FBEAgBCgCAEEKRw0DCyATQgF8IhMgBSkDMFQNAAwDCwALA0AgBSgCQCATp0EEdGooAgAoAjBBAEEAIAIQJSIBRQ0DIAUoAlAgASATQQggBBBNRQ0BIBNCAXwiEyAFKQMwVA0ACwwBCyACBEAgAiAEKAIANgIAIAIgBCgCBDYCBAsMAQsgBSAFKAIUNgIYDAELIAAgACgCMEEBajYCMCAFEEtBACEFCyAOQUBrJAAgBQsiBQ0BIAAQGhoLQQAhBQsgCUHwAGokACAFCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwAL4CoDEX8IfgN8IwBBwMAAayIHJABBfyECAkAgAEUNAAJ/IAAtAChFBEBBACAAKAIYIAAoAhRGDQEaC0EBCyEBAkACQCAAKQMwIhRQRQRAIAAoAkAhCgNAIAogEqdBBHRqIgMtAAwhCwJAAkAgAygCCA0AIAsNACADKAIEIgNFDQEgAygCAEUNAQtBASEBCyAXIAtBAXOtQv8Bg3whFyASQgF8IhIgFFINAAsgF0IAUg0BCyAAKAIEQQhxIAFyRQ0BAn8gACgCACIDKAIkIgFBA0cEQCADKAIgBH9BfyADEBpBAEgNAhogAygCJAUgAQsEQCADEEMLQX8gA0EAQgBBDxAOQgBTDQEaIANBAzYCJAtBAAtBf0oNASAAKAIAKAIMQRZGBEAgACgCACgCEEEsRg0CCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLDAILIAFFDQAgFCAXVARAIABBCGoEQCAAQQA2AgwgAEEUNgIICwwCCyAXp0EDdBAJIgtFDQFCfyEWQgAhEgNAAkAgCiASp0EEdGoiBigCACIDRQ0AAkAgBigCCA0AIAYtAAwNACAGKAIEIgFFDQEgASgCAEUNAQsgFiADKQNIIhMgEyAWVhshFgsgBi0ADEUEQCAXIBlYBEAgCxAGIABBCGoEQCAAQQA2AgwgAEEUNgIICwwECyALIBmnQQN0aiASNwMAIBlCAXwhGQsgEkIBfCISIBRSDQALIBcgGVYEQCALEAYgAEEIagRAIABBADYCDCAAQRQ2AggLDAILAkACQCAAKAIAKQMYQoCACINQDQACQAJAIBZCf1INACAAKQMwIhNQDQIgE0IBgyEVIAAoAkAhAwJAIBNCAVEEQEJ/IRRCACESQgAhFgwBCyATQn6DIRlCfyEUQgAhEkIAIRYDQCADIBKnQQR0aigCACIBBEAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyADIBJCAYQiGKdBBHRqKAIAIgEEQCAWIAEpA0giEyATIBZUIgEbIRYgFCAYIAEbIRQLIBJCAnwhEiAZQgJ9IhlQRQ0ACwsCQCAVUA0AIAMgEqdBBHRqKAIAIgFFDQAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyAUQn9RDQBCACETIwBBEGsiBiQAAkAgACAUIABBCGoiCBBBIhVQDQAgFSAAKAJAIBSnQQR0aigCACIKKQMgIhh8IhQgGFpBACAUQn9VG0UEQCAIBEAgCEEWNgIEIAhBBDYCAAsMAQsgCi0ADEEIcUUEQCAUIRMMAQsgACgCACAUQQAQFCEBIAAoAgAhAyABQX9MBEAgCARAIAggAygCDDYCACAIIAMoAhA2AgQLDAELIAMgBkEMakIEEBFCBFIEQCAAKAIAIQEgCARAIAggASgCDDYCACAIIAEoAhA2AgQLDAELIBRCBHwgFCAGKAAMQdCWncAARhtCFEIMAn9BASEBAkAgCikDKEL+////D1YNACAKKQMgQv7///8PVg0AQQAhAQsgAQsbfCIUQn9XBEAgCARAIAhBFjYCBCAIQQQ2AgALDAELIBQhEwsgBkEQaiQAIBMiFkIAUg0BIAsQBgwFCyAWUA0BCwJ/IAAoAgAiASgCJEEBRgRAIAFBDGoEQCABQQA2AhAgAUESNgIMC0F/DAELQX8gAUEAIBZBERAOQgBTDQAaIAFBATYCJEEAC0F/Sg0BC0IAIRYCfyAAKAIAIgEoAiRBAUYEQCABQQxqBEAgAUEANgIQIAFBEjYCDAtBfwwBC0F/IAFBAEIAQQgQDkIAUw0AGiABQQE2AiRBAAtBf0oNACAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLIAsQBgwCCyAAKAJUIgIEQCACQgA3AxggAigCAEQAAAAAAAAAACACKAIMIAIoAgQRDgALIABBCGohBCAXuiEcQgAhFAJAAkACQANAIBcgFCITUgRAIBO6IByjIRsgE0IBfCIUuiAcoyEaAkAgACgCVCICRQ0AIAIgGjkDKCACIBs5AyAgAisDECAaIBuhRAAAAAAAAAAAoiAboCIaIAIrAxihY0UNACACKAIAIBogAigCDCACKAIEEQ4AIAIgGjkDGAsCfwJAIAAoAkAgCyATp0EDdGopAwAiE6dBBHRqIg0oAgAiAQRAIAEpA0ggFlQNAQsgDSgCBCEFAkACfwJAIA0oAggiAkUEQCAFRQ0BQQEgBSgCACICQQFxDQIaIAJBwABxQQZ2DAILQQEgBQ0BGgsgDSABECsiBTYCBCAFRQ0BIAJBAEcLIQZBACEJIwBBEGsiDCQAAkAgEyAAKQMwWgRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/IQkMAQsgACgCQCIKIBOnIgNBBHRqIg8oAgAiAkUNACACLQAEDQACQCACKQNIQhp8IhhCf1cEQCAAQQhqBEAgAEEWNgIMIABBBDYCCAsMAQtBfyEJIAAoAgAgGEEAEBRBf0wEQCAAKAIAIQIgAEEIagRAIAAgAigCDDYCCCAAIAIoAhA2AgwLDAILIAAoAgBCBCAMQQxqIABBCGoiDhAtIhBFDQEgEBAMIQEgEBAMIQggEC0AAAR/IBApAxAgECkDCFEFQQALIQIgEBAIIAJFBEAgDgRAIA5BADYCBCAOQRQ2AgALDAILAkAgCEUNACAAKAIAIAGtQQEQFEF/TARAQYSEASgCACECIA4EQCAOIAI2AgQgDkEENgIACwwDC0EAIAAoAgAgCEEAIA4QRSIBRQ0BIAEgCEGAAiAMQQhqIA4QbiECIAEQBiACRQ0BIAwoAggiAkUNACAMIAIQbSICNgIIIA8oAgAoAjQgAhBvIQIgDygCACACNgI0CyAPKAIAIgJBAToABEEAIQkgCiADQQR0aigCBCIBRQ0BIAEtAAQNASACKAI0IQIgAUEBOgAEIAEgAjYCNAwBC0F/IQkLIAxBEGokACAJQQBIDQUgACgCABAfIhhCAFMNBSAFIBg3A0ggBgRAQQAhDCANKAIIIg0hASANRQRAIAAgACATQQhBABB/IgwhASAMRQ0HCwJAAkAgASAHQQhqECFBf0wEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMAQsgBykDCCISQsAAg1AEQCAHQQA7ATggByASQsAAhCISNwMICwJAAkAgBSgCECICQX5PBEAgBy8BOCIDRQ0BIAUgAzYCECADIQIMAgsgAg0AIBJCBINQDQAgByAHKQMgNwMoIAcgEkIIhCISNwMIQQAhAgwBCyAHIBJC9////w+DIhI3AwgLIBJCgAGDUARAIAdBADsBOiAHIBJCgAGEIhI3AwgLAn8gEkIEg1AEQEJ/IRVBgAoMAQsgBSAHKQMgIhU3AyggEkIIg1AEQAJAAkACQAJAQQggAiACQX1LG0H//wNxDg0CAwMDAwMDAwEDAwMAAwtBgApBgAIgFUKUwuTzD1YbDAQLQYAKQYACIBVCg4Ow/w9WGwwDC0GACkGAAiAVQv////8PVhsMAgtBgApBgAIgFUIAUhsMAQsgBSAHKQMoNwMgQYACCyEPIAAoAgAQHyITQn9XBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyAFIAUvAQxB9/8DcTsBDCAAIAUgDxA3IgpBAEgNACAHLwE4IghBCCAFKAIQIgMgA0F9SxtB//8DcSICRyEGAkACQAJAAkACQAJAAkAgAiAIRwRAIANBAEchAwwBC0EAIQMgBS0AAEGAAXFFDQELIAUvAVIhCSAHLwE6IQIMAQsgBS8BUiIJIAcvAToiAkYNAQsgASABKAIwQQFqNgIwIAJB//8DcQ0BIAEhAgwCCyABIAEoAjBBAWo2AjBBACEJDAILQSZBACAHLwE6QQFGGyICRQRAIAQEQCAEQQA2AgQgBEEYNgIACyABEAsMAwsgACABIAcvATpBACAAKAIcIAIRBgAhAiABEAsgAkUNAgsgCUEARyEJIAhBAEcgBnFFBEAgAiEBDAELIAAgAiAHLwE4EIEBIQEgAhALIAFFDQELAkAgCEUgBnJFBEAgASECDAELIAAgAUEAEIABIQIgARALIAJFDQELAkAgA0UEQCACIQMMAQsgACACIAUoAhBBASAFLwFQEIIBIQMgAhALIANFDQELAkAgCUUEQCADIQEMAQsgBSgCVCIBRQRAIAAoAhwhAQsCfyAFLwFSGkEBCwRAIAQEQCAEQQA2AgQgBEEYNgIACyADEAsMAgsgACADIAUvAVJBASABQQARBgAhASADEAsgAUUNAQsgACgCABAfIhhCf1cEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELAkAgARAyQQBOBEACfwJAAkAgASAHQUBrQoDAABARIhJCAVMNAEIAIRkgFUIAVQRAIBW5IRoDQCAAIAdBQGsgEhAbQQBIDQMCQCASQoDAAFINACAAKAJUIgJFDQAgAiAZQoBAfSIZuSAaoxB7CyABIAdBQGtCgMAAEBEiEkIAVQ0ACwwBCwNAIAAgB0FAayASEBtBAEgNAiABIAdBQGtCgMAAEBEiEkIAVQ0ACwtBACASQn9VDQEaIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIECwtBfwshAiABEBoaDAELIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIEC0F/IQILIAEgB0EIahAhQX9MBEAgBARAIAQgASgCDDYCACAEIAEoAhA2AgQLQX8hAgsCf0EAIQkCQCABIgNFDQADQCADLQAaQQFxBEBB/wEhCSADQQBCAEEQEA4iFUIAUw0CIBVCBFkEQCADQQxqBEAgA0EANgIQIANBFDYCDAsMAwsgFachCQwCCyADKAIAIgMNAAsLIAlBGHRBGHUiA0F/TAsEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsgARALDAELIAEQCyACQQBIDQAgACgCABAfIRUgACgCACECIBVCf1cEQCAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsMAQsgAiATEHVBf0wEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELIAcpAwgiE0LkAINC5ABSBEAgBARAIARBADYCBCAEQRQ2AgALDAELAkAgBS0AAEEgcQ0AIBNCEINQRQRAIAUgBygCMDYCFAwBCyAFQRRqEAEaCyAFIAcvATg2AhAgBSAHKAI0NgIYIAcpAyAhEyAFIBUgGH03AyAgBSATNwMoIAUgBS8BDEH5/wNxIANB/wFxQQF0cjsBDCAPQQp2IQNBPyEBAkACQAJAAkAgBSgCECICQQxrDgMAAQIBCyAFQS47AQoMAgtBLSEBIAMNACAFKQMoQv7///8PVg0AIAUpAyBC/v///w9WDQBBFCEBIAJBCEYNACAFLwFSQQFGDQAgBSgCMCICBH8gAi8BBAVBAAtB//8DcSICBEAgAiAFKAIwKAIAakEBay0AAEEvRg0BC0EKIQELIAUgATsBCgsgACAFIA8QNyICQQBIDQAgAiAKRwRAIAQEQCAEQQA2AgQgBEEUNgIACwwBCyAAKAIAIBUQdUF/Sg0BIAAoAgAhAiAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsLIA0NByAMEAsMBwsgDQ0CIAwQCwwCCyAFIAUvAQxB9/8DcTsBDCAAIAVBgAIQN0EASA0FIAAgEyAEEEEiE1ANBSAAKAIAIBNBABAUQX9MBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwGCyAFKQMgIRIjAEGAQGoiAyQAAkAgElBFBEAgAEEIaiECIBK6IRoDQEF/IQEgACgCACADIBJCgMAAIBJCgMAAVBsiEyACEGVBAEgNAiAAIAMgExAbQQBIDQIgACgCVCAaIBIgE30iErqhIBqjEHsgEkIAUg0ACwtBACEBCyADQYBAayQAIAFBf0oNAUEBIREgAUEcdkEIcUEIRgwCCyAEBEAgBEEANgIEIARBDjYCAAsMBAtBAAtFDQELCyARDQBBfyECAkAgACgCABAfQgBTDQAgFyEUQQAhCkIAIRcjAEHwAGsiESQAAkAgACgCABAfIhVCAFkEQCAUUEUEQANAIAAgACgCQCALIBenQQN0aigCAEEEdGoiAygCBCIBBH8gAQUgAygCAAtBgAQQNyIBQQBIBEBCfyEXDAQLIAFBAEcgCnIhCiAXQgF8IhcgFFINAAsLQn8hFyAAKAIAEB8iGEJ/VwRAIAAoAgAhASAAQQhqBEAgACABKAIMNgIIIAAgASgCEDYCDAsMAgsgEULiABAXIgZFBEAgAEEIagRAIABBADYCDCAAQQ42AggLDAILIBggFX0hEyAVQv////8PViAUQv//A1ZyIApyQQFxBEAgBkGZEkEEECwgBkIsEBggBkEtEA0gBkEtEA0gBkEAEBIgBkEAEBIgBiAUEBggBiAUEBggBiATEBggBiAVEBggBkGUEkEEECwgBkEAEBIgBiAYEBggBkEBEBILIAZBnhJBBBAsIAZBABASIAYgFEL//wMgFEL//wNUG6dB//8DcSIBEA0gBiABEA0gBkF/IBOnIBNC/v///w9WGxASIAZBfyAVpyAVQv7///8PVhsQEiAGIABBJEEgIAAtACgbaigCACIDBH8gAy8BBAVBAAtB//8DcRANIAYtAABFBEAgAEEIagRAIABBADYCDCAAQRQ2AggLIAYQCAwCCyAAIAYoAgQgBi0AAAR+IAYpAxAFQgALEBshASAGEAggAUEASA0BIAMEQCAAIAMoAgAgAzMBBBAbQQBIDQILIBMhFwwBCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLQn8hFwsgEUHwAGokACAXQgBTDQAgACgCABAfQj+HpyECCyALEAYgAkEASA0BAn8gACgCACIBKAIkQQFHBEAgAUEMagRAIAFBADYCECABQRI2AgwLQX8MAQsgASgCICICQQJPBEAgAUEMagRAIAFBADYCECABQR02AgwLQX8MAQsCQCACQQFHDQAgARAaQQBODQBBfwwBCyABQQBCAEEJEA5Cf1cEQCABQQI2AiRBfwwBCyABQQA2AiRBAAtFDQIgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyALEAYLIAAoAlQQfCAAKAIAEENBfyECDAILIAAoAlQQfAsgABBLQQAhAgsgB0HAwABqJAAgAgtFAEHwgwFCADcDAEHogwFCADcDAEHggwFCADcDAEHYgwFCADcDAEHQgwFCADcDAEHIgwFCADcDAEHAgwFCADcDAEHAgwELoQMBCH8jAEGgAWsiAiQAIAAQMQJAAn8CQCAAKAIAIgFBAE4EQCABQbATKAIASA0BCyACIAE2AhAgAkEgakH2ESACQRBqEHZBASEGIAJBIGohBCACQSBqECIhA0EADAELIAFBAnQiAUGwEmooAgAhBQJ/AkACQCABQcATaigCAEEBaw4CAAEECyAAKAIEIQNB9IIBKAIAIQdBACEBAkACQANAIAMgAUHQ8QBqLQAARwRAQdcAIQQgAUEBaiIBQdcARw0BDAILCyABIgQNAEGw8gAhAwwBC0Gw8gAhAQNAIAEtAAAhCCABQQFqIgMhASAIDQAgAyEBIARBAWsiBA0ACwsgBygCFBogAwwBC0EAIAAoAgRrQQJ0QdjAAGooAgALIgRFDQEgBBAiIQMgBUUEQEEAIQVBASEGQQAMAQsgBRAiQQJqCyEBIAEgA2pBAWoQCSIBRQRAQegSKAIAIQUMAQsgAiAENgIIIAJBrBJBkRIgBhs2AgQgAkGsEiAFIAYbNgIAIAFBqwogAhB2IAAgATYCCCABIQULIAJBoAFqJAAgBQszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQBxogACAAKAIUIAFqNgIUIAILBgBBsIgBCwYAQayIAQsGAEGkiAELBwAgAEEEagsHACAAQQhqCyYBAX8gACgCFCIBBEAgARALCyAAKAIEIQEgAEEEahAxIAAQBiABC6kBAQN/AkAgAC0AACICRQ0AA0AgAS0AACIERQRAIAIhAwwCCwJAIAIgBEYNACACQSByIAIgAkHBAGtBGkkbIAEtAAAiAkEgciACIAJBwQBrQRpJG0YNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEiAEEgciAAIABBwQBrQRpJGyABLQAAIgBBIHIgACAAQcEAa0EaSRtrC8sGAgJ+An8jAEHgAGsiByQAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDg8AAQoCAwQGBwgICAgICAUICyABQgA3AyAMCQsgACACIAMQESIFQn9XBEAgAUEIaiIBBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMCAsCQCAFUARAIAEpAygiAyABKQMgUg0BIAEgAzcDGCABQQE2AgQgASgCAEUNASAAIAdBKGoQIUF/TARAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAoLAkAgBykDKCIDQiCDUA0AIAcoAlQgASgCMEYNACABQQhqBEAgAUEANgIMIAFBBzYCCAsMCgsgA0IEg1ANASAHKQNAIAEpAxhRDQEgAUEIagRAIAFBADYCDCABQRU2AggLDAkLIAEoAgQNACABKQMoIgMgASkDICIGVA0AIAUgAyAGfSIDWA0AIAEoAjAhBANAIAECfyAFIAN9IgZC/////w8gBkL/////D1QbIganIQBBACACIAOnaiIIRQ0AGiAEIAggAEHUgAEoAgARAAALIgQ2AjAgASABKQMoIAZ8NwMoIAUgAyAGfCIDVg0ACwsgASABKQMgIAV8NwMgDAgLIAEoAgRFDQcgAiABKQMYIgM3AxggASgCMCEAIAJBADYCMCACIAM3AyAgAiAANgIsIAIgAikDAELsAYQ3AwAMBwsgA0IIWgR+IAIgASgCCDYCACACIAEoAgw2AgRCCAVCfwshBQwGCyABEAYMBQtCfyEFIAApAxgiA0J/VwRAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAULIAdBfzYCGCAHQo+AgICAAjcDECAHQoyAgIDQATcDCCAHQomAgICgATcDACADQQggBxAkQn+FgyEFDAQLIANCD1gEQCABQQhqBEAgAUEANgIMIAFBEjYCCAsMAwsgAkUNAgJAIAAgAikDACACKAIIEBRBAE4EQCAAEDMiA0J/VQ0BCyABQQhqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwDCyABIAM3AyAMAwsgASkDICEFDAILIAFBCGoEQCABQQA2AgwgAUEcNgIICwtCfyEFCyAHQeAAaiQAIAULjAcCAn4CfyMAQRBrIgckAAJAAkACQAJAAkACQAJAAkACQAJAIAQOEQABAgMFBggICAgICAgIBwgECAsgAUJ/NwMgIAFBADoADyABQQA7AQwgAUIANwMYIAEoAqxAIAEoAqhAKAIMEQEArUIBfSEFDAgLQn8hBSABKAIADQdCACEFIANQDQcgAS0ADQ0HIAFBKGohBAJAA0ACQCAHIAMgBX03AwggASgCrEAgAiAFp2ogB0EIaiABKAKoQCgCHBEAACEIQgAgBykDCCAIQQJGGyAFfCEFAkACQAJAIAhBAWsOAwADAQILIAFBAToADSABKQMgIgNCf1cEQCABBEAgAUEANgIEIAFBFDYCAAsMBQsgAS0ADkUNBCADIAVWDQQgASADNwMYIAFBAToADyACIAQgA6cQBxogASkDGCEFDAwLIAEtAAwNAyAAIARCgMAAEBEiBkJ/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwECyAGUARAIAFBAToADCABKAKsQCABKAKoQCgCGBEDACABKQMgQn9VDQEgAUIANwMgDAELAkAgASkDIEIAWQRAIAFBADoADgwBCyABIAY3AyALIAEoAqxAIAQgBiABKAKoQCgCFBEPABoLIAMgBVYNAQwCCwsgASgCAA0AIAEEQCABQQA2AgQgAUEUNgIACwsgBVBFBEAgAUEAOgAOIAEgASkDGCAFfDcDGAwIC0J/QgAgASgCABshBQwHCyABKAKsQCABKAKoQCgCEBEBAK1CAX0hBQwGCyABLQAQBEAgAS0ADQRAIAIgAS0ADwR/QQAFQQggASgCFCIAIABBfUsbCzsBMCACIAEpAxg3AyAgAiACKQMAQsgAhDcDAAwHCyACIAIpAwBCt////w+DNwMADAYLIAJBADsBMCACKQMAIQMgAS0ADQRAIAEpAxghBSACIANCxACENwMAIAIgBTcDGEIAIQUMBgsgAiADQrv///8Pg0LAAIQ3AwAMBQsgAS0ADw0EIAEoAqxAIAEoAqhAKAIIEQEArCEFDAQLIANCCFoEfiACIAEoAgA2AgAgAiABKAIENgIEQggFQn8LIQUMAwsgAUUNAiABKAKsQCABKAKoQCgCBBEDACABEDEgARAGDAILIAdBfzYCAEEQIAcQJEI/hCEFDAELIAEEQCABQQA2AgQgAUEUNgIAC0J/IQULIAdBEGokACAFC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQA6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAu3fAIefwZ+IAIpAwAhIiAAIAE2AhwgACAiQv////8PICJC/////w9UGz4CICAAQRBqIQECfyAALQAEBEACfyAALQAMQQJ0IQpBfiEEAkACQAJAIAEiBUUNACAFKAIgRQ0AIAUoAiRFDQAgBSgCHCIDRQ0AIAMoAgAgBUcNAAJAAkAgAygCICIGQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyAGQZoFRg0AIAZBKkcNAQsgCkEFSw0AAkACQCAFKAIMRQ0AIAUoAgQiAQRAIAUoAgBFDQELIAZBmgVHDQEgCkEERg0BCyAFQeDAACgCADYCGEF+DAQLIAUoAhBFDQEgAygCJCEEIAMgCjYCJAJAIAMoAhAEQCADEDACQCAFKAIQIgYgAygCECIIIAYgCEkbIgFFDQAgBSgCDCADKAIIIAEQBxogBSAFKAIMIAFqNgIMIAMgAygCCCABajYCCCAFIAUoAhQgAWo2AhQgBSAFKAIQIAFrIgY2AhAgAyADKAIQIAFrIgg2AhAgCA0AIAMgAygCBDYCCEEAIQgLIAYEQCADKAIgIQYMAgsMBAsgAQ0AIApBAXRBd0EAIApBBEsbaiAEQQF0QXdBACAEQQRKG2pKDQAgCkEERg0ADAILAkACQAJAAkACQCAGQSpHBEAgBkGaBUcNASAFKAIERQ0DDAcLIAMoAhRFBEAgA0HxADYCIAwCCyADKAI0QQx0QYDwAWshBAJAIAMoAowBQQJODQAgAygCiAEiAUEBTA0AIAFBBUwEQCAEQcAAciEEDAELQYABQcABIAFBBkYbIARyIQQLIAMoAgQgCGogBEEgciAEIAMoAmgbIgFBH3AgAXJBH3NBCHQgAUGA/gNxQQh2cjsAACADIAMoAhBBAmoiATYCECADKAJoBEAgAygCBCABaiAFKAIwIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYAACADIAMoAhBBBGo2AhALIAVBATYCMCADQfEANgIgIAUQCiADKAIQDQcgAygCICEGCwJAAkACQAJAIAZBOUYEfyADQaABakHkgAEoAgARAQAaIAMgAygCECIBQQFqNgIQIAEgAygCBGpBHzoAACADIAMoAhAiAUEBajYCECABIAMoAgRqQYsBOgAAIAMgAygCECIBQQFqNgIQIAEgAygCBGpBCDoAAAJAIAMoAhwiAUUEQCADKAIEIAMoAhBqQQA2AAAgAyADKAIQIgFBBWo2AhAgASADKAIEakEAOgAEQQIhBCADKAKIASIBQQlHBEBBBCABQQJIQQJ0IAMoAowBQQFKGyEECyADIAMoAhAiAUEBajYCECABIAMoAgRqIAQ6AAAgAyADKAIQIgFBAWo2AhAgASADKAIEakEDOgAAIANB8QA2AiAgBRAKIAMoAhBFDQEMDQsgASgCJCELIAEoAhwhCSABKAIQIQggASgCLCENIAEoAgAhBiADIAMoAhAiAUEBajYCEEECIQQgASADKAIEaiANQQBHQQF0IAZBAEdyIAhBAEdBAnRyIAlBAEdBA3RyIAtBAEdBBHRyOgAAIAMoAgQgAygCEGogAygCHCgCBDYAACADIAMoAhAiDUEEaiIGNgIQIAMoAogBIgFBCUcEQEEEIAFBAkhBAnQgAygCjAFBAUobIQQLIAMgDUEFajYCECADKAIEIAZqIAQ6AAAgAygCHCgCDCEEIAMgAygCECIBQQFqNgIQIAEgAygCBGogBDoAACADKAIcIgEoAhAEfyADKAIEIAMoAhBqIAEoAhQ7AAAgAyADKAIQQQJqNgIQIAMoAhwFIAELKAIsBEAgBQJ/IAUoAjAhBiADKAIQIQRBACADKAIEIgFFDQAaIAYgASAEQdSAASgCABEAAAs2AjALIANBxQA2AiAgA0EANgIYDAILIAMoAiAFIAYLQcUAaw4jAAQEBAEEBAQEBAQEBAQEBAQEBAQEBAIEBAQEBAQEBAQEBAMECyADKAIcIgEoAhAiBgRAIAMoAgwiCCADKAIQIgQgAS8BFCADKAIYIg1rIglqSQRAA0AgAygCBCAEaiAGIA1qIAggBGsiCBAHGiADIAMoAgwiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIAMgAygCGCAIajYCGCAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAsgAygCEA0MIAMoAhghDSADKAIcKAIQIQZBACEEIAkgCGsiCSADKAIMIghLDQALCyADKAIEIARqIAYgDWogCRAHGiADIAMoAhAgCWoiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIANBADYCGAsgA0HJADYCIAsgAygCHCgCHARAIAMoAhAiBCEJA0ACQCAEIAMoAgxHDQACQCADKAIcKAIsRQ0AIAQgCU0NACAFAn8gBSgCMCEGQQAgAygCBCAJaiIBRQ0AGiAGIAEgBCAJa0HUgAEoAgARAAALNgIwCyAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAtBACEEQQAhCSADKAIQRQ0ADAsLIAMoAhwoAhwhBiADIAMoAhgiAUEBajYCGCABIAZqLQAAIQEgAyAEQQFqNgIQIAMoAgQgBGogAToAACABBEAgAygCECEEDAELCwJAIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0EANgIYCyADQdsANgIgCwJAIAMoAhwoAiRFDQAgAygCECIEIQkDQAJAIAQgAygCDEcNAAJAIAMoAhwoAixFDQAgBCAJTQ0AIAUCfyAFKAIwIQZBACADKAIEIAlqIgFFDQAaIAYgASAEIAlrQdSAASgCABEAAAs2AjALIAUoAhwiBhAwAkAgBSgCECIEIAYoAhAiASABIARLGyIBRQ0AIAUoAgwgBigCCCABEAcaIAUgBSgCDCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=x(Si));function Ns(We){try{if(We==Si&&ue)return new Uint8Array(ue);var tt=ii(We);if(tt)return tt;if(R)return R(We);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(It){Ti(It)}}function so(We,tt){var It,ir,$;try{$=Ns(We),ir=new WebAssembly.Module($),It=new WebAssembly.Instance(ir,tt)}catch(Ne){var ye=Ne.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Ne}return[It,ir]}function uc(){var We={a:Ua};function tt($,ye){var Ne=$.exports;r.asm=Ne,Be=r.asm.g,J(Be.buffer),Z=r.asm.W,an(r.asm.h),Ls("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var ir=so(Si,We);return tt(ir[0]),r.asm}function uu(We){return F.getFloat32(We,!0)}function cp(We){return F.getFloat64(We,!0)}function up(We){return F.getInt16(We,!0)}function Os(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Ms(We,tt){var It=new Date(Os((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var ir=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-ir)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Ms.GMTString||(Ms.GMTString=at("GMT")),Dn((tt+40>>2)*4,Ms.GMTString),tt}function yl(We,tt){return Ms(We,tt)}function El(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return Be.grow(We-xe.byteLength+65535>>>16),J(Be.buffer),1}catch{}}function zn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var ir=1;ir<=4;ir*=2){var $=tt*(1+.2/ir);$=Math.min($,We+100663296);var ye=Math.min(It,ke(Math.max(We,$),65536)),Ne=ao(ye);if(Ne)return!0}return!1}function On(We){fe(We)}function Li(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),ir=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),ye=Math.max(ir,$);Dn((ds()>>2)*4,ye*60),Dn((gs()>>2)*4,Number(ir!=$));function Ne($r){var Gi=$r.toTimeString().match(/\(([A-Za-z ]+)\)$/);return Gi?Gi[1]:"GMT"}var pt=Ne(tt),ht=Ne(It),Tt=at(pt),er=at(ht);$>2)*4,Tt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Tt))}function _i(We){Mn();var tt=Date.UTC(Os((We+20>>2)*4)+1900,Os((We+16>>2)*4),Os((We+12>>2)*4),Os((We+8>>2)*4),Os((We+4>>2)*4),Os((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var ir=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-ir)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var rr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",ir,$,ye,Ne,pt,ht,Tt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Ne=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),ht=tt.indexOf(We.charAt(er++)),Tt=tt.indexOf(We.charAt(er++)),ir=Ne<<2|pt>>4,$=(pt&15)<<4|ht>>2,ye=(ht&3)<<6|Tt,It=It+String.fromCharCode(ir),ht!==64&&(It=It+String.fromCharCode($)),Tt!==64&&(It=It+String.fromCharCode(ye));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!we&&(Gt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Qb=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Qb=="object"&&(Qb.createModule=eU)});var Of,Tle,Lle,Nle=Et(()=>{Of=["number","number"],Tle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Tle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Tle,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",...Of,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Of,"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",...Of,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Of,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Of,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Of,"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",...Of,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Of,"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",...Of,"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 rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==z.sep);){if(t[r-1]===z.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==z.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();iA();Jl=class extends qp{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new Ji(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new Ji(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function cot(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(Mle.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fb(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Mle,iU,Ule,Rb,Ji,sU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=ve("fs"),nU=ve("stream"),Mle=ve("util"),iU=$e(ve("zlib"));$4();Ule="mixed";Rb=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},Ji=class extends Uu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Ule,r??=Fb(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=b1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fb():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return z.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw tr.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw tr.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw tr.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?tr.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw tr.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw tr.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw tr.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw tr.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=z.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw tr.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw tr.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw tr.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw tr.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw tr.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw tr.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw tr.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw tr.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw tr.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),x=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=x,R=x,N=x,U=new Date(C),V=new Date(R),te=new Date(N),ae=new Date(x),fe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ue=fe===ta.constants.S_IFDIR?493:420,me=fe|this.getUnixMode(n,ue)&511,he=this.libzip.struct.statCrc(u),Be=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:V,ctime:te,mtime:ae,atimeMs:C,birthtimeMs:R,ctimeMs:N,mtimeMs:x,mode:me,crc:he});return a.bigint===!0?Ea.convertToBigIntStats(Be):Be}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,x=this.stats.mtimeMs,C=this.stats.mtimeMs,R=new Date(I),N=new Date(v),U=new Date(x),V=new Date(C),te=ta.constants.S_IFDIR|493,ae=0,fe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:R,birthtime:N,ctime:U,mtime:V,atimeMs:I,birthtimeMs:v,ctimeMs:x,mtimeMs:C,mode:te,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(fe):fe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(z.dirname(r)).add(z.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(z.dirname(r)).add(z.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(z.dirname(r))?.delete(z.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw tr.EBUSY(`archive closed, ${r}`);let u=z.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,z.resolve(z.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,z.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw tr.ENOENT(r)}if(!h)throw tr.ENOTDIR(r);if(u=z.resolve(p,z.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=z.resolve(z.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=z.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),x=Buffer.from(v);if(p===0)return this.fileSources.set(r,x),x;if(o.asyncDecompress)return new Promise((C,R)=>{iU.default.inflateRaw(x,(N,U)=>{N?R(N):(this.fileSources.set(r,U),C(U))})});{let C=iU.default.inflateRawSync(x);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw tr.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw tr.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw tr.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw tr.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw tr.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw tr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw tr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw tr.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw tr.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw tr.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw tr.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw tr.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw tr.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw tr.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw tr.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,cot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw tr.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw tr.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw tr.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw tr.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw tr.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw tr.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}async rmPromise(r,o){return this.rmSync(r,o)}rmSync(r,{recursive:o=!1}={}){if(this.readOnly)throw tr.EROFS(`rm '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rm '${r}'`,r),n=this.listings.get(a);if(!n)throw tr.ENOTDIR(`rm '${r}'`);if(n.size>0)throw tr.ENOTEMPTY(`rm '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw tr.EINVAL(`rm '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,z.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw tr.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw tr.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw tr.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw tr.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw tr.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw tr.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw tr.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw tr.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw tr.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",z.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=z.join(A.path,A.name),h=this.listings.get(z.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",z.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(z.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(z.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",z.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw tr.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw tr.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw tr.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw tr.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw tr.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw tr.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=z.resolve(Bt.root,r);return ny(this,n,o,a)}unwatchFile(r,o){let a=z.resolve(Bt.root,r);return Ug(this,a,o)}}});function Hle(t,e,r=Buffer.alloc(0),o){let a=new Ji(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),E=new qp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Kw(_le.default,new Gp(E)),a}var _le,qle=Et(()=>{Pt();_le=$e(ve("fs"));sU()});var Gle=Et(()=>{Ole();sU();qle()});var x1={};zt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>Ule,LibzipError:()=>Rb,ZipFS:()=>Ji,ZipOpenFS:()=>Jl,getArchivePart:()=>rU,getLibzipPromise:()=>Aot,getLibzipSync:()=>uot,makeEmptyArchive:()=>Fb,mountMemoryDrive:()=>Hle});function uot(){return b1()}async function Aot(){return b1()}var jle,iA=Et(()=>{$4();jle=$e(Rle());Nle();Gle();Fle(()=>{let t=(0,jle.default)();return Lle(t)})});var RE,Yle=Et(()=>{Pt();qt();k1();RE=class extends nt{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()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:le.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};RE.usage={description:"run a command using yarn's portable shell",details:` +`)}`}}};Bn.RequestError=Vi;var Ab=class extends Vi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=Ab;var fb=class extends Vi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=fb;var pb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=pb;var hb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=hb;var gb=class extends Vi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=gb;var C1=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=C1;var db=class extends Vi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=db;var ust=["socket","connect","continue","information","upgrade","timeout"],mb=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[DE]=0,this[bE]=0,this.requestInitialized=!1,this[ab]=new Set,this.redirects=[],this[xE]=!1,this[lb]=!1,this[E1]=[],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 w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Git.ReadStream&&await ast(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[Zs])===null||h===void 0||h.destroy();return}for(let I of this[E1])I();this[E1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Vi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new lh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Vit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let x;if(st.default.string(r.searchParams)||r.searchParams instanceof lh.URLSearchParams)x=new lh.URLSearchParams(r.searchParams);else{sst(r.searchParams),x=new lh.URLSearchParams;for(let C in r.searchParams){let F=r.searchParams[C];F===null?x.append(C,""):F!==void 0&&x.append(C,F)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,F)=>{x.has(F)||x.append(F,C)}),r.searchParams=x}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:x}=r;Object.defineProperty(r,"prefixUrl",{set:F=>{let N=r.url;if(!N.href.startsWith(F))throw new Error(`Cannot change \`prefixUrl\` from ${x} to ${F}: ${N.href}`);r.url=new lh.URL(F+N.href.slice(x.length)),x=F},get:()=>x});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new lh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new db(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:x,getCookieString:C}=E;st.assert.function_(x),st.assert.function_(C),x.length===4&&C.length===0&&(x=Nae.promisify(x.bind(r.cookieJar)),C=Nae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:x,getCookieString:C})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Uae((x,C)=>{let F=x[Zs](x,C);return st.default.promise(F)&&(F.once=(N,U)=>{if(N==="error")F.catch(U);else if(N==="abort")(async()=>{try{(await F).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${N}`);return F}),F},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new Wit.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let x of Bn.knownHookEvents)if(x in r.hooks)if(st.default.array(r.hooks[x]))r.hooks[x]=[...r.hooks[x]];else throw new TypeError(`Parameter \`${x}\` must be an Array, got ${st.default(r.hooks[x])}`);else r.hooks[x]=[];if(o&&!v)for(let x of Bn.knownHookEvents)o.hooks[x].length>0&&(r.hooks[x]=[...o.hooks[x],...r.hooks[x]]);if("family"in r&&ch.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ch.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ch.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ch.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ch.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ch.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ch.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ch.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 x in r.agent)if(x!=="http"&&x!=="https"&&x!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${x}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),rst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!_ae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(_ae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[uh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[uh]=new lh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[uh]=e.stringifyJson(e.json));let h=await Jit.default(this[uh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[SE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=Kit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Mae.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[Yae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[ub]=e,e.once("end",()=>{this[PE]=this[DE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new C1(A,this))}),e.once("aborted",()=>{this._beforeError(new C1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&lst.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[jae]()),(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[uh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new Ab(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new lh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!tst.isResponseOk(n)){this._beforeError(new fb(n));return}e.on("readable",()=>{this[lb]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ab])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Yit.default(e),this[B4]=Hae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof Hae.TimeoutError?new gb(p,this.timings,this):new Vi(p.message,p,this),this._beforeError(p)}),this[jae]=Xit.default(e,this,ust),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[uh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new hb(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,Zit.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ist?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let V=await U(u);if(!st.default.undefined(V)){u.request=()=>V;break}}u.body&&this[uh]!==u.body&&(this[uh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:V,path:te}=U.groups;Object.assign(u,{socketPath:V,path:te,host:""})}}let v=I.protocol==="https:",x;u.http2?x=zit.auto:x=v?jit.request:Mae.request;let C=(e=u.request)!==null&&e!==void 0?e:x,F=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let N=u;if(N.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,N.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{N.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(N.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(N.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(N.ca=u.https.certificateAuthority),u.https.certificate&&(N.cert=u.https.certificate),u.https.key&&(N.key=u.https.key),u.https.passphrase&&(N.passphrase=u.https.passphrase),u.https.pfx&&(N.pfx=u.https.pfx));try{let U=await F(I,N);st.default.undefined(U)&&(U=x(I,N)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete N.rejectUnauthorized,u.https.checkServerIdentity&&delete N.checkServerIdentity,u.https.certificateAuthority&&delete N.ca,u.https.certificate&&delete N.cert,u.https.key&&delete N.key,u.https.passphrase&&delete N.passphrase,u.https.pfx&&delete N.pfx),ost(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 Uae.CacheError?new pb(U,this):new Vi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Vi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[xE])return;let{options:r}=this,o=this.retryCount+1;this[xE]=!0,e instanceof Vi||(e=new Vi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await est.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:nst.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Vi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Vi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[zae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lb]=!0;let e=this[ub];if(e&&!this[xE]){e.readableLength&&(this[lb]=!1);let r;for(;(r=e.read())!==null;){this[DE]+=r.length,this[Wae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[E1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[SE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[E1].push(r)}_destroy(e,r){var o;this[xE]=!0,clearTimeout(this[zae]),Zs in this&&(this[B4](),!((o=this[ub])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Vi)&&(e=new Vi(e.message,e,this)),r(e)}get _isAboutToError(){return this[xE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[DE]/this[PE]:this[PE]===this[DE]?e=1:e=0,{percent:e,transferred:this[DE],total:this[PE]}}get uploadProgress(){let e;return this[SE]?e=this[bE]/this[SE]:this[SE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[SE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Yae]}pipe(e,r){if(this[Wae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ab].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ab].delete(e),super.unpipe(e),this}};Bn.default=mb});var I1=_(jc=>{"use strict";var Ast=jc&&jc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),fst=jc&&jc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ast(e,t,r)};Object.defineProperty(jc,"__esModule",{value:!0});jc.CancelError=jc.ParseError=void 0;var Vae=w1(),P4=class extends Vae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};jc.ParseError=P4;var D4=class extends Vae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};jc.CancelError=D4;fst(w1(),jc)});var Xae=_(S4=>{"use strict";Object.defineProperty(S4,"__esModule",{value:!0});var Jae=I1(),pst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};S4.default=pst});var b4=_(Ah=>{"use strict";var hst=Ah&&Ah.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=Ah&&Ah.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(Ah,"__esModule",{value:!0});var dst=ve("events"),mst=Tf(),yst=Jse(),yb=I1(),Zae=Xae(),$ae=w1(),Est=u4(),Cst=m4(),ele=y4(),wst=["request","response","redirect","uploadProgress","downloadProgress"];function tle(t){let e,r,o=new dst.EventEmitter,a=new yst((u,A,p)=>{let h=E=>{let I=new $ae.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new yb.CancelError(I))),e=I,I.once("response",async C=>{var F;if(C.retryCount=E,C.request.aborted)return;let N;try{N=await Cst.default(I),C.rawBody=N}catch{return}if(I._isAboutToError)return;let U=((F=C.headers["content-encoding"])!==null&&F!==void 0?F:"").toLowerCase(),V=["gzip","deflate","br"].includes(U),{options:te}=I;if(V&&!te.decompress)C.body=N;else try{C.body=Zae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=N.toString(),ele.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,ae]of te.hooks.afterResponse.entries())C=await ae(C,async ce=>{let Ce=$ae.default.normalizeArguments(void 0,{...ce,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);Ce.hooks.afterResponse=Ce.hooks.afterResponse.slice(0,le);for(let Ie of Ce.hooks.beforeRetry)await Ie(Ce);let de=tle(Ce);return p(()=>{de.catch(()=>{}),de.cancel()}),de})}catch(le){I._beforeError(new yb.RequestError(le.message,le,I));return}if(!ele.isResponseOk(C)){I._beforeError(new yb.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:F}=I;if(C instanceof yb.HTTPError&&!F.throwHttpErrors){let{response:N}=C;u(I.options.resolveBodyOnly?N.body:N);return}A(C)};I.once("error",v);let x=I.options.body;I.once("retry",(C,F)=>{var N,U;if(x===((N=F.request)===null||N===void 0?void 0:N.options.body)&&mst.default.nodeStream((U=F.request)===null||U===void 0?void 0:U.options.body)){v(F);return}h(C)}),Est.default(I,o,wst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Zae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}Ah.default=tle;gst(I1(),Ah)});var rle=_(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});var Ist=I1();function Bst(t,...e){let r=(async()=>{if(t instanceof Ist.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}x4.default=Bst});var sle=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var nle=Tf();function ile(t){for(let e of Object.values(t))(nle.default.plainObject(e)||nle.default.array(e))&&ile(e);return Object.freeze(t)}k4.default=ile});var ale=_(ole=>{"use strict";Object.defineProperty(ole,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var vst=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Pst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&vst(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var lle=Tf(),zl=b4(),Dst=rle(),Cb=w1(),Sst=sle(),bst={RequestError:zl.RequestError,CacheError:zl.CacheError,ReadError:zl.ReadError,HTTPError:zl.HTTPError,MaxRedirectsError:zl.MaxRedirectsError,TimeoutError:zl.TimeoutError,ParseError:zl.ParseError,CancelError:zl.CancelError,UnsupportedProtocolError:zl.UnsupportedProtocolError,UploadError:zl.UploadError},xst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:Eb}=Cb.default,cle=(...t)=>{let e;for(let r of t)e=Eb(void 0,r,e);return e},kst=t=>t.isStream?new Cb.default(void 0,t):zl.default(t),Qst=t=>"defaults"in t&&"options"in t.defaults,Rst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var ule=(t,e)=>{if(t)for(let r of t)r(e)},Ale=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?kst:h);if(lle.default.plainObject(o)){let E={...o,...a};Cb.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{ule(t.options.hooks.init,a),ule((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=Eb(o,a,n??t.options);if(I[Cb.kIsNormalizedAlready]=!0,E)throw new zl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return Dst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Qst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),Ale({options:cle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=Eb(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!lle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Rst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,bst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:Sst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=cle,e};Vl.default=Ale;Pst(ale(),Vl)});var hle=_((Lf,wb)=>{"use strict";var Fst=Lf&&Lf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),fle=Lf&&Lf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Fst(e,t,r)};Object.defineProperty(Lf,"__esModule",{value:!0});var Tst=ve("url"),ple=Q4(),Lst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Tst.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:[ple.defaultHandler],mutableDefaults:!1},R4=ple.default(Lst);Lf.default=R4;wb.exports=R4;wb.exports.default=R4;wb.exports.__esModule=!0;fle(Q4(),Lf);fle(b4(),Lf)});var sn={};zt(sn,{Method:()=>wle,del:()=>_st,get:()=>N4,getNetworkSettings:()=>Cle,post:()=>O4,put:()=>Ust,request:()=>B1});function mle(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function F4(t){return al(dle,t,()=>oe.readFilePromise(t).then(e=>(dle.set(t,e),e)))}function Mst({statusCode:t,statusMessage:e},r){let o=Ut(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Jy(r,`${o}${e?` (${e})`:""}`,a)}async function Ib(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ut(e,"httpTimeout",yt.SETTING)})`);let n=new Jt(35,a,u=>{o.response&&u.reportError(35,` ${Xu(e,{label:"Response Code",value:Hc(yt.NO_HINT,Mst(o.response,e))})}`),o.request&&(u.reportError(35,` ${Xu(e,{label:"Request Method",value:Hc(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${Xu(e,{label:"Request URL",value:Hc(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${Xu(e,{label:"Request Redirects",value:Hc(yt.NO_HINT,bN(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${Xu(e,{label:"Request Retry Count",value:Hc(yt.NO_HINT,`${Ut(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ut(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function Cle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(L4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function B1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Hst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function N4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ib(B1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():al(gle,t,()=>u().then(p=>(gle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function Ust(t,e,{customErrorMessage:r,...o}){return(await Ib(B1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await Ib(B1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function _st(t,{customErrorMessage:e,...r}){return(await Ib(B1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Hst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=Cle(A,{configuration:r});if(p.enableNetwork===!1)throw new Jt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!L4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new Jt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?T4.default.httpOverHttp(mle(p.httpProxy)):Nst,https:p.httpsProxy?T4.default.httpsOverHttp(mle(p.httpsProxy)):Ost},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),x=r.get("enableStrictSsl"),C=p.httpsCaFilePath,F=p.httpsCertFilePath,N=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>Ze(hle())),V=C?await F4(C):void 0,te=F?await F4(F):void 0,le=N?await F4(N):void 0,ae=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:x,certificateAuthority:V,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>ae(A))}var yle,Ele,L4,T4,gle,dle,Nst,Ost,wle,Bb=Et(()=>{Dt();yle=ve("https"),Ele=ve("http"),L4=Ze(Xo()),T4=Ze(Yse());Wl();jl();Gl();gle=new Map,dle=new Map,Nst=new Ele.Agent({keepAlive:!0}),Ost=new yle.Agent({keepAlive:!0});wle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(wle||{})});var Ji={};zt(Ji,{availableParallelism:()=>U4,getArchitecture:()=>v1,getArchitectureName:()=>Wst,getArchitectureSet:()=>M4,getCaller:()=>Jst,major:()=>qst,openUrl:()=>Gst});function Yst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(jst)}catch{}if(typeof t<"u"){if(t&&(t.includes("GLIBC")||t.includes("libc")))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return YI(r,a=>{let n=a.match(o);if(!n)return YI.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 v1(){return Ble=Ble??{os:process.platform,cpu:process.arch,libc:Yst()}}function Wst(t=v1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=v1();return vle=vle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Vst(t){let e=Kst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=zst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Jst(){let e=new Error().stack.split(` +`)[3];return Vst(e)}function U4(){return typeof vb.default.availableParallelism<"u"?vb.default.availableParallelism():Math.max(1,vb.default.cpus().length)}var vb,qst,Ile,Gst,jst,Ble,vle,Kst,zst,Pb=Et(()=>{Dt();vb=Ze(ve("os"));Db();Gl();qst=Number(process.versions.node.split(".")[0]),Ile=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Gst=typeof Ile<"u"?async t=>{try{return await _4(Ile,[t],{cwd:z.cwd()}),!0}catch{return!1}}:void 0,jst="/usr/bin/ldd";Kst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,zst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=f1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=f1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return eot(t,e,r,o,a);case"MAP":return tot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return zI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=mM(r);return E&&E[0]!=="<"&&(h=z.dirname(E)),z.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return zI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function eot(t,e,r,o,a){let n=f1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function tot(t,e,r,o,a){let n=f1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,E,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>z.normalize(o)):z.isAbsolute(e.default)?z.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>z.resolve(t.projectCwd,o)):z.resolve(t.projectCwd,e.default);default:return e.default}}function bb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return $st;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(bb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=bb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=bb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function rot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(xb)&&(e=(0,Dle.default)(e.slice(xb.length)),t[e]=r);return t}function G4(){let t=`${xb}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return j4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function not(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function iot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function oot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await sot(r,e)?null:r}var Dle,Nf,Sle,ble,xle,q4,Xst,P1,Zst,kE,xb,j4,$st,D1,kle,kb,Sb,sot,nA,Ke,S1=Et(()=>{Dt();Nl();Dle=Ze(sz()),Nf=Ze(rd());qt();Sle=Ze(Zz()),ble=ve("module"),xle=Ze(sd()),q4=ve("stream");ose();uE();cM();uM();AM();Tse();fM();vd();Use();KS();jl();ih();Bb();Gl();Pb();Qf();So();Xst=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),P1=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"]),Zst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),kE=/^(?!v)[a-z0-9._-]+$/i,xb="yarn_",j4=".yarnrc.yml",$st="********",D1=(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))(D1||{}),kle=yt,kb=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kb||{}),Sb={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:EM()},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:G4()},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:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SN,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.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:!Nf.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:!Nf.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:U4()},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(uS),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:Nf.isPR&&Xst,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},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}}}}}}}};sot=process.platform==="win32"?not:iot;nA=class{constructor(e){this.isCI=Nf.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 create(e,r,o){let a=new nA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sb);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=rot();delete u.rcFilename;let A=new nA(e),p=await nA.findRcFiles(e),h=await nA.findFolderRcFile(mE());h&&(p.find(Ce=>Ce.path===h.path)||p.unshift(h));let E=Mse(p.map(ce=>[ce.path,ce.data])),I=Bt.dot,v=new Set(Object.keys(Sb)),x=({yarnPath:ce,ignorePath:Ce,injectEnvironmentFiles:de})=>({yarnPath:ce,ignorePath:Ce,injectEnvironmentFiles:de}),C=({yarnPath:ce,ignorePath:Ce,injectEnvironmentFiles:de,...Ie})=>{let Ee={};for(let[g,me]of Object.entries(Ie))v.has(g)&&(Ee[g]=me);return Ee},F=({yarnPath:ce,ignorePath:Ce,...de})=>{let Ie={};for(let[Ee,g]of Object.entries(de))v.has(Ee)||(Ie[Ee]=g);return Ie};if(A.importSettings(x(Sb)),A.useWithSource("",x(u),e,{strict:!1}),E){let[ce,Ce]=E;A.useWithSource(ce,x(Ce),I,{strict:!1})}if(a){if(await oot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await nA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=N;let U=Object.assign(Object.create(null),process.env);A.env=U;let V=await Promise.all(A.get("injectEnvironmentFiles").map(async ce=>{let Ce=ce.endsWith("?")?await oe.readFilePromise(ce.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ce,"utf8");return(0,Sle.parse)(Ce)}));for(let ce of V)for(let[Ce,de]of Object.entries(ce))A.env[Ce]=sS(de,{env:U});if(A.importSettings(C(Sb)),A.useWithSource("",C(u),e,{strict:o}),E){let[ce,Ce]=E;A.useWithSource(ce,C(Ce),I,{strict:o})}let te=ce=>"default"in ce?ce.default:ce,le=new Map([["@@core",sse]]);if(r!==null)for(let ce of r.plugins.keys())le.set(ce,te(r.modules.get(ce)));for(let[ce,Ce]of le)A.activatePlugin(ce,Ce);let ae=new Map([]);if(r!==null){let ce=new Map;for(let Ie of ble.builtinModules)ce.set(Ie,()=>Pf(Ie));for(let[Ie,Ee]of r.modules)ce.set(Ie,()=>Ee);let Ce=new Set,de=async(Ie,Ee)=>{let{factory:g,name:me}=Pf(Ie);if(!g||Ce.has(me))return;let De=new Map(ce),he=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Yy(async()=>te(await g(he)),ee=>`${ee} (when initializing ${me}, defined in ${Ee})`);ce.set(me,()=>ne),Ce.add(me),ae.set(me,ne)};if(u.plugins)for(let Ie of u.plugins.split(";")){let Ee=z.resolve(e,ue.toPortablePath(Ie));await de(Ee,"")}for(let{path:Ie,cwd:Ee,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let me of g.plugins){let De=typeof me!="string"?me.path:me,he=me?.spec??"",ne=me?.checksum??"";if(P1.has(he))continue;let ee=z.resolve(Ee,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!he){let ht=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,".gitignore",yt.NAME),at=Ut(A,A.values.get("rcFilename"),yt.NAME),Re=Ut(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${at} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!he.match(/^https?:/)){let ht=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Be=await N4(he,{configuration:A}),Te=zi(Be);if(ne&&ne!==Te){let ht=Ut(A,z.basename(ee,".cjs"),yt.NAME),H=Ut(A,A.values.get("rcFilename"),yt.NAME),at=Ut(A,`yarn plugin import ${he}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${at} to reimport it.`)}await oe.mkdirPromise(z.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Be)}await de(ee,Ie)}}for(let[ce,Ce]of ae)A.activatePlugin(ce,Ce);if(A.useWithSource("",F(u),e,{strict:o}),E){let[ce,Ce]=E;A.useWithSource(ce,F(Ce),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=G4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=z.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=z.dirname(n)}return o}static async findFolderRcFile(e){let r=z.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(z.join(a,dr.lockfile)))return a;oe.existsSync(z.join(a,dr.manifest))&&(r=a),o=z.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=G4(),n=z.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===nA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await nA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=mE();return await nA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ut(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&Zst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${xb}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=mE(),v=e[0]!=="<"?z.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ut(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return bb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ut(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ut(this,"STDERR","red")}`);n=new q4.PassThrough,n.pipe(p),n.pipe(A),u=new q4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Pd([new u1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new fE([new pE,new gE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=v1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=ol(n,u=>u==="current"?e.libc??ol.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!xa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=WI(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,x]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:x})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(sh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return xa(e.reference)?Fs(e,`${this.get("defaultProtocol")}${e.reference}`):kE.test(e.reference)?Fs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return xa(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):kE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=e1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!kf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",al(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CN(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Zo(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=tA("types",A),h=rn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(Rs(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(Rs(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return al(this.limits,e,()=>(0,xle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=nA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};zt(Ur,{EndStrategy:()=>J4,ExecError:()=>Qb,PipeError:()=>b1,execvp:()=>_4,pipevp:()=>Yc});function bd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function z4(){for(let t of xd)t.kill()}async function Yc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":bd(n)&&(h[0]=n),bd(u)&&(h[1]=u),bd(A)&&(h[2]=A);let E=(0,V4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",z4)),!bd(n)&&n!==null&&n.pipe(E.stdin),bd(u)||E.stdout.pipe(u,{end:!1}),bd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))bd(v)||v.end()};return new Promise((v,x)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),x(C)}),E.on("close",(C,F)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:X4(C,F)}):x(new b1({fileName:t,code:C,signal:F}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,V4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",x=>{let C=Ke.create(r),F=Ut(C,t,yt.PATH);v(new Jt(1,`Process ${F} failed to spawn`,N=>{N.reportError(1,` ${Xu(C,{label:"Thrown Error",value:Hc(yt.NO_HINT,x.message)})}`)}))}),E.on("close",(x,C)=>{let F=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);x===0||!n?I({code:X4(x,C),stdout:F,stderr:N}):v(new Qb({fileName:t,code:x,signal:C,stdout:F,stderr:N}))})})}function X4(t,e){let r=aot.get(e);return typeof r<"u"?128+r:t??1}function lot(t,e,{configuration:r,report:o}){o.reportError(1,` ${Xu(r,t!==null?{label:"Exit Code",value:Hc(yt.NUMBER,t)}:{label:"Exit Signal",value:Hc(yt.CODE,e)})}`)}var V4,J4,b1,Qb,xd,aot,Db=Et(()=>{Dt();V4=Ze(oT());S1();Wl();jl();J4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(J4||{}),b1=class extends Jt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(z.cwd()),u=Ut(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{lot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},Qb=class extends b1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;aot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Rle(t){Qle=t}function x1(){return typeof Z4>"u"&&(Z4=Qle()),Z4}var Z4,Qle,$4=Et(()=>{Qle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Fle=_((Rb,tU)=>{var cot=Object.assign({},ve("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function x(We){return r.locateFile?r.locateFile(We,v):v+We}var C,F,N,U;I&&(E?v=ve("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var or=ii(tt);return or?It?or:or.toString():(N||(N=cot),U||(U=ve("path")),tt=U.normalize(tt),N.readFileSync(tt,It?null:"utf8"))},F=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),me(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var V=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,ae=function(We){le=We},ce;r.wasmBinary&&(ce=r.wasmBinary);var Ce=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function de(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return je[We>>0];case"i8":return je[We>>0];case"i16":return up((We>>1)*2);case"i32":return Us((We>>2)*4);case"i64":return Us((We>>2)*4);case"float":return uu((We>>2)*4);case"double":return cp((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Ie,Ee=!1,g;function me(We,tt){We||Ti("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return me(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function he(We,tt,It,or,$){var ye={string:function(ts){var bi=0;if(ts!=null&&ts!==0){var Ho=(ts.length<<2)+1;bi=Un(Ho),ht(ts,bi,Ho)}return bi},array:function(ts){var bi=Un(ts.length);return Re(ts,bi),bi}};function Ne(ts){return tt==="string"?Be(ts):tt==="boolean"?Boolean(ts):ts}var ft=De(We),pt=[],Lt=0;if(or)for(var rr=0;rr=It)&&be[or];)++or;return ee.decode(be.subarray(We,or))}function Te(We,tt,It,or){if(!(or>0))return 0;for(var $=It,ye=It+or-1,Ne=0;Ne=55296&&ft<=57343){var pt=We.charCodeAt(++Ne);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=ye)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=ye)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=ye)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=ye)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return Te(We,be,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&or<=57343&&(or=65536+((or&1023)<<10)|We.charCodeAt(++It)&1023),or<=127?++tt:or<=2047?tt+=2:or<=65535?tt+=3:tt+=4}return tt}function at(We){var tt=H(We)+1,It=Ni(tt);return It&&Te(We,je,It,tt),It}function Re(We,tt){je.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,je,be,$e,_e,b,w,S,y,R;function J(We){xe=We,r.HEAP_DATA_VIEW=R=new DataView(We),r.HEAP8=je=new Int8Array(We),r.HEAP16=$e=new Int16Array(We),r.HEAP32=b=new Int32Array(We),r.HEAPU8=be=new Uint8Array(We),r.HEAPU16=_e=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],ke=[],Le=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());so(ie)}function Gt(){ot=!0,so(ke)}function tr(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)kr(r.postRun.shift());so(Le)}function bt(We){ie.unshift(We)}function ln(We){ke.unshift(We)}function kr(We){Le.unshift(We)}var mr=0,br=null,Kr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Os(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(br!==null&&(clearInterval(br),br=null),Kr)){var tt=Kr;Kr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),Ee=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var gs="data:application/octet-stream;base64,";function no(We){return We.startsWith(gs)}var Si="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/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcNAQsCfwJ/An8gASgCBCICBEAgBCAAKAIoIAIQHiAAKAIcIQELIAEoAlAiAgsEQCAAKAIkIAAoAiggAhAeIAAoAhwhAQsgASgCTCICCwRAIAAoAiQgACgCKCACEB4gACgCHCEBCyABKAJIIgILBEAgACgCJCAAKAIoIAIQHiAAKAIcIQELIAAoAiQgACgCKCABEB4gAEEANgIcQX1BACADQfEARhshAgsgAgvrCQEIfyAAKAIwIgMgACgCDEEFayICIAIgA0sbIQggACgCACIEKAIEIQkgAUEERiEHAkADQCAEKAIQIgMgACgCoC5BKmpBA3UiAkkEQEEBIQYMAgsgCCADIAJrIgMgACgCaCAAKAJYayICIAQoAgRqIgVB//8DIAVB//8DSRsiBiADIAZJGyIDSwRAQQEhBiADQQBHIAdyRQ0CIAFFDQIgAyAFRw0CCyAAQQBBACAHIAMgBUZxIgUQOSAAIAAoAhBBBGsiBDYCECAAKAIEIARqIAM7AAAgACAAKAIQQQJqIgQ2AhAgACgCBCAEaiADQX9zOwAAIAAgACgCEEECajYCECAAKAIAEAoCfyACBEAgACgCACgCDCAAKAJIIAAoAlhqIAMgAiACIANLGyICEAcaIAAoAgAiBCAEKAIMIAJqNgIMIAQgBCgCECACazYCECAEIAQoAhQgAmo2AhQgACAAKAJYIAJqNgJYIAMgAmshAwsgAwsEQCAAKAIAIgIgAigCDCADEIMBIAAoAgAiAiACKAIMIANqNgIMIAIgAigCECADazYCECACIAIoAhQgA2o2AhQLIAAoAgAhBCAFRQ0AC0EAIQYLAkAgCSAEKAIEayICRQRAIAAoAmghAwwBCwJAIAAoAjAiAyACTQRAIABBAjYCgC4gACgCSCAEKAIAIANrIAMQBxogACAAKAIwIgM2AoQuIAAgAzYCaAwBCyACIAAoAkQgACgCaCIFa08EQCAAIAUgA2siBDYCaCAAKAJIIgUgAyAFaiAEEAcaIAAoAoAuIgNBAU0EQCAAIANBAWo2AoAuCyAAIAAoAmgiBSAAKAKELiIDIAMgBUsbNgKELiAAKAIAIQQLIAAoAkggBWogBCgCACACayACEAcaIAAgACgCaCACaiIDNgJoIAAgACgCMCAAKAKELiIEayIFIAIgAiAFSxsgBGo2AoQuCyAAIAM2AlgLIAAgAyAAKAJAIgIgAiADSRs2AkBBAyECAkAgBkUNACAAKAIAIgUoAgQhAgJAAkAgAUF7cUUNACACDQBBASECIAMgACgCWEYNAiAAKAJEIANrIQRBACECDAELIAIgACgCRCADayIETQ0AIAAoAlgiByAAKAIwIgZIDQAgACADIAZrIgM2AmggACAHIAZrNgJYIAAoAkgiAiACIAZqIAMQBxogACgCgC4iA0EBTQRAIAAgA0EBajYCgC4LIAAgACgCaCIDIAAoAoQuIgIgAiADSxs2AoQuIAAoAjAgBGohBCAAKAIAIgUoAgQhAgsCQCACIAQgAiAESRsiAkUEQCAAKAIwIQUMAQsgBSAAKAJIIANqIAIQgwEgACAAKAJoIAJqIgM2AmggACAAKAIwIgUgACgChC4iBGsiBiACIAIgBksbIARqNgKELgsgACADIAAoAkAiAiACIANJGzYCQCADIAAoAlgiBmsiAyAFIAAoAgwgACgCoC5BKmpBA3VrIgJB//8DIAJB//8DSRsiBCAEIAVLG0kEQEEAIQIgAUEERiADQQBHckUNASABRQ0BIAAoAgAoAgQNASADIARLDQELQQAhAiABQQRGBEAgACgCACgCBEUgAyAETXEhAgsgACAAKAJIIAZqIAQgAyADIARLGyIBIAIQOSAAIAAoAlggAWo2AlggACgCABAKQQJBACACGw8LIAIL/woCCn8DfiAAKQOYLiENIAAoAqAuIQQgAkEATgRAQQRBAyABLwECIggbIQlBB0GKASAIGyEFQX8hCgNAIAghByABIAsiDEEBaiILQQJ0ai8BAiEIAkACQCAGQQFqIgMgBU4NACAHIAhHDQAgAyEGDAELAkAgAyAJSARAIAAgB0ECdGoiBkHOFWohCSAGQcwVaiEKA0AgCjMBACEPAn8gBCAJLwEAIgZqIgVBP00EQCAPIASthiANhCENIAUMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIA8hDSAGDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIA9BwAAgBGutiCENIAVBQGoLIQQgA0EBayIDDQALDAELIAcEQAJAIAcgCkYEQCANIQ8gBCEFIAMhBgwBCyAAIAdBAnRqIgNBzBVqMwEAIQ8gBCADQc4Vai8BACIDaiIFQT9NBEAgDyAErYYgDYQhDwwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgAyEFDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIAVBQGohBSAPQcAAIARrrYghDwsgADMBjBYhDgJAIAUgAC8BjhYiBGoiA0E/TQRAIA4gBa2GIA+EIQ4MAQsgBUHAAEYEQCAAKAIEIAAoAhBqIA83AAAgACAAKAIQQQhqNgIQIAQhAwwBCyAAKAIEIAAoAhBqIA4gBa2GIA+ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAFa62IIQ4LIAasQgN9IQ0gA0E9TQRAIANBAmohBCANIAOthiAOhCENDAILIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEECIQQMAgsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E+ayEEIA1BwAAgA2utiCENDAELIAZBCUwEQCAAMwGQFiEOAkAgBCAALwGSFiIFaiIDQT9NBEAgDiAErYYgDYQhDgwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgBSEDDAELIAAoAgQgACgCEGogDiAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyAOQcAAIARrrYghDgsgBqxCAn0hDSADQTxNBEAgA0EDaiEEIA0gA62GIA6EIQ0MAgsgA0HAAEYEQCAAKAIEIAAoAhBqIA43AAAgACAAKAIQQQhqNgIQQQMhBAwCCyAAKAIEIAAoAhBqIA0gA62GIA6ENwAAIAAgACgCEEEIajYCECADQT1rIQQgDUHAACADa62IIQ0MAQsgADMBlBYhDgJAIAQgAC8BlhYiBWoiA0E/TQRAIA4gBK2GIA2EIQ4MAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIAUhAwwBCyAAKAIEIAAoAhBqIA4gBK2GIA2ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAEa62IIQ4LIAatQgp9IQ0gA0E4TQRAIANBB2ohBCANIAOthiAOhCENDAELIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEEHIQQMAQsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E5ayEEIA1BwAAgA2utiCENC0EAIQYCfyAIRQRAQYoBIQVBAwwBC0EGQQcgByAIRiIDGyEFQQNBBCADGwshCSAHIQoLIAIgDEcNAAsLIAAgBDYCoC4gACANNwOYLgv5BQIIfwJ+AkAgACgC8C1FBEAgACkDmC4hCyAAKAKgLiEDDAELA0AgCSIDQQNqIQkgAyAAKALsLWoiAy0AAiEFIAApA5guIQwgACgCoC4hBAJAIAMvAAAiB0UEQCABIAVBAnRqIgMzAQAhCyAEIAMvAQIiBWoiA0E/TQRAIAsgBK2GIAyEIQsMAgsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAUhAwwCCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsMAQsgBUGAzwBqLQAAIghBAnQiBiABaiIDQYQIajMBACELIANBhghqLwEAIQMgCEEIa0ETTQRAIAUgBkGA0QBqKAIAa60gA62GIAuEIQsgBkHA0wBqKAIAIANqIQMLIAMgAiAHQQFrIgcgB0EHdkGAAmogB0GAAkkbQYDLAGotAAAiBUECdCIIaiIKLwECaiEGIAozAQAgA62GIAuEIQsgBCAFQQRJBH8gBgUgByAIQYDSAGooAgBrrSAGrYYgC4QhCyAIQcDUAGooAgAgBmoLIgVqIgNBP00EQCALIASthiAMhCELDAELIARBwABGBEAgACgCBCAAKAIQaiAMNwAAIAAgACgCEEEIajYCECAFIQMMAQsgACgCBCAAKAIQaiALIASthiAMhDcAACAAIAAoAhBBCGo2AhAgA0FAaiEDIAtBwAAgBGutiCELCyAAIAs3A5guIAAgAzYCoC4gCSAAKALwLUkNAAsLIAFBgAhqMwEAIQwCQCADIAFBgghqLwEAIgJqIgFBP00EQCAMIAOthiALhCEMDAELIANBwABGBEAgACgCBCAAKAIQaiALNwAAIAAgACgCEEEIajYCECACIQEMAQsgACgCBCAAKAIQaiAMIAOthiALhDcAACAAIAAoAhBBCGo2AhAgAUFAaiEBIAxBwAAgA2utiCEMCyAAIAw3A5guIAAgATYCoC4L8AQBA38gAEHkAWohAgNAIAIgAUECdCIDakEAOwEAIAIgA0EEcmpBADsBACABQQJqIgFBngJHDQALIABBADsBzBUgAEEAOwHYEyAAQZQWakEAOwEAIABBkBZqQQA7AQAgAEGMFmpBADsBACAAQYgWakEAOwEAIABBhBZqQQA7AQAgAEGAFmpBADsBACAAQfwVakEAOwEAIABB+BVqQQA7AQAgAEH0FWpBADsBACAAQfAVakEAOwEAIABB7BVqQQA7AQAgAEHoFWpBADsBACAAQeQVakEAOwEAIABB4BVqQQA7AQAgAEHcFWpBADsBACAAQdgVakEAOwEAIABB1BVqQQA7AQAgAEHQFWpBADsBACAAQcwUakEAOwEAIABByBRqQQA7AQAgAEHEFGpBADsBACAAQcAUakEAOwEAIABBvBRqQQA7AQAgAEG4FGpBADsBACAAQbQUakEAOwEAIABBsBRqQQA7AQAgAEGsFGpBADsBACAAQagUakEAOwEAIABBpBRqQQA7AQAgAEGgFGpBADsBACAAQZwUakEAOwEAIABBmBRqQQA7AQAgAEGUFGpBADsBACAAQZAUakEAOwEAIABBjBRqQQA7AQAgAEGIFGpBADsBACAAQYQUakEAOwEAIABBgBRqQQA7AQAgAEH8E2pBADsBACAAQfgTakEAOwEAIABB9BNqQQA7AQAgAEHwE2pBADsBACAAQewTakEAOwEAIABB6BNqQQA7AQAgAEHkE2pBADsBACAAQeATakEAOwEAIABB3BNqQQA7AQAgAEIANwL8LSAAQeQJakEBOwEAIABBADYC+C0gAEEANgLwLQuKAwIGfwR+QcgAEAkiBEUEQEEADwsgBEIANwMAIARCADcDMCAEQQA2AiggBEIANwMgIARCADcDGCAEQgA3AxAgBEIANwMIIARCADcDOCABUARAIARBCBAJIgA2AgQgAEUEQCAEEAYgAwRAIANBADYCBCADQQ42AgALQQAPCyAAQgA3AwAgBA8LAkAgAaciBUEEdBAJIgZFDQAgBCAGNgIAIAVBA3RBCGoQCSIFRQ0AIAQgATcDECAEIAU2AgQDQCAAIAynIghBBHRqIgcpAwgiDVBFBEAgBygCACIHRQRAIAMEQCADQQA2AgQgA0ESNgIACyAGEAYgBRAGIAQQBkEADwsgBiAKp0EEdGoiCSANNwMIIAkgBzYCACAFIAhBA3RqIAs3AwAgCyANfCELIApCAXwhCgsgDEIBfCIMIAFSDQALIAQgCjcDCCAEQgAgCiACGzcDGCAFIAqnQQN0aiALNwMAIAQgCzcDMCAEDwsgAwRAIANBADYCBCADQQ42AgALIAYQBiAEEAZBAAvlAQIDfwF+QX8hBQJAIAAgASACQQAQJiIERQ0AIAAgASACEIsBIgZFDQACfgJAIAJBCHENACAAKAJAIAGnQQR0aigCCCICRQ0AIAIgAxAhQQBOBEAgAykDAAwCCyAAQQhqIgAEQCAAQQA2AgQgAEEPNgIAC0F/DwsgAxAqIAMgBCgCGDYCLCADIAQpAyg3AxggAyAEKAIUNgIoIAMgBCkDIDcDICADIAQoAhA7ATAgAyAELwFSOwEyQvwBQtwBIAQtAAYbCyEHIAMgBjYCCCADIAE3AxAgAyAHQgOENwMAQQAhBQsgBQspAQF/IAAgASACIABBCGoiABAmIgNFBEBBAA8LIAMoAjBBACACIAAQJQuAAwEGfwJ/An9BMCABQYB/Sw0BGgJ/IAFBgH9PBEBBhIQBQTA2AgBBAAwBC0EAQRAgAUELakF4cSABQQtJGyIFQcwAahAJIgFFDQAaIAFBCGshAgJAIAFBP3FFBEAgAiEBDAELIAFBBGsiBigCACIHQXhxIAFBP2pBQHFBCGsiASABQUBrIAEgAmtBD0sbIgEgAmsiA2shBCAHQQNxRQRAIAIoAgAhAiABIAQ2AgQgASACIANqNgIADAELIAEgBCABKAIEQQFxckECcjYCBCABIARqIgQgBCgCBEEBcjYCBCAGIAMgBigCAEEBcXJBAnI2AgAgAiADaiIEIAQoAgRBAXI2AgQgAiADEDsLAkAgASgCBCICQQNxRQ0AIAJBeHEiAyAFQRBqTQ0AIAEgBSACQQFxckECcjYCBCABIAVqIgIgAyAFayIFQQNyNgIEIAEgA2oiAyADKAIEQQFyNgIEIAIgBRA7CyABQQhqCyIBRQsEQEEwDwsgACABNgIAQQALCwoAIABBiIQBEAQL6AIBBX8gACgCUCEBIAAvATAhBEEEIQUDQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgBUGAgARGRQRAIAFBCGohASAFQQRqIQUMAQsLAkAgBEUNACAEQQNxIQUgACgCTCEBIARBAWtBA08EQCAEIAVrIQADQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgAUEIaiEBIABBBGsiAA0ACwsgBUUNAANAIAFBACABLwEAIgAgBGsiAiAAIAJJGzsBACABQQJqIQEgBUEBayIFDQALCwuDAQEEfyACQQFOBEAgAiAAKAJIIAFqIgJqIQMgACgCUCEEA0AgBCACKAAAQbHz3fF5bEEPdkH+/wdxaiIFLwEAIgYgAUH//wNxRwRAIAAoAkwgASAAKAI4cUH//wNxQQF0aiAGOwEAIAUgATsBAAsgAUEBaiEBIAJBAWoiAiADSQ0ACwsLUAECfyABIAAoAlAgACgCSCABaigAAEGx893xeWxBD3ZB/v8HcWoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILugEBAX8jAEEQayICJAAgAkEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgARBYIAJBEGokAAu9AQEBfyMAQRBrIgEkACABQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEANgJAIAFBEGokAEEAC70BAQF/IwBBEGsiASQAIAFBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAKAJAIQAgAUEQaiQAIAALvgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQVyAEQRBqJAALygEAIwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAAoAkAgASACQdSAASgCABEAADYCQCADQRBqJAALwAEBAX8jAEEQayIDJAAgA0EAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACEF0hACADQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFwhACACQRBqJAAgAAu2AQEBfyMAQRBrIgAkACAAQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEQaiQAQQgLwgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQWSEAIARBEGokACAAC8IBAQF/IwBBEGsiBCQAIARBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAiADEFYhACAEQRBqJAAgAAsHACAALwEwC8ABAQF/IwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAhBVIQAgA0EQaiQAIAALBwAgACgCQAsaACAAIAAoAkAgASACQdSAASgCABEAADYCQAsLACAAQQA2AkBBAAsHACAAKAIgCwQAQQgLzgUCA34BfyMAQYBAaiIIJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDhECAwwFAAEECAkJCQkJCQcJBgkLIANCCFoEfiACIAEoAmQ2AgAgAiABKAJoNgIEQggFQn8LIQYMCwsgARAGDAoLIAEoAhAiAgRAIAIgASkDGCABQeQAaiICEEEiA1ANCCABKQMIIgVCf4UgA1QEQCACBEAgAkEANgIEIAJBFTYCAAsMCQsgAUEANgIQIAEgAyAFfDcDCCABIAEpAwAgA3w3AwALIAEtAHgEQCABKQMAIQUMCQtCACEDIAEpAwAiBVAEQCABQgA3AyAMCgsDQCAAIAggBSADfSIFQoDAACAFQoDAAFQbEBEiB0J/VwRAIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwJCyAHUEUEQCABKQMAIgUgAyAHfCIDWA0KDAELCyABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEpAwggASkDICIFfSIHIAMgAyAHVhsiA1ANCAJAIAEtAHhFDQAgACAFQQAQFEF/Sg0AIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwHCyAAIAIgAxARIgZCf1cEQCABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEgASkDICAGfCIDNwMgIAZCAFINCEIAIQYgAyABKQMIWg0IIAFB5ABqBEAgAUEANgJoIAFBETYCZAsMBgsgASkDICABKQMAIgV9IAEpAwggBX0gAiADIAFB5ABqEEQiA0IAUw0FIAEgASkDACADfDcDIAwHCyACIAFBKGoQYEEfdawhBgwGCyABMABgIQYMBQsgASkDcCEGDAQLIAEpAyAgASkDAH0hBgwDCyABQeQAagRAIAFBADYCaCABQRw2AmQLC0J/IQYMAQsgASAFNwMgCyAIQYBAayQAIAYLBwAgACgCAAsPACAAIAAoAjBBAWo2AjALGABB+IMBQgA3AgBBgIQBQQA2AgBB+IMBCwcAIABBDGoLBwAgACgCLAsHACAAKAIoCwcAIAAoAhgLFQAgACABrSACrUIghoQgAyAEEIoBCxMBAX4gABAzIgFCIIinEAAgAacLbwEBfiABrSACrUIghoQhBSMAQRBrIgEkAAJ/IABFBEAgBVBFBEAgBARAIARBADYCBCAEQRI2AgALQQAMAgtBAEIAIAMgBBA6DAELIAEgBTcDCCABIAA2AgAgAUIBIAMgBBA6CyEAIAFBEGokACAACxQAIAAgASACrSADrUIghoQgBBBSC9oCAgJ/AX4CfyABrSACrUIghoQiByAAKQMwVEEAIARBCkkbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/DAELIAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtBfwwBCyADBH8gA0H//wNxQQhGIANBfUtyBUEBC0UEQCAAQQhqBEAgAEEANgIMIABBEDYCCAtBfwwBCyAAKAJAIgEgB6ciBUEEdGooAgAiAgR/IAIoAhAgA0YFIANBf0YLIQYgASAFQQR0aiIBIQUgASgCBCEBAkAgBgRAIAFFDQEgAUEAOwFQIAEgASgCAEF+cSIANgIAIAANASABECAgBUEANgIEQQAMAgsCQCABDQAgBSACECsiATYCBCABDQAgAEEIagRAIABBADYCDCAAQQ42AggLQX8MAgsgASAEOwFQIAEgAzYCECABIAEoAgBBAXI2AgALQQALCxwBAX4gACABIAIgAEEIahBMIgNCIIinEAAgA6cLHwEBfiAAIAEgAq0gA61CIIaEEBEiBEIgiKcQACAEpwteAQF+An5CfyAARQ0AGiAAKQMwIgIgAUEIcUUNABpCACACUA0AGiAAKAJAIQADQCACIAKnQQR0IABqQRBrKAIADQEaIAJCAX0iAkIAUg0AC0IACyICQiCIpxAAIAKnCxMAIAAgAa0gAq1CIIaEIAMQiwELnwEBAn4CfiACrSADrUIghoQhBUJ/IQQCQCAARQ0AIAAoAgQNACAAQQRqIQIgBUJ/VwRAIAIEQCACQQA2AgQgAkESNgIAC0J/DAILQgAhBCAALQAQDQAgBVANACAAKAIUIAEgBRARIgRCf1UNACAAKAIUIQAgAgRAIAIgACgCDDYCACACIAAoAhA2AgQLQn8hBAsgBAsiBEIgiKcQACAEpwueAQEBfwJ/IAAgACABrSACrUIghoQgAyAAKAIcEH8iAQRAIAEQMkF/TARAIABBCGoEQCAAIAEoAgw2AgggACABKAIQNgIMCyABEAtBAAwCC0EYEAkiBEUEQCAAQQhqBEAgAEEANgIMIABBDjYCCAsgARALQQAMAgsgBCAANgIAIARBADYCDCAEQgA3AgQgBCABNgIUIARBADoAEAsgBAsLsQICAX8BfgJ/QX8hBAJAIAAgAa0gAq1CIIaEIgZBAEEAECZFDQAgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAILIAAoAkAiASAGpyICQQR0aiIEKAIIIgUEQEEAIQQgBSADEHFBf0oNASAAQQhqBEAgAEEANgIMIABBDzYCCAtBfwwCCwJAIAQoAgAiBQRAIAUoAhQgA0YNAQsCQCABIAJBBHRqIgEoAgQiBA0AIAEgBRArIgQ2AgQgBA0AIABBCGoEQCAAQQA2AgwgAEEONgIIC0F/DAMLIAQgAzYCFCAEIAQoAgBBIHI2AgBBAAwCC0EAIQQgASACQQR0aiIBKAIEIgBFDQAgACAAKAIAQV9xIgI2AgAgAg0AIAAQICABQQA2AgQLIAQLCxQAIAAgAa0gAq1CIIaEIAQgBRBzCxIAIAAgAa0gAq1CIIaEIAMQFAtBAQF+An4gAUEAIAIbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0J/DAELIAAgASACIAMQdAsiBEIgiKcQACAEpwvGAwIFfwF+An4CQAJAIAAiBC0AGEECcQRAIARBCGoEQCAEQQA2AgwgBEEZNgIICwwBCyABRQRAIARBCGoEQCAEQQA2AgwgBEESNgIICwwBCyABECIiByABakEBay0AAEEvRwRAIAdBAmoQCSIARQRAIARBCGoEQCAEQQA2AgwgBEEONgIICwwCCwJAAkAgACIGIAEiBXNBA3ENACAFQQNxBEADQCAGIAUtAAAiAzoAACADRQ0DIAZBAWohBiAFQQFqIgVBA3ENAAsLIAUoAgAiA0F/cyADQYGChAhrcUGAgYKEeHENAANAIAYgAzYCACAFKAIEIQMgBkEEaiEGIAVBBGohBSADQYGChAhrIANBf3NxQYCBgoR4cUUNAAsLIAYgBS0AACIDOgAAIANFDQADQCAGIAUtAAEiAzoAASAGQQFqIQYgBUEBaiEFIAMNAAsLIAcgACIDakEvOwAACyAEQQBCAEEAEFIiAEUEQCADEAYMAQsgBCADIAEgAxsgACACEHQhCCADEAYgCEJ/VwRAIAAQCyAIDAMLIAQgCEEDQYCA/I8EEHNBf0oNASAEIAgQchoLQn8hCAsgCAsiCEIgiKcQACAIpwsQACAAIAGtIAKtQiCGhBByCxYAIAAgAa0gAq1CIIaEIAMgBCAFEGYL3iMDD38IfgF8IwBB8ABrIgkkAAJAIAFBAE5BACAAG0UEQCACBEAgAkEANgIEIAJBEjYCAAsMAQsgACkDGCISAn5BsIMBKQMAIhNCf1EEQCAJQoOAgIBwNwMwIAlChoCAgPAANwMoIAlCgYCAgCA3AyBBsIMBQQAgCUEgahAkNwMAIAlCj4CAgHA3AxAgCUKJgICAoAE3AwAgCUKMgICA0AE3AwhBuIMBQQggCRAkNwMAQbCDASkDACETCyATC4MgE1IEQCACBEAgAkEANgIEIAJBHDYCAAsMAQsgASABQRByQbiDASkDACITIBKDIBNRGyIKQRhxQRhGBEAgAgRAIAJBADYCBCACQRk2AgALDAELIAlBOGoQKgJAIAAgCUE4ahAhBEACQCAAKAIMQQVGBEAgACgCEEEsRg0BCyACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAgsgCkEBcUUEQCACBEAgAkEANgIEIAJBCTYCAAsMAwsgAhBJIgVFDQEgBSAKNgIEIAUgADYCACAKQRBxRQ0CIAUgBSgCFEECcjYCFCAFIAUoAhhBAnI2AhgMAgsgCkECcQRAIAIEQCACQQA2AgQgAkEKNgIACwwCCyAAEDJBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsCfyAKQQhxBEACQCACEEkiAUUNACABIAo2AgQgASAANgIAIApBEHFFDQAgASABKAIUQQJyNgIUIAEgASgCGEECcjYCGAsgAQwBCyMAQUBqIg4kACAOQQhqECoCQCAAIA5BCGoQIUF/TARAIAIEQCACIAAoAgw2AgAgAiAAKAIQNgIECwwBCyAOLQAIQQRxRQRAIAIEQCACQYoBNgIEIAJBBDYCAAsMAQsgDikDICETIAIQSSIFRQRAQQAhBQwBCyAFIAo2AgQgBSAANgIAIApBEHEEQCAFIAUoAhRBAnI2AhQgBSAFKAIYQQJyNgIYCwJAAkACQCATUARAAn8gACEBAkADQCABKQMYQoCAEINCAFINASABKAIAIgENAAtBAQwBCyABQQBCAEESEA6nCw0EIAVBCGoEQCAFQQA2AgwgBUETNgIICwwBCyMAQdAAayIBJAACQCATQhVYBEAgBUEIagRAIAVBADYCDCAFQRM2AggLDAELAkACQCAFKAIAQgAgE0KqgAQgE0KqgARUGyISfUECEBRBf0oNACAFKAIAIgMoAgxBBEYEQCADKAIQQRZGDQELIAVBCGoEQCAFIAMoAgw2AgggBSADKAIQNgIMCwwBCyAFKAIAEDMiE0J/VwRAIAUoAgAhAyAFQQhqIggEQCAIIAMoAgw2AgAgCCADKAIQNgIECwwBCyAFKAIAIBJBACAFQQhqIg8QLSIERQ0BIBJCqoAEWgRAAkAgBCkDCEIUVARAIARBADoAAAwBCyAEQhQ3AxAgBEEBOgAACwsgAQRAIAFBADYCBCABQRM2AgALIARCABATIQwCQCAELQAABH4gBCkDCCAEKQMQfQVCAAunIgdBEmtBA0sEQEJ/IRcDQCAMQQFrIQMgByAMakEVayEGAkADQCADQQFqIgNB0AAgBiADaxB6IgNFDQEgA0EBaiIMQZ8SQQMQPQ0ACwJAIAMgBCgCBGusIhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBC0AAAR+IAQpAxAFQgALIRICQCAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsgBEIEEBMoAABB0JaVMEcEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsCQAJAAkAgEkIUVA0AIAQoAgQgEqdqQRRrKAAAQdCWmThHDQACQCASQhR9IhQgBCIDKQMIVgRAIANBADoAAAwBCyADIBQ3AxAgA0EBOgAACyAFKAIUIRAgBSgCACEGIAMtAAAEfiAEKQMQBUIACyEWIARCBBATGiAEEAwhCyAEEAwhDSAEEB0iFEJ/VwRAIAEEQCABQRY2AgQgAUEENgIACwwECyAUQjh8IhUgEyAWfCIWVgRAIAEEQCABQQA2AgQgAUEVNgIACwwECwJAAkAgEyAUVg0AIBUgEyAEKQMIfFYNAAJAIBQgE30iFSAEKQMIVgRAIANBADoAAAwBCyADIBU3AxAgA0EBOgAAC0EAIQcMAQsgBiAUQQAQFEF/TARAIAEEQCABIAYoAgw2AgAgASAGKAIQNgIECwwFC0EBIQcgBkI4IAFBEGogARAtIgNFDQQLIANCBBATKAAAQdCWmTBHBEAgAQRAIAFBADYCBCABQRU2AgALIAdFDQQgAxAIDAQLIAMQHSEVAkAgEEEEcSIGRQ0AIBQgFXxCDHwgFlENACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgA0IEEBMaIAMQFSIQIAsgC0H//wNGGyELIAMQFSIRIA0gDUH//wNGGyENAkAgBkUNACANIBFGQQAgCyAQRhsNACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgCyANcgRAIAEEQCABQQA2AgQgAUEBNgIACyAHRQ0EIAMQCAwECyADEB0iGCADEB1SBEAgAQRAIAFBADYCBCABQQE2AgALIAdFDQQgAxAIDAQLIAMQHSEVIAMQHSEWIAMtAABFBEAgAQRAIAFBADYCBCABQRQ2AgALIAdFDQQgAxAIDAQLIAcEQCADEAgLAkAgFkIAWQRAIBUgFnwiGSAWWg0BCyABBEAgAUEWNgIEIAFBBDYCAAsMBAsgEyAUfCIUIBlUBEAgAQRAIAFBADYCBCABQRU2AgALDAQLAkAgBkUNACAUIBlRDQAgAQRAIAFBADYCBCABQRU2AgALDAQLIBggFUIugFgNASABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCASIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAUoAhQhAyAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsgBC0AAAR+IAQpAxAFQgALIRQgBEIEEBMaIAQQFQRAIAEEQCABQQA2AgQgAUEBNgIACwwDCyAEEAwgBBAMIgZHBEAgAQRAIAFBADYCBCABQRM2AgALDAMLIAQQFSEHIAQQFa0iFiAHrSIVfCIYIBMgFHwiFFYEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCADQQRxRQ0AIBQgGFENACABBEAgAUEANgIEIAFBFTYCAAsMAwsgBq0gARBqIgNFDQIgAyAWNwMgIAMgFTcDGCADQQA6ACwMAQsgGCABEGoiA0UNASADIBY3AyAgAyAVNwMYIANBAToALAsCQCASQhR8IhQgBCkDCFYEQCAEQQA6AAAMAQsgBCAUNwMQIARBAToAAAsgBBAMIQYCQCADKQMYIAMpAyB8IBIgE3xWDQACQCAGRQRAIAUtAARBBHFFDQELAkAgEkIWfCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIACyIUIAatIhJUDQEgBS0ABEEEcUEAIBIgFFIbDQEgBkUNACADIAQgEhATIAZBACABEDUiBjYCKCAGDQAgAxAWDAILAkAgEyADKQMgIhJYBEACQCASIBN9IhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBCADKQMYEBMiBkUNAiAGIAMpAxgQFyIHDQEgAQRAIAFBADYCBCABQQ42AgALIAMQFgwDCyAFKAIAIBJBABAUIQcgBSgCACEGIAdBf0wEQCABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAMLQQAhByAGEDMgAykDIFENACABBEAgAUEANgIEIAFBEzYCAAsgAxAWDAILQgAhFAJAAkAgAykDGCIWUEUEQANAIBQgAykDCFIiC0UEQCADLQAsDQMgFkIuVA0DAn8CQCADKQMQIhVCgIAEfCISIBVaQQAgEkKAgICAAVQbRQ0AIAMoAgAgEqdBBHQQNCIGRQ0AIAMgBjYCAAJAIAMpAwgiFSASWg0AIAYgFadBBHRqIgZCADcCACAGQgA3AAUgFUIBfCIVIBJRDQADQCADKAIAIBWnQQR0aiIGQgA3AgAgBkIANwAFIBVCAXwiFSASUg0ACwsgAyASNwMIIAMgEjcDEEEBDAELIAEEQCABQQA2AgQgAUEONgIAC0EAC0UNBAtB2AAQCSIGBH8gBkIANwMgIAZBADYCGCAGQv////8PNwMQIAZBADsBDCAGQb+GKDYCCCAGQQE6AAYgBkEAOwEEIAZBADYCACAGQgA3A0ggBkGAgNiNeDYCRCAGQgA3AyggBkIANwMwIAZCADcDOCAGQUBrQQA7AQAgBkIANwNQIAYFQQALIQYgAygCACAUp0EEdGogBjYCAAJAIAYEQCAGIAUoAgAgB0EAIAEQaCISQn9VDQELIAsNBCABKAIAQRNHDQQgAQRAIAFBADYCBCABQRU2AgALDAQLIBRCAXwhFCAWIBJ9IhZCAFINAAsLIBQgAykDCFINAAJAIAUtAARBBHFFDQAgBwRAIActAAAEfyAHKQMQIAcpAwhRBUEAC0UNAgwBCyAFKAIAEDMiEkJ/VwRAIAUoAgAhBiABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAULIBIgAykDGCADKQMgfFINAQsgBxAIAn4gCARAAn8gF0IAVwRAIAUgCCABEEghFwsgBSADIAEQSCISIBdVCwRAIAgQFiASDAILIAMQFgwFC0IAIAUtAARBBHFFDQAaIAUgAyABEEgLIRcgAyEIDAMLIAEEQCABQQA2AgQgAUEVNgIACyAHEAggAxAWDAILIAMQFiAHEAgMAQsgAQRAIAFBADYCBCABQRU2AgALIAMQFgsCQCAMIAQoAgRrrCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIAC6ciB0ESa0EDSw0BCwsgBBAIIBdCf1UNAwwBCyAEEAgLIA8iAwRAIAMgASgCADYCACADIAEoAgQ2AgQLIAgQFgtBACEICyABQdAAaiQAIAgNAQsgAgRAIAIgBSgCCDYCACACIAUoAgw2AgQLDAELIAUgCCgCADYCQCAFIAgpAwg3AzAgBSAIKQMQNwM4IAUgCCgCKDYCICAIEAYgBSgCUCEIIAVBCGoiBCEBQQAhBwJAIAUpAzAiE1ANAEGAgICAeCEGAn8gE7pEAAAAAAAA6D+jRAAA4P///+9BpCIaRAAAAAAAAPBBYyAaRAAAAAAAAAAAZnEEQCAaqwwBC0EACyIDQYCAgIB4TQRAIANBAWsiA0EBdiADciIDQQJ2IANyIgNBBHYgA3IiA0EIdiADciIDQRB2IANyQQFqIQYLIAYgCCgCACIMTQ0AIAYQPCILRQRAIAEEQCABQQA2AgQgAUEONgIACwwBCwJAIAgpAwhCACAMG1AEQCAIKAIQIQ8MAQsgCCgCECEPA0AgDyAHQQJ0aigCACIBBEADQCABKAIYIQMgASALIAEoAhwgBnBBAnRqIg0oAgA2AhggDSABNgIAIAMiAQ0ACwsgB0EBaiIHIAxHDQALCyAPEAYgCCAGNgIAIAggCzYCEAsCQCAFKQMwUA0AQgAhEwJAIApBBHFFBEADQCAFKAJAIBOnQQR0aigCACgCMEEAQQAgAhAlIgFFDQQgBSgCUCABIBNBCCAEEE1FBEAgBCgCAEEKRw0DCyATQgF8IhMgBSkDMFQNAAwDCwALA0AgBSgCQCATp0EEdGooAgAoAjBBAEEAIAIQJSIBRQ0DIAUoAlAgASATQQggBBBNRQ0BIBNCAXwiEyAFKQMwVA0ACwwBCyACBEAgAiAEKAIANgIAIAIgBCgCBDYCBAsMAQsgBSAFKAIUNgIYDAELIAAgACgCMEEBajYCMCAFEEtBACEFCyAOQUBrJAAgBQsiBQ0BIAAQGhoLQQAhBQsgCUHwAGokACAFCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwAL4CoDEX8IfgN8IwBBwMAAayIHJABBfyECAkAgAEUNAAJ/IAAtAChFBEBBACAAKAIYIAAoAhRGDQEaC0EBCyEBAkACQCAAKQMwIhRQRQRAIAAoAkAhCgNAIAogEqdBBHRqIgMtAAwhCwJAAkAgAygCCA0AIAsNACADKAIEIgNFDQEgAygCAEUNAQtBASEBCyAXIAtBAXOtQv8Bg3whFyASQgF8IhIgFFINAAsgF0IAUg0BCyAAKAIEQQhxIAFyRQ0BAn8gACgCACIDKAIkIgFBA0cEQCADKAIgBH9BfyADEBpBAEgNAhogAygCJAUgAQsEQCADEEMLQX8gA0EAQgBBDxAOQgBTDQEaIANBAzYCJAtBAAtBf0oNASAAKAIAKAIMQRZGBEAgACgCACgCEEEsRg0CCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLDAILIAFFDQAgFCAXVARAIABBCGoEQCAAQQA2AgwgAEEUNgIICwwCCyAXp0EDdBAJIgtFDQFCfyEWQgAhEgNAAkAgCiASp0EEdGoiBigCACIDRQ0AAkAgBigCCA0AIAYtAAwNACAGKAIEIgFFDQEgASgCAEUNAQsgFiADKQNIIhMgEyAWVhshFgsgBi0ADEUEQCAXIBlYBEAgCxAGIABBCGoEQCAAQQA2AgwgAEEUNgIICwwECyALIBmnQQN0aiASNwMAIBlCAXwhGQsgEkIBfCISIBRSDQALIBcgGVYEQCALEAYgAEEIagRAIABBADYCDCAAQRQ2AggLDAILAkACQCAAKAIAKQMYQoCACINQDQACQAJAIBZCf1INACAAKQMwIhNQDQIgE0IBgyEVIAAoAkAhAwJAIBNCAVEEQEJ/IRRCACESQgAhFgwBCyATQn6DIRlCfyEUQgAhEkIAIRYDQCADIBKnQQR0aigCACIBBEAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyADIBJCAYQiGKdBBHRqKAIAIgEEQCAWIAEpA0giEyATIBZUIgEbIRYgFCAYIAEbIRQLIBJCAnwhEiAZQgJ9IhlQRQ0ACwsCQCAVUA0AIAMgEqdBBHRqKAIAIgFFDQAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyAUQn9RDQBCACETIwBBEGsiBiQAAkAgACAUIABBCGoiCBBBIhVQDQAgFSAAKAJAIBSnQQR0aigCACIKKQMgIhh8IhQgGFpBACAUQn9VG0UEQCAIBEAgCEEWNgIEIAhBBDYCAAsMAQsgCi0ADEEIcUUEQCAUIRMMAQsgACgCACAUQQAQFCEBIAAoAgAhAyABQX9MBEAgCARAIAggAygCDDYCACAIIAMoAhA2AgQLDAELIAMgBkEMakIEEBFCBFIEQCAAKAIAIQEgCARAIAggASgCDDYCACAIIAEoAhA2AgQLDAELIBRCBHwgFCAGKAAMQdCWncAARhtCFEIMAn9BASEBAkAgCikDKEL+////D1YNACAKKQMgQv7///8PVg0AQQAhAQsgAQsbfCIUQn9XBEAgCARAIAhBFjYCBCAIQQQ2AgALDAELIBQhEwsgBkEQaiQAIBMiFkIAUg0BIAsQBgwFCyAWUA0BCwJ/IAAoAgAiASgCJEEBRgRAIAFBDGoEQCABQQA2AhAgAUESNgIMC0F/DAELQX8gAUEAIBZBERAOQgBTDQAaIAFBATYCJEEAC0F/Sg0BC0IAIRYCfyAAKAIAIgEoAiRBAUYEQCABQQxqBEAgAUEANgIQIAFBEjYCDAtBfwwBC0F/IAFBAEIAQQgQDkIAUw0AGiABQQE2AiRBAAtBf0oNACAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLIAsQBgwCCyAAKAJUIgIEQCACQgA3AxggAigCAEQAAAAAAAAAACACKAIMIAIoAgQRDgALIABBCGohBCAXuiEcQgAhFAJAAkACQANAIBcgFCITUgRAIBO6IByjIRsgE0IBfCIUuiAcoyEaAkAgACgCVCICRQ0AIAIgGjkDKCACIBs5AyAgAisDECAaIBuhRAAAAAAAAAAAoiAboCIaIAIrAxihY0UNACACKAIAIBogAigCDCACKAIEEQ4AIAIgGjkDGAsCfwJAIAAoAkAgCyATp0EDdGopAwAiE6dBBHRqIg0oAgAiAQRAIAEpA0ggFlQNAQsgDSgCBCEFAkACfwJAIA0oAggiAkUEQCAFRQ0BQQEgBSgCACICQQFxDQIaIAJBwABxQQZ2DAILQQEgBQ0BGgsgDSABECsiBTYCBCAFRQ0BIAJBAEcLIQZBACEJIwBBEGsiDCQAAkAgEyAAKQMwWgRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/IQkMAQsgACgCQCIKIBOnIgNBBHRqIg8oAgAiAkUNACACLQAEDQACQCACKQNIQhp8IhhCf1cEQCAAQQhqBEAgAEEWNgIMIABBBDYCCAsMAQtBfyEJIAAoAgAgGEEAEBRBf0wEQCAAKAIAIQIgAEEIagRAIAAgAigCDDYCCCAAIAIoAhA2AgwLDAILIAAoAgBCBCAMQQxqIABBCGoiDhAtIhBFDQEgEBAMIQEgEBAMIQggEC0AAAR/IBApAxAgECkDCFEFQQALIQIgEBAIIAJFBEAgDgRAIA5BADYCBCAOQRQ2AgALDAILAkAgCEUNACAAKAIAIAGtQQEQFEF/TARAQYSEASgCACECIA4EQCAOIAI2AgQgDkEENgIACwwDC0EAIAAoAgAgCEEAIA4QRSIBRQ0BIAEgCEGAAiAMQQhqIA4QbiECIAEQBiACRQ0BIAwoAggiAkUNACAMIAIQbSICNgIIIA8oAgAoAjQgAhBvIQIgDygCACACNgI0CyAPKAIAIgJBAToABEEAIQkgCiADQQR0aigCBCIBRQ0BIAEtAAQNASACKAI0IQIgAUEBOgAEIAEgAjYCNAwBC0F/IQkLIAxBEGokACAJQQBIDQUgACgCABAfIhhCAFMNBSAFIBg3A0ggBgRAQQAhDCANKAIIIg0hASANRQRAIAAgACATQQhBABB/IgwhASAMRQ0HCwJAAkAgASAHQQhqECFBf0wEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMAQsgBykDCCISQsAAg1AEQCAHQQA7ATggByASQsAAhCISNwMICwJAAkAgBSgCECICQX5PBEAgBy8BOCIDRQ0BIAUgAzYCECADIQIMAgsgAg0AIBJCBINQDQAgByAHKQMgNwMoIAcgEkIIhCISNwMIQQAhAgwBCyAHIBJC9////w+DIhI3AwgLIBJCgAGDUARAIAdBADsBOiAHIBJCgAGEIhI3AwgLAn8gEkIEg1AEQEJ/IRVBgAoMAQsgBSAHKQMgIhU3AyggEkIIg1AEQAJAAkACQAJAQQggAiACQX1LG0H//wNxDg0CAwMDAwMDAwEDAwMAAwtBgApBgAIgFUKUwuTzD1YbDAQLQYAKQYACIBVCg4Ow/w9WGwwDC0GACkGAAiAVQv////8PVhsMAgtBgApBgAIgFUIAUhsMAQsgBSAHKQMoNwMgQYACCyEPIAAoAgAQHyITQn9XBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyAFIAUvAQxB9/8DcTsBDCAAIAUgDxA3IgpBAEgNACAHLwE4IghBCCAFKAIQIgMgA0F9SxtB//8DcSICRyEGAkACQAJAAkACQAJAAkAgAiAIRwRAIANBAEchAwwBC0EAIQMgBS0AAEGAAXFFDQELIAUvAVIhCSAHLwE6IQIMAQsgBS8BUiIJIAcvAToiAkYNAQsgASABKAIwQQFqNgIwIAJB//8DcQ0BIAEhAgwCCyABIAEoAjBBAWo2AjBBACEJDAILQSZBACAHLwE6QQFGGyICRQRAIAQEQCAEQQA2AgQgBEEYNgIACyABEAsMAwsgACABIAcvATpBACAAKAIcIAIRBgAhAiABEAsgAkUNAgsgCUEARyEJIAhBAEcgBnFFBEAgAiEBDAELIAAgAiAHLwE4EIEBIQEgAhALIAFFDQELAkAgCEUgBnJFBEAgASECDAELIAAgAUEAEIABIQIgARALIAJFDQELAkAgA0UEQCACIQMMAQsgACACIAUoAhBBASAFLwFQEIIBIQMgAhALIANFDQELAkAgCUUEQCADIQEMAQsgBSgCVCIBRQRAIAAoAhwhAQsCfyAFLwFSGkEBCwRAIAQEQCAEQQA2AgQgBEEYNgIACyADEAsMAgsgACADIAUvAVJBASABQQARBgAhASADEAsgAUUNAQsgACgCABAfIhhCf1cEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELAkAgARAyQQBOBEACfwJAAkAgASAHQUBrQoDAABARIhJCAVMNAEIAIRkgFUIAVQRAIBW5IRoDQCAAIAdBQGsgEhAbQQBIDQMCQCASQoDAAFINACAAKAJUIgJFDQAgAiAZQoBAfSIZuSAaoxB7CyABIAdBQGtCgMAAEBEiEkIAVQ0ACwwBCwNAIAAgB0FAayASEBtBAEgNAiABIAdBQGtCgMAAEBEiEkIAVQ0ACwtBACASQn9VDQEaIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIECwtBfwshAiABEBoaDAELIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIEC0F/IQILIAEgB0EIahAhQX9MBEAgBARAIAQgASgCDDYCACAEIAEoAhA2AgQLQX8hAgsCf0EAIQkCQCABIgNFDQADQCADLQAaQQFxBEBB/wEhCSADQQBCAEEQEA4iFUIAUw0CIBVCBFkEQCADQQxqBEAgA0EANgIQIANBFDYCDAsMAwsgFachCQwCCyADKAIAIgMNAAsLIAlBGHRBGHUiA0F/TAsEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsgARALDAELIAEQCyACQQBIDQAgACgCABAfIRUgACgCACECIBVCf1cEQCAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsMAQsgAiATEHVBf0wEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELIAcpAwgiE0LkAINC5ABSBEAgBARAIARBADYCBCAEQRQ2AgALDAELAkAgBS0AAEEgcQ0AIBNCEINQRQRAIAUgBygCMDYCFAwBCyAFQRRqEAEaCyAFIAcvATg2AhAgBSAHKAI0NgIYIAcpAyAhEyAFIBUgGH03AyAgBSATNwMoIAUgBS8BDEH5/wNxIANB/wFxQQF0cjsBDCAPQQp2IQNBPyEBAkACQAJAAkAgBSgCECICQQxrDgMAAQIBCyAFQS47AQoMAgtBLSEBIAMNACAFKQMoQv7///8PVg0AIAUpAyBC/v///w9WDQBBFCEBIAJBCEYNACAFLwFSQQFGDQAgBSgCMCICBH8gAi8BBAVBAAtB//8DcSICBEAgAiAFKAIwKAIAakEBay0AAEEvRg0BC0EKIQELIAUgATsBCgsgACAFIA8QNyICQQBIDQAgAiAKRwRAIAQEQCAEQQA2AgQgBEEUNgIACwwBCyAAKAIAIBUQdUF/Sg0BIAAoAgAhAiAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsLIA0NByAMEAsMBwsgDQ0CIAwQCwwCCyAFIAUvAQxB9/8DcTsBDCAAIAVBgAIQN0EASA0FIAAgEyAEEEEiE1ANBSAAKAIAIBNBABAUQX9MBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwGCyAFKQMgIRIjAEGAQGoiAyQAAkAgElBFBEAgAEEIaiECIBK6IRoDQEF/IQEgACgCACADIBJCgMAAIBJCgMAAVBsiEyACEGVBAEgNAiAAIAMgExAbQQBIDQIgACgCVCAaIBIgE30iErqhIBqjEHsgEkIAUg0ACwtBACEBCyADQYBAayQAIAFBf0oNAUEBIREgAUEcdkEIcUEIRgwCCyAEBEAgBEEANgIEIARBDjYCAAsMBAtBAAtFDQELCyARDQBBfyECAkAgACgCABAfQgBTDQAgFyEUQQAhCkIAIRcjAEHwAGsiESQAAkAgACgCABAfIhVCAFkEQCAUUEUEQANAIAAgACgCQCALIBenQQN0aigCAEEEdGoiAygCBCIBBH8gAQUgAygCAAtBgAQQNyIBQQBIBEBCfyEXDAQLIAFBAEcgCnIhCiAXQgF8IhcgFFINAAsLQn8hFyAAKAIAEB8iGEJ/VwRAIAAoAgAhASAAQQhqBEAgACABKAIMNgIIIAAgASgCEDYCDAsMAgsgEULiABAXIgZFBEAgAEEIagRAIABBADYCDCAAQQ42AggLDAILIBggFX0hEyAVQv////8PViAUQv//A1ZyIApyQQFxBEAgBkGZEkEEECwgBkIsEBggBkEtEA0gBkEtEA0gBkEAEBIgBkEAEBIgBiAUEBggBiAUEBggBiATEBggBiAVEBggBkGUEkEEECwgBkEAEBIgBiAYEBggBkEBEBILIAZBnhJBBBAsIAZBABASIAYgFEL//wMgFEL//wNUG6dB//8DcSIBEA0gBiABEA0gBkF/IBOnIBNC/v///w9WGxASIAZBfyAVpyAVQv7///8PVhsQEiAGIABBJEEgIAAtACgbaigCACIDBH8gAy8BBAVBAAtB//8DcRANIAYtAABFBEAgAEEIagRAIABBADYCDCAAQRQ2AggLIAYQCAwCCyAAIAYoAgQgBi0AAAR+IAYpAxAFQgALEBshASAGEAggAUEASA0BIAMEQCAAIAMoAgAgAzMBBBAbQQBIDQILIBMhFwwBCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLQn8hFwsgEUHwAGokACAXQgBTDQAgACgCABAfQj+HpyECCyALEAYgAkEASA0BAn8gACgCACIBKAIkQQFHBEAgAUEMagRAIAFBADYCECABQRI2AgwLQX8MAQsgASgCICICQQJPBEAgAUEMagRAIAFBADYCECABQR02AgwLQX8MAQsCQCACQQFHDQAgARAaQQBODQBBfwwBCyABQQBCAEEJEA5Cf1cEQCABQQI2AiRBfwwBCyABQQA2AiRBAAtFDQIgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyALEAYLIAAoAlQQfCAAKAIAEENBfyECDAILIAAoAlQQfAsgABBLQQAhAgsgB0HAwABqJAAgAgtFAEHwgwFCADcDAEHogwFCADcDAEHggwFCADcDAEHYgwFCADcDAEHQgwFCADcDAEHIgwFCADcDAEHAgwFCADcDAEHAgwELoQMBCH8jAEGgAWsiAiQAIAAQMQJAAn8CQCAAKAIAIgFBAE4EQCABQbATKAIASA0BCyACIAE2AhAgAkEgakH2ESACQRBqEHZBASEGIAJBIGohBCACQSBqECIhA0EADAELIAFBAnQiAUGwEmooAgAhBQJ/AkACQCABQcATaigCAEEBaw4CAAEECyAAKAIEIQNB9IIBKAIAIQdBACEBAkACQANAIAMgAUHQ8QBqLQAARwRAQdcAIQQgAUEBaiIBQdcARw0BDAILCyABIgQNAEGw8gAhAwwBC0Gw8gAhAQNAIAEtAAAhCCABQQFqIgMhASAIDQAgAyEBIARBAWsiBA0ACwsgBygCFBogAwwBC0EAIAAoAgRrQQJ0QdjAAGooAgALIgRFDQEgBBAiIQMgBUUEQEEAIQVBASEGQQAMAQsgBRAiQQJqCyEBIAEgA2pBAWoQCSIBRQRAQegSKAIAIQUMAQsgAiAENgIIIAJBrBJBkRIgBhs2AgQgAkGsEiAFIAYbNgIAIAFBqwogAhB2IAAgATYCCCABIQULIAJBoAFqJAAgBQszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQBxogACAAKAIUIAFqNgIUIAILBgBBsIgBCwYAQayIAQsGAEGkiAELBwAgAEEEagsHACAAQQhqCyYBAX8gACgCFCIBBEAgARALCyAAKAIEIQEgAEEEahAxIAAQBiABC6kBAQN/AkAgAC0AACICRQ0AA0AgAS0AACIERQRAIAIhAwwCCwJAIAIgBEYNACACQSByIAIgAkHBAGtBGkkbIAEtAAAiAkEgciACIAJBwQBrQRpJG0YNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEiAEEgciAAIABBwQBrQRpJGyABLQAAIgBBIHIgACAAQcEAa0EaSRtrC8sGAgJ+An8jAEHgAGsiByQAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDg8AAQoCAwQGBwgICAgICAUICyABQgA3AyAMCQsgACACIAMQESIFQn9XBEAgAUEIaiIBBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMCAsCQCAFUARAIAEpAygiAyABKQMgUg0BIAEgAzcDGCABQQE2AgQgASgCAEUNASAAIAdBKGoQIUF/TARAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAoLAkAgBykDKCIDQiCDUA0AIAcoAlQgASgCMEYNACABQQhqBEAgAUEANgIMIAFBBzYCCAsMCgsgA0IEg1ANASAHKQNAIAEpAxhRDQEgAUEIagRAIAFBADYCDCABQRU2AggLDAkLIAEoAgQNACABKQMoIgMgASkDICIGVA0AIAUgAyAGfSIDWA0AIAEoAjAhBANAIAECfyAFIAN9IgZC/////w8gBkL/////D1QbIganIQBBACACIAOnaiIIRQ0AGiAEIAggAEHUgAEoAgARAAALIgQ2AjAgASABKQMoIAZ8NwMoIAUgAyAGfCIDVg0ACwsgASABKQMgIAV8NwMgDAgLIAEoAgRFDQcgAiABKQMYIgM3AxggASgCMCEAIAJBADYCMCACIAM3AyAgAiAANgIsIAIgAikDAELsAYQ3AwAMBwsgA0IIWgR+IAIgASgCCDYCACACIAEoAgw2AgRCCAVCfwshBQwGCyABEAYMBQtCfyEFIAApAxgiA0J/VwRAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAULIAdBfzYCGCAHQo+AgICAAjcDECAHQoyAgIDQATcDCCAHQomAgICgATcDACADQQggBxAkQn+FgyEFDAQLIANCD1gEQCABQQhqBEAgAUEANgIMIAFBEjYCCAsMAwsgAkUNAgJAIAAgAikDACACKAIIEBRBAE4EQCAAEDMiA0J/VQ0BCyABQQhqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwDCyABIAM3AyAMAwsgASkDICEFDAILIAFBCGoEQCABQQA2AgwgAUEcNgIICwtCfyEFCyAHQeAAaiQAIAULjAcCAn4CfyMAQRBrIgckAAJAAkACQAJAAkACQAJAAkACQAJAIAQOEQABAgMFBggICAgICAgIBwgECAsgAUJ/NwMgIAFBADoADyABQQA7AQwgAUIANwMYIAEoAqxAIAEoAqhAKAIMEQEArUIBfSEFDAgLQn8hBSABKAIADQdCACEFIANQDQcgAS0ADQ0HIAFBKGohBAJAA0ACQCAHIAMgBX03AwggASgCrEAgAiAFp2ogB0EIaiABKAKoQCgCHBEAACEIQgAgBykDCCAIQQJGGyAFfCEFAkACQAJAIAhBAWsOAwADAQILIAFBAToADSABKQMgIgNCf1cEQCABBEAgAUEANgIEIAFBFDYCAAsMBQsgAS0ADkUNBCADIAVWDQQgASADNwMYIAFBAToADyACIAQgA6cQBxogASkDGCEFDAwLIAEtAAwNAyAAIARCgMAAEBEiBkJ/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwECyAGUARAIAFBAToADCABKAKsQCABKAKoQCgCGBEDACABKQMgQn9VDQEgAUIANwMgDAELAkAgASkDIEIAWQRAIAFBADoADgwBCyABIAY3AyALIAEoAqxAIAQgBiABKAKoQCgCFBEPABoLIAMgBVYNAQwCCwsgASgCAA0AIAEEQCABQQA2AgQgAUEUNgIACwsgBVBFBEAgAUEAOgAOIAEgASkDGCAFfDcDGAwIC0J/QgAgASgCABshBQwHCyABKAKsQCABKAKoQCgCEBEBAK1CAX0hBQwGCyABLQAQBEAgAS0ADQRAIAIgAS0ADwR/QQAFQQggASgCFCIAIABBfUsbCzsBMCACIAEpAxg3AyAgAiACKQMAQsgAhDcDAAwHCyACIAIpAwBCt////w+DNwMADAYLIAJBADsBMCACKQMAIQMgAS0ADQRAIAEpAxghBSACIANCxACENwMAIAIgBTcDGEIAIQUMBgsgAiADQrv///8Pg0LAAIQ3AwAMBQsgAS0ADw0EIAEoAqxAIAEoAqhAKAIIEQEArCEFDAQLIANCCFoEfiACIAEoAgA2AgAgAiABKAIENgIEQggFQn8LIQUMAwsgAUUNAiABKAKsQCABKAKoQCgCBBEDACABEDEgARAGDAILIAdBfzYCAEEQIAcQJEI/hCEFDAELIAEEQCABQQA2AgQgAUEUNgIAC0J/IQULIAdBEGokACAFC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQA6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAu3fAIefwZ+IAIpAwAhIiAAIAE2AhwgACAiQv////8PICJC/////w9UGz4CICAAQRBqIQECfyAALQAEBEACfyAALQAMQQJ0IQpBfiEEAkACQAJAIAEiBUUNACAFKAIgRQ0AIAUoAiRFDQAgBSgCHCIDRQ0AIAMoAgAgBUcNAAJAAkAgAygCICIGQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyAGQZoFRg0AIAZBKkcNAQsgCkEFSw0AAkACQCAFKAIMRQ0AIAUoAgQiAQRAIAUoAgBFDQELIAZBmgVHDQEgCkEERg0BCyAFQeDAACgCADYCGEF+DAQLIAUoAhBFDQEgAygCJCEEIAMgCjYCJAJAIAMoAhAEQCADEDACQCAFKAIQIgYgAygCECIIIAYgCEkbIgFFDQAgBSgCDCADKAIIIAEQBxogBSAFKAIMIAFqNgIMIAMgAygCCCABajYCCCAFIAUoAhQgAWo2AhQgBSAFKAIQIAFrIgY2AhAgAyADKAIQIAFrIgg2AhAgCA0AIAMgAygCBDYCCEEAIQgLIAYEQCADKAIgIQYMAgsMBAsgAQ0AIApBAXRBd0EAIApBBEsbaiAEQQF0QXdBACAEQQRKG2pKDQAgCkEERg0ADAILAkACQAJAAkACQCAGQSpHBEAgBkGaBUcNASAFKAIERQ0DDAcLIAMoAhRFBEAgA0HxADYCIAwCCyADKAI0QQx0QYDwAWshBAJAIAMoAowBQQJODQAgAygCiAEiAUEBTA0AIAFBBUwEQCAEQcAAciEEDAELQYABQcABIAFBBkYbIARyIQQLIAMoAgQgCGogBEEgciAEIAMoAmgbIgFBH3AgAXJBH3NBCHQgAUGA/gNxQQh2cjsAACADIAMoAhBBAmoiATYCECADKAJoBEAgAygCBCABaiAFKAIwIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYAACADIAMoAhBBBGo2AhALIAVBATYCMCADQfEANgIgIAUQCiADKAIQDQcgAygCICEGCwJAAkACQAJAIAZBOUYEfyADQaABakHkgAEoAgARAQAaIAMgAygCECIBQQFqNgIQIAEgAygCBGpBHzoAACADIAMoAhAiAUEBajYCECABIAMoAgRqQYsBOgAAIAMgAygCECIBQQFqNgIQIAEgAygCBGpBCDoAAAJAIAMoAhwiAUUEQCADKAIEIAMoAhBqQQA2AAAgAyADKAIQIgFBBWo2AhAgASADKAIEakEAOgAEQQIhBCADKAKIASIBQQlHBEBBBCABQQJIQQJ0IAMoAowBQQFKGyEECyADIAMoAhAiAUEBajYCECABIAMoAgRqIAQ6AAAgAyADKAIQIgFBAWo2AhAgASADKAIEakEDOgAAIANB8QA2AiAgBRAKIAMoAhBFDQEMDQsgASgCJCELIAEoAhwhCSABKAIQIQggASgCLCENIAEoAgAhBiADIAMoAhAiAUEBajYCEEECIQQgASADKAIEaiANQQBHQQF0IAZBAEdyIAhBAEdBAnRyIAlBAEdBA3RyIAtBAEdBBHRyOgAAIAMoAgQgAygCEGogAygCHCgCBDYAACADIAMoAhAiDUEEaiIGNgIQIAMoAogBIgFBCUcEQEEEIAFBAkhBAnQgAygCjAFBAUobIQQLIAMgDUEFajYCECADKAIEIAZqIAQ6AAAgAygCHCgCDCEEIAMgAygCECIBQQFqNgIQIAEgAygCBGogBDoAACADKAIcIgEoAhAEfyADKAIEIAMoAhBqIAEoAhQ7AAAgAyADKAIQQQJqNgIQIAMoAhwFIAELKAIsBEAgBQJ/IAUoAjAhBiADKAIQIQRBACADKAIEIgFFDQAaIAYgASAEQdSAASgCABEAAAs2AjALIANBxQA2AiAgA0EANgIYDAILIAMoAiAFIAYLQcUAaw4jAAQEBAEEBAQEBAQEBAQEBAQEBAQEBAIEBAQEBAQEBAQEBAMECyADKAIcIgEoAhAiBgRAIAMoAgwiCCADKAIQIgQgAS8BFCADKAIYIg1rIglqSQRAA0AgAygCBCAEaiAGIA1qIAggBGsiCBAHGiADIAMoAgwiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIAMgAygCGCAIajYCGCAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAsgAygCEA0MIAMoAhghDSADKAIcKAIQIQZBACEEIAkgCGsiCSADKAIMIghLDQALCyADKAIEIARqIAYgDWogCRAHGiADIAMoAhAgCWoiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIANBADYCGAsgA0HJADYCIAsgAygCHCgCHARAIAMoAhAiBCEJA0ACQCAEIAMoAgxHDQACQCADKAIcKAIsRQ0AIAQgCU0NACAFAn8gBSgCMCEGQQAgAygCBCAJaiIBRQ0AGiAGIAEgBCAJa0HUgAEoAgARAAALNgIwCyAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAtBACEEQQAhCSADKAIQRQ0ADAsLIAMoAhwoAhwhBiADIAMoAhgiAUEBajYCGCABIAZqLQAAIQEgAyAEQQFqNgIQIAMoAgQgBGogAToAACABBEAgAygCECEEDAELCwJAIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0EANgIYCyADQdsANgIgCwJAIAMoAhwoAiRFDQAgAygCECIEIQkDQAJAIAQgAygCDEcNAAJAIAMoAhwoAixFDQAgBCAJTQ0AIAUCfyAFKAIwIQZBACADKAIEIAlqIgFFDQAaIAYgASAEIAlrQdSAASgCABEAAAs2AjALIAUoAhwiBhAwAkAgBSgCECIEIAYoAhAiASABIARLGyIBRQ0AIAUoAgwgBigCCCABEAcaIAUgBSgCDCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";no(Si)||(Si=x(Si));function Ms(We){try{if(We==Si&&ce)return new Uint8Array(ce);var tt=ii(We);if(tt)return tt;if(F)return F(We);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(It){Ti(It)}}function io(We,tt){var It,or,$;try{$=Ms(We),or=new WebAssembly.Module($),It=new WebAssembly.Instance(or,tt)}catch(Ne){var ye=Ne.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Ne}return[It,or]}function uc(){var We={a:Ua};function tt($,ye){var Ne=$.exports;r.asm=Ne,Ie=r.asm.g,J(Ie.buffer),Z=r.asm.W,ln(r.asm.h),Os("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var or=io(Si,We);return tt(or[0]),r.asm}function uu(We){return R.getFloat32(We,!0)}function cp(We){return R.getFloat64(We,!0)}function up(We){return R.getInt16(We,!0)}function Us(We){return R.getInt32(We,!0)}function Pn(We,tt){R.setInt32(We,tt,!0)}function so(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function _s(We,tt){var It=new Date(Us((We>>2)*4)*1e3);Pn((tt>>2)*4,It.getUTCSeconds()),Pn((tt+4>>2)*4,It.getUTCMinutes()),Pn((tt+8>>2)*4,It.getUTCHours()),Pn((tt+12>>2)*4,It.getUTCDate()),Pn((tt+16>>2)*4,It.getUTCMonth()),Pn((tt+20>>2)*4,It.getUTCFullYear()-1900),Pn((tt+24>>2)*4,It.getUTCDay()),Pn((tt+36>>2)*4,0),Pn((tt+32>>2)*4,0);var or=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-or)/(1e3*60*60*24)|0;return Pn((tt+28>>2)*4,$),_s.GMTString||(_s.GMTString=at("GMT")),Pn((tt+40>>2)*4,_s.GMTString),tt}function yl(We,tt){return _s(We,tt)}function El(We,tt,It){be.copyWithin(We,tt,tt+It)}function oo(We){try{return Ie.grow(We-xe.byteLength+65535>>>16),J(Ie.buffer),1}catch{}}function zn(We){var tt=be.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var or=1;or<=4;or*=2){var $=tt*(1+.2/or);$=Math.min($,We+100663296);var ye=Math.min(It,Qe(Math.max(We,$),65536)),Ne=oo(ye);if(Ne)return!0}return!1}function On(We){ae(We)}function Li(We){var tt=Date.now()/1e3|0;return We&&Pn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),or=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),ye=Math.max(or,$);Pn((ys()>>2)*4,ye*60),Pn((ms()>>2)*4,Number(or!=$));function Ne($r){var Gi=$r.toTimeString().match(/\(([A-Za-z ]+)\)$/);return Gi?Gi[1]:"GMT"}var ft=Ne(tt),pt=Ne(It),Lt=at(ft),rr=at(pt);$>2)*4,Lt),Pn((wi()+4>>2)*4,rr)):(Pn((wi()>>2)*4,rr),Pn((wi()+4>>2)*4,Lt))}function _i(We){Mn();var tt=Date.UTC(Us((We+20>>2)*4)+1900,Us((We+16>>2)*4),Us((We+12>>2)*4),Us((We+8>>2)*4),Us((We+4>>2)*4),Us((We>>2)*4),0),It=new Date(tt);Pn((We+24>>2)*4,It.getUTCDay());var or=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-or)/(1e3*60*60*24)|0;return Pn((We+28>>2)*4,$),It.getTime()/1e3|0}var ir=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",or,$,ye,Ne,ft,pt,Lt,rr=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Ne=tt.indexOf(We.charAt(rr++)),ft=tt.indexOf(We.charAt(rr++)),pt=tt.indexOf(We.charAt(rr++)),Lt=tt.indexOf(We.charAt(rr++)),or=Ne<<2|ft>>4,$=(ft&15)<<4|pt>>2,ye=(pt&3)<<6|Lt,It=It+String.fromCharCode(or),pt!==64&&(It=It+String.fromCharCode($)),Lt!==64&&(It=It+String.fromCharCode(ye));while(rr0||(dt(),mr>0))return;function tt(){Dn||(Dn=!0,r.calledRun=!0,!Ee&&(Gt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),tr()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=Cs,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Cs(),e}}();typeof Rb=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Rb=="object"&&(Rb.createModule=eU)});var Of,Tle,Lle,Nle=Et(()=>{Of=["number","number"],Tle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Tle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Tle,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",...Of,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Of,"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",...Of,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Of,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Of,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Of,"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",...Of,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Of,"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",...Of,"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 rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==z.sep);){if(t[r-1]===z.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==z.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Dt();Dt();iA();Jl=class extends qp{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new Xi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new Xi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function uot(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(Mle.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fb(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Mle,iU,Ule,Tb,Xi,sU=Et(()=>{Dt();Dt();Dt();Dt();Dt();Dt();ta=ve("fs"),nU=ve("stream"),Mle=ve("util"),iU=Ze(ve("zlib"));$4();Ule="mixed";Tb=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},Xi=class extends Uu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Ule,r??=Fb(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=x1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fb():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return z.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw nr.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw nr.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return bP(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw nr.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?nr.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw nr.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw nr.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw nr.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw nr.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=z.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw nr.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw nr.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw nr.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw nr.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw nr.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw nr.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw nr.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw nr.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw nr.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),x=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=x,F=x,N=x,U=new Date(C),V=new Date(F),te=new Date(N),le=new Date(x),ae=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ce=ae===ta.constants.S_IFDIR?493:420,Ce=ae|this.getUnixMode(n,ce)&511,de=this.libzip.struct.statCrc(u),Ie=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:V,ctime:te,mtime:le,atimeMs:C,birthtimeMs:F,ctimeMs:N,mtimeMs:x,mode:Ce,crc:de});return a.bigint===!0?Ea.convertToBigIntStats(Ie):Ie}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,x=this.stats.mtimeMs,C=this.stats.mtimeMs,F=new Date(I),N=new Date(v),U=new Date(x),V=new Date(C),te=ta.constants.S_IFDIR|493,le=0,ae=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:F,birthtime:N,ctime:U,mtime:V,atimeMs:I,birthtimeMs:v,ctimeMs:x,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(ae):ae}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(z.dirname(r)).add(z.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(z.dirname(r)).add(z.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(z.dirname(r))?.delete(z.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw nr.EBUSY(`archive closed, ${r}`);let u=z.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,z.resolve(z.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,z.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw nr.ENOENT(r)}if(!h)throw nr.ENOTDIR(r);if(u=z.resolve(p,z.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=z.resolve(z.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=z.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),x=Buffer.from(v);if(p===0)return this.fileSources.set(r,x),x;if(o.asyncDecompress)return new Promise((C,F)=>{iU.default.inflateRaw(x,(N,U)=>{N?F(N):(this.fileSources.set(r,U),C(U))})});{let C=iU.default.inflateRawSync(x);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw nr.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw nr.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw nr.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw nr.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw nr.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw nr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw nr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw nr.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw nr.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw nr.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw nr.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw nr.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw nr.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw nr.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw nr.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,uot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw nr.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw nr.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw nr.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw nr.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw nr.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw nr.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}async rmPromise(r,o){return this.rmSync(r,o)}rmSync(r,{recursive:o=!1}={}){if(this.readOnly)throw nr.EROFS(`rm '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rm '${r}'`,r),n=this.listings.get(a);if(!n)throw nr.ENOTDIR(`rm '${r}'`);if(n.size>0)throw nr.ENOTEMPTY(`rm '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw nr.EINVAL(`rm '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,z.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw nr.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw nr.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw nr.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw nr.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw nr.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw nr.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw nr.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw nr.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw nr.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",z.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=z.join(A.path,A.name),h=this.listings.get(z.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",z.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(z.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(z.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",z.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw nr.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw nr.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw nr.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw nr.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw nr.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw nr.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=z.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=z.resolve(Bt.root,r);return Ug(this,a,o)}}});function Hle(t,e,r=Buffer.alloc(0),o){let a=new Xi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),E=new qp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Yw(_le.default,new Gp(E)),a}var _le,qle=Et(()=>{Dt();_le=Ze(ve("fs"));sU()});var Gle=Et(()=>{Ole();sU();qle()});var k1={};zt(k1,{DEFAULT_COMPRESSION_LEVEL:()=>Ule,LibzipError:()=>Tb,ZipFS:()=>Xi,ZipOpenFS:()=>Jl,getArchivePart:()=>rU,getLibzipPromise:()=>fot,getLibzipSync:()=>Aot,makeEmptyArchive:()=>Fb,mountMemoryDrive:()=>Hle});function Aot(){return x1()}async function fot(){return x1()}var jle,iA=Et(()=>{$4();jle=Ze(Fle());Nle();Gle();Rle(()=>{let t=(0,jle.default)();return Lle(t)})});var QE,Yle=Et(()=>{Dt();qt();Q1();QE=class extends nt{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()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await RE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};QE.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. @@ -156,124 +156,124 @@ Please report this to https://github.com/szmarczak/http2-wrapper/`);C(R)}return} 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"']]}});var ll,Wle=Et(()=>{ll=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Nb={};zt(Nb,{fastGlobOptions:()=>Vle,isBraceExpansion:()=>oU,isGlobPattern:()=>fot,match:()=>pot,micromatchOptions:()=>Lb});function fot(t){if(!Tb.default.scan(t,Lb).isGlob)return!1;try{Tb.default.parse(t,Lb)}catch{return!1}return!0}function pot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...Vle,cwd:le.fromPortablePath(e),fs:FD(zle.default,new Gp(r))})}function oU(t){return Tb.default.scan(t,Lb).isBrace}var Kle,zle,Tb,Lb,Vle,Jle=Et(()=>{Pt();Kle=$e(RS()),zle=$e(ve("fs")),Tb=$e(Zo()),Lb={strictBrackets:!0},Vle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of Qd)t.kill()}function ece(t,e,r,o){return a=>{let n=a[0]instanceof sA.Transform?"pipe":a[0],u=a[1]instanceof sA.Transform?"pipe":a[1],A=a[2]instanceof sA.Transform?"pipe":a[2],p=(0,Zle.default)(t,e,{...o,stdio:[n,u,A]});return Qd.add(p),Qd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof sA.Transform&&a[0].pipe(p.stdin),a[1]instanceof sA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof sA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(Qd.delete(p),Qd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} + `,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"']]}});var ll,Wle=Et(()=>{ll=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Ob={};zt(Ob,{fastGlobOptions:()=>Vle,isBraceExpansion:()=>oU,isGlobPattern:()=>pot,match:()=>hot,micromatchOptions:()=>Nb});function pot(t){if(!Lb.default.scan(t,Nb).isGlob)return!1;try{Lb.default.parse(t,Nb)}catch{return!1}return!0}function hot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...Vle,cwd:ue.fromPortablePath(e),fs:FP(zle.default,new Gp(r))})}function oU(t){return Lb.default.scan(t,Nb).isBrace}var Kle,zle,Lb,Nb,Vle,Jle=Et(()=>{Dt();Kle=Ze(TS()),zle=Ze(ve("fs")),Lb=Ze(Xo()),Nb={strictBrackets:!0},Vle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of kd)t.kill()}function ece(t,e,r,o){return a=>{let n=a[0]instanceof sA.Transform?"pipe":a[0],u=a[1]instanceof sA.Transform?"pipe":a[1],A=a[2]instanceof sA.Transform?"pipe":a[2],p=(0,Zle.default)(t,e,{...o,stdio:[n,u,A]});return kd.add(p),kd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof sA.Transform&&a[0].pipe(p.stdin),a[1]instanceof sA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof sA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),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=>{Qd.delete(p),Qd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(E!==null?E:129)})})}}}function tce(t){return e=>{let r=e[0]==="pipe"?new sA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ob(t,e){return LE.start(t,e)}function Xle(t,e=null){let r=new sA.PassThrough,o=new $le.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),h(1);break}}),p.on("close",E=>{kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(E!==null?E:129)})})}}}function tce(t){return e=>{let r=e[0]==="pipe"?new sA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Mb(t,e){return FE.start(t,e)}function Xle(t,e=null){let r=new sA.PassThrough,o=new $le.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` `),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function rce(t,{prefix:e}){return{stdout:Xle(r=>t.stdout.write(`${r} `),t.stdout.isTTY?e:null),stderr:Xle(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var Zle,sA,$le,Qd,Xl,cU,LE,uU=Et(()=>{Zle=$e(sT()),sA=ve("stream"),$le=ve("string_decoder"),Qd=new Set;Xl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=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}},LE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new LE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new LE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};zt(T1,{EntryCommand:()=>RE,ShellError:()=>ll,execute:()=>TE,globUtils:()=>Nb});function nce(t,e,r){let o=new cl.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof cl.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new ll(`Bad file descriptor: "${t}"`)}return o}function Ub(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function got(t,e,r){let o=[],a=new cl.PassThrough;return a.on("data",n=>o.push(n)),await _b(t,e,Ub(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function ice(t,e,r){let o=t.map(async n=>{let u=await Fd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Mb(t){return t.match(/[^ \r\n\t]+/g)||[]}async function uce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Mb(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Fd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new ll(`Unbound argument #${n}`):new ll(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Mb(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?Q1({type:"variable",name:o.join(" ")},e,r):Q1({type:"number",value:a},e,r)}else return dot[t.type](await Q1(t.left,e,r),await Q1(t.right,e,r))}async function Fd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let x=JSON.stringify({type:E,fd:I}),C=o.get(x);typeof C>"u"&&o.set(x,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await Fd(E.args,e,r);for(let x of v)h(E.subtype,E.fd,x)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let x=await got(v.shell,e,r);if(v.quoted)u(x);else{let C=Mb(x);for(let R=0;R"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let x=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(x.length===0){let C=oU(v)?". 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 ll(`No matches found: "${v}"${C}`)}for(let C of x.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function F1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=le.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return ece(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return tce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:x}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=x}})}function mot(t,e,r){return o=>{let a=new cl.PassThrough,n=_b(t,e,Ub(r,{stdin:a}));return{stdin:a,promise:n}}}function yot(t,e,r){return o=>{let a=new cl.PassThrough,n=_b(t,e,r);return{stdin:a,promise:n}}}function sce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,F1([...e,"__ysh_run_procedure",a],r,o)}}async function oce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Fd(o.args,e,r),h=await ice(o.envs,e,r);A=o.envs.length?F1(p,e,Ub(u,{environment:h})):F1(p,e,u)}break;case"subshell":{let p=await Fd(o.args,e,r),h=mot(o.subshell,e,u);A=sce(h,p,e,u)}break;case"group":{let p=await Fd(o.args,e,r),h=yot(o.group,e,u);A=sce(h,p,e,u)}break;case"envs":{let p=await ice(o.envs,e,r);u.environment={...u.environment,...p},A=F1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ob(A,{stdin:new Xl(u.stdin),stdout:new Xl(u.stdout),stderr:new Xl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Eot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return ace.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=rce(r,{prefix:p});return r.backgroundJobs.push(oce(t,e,Ub(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(uy(t))}' has ended -`)})),0}return await oce(t,e,r)}async function Cot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Eot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof ll))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function _b(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await Cot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function Ace(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=>R1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>R1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function R1(t){switch(t.type){case"redirection":return t.args.some(e=>R1(e));case"argument":return t.segments.some(e=>Ace(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return Ace(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>R1(n)))||r.args.some(a=>R1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=le.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Nb}={}){let I={};for(let[C,R]of Object.entries(n))typeof R<"u"&&(I[C]=R);let v=new Map(hot);for(let[C,R]of Object.entries(o))v.set(C,R);u===null&&(u=new cl.PassThrough,u.end());let x=LD(t,E);if(!fU(x)&&x.length>0&&e.length>0){let{command:C}=x[x.length-1];for(;C.then;)C=C.then.line;let R=C.chain;for(;R.then;)R=R.then.chain;R.type==="command"&&(R.args=R.args.concat(e.map(N=>({type:"argument",segments:[{type:"text",text:N}]}))))}return await _b(x,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var ace,lce,cl,cce,hot,dot,k1=Et(()=>{Pt();Nl();ace=$e(IL()),lce=ve("os"),cl=ve("stream"),cce=ve("timers/promises");Yle();Wle();Jle();uU();uU();hot=new Map([["cd",async([t=(0,lce.homedir)(),...e],r,o)=>{let a=z.resolve(o.cwd,le.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new ll(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new ll(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${le.fromPortablePath(r.cwd)} +`),t.stderr.isTTY?e:null)}}var Zle,sA,$le,kd,Xl,cU,FE,uU=Et(()=>{Zle=Ze(oT()),sA=ve("stream"),$le=ve("string_decoder"),kd=new Set;Xl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=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}},FE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new FE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new FE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var L1={};zt(L1,{EntryCommand:()=>QE,ShellError:()=>ll,execute:()=>RE,globUtils:()=>Ob});function nce(t,e,r){let o=new cl.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof cl.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new ll(`Bad file descriptor: "${t}"`)}return o}function _b(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function dot(t,e,r){let o=[],a=new cl.PassThrough;return a.on("data",n=>o.push(n)),await Hb(t,e,_b(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function ice(t,e,r){let o=t.map(async n=>{let u=await Qd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ub(t){return t.match(/[^ \r\n\t]+/g)||[]}async function uce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ub(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Qd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new ll(`Unbound argument #${n}`):new ll(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ub(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?R1({type:"variable",name:o.join(" ")},e,r):R1({type:"number",value:a},e,r)}else return mot[t.type](await R1(t.left,e,r),await R1(t.right,e,r))}async function Qd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let x=JSON.stringify({type:E,fd:I}),C=o.get(x);typeof C>"u"&&o.set(x,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await Qd(E.args,e,r);for(let x of v)h(E.subtype,E.fd,x)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let x=await dot(v.shell,e,r);if(v.quoted)u(x);else{let C=Ub(x);for(let F=0;F"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let x=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(x.length===0){let C=oU(v)?". 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 ll(`No matches found: "${v}"${C}`)}for(let C of x.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function F1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return ece(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return tce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:x}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=x}})}function yot(t,e,r){return o=>{let a=new cl.PassThrough,n=Hb(t,e,_b(r,{stdin:a}));return{stdin:a,promise:n}}}function Eot(t,e,r){return o=>{let a=new cl.PassThrough,n=Hb(t,e,r);return{stdin:a,promise:n}}}function sce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,F1([...e,"__ysh_run_procedure",a],r,o)}}async function oce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Qd(o.args,e,r),h=await ice(o.envs,e,r);A=o.envs.length?F1(p,e,_b(u,{environment:h})):F1(p,e,u)}break;case"subshell":{let p=await Qd(o.args,e,r),h=yot(o.subshell,e,u);A=sce(h,p,e,u)}break;case"group":{let p=await Qd(o.args,e,r),h=Eot(o.group,e,u);A=sce(h,p,e,u)}break;case"envs":{let p=await ice(o.envs,e,r);u.environment={...u.environment,...p},A=F1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Mb(A,{stdin:new Xl(u.stdin),stdout:new Xl(u.stdout),stderr:new Xl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Cot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return ace.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=rce(r,{prefix:p});return r.backgroundJobs.push(oce(t,e,_b(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended +`)})),0}return await oce(t,e,r)}async function wot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Cot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof ll))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hb(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await wot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function Ace(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=>T1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>T1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function T1(t){switch(t.type){case"redirection":return t.args.some(e=>T1(e));case"argument":return t.segments.some(e=>Ace(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return Ace(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>T1(n)))||r.args.some(a=>T1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function RE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Ob}={}){let I={};for(let[C,F]of Object.entries(n))typeof F<"u"&&(I[C]=F);let v=new Map(got);for(let[C,F]of Object.entries(o))v.set(C,F);u===null&&(u=new cl.PassThrough,u.end());let x=NP(t,E);if(!fU(x)&&x.length>0&&e.length>0){let{command:C}=x[x.length-1];for(;C.then;)C=C.then.line;let F=C.chain;for(;F.then;)F=F.then.chain;F.type==="command"&&(F.args=F.args.concat(e.map(N=>({type:"argument",segments:[{type:"text",text:N}]}))))}return await Hb(x,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var ace,lce,cl,cce,got,mot,Q1=Et(()=>{Dt();Nl();ace=Ze(BL()),lce=ve("os"),cl=ve("stream"),cce=ve("timers/promises");Yle();Wle();Jle();uU();uU();got=new Map([["cd",async([t=(0,lce.homedir)(),...e],r,o)=>{let a=z.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new ll(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new ll(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} `),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new ll("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new ll(`sleep: invalid time interval '${t}'`);return await(0,cce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ob(o,{stdin:new Xl(r.stdin),stdout:new Xl(r.stdout),stderr:new Xl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:x}=JSON.parse(I),C=V=>{switch(x){case null:case 0:u.push(V);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},R=V=>{switch(x){case null:case 1:A.push(V);break;case 2:p.push(V);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},N=Number(t[h++]),U=h+N;for(let V=h;Ve.baseFs.createReadStream(z.resolve(r.cwd,le.toPortablePath(t[V]))));break;case"<<<":C(()=>{let te=new cl.PassThrough;return process.nextTick(()=>{te.write(`${t[V]} -`),te.end()}),te});break;case"<&":C(()=>nce(Number(t[V]),1,r));break;case">":case">>":{let te=z.resolve(r.cwd,le.toPortablePath(t[V]));R(te==="/dev/null"?new cl.Writable({autoDestroy:!0,emitClose:!0,write(ae,fe,ue){setImmediate(ue)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":R(nce(Number(t[V]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new cl.PassThrough;o=I;let v=x=>{if(x===u.length)I.end();else{let C=u[x]();C.pipe(I,{end:!1}),C.on("end",()=>{v(x+1)})}};v(0)}if(A.length>0){let I=new cl.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new cl.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ob(F1(t.slice(h+1),e,r),{stdin:new Xl(o),stdout:new Xl(a),stderr:new Xl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);dot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Hb=_((n4t,fce)=>{function wot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var pce=hd(),Iot=Hb(),Bot=ql(),vot=pE(),Dot=1/0,hce=pce?pce.prototype:void 0,gce=hce?hce.toString:void 0;function dce(t){if(typeof t=="string")return t;if(Bot(t))return Iot(t,dce)+"";if(vot(t))return gce?gce.call(t):"";var e=t+"";return e=="0"&&1/t==-Dot?"-0":e}mce.exports=dce});var L1=_((s4t,Ece)=>{var Pot=yce();function Sot(t){return t==null?"":Pot(t)}Ece.exports=Sot});var pU=_((o4t,Cce)=>{function bot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var xot=pU();function kot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:xot(t,e,r)}wce.exports=kot});var hU=_((l4t,Bce)=>{var Qot="\\ud800-\\udfff",Fot="\\u0300-\\u036f",Rot="\\ufe20-\\ufe2f",Tot="\\u20d0-\\u20ff",Lot=Fot+Rot+Tot,Not="\\ufe0e\\ufe0f",Oot="\\u200d",Mot=RegExp("["+Oot+Qot+Lot+Not+"]");function Uot(t){return Mot.test(t)}Bce.exports=Uot});var Dce=_((c4t,vce)=>{function _ot(t){return t.split("")}vce.exports=_ot});var Rce=_((u4t,Fce)=>{var Pce="\\ud800-\\udfff",Hot="\\u0300-\\u036f",qot="\\ufe20-\\ufe2f",Got="\\u20d0-\\u20ff",jot=Hot+qot+Got,Yot="\\ufe0e\\ufe0f",Wot="["+Pce+"]",gU="["+jot+"]",dU="\\ud83c[\\udffb-\\udfff]",Kot="(?:"+gU+"|"+dU+")",Sce="[^"+Pce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",xce="[\\ud800-\\udbff][\\udc00-\\udfff]",zot="\\u200d",kce=Kot+"?",Qce="["+Yot+"]?",Vot="(?:"+zot+"(?:"+[Sce,bce,xce].join("|")+")"+Qce+kce+")*",Jot=Qce+kce+Vot,Xot="(?:"+[Sce+gU+"?",gU,bce,xce,Wot].join("|")+")",Zot=RegExp(dU+"(?="+dU+")|"+Xot+Jot,"g");function $ot(t){return t.match(Zot)||[]}Fce.exports=$ot});var Lce=_((A4t,Tce)=>{var eat=Dce(),tat=hU(),rat=Rce();function nat(t){return tat(t)?rat(t):eat(t)}Tce.exports=nat});var Oce=_((f4t,Nce)=>{var iat=Ice(),sat=hU(),oat=Lce(),aat=L1();function lat(t){return function(e){e=aat(e);var r=sat(e)?oat(e):void 0,o=r?r[0]:e.charAt(0),a=r?iat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=lat});var Uce=_((p4t,Mce)=>{var cat=Oce(),uat=cat("toUpperCase");Mce.exports=uat});var mU=_((h4t,_ce)=>{var Aat=L1(),fat=Uce();function pat(t){return fat(Aat(t).toLowerCase())}_ce.exports=pat});var Hce=_((g4t,qb)=>{function hat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,x=13,C=14,R=15,N=16,U=17,V=0,te=1,ae=2,fe=3,ue=4;function me(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function he(g,Ee){Ee===void 0&&(Ee=0);var Pe=g.charCodeAt(Ee);if(55296<=Pe&&Pe<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=Pe;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return Pe}function Be(g,Ee,Pe){var ce=[g].concat(Ee).concat([Pe]),ne=ce[ce.length-2],ee=Pe,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,x,U].indexOf(g)==-1)return ae;var Fe=ce.lastIndexOf(a);if(Fe>0&&ce.slice(1,Fe).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?fe:ue;if(ne==t&&ee==e)return V;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?ae:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return V;if((ne==h||ne==A)&&(ee==A||ee==p))return V;if((ne==E||ne==p)&&ee==p)return V;if(ee==o||ee==R)return V;if(ee==n)return V;if(ne==v)return V;var At=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[x,U].indexOf(ce[At])!=-1&&ce.slice(At+1,-1).every(function(H){return H==o})&&ee==C||ne==R&&[N,U].indexOf(ee)!=-1?V:Ee.indexOf(a)!=-1?ae:ne==a&&ee==a?V:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var Pe=we(he(g,Ee)),ce=[],ne=Ee+1;ne{var gat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gb;function dat(){if(Gb)return Gb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=Hce(),e=new t;return Gb=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(gat)||[t,t,void 0],p=dat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var rn,N1=Et(()=>{rn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.2.2"});function Vce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Ku(t===null?0:t);return!r&&t===null?Ut(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=Vce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Zy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Lt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,jb,mat,jce,Yce,fh,zce,Wce,yat,Eat,Yb,Cat,Lt,O1=Et(()=>{Kce=$e(Gce()),jb=$e(rd());fP();Wl();N1();jl();mat="\xB7",jce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Yce=80,fh=jb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new ll("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new ll(`sleep: invalid time interval '${t}'`);return await(0,cce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Mb(o,{stdin:new Xl(r.stdin),stdout:new Xl(r.stdout),stderr:new Xl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:x}=JSON.parse(I),C=V=>{switch(x){case null:case 0:u.push(V);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},F=V=>{switch(x){case null:case 1:A.push(V);break;case 2:p.push(V);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},N=Number(t[h++]),U=h+N;for(let V=h;Ve.baseFs.createReadStream(z.resolve(r.cwd,ue.toPortablePath(t[V]))));break;case"<<<":C(()=>{let te=new cl.PassThrough;return process.nextTick(()=>{te.write(`${t[V]} +`),te.end()}),te});break;case"<&":C(()=>nce(Number(t[V]),1,r));break;case">":case">>":{let te=z.resolve(r.cwd,ue.toPortablePath(t[V]));F(te==="/dev/null"?new cl.Writable({autoDestroy:!0,emitClose:!0,write(le,ae,ce){setImmediate(ce)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":F(nce(Number(t[V]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new cl.PassThrough;o=I;let v=x=>{if(x===u.length)I.end();else{let C=u[x]();C.pipe(I,{end:!1}),C.on("end",()=>{v(x+1)})}};v(0)}if(A.length>0){let I=new cl.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new cl.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Mb(F1(t.slice(h+1),e,r),{stdin:new Xl(o),stdout:new Xl(a),stderr:new Xl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);mot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var qb=_((s4t,fce)=>{function Iot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var pce=hd(),Bot=qb(),vot=ql(),Pot=AE(),Dot=1/0,hce=pce?pce.prototype:void 0,gce=hce?hce.toString:void 0;function dce(t){if(typeof t=="string")return t;if(vot(t))return Bot(t,dce)+"";if(Pot(t))return gce?gce.call(t):"";var e=t+"";return e=="0"&&1/t==-Dot?"-0":e}mce.exports=dce});var N1=_((a4t,Ece)=>{var Sot=yce();function bot(t){return t==null?"":Sot(t)}Ece.exports=bot});var pU=_((l4t,Cce)=>{function xot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var kot=pU();function Qot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:kot(t,e,r)}wce.exports=Qot});var hU=_((u4t,Bce)=>{var Rot="\\ud800-\\udfff",Fot="\\u0300-\\u036f",Tot="\\ufe20-\\ufe2f",Lot="\\u20d0-\\u20ff",Not=Fot+Tot+Lot,Oot="\\ufe0e\\ufe0f",Mot="\\u200d",Uot=RegExp("["+Mot+Rot+Not+Oot+"]");function _ot(t){return Uot.test(t)}Bce.exports=_ot});var Pce=_((A4t,vce)=>{function Hot(t){return t.split("")}vce.exports=Hot});var Fce=_((f4t,Rce)=>{var Dce="\\ud800-\\udfff",qot="\\u0300-\\u036f",Got="\\ufe20-\\ufe2f",jot="\\u20d0-\\u20ff",Yot=qot+Got+jot,Wot="\\ufe0e\\ufe0f",Kot="["+Dce+"]",gU="["+Yot+"]",dU="\\ud83c[\\udffb-\\udfff]",zot="(?:"+gU+"|"+dU+")",Sce="[^"+Dce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",xce="[\\ud800-\\udbff][\\udc00-\\udfff]",Vot="\\u200d",kce=zot+"?",Qce="["+Wot+"]?",Jot="(?:"+Vot+"(?:"+[Sce,bce,xce].join("|")+")"+Qce+kce+")*",Xot=Qce+kce+Jot,Zot="(?:"+[Sce+gU+"?",gU,bce,xce,Kot].join("|")+")",$ot=RegExp(dU+"(?="+dU+")|"+Zot+Xot,"g");function eat(t){return t.match($ot)||[]}Rce.exports=eat});var Lce=_((p4t,Tce)=>{var tat=Pce(),rat=hU(),nat=Fce();function iat(t){return rat(t)?nat(t):tat(t)}Tce.exports=iat});var Oce=_((h4t,Nce)=>{var sat=Ice(),oat=hU(),aat=Lce(),lat=N1();function cat(t){return function(e){e=lat(e);var r=oat(e)?aat(e):void 0,o=r?r[0]:e.charAt(0),a=r?sat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=cat});var Uce=_((g4t,Mce)=>{var uat=Oce(),Aat=uat("toUpperCase");Mce.exports=Aat});var mU=_((d4t,_ce)=>{var fat=N1(),pat=Uce();function hat(t){return pat(fat(t).toLowerCase())}_ce.exports=hat});var Hce=_((m4t,Gb)=>{function gat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,x=13,C=14,F=15,N=16,U=17,V=0,te=1,le=2,ae=3,ce=4;function Ce(g,me){return 55296<=g.charCodeAt(me)&&g.charCodeAt(me)<=56319&&56320<=g.charCodeAt(me+1)&&g.charCodeAt(me+1)<=57343}function de(g,me){me===void 0&&(me=0);var De=g.charCodeAt(me);if(55296<=De&&De<=56319&&me=1){var he=g.charCodeAt(me-1),ne=De;return 55296<=he&&he<=56319?(he-55296)*1024+(ne-56320)+65536:ne}return De}function Ie(g,me,De){var he=[g].concat(me).concat([De]),ne=he[he.length-2],ee=De,Be=he.lastIndexOf(C);if(Be>1&&he.slice(1,Be).every(function(H){return H==o})&&[o,x,U].indexOf(g)==-1)return le;var Te=he.lastIndexOf(a);if(Te>0&&he.slice(1,Te).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return he.filter(function(H){return H==a}).length%2==1?ae:ce;if(ne==t&&ee==e)return V;if(ne==r||ne==t||ne==e)return ee==C&&me.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return V;if((ne==h||ne==A)&&(ee==A||ee==p))return V;if((ne==E||ne==p)&&ee==p)return V;if(ee==o||ee==F)return V;if(ee==n)return V;if(ne==v)return V;var ht=he.indexOf(o)!=-1?he.lastIndexOf(o)-1:he.length-2;return[x,U].indexOf(he[ht])!=-1&&he.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==F&&[N,U].indexOf(ee)!=-1?V:me.indexOf(a)!=-1?le:ne==a&&ee==a?V:te}this.nextBreak=function(g,me){if(me===void 0&&(me=0),me<0)return 0;if(me>=g.length-1)return g.length;for(var De=Ee(de(g,me)),he=[],ne=me+1;ne{var dat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,jb;function mat(){if(jb)return jb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return jb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=Hce(),e=new t;return jb=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(dat)||[t,t,void 0],p=mat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var nn,O1=Et(()=>{nn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.3.0"});function Vce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Ku(t===null?0:t);return!r&&t===null?Ut(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=Vce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Jy(e,o,n)}async function TE({configuration:t,stdout:e,forceError:r},o){let a=await Ft.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yb,yat,jce,Yce,fh,zce,Wce,Eat,Cat,Wb,wat,Ft,M1=Et(()=>{Kce=Ze(Gce()),Yb=Ze(rd());pD();Wl();O1();jl();yat="\xB7",jce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Yce=80,fh=Yb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} `,end:t=>`::endgroup:: -`}:jb.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`}:Yb.default.TRAVIS?{start:t=>`travis_fold:start:${t} `,end:t=>`travis_fold:end:${t} -`}:jb.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,zce=fh!==null,Wce=new Date,yat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Eat=t=>t,Yb=Eat({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}}),Cat=yat&&Object.keys(Yb).find(t=>{let e=Yb[t];return!(e.date&&(e.date[0]!==Wce.getDate()||e.date[1]!==Wce.getMonth()+1))})||"default";Lt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=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(XI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||Cat;if(!Object.hasOwn(Yb,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Yb[v];let x=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*x/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,Ed(r.configuration,`Yarn ${rn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,fh!==null&&!this.json&&this.includeInfos&&this.stdout.write(fh.start(r))},reportFooter:A=>{if(this.indent-=1,fh!==null&&!this.json&&this.includeInfos){this.stdout.write(fh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ut(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!fh)return;let a=`${fh.start(r)}${o}${fh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ut(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`}:Yb.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,zce=fh!==null,Wce=new Date,Eat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Cat=t=>t,Wb=Cat({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}}),wat=Eat&&Object.keys(Wb).find(t=>{let e=Wb[t];return!(e.date&&(e.date[0]!==Wce.getDate()||e.date[1]!==Wce.getMonth()+1))})||"default";Ft=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=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(XI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||wat;if(!Object.hasOwn(Wb,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wb[v];let x=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*x/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,yd(r.configuration,`Yarn ${nn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,fh!==null&&!this.json&&this.includeInfos&&this.stdout.write(fh.start(r))},reportFooter:A=>{if(this.indent-=1,fh!==null&&!this.json&&this.includeInfos){this.stdout.write(fh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ut(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!fh)return;let a=`${fh.start(r)}${o}${fh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ut(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} `),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} `);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Yce&&(this.progressFrame=(this.progressFrame+1)%jce.length,this.progressTime=r);let o=jce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ut(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Yce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Vce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ut(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${mat} `}}});var un={};zt(un,{PackageManager:()=>Zce,detectPackageManager:()=>$ce,executePackageAccessibleBinary:()=>iue,executePackageScript:()=>Wb,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>Sat,executeWorkspaceLifecycleScript:()=>rue,executeWorkspaceScript:()=>tue,getPackageAccessibleBinaries:()=>Kb,getWorkspaceAccessibleBinaries:()=>nue,hasPackageScript:()=>vat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>Pat,prepareExternalProject:()=>Bat});async function ph(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(z.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(z.join(t,e),`#!/bin/sh +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Yce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Vce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ut(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${yat} `}}});var An={};zt(An,{PackageManager:()=>Zce,detectPackageManager:()=>$ce,executePackageAccessibleBinary:()=>iue,executePackageScript:()=>Kb,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>bat,executeWorkspaceLifecycleScript:()=>rue,executeWorkspaceScript:()=>tue,getPackageAccessibleBinaries:()=>zb,getWorkspaceAccessibleBinaries:()=>nue,hasPackageScript:()=>Pat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>U1,maybeExecuteWorkspaceLifecycleScript:()=>Sat,prepareExternalProject:()=>vat});async function ph(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(z.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(z.join(t,e),`#!/bin/sh exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function $ce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=US(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(z.join(t,dr.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'}:oe.existsSync(z.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(z.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=le.fromPortablePath(r);u.BERRY_BIN_FOLDER=le.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?le.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([ph(r,"node",process.execPath),...rn!==null?[ph(r,"run",process.execPath,[p,"run"]),ph(r,"yarn",process.execPath,[p]),ph(r,"yarnpkg",process.execPath,[p]),ph(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=le.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=le.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${le.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${le.sep}yarn`,u.npm_node_execpath=`${A}${le.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let x=t.storedPackages.get(e.locatorHash);if(!x)throw new Error(`Package for ${qr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),R={project:t,report:new Lt({stdout:new hh.PassThrough,configuration:t.configuration})},N=C.find(U=>U.supportsPackage(x,R));if(!N)throw new Error(`The package ${qr(t.configuration,x)} isn't supported by any of the available linkers`);v=await N.findPackageLocation(x,R)}u.npm_package_json=le.fromPortablePath(z.join(v,dr.manifest))}let h=rn!==null?`yarn/${rn}`:`yarn/${Df("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await ph(r,E,I,v)),u}async function Bat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Iat(async()=>{await oe.mktempPromise(async u=>{let A=z.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:le.fromPortablePath(t),report:o}),I=n&&qc(n)?r1(n):n,v=I?ba(I):"an external project";h.write(`Packing ${v} from sources +`,{mode:493})}async function $ce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(z.join(t,dr.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'}:oe.existsSync(z.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(z.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function U1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([ph(r,"node",process.execPath),...nn!==null?[ph(r,"run",process.execPath,[p,"run"]),ph(r,"yarn",process.execPath,[p]),ph(r,"yarnpkg",process.execPath,[p]),ph(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=rn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let x=t.storedPackages.get(e.locatorHash);if(!x)throw new Error(`Package for ${qr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),F={project:t,report:new Ft({stdout:new hh.PassThrough,configuration:t.configuration})},N=C.find(U=>U.supportsPackage(x,F));if(!N)throw new Error(`The package ${qr(t.configuration,x)} isn't supported by any of the available linkers`);v=await N.findPackageLocation(x,F)}u.npm_package_json=ue.fromPortablePath(z.join(v,dr.manifest))}let h=nn!==null?`yarn/${nn}`:`yarn/${Pf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await ph(r,E,I,v)),u}async function vat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Bat(async()=>{await oe.mktempPromise(async u=>{let A=z.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&qc(n)?r1(n):n,v=I?ba(I):"an external project";h.write(`Packing ${v} from sources `);let x=await $ce(t),C;x!==null?(h.write(`Using ${x.packageManager} for bootstrap. Reason: ${x.reason} `),C=x.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn -`),C="Yarn");let R=C==="Yarn"&&!x?.packageManagerField;await oe.mktempPromise(async N=>{let U=await M1({binFolder:N,ignoreCorepack:R}),te=new Map([["Yarn Classic",async()=>{let fe=a!==null?["workspace",a]:[],ue=z.join(t,dr.manifest),me=await oe.readFilePromise(ue),he=await Yc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(he.code!==0)return he.code;await oe.writeFilePromise(ue,me),await oe.appendFilePromise(z.join(t,".npmignore"),`/.yarn +`),C="Yarn");let F=C==="Yarn"&&!x?.packageManagerField;await oe.mktempPromise(async N=>{let U=await U1({binFolder:N,ignoreCorepack:F}),te=new Map([["Yarn Classic",async()=>{let ae=a!==null?["workspace",a]:[],ce=z.join(t,dr.manifest),Ce=await oe.readFilePromise(ce),de=await Yc(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(de.code!==0)return de.code;await oe.writeFilePromise(ce,Ce),await oe.appendFilePromise(z.join(t,".npmignore"),`/.yarn `),h.write(` -`),delete U.NODE_ENV;let Be=await Yc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` -`);let we=await Yc("yarn",[...fe,"pack","--filename",le.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return we.code!==0?we.code:0}],["Yarn",async()=>{let fe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ue=z.join(t,dr.lockfile);await oe.existsPromise(ue)||await oe.writeFilePromise(ue,"");let me=await Yc("yarn",[...fe,"pack","--install-if-needed","--filename",le.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 Ee=new hh.PassThrough,Pe=zy(Ee);Ee.pipe(h,{end:!1});let ce=await Yc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await Pe).toString().trim();if(!kf(ne,">=7.x")){let ee=tA(null,"npm"),Ie=In(ee,ne),Fe=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${Gn(r,Ie)}; please upgrade to ${Gn(r,Fe)} (npm has been detected as the primary package manager for ${Ut(r,t,yt.PATH)})`)}}let fe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ue=await Yc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ue.code!==0)return ue.code;let me=new hh.PassThrough,he=zy(me);me.pipe(h);let Be=await Yc("npm",["pack","--silent",...fe],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let we=(await he).toString().trim().replace(/^.*\n/s,""),g=z.resolve(t,le.toPortablePath(we));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let ae=await te();if(!(ae===0||typeof ae>"u"))throw oe.detachTemp(u),new Jt(58,`Packing the package failed (exit code ${ae}, logs can be found here: ${Ut(r,A,yt.PATH)})`)})})})}async function vat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Lt({stdout:new hh.PassThrough,configuration:u})},h=A.find(x=>x.supportsPackage(a,p));if(!h)throw new Error(`The package ${qr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Wb(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await eue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let x=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(R=>R.wrapScriptExecution,x,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await eue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function Dat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await nue(t)),typeof r>"u"&&(r=z.dirname(await oe.realpathPromise(z.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function eue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return Dat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${qr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Lt({stdout:new hh.PassThrough,configuration:p})},I=h.find(N=>N.supportsPackage(u,E));if(!I)throw new Error(`The package ${qr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await Kb(t,{project:e}));let x=await I.findPackageLocation(u,E),C=new gn(x,{baseFs:A}),R=await Ot.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=x),{manifest:R,binFolder:r,env:v,cwd:o}})}async function tue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Wb(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function rue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=z.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${le.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:qr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await tue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new Jt(36,`${(0,Jce.default)(e)} script failed (exit code ${Ut(a,I,yt.NUMBER)}, logs can be found here: ${Ut(a,A,yt.PATH)}); run ${Ut(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function Pat(t,e,r){CU(t,e)&&await rue(t,e,r)}function wU(t){let e=z.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r,t)} not found in the project`);let n=new hh.Writable,u=r.getLinkers(),A={project:e,report:new Lt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${Gn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return ol.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return ol.skip;let x=null;try{x=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return ol.skip;throw C}return{dependency:I,packageLocation:x}}));for(let E of h){if(E===ol.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[x,C]of I.bin){let R=z.resolve(v,C);o.set(x,[I,le.fromPortablePath(R),wU(R)])}}return o}async function nue(t){return await Kb(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?ph(t,r,process.execPath,[o]):ph(t,r,o,[])))}async function iue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${qr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,x=await M1({project:a,locator:t,binFolder:I});await IU(x.BERRY_BIN_FOLDER,h);let C=wU(le.toPortablePath(v))?Yc(process.execPath,[...p,v,...r],{cwd:o,env:x,stdin:n,stdout:u,stderr:A}):Yc(v,r,{cwd:o,env:x,stdin:n,stdout:u,stderr:A}),R;try{R=await C}finally{await oe.removePromise(x.BERRY_BIN_FOLDER)}return R.code})}async function Sat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await iue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,Xce,hh,Zce,wat,Iat,BU=Et(()=>{Pt();Pt();iA();k1();Jce=$e(mU()),Xce=$e(sd()),hh=ve("stream");fE();Wl();O1();N1();Db();jl();Gl();Qf();bo();Zce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Zce||{});wat=2,Iat=(0,Xce.default)(wat)});var OE=_((O4t,oue)=>{"use strict";var sue=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"]]);oue.exports=t=>t?Object.keys(t).map(e=>[sue.has(e)?sue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var UE=_((M4t,gue)=>{"use strict";var aue=typeof process=="object"&&process?process:{stdout:null,stderr:null},bat=ve("events"),lue=ve("stream"),cue=ve("string_decoder").StringDecoder,Mf=Symbol("EOF"),Uf=Symbol("maybeEmitEnd"),gh=Symbol("emittedEnd"),zb=Symbol("emittingEnd"),U1=Symbol("emittedError"),Vb=Symbol("closed"),uue=Symbol("read"),Jb=Symbol("flush"),Aue=Symbol("flushChunk"),ka=Symbol("encoding"),_f=Symbol("decoder"),Xb=Symbol("flowing"),_1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),vU=Symbol("bufferPush"),DU=Symbol("bufferShift"),Fo=Symbol("objectMode"),Ro=Symbol("destroyed"),PU=Symbol("emitData"),fue=Symbol("emitEnd"),SU=Symbol("emitEnd2"),Hf=Symbol("async"),H1=t=>Promise.resolve().then(t),pue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",xat=pue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),kat=pue&&Symbol.iterator||Symbol("iterator not implemented"),Qat=t=>t==="end"||t==="finish"||t==="prefinish",Fat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Rat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Zb=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},bU=class extends Zb{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};gue.exports=class hue extends lue{constructor(e){super(),this[Xb]=!1,this[_1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Hf]=e&&!!e.async||!1,this[_f]=this[ka]?new cue(this[ka]):null,this[Mf]=!1,this[gh]=!1,this[zb]=!1,this[Vb]=!1,this[U1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[Ro]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[_f]&&this[_f].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[_f]=e?new cue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[_f].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[Hf]}set async(e){this[Hf]=this[Hf]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Hf]?H1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Rat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Fat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Jb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[_f].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[_f].write(e)),this.flowing&&this[Fs]!==0&&this[Jb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Uf](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[uue](e||null,this.buffer[0]);return this[Uf](),r}[uue](e,r){return e===r.length||e===null?this[DU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[_1])&&this[Uf](),this}[ME](){this[Ro]||(this[_1]=!1,this[Xb]=!0,this.emit("resume"),this.buffer.length?this[Jb]():this[Mf]?this[Uf]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Xb]=!1,this[_1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Xb]}get paused(){return this[_1]}[vU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[DU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Jb](e){do;while(this[Aue](this[DU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[Aue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[gh];return r=r||{},e===aue.stdout||e===aue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new bU(this,e,r):new Zb(this,e,r)),this[Hf]?H1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Qat(e)&&this[gh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[U1]&&(this[Hf]?H1(()=>r.call(this,this[U1])):r.call(this,this[U1])),o}get emittedEnd(){return this[gh]}[Uf](){!this[zb]&&!this[gh]&&!this[Ro]&&this.buffer.length===0&&this[Mf]&&(this[zb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Vb]&&this.emit("close"),this[zb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Hf]?H1(()=>this[PU](r)):this[PU](r):!1;if(e==="end")return this[fue]();if(e==="close"){if(this[Vb]=!0,!this[gh]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[U1]=r;let n=super.emit("error",r);return this[Uf](),n}else if(e==="resume"){let n=super.emit("resume");return this[Uf](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Uf](),a}[PU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Uf](),r}[fue](){this[gh]||(this[gh]=!0,this.readable=!1,this[Hf]?H1(()=>this[SU]()):this[SU]())}[SU](){if(this[_f]){let r=this[_f].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[xat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[kat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[Vb]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof hue||e instanceof lue||e instanceof bat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var mue=_((U4t,due)=>{var Tat=ve("zlib").constants||{ZLIB_VERNUM:4736};due.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},Tat))});var jU=_(ul=>{"use strict";var RU=ve("assert"),dh=ve("buffer").Buffer,Cue=ve("zlib"),Rd=ul.constants=mue(),Lat=UE(),yue=dh.concat,Td=Symbol("_superWrite"),HE=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"}},Nat=Symbol("opts"),q1=Symbol("flushFlag"),Eue=Symbol("finishFlushFlag"),GU=Symbol("fullFlushFlag"),ti=Symbol("handle"),$b=Symbol("onError"),_E=Symbol("sawError"),xU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),ex=class extends Lat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[_E]=!1,this[QU]=!1,this[Nat]=e,this[q1]=e.flush,this[Eue]=e.finishFlush;try{this[ti]=new Cue[r](e)}catch(o){throw new HE(o)}this[$b]=o=>{this[_E]||(this[_E]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[$b](new HE(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[_E])return RU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[GU]),this.write(Object.assign(dh.alloc(0),{[q1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Eue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=dh.from(e,r)),this[_E])return;RU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},dh.concat=h=>h;let A;try{let h=typeof e[q1]=="number"?e[q1]:this[q1];A=this[ti]._processChunk(e,h),dh.concat=yue}catch(h){dh.concat=yue,this[$b](new HE(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[$b](new HE(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Td](dh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[xU]=e,this[kU]=r)}}}},TU=class extends qf{constructor(e){super(e,"Deflate")}},LU=class extends qf{constructor(e){super(e,"Inflate")}},FU=Symbol("_portable"),NU=class extends qf{constructor(e){super(e,"Gzip"),this[FU]=e&&!!e.portable}[Td](e){return this[FU]?(this[FU]=!1,e[9]=255,super[Td](e)):super[Td](e)}},OU=class extends qf{constructor(e){super(e,"Gunzip")}},MU=class extends qf{constructor(e){super(e,"DeflateRaw")}},UU=class extends qf{constructor(e){super(e,"InflateRaw")}},_U=class extends qf{constructor(e){super(e,"Unzip")}},tx=class extends ex{constructor(e,r){e=e||{},e.flush=e.flush||Rd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Rd.BROTLI_OPERATION_FINISH,super(e,r),this[GU]=Rd.BROTLI_OPERATION_FLUSH}},HU=class extends tx{constructor(e){super(e,"BrotliCompress")}},qU=class extends tx{constructor(e){super(e,"BrotliDecompress")}};ul.Deflate=TU;ul.Inflate=LU;ul.Gzip=NU;ul.Gunzip=OU;ul.DeflateRaw=MU;ul.InflateRaw=UU;ul.Unzip=_U;typeof Cue.BrotliCompress=="function"?(ul.BrotliCompress=HU,ul.BrotliDecompress=qU):ul.BrotliCompress=ul.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var qE=_((G4t,wue)=>{var Oat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;wue.exports=Oat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var rx=_((Y4t,Iue)=>{"use strict";var Mat=UE(),YU=qE(),WU=Symbol("slurp");Iue.exports=class extends Mat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(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=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(nx=>{"use strict";nx.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"]]);nx.code=new Map(Array.from(nx.name).map(t=>[t[1],t[0]]))});var Pue=_((K4t,Due)=>{"use strict";var Uat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Hat(t,e):_at(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},_at=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Hat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Bue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=vue(a))}},qat=t=>{let e=t[0],r=e===128?jat(t.slice(1,t.length)):e===255?Gat(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},Gat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Bue(n):n===0?u=n:(o=!0,u=vue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},jat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Bue=t=>(255^t)&255,vue=t=>(255^t)+1&255;Due.exports={encode:Uat,parse:qat}});var jE=_((z4t,bue)=>{"use strict";var zU=KU(),GE=ve("path").posix,Sue=Pue(),VU=Symbol("slurp"),Al=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Al]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Ld(e,r,100),this.mode=mh(e,r+100,8),this.uid=mh(e,r+108,8),this.gid=mh(e,r+116,8),this.size=mh(e,r+124,12),this.mtime=JU(e,r+136,12),this.cksum=mh(e,r+148,12),this[VU](o),this[VU](a,!0),this[Al]=Ld(e,r+156,1),this[Al]===""&&(this[Al]="0"),this[Al]==="0"&&this.path.substr(-1)==="/"&&(this[Al]="5"),this[Al]==="5"&&(this.size=0),this.linkpath=Ld(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Ld(e,r+265,32),this.gname=Ld(e,r+297,32),this.devmaj=mh(e,r+329,8),this.devmin=mh(e,r+337,8),e[r+475]!==0){let u=Ld(e,r+345,155);this.path=u+"/"+this.path}else{let u=Ld(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=JU(e,r+476,12),this.ctime=JU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Yat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Nd(e,r,100,n)||this.needPax,this.needPax=yh(e,r+100,8,this.mode)||this.needPax,this.needPax=yh(e,r+108,8,this.uid)||this.needPax,this.needPax=yh(e,r+116,8,this.gid)||this.needPax,this.needPax=yh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[Al].charCodeAt(0),this.needPax=Nd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Nd(e,r+265,32,this.uname)||this.needPax,this.needPax=Nd(e,r+297,32,this.gname)||this.needPax,this.needPax=yh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=yh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Nd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Nd(e,r+345,155,u)||this.needPax:(this.needPax=Nd(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=GE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=GE.dirname(o),o=GE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=GE.join(GE.basename(a),o),a=GE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Ld=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),JU=(t,e,r)=>Wat(mh(t,e,r)),Wat=t=>t===null?null:new Date(t*1e3),mh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):zat(t,e,r),Kat=t=>isNaN(t)?null:t,zat=(t,e,r)=>Kat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Vat={12:8589934591,8:2097151},yh=(t,e,r,o)=>o===null?!1:o>Vat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Jat(t,e,r,o),!1),Jat=(t,e,r,o)=>t.write(Xat(o,r),e,r,"ascii"),Xat=(t,e)=>Zat(Math.floor(t).toString(8),e),Zat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:yh(t,e,r,o.getTime()/1e3),$at=new Array(156).join("\0"),Nd=(t,e,r,o)=>o===null?!1:(t.write(o+$at,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=ZU});var ix=_((V4t,xue)=>{"use strict";var elt=jE(),tlt=ve("path"),G1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new elt({path:("PaxHeader/"+tlt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};G1.parse=(t,e,r)=>new G1(rlt(nlt(t),e),r);var rlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,nlt=t=>t.replace(/\n$/,"").split(` -`).reduce(ilt,Object.create(null)),ilt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};xue.exports=G1});var YE=_((J4t,kue)=>{kue.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 sx=_((X4t,Que)=>{"use strict";Que.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_(($4t,Fue)=>{"use strict";var ox=["|","<",">","?",":"],$U=ox.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),slt=new Map(ox.map((t,e)=>[t,$U[e]])),olt=new Map($U.map((t,e)=>[t,ox[e]]));Fue.exports={encode:t=>ox.reduce((e,r)=>e.split(r).join(slt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(olt.get(r)),t)}});var t3=_((eUt,Tue)=>{var{isAbsolute:alt,parse:Rue}=ve("path").win32;Tue.exports=t=>{let e="",r=Rue(t);for(;alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Nue=_((tUt,Lue)=>{"use strict";Lue.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 A3=_((iUt,Jue)=>{"use strict";var Gue=UE(),jue=ix(),Yue=jE(),aA=ve("fs"),Oue=ve("path"),oA=qE(),llt=YE(),Wue=(t,e)=>e?(t=oA(t).replace(/^\.(\/|$)/,""),llt(e)+"/"+t):oA(t),clt=16*1024*1024,Mue=Symbol("process"),Uue=Symbol("file"),_ue=Symbol("directory"),n3=Symbol("symlink"),Hue=Symbol("hardlink"),j1=Symbol("header"),ax=Symbol("read"),i3=Symbol("lstat"),lx=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),Eh=Symbol("close"),cx=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),lA=Symbol("prefix"),que=Symbol("hadError"),Kue=sx(),ult=e3(),zue=t3(),Vue=Nue(),ux=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=oA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||clt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=oA(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?oA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=zue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=ult.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=oA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[lx](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[i3](){aA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[lx](r)})}[lx](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=flt(e),this.emit("stat",e),this[Mue]()}[Mue](){switch(this.type){case"File":return this[Uue]();case"Directory":return this[_ue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[cx](e){return Vue(e,this.type==="Directory",this.portable)}[lA](e){return Wue(e,this.prefix)}[j1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Yue({path:this[lA](this.path),linkpath:this.type==="Link"?this[lA](this.linkpath):this.linkpath,mode:this[cx](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 jue({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[lA](this.path),linkpath:this.type==="Link"?this[lA](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)}[_ue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[j1](),this.end()}[n3](){aA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=oA(e),this[j1](),this.end()}[Hue](e){this.type="Link",this.linkpath=oA(Oue.relative(this.cwd,e)),this.stat.size=0,this[j1](),this.end()}[Uue](){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[Hue](r)}this.linkCache.set(e,this.absolute)}if(this[j1](),this.stat.size===0)return this.end();this[a3]()}[a3](){aA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[que])return this[Eh]();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[ax]()}[ax](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;aA.read(e,r,o,a,n,(u,A)=>{if(u)return this[Eh](()=>this.emit("error",u));this[s3](A)})}[Eh](e){aA.close(this.fd,e)}[s3](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[Eh](()=>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[Eh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](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[ax]()}}),u3=class extends ux{[i3](){this[lx](aA.lstatSync(this.absolute))}[n3](){this[o3](aA.readlinkSync(this.absolute))}[a3](){this[l3](aA.openSync(this.absolute,"r"))}[ax](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=aA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[Eh](()=>{})}catch{}}}[c3](e){e()}[Eh](e){aA.closeSync(this.fd),e()}},Alt=Kue(class extends Gue{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=oA(e.path),this.mode=this[cx](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=oA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=zue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Yue({path:this[lA](this.path),linkpath:this.type==="Link"?this[lA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new jue({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[lA](this.path),linkpath:this.type==="Link"?this[lA](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)}[lA](e){return Wue(e,this.prefix)}[cx](e){return Vue(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()}});ux.Sync=u3;ux.Tar=Alt;var flt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=ux});var Ex=_((oUt,nAe)=>{"use strict";var mx=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}},plt=UE(),hlt=jU(),glt=rx(),C3=A3(),dlt=C3.Sync,mlt=C3.Tar,ylt=IP(),Xue=Buffer.alloc(1024),px=Symbol("onStat"),Ax=Symbol("ended"),cA=Symbol("queue"),WE=Symbol("current"),Od=Symbol("process"),fx=Symbol("processing"),Zue=Symbol("processJob"),uA=Symbol("jobs"),f3=Symbol("jobDone"),hx=Symbol("addFSEntry"),$ue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),gx=Symbol("onreaddir"),dx=Symbol("pipe"),eAe=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),rAe=Symbol("write"),h3=Symbol("ondrain"),yx=ve("fs"),tAe=ve("path"),Elt=sx(),g3=qE(),w3=Elt(class extends plt{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=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,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 hlt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),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[cA]=new ylt,this[uA]=0,this.jobs=+e.jobs||4,this[fx]=!1,this[Ax]=!1}[rAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[Ax]=!0,this[Od](),this}write(e){if(this[Ax])throw new Error("write after end");return e instanceof glt?this[$ue](e):this[hx](e),this.flowing}[$ue](e){let r=g3(tAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new mx(e.path,r,!1);o.entry=new mlt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[uA]+=1,this[cA].push(o)}this[Od]()}[hx](e){let r=g3(tAe.resolve(this.cwd,e));this[cA].push(new mx(e,r)),this[Od]()}[d3](e){e.pending=!0,this[uA]+=1;let r=this.follow?"stat":"lstat";yx[r](e.absolute,(o,a)=>{e.pending=!1,this[uA]-=1,o?this.emit("error",o):this[px](e,a)})}[px](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Od]()}[m3](e){e.pending=!0,this[uA]+=1,yx.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[uA]-=1,r)return this.emit("error",r);this[gx](e,o)})}[gx](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Od]()}[Od](){if(!this[fx]){this[fx]=!0;for(let e=this[cA].head;e!==null&&this[uA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[eAe](e){this[uA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[WE]&&this[WE].entry&&this[WE].entry.resume()}[dx](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=dlt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[px](e,yx[r](e.absolute))}[m3](e,r){this[gx](e,yx.readdirSync(e.absolute))}[dx](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[rAe](a)})}};w3.Sync=E3;nAe.exports=w3});var eC=_(W1=>{"use strict";var Clt=UE(),wlt=ve("events").EventEmitter,Qa=ve("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var ZE=Symbol("_autoClose"),Wc=Symbol("_close"),Y1=Symbol("_ended"),jn=Symbol("_fd"),iAe=Symbol("_finished"),wh=Symbol("_flags"),I3=Symbol("_flush"),D3=Symbol("_handleChunk"),P3=Symbol("_makeBuf"),vx=Symbol("_mode"),Cx=Symbol("_needDrain"),JE=Symbol("_onerror"),$E=Symbol("_onopen"),B3=Symbol("_onread"),zE=Symbol("_onwrite"),Ih=Symbol("_open"),Gf=Symbol("_path"),Md=Symbol("_pos"),AA=Symbol("_queue"),VE=Symbol("_read"),sAe=Symbol("_readSize"),Ch=Symbol("_reading"),wx=Symbol("_remain"),oAe=Symbol("_size"),Ix=Symbol("_write"),KE=Symbol("_writing"),Bx=Symbol("_defaultFlag"),XE=Symbol("_errored"),Dx=class extends Clt{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[XE]=!1,this[jn]=typeof r.fd=="number"?r.fd:null,this[Gf]=e,this[sAe]=r.readSize||16*1024*1024,this[Ch]=!1,this[oAe]=typeof r.size=="number"?r.size:1/0,this[wx]=this[oAe],this[ZE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[jn]=="number"?this[VE]():this[Ih]()}get fd(){return this[jn]}get path(){return this[Gf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ih](){Qa.open(this[Gf],"r",(e,r)=>this[$E](e,r))}[$E](e,r){e?this[JE](e):(this[jn]=r,this.emit("open",r),this[VE]())}[P3](){return Buffer.allocUnsafe(Math.min(this[sAe],this[wx]))}[VE](){if(!this[Ch]){this[Ch]=!0;let e=this[P3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[jn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[Ch]=!1,e?this[JE](e):this[D3](r,o)&&this[VE]()}[Wc](){if(this[ZE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[Ch]=!0,this[Wc](),this.emit("error",e)}[D3](e,r){let o=!1;return this[wx]-=e,e>0&&(o=super.write(ethis[$E](e,r))}[$E](e,r){this[Bx]&&this[wh]==="r+"&&e&&e.code==="ENOENT"?(this[wh]="w",this[Ih]()):e?this[JE](e):(this[jn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[Y1]=!0,!this[KE]&&!this[AA].length&&typeof this[jn]=="number"&&this[zE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Y1]?(this.emit("error",new Error("write() after end()")),!1):this[jn]===null||this[KE]||this[AA].length?(this[AA].push(e),this[Cx]=!0,!1):(this[KE]=!0,this[Ix](e),!0)}[Ix](e){Qa.write(this[jn],e,0,e.length,this[Md],(r,o)=>this[zE](r,o))}[zE](e,r){e?this[JE](e):(this[Md]!==null&&(this[Md]+=r),this[AA].length?this[I3]():(this[KE]=!1,this[Y1]&&!this[iAe]?(this[iAe]=!0,this[Wc](),this.emit("finish")):this[Cx]&&(this[Cx]=!1,this.emit("drain"))))}[I3](){if(this[AA].length===0)this[Y1]&&this[zE](null,0);else if(this[AA].length===1)this[Ix](this[AA].pop());else{let e=this[AA];this[AA]=[],v3(this[jn],e,this[Md],(r,o)=>this[zE](r,o))}}[Wc](){if(this[ZE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},b3=class extends Px{[Ih](){let e;if(this[Bx]&&this[wh]==="r+")try{e=Qa.openSync(this[Gf],this[wh],this[vx])}catch(r){if(r.code==="ENOENT")return this[wh]="w",this[Ih]();throw r}else e=Qa.openSync(this[Gf],this[wh],this[vx]);this[$E](null,e)}[Wc](){if(this[ZE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.closeSync(e),this.emit("close")}}[Ix](e){let r=!0;try{this[zE](null,Qa.writeSync(this[jn],e,0,e.length,this[Md])),r=!1}finally{if(r)try{this[Wc]()}catch{}}}};W1.ReadStream=Dx;W1.ReadStreamSync=S3;W1.WriteStream=Px;W1.WriteStreamSync=b3});var Rx=_((cUt,pAe)=>{"use strict";var Ilt=sx(),Blt=jE(),vlt=ve("events"),Dlt=IP(),Plt=1024*1024,Slt=rx(),aAe=ix(),blt=jU(),x3=Buffer.from([31,139]),Zl=Symbol("state"),Ud=Symbol("writeEntry"),jf=Symbol("readEntry"),k3=Symbol("nextEntry"),lAe=Symbol("processEntry"),$l=Symbol("extendedHeader"),K1=Symbol("globalExtendedHeader"),Bh=Symbol("meta"),cAe=Symbol("emitMeta"),fi=Symbol("buffer"),Yf=Symbol("queue"),_d=Symbol("ended"),uAe=Symbol("emittedEnd"),Hd=Symbol("emit"),Fa=Symbol("unzip"),Sx=Symbol("consumeChunk"),bx=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),AAe=Symbol("consumeMeta"),fAe=Symbol("consumeHeader"),xx=Symbol("consuming"),F3=Symbol("bufferConcat"),R3=Symbol("maybeEnd"),z1=Symbol("writing"),vh=Symbol("aborted"),kx=Symbol("onDone"),qd=Symbol("sawValidEntry"),Qx=Symbol("sawNullBlock"),Fx=Symbol("sawEOF"),xlt=t=>!0;pAe.exports=Ilt(class extends vlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[qd]=null,this.on(kx,r=>{(this[Zl]==="begin"||this[qd]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(kx,e.ondone):this.on(kx,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Plt,this.filter=typeof e.filter=="function"?e.filter:xlt,this.writable=!0,this.readable=!1,this[Yf]=new Dlt,this[fi]=null,this[jf]=null,this[Ud]=null,this[Zl]="begin",this[Bh]="",this[$l]=null,this[K1]=null,this[_d]=!1,this[Fa]=null,this[vh]=!1,this[Qx]=!1,this[Fx]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[fAe](e,r){this[qd]===null&&(this[qd]=!1);let o;try{o=new Blt(e,r,this[$l],this[K1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Qx]?(this[Fx]=!0,this[Zl]==="begin"&&(this[Zl]="header"),this[Hd]("eof")):(this[Qx]=!0,this[Hd]("nullBlock"));else if(this[Qx]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Ud]=new Slt(o,this[$l],this[K1]);if(!this[qd])if(n.remain){let u=()=>{n.invalid||(this[qd]=!0)};n.on("end",u)}else this[qd]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Hd]("ignoredEntry",n),this[Zl]="ignore",n.resume()):n.size>0&&(this[Bh]="",n.on("data",u=>this[Bh]+=u),this[Zl]="meta"):(this[$l]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Hd]("ignoredEntry",n),this[Zl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Zl]="body":(this[Zl]="header",n.end()),this[jf]?this[Yf].push(n):(this[Yf].push(n),this[k3]())))}}}[lAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[jf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[jf]=null,r=!1),r}[k3](){do;while(this[lAe](this[Yf].shift()));if(!this[Yf].length){let e=this[jf];!e||e.flowing||e.size===e.remain?this[z1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Ud],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Zl]="header",this[Ud]=null,o.end()),n.length}[AAe](e,r){let o=this[Ud],a=this[Q3](e,r);return this[Ud]||this[cAe](o),a}[Hd](e,r,o){!this[Yf].length&&!this[jf]?this.emit(e,r,o):this[Yf].push([e,r,o])}[cAe](e){switch(this[Hd]("meta",this[Bh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[$l]=aAe.parse(this[Bh],this[$l],!1);break;case"GlobalExtendedHeader":this[K1]=aAe.parse(this[Bh],this[K1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[$l]=this[$l]||Object.create(null),this[$l].path=this[Bh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[$l]=this[$l]||Object.create(null),this[$l].linkpath=this[Bh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[vh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[vh])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[Sx](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[_d]=!0,this[Sx]()}),this[z1]=!0;let a=this[Fa][o?"end":"write"](e);return this[z1]=!1,a}}this[z1]=!0,this[Fa]?this[Fa].write(e):this[Sx](e),this[z1]=!1;let r=this[Yf].length?!1:this[jf]?this[jf].flowing:!0;return!r&&!this[Yf].length&&this[jf].once("drain",o=>this.emit("drain")),r}[F3](e){e&&!this[vh]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[R3](){if(this[_d]&&!this[uAe]&&!this[vh]&&!this[xx]){this[uAe]=!0;let e=this[Ud];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Hd](kx)}}[Sx](e){if(this[xx])this[F3](e);else if(!e&&!this[fi])this[R3]();else{if(this[xx]=!0,this[fi]){this[F3](e);let r=this[fi];this[fi]=null,this[bx](r)}else this[bx](e);for(;this[fi]&&this[fi].length>=512&&!this[vh]&&!this[Fx];){let r=this[fi];this[fi]=null,this[bx](r)}this[xx]=!1}(!this[fi]||this[_d])&&this[R3]()}[bx](e){let r=0,o=e.length;for(;r+512<=o&&!this[vh]&&!this[Fx];)switch(this[Zl]){case"begin":case"header":this[fAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[AAe](e,r);break;default:throw new Error("invalid state: "+this[Zl])}r{"use strict";var klt=OE(),gAe=Rx(),tC=ve("fs"),Qlt=eC(),hAe=ve("path"),T3=YE();mAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=klt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Rlt(o,e),o.noResume||Flt(o),o.file&&o.sync?Tlt(o):o.file?Llt(o,r):dAe(o)};var Flt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Rlt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||hAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(hAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Tlt=t=>{let e=dAe(t),r=t.file,o=!0,a;try{let n=tC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new gAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),tC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Qlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},dAe=t=>new gAe(t)});var BAe=_((AUt,IAe)=>{"use strict";var Nlt=OE(),Lx=Ex(),yAe=eC(),EAe=Tx(),CAe=ve("path");IAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Nlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Olt(o,e):o.file?Mlt(o,e,r):o.sync?Ult(o,e):_lt(o,e)};var Olt=(t,e)=>{let r=new Lx.Sync(t),o=new yAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),wAe(r,e)},Mlt=(t,e,r)=>{let o=new Lx(t),a=new yAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return L3(o,e),r?n.then(r,r):n},wAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?EAe({file:CAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},L3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return EAe({file:CAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>L3(t,e));t.add(r)}t.end()},Ult=(t,e)=>{let r=new Lx.Sync(t);return wAe(r,e),r},_lt=(t,e)=>{let r=new Lx(t);return L3(r,e),r}});var N3=_((fUt,kAe)=>{"use strict";var Hlt=OE(),vAe=Ex(),fl=ve("fs"),DAe=eC(),PAe=Tx(),SAe=ve("path"),bAe=jE();kAe.exports=(t,e,r)=>{let o=Hlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?qlt(o,e):jlt(o,e,r)};var qlt=(t,e)=>{let r=new vAe.Sync(t),o=!0,a,n;try{try{a=fl.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=fl.openSync(t.file,"w+");else throw p}let u=fl.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Glt(t,r,n,a,e)}finally{if(o)try{fl.closeSync(a)}catch{}}},Glt=(t,e,r,o,a)=>{let n=new DAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Ylt(e,a)},jlt=(t,e,r)=>{e=Array.from(e);let o=new vAe(t),a=(u,A,p)=>{let h=(C,R)=>{C?fl.close(u,N=>p(C)):p(null,R)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),x=(C,R)=>{if(C)return h(C);if(I+=R,I<512&&R)return fl.read(u,v,I,v.length-I,E+I,x);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let N=new bAe(v);if(!N.cksumValid)return h(null,E);let U=512*Math.ceil(N.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),I=0,fl.read(u,v,0,512,E,x)};fl.read(u,v,0,512,E,x)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",fl.open(t.file,p,h);if(E)return A(E);fl.fstat(I,(v,x)=>{if(v)return fl.close(I,()=>A(v));a(I,x.size,(C,R)=>{if(C)return A(C);let N=new DAe.WriteStream(t.file,{fd:I,start:R});o.pipe(N),N.on("error",A),N.on("close",u),xAe(o,e)})})};fl.open(t.file,p,h)});return r?n.then(r,r):n},Ylt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?PAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},xAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return PAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>xAe(t,e));t.add(r)}t.end()}});var FAe=_((pUt,QAe)=>{"use strict";var Wlt=OE(),Klt=N3();QAe.exports=(t,e,r)=>{let o=Wlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),zlt(o),Klt(o,e,r)};var zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,TAe)=>{var{promisify:RAe}=ve("util"),Dh=ve("fs"),Vlt=t=>{if(!t)t={mode:511,fs:Dh};else if(typeof t=="object")t={mode:511,fs:Dh,...t};else if(typeof t=="number")t={mode:t,fs:Dh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Dh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Dh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Dh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Dh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Dh.mkdirSync,t};TAe.exports=Vlt});var OAe=_((gUt,NAe)=>{var Jlt=process.platform,{resolve:Xlt,parse:Zlt}=ve("path"),$lt=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=Xlt(t),Jlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Zlt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=$lt});var qAe=_((dUt,HAe)=>{var{dirname:MAe}=ve("path"),UAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?UAe(t,MAe(e),e):void 0),_Ae=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?_Ae(t,MAe(e),e):void 0}};HAe.exports={findMade:UAe,findMadeSync:_Ae}});var U3=_((mUt,jAe)=>{var{dirname:GAe}=ve("path"),O3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(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})})},M3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};jAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var KAe=_((yUt,WAe)=>{var{dirname:YAe}=ve("path"),{findMade:ect,findMadeSync:tct}=qAe(),{mkdirpManual:rct,mkdirpManualSync:nct}=U3(),ict=(t,e)=>(e.recursive=!0,YAe(t)===t?e.mkdirAsync(t,e):ect(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return rct(t,e);throw a}))),sct=(t,e)=>{if(e.recursive=!0,YAe(t)===t)return e.mkdirSync(t,e);let o=tct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return nct(t,e);throw a}};WAe.exports={mkdirpNative:ict,mkdirpNativeSync:sct}});var XAe=_((EUt,JAe)=>{var zAe=ve("fs"),oct=process.version,_3=oct.replace(/^v/,"").split("."),VAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,act=VAe?t=>t.mkdir===zAe.mkdir:()=>!1,lct=VAe?t=>t.mkdirSync===zAe.mkdirSync:()=>!1;JAe.exports={useNative:act,useNativeSync:lct}});var nfe=_((CUt,rfe)=>{var rC=LAe(),nC=OAe(),{mkdirpNative:ZAe,mkdirpNativeSync:$Ae}=KAe(),{mkdirpManual:efe,mkdirpManualSync:tfe}=U3(),{useNative:cct,useNativeSync:uct}=XAe(),iC=(t,e)=>(t=nC(t),e=rC(e),cct(e)?ZAe(t,e):efe(t,e)),Act=(t,e)=>(t=nC(t),e=rC(e),uct(e)?$Ae(t,e):tfe(t,e));iC.sync=Act;iC.native=(t,e)=>ZAe(nC(t),rC(e));iC.manual=(t,e)=>efe(nC(t),rC(e));iC.nativeSync=(t,e)=>$Ae(nC(t),rC(e));iC.manualSync=(t,e)=>tfe(nC(t),rC(e));rfe.exports=iC});var ufe=_((wUt,cfe)=>{"use strict";var ec=ve("fs"),Gd=ve("path"),fct=ec.lchown?"lchown":"chown",pct=ec.lchownSync?"lchownSync":"chownSync",sfe=ec.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),ife=(t,e,r)=>{try{return ec[pct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},hct=(t,e,r)=>{try{return ec.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},gct=sfe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):ec.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=sfe?(t,e,r)=>{try{return ife(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;hct(t,e,r)}}:(t,e,r)=>ife(t,e,r),dct=process.version,ofe=(t,e,r)=>ec.readdir(t,e,r),mct=(t,e)=>ec.readdirSync(t,e);/^v4\./.test(dct)&&(ofe=(t,e,r)=>ec.readdir(t,r));var Nx=(t,e,r,o)=>{ec[fct](t,e,r,gct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},afe=(t,e,r,o,a)=>{if(typeof e=="string")return ec.lstat(Gd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,afe(t,u,r,o,a)});if(e.isDirectory())q3(Gd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Gd.resolve(t,e.name);Nx(u,r,o,a)});else{let n=Gd.resolve(t,e.name);Nx(n,r,o,a)}},q3=(t,e,r,o)=>{ofe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Nx(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Nx(t,e,r,o)}};n.forEach(h=>afe(t,h,e,r,p))})},yct=(t,e,r,o)=>{if(typeof e=="string")try{let a=ec.lstatSync(Gd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&lfe(Gd.resolve(t,e.name),r,o),H3(Gd.resolve(t,e.name),r,o)},lfe=(t,e,r)=>{let o;try{o=mct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>yct(t,a,e,r)),H3(t,e,r)};cfe.exports=q3;q3.sync=lfe});var hfe=_((IUt,G3)=>{"use strict";var Afe=nfe(),tc=ve("fs"),Ox=ve("path"),ffe=ufe(),Kc=qE(),Mx=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Ux=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},_x=(t,e)=>t.get(Kc(e)),V1=(t,e,r)=>t.set(Kc(e),r),Ect=(t,e)=>{tc.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Ux(t,r&&r.code||"ENOTDIR")),e(r)})};G3.exports=(t,e,r)=>{t=Kc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Kc(e.cwd),x=(N,U)=>{N?r(N):(V1(I,t,!0),U&&p?ffe(U,u,A,V=>x(V)):n?tc.chmod(t,a,r):r())};if(I&&_x(I,t)===!0)return x();if(t===v)return Ect(t,x);if(h)return Afe(t,{mode:a}).then(N=>x(null,N),x);let R=Kc(Ox.relative(v,t)).split("/");Hx(v,R,a,I,E,v,null,x)};var Hx=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Kc(Ox.resolve(t+"/"+p));if(_x(o,h))return Hx(h,e,r,o,a,n,u,A);tc.mkdir(h,r,pfe(h,e,r,o,a,n,u,A))},pfe=(t,e,r,o,a,n,u,A)=>p=>{p?tc.lstat(t,(h,E)=>{if(h)h.path=h.path&&Kc(h.path),A(h);else if(E.isDirectory())Hx(t,e,r,o,a,n,u,A);else if(a)tc.unlink(t,I=>{if(I)return A(I);tc.mkdir(t,r,pfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new Mx(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,Hx(t,e,r,o,a,n,u,A))},Cct=t=>{let e=!1,r="ENOTDIR";try{e=tc.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Ux(t,r)}};G3.exports.sync=(t,e)=>{t=Kc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Kc(e.cwd),v=N=>{V1(E,t,!0),N&&A&&ffe.sync(N,n,u),a&&tc.chmodSync(t,o)};if(E&&_x(E,t)===!0)return v();if(t===I)return Cct(I),v();if(p)return v(Afe.sync(t,o));let C=Kc(Ox.relative(I,t)).split("/"),R=null;for(let N=C.shift(),U=I;N&&(U+="/"+N);N=C.shift())if(U=Kc(Ox.resolve(U)),!_x(E,U))try{tc.mkdirSync(U,o),R=R||U,V1(E,U,!0)}catch{let te=tc.lstatSync(U);if(te.isDirectory()){V1(E,U,!0);continue}else if(h){tc.unlinkSync(U),tc.mkdirSync(U,o),R=R||U,V1(E,U,!0);continue}else if(te.isSymbolicLink())return new Mx(U,U+"/"+C.join("/"))}return v(R)}});var Y3=_((BUt,gfe)=>{var j3=Object.create(null),{hasOwnProperty:wct}=Object.prototype;gfe.exports=t=>(wct.call(j3,t)||(j3[t]=t.normalize("NFKD")),j3[t])});var Efe=_((vUt,yfe)=>{var dfe=ve("assert"),Ict=Y3(),Bct=YE(),{join:mfe}=ve("path"),vct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Dct=vct==="win32";yfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=mfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(x=>{let C=t.get(x);dfe.equal(C[0],h),C.length===1?t.delete(x):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(R=>v.add(R)))}),I.forEach(x=>{let C=t.get(x);dfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(x):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(x=>u(x)),!0};return{check:n,reserve:(h,E)=>{h=Dct?["win32 parallelization disabled"]:h.map(v=>Ict(Bct(mfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,x)=>v.concat(x)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let x=t.get(v);x?x.push(E):t.set(v,[E])}),I.forEach(v=>{let x=t.get(v);x?x[x.length-1]instanceof Set?x[x.length-1].add(E):x.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Ife=_((DUt,wfe)=>{var Pct=process.platform,Sct=Pct==="win32",bct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:xct,O_TRUNC:kct,O_WRONLY:Qct,UV_FS_O_FILEMAP:Cfe=0}=bct.constants,Fct=Sct&&!!Cfe,Rct=512*1024,Tct=Cfe|kct|xct|Qct;wfe.exports=Fct?t=>t"w"});var e_=_((PUt,Nfe)=>{"use strict";var Lct=ve("assert"),Nct=Rx(),vn=ve("fs"),Oct=eC(),Wf=ve("path"),Rfe=hfe(),Bfe=e3(),Mct=Efe(),Uct=t3(),pl=qE(),_ct=YE(),Hct=Y3(),vfe=Symbol("onEntry"),z3=Symbol("checkFs"),Dfe=Symbol("checkFs2"),jx=Symbol("pruneCache"),V3=Symbol("isReusable"),rc=Symbol("makeFs"),J3=Symbol("file"),X3=Symbol("directory"),Yx=Symbol("link"),Pfe=Symbol("symlink"),Sfe=Symbol("hardlink"),bfe=Symbol("unsupported"),xfe=Symbol("checkPath"),Ph=Symbol("mkdir"),To=Symbol("onError"),qx=Symbol("pending"),kfe=Symbol("pend"),sC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),J1=Symbol("doChown"),X1=Symbol("uid"),Z1=Symbol("gid"),$1=Symbol("checkedCwd"),Tfe=ve("crypto"),Lfe=Ife(),qct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,e2=qct==="win32",Gct=(t,e)=>{if(!e2)return vn.unlink(t,e);let r=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},jct=t=>{if(!e2)return vn.unlinkSync(t);let e=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Qfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Ffe=t=>Hct(_ct(pl(t))).toLowerCase(),Yct=(t,e)=>{e=Ffe(e);for(let r of t.keys()){let o=Ffe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Wct=t=>{for(let e of t.keys())t.delete(e)},t2=class extends Nct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[$1]=!1,this.reservations=Mct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[qx]=0,this[W3]=!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||e2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=pl(Wf.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[vfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[qx]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[xfe](e){if(this.strip){let r=pl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=pl(e.path),o=r.split("/");if(o.includes("..")||e2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Uct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Wf.isAbsolute(e.path)?e.absolute=pl(Wf.resolve(e.path)):e.absolute=pl(Wf.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:pl(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}=Wf.win32.parse(e.absolute);e.absolute=r+Bfe.encode(e.absolute.substr(r.length));let{root:o}=Wf.win32.parse(e.path);e.path=o+Bfe.encode(e.path.substr(o.length))}return!0}[vfe](e){if(!this[xfe](e))return e.resume();switch(Lct.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[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[To](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[sC](),r.resume())}[Ph](e,r,o){Rfe(pl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](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}[X1](e){return Qfe(this.uid,e.uid,this.processUid)}[Z1](e){return Qfe(this.gid,e.gid,this.processGid)}[J3](e,r){let o=e.mode&4095||this.fmode,a=new Oct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[To](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[To](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[To](h,e):this[sC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,x=>x?vn.utimes(h,I,v,C=>u(C&&x)):u())}if(this[J1](e)){n++;let I=this[X1](e),v=this[Z1](e);vn.fchown(E,I,v,x=>x?vn.chown(h,I,v,C=>u(C&&x)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[To](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[Ph](e.absolute,o,a=>{if(a){this[To](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[sC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[X1](e),this[Z1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Pfe](e,r){this[Yx](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=pl(Wf.resolve(this.cwd,e.linkpath));this[Yx](e,o,"link",r)}[kfe](){this[qx]++}[sC](){this[qx]--,this[K3]()}[Z3](e){this[sC](),e.resume()}[V3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!e2}[z3](e){this[kfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Dfe](e,o))}[jx](e){e.type==="SymbolicLink"?Wct(this.dirCache):e.type!=="Directory"&&Yct(this.dirCache,e.absolute)}[Dfe](e,r){this[jx](e);let o=A=>{this[jx](e),r(A)},a=()=>{this[Ph](this.cwd,this.dmode,A=>{if(A){this[To](A,e),o();return}this[$1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=pl(Wf.dirname(e.absolute));if(A!==this.cwd)return this[Ph](A,this.dmode,p=>{if(p){this[To](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[V3](e,p))return this[rc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[rc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[rc](h,e,o))}if(e.absolute===this.cwd)return this[rc](null,e,o);Gct(e.absolute,h=>this[rc](h,e,o))})};this[$1]?n():a()}[rc](e,r,o){if(e){this[To](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[J3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Pfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Yx](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[To](n,e):(this[sC](),e.resume()),a()})}},Gx=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends t2{[rc](e,r){return super[rc](e,r,()=>{})}[z3](e){if(this[jx](e),!this[$1]){let n=this[Ph](this.cwd,this.dmode);if(n)return this[To](n,e);this[$1]=!0}if(e.absolute!==this.cwd){let n=pl(Wf.dirname(e.absolute));if(n!==this.cwd){let u=this[Ph](n,this.dmode);if(u)return this[To](u,e)}}let[r,o]=Gx(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[V3](e,o))return this[rc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Gx(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[rc](A,e)}let[n]=Gx(()=>vn.rmdirSync(e.absolute));this[rc](n,e)}let[a]=e.absolute===this.cwd?[]:Gx(()=>jct(e.absolute));this[rc](a,e)}[J3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[To](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[To](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[X1](e),E=this[Z1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[Ph](e.absolute,o);if(a){this[To](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[X1](e),this[Z1](e))}catch{}r(),e.resume()}[Ph](e,r){try{return Rfe.sync(pl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Yx](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[To](n,e)}}};t2.Sync=$3;Nfe.exports=t2});var Hfe=_((SUt,_fe)=>{"use strict";var Kct=OE(),Wx=e_(),Mfe=ve("fs"),Ufe=eC(),Ofe=ve("path"),t_=YE();_fe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Kct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&zct(o,e),o.file&&o.sync?Vct(o):o.file?Jct(o,r):o.sync?Xct(o):Zct(o)};var zct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},Vct=t=>{let e=new Wx.Sync(t),r=t.file,o=Mfe.statSync(r),a=t.maxReadSize||16*1024*1024;new Ufe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Jct=(t,e)=>{let r=new Wx(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Mfe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Ufe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},Xct=t=>new Wx.Sync(t),Zct=t=>new Wx(t)});var qfe=_(us=>{"use strict";us.c=us.create=BAe();us.r=us.replace=N3();us.t=us.list=Tx();us.u=us.update=FAe();us.x=us.extract=Hfe();us.Pack=Ex();us.Unpack=e_();us.Parse=Rx();us.ReadEntry=rx();us.WriteEntry=A3();us.Header=jE();us.Pax=ix();us.types=KU()});var r_,Gfe,Sh,r2,n2,jfe=Et(()=>{r_=$e(sd()),Gfe=ve("worker_threads"),Sh=Symbol("kTaskInfo"),r2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},n2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Sh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Sh].resolve(r),e[Sh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Sh]?.reject(r),e[Sh]=null}),e.on("exit",r=>{r!==0&&e[Sh]?.reject(new Error(`Worker exited with code ${r}`)),e[Sh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Sh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Wfe=_((QUt,Yfe)=>{var n_;Yfe.exports.getContent=()=>(typeof n_>"u"&&(n_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Xi={};zt(Xi,{convertToZip:()=>rut,convertToZipWorker:()=>o_,extractArchiveTo:()=>Xfe,getDefaultTaskPool:()=>Vfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>tut});function $ct(t,e){switch(t){case"async":return new r2(o_,{poolSize:e});case"workers":return new n2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Vfe(){return typeof i_>"u"&&(i_=$ct("workers",Vi.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?Vfe():al(eut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new r2(o_,{poolSize:r});case"workers":return new n2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new Ji(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Xfe(u,n,a),n.saveAndClose(),e}async function tut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new Ji(null,{level:o});else{let A=await oe.mktempPromise(),p=z.join(A,"archive.zip");n=new Ji(p,{create:!0,level:o})}let u=z.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function rut(t,e={}){let r=await oe.mktempPromise(),o=z.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new Ji(o,{level:e.compressionLevel})}async function*nut(t){let e=new zfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Xfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of nut(t)){if(a(n))continue;let u=z.normalize(le.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=z.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await zy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,zfe,s_,i_,eut,Zfe=Et(()=>{Ye();Pt();iA();Kfe=ve("stream"),zfe=$e(qfe());jfe();Gl();s_=$e(Wfe());eut=new WeakMap});var epe=_((a_,$fe)=>{(function(t,e){typeof a_=="object"?$fe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,x,C,R=A.slice(0);if(R.push([n,u])&&A.length>0&&(A.forEach(function(U,V){V>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){x=++v===N.length,r(U,n[U],x,R,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` -`}),A},o})});var $s={};zt($s,{emitList:()=>iut,emitTree:()=>ipe,treeNodeToJson:()=>npe,treeNodeToTreeify:()=>rpe});function rpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,x=[];typeof E<"u"&&x.push(Ed(e,E,2)),typeof I<"u"&&x.push(Ut(e,I[0],I[1])),x.length===0&&x.push(Ed(e,`${p}`,2));let C=x.join(": ").trim(),R=`\0${o++}\0`,N=u[`${R}${C}`]={};typeof v<"u"&&a(v,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function npe(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 Cd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[sut(n)]=e(u));return typeof r.value>"u"?a:{value:Cd(r.value[0],r.value[1]),children:a}};return e(t)}function iut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));ipe({children:a},{configuration:e,stdout:r,json:o})}function ipe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(npe(A))} +`),delete U.NODE_ENV;let Ie=await Yc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ie.code!==0)return Ie.code;h.write(` +`);let Ee=await Yc("yarn",[...ae,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ee.code!==0?Ee.code:0}],["Yarn",async()=>{let ae=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ce=z.join(t,dr.lockfile);await oe.existsPromise(ce)||await oe.writeFilePromise(ce,"");let Ce=await Yc("yarn",[...ae,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ce.code!==0?Ce.code:0}],["npm",async()=>{if(a!==null){let me=new hh.PassThrough,De=Wy(me);me.pipe(h,{end:!1});let he=await Yc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:me,stderr:E,end:0});if(me.end(),he.code!==0)return h.end(),E.end(),he.code;let ne=(await De).toString().trim();if(!kf(ne,">=7.x")){let ee=tA(null,"npm"),Be=In(ee,ne),Te=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${Gn(r,Be)}; please upgrade to ${Gn(r,Te)} (npm has been detected as the primary package manager for ${Ut(r,t,yt.PATH)})`)}}let ae=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 ce=await Yc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ce.code!==0)return ce.code;let Ce=new hh.PassThrough,de=Wy(Ce);Ce.pipe(h);let Ie=await Yc("npm",["pack","--silent",...ae],{cwd:t,env:U,stdin:p,stdout:Ce,stderr:E});if(Ie.code!==0)return Ie.code;let Ee=(await de).toString().trim().replace(/^.*\n/s,""),g=z.resolve(t,ue.toPortablePath(Ee));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new Jt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ut(r,A,yt.PATH)})`)})})})}async function Pat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Ft({stdout:new hh.PassThrough,configuration:u})},h=A.find(x=>x.supportsPackage(a,p));if(!h)throw new Error(`The package ${qr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Kb(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await eue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let x=async()=>await RE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(F=>F.wrapScriptExecution,x,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await eue(t,{project:a,binFolder:p,cwd:o});return await RE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function Dat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await U1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await nue(t)),typeof r>"u"&&(r=z.dirname(await oe.realpathPromise(z.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function eue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return Dat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${qr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Ft({stdout:new hh.PassThrough,configuration:p})},I=h.find(N=>N.supportsPackage(u,E));if(!I)throw new Error(`The package ${qr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await U1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await zb(t,{project:e}));let x=await I.findPackageLocation(u,E),C=new gn(x,{baseFs:A}),F=await Ot.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=x),{manifest:F,binFolder:r,env:v,cwd:o}})}async function tue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Kb(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function rue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=z.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:qr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await tue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new Jt(36,`${(0,Jce.default)(e)} script failed (exit code ${Ut(a,I,yt.NUMBER)}, logs can be found here: ${Ut(a,A,yt.PATH)}); run ${Ut(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function Sat(t,e,r){CU(t,e)&&await rue(t,e,r)}function wU(t){let e=z.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function zb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r,t)} not found in the project`);let n=new hh.Writable,u=r.getLinkers(),A={project:e,report:new Ft({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${Gn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return ol.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return ol.skip;let x=null;try{x=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return ol.skip;throw C}return{dependency:I,packageLocation:x}}));for(let E of h){if(E===ol.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[x,C]of I.bin){let F=z.resolve(v,C);o.set(x,[I,ue.fromPortablePath(F),wU(F)])}}return o}async function nue(t){return await zb(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?ph(t,r,process.execPath,[o]):ph(t,r,o,[])))}async function iue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await zb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${qr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,x=await U1({project:a,locator:t,binFolder:I});await IU(x.BERRY_BIN_FOLDER,h);let C=wU(ue.toPortablePath(v))?Yc(process.execPath,[...p,v,...r],{cwd:o,env:x,stdin:n,stdout:u,stderr:A}):Yc(v,r,{cwd:o,env:x,stdin:n,stdout:u,stderr:A}),F;try{F=await C}finally{await oe.removePromise(x.BERRY_BIN_FOLDER)}return F.code})}async function bat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await iue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,Xce,hh,Zce,Iat,Bat,BU=Et(()=>{Dt();Dt();iA();Q1();Jce=Ze(mU()),Xce=Ze(sd()),hh=ve("stream");uE();Wl();M1();O1();Db();jl();Gl();Qf();So();Zce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Zce||{});Iat=2,Bat=(0,Xce.default)(Iat)});var LE=_((U4t,oue)=>{"use strict";var sue=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"]]);oue.exports=t=>t?Object.keys(t).map(e=>[sue.has(e)?sue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((_4t,gue)=>{"use strict";var aue=typeof process=="object"&&process?process:{stdout:null,stderr:null},xat=ve("events"),lue=ve("stream"),cue=ve("string_decoder").StringDecoder,Mf=Symbol("EOF"),Uf=Symbol("maybeEmitEnd"),gh=Symbol("emittedEnd"),Vb=Symbol("emittingEnd"),_1=Symbol("emittedError"),Jb=Symbol("closed"),uue=Symbol("read"),Xb=Symbol("flush"),Aue=Symbol("flushChunk"),ka=Symbol("encoding"),_f=Symbol("decoder"),Zb=Symbol("flowing"),H1=Symbol("paused"),NE=Symbol("resume"),Ts=Symbol("bufferLength"),vU=Symbol("bufferPush"),PU=Symbol("bufferShift"),Qo=Symbol("objectMode"),Ro=Symbol("destroyed"),DU=Symbol("emitData"),fue=Symbol("emitEnd"),SU=Symbol("emitEnd2"),Hf=Symbol("async"),q1=t=>Promise.resolve().then(t),pue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",kat=pue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Qat=pue&&Symbol.iterator||Symbol("iterator not implemented"),Rat=t=>t==="end"||t==="finish"||t==="prefinish",Fat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Tat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$b=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[NE](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},bU=class extends $b{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};gue.exports=class hue extends lue{constructor(e){super(),this[Zb]=!1,this[H1]=!1,this.pipes=[],this.buffer=[],this[Qo]=e&&e.objectMode||!1,this[Qo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Hf]=e&&!!e.async||!1,this[_f]=this[ka]?new cue(this[ka]):null,this[Mf]=!1,this[gh]=!1,this[Vb]=!1,this[Jb]=!1,this[_1]=null,this.writable=!0,this.readable=!0,this[Ts]=0,this[Ro]=!1}get bufferLength(){return this[Ts]}get encoding(){return this[ka]}set encoding(e){if(this[Qo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[_f]&&this[_f].lastNeed||this[Ts]))throw new Error("cannot change encoding");this[ka]!==e&&(this[_f]=e?new cue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[_f].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Qo]}set objectMode(e){this[Qo]=this[Qo]||!!e}get async(){return this[Hf]}set async(e){this[Hf]=this[Hf]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Hf]?q1:n=>n();return!this[Qo]&&!Buffer.isBuffer(e)&&(Tat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Fat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Qo]?(this.flowing&&this[Ts]!==0&&this[Xb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Ts]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[_f].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[_f].write(e)),this.flowing&&this[Ts]!==0&&this[Xb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Ts]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Ts]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Ts]===0||e===0||e>this[Ts])return this[Uf](),null;this[Qo]&&(e=null),this.buffer.length>1&&!this[Qo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Ts])]);let r=this[uue](e||null,this.buffer[0]);return this[Uf](),r}[uue](e,r){return e===r.length||e===null?this[PU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Ts]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[H1])&&this[Uf](),this}[NE](){this[Ro]||(this[H1]=!1,this[Zb]=!0,this.emit("resume"),this.buffer.length?this[Xb]():this[Mf]?this[Uf]():this.emit("drain"))}resume(){return this[NE]()}pause(){this[Zb]=!1,this[H1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Zb]}get paused(){return this[H1]}[vU](e){this[Qo]?this[Ts]+=1:this[Ts]+=e.length,this.buffer.push(e)}[PU](){return this.buffer.length&&(this[Qo]?this[Ts]-=1:this[Ts]-=this.buffer[0].length),this.buffer.shift()}[Xb](e){do;while(this[Aue](this[PU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[Aue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[gh];return r=r||{},e===aue.stdout||e===aue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new bU(this,e,r):new $b(this,e,r)),this[Hf]?q1(()=>this[NE]()):this[NE]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[NE]():e==="readable"&&this[Ts]!==0?super.emit("readable"):Rat(e)&&this[gh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[_1]&&(this[Hf]?q1(()=>r.call(this,this[_1])):r.call(this,this[_1])),o}get emittedEnd(){return this[gh]}[Uf](){!this[Vb]&&!this[gh]&&!this[Ro]&&this.buffer.length===0&&this[Mf]&&(this[Vb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Jb]&&this.emit("close"),this[Vb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Hf]?q1(()=>this[DU](r)):this[DU](r):!1;if(e==="end")return this[fue]();if(e==="close"){if(this[Jb]=!0,!this[gh]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[_1]=r;let n=super.emit("error",r);return this[Uf](),n}else if(e==="resume"){let n=super.emit("resume");return this[Uf](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Uf](),a}[DU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Uf](),r}[fue](){this[gh]||(this[gh]=!0,this.readable=!1,this[Hf]?q1(()=>this[SU]()):this[SU]())}[SU](){if(this[_f]){let r=this[_f].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Qo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Qo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Qo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Qo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[kat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Qat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Ts]=0,typeof this.close=="function"&&!this[Jb]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof hue||e instanceof lue||e instanceof xat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var mue=_((H4t,due)=>{var Lat=ve("zlib").constants||{ZLIB_VERNUM:4736};due.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},Lat))});var jU=_(ul=>{"use strict";var FU=ve("assert"),dh=ve("buffer").Buffer,Cue=ve("zlib"),Rd=ul.constants=mue(),Nat=OE(),yue=dh.concat,Fd=Symbol("_superWrite"),UE=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"}},Oat=Symbol("opts"),G1=Symbol("flushFlag"),Eue=Symbol("finishFlushFlag"),GU=Symbol("fullFlushFlag"),ti=Symbol("handle"),ex=Symbol("onError"),ME=Symbol("sawError"),xU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),q4t=Symbol("_defaultFullFlush"),tx=class extends Nat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[ME]=!1,this[QU]=!1,this[Oat]=e,this[G1]=e.flush,this[Eue]=e.finishFlush;try{this[ti]=new Cue[r](e)}catch(o){throw new UE(o)}this[ex]=o=>{this[ME]||(this[ME]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[ex](new UE(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[ME])return FU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[GU]),this.write(Object.assign(dh.alloc(0),{[G1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Eue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=dh.from(e,r)),this[ME])return;FU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},dh.concat=h=>h;let A;try{let h=typeof e[G1]=="number"?e[G1]:this[G1];A=this[ti]._processChunk(e,h),dh.concat=yue}catch(h){dh.concat=yue,this[ex](new UE(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[ex](new UE(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](dh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[xU]=e,this[kU]=r)}}}},TU=class extends qf{constructor(e){super(e,"Deflate")}},LU=class extends qf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),NU=class extends qf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},OU=class extends qf{constructor(e){super(e,"Gunzip")}},MU=class extends qf{constructor(e){super(e,"DeflateRaw")}},UU=class extends qf{constructor(e){super(e,"InflateRaw")}},_U=class extends qf{constructor(e){super(e,"Unzip")}},rx=class extends tx{constructor(e,r){e=e||{},e.flush=e.flush||Rd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Rd.BROTLI_OPERATION_FINISH,super(e,r),this[GU]=Rd.BROTLI_OPERATION_FLUSH}},HU=class extends rx{constructor(e){super(e,"BrotliCompress")}},qU=class extends rx{constructor(e){super(e,"BrotliDecompress")}};ul.Deflate=TU;ul.Inflate=LU;ul.Gzip=NU;ul.Gunzip=OU;ul.DeflateRaw=MU;ul.InflateRaw=UU;ul.Unzip=_U;typeof Cue.BrotliCompress=="function"?(ul.BrotliCompress=HU,ul.BrotliDecompress=qU):ul.BrotliCompress=ul.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var _E=_((Y4t,wue)=>{var Mat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;wue.exports=Mat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nx=_((K4t,Iue)=>{"use strict";var Uat=OE(),YU=_E(),WU=Symbol("slurp");Iue.exports=class extends Uat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(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=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(ix=>{"use strict";ix.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"]]);ix.code=new Map(Array.from(ix.name).map(t=>[t[1],t[0]]))});var Due=_((V4t,Pue)=>{"use strict";var _at=(t,e)=>{if(Number.isSafeInteger(t))t<0?qat(t,e):Hat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Hat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},qat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Bue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=vue(a))}},Gat=t=>{let e=t[0],r=e===128?Yat(t.slice(1,t.length)):e===255?jat(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},jat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Bue(n):n===0?u=n:(o=!0,u=vue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Yat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Bue=t=>(255^t)&255,vue=t=>(255^t)+1&255;Pue.exports={encode:_at,parse:Gat}});var qE=_((J4t,bue)=>{"use strict";var zU=KU(),HE=ve("path").posix,Sue=Due(),VU=Symbol("slurp"),Al=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Al]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=mh(e,r+100,8),this.uid=mh(e,r+108,8),this.gid=mh(e,r+116,8),this.size=mh(e,r+124,12),this.mtime=JU(e,r+136,12),this.cksum=mh(e,r+148,12),this[VU](o),this[VU](a,!0),this[Al]=Td(e,r+156,1),this[Al]===""&&(this[Al]="0"),this[Al]==="0"&&this.path.substr(-1)==="/"&&(this[Al]="5"),this[Al]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=mh(e,r+329,8),this.devmin=mh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=JU(e,r+476,12),this.ctime=JU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Wat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Ld(e,r,100,n)||this.needPax,this.needPax=yh(e,r+100,8,this.mode)||this.needPax,this.needPax=yh(e,r+108,8,this.uid)||this.needPax,this.needPax=yh(e,r+116,8,this.gid)||this.needPax,this.needPax=yh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[Al].charCodeAt(0),this.needPax=Ld(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Ld(e,r+265,32,this.uname)||this.needPax,this.needPax=Ld(e,r+297,32,this.gname)||this.needPax,this.needPax=yh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=yh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Ld(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Ld(e,r+345,155,u)||this.needPax:(this.needPax=Ld(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=HE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=HE.dirname(o),o=HE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=HE.join(HE.basename(a),o),a=HE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),JU=(t,e,r)=>Kat(mh(t,e,r)),Kat=t=>t===null?null:new Date(t*1e3),mh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):Vat(t,e,r),zat=t=>isNaN(t)?null:t,Vat=(t,e,r)=>zat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Jat={12:8589934591,8:2097151},yh=(t,e,r,o)=>o===null?!1:o>Jat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Xat(t,e,r,o),!1),Xat=(t,e,r,o)=>t.write(Zat(o,r),e,r,"ascii"),Zat=(t,e)=>$at(Math.floor(t).toString(8),e),$at=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:yh(t,e,r,o.getTime()/1e3),elt=new Array(156).join("\0"),Ld=(t,e,r,o)=>o===null?!1:(t.write(o+elt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=ZU});var sx=_((X4t,xue)=>{"use strict";var tlt=qE(),rlt=ve("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new tlt({path:("PaxHeader/"+rlt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(nlt(ilt(t),e),r);var nlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,ilt=t=>t.replace(/\n$/,"").split(` +`).reduce(slt,Object.create(null)),slt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};xue.exports=j1});var GE=_((Z4t,kue)=>{kue.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 ox=_(($4t,Que)=>{"use strict";Que.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_((tUt,Rue)=>{"use strict";var ax=["|","<",">","?",":"],$U=ax.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),olt=new Map(ax.map((t,e)=>[t,$U[e]])),alt=new Map($U.map((t,e)=>[t,ax[e]]));Rue.exports={encode:t=>ax.reduce((e,r)=>e.split(r).join(olt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(alt.get(r)),t)}});var t3=_((rUt,Tue)=>{var{isAbsolute:llt,parse:Fue}=ve("path").win32;Tue.exports=t=>{let e="",r=Fue(t);for(;llt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Fue(t)}return[e,t]}});var Nue=_((nUt,Lue)=>{"use strict";Lue.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 A3=_((oUt,Jue)=>{"use strict";var Gue=OE(),jue=sx(),Yue=qE(),aA=ve("fs"),Oue=ve("path"),oA=_E(),clt=GE(),Wue=(t,e)=>e?(t=oA(t).replace(/^\.(\/|$)/,""),clt(e)+"/"+t):oA(t),ult=16*1024*1024,Mue=Symbol("process"),Uue=Symbol("file"),_ue=Symbol("directory"),n3=Symbol("symlink"),Hue=Symbol("hardlink"),Y1=Symbol("header"),lx=Symbol("read"),i3=Symbol("lstat"),cx=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),Eh=Symbol("close"),ux=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),lA=Symbol("prefix"),que=Symbol("hadError"),Kue=ox(),Alt=e3(),zue=t3(),Vue=Nue(),Ax=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=oA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||ult,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=oA(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?oA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=zue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=Alt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=oA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[cx](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[i3](){aA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[cx](r)})}[cx](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=plt(e),this.emit("stat",e),this[Mue]()}[Mue](){switch(this.type){case"File":return this[Uue]();case"Directory":return this[_ue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[ux](e){return Vue(e,this.type==="Directory",this.portable)}[lA](e){return Wue(e,this.prefix)}[Y1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Yue({path:this[lA](this.path),linkpath:this.type==="Link"?this[lA](this.linkpath):this.linkpath,mode:this[ux](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 jue({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[lA](this.path),linkpath:this.type==="Link"?this[lA](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)}[_ue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Y1](),this.end()}[n3](){aA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=oA(e),this[Y1](),this.end()}[Hue](e){this.type="Link",this.linkpath=oA(Oue.relative(this.cwd,e)),this.stat.size=0,this[Y1](),this.end()}[Uue](){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[Hue](r)}this.linkCache.set(e,this.absolute)}if(this[Y1](),this.stat.size===0)return this.end();this[a3]()}[a3](){aA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[que])return this[Eh]();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[lx]()}[lx](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;aA.read(e,r,o,a,n,(u,A)=>{if(u)return this[Eh](()=>this.emit("error",u));this[s3](A)})}[Eh](e){aA.close(this.fd,e)}[s3](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[Eh](()=>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[Eh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](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[lx]()}}),u3=class extends Ax{[i3](){this[cx](aA.lstatSync(this.absolute))}[n3](){this[o3](aA.readlinkSync(this.absolute))}[a3](){this[l3](aA.openSync(this.absolute,"r"))}[lx](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=aA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[Eh](()=>{})}catch{}}}[c3](e){e()}[Eh](e){aA.closeSync(this.fd),e()}},flt=Kue(class extends Gue{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=oA(e.path),this.mode=this[ux](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=oA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=zue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Yue({path:this[lA](this.path),linkpath:this.type==="Link"?this[lA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new jue({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[lA](this.path),linkpath:this.type==="Link"?this[lA](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)}[lA](e){return Wue(e,this.prefix)}[ux](e){return Vue(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()}});Ax.Sync=u3;Ax.Tar=flt;var plt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=Ax});var Cx=_((lUt,nAe)=>{"use strict";var yx=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}},hlt=OE(),glt=jU(),dlt=nx(),C3=A3(),mlt=C3.Sync,ylt=C3.Tar,Elt=BD(),Xue=Buffer.alloc(1024),hx=Symbol("onStat"),fx=Symbol("ended"),cA=Symbol("queue"),jE=Symbol("current"),Nd=Symbol("process"),px=Symbol("processing"),Zue=Symbol("processJob"),uA=Symbol("jobs"),f3=Symbol("jobDone"),gx=Symbol("addFSEntry"),$ue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),dx=Symbol("onreaddir"),mx=Symbol("pipe"),eAe=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),rAe=Symbol("write"),h3=Symbol("ondrain"),Ex=ve("fs"),tAe=ve("path"),Clt=ox(),g3=_E(),w3=Clt(class extends hlt{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=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,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 glt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),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[cA]=new Elt,this[uA]=0,this.jobs=+e.jobs||4,this[px]=!1,this[fx]=!1}[rAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[fx]=!0,this[Nd](),this}write(e){if(this[fx])throw new Error("write after end");return e instanceof dlt?this[$ue](e):this[gx](e),this.flowing}[$ue](e){let r=g3(tAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new yx(e.path,r,!1);o.entry=new ylt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[uA]+=1,this[cA].push(o)}this[Nd]()}[gx](e){let r=g3(tAe.resolve(this.cwd,e));this[cA].push(new yx(e,r)),this[Nd]()}[d3](e){e.pending=!0,this[uA]+=1;let r=this.follow?"stat":"lstat";Ex[r](e.absolute,(o,a)=>{e.pending=!1,this[uA]-=1,o?this.emit("error",o):this[hx](e,a)})}[hx](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[m3](e){e.pending=!0,this[uA]+=1,Ex.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[uA]-=1,r)return this.emit("error",r);this[dx](e,o)})}[dx](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[px]){this[px]=!0;for(let e=this[cA].head;e!==null&&this[uA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[eAe](e){this[uA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[jE]&&this[jE].entry&&this[jE].entry.resume()}[mx](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[gx](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=mlt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[hx](e,Ex[r](e.absolute))}[m3](e,r){this[dx](e,Ex.readdirSync(e.absolute))}[mx](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[gx](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[rAe](a)})}};w3.Sync=E3;nAe.exports=w3});var ZE=_(K1=>{"use strict";var wlt=OE(),Ilt=ve("events").EventEmitter,Qa=ve("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var JE=Symbol("_autoClose"),Wc=Symbol("_close"),W1=Symbol("_ended"),jn=Symbol("_fd"),iAe=Symbol("_finished"),wh=Symbol("_flags"),I3=Symbol("_flush"),P3=Symbol("_handleChunk"),D3=Symbol("_makeBuf"),Px=Symbol("_mode"),wx=Symbol("_needDrain"),zE=Symbol("_onerror"),XE=Symbol("_onopen"),B3=Symbol("_onread"),WE=Symbol("_onwrite"),Ih=Symbol("_open"),Gf=Symbol("_path"),Od=Symbol("_pos"),AA=Symbol("_queue"),KE=Symbol("_read"),sAe=Symbol("_readSize"),Ch=Symbol("_reading"),Ix=Symbol("_remain"),oAe=Symbol("_size"),Bx=Symbol("_write"),YE=Symbol("_writing"),vx=Symbol("_defaultFlag"),VE=Symbol("_errored"),Dx=class extends wlt{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[VE]=!1,this[jn]=typeof r.fd=="number"?r.fd:null,this[Gf]=e,this[sAe]=r.readSize||16*1024*1024,this[Ch]=!1,this[oAe]=typeof r.size=="number"?r.size:1/0,this[Ix]=this[oAe],this[JE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[jn]=="number"?this[KE]():this[Ih]()}get fd(){return this[jn]}get path(){return this[Gf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ih](){Qa.open(this[Gf],"r",(e,r)=>this[XE](e,r))}[XE](e,r){e?this[zE](e):(this[jn]=r,this.emit("open",r),this[KE]())}[D3](){return Buffer.allocUnsafe(Math.min(this[sAe],this[Ix]))}[KE](){if(!this[Ch]){this[Ch]=!0;let e=this[D3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[jn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[Ch]=!1,e?this[zE](e):this[P3](r,o)&&this[KE]()}[Wc](){if(this[JE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[zE](e){this[Ch]=!0,this[Wc](),this.emit("error",e)}[P3](e,r){let o=!1;return this[Ix]-=e,e>0&&(o=super.write(ethis[XE](e,r))}[XE](e,r){this[vx]&&this[wh]==="r+"&&e&&e.code==="ENOENT"?(this[wh]="w",this[Ih]()):e?this[zE](e):(this[jn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[W1]=!0,!this[YE]&&!this[AA].length&&typeof this[jn]=="number"&&this[WE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[W1]?(this.emit("error",new Error("write() after end()")),!1):this[jn]===null||this[YE]||this[AA].length?(this[AA].push(e),this[wx]=!0,!1):(this[YE]=!0,this[Bx](e),!0)}[Bx](e){Qa.write(this[jn],e,0,e.length,this[Od],(r,o)=>this[WE](r,o))}[WE](e,r){e?this[zE](e):(this[Od]!==null&&(this[Od]+=r),this[AA].length?this[I3]():(this[YE]=!1,this[W1]&&!this[iAe]?(this[iAe]=!0,this[Wc](),this.emit("finish")):this[wx]&&(this[wx]=!1,this.emit("drain"))))}[I3](){if(this[AA].length===0)this[W1]&&this[WE](null,0);else if(this[AA].length===1)this[Bx](this[AA].pop());else{let e=this[AA];this[AA]=[],v3(this[jn],e,this[Od],(r,o)=>this[WE](r,o))}}[Wc](){if(this[JE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},b3=class extends Sx{[Ih](){let e;if(this[vx]&&this[wh]==="r+")try{e=Qa.openSync(this[Gf],this[wh],this[Px])}catch(r){if(r.code==="ENOENT")return this[wh]="w",this[Ih]();throw r}else e=Qa.openSync(this[Gf],this[wh],this[Px]);this[XE](null,e)}[Wc](){if(this[JE]&&typeof this[jn]=="number"){let e=this[jn];this[jn]=null,Qa.closeSync(e),this.emit("close")}}[Bx](e){let r=!0;try{this[WE](null,Qa.writeSync(this[jn],e,0,e.length,this[Od])),r=!1}finally{if(r)try{this[Wc]()}catch{}}}};K1.ReadStream=Dx;K1.ReadStreamSync=S3;K1.WriteStream=Sx;K1.WriteStreamSync=b3});var Tx=_((AUt,pAe)=>{"use strict";var Blt=ox(),vlt=qE(),Plt=ve("events"),Dlt=BD(),Slt=1024*1024,blt=nx(),aAe=sx(),xlt=jU(),x3=Buffer.from([31,139]),Zl=Symbol("state"),Md=Symbol("writeEntry"),jf=Symbol("readEntry"),k3=Symbol("nextEntry"),lAe=Symbol("processEntry"),$l=Symbol("extendedHeader"),z1=Symbol("globalExtendedHeader"),Bh=Symbol("meta"),cAe=Symbol("emitMeta"),fi=Symbol("buffer"),Yf=Symbol("queue"),Ud=Symbol("ended"),uAe=Symbol("emittedEnd"),_d=Symbol("emit"),Ra=Symbol("unzip"),bx=Symbol("consumeChunk"),xx=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),AAe=Symbol("consumeMeta"),fAe=Symbol("consumeHeader"),kx=Symbol("consuming"),R3=Symbol("bufferConcat"),F3=Symbol("maybeEnd"),V1=Symbol("writing"),vh=Symbol("aborted"),Qx=Symbol("onDone"),Hd=Symbol("sawValidEntry"),Rx=Symbol("sawNullBlock"),Fx=Symbol("sawEOF"),klt=t=>!0;pAe.exports=Blt(class extends Plt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Hd]=null,this.on(Qx,r=>{(this[Zl]==="begin"||this[Hd]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Qx,e.ondone):this.on(Qx,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Slt,this.filter=typeof e.filter=="function"?e.filter:klt,this.writable=!0,this.readable=!1,this[Yf]=new Dlt,this[fi]=null,this[jf]=null,this[Md]=null,this[Zl]="begin",this[Bh]="",this[$l]=null,this[z1]=null,this[Ud]=!1,this[Ra]=null,this[vh]=!1,this[Rx]=!1,this[Fx]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[fAe](e,r){this[Hd]===null&&(this[Hd]=!1);let o;try{o=new vlt(e,r,this[$l],this[z1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Rx]?(this[Fx]=!0,this[Zl]==="begin"&&(this[Zl]="header"),this[_d]("eof")):(this[Rx]=!0,this[_d]("nullBlock"));else if(this[Rx]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new blt(o,this[$l],this[z1]);if(!this[Hd])if(n.remain){let u=()=>{n.invalid||(this[Hd]=!0)};n.on("end",u)}else this[Hd]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[_d]("ignoredEntry",n),this[Zl]="ignore",n.resume()):n.size>0&&(this[Bh]="",n.on("data",u=>this[Bh]+=u),this[Zl]="meta"):(this[$l]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[_d]("ignoredEntry",n),this[Zl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Zl]="body":(this[Zl]="header",n.end()),this[jf]?this[Yf].push(n):(this[Yf].push(n),this[k3]())))}}}[lAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[jf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[jf]=null,r=!1),r}[k3](){do;while(this[lAe](this[Yf].shift()));if(!this[Yf].length){let e=this[jf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Zl]="header",this[Md]=null,o.end()),n.length}[AAe](e,r){let o=this[Md],a=this[Q3](e,r);return this[Md]||this[cAe](o),a}[_d](e,r,o){!this[Yf].length&&!this[jf]?this.emit(e,r,o):this[Yf].push([e,r,o])}[cAe](e){switch(this[_d]("meta",this[Bh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[$l]=aAe.parse(this[Bh],this[$l],!1);break;case"GlobalExtendedHeader":this[z1]=aAe.parse(this[Bh],this[z1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[$l]=this[$l]||Object.create(null),this[$l].path=this[Bh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[$l]=this[$l]||Object.create(null),this[$l].linkpath=this[Bh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[vh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[vh])return;if(this[Ra]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bx](n)),this[Ra].on("error",n=>this.abort(n)),this[Ra].on("end",n=>{this[Ud]=!0,this[bx]()}),this[V1]=!0;let a=this[Ra][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Ra]?this[Ra].write(e):this[bx](e),this[V1]=!1;let r=this[Yf].length?!1:this[jf]?this[jf].flowing:!0;return!r&&!this[Yf].length&&this[jf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[vh]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[F3](){if(this[Ud]&&!this[uAe]&&!this[vh]&&!this[kx]){this[uAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[_d](Qx)}}[bx](e){if(this[kx])this[R3](e);else if(!e&&!this[fi])this[F3]();else{if(this[kx]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[xx](r)}else this[xx](e);for(;this[fi]&&this[fi].length>=512&&!this[vh]&&!this[Fx];){let r=this[fi];this[fi]=null,this[xx](r)}this[kx]=!1}(!this[fi]||this[Ud])&&this[F3]()}[xx](e){let r=0,o=e.length;for(;r+512<=o&&!this[vh]&&!this[Fx];)switch(this[Zl]){case"begin":case"header":this[fAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[AAe](e,r);break;default:throw new Error("invalid state: "+this[Zl])}r{"use strict";var Qlt=LE(),gAe=Tx(),$E=ve("fs"),Rlt=ZE(),hAe=ve("path"),T3=GE();mAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Qlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Tlt(o,e),o.noResume||Flt(o),o.file&&o.sync?Llt(o):o.file?Nlt(o,r):dAe(o)};var Flt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Tlt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||hAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(hAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Llt=t=>{let e=dAe(t),r=t.file,o=!0,a;try{let n=$E.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new gAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),$E.stat(a,(p,h)=>{if(p)A(p);else{let E=new Rlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},dAe=t=>new gAe(t)});var BAe=_((pUt,IAe)=>{"use strict";var Olt=LE(),Nx=Cx(),yAe=ZE(),EAe=Lx(),CAe=ve("path");IAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Olt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Mlt(o,e):o.file?Ult(o,e,r):o.sync?_lt(o,e):Hlt(o,e)};var Mlt=(t,e)=>{let r=new Nx.Sync(t),o=new yAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),wAe(r,e)},Ult=(t,e,r)=>{let o=new Nx(t),a=new yAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return L3(o,e),r?n.then(r,r):n},wAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?EAe({file:CAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},L3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return EAe({file:CAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>L3(t,e));t.add(r)}t.end()},_lt=(t,e)=>{let r=new Nx.Sync(t);return wAe(r,e),r},Hlt=(t,e)=>{let r=new Nx(t);return L3(r,e),r}});var N3=_((hUt,kAe)=>{"use strict";var qlt=LE(),vAe=Cx(),fl=ve("fs"),PAe=ZE(),DAe=Lx(),SAe=ve("path"),bAe=qE();kAe.exports=(t,e,r)=>{let o=qlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Glt(o,e):Ylt(o,e,r)};var Glt=(t,e)=>{let r=new vAe.Sync(t),o=!0,a,n;try{try{a=fl.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=fl.openSync(t.file,"w+");else throw p}let u=fl.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,jlt(t,r,n,a,e)}finally{if(o)try{fl.closeSync(a)}catch{}}},jlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Wlt(e,a)},Ylt=(t,e,r)=>{e=Array.from(e);let o=new vAe(t),a=(u,A,p)=>{let h=(C,F)=>{C?fl.close(u,N=>p(C)):p(null,F)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),x=(C,F)=>{if(C)return h(C);if(I+=F,I<512&&F)return fl.read(u,v,I,v.length-I,E+I,x);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let N=new bAe(v);if(!N.cksumValid)return h(null,E);let U=512*Math.ceil(N.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),I=0,fl.read(u,v,0,512,E,x)};fl.read(u,v,0,512,E,x)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",fl.open(t.file,p,h);if(E)return A(E);fl.fstat(I,(v,x)=>{if(v)return fl.close(I,()=>A(v));a(I,x.size,(C,F)=>{if(C)return A(C);let N=new PAe.WriteStream(t.file,{fd:I,start:F});o.pipe(N),N.on("error",A),N.on("close",u),xAe(o,e)})})};fl.open(t.file,p,h)});return r?n.then(r,r):n},Wlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?DAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},xAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return DAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>xAe(t,e));t.add(r)}t.end()}});var RAe=_((gUt,QAe)=>{"use strict";var Klt=LE(),zlt=N3();QAe.exports=(t,e,r)=>{let o=Klt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Vlt(o),zlt(o,e,r)};var Vlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((dUt,TAe)=>{var{promisify:FAe}=ve("util"),Ph=ve("fs"),Jlt=t=>{if(!t)t={mode:511,fs:Ph};else if(typeof t=="object")t={mode:511,fs:Ph,...t};else if(typeof t=="number")t={mode:t,fs:Ph};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Ph};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Ph.mkdir,t.mkdirAsync=FAe(t.mkdir),t.stat=t.stat||t.fs.stat||Ph.stat,t.statAsync=FAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Ph.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Ph.mkdirSync,t};TAe.exports=Jlt});var OAe=_((mUt,NAe)=>{var Xlt=process.platform,{resolve:Zlt,parse:$lt}=ve("path"),ect=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=Zlt(t),Xlt==="win32"){let e=/[*|"<>?:]/,{root:r}=$lt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=ect});var qAe=_((yUt,HAe)=>{var{dirname:MAe}=ve("path"),UAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?UAe(t,MAe(e),e):void 0),_Ae=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?_Ae(t,MAe(e),e):void 0}};HAe.exports={findMade:UAe,findMadeSync:_Ae}});var U3=_((EUt,jAe)=>{var{dirname:GAe}=ve("path"),O3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(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})})},M3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};jAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var KAe=_((CUt,WAe)=>{var{dirname:YAe}=ve("path"),{findMade:tct,findMadeSync:rct}=qAe(),{mkdirpManual:nct,mkdirpManualSync:ict}=U3(),sct=(t,e)=>(e.recursive=!0,YAe(t)===t?e.mkdirAsync(t,e):tct(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return nct(t,e);throw a}))),oct=(t,e)=>{if(e.recursive=!0,YAe(t)===t)return e.mkdirSync(t,e);let o=rct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return ict(t,e);throw a}};WAe.exports={mkdirpNative:sct,mkdirpNativeSync:oct}});var XAe=_((wUt,JAe)=>{var zAe=ve("fs"),act=process.version,_3=act.replace(/^v/,"").split("."),VAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,lct=VAe?t=>t.mkdir===zAe.mkdir:()=>!1,cct=VAe?t=>t.mkdirSync===zAe.mkdirSync:()=>!1;JAe.exports={useNative:lct,useNativeSync:cct}});var nfe=_((IUt,rfe)=>{var eC=LAe(),tC=OAe(),{mkdirpNative:ZAe,mkdirpNativeSync:$Ae}=KAe(),{mkdirpManual:efe,mkdirpManualSync:tfe}=U3(),{useNative:uct,useNativeSync:Act}=XAe(),rC=(t,e)=>(t=tC(t),e=eC(e),uct(e)?ZAe(t,e):efe(t,e)),fct=(t,e)=>(t=tC(t),e=eC(e),Act(e)?$Ae(t,e):tfe(t,e));rC.sync=fct;rC.native=(t,e)=>ZAe(tC(t),eC(e));rC.manual=(t,e)=>efe(tC(t),eC(e));rC.nativeSync=(t,e)=>$Ae(tC(t),eC(e));rC.manualSync=(t,e)=>tfe(tC(t),eC(e));rfe.exports=rC});var ufe=_((BUt,cfe)=>{"use strict";var ec=ve("fs"),qd=ve("path"),pct=ec.lchown?"lchown":"chown",hct=ec.lchownSync?"lchownSync":"chownSync",sfe=ec.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),ife=(t,e,r)=>{try{return ec[hct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},gct=(t,e,r)=>{try{return ec.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},dct=sfe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):ec.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=sfe?(t,e,r)=>{try{return ife(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;gct(t,e,r)}}:(t,e,r)=>ife(t,e,r),mct=process.version,ofe=(t,e,r)=>ec.readdir(t,e,r),yct=(t,e)=>ec.readdirSync(t,e);/^v4\./.test(mct)&&(ofe=(t,e,r)=>ec.readdir(t,r));var Ox=(t,e,r,o)=>{ec[pct](t,e,r,dct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},afe=(t,e,r,o,a)=>{if(typeof e=="string")return ec.lstat(qd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,afe(t,u,r,o,a)});if(e.isDirectory())q3(qd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=qd.resolve(t,e.name);Ox(u,r,o,a)});else{let n=qd.resolve(t,e.name);Ox(n,r,o,a)}},q3=(t,e,r,o)=>{ofe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ox(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ox(t,e,r,o)}};n.forEach(h=>afe(t,h,e,r,p))})},Ect=(t,e,r,o)=>{if(typeof e=="string")try{let a=ec.lstatSync(qd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&lfe(qd.resolve(t,e.name),r,o),H3(qd.resolve(t,e.name),r,o)},lfe=(t,e,r)=>{let o;try{o=yct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ect(t,a,e,r)),H3(t,e,r)};cfe.exports=q3;q3.sync=lfe});var hfe=_((vUt,G3)=>{"use strict";var Afe=nfe(),tc=ve("fs"),Mx=ve("path"),ffe=ufe(),Kc=_E(),Ux=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},_x=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},Hx=(t,e)=>t.get(Kc(e)),J1=(t,e,r)=>t.set(Kc(e),r),Cct=(t,e)=>{tc.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new _x(t,r&&r.code||"ENOTDIR")),e(r)})};G3.exports=(t,e,r)=>{t=Kc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Kc(e.cwd),x=(N,U)=>{N?r(N):(J1(I,t,!0),U&&p?ffe(U,u,A,V=>x(V)):n?tc.chmod(t,a,r):r())};if(I&&Hx(I,t)===!0)return x();if(t===v)return Cct(t,x);if(h)return Afe(t,{mode:a}).then(N=>x(null,N),x);let F=Kc(Mx.relative(v,t)).split("/");qx(v,F,a,I,E,v,null,x)};var qx=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Kc(Mx.resolve(t+"/"+p));if(Hx(o,h))return qx(h,e,r,o,a,n,u,A);tc.mkdir(h,r,pfe(h,e,r,o,a,n,u,A))},pfe=(t,e,r,o,a,n,u,A)=>p=>{p?tc.lstat(t,(h,E)=>{if(h)h.path=h.path&&Kc(h.path),A(h);else if(E.isDirectory())qx(t,e,r,o,a,n,u,A);else if(a)tc.unlink(t,I=>{if(I)return A(I);tc.mkdir(t,r,pfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new Ux(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qx(t,e,r,o,a,n,u,A))},wct=t=>{let e=!1,r="ENOTDIR";try{e=tc.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new _x(t,r)}};G3.exports.sync=(t,e)=>{t=Kc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Kc(e.cwd),v=N=>{J1(E,t,!0),N&&A&&ffe.sync(N,n,u),a&&tc.chmodSync(t,o)};if(E&&Hx(E,t)===!0)return v();if(t===I)return wct(I),v();if(p)return v(Afe.sync(t,o));let C=Kc(Mx.relative(I,t)).split("/"),F=null;for(let N=C.shift(),U=I;N&&(U+="/"+N);N=C.shift())if(U=Kc(Mx.resolve(U)),!Hx(E,U))try{tc.mkdirSync(U,o),F=F||U,J1(E,U,!0)}catch{let te=tc.lstatSync(U);if(te.isDirectory()){J1(E,U,!0);continue}else if(h){tc.unlinkSync(U),tc.mkdirSync(U,o),F=F||U,J1(E,U,!0);continue}else if(te.isSymbolicLink())return new Ux(U,U+"/"+C.join("/"))}return v(F)}});var Y3=_((PUt,gfe)=>{var j3=Object.create(null),{hasOwnProperty:Ict}=Object.prototype;gfe.exports=t=>(Ict.call(j3,t)||(j3[t]=t.normalize("NFKD")),j3[t])});var Efe=_((DUt,yfe)=>{var dfe=ve("assert"),Bct=Y3(),vct=GE(),{join:mfe}=ve("path"),Pct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Dct=Pct==="win32";yfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=mfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(x=>{let C=t.get(x);dfe.equal(C[0],h),C.length===1?t.delete(x):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(F=>v.add(F)))}),I.forEach(x=>{let C=t.get(x);dfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(x):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(x=>u(x)),!0};return{check:n,reserve:(h,E)=>{h=Dct?["win32 parallelization disabled"]:h.map(v=>Bct(vct(mfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,x)=>v.concat(x)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let x=t.get(v);x?x.push(E):t.set(v,[E])}),I.forEach(v=>{let x=t.get(v);x?x[x.length-1]instanceof Set?x[x.length-1].add(E):x.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Ife=_((SUt,wfe)=>{var Sct=process.platform,bct=Sct==="win32",xct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:kct,O_TRUNC:Qct,O_WRONLY:Rct,UV_FS_O_FILEMAP:Cfe=0}=xct.constants,Fct=bct&&!!Cfe,Tct=512*1024,Lct=Cfe|Qct|kct|Rct;wfe.exports=Fct?t=>t"w"});var e_=_((bUt,Nfe)=>{"use strict";var Nct=ve("assert"),Oct=Tx(),vn=ve("fs"),Mct=ZE(),Wf=ve("path"),Ffe=hfe(),Bfe=e3(),Uct=Efe(),_ct=t3(),pl=_E(),Hct=GE(),qct=Y3(),vfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Yx=Symbol("pruneCache"),V3=Symbol("isReusable"),rc=Symbol("makeFs"),J3=Symbol("file"),X3=Symbol("directory"),Wx=Symbol("link"),Dfe=Symbol("symlink"),Sfe=Symbol("hardlink"),bfe=Symbol("unsupported"),xfe=Symbol("checkPath"),Dh=Symbol("mkdir"),Fo=Symbol("onError"),Gx=Symbol("pending"),kfe=Symbol("pend"),nC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),X1=Symbol("doChown"),Z1=Symbol("uid"),$1=Symbol("gid"),e2=Symbol("checkedCwd"),Tfe=ve("crypto"),Lfe=Ife(),Gct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,t2=Gct==="win32",jct=(t,e)=>{if(!t2)return vn.unlink(t,e);let r=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Yct=t=>{if(!t2)return vn.unlinkSync(t);let e=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Qfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Rfe=t=>qct(Hct(pl(t))).toLowerCase(),Wct=(t,e)=>{e=Rfe(e);for(let r of t.keys()){let o=Rfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Kct=t=>{for(let e of t.keys())t.delete(e)},r2=class extends Oct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[e2]=!1,this.reservations=Uct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gx]=0,this[W3]=!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||t2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=pl(Wf.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[vfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[Gx]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[xfe](e){if(this.strip){let r=pl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=pl(e.path),o=r.split("/");if(o.includes("..")||t2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=_ct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Wf.isAbsolute(e.path)?e.absolute=pl(Wf.resolve(e.path)):e.absolute=pl(Wf.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:pl(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}=Wf.win32.parse(e.absolute);e.absolute=r+Bfe.encode(e.absolute.substr(r.length));let{root:o}=Wf.win32.parse(e.path);e.path=o+Bfe.encode(e.path.substr(o.length))}return!0}[vfe](e){if(!this[xfe](e))return e.resume();switch(Nct.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[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Fo](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[nC](),r.resume())}[Dh](e,r,o){Ffe(pl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[X1](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}[Z1](e){return Qfe(this.uid,e.uid,this.processUid)}[$1](e){return Qfe(this.gid,e.gid,this.processGid)}[J3](e,r){let o=e.mode&4095||this.fmode,a=new Mct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Fo](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Fo](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Fo](h,e):this[nC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,x=>x?vn.utimes(h,I,v,C=>u(C&&x)):u())}if(this[X1](e)){n++;let I=this[Z1](e),v=this[$1](e);vn.fchown(E,I,v,x=>x?vn.chown(h,I,v,C=>u(C&&x)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Fo](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[Dh](e.absolute,o,a=>{if(a){this[Fo](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[nC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[X1](e)&&(n++,vn.chown(e.absolute,this[Z1](e),this[$1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Dfe](e,r){this[Wx](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=pl(Wf.resolve(this.cwd,e.linkpath));this[Wx](e,o,"link",r)}[kfe](){this[Gx]++}[nC](){this[Gx]--,this[K3]()}[Z3](e){this[nC](),e.resume()}[V3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!t2}[z3](e){this[kfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Yx](e){e.type==="SymbolicLink"?Kct(this.dirCache):e.type!=="Directory"&&Wct(this.dirCache,e.absolute)}[Pfe](e,r){this[Yx](e);let o=A=>{this[Yx](e),r(A)},a=()=>{this[Dh](this.cwd,this.dmode,A=>{if(A){this[Fo](A,e),o();return}this[e2]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=pl(Wf.dirname(e.absolute));if(A!==this.cwd)return this[Dh](A,this.dmode,p=>{if(p){this[Fo](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[V3](e,p))return this[rc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[rc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[rc](h,e,o))}if(e.absolute===this.cwd)return this[rc](null,e,o);jct(e.absolute,h=>this[rc](h,e,o))})};this[e2]?n():a()}[rc](e,r,o){if(e){this[Fo](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[J3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Dfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Wx](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Fo](n,e):(this[nC](),e.resume()),a()})}},jx=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends r2{[rc](e,r){return super[rc](e,r,()=>{})}[z3](e){if(this[Yx](e),!this[e2]){let n=this[Dh](this.cwd,this.dmode);if(n)return this[Fo](n,e);this[e2]=!0}if(e.absolute!==this.cwd){let n=pl(Wf.dirname(e.absolute));if(n!==this.cwd){let u=this[Dh](n,this.dmode);if(u)return this[Fo](u,e)}}let[r,o]=jx(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[V3](e,o))return this[rc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?jx(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[rc](A,e)}let[n]=jx(()=>vn.rmdirSync(e.absolute));this[rc](n,e)}let[a]=e.absolute===this.cwd?[]:jx(()=>Yct(e.absolute));this[rc](a,e)}[J3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Fo](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Fo](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[X1](e)){let h=this[Z1](e),E=this[$1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[Dh](e.absolute,o);if(a){this[Fo](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[X1](e))try{vn.chownSync(e.absolute,this[Z1](e),this[$1](e))}catch{}r(),e.resume()}[Dh](e,r){try{return Ffe.sync(pl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Wx](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Fo](n,e)}}};r2.Sync=$3;Nfe.exports=r2});var Hfe=_((xUt,_fe)=>{"use strict";var zct=LE(),Kx=e_(),Mfe=ve("fs"),Ufe=ZE(),Ofe=ve("path"),t_=GE();_fe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=zct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Vct(o,e),o.file&&o.sync?Jct(o):o.file?Xct(o,r):o.sync?Zct(o):$ct(o)};var Vct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},Jct=t=>{let e=new Kx.Sync(t),r=t.file,o=Mfe.statSync(r),a=t.maxReadSize||16*1024*1024;new Ufe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Xct=(t,e)=>{let r=new Kx(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Mfe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Ufe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},Zct=t=>new Kx.Sync(t),$ct=t=>new Kx(t)});var qfe=_(As=>{"use strict";As.c=As.create=BAe();As.r=As.replace=N3();As.t=As.list=Lx();As.u=As.update=RAe();As.x=As.extract=Hfe();As.Pack=Cx();As.Unpack=e_();As.Parse=Tx();As.ReadEntry=nx();As.WriteEntry=A3();As.Header=qE();As.Pax=sx();As.types=KU()});var r_,Gfe,Sh,n2,i2,jfe=Et(()=>{r_=Ze(sd()),Gfe=ve("worker_threads"),Sh=Symbol("kTaskInfo"),n2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},i2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Sh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Sh].resolve(r),e[Sh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Sh]?.reject(r),e[Sh]=null}),e.on("exit",r=>{r!==0&&e[Sh]?.reject(new Error(`Worker exited with code ${r}`)),e[Sh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Sh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Wfe=_((FUt,Yfe)=>{var n_;Yfe.exports.getContent=()=>(typeof n_>"u"&&(n_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Zi={};zt(Zi,{convertToZip:()=>nut,convertToZipWorker:()=>o_,extractArchiveTo:()=>Xfe,getDefaultTaskPool:()=>Vfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>rut});function eut(t,e){switch(t){case"async":return new n2(o_,{poolSize:e});case"workers":return new i2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Vfe(){return typeof i_>"u"&&(i_=eut("workers",Ji.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?Vfe():al(tut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new n2(o_,{poolSize:r});case"workers":return new i2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new Xi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Xfe(u,n,a),n.saveAndClose(),e}async function rut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new Xi(null,{level:o});else{let A=await oe.mktempPromise(),p=z.join(A,"archive.zip");n=new Xi(p,{create:!0,level:o})}let u=z.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function nut(t,e={}){let r=await oe.mktempPromise(),o=z.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new Xi(o,{level:e.compressionLevel})}async function*iut(t){let e=new zfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Xfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of iut(t)){if(a(n))continue;let u=z.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=z.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Wy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(z.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,zfe,s_,i_,tut,Zfe=Et(()=>{Ye();Dt();iA();Kfe=ve("stream"),zfe=Ze(qfe());jfe();Gl();s_=Ze(Wfe());tut=new WeakMap});var epe=_((a_,$fe)=>{(function(t,e){typeof a_=="object"?$fe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,x,C,F=A.slice(0);if(F.push([n,u])&&A.length>0&&(A.forEach(function(U,V){V>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){x=++v===N.length,r(U,n[U],x,F,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var fs={};zt(fs,{emitList:()=>sut,emitTree:()=>ipe,treeNodeToJson:()=>npe,treeNodeToTreeify:()=>rpe});function rpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,x=[];typeof E<"u"&&x.push(yd(e,E,2)),typeof I<"u"&&x.push(Ut(e,I[0],I[1])),x.length===0&&x.push(yd(e,`${p}`,2));let C=x.join(": ").trim(),F=`\0${o++}\0`,N=u[`${F}${C}`]={};typeof v<"u"&&a(v,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function npe(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 Ed(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[out(n)]=e(u));return typeof r.value>"u"?a:{value:Ed(r.value[0],r.value[1]),children:a}};return e(t)}function sut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));ipe({children:a},{configuration:e,stdout:r,json:o})}function ipe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(npe(A))} `);return}let n=(0,tpe.asTree)(rpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 $1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 -$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function sut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var tpe,spe=Et(()=>{tpe=$e(epe());jl()});function i2(t){let e=t.match(out);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 ope,l_,c_,Kx,Nr,out,u_=Et(()=>{Ye();Pt();Pt();iA();ope=ve("crypto"),l_=$e(ve("fs"));Wl();ih();Gl();bo();c_=Vy(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Kx=Vy(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Nr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ope.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Nr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Nr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Kx,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${lE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=i2(r).hash.slice(0,10);return`${lE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=i2(e);if(r===null||r=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function out(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var tpe,spe=Et(()=>{tpe=Ze(epe());jl()});function s2(t){let e=t.match(aut);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 ope,l_,c_,zx,Nr,aut,u_=Et(()=>{Ye();Dt();Dt();iA();ope=ve("crypto"),l_=Ze(ve("fs"));Wl();ih();Gl();So();c_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),zx=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Nr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ope.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Nr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Nr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[zx,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${oE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=s2(r).hash.slice(0,10);return`${oE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=s2(e);if(r===null||r{let he=new Ji,Be=z.join(Bt.root,nM(e));return he.mkdirSync(Be,{recursive:!0}),he.writeJsonSync(z.join(Be,dr.manifest),{name:fn(e),mocked:!0}),he},E=async(he,{isColdHit:Be,controlPath:we=null})=>{if(we===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?i2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(he)}`:r;if(we!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(we)}`:r;if(Ee!==ce)throw new Jt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let Pe=null;switch(r!==null&&Ee!==r&&(this.check?Pe="throw":i2(r).cacheKey!==i2(Ee).cacheKey?Pe="update":Pe=this.configuration.get("checksumBehavior")),Pe){case null:case"update":return{isValid:!0,hash:Ee};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")}},I=async he=>{if(!n)throw new Error(`Cache check required but no loader configured for ${qr(this.configuration,e)}`);let Be=await n(),we=Be.getRealPath();Be.saveAndClose(),await oe.chmodPromise(we,420);let g=await E(he,{controlPath:we,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let he=await n(),Be=he.getRealPath();return he.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:A}},x=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${qr(this.configuration,e)}`);if(this.immutable)throw new Jt(56,`Cache entry required but missing for ${qr(this.configuration,e)}`);let{path:he,source:Be}=await v(),{hash:we}=await E(he,{isColdHit:!0}),g=this.getLocatorPath(e,we),Ee=[];Be!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(he,ce,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(he,ce,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let Pe=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,Pe,we]},C=async()=>{let Be=(async()=>{let we=u.unstablePackages?.has(e.locatorHash),g=we||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,Pe=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=Pe||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!Pe)if(this.check)ee=await I(Ie);else{let Fe=await E(Ie,{isColdHit:!1});if(Fe.isValid)ee=Fe.hash;else return x()}return[Pe,Ie,ee]}else{if(this.immutable&&we)throw new Jt(56,`Cache entry required but missing for ${qr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return x()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let he;he=this.mutexes.get(e.locatorHash);)await he;let[R,N,U]=await C();R||this.markedFiles.add(N);let V,te=R?()=>h():()=>new Ji(N,{baseFs:p,readOnly:!0}),ae=new iy(()=>CN(()=>V=te(),he=>`Failed to open the cache entry for ${qr(this.configuration,e)}: ${he}`),z),fe=new _u(N,{baseFs:ae,pathUtils:z}),ue=()=>{V?.discardAndClose()},me=u.unstablePackages?.has(e.locatorHash)?null:U;return[fe,ue,me]}},out=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zx,ape=Et(()=>{zx=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zx||{})});var aut,oC,A_=Et(()=>{Pt();Nl();Qf();bo();aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>_S({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],oC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=z.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=s1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=xa(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,R]of aut){let N=I.match(C);if(N){v=R(E,...N);break}}if(!v){r.reportWarning(14,`${Gn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let x=h;try{let C=vd(h.range),R=s1(C.selector,!0);R&&(x=R)}catch{}u.set(h.descriptorHash,Qs(x,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var fA,lpe=Et(()=>{Wl();O1();jl();fA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;XI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}(this.mirrorCwd||!this.immutable)&&await oe.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,r,{onHit:o,onMiss:a,loader:n,...u}){let A=this.getLocatorMirrorPath(e),p=new Tn,h=()=>{let de=new Xi,Ie=z.join(Bt.root,nM(e));return de.mkdirSync(Ie,{recursive:!0}),de.writeJsonSync(z.join(Ie,dr.manifest),{name:rn(e),mocked:!0}),de},E=async(de,{isColdHit:Ie,controlPath:Ee=null})=>{if(Ee===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Ie?s2(r).cacheKey:this.cacheKey,me=!u.skipIntegrityCheck||!r?`${g}/${await NS(de)}`:r;if(Ee!==null){let he=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await NS(Ee)}`:r;if(me!==he)throw new Jt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&me!==r&&(this.check?De="throw":s2(r).cacheKey!==s2(me).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:me};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new Jt(18,"The remote archive doesn't match the expected checksum")}},I=async de=>{if(!n)throw new Error(`Cache check required but no loader configured for ${qr(this.configuration,e)}`);let Ie=await n(),Ee=Ie.getRealPath();Ie.saveAndClose(),await oe.chmodPromise(Ee,420);let g=await E(de,{controlPath:Ee,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let de=await n(),Ie=de.getRealPath();return de.saveAndClose(),{source:"loader",path:Ie}}return{source:"mirror",path:A}},x=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${qr(this.configuration,e)}`);if(this.immutable)throw new Jt(56,`Cache entry required but missing for ${qr(this.configuration,e)}`);let{path:de,source:Ie}=await v(),{hash:Ee}=await E(de,{isColdHit:!0}),g=this.getLocatorPath(e,Ee),me=[];Ie!=="mirror"&&A!==null&&me.push(async()=>{let he=`${A}${this.cacheId}`;await oe.copyFilePromise(de,he,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(he,420),await oe.renamePromise(he,A)}),(!u.mirrorWriteOnly||A===null)&&me.push(async()=>{let he=`${g}${this.cacheId}`;await oe.copyFilePromise(de,he,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(he,420),await oe.renamePromise(he,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(me.map(he=>he())),[!1,De,Ee]},C=async()=>{let Ie=(async()=>{let Ee=u.unstablePackages?.has(e.locatorHash),g=Ee||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,me=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!me),he=De||me,ne=he?o:a;if(ne&&ne(),he){let ee=null,Be=g;if(!De)if(this.check)ee=await I(Be);else{let Te=await E(Be,{isColdHit:!1});if(Te.isValid)ee=Te.hash;else return x()}return[De,Be,ee]}else{if(this.immutable&&Ee)throw new Jt(56,`Cache entry required but missing for ${qr(this.configuration,e)}; consider defining ${fe.pretty(this.configuration,"supportedArchitectures",fe.Type.CODE)} to cache packages for multiple systems`);return x()}})();this.mutexes.set(e.locatorHash,Ie);try{return await Ie}finally{this.mutexes.delete(e.locatorHash)}};for(let de;de=this.mutexes.get(e.locatorHash);)await de;let[F,N,U]=await C();F||this.markedFiles.add(N);let V,te=F?()=>h():()=>new Xi(N,{baseFs:p,readOnly:!0}),le=new ny(()=>wN(()=>V=te(),de=>`Failed to open the cache entry for ${qr(this.configuration,e)}: ${de}`),z),ae=new _u(N,{baseFs:le,pathUtils:z}),ce=()=>{V?.discardAndClose()},Ce=u.unstablePackages?.has(e.locatorHash)?null:U;return[ae,ce,Ce]}},aut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var Vx,ape=Et(()=>{Vx=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(Vx||{})});var lut,iC,A_=Et(()=>{Dt();Nl();Qf();So();lut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],iC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=z.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=s1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=xa(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,F]of lut){let N=I.match(C);if(N){v=F(E,...N);break}}if(!v){r.reportWarning(14,`${Gn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let x=h;try{let C=Bd(h.range),F=s1(C.selector,!0);F&&(x=F)}catch{}u.set(h.descriptorHash,Fs(x,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var fA,lpe=Et(()=>{Wl();M1();jl();fA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;XI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} `)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` `),this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. `),this.suggestInstall&&this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var aC,f_=Et(()=>{bo();aC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Kf(){}function lut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nx.length?R:x}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function cut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function uut(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 Ape(t,e,r){return r=uut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function Aut(t,e,r){return y_.diff(t,e,r)}function Vx(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Vx=function(e){return typeof e}:Vx=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vx(t)}function p_(t){return hut(t)||gut(t)||dut(t)||mut()}function hut(t){if(Array.isArray(t))return h_(t)}function gut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function dut(t,e){if(!!t){if(typeof t=="string")return h_(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 h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=Aut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(V){return" "+V})}for(var h=[],E=0,I=0,v=[],x=1,C=1,R=function(V){var te=A[V],ae=te.lines||te.value.replace(/\n$/,"").split(` -`);if(te.lines=ae,te.added||te.removed){var fe;if(!E){var ue=A[V-1];E=x,I=C,ue&&(v=u.context>0?p(ue.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(fe=v).push.apply(fe,p_(ae.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=ae.length:x+=ae.length}else{if(E)if(ae.length<=u.context*2&&V=A.length-2&&ae.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),Pe=ae.length==0&&v.length>we.oldLines;!g&&Pe&&r.length>0&&v.splice(we.oldLines,0,"\\ No newline at end of file"),(!g&&!Pe||!Ee)&&v.push("\\ No newline at end of file")}h.push(we),E=0,I=0,v=[]}x+=ae.length,C+=ae.length}},N=0;N{Kf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(R){return a?(setTimeout(function(){a(void 0,R)},0),!0):R}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function x(){for(var R=-1*h;R<=h;R+=2){var N=void 0,U=I[R-1],V=I[R+1],te=(V?V.newPos:0)-R;U&&(I[R-1]=void 0);var ae=U&&U.newPos+1=A&&te+1>=p)return u(lut(n,N.components,r,e,n.useLongestToken));I[R]=N}h++}if(a)(function R(){setTimeout(function(){if(h>E)return a();x()||R()},0)})();else for(;h<=E;){var C=x();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};s2.equals=function(t,e){return Kf.prototype.equals.call(s2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Kf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var hpe=_((o3t,ppe)=>{var Eut=ql(),Cut=pE(),wut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Iut=/^\w*$/;function But(t,e){if(Eut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Cut(t)?!0:Iut.test(t)||!wut.test(t)||e!=null&&t in Object(e)}ppe.exports=But});var mpe=_((a3t,dpe)=>{var gpe=UP(),vut="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(vut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||gpe),r}C_.Cache=gpe;dpe.exports=C_});var Epe=_((l3t,ype)=>{var Dut=mpe(),Put=500;function Sut(t){var e=Dut(t,function(o){return r.size===Put&&r.clear(),o}),r=e.cache;return e}ype.exports=Sut});var w_=_((c3t,Cpe)=>{var but=Epe(),xut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kut=/\\(\\)?/g,Qut=but(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(xut,function(r,o,a,n){e.push(a?n.replace(kut,"$1"):o||r)}),e});Cpe.exports=Qut});var jd=_((u3t,wpe)=>{var Fut=ql(),Rut=hpe(),Tut=w_(),Lut=L1();function Nut(t,e){return Fut(t)?t:Rut(t,e)?[t]:Tut(Lut(t))}wpe.exports=Nut});var lC=_((A3t,Ipe)=>{var Out=pE(),Mut=1/0;function Uut(t){if(typeof t=="string"||Out(t))return t;var e=t+"";return e=="0"&&1/t==-Mut?"-0":e}Ipe.exports=Uut});var Jx=_((f3t,Bpe)=>{var _ut=jd(),Hut=lC();function qut(t,e){e=_ut(e,t);for(var r=0,o=e.length;t!=null&&r{var Gut=tS(),jut=jd(),Yut=_I(),vpe=sl(),Wut=lC();function Kut(t,e,r,o){if(!vpe(t))return t;e=jut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var zut=Jx(),Vut=I_(),Jut=jd();function Xut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Zut(t,e){return t!=null&&e in Object(t)}bpe.exports=Zut});var B_=_((d3t,kpe)=>{var $ut=jd(),eAt=OI(),tAt=ql(),rAt=_I(),nAt=jP(),iAt=lC();function sAt(t,e,r){e=$ut(e,t);for(var o=-1,a=e.length,n=!1;++o{var oAt=xpe(),aAt=B_();function lAt(t,e){return t!=null&&aAt(t,e,oAt)}Qpe.exports=lAt});var Tpe=_((y3t,Rpe)=>{var cAt=Spe(),uAt=Fpe();function AAt(t,e){return cAt(t,e,function(r,o){return uAt(t,o)})}Rpe.exports=AAt});var Mpe=_((E3t,Ope)=>{var Lpe=hd(),fAt=OI(),pAt=ql(),Npe=Lpe?Lpe.isConcatSpreadable:void 0;function hAt(t){return pAt(t)||fAt(t)||!!(Npe&&t&&t[Npe])}Ope.exports=hAt});var Hpe=_((C3t,_pe)=>{var gAt=qP(),dAt=Mpe();function Upe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=dAt),a||(a=[]);++n0&&r(A)?e>1?Upe(A,e-1,r,o,a):gAt(a,A):o||(a[a.length]=A)}return a}_pe.exports=Upe});var Gpe=_((w3t,qpe)=>{var mAt=Hpe();function yAt(t){var e=t==null?0:t.length;return e?mAt(t,1):[]}qpe.exports=yAt});var v_=_((I3t,jpe)=>{var EAt=Gpe(),CAt=fN(),wAt=pN();function IAt(t){return wAt(CAt(t,void 0,EAt),t+"")}jpe.exports=IAt});var D_=_((B3t,Ype)=>{var BAt=Tpe(),vAt=v_(),DAt=vAt(function(t,e){return t==null?{}:BAt(t,e)});Ype.exports=DAt});var Xx,Wpe=Et(()=>{Wl();Xx=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,P_=Et(()=>{Wl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,cC,S_=Et(()=>{Pt();Kpe=$e(RS());fE();Dd();jl();ih();Qf();bo();cC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=z.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:tA(null,`${this.computeCandidateName()}-${Js(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:le.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=z.resolve(this.cwd,le.toPortablePath(n)),A=await oe.existsPromise(z.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${a1(this.project.configuration,this)} (${Ut(this.project.configuration,z.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&z.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=xa(a);return n?o===Xn.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":`${z.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&i1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=z.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} -`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function QAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,N=new Map(t.workspaces.map(ue=>{let me=ue.anchoredLocator.locatorHash,he=o.get(me);if(typeof he>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,e1(he)]})),U=()=>{let ue=oe.mktempSync(),me=z.join(ue,"stacktrace.log"),he=String(E.length+1).length,Be=E.map((we,g)=>`${`${g+1}.`.padStart(he," ")} ${ba(we)} -`).join("");throw oe.writeFileSync(me,Be),oe.detachTemp(ue),new Jt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${le.fromPortablePath(me)}`)},V=ue=>{let me=r.get(ue.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let he=o.get(me);if(!he)throw new Error("Assertion failed: The package could not be found");return he},te=(ue,me,he,{top:Be,optional:we})=>{E.length>1e3&&U(),E.push(me);let g=ae(ue,me,he,{top:Be,optional:we});return E.pop(),g},ae=(ue,me,he,{top:Be,optional:we})=>{if(we||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=o.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${qr(t.configuration,me)}) should have been registered`);let Ee=[],Pe=[],ce=[],ne=[],ee=[];for(let Fe of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Fe.identHash)&&g.locatorHash!==Be)continue;if(bf(Fe))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(Fe.descriptorHash);let At=we;if(!At){let Te=g.dependenciesMeta.get(fn(Fe));if(typeof Te<"u"){let Ve=Te.get(null);typeof Ve<"u"&&Ve.optional&&(At=!0)}}let H=r.get(Fe.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${Gn(t.configuration,Fe)}) should have been registered`);let at=N.get(H)||o.get(H);if(!at)throw new Error(`Assertion failed: The package (${H}, resolved from ${Gn(t.configuration,Fe)}) should have been registered`);if(at.peerDependencies.size===0){te(Fe,at,new Map,{top:Be,optional:At});continue}let Re,ke,xe=new Set,He;Pe.push(()=>{Re=tM(Fe,me.locatorHash),ke=rM(at,me.locatorHash),g.dependencies.delete(Fe.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,ke.locatorHash),e.set(Re.descriptorHash,Re),o.set(ke.locatorHash,ke),Ee.push([at,Re,ke])}),ce.push(()=>{He=new Map;for(let Te of ke.peerDependencies.values()){let Ve=g.dependencies.get(Te.identHash);if(!Ve&&n1(me,Te)&&(ue.identHash===me.identHash?Ve=ue:(Ve=In(me,ue.range),e.set(Ve.descriptorHash,Ve),r.set(Ve.descriptorHash,me.locatorHash),p.delete(Ve.descriptorHash))),(!Ve||Ve.range==="missing:")&&ke.dependencies.has(Te.identHash)){ke.peerDependencies.delete(Te.identHash);continue}Ve||(Ve=In(Te,"missing:")),ke.dependencies.set(Ve.identHash,Ve),bf(Ve)&&yd(x,Ve.descriptorHash).add(ke.locatorHash),I.set(Ve.identHash,Ve),Ve.range==="missing:"&&xe.add(Ve.identHash),He.set(Te.identHash,he.get(Te.identHash)??ke.locatorHash)}ke.dependencies=new Map(ks(ke.dependencies,([Te,Ve])=>fn(Ve)))}),ne.push(()=>{if(!o.has(ke.locatorHash))return;let Te=h.get(at.locatorHash);typeof Te=="number"&&Te>=2&&U();let Ve=h.get(at.locatorHash),qe=typeof Ve<"u"?Ve+1:1;h.set(at.locatorHash,qe),te(Re,ke,He,{top:Be,optional:At}),h.set(at.locatorHash,qe-1)}),ee.push(()=>{let Te=g.dependencies.get(Fe.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Ve=r.get(Te.descriptorHash);if(typeof Ve>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(yd(R,Ve).add(me.locatorHash),!!o.has(ke.locatorHash)){for(let qe of ke.peerDependencies.values()){let b=He.get(qe.identHash);if(typeof b>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Yy(Wy(C,b),fn(qe)).push(ke.locatorHash)}for(let qe of xe)ke.dependencies.delete(qe)}})}for(let Fe of[...Pe,...ce])Fe();let Ie;do{Ie=!0;for(let[Fe,At,H]of Ee){let at=Wy(v,Fe.locatorHash),Re=Js(...[...H.dependencies.values()].map(Te=>{let Ve=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Ve>"u")throw new Error(`Assertion failed: Expected the resolution for ${Gn(t.configuration,Te)} to have been registered`);return Ve===Be?`${Ve} (top)`:Ve}),At.identHash),ke=at.get(Re);if(typeof ke>"u"){at.set(Re,At);continue}if(ke===At)continue;o.delete(H.locatorHash),e.delete(At.descriptorHash),r.delete(At.descriptorHash),a.delete(H.locatorHash);let xe=x.get(At.descriptorHash)||[],He=[g.locatorHash,...xe];x.delete(At.descriptorHash);for(let Te of He){let Ve=o.get(Te);typeof Ve>"u"||(Ve.dependencies.get(At.identHash).descriptorHash!==ke.descriptorHash&&(Ie=!1),Ve.dependencies.set(At.identHash,ke))}}}while(!Ie);for(let Fe of[...ne,...ee])Fe()};for(let ue of t.workspaces){let me=ue.anchoredLocator;p.delete(ue.anchoredDescriptor.descriptorHash),te(ue.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}let fe=new Map;for(let[ue,me]of R){let he=o.get(ue);if(typeof he>"u")throw new Error("Assertion failed: Expected the root to be registered");let Be=C.get(ue);if(!(typeof Be>"u"))for(let we of me){let g=o.get(we);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,Pe]of Be){let ce=Vs(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${Js(we,Ee,ue).slice(0,5)}`;u.set(ne,{subject:we,requested:ce,rootRequester:ue,allRequesters:Pe});let ee=he.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=V(ee),Fe=Ie.version??"0.0.0",At=new Set;for(let at of Pe){let Re=o.get(at);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let ke=Re.peerDependencies.get(ce.identHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the ident to be registered");At.add(ke.range)}if(![...At].every(at=>{if(at.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;at=at.slice(Xn.protocol.length),(at==="^"||at==="~")&&(at="*")}return kf(Fe,at)})){let at=al(fe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:Fe,hash:`p${Ie.locatorHash.slice(0,5)}`}));at.dependents.set(g.locatorHash,g),at.requesters.set(he.locatorHash,he);for(let Re of Pe)at.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:he,version:Fe,hash:ne,requirementCount:Pe.length})}}else he.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:he,hash:ne})}}}A.push(...fe.values())}function FAt(t,e){let r=IN(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=sM(u),h=p?cE(t.configuration,p):Ut(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${o1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ut(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${qr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ut(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ut(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ut(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>Xy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>Xy.default(u)))e.reportWarning(2,n)})}var Zx,$x,ek,Jpe,k_,x_,Q_,tk,PAt,SAt,zpe,bAt,xAt,kAt,hl,b_,rk,Vpe,St,Xpe=Et(()=>{Pt();Pt();Nl();qt();Zx=ve("crypto");E_();$x=$e(D_()),ek=$e(sd()),Jpe=$e(Jn()),k_=ve("util"),x_=$e(ve("v8")),Q_=$e(ve("zlib"));u_();P1();A_();f_();fE();uM();Wl();Wpe();O1();P_();Dd();S_();WS();jl();ih();Gl();vb();BU();Qf();bo();tk=Vy(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),PAt=3,SAt=/ *, */g,zpe=/\/$/,bAt=32,xAt=(0,k_.promisify)(Q_.default.gzip),kAt=(0,k_.promisify)(Q_.default.gunzip),hl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(hl||{}),b_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},rk=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(rk||{}),Vpe=t=>Js(`${PAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(z.join(n,dr.manifest))){o=n;break}a=z.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((C,R)=>C+R.manifest.dependencies.size+R.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ut(e,u.cwd,yt.PATH),E=Ut(e,z.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,x=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ut(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ut(e,u.cwd,yt.PATH)}. +`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var sC,f_=Et(()=>{So();sC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(MS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(MS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Kf(){}function cut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nx.length?F:x}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function uut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function Aut(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 Ape(t,e,r){return r=Aut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function fut(t,e,r){return y_.diff(t,e,r)}function Jx(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Jx=function(e){return typeof e}:Jx=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jx(t)}function p_(t){return gut(t)||dut(t)||mut(t)||yut()}function gut(t){if(Array.isArray(t))return h_(t)}function dut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function mut(t,e){if(!!t){if(typeof t=="string")return h_(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 h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=fut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(V){return" "+V})}for(var h=[],E=0,I=0,v=[],x=1,C=1,F=function(V){var te=A[V],le=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=le,te.added||te.removed){var ae;if(!E){var ce=A[V-1];E=x,I=C,ce&&(v=u.context>0?p(ce.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(ae=v).push.apply(ae,p_(le.map(function(he){return(te.added?"+":"-")+he}))),te.added?C+=le.length:x+=le.length}else{if(E)if(le.length<=u.context*2&&V=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),me=/\n$/.test(o),De=le.length==0&&v.length>Ee.oldLines;!g&&De&&r.length>0&&v.splice(Ee.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!me)&&v.push("\\ No newline at end of file")}h.push(Ee),E=0,I=0,v=[]}x+=le.length,C+=le.length}},N=0;N{Kf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(F){return a?(setTimeout(function(){a(void 0,F)},0),!0):F}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function x(){for(var F=-1*h;F<=h;F+=2){var N=void 0,U=I[F-1],V=I[F+1],te=(V?V.newPos:0)-F;U&&(I[F-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(cut(n,N.components,r,e,n.useLongestToken));I[F]=N}h++}if(a)(function F(){setTimeout(function(){if(h>E)return a();x()||F()},0)})();else for(;h<=E;){var C=x();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};o2.equals=function(t,e){return Kf.prototype.equals.call(o2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Kf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var hpe=_((l3t,ppe)=>{var Cut=ql(),wut=AE(),Iut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,But=/^\w*$/;function vut(t,e){if(Cut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||wut(t)?!0:But.test(t)||!Iut.test(t)||e!=null&&t in Object(e)}ppe.exports=vut});var mpe=_((c3t,dpe)=>{var gpe=_D(),Put="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(Put);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||gpe),r}C_.Cache=gpe;dpe.exports=C_});var Epe=_((u3t,ype)=>{var Dut=mpe(),Sut=500;function but(t){var e=Dut(t,function(o){return r.size===Sut&&r.clear(),o}),r=e.cache;return e}ype.exports=but});var w_=_((A3t,Cpe)=>{var xut=Epe(),kut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Qut=/\\(\\)?/g,Rut=xut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(kut,function(r,o,a,n){e.push(a?n.replace(Qut,"$1"):o||r)}),e});Cpe.exports=Rut});var Gd=_((f3t,wpe)=>{var Fut=ql(),Tut=hpe(),Lut=w_(),Nut=N1();function Out(t,e){return Fut(t)?t:Tut(t,e)?[t]:Lut(Nut(t))}wpe.exports=Out});var oC=_((p3t,Ipe)=>{var Mut=AE(),Uut=1/0;function _ut(t){if(typeof t=="string"||Mut(t))return t;var e=t+"";return e=="0"&&1/t==-Uut?"-0":e}Ipe.exports=_ut});var Xx=_((h3t,Bpe)=>{var Hut=Gd(),qut=oC();function Gut(t,e){e=Hut(e,t);for(var r=0,o=e.length;t!=null&&r{var jut=rS(),Yut=Gd(),Wut=MI(),vpe=sl(),Kut=oC();function zut(t,e,r,o){if(!vpe(t))return t;e=Yut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Vut=Xx(),Jut=I_(),Xut=Gd();function Zut(t,e,r){for(var o=-1,a=e.length,n={};++o{function $ut(t,e){return t!=null&&e in Object(t)}bpe.exports=$ut});var B_=_((y3t,kpe)=>{var eAt=Gd(),tAt=LI(),rAt=ql(),nAt=MI(),iAt=YD(),sAt=oC();function oAt(t,e,r){e=eAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var aAt=xpe(),lAt=B_();function cAt(t,e){return t!=null&&lAt(t,e,aAt)}Qpe.exports=cAt});var Tpe=_((C3t,Fpe)=>{var uAt=Spe(),AAt=Rpe();function fAt(t,e){return uAt(t,e,function(r,o){return AAt(t,o)})}Fpe.exports=fAt});var Mpe=_((w3t,Ope)=>{var Lpe=hd(),pAt=LI(),hAt=ql(),Npe=Lpe?Lpe.isConcatSpreadable:void 0;function gAt(t){return hAt(t)||pAt(t)||!!(Npe&&t&&t[Npe])}Ope.exports=gAt});var Hpe=_((I3t,_pe)=>{var dAt=GD(),mAt=Mpe();function Upe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=mAt),a||(a=[]);++n0&&r(A)?e>1?Upe(A,e-1,r,o,a):dAt(a,A):o||(a[a.length]=A)}return a}_pe.exports=Upe});var Gpe=_((B3t,qpe)=>{var yAt=Hpe();function EAt(t){var e=t==null?0:t.length;return e?yAt(t,1):[]}qpe.exports=EAt});var v_=_((v3t,jpe)=>{var CAt=Gpe(),wAt=pN(),IAt=hN();function BAt(t){return IAt(wAt(t,void 0,CAt),t+"")}jpe.exports=BAt});var P_=_((P3t,Ype)=>{var vAt=Tpe(),PAt=v_(),DAt=PAt(function(t,e){return t==null?{}:vAt(t,e)});Ype.exports=DAt});var Zx,Wpe=Et(()=>{Wl();Zx=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,D_=Et(()=>{Wl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,aC,S_=Et(()=>{Dt();Kpe=Ze(TS());uE();vd();jl();ih();Qf();So();aC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=z.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:tA(null,`${this.computeCandidateName()}-${zi(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Fs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=z.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(z.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${a1(this.project.configuration,this)} (${Ut(this.project.configuration,z.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&z.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=xa(a);return n?o===Xn.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":`${z.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&i1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=z.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function RAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],peerRequirementNodes:p=new Map,volatileDescriptors:h=new Set}){let E=new Map,I=[],v=new Map,x=new Map,C=new Map,F=new Map,N=new Map(t.workspaces.map(ae=>{let ce=ae.anchoredLocator.locatorHash,Ce=o.get(ce);if(typeof Ce>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ce,e1(Ce)]})),U=()=>{let ae=oe.mktempSync(),ce=z.join(ae,"stacktrace.log"),Ce=String(I.length+1).length,de=I.map((Ie,Ee)=>`${`${Ee+1}.`.padStart(Ce," ")} ${ba(Ie)} +`).join("");throw oe.writeFileSync(ce,de),oe.detachTemp(ae),new Jt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ce)}`)},V=ae=>{let ce=r.get(ae.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let Ce=o.get(ce);if(!Ce)throw new Error("Assertion failed: The package could not be found");return Ce},te=(ae,ce,Ce,{top:de,optional:Ie})=>{I.length>1e3&&U(),I.push(ce);let Ee=le(ae,ce,Ce,{top:de,optional:Ie});return I.pop(),Ee},le=(ae,ce,Ce,{top:de,optional:Ie})=>{if(Ie||n.delete(ce.locatorHash),a.has(ce.locatorHash))return;a.add(ce.locatorHash);let Ee=o.get(ce.locatorHash);if(!Ee)throw new Error(`Assertion failed: The package (${qr(t.configuration,ce)}) should have been registered`);let g=[],me=new Map,De=[],he=[],ne=[],ee=[];for(let Te of Array.from(Ee.dependencies.values())){if(Ee.peerDependencies.has(Te.identHash)&&Ee.locatorHash!==de)continue;if(bf(Te))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");h.delete(Te.descriptorHash);let ht=Ie;if(!ht){let be=Ee.dependenciesMeta.get(rn(Te));if(typeof be<"u"){let $e=be.get(null);typeof $e<"u"&&$e.optional&&(ht=!0)}}let H=r.get(Te.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${Gn(t.configuration,Te)}) should have been registered`);let at=N.get(H)||o.get(H);if(!at)throw new Error(`Assertion failed: The package (${H}, resolved from ${Gn(t.configuration,Te)}) should have been registered`);if(at.peerDependencies.size===0){te(Te,at,new Map,{top:de,optional:ht});continue}let Re,Qe,xe=new Set,je=new Map;De.push(()=>{Re=tM(Te,ce.locatorHash),Qe=rM(at,ce.locatorHash),Ee.dependencies.delete(Te.identHash),Ee.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),g.push([at,Re,Qe])}),he.push(()=>{F.set(Qe.locatorHash,je);for(let be of Qe.peerDependencies.values()){let _e=al(me,be.identHash,()=>{let b=Ce.get(be.identHash)??null,w=Ee.dependencies.get(be.identHash);return!w&&n1(ce,be)&&(ae.identHash===ce.identHash?w=ae:(w=In(ce,ae.range),e.set(w.descriptorHash,w),r.set(w.descriptorHash,ce.locatorHash),h.delete(w.descriptorHash),b=null)),w||(w=In(be,"missing:")),{subject:ce,ident:be,provided:w,root:!b,requests:new Map,hash:`p${zi(ce.locatorHash,be.identHash).slice(0,5)}`}}).provided;if(_e.range==="missing:"&&Qe.dependencies.has(be.identHash)){Qe.peerDependencies.delete(be.identHash);continue}je.set(be.identHash,{requester:Qe,descriptor:be,meta:Qe.peerDependenciesMeta.get(rn(be)),children:new Map}),Qe.dependencies.set(be.identHash,_e),bf(_e)&&jy(C,_e.descriptorHash).add(Qe.locatorHash),v.set(_e.identHash,_e),_e.range==="missing:"&&xe.add(_e.identHash)}Qe.dependencies=new Map(Rs(Qe.dependencies,([be,$e])=>rn($e)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let be=E.get(at.locatorHash);typeof be=="number"&&be>=2&&U();let $e=E.get(at.locatorHash),_e=typeof $e<"u"?$e+1:1;E.set(at.locatorHash,_e),te(Re,Qe,je,{top:de,optional:ht}),E.set(at.locatorHash,_e-1)}),ee.push(()=>{let be=Ee.dependencies.get(Te.identHash);if(typeof be>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let $e=r.get(be.descriptorHash);if(typeof $e>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let _e=F.get($e);if(typeof _e>"u")throw new Error("Assertion failed: Expected the peer requests to be registered");for(let b of me.values()){let w=_e.get(b.ident.identHash);!w||(b.requests.set(be.descriptorHash,w),p.set(b.hash,b),b.root||Ce.get(b.ident.identHash)?.children.set(be.descriptorHash,w))}if(!!o.has(Qe.locatorHash))for(let b of xe)Qe.dependencies.delete(b)})}for(let Te of[...De,...he])Te();let Be;do{Be=!0;for(let[Te,ht,H]of g){let at=KI(x,Te.locatorHash),Re=zi(...[...H.dependencies.values()].map(be=>{let $e=be.range!=="missing:"?r.get(be.descriptorHash):"missing:";if(typeof $e>"u")throw new Error(`Assertion failed: Expected the resolution for ${Gn(t.configuration,be)} to have been registered`);return $e===de?`${$e} (top)`:$e}),ht.identHash),Qe=at.get(Re);if(typeof Qe>"u"){at.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let xe=C.get(ht.descriptorHash)||[],je=[Ee.locatorHash,...xe];C.delete(ht.descriptorHash);for(let be of je){let $e=o.get(be);typeof $e>"u"||($e.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Be=!1),$e.dependencies.set(ht.identHash,Qe))}for(let be of me.values())be.provided.descriptorHash===ht.descriptorHash&&(be.provided=Qe)}}while(!Be);for(let Te of[...ne,...ee])Te()};for(let ae of t.workspaces){let ce=ae.anchoredLocator;h.delete(ae.anchoredDescriptor.descriptorHash),te(ae.anchoredDescriptor,ce,new Map,{top:ce.locatorHash,optional:!1})}for(let ae of p.values()){if(!ae.root)continue;let ce=o.get(ae.subject.locatorHash);if(typeof ce>"u")continue;for(let de of ae.requests.values()){let Ie=`p${zi(ae.subject.locatorHash,rn(ae.ident),de.requester.locatorHash).slice(0,5)}`;u.set(Ie,{subject:ae.subject.locatorHash,requested:ae.ident,rootRequester:de.requester.locatorHash,allRequesters:Array.from(l1(de),Ee=>Ee.requester.locatorHash)})}let Ce=[...l1(ae)];if(ae.provided.range!=="missing:"){let de=V(ae.provided),Ie=de.version??"0.0.0",Ee=me=>{if(me.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(de))return null;me=me.slice(Xn.protocol.length),(me==="^"||me==="~")&&(me="*")}return me},g=!0;for(let me of Ce){let De=Ee(me.descriptor.range);if(De===null){g=!1;continue}if(!kf(Ie,De)){g=!1;let he=`p${zi(ae.subject.locatorHash,rn(ae.ident),me.requester.locatorHash).slice(0,5)}`;A.push({type:1,subject:ce,requested:ae.ident,requester:me.requester,version:Ie,hash:he,requirementCount:Ce.length})}}if(!g){let me=Ce.map(De=>Ee(De.descriptor.range));A.push({type:3,node:ae,range:me.includes(null)?null:sM(me),hash:ae.hash})}}else{let de=!0;for(let Ie of Ce)if(!Ie.meta?.optional){de=!1;let Ee=`p${zi(ae.subject.locatorHash,rn(ae.ident),Ie.requester.locatorHash).slice(0,5)}`;A.push({type:0,subject:ce,requested:ae.ident,requester:Ie.requester,hash:Ee})}de||A.push({type:2,node:ae,hash:ae.hash})}}}function FAt(t,e){let r=[],o=[],a=!1;for(let n of t.peerWarnings)if(!(n.type===1||n.type===0)){if(!t.tryWorkspaceByLocator(n.node.subject)){a=!0;continue}if(n.type===3){let u=t.storedResolutions.get(n.node.provided.descriptorHash);if(typeof u>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let A=t.storedPackages.get(u);if(typeof A>"u")throw new Error("Assertion failed: Expected the package to be registered");let p=[...l1(n.node)].length>1?"and other dependencies request":"requests",h=n.range?aE(t.configuration,n.range):Ut(t.configuration,"but they have non-overlapping ranges!","redBright");r.push(`${us(t.configuration,n.node.ident)} is listed by your project with version ${o1(t.configuration,A.version??"0.0.0")} (${Ut(t.configuration,n.hash,yt.CODE)}), which doesn't satisfy what ${us(t.configuration,n.node.requests.values().next().value.requester)} ${p} (${h}).`)}if(n.type===2){let u=n.node.requests.size>1?" and other dependencies":"";o.push(`${qr(t.configuration,n.node.subject)} doesn't provide ${us(t.configuration,n.node.ident)} (${Ut(t.configuration,n.hash,yt.CODE)}), requested by ${us(t.configuration,n.node.requests.values().next().value.requester)}${u}.`)}}e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met by your project; run ${Ut(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ut(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of Rs(r,u=>Vy.default(u)))e.reportWarning(60,n);for(let n of Rs(o,u=>Vy.default(u)))e.reportWarning(2,n)}),a&&e.reportWarning(86,`Some peer dependencies are incorrectly met by dependencies; run ${Ut(t.configuration,"yarn explain peer-requirements",yt.CODE)} for details.`)}var $x,ek,tk,Jpe,k_,x_,Q_,rk,SAt,bAt,zpe,xAt,kAt,QAt,hl,b_,nk,Vpe,St,Xpe=Et(()=>{Dt();Dt();Nl();qt();$x=ve("crypto");E_();ek=Ze(P_()),tk=Ze(sd()),Jpe=Ze(Jn()),k_=ve("util"),x_=Ze(ve("v8")),Q_=Ze(ve("zlib"));u_();S1();A_();f_();uE();uM();Wl();Wpe();M1();D_();vd();S_();KS();jl();ih();Gl();Pb();BU();Qf();So();rk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),SAt=3,bAt=/ *, */g,zpe=/\/$/,xAt=32,kAt=(0,k_.promisify)(Q_.default.gzip),QAt=(0,k_.promisify)(Q_.default.gunzip),hl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(hl||{}),b_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},nk=(a=>(a[a.NotProvided=0]="NotProvided",a[a.NotCompatible=1]="NotCompatible",a[a.NodeNotProvided=2]="NodeNotProvided",a[a.NodeNotCompatible=3]="NodeNotCompatible",a))(nk||{}),Vpe=t=>zi(`${SAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.peerRequirementNodes=new Map;this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(z.join(n,dr.manifest))){o=n;break}a=z.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((C,F)=>C+F.manifest.dependencies.size+F.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ut(e,u.cwd,yt.PATH),E=Ut(e,z.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,x=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ut(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ut(e,u.cwd,yt.PATH)}. ${[I,v,x].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=z.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=Vpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Ot;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,x=p.linkType.toUpperCase(),C=p.conditions??null,R=E.dependencies,N=E.peerDependencies,U=E.dependenciesMeta,V=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let fe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,fe)}let ae={...h,version:I,languageName:v,linkType:x,conditions:C,dependencies:R,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:V,bin:te};this.originalPackages.set(ae.locatorHash,ae);for(let fe of A.split(SAt)){let ue=sh(fe);n<=6&&(ue=this.configuration.normalizeDependency(ue),ue=In(ue,ue.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ue.descriptorHash,ue),this.storedResolutions.set(ue.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,ek.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new cC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${le.fromPortablePath(e.cwd)} conflicts with ${le.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){z.isAbsolute(e)||(e=z.resolve(this.cwd,e)),e=z.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)z.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!xa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(bf(e)&&(e=t1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Gn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(qc(e)&&(e=r1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${qr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)bf(o)&&e.dependencies.set(r,t1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(zpe,"")!==e.replace(zpe,""))continue;return A}}return null}async loadUserConfig(){let e=z.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&Df(e).setup();let r=z.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?Df(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!n1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new oC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Xx(a)]:[n,a],A=new Pd([new aC(a),...u]),p=new Pd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,V=new Set,te=[],ae=M4(),fe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let at=await Ky(async()=>await A.resolve(H,E),He=>`${qr(this.configuration,H)}: ${He}`);if(!i1(H,at))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${qr(this.configuration,H)} to ${qr(this.configuration,at)})`);C.set(at.locatorHash,at),!r.delete(at.locatorHash)&&!this.tryWorkspaceByLocator(at)&&o.push(at);let ke=await this.preparePackage(at,{resolver:A,resolveOptions:E}),xe=_c([...ke.dependencies.values()].map(He=>At(He)));return te.push(xe),xe.catch(()=>{}),v.set(ke.locatorHash,ke),ke},ee=async H=>{let at=R.get(H.locatorHash);if(typeof at<"u")return at;let Re=Promise.resolve().then(()=>ne(H));return R.set(H.locatorHash,Re),Re},Ie=async(H,at)=>{let Re=await At(at);return I.set(H.descriptorHash,H),x.set(H.descriptorHash,Re.locatorHash),Re},Fe=async H=>{ce.setTitle(Gn(this.configuration,H));let at=this.resolutionAliases.get(H.descriptorHash);if(typeof at<"u")return Ie(H,this.storedDescriptors.get(at));let Re=A.getResolutionDependencies(H,E),ke=Object.fromEntries(await _c(Object.entries(Re).map(async([Te,Ve])=>{let qe=A.bindDescriptor(Ve,U,E),b=await At(qe);return V.add(b.locatorHash),[Te,b]}))),He=(await Ky(async()=>await A.getCandidates(H,ke,E),Te=>`${Gn(this.configuration,H)}: ${Te}`))[0];if(typeof He>"u")throw new Jt(82,`${Gn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,ke,[He],{...E,resolver:p});if(!Te.find(Ve=>Ve.locatorHash===He.locatorHash))throw new Jt(78,`Invalid resolution ${ZI(this.configuration,H,He)}`)}return I.set(H.descriptorHash,H),x.set(H.descriptorHash,He.locatorHash),ee(He)},At=H=>{let at=N.get(H.descriptorHash);if(typeof at<"u")return at;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>Fe(H));return N.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let at=H.anchoredDescriptor;te.push(At(at))}for(;te.length>0;){let H=[...te];te.length=0,await _c(H)}});let ue=ol(r.values(),ce=>this.tryWorkspaceByLocator(ce)?ol.skip:ce);if(o.length>0||ue.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let at=v.get(H.anchoredLocator.locatorHash);if(!at)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(at.dependencies.values(),Re=>{let ke=x.get(Re.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>ba(H),Ie=ks(o,[ne,ee]),Fe=ks(ue,[ne,ee]),At=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"+",yt.ADDED)} ${lS(this.configuration,Ie,At)}`),Fe.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"-",yt.REMOVED)} ${lS(this.configuration,Fe,At)}`)}let me=new Set(this.resolutionAliases.values()),he=new Set(v.keys()),Be=new Set,we=new Map,g=[];QAt({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:he,peerRequirements:we,peerWarnings:g,allDescriptors:I,allResolutions:x,allPackages:v});for(let ce of V)he.delete(ce);for(let ce of me)I.delete(ce),x.delete(ce);let Ee=new Set,Pe=new Set;for(let ce of v.values())ce.conditions!=null&&(!he.has(ce.locatorHash)||(qS(ce,fe)||(qS(ce,ae)&&e.report.reportWarningOnce(77,`${qr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ut(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),Pe.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=x,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Be,this.conditionalLocators=Ee,this.disabledLocators=Pe,this.originalPackages=C,this.optionalBuilds=he,this.peerRequirements=we,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");return ba(R)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,ek.default)(bAt);if(await _c(h.map(C=>v(async()=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");if(qc(R))return;let N;try{N=await A.fetch(R,p)}catch(U){U.message=`${qr(this.configuration,R)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}N.checksum!=null?this.storedChecksums.set(R.locatorHash,N.checksum):this.storedChecksums.delete(R.locatorHash),N.releaseFs&&N.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let x=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||x){let R=(await Promise.all([...r.cacheMisses].map(async ue=>{let me=this.storedPackages.get(ue),he=this.storedChecksums.get(ue)??null,Be=e.getLocatorPath(me,he);return(await oe.statPromise(Be)).size}))).reduce((ue,me)=>ue+me,0)-(x?.size??0),N=r.cacheMisses.size,U=x?.count??0,V=`${rS(N,{zero:"No new packages",one:"A package was",more:`${Ut(this.configuration,N,yt.NUMBER)} packages were`})} added to the project`,te=`${rS(U,{zero:"none were",one:"one was",more:`${Ut(this.configuration,U,yt.NUMBER)} were`})} removed`,ae=R!==0?` (${Ut(this.configuration,R,yt.SIZE_DIFF)})`:"",fe=U>0?N>0?`${V}, and ${te}${ae}.`:`${V}, but ${te}${ae}.`:`${V}${ae}.`;r.reportInfo(13,fe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,x=new Map,C=new Map(await _c([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),R=[],N=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],Fe=H=>{Ie.push(H)},At=this.tryWorkspaceByLocator(ne);if(At!==null){let H=[],{scripts:at}=At.manifest;for(let ke of["preinstall","install","postinstall"])at.has(ke)&&H.push({type:0,script:ke});try{for(let[ke,xe]of E)if(ke.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:Fe})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():R.push(_c(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=z.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!qc(ne)&&H.length>0&&x.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(ke=>ke.supportsPackage(ne,h));if(!H)throw new Jt(12,`${qr(this.configuration,ne)} isn't supported by any available linker`);let at=E.get(H);if(!at)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await at.installPackage(ne,ee,{holdFetchResult:Fe})}finally{Ie.length===0?ee.releaseFs?.():R.push(_c(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(N.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):x.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let V=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(Fe,At)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${qr(this.configuration,ne)}) should have been registered`);let at=[];for(let Re of ne.dependencies.values()){let ke=this.storedResolutions.get(Re.descriptorHash);if(typeof ke>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Re)}, from ${qr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(ke);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);let He=this.tryWorkspaceByLocator(xe)===null?I.get(ke):null;if(typeof He>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);He===Fe||He===null?v.get(xe.locatorHash)!==null&&at.push([Re,xe]):!ee&&H!==null&&Yy(V,ke).push(H)}H!==null&&await At.attachInternalDependencies(ne,at)};if(ee)for(let[Fe,At]of E)Fe.supportsPackage(ne,h)&&await Ie(Fe,At);else{let Fe=I.get(ne.locatorHash);if(!Fe)throw new Error("Assertion failed: The linker should have been found");let At=E.get(Fe);if(!At)throw new Error("Assertion failed: The installer should have been registered");await Ie(Fe,At)}}for(let[ce,ne]of V){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let Fe=E.get(Ie);if(!Fe)throw new Error("Assertion failed: The installer should have been registered");await Fe.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(N.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):x.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await _c(R),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>ba(ne)))ce(r);let ae=new Set(this.storedPackages.keys()),fe=new Set(x.keys());for(let ce of fe)ae.delete(ce);let ue=(0,Zx.createHash)("sha512");ue.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{ue.update("\0"),ue.update(ce)});let me=ue.digest("hex"),he=new Map,Be=ce=>{let ne=he.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,Zx.createHash)("sha512");Ie.update(ce.locatorHash),he.set(ce.locatorHash,"");for(let Fe of ee.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(typeof At>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Fe)}) should have been registered`);let H=this.storedPackages.get(At);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(Be(H))}return ne=Ie.digest("hex"),he.set(ce.locatorHash,ne),ne},we=(ce,ne)=>{let ee=(0,Zx.createHash)("sha512");ee.update(me),ee.update(Be(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,Pe=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let Fe of Ie.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(!At)throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Fe)}) should have been registered`);if(At!==ce.locatorHash&&fe.has(At))return!1;let H=this.storedPackages.get(At);if(!H)throw new Error("Assertion failed: The package should have been registered");let at=this.tryWorkspaceByLocator(H);if(at){if(at.anchoredLocator.locatorHash!==ce.locatorHash&&fe.has(at.anchoredLocator.locatorHash))return!1;ne.add(at.anchoredLocator.locatorHash)}ne.add(At)}}return!0};for(;fe.size>0;){let ce=fe.size,ne=[];for(let ee of fe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!Pe(Ie))continue;let Fe=x.get(Ie.locatorHash);if(!Fe)throw new Error("Assertion failed: The build directive should have been registered");let At=we(Ie,Fe.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===At){g.set(Ie.locatorHash,At),fe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${qr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${qr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=Fe.buildLocations.map(async at=>{if(!z.isAbsolute(at))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${at})`);for(let Re of Fe.buildDirectives){let ke=`# This file contains the result of Yarn building a package (${ba(Ie)}) -`;switch(Re.type){case 0:ke+=`# Script name: ${Re.script} -`;break;case 1:ke+=`# Script code: ${Re.script} -`;break}let xe=null;if(!await oe.mktempPromise(async Te=>{let Ve=z.join(Te,"build.log"),{stdout:qe,stderr:b}=this.configuration.getSubprocessStreams(Ve,{header:ke,prefix:qr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Wb(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break;case 1:w=await EU(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break}}catch(F){b.write(F.stack),w=1}if(qe.end(),b.end(),w===0)return!0;oe.detachTemp(Te);let S=`${qr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ut(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ut(this.configuration,Ve,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),zce&&r.reportFold(le.fromPortablePath(Ve),oe.readFileSync(Ve,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(at=>{fe.delete(ee),at.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,At)}))}if(await _c(ne),ce===fe.size){let ee=Array.from(fe).map(Ie=>{let Fe=this.storedPackages.get(Ie);if(!Fe)throw new Error("Assertion failed: The package should have been registered");return qr(this.configuration,Fe)}).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: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Lt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=z.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.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()=>{FAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let x=Ut(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${x}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${x}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Hg(u,this.generateLockfile());if(E!==u){let I=fpe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let x of v.lines)x.startsWith("+")?e.report.reportError(28,Ut(this.configuration,x,yt.ADDED)):x.startsWith("-")?e.report.reportError(28,Ut(this.configuration,x,yt.REMOVED)):e.report.reportInfo(null,Ut(this.configuration,x,"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[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(Cd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>NS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ut(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>NS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Nr.getCacheKey(this.configuration);r.__metadata={version:tk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let I of u){let v=this.storedDescriptors.get(I);if(!v)throw new Error("Assertion failed: The descriptor should have been registered");p.push(v)}let h=p.map(I=>Sa(I)).sort().join(", "),E=new Ot;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:ba(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=z.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=Vpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Ot;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,x=p.linkType.toUpperCase(),C=p.conditions??null,F=E.dependencies,N=E.peerDependencies,U=E.dependenciesMeta,V=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let ae=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,ae)}let le={...h,version:I,languageName:v,linkType:x,conditions:C,dependencies:F,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:V,bin:te};this.originalPackages.set(le.locatorHash,le);for(let ae of A.split(bAt)){let ce=sh(ae);n<=6&&(ce=this.configuration.normalizeDependency(ce),ce=In(ce,ce.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ce.descriptorHash,ce),this.storedResolutions.set(ce.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,tk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new aC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${us(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.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){z.isAbsolute(e)||(e=z.resolve(this.cwd,e)),e=z.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)z.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${us(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!xa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(bf(e)&&(e=t1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Gn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(qc(e)&&(e=r1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${qr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)bf(o)&&e.dependencies.set(r,t1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(rn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(zpe,"")!==e.replace(zpe,""))continue;return A}}return null}async loadUserConfig(){let e=z.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&Pf(e).setup();let r=z.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?Pf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!n1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new iC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Zx(a)]:[n,a],A=new Pd([new sC(a),...u]),p=new Pd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,x=new Map,C=new Map,F=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,V=new Set,te=[],le=M4(),ae=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ne=>{let ee=async at=>{let Re=await Yy(async()=>await A.resolve(at,E),be=>`${qr(this.configuration,at)}: ${be}`);if(!i1(at,Re))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${qr(this.configuration,at)} to ${qr(this.configuration,Re)})`);C.set(Re.locatorHash,Re),!r.delete(Re.locatorHash)&&!this.tryWorkspaceByLocator(Re)&&o.push(Re);let xe=await this.preparePackage(Re,{resolver:A,resolveOptions:E}),je=_c([...xe.dependencies.values()].map(be=>H(be)));return te.push(je),je.catch(()=>{}),v.set(xe.locatorHash,xe),xe},Be=async at=>{let Re=F.get(at.locatorHash);if(typeof Re<"u")return Re;let Qe=Promise.resolve().then(()=>ee(at));return F.set(at.locatorHash,Qe),Qe},Te=async(at,Re)=>{let Qe=await H(Re);return I.set(at.descriptorHash,at),x.set(at.descriptorHash,Qe.locatorHash),Qe},ht=async at=>{ne.setTitle(Gn(this.configuration,at));let Re=this.resolutionAliases.get(at.descriptorHash);if(typeof Re<"u")return Te(at,this.storedDescriptors.get(Re));let Qe=A.getResolutionDependencies(at,E),xe=Object.fromEntries(await _c(Object.entries(Qe).map(async([$e,_e])=>{let b=A.bindDescriptor(_e,U,E),w=await H(b);return V.add(w.locatorHash),[$e,w]}))),be=(await Yy(async()=>await A.getCandidates(at,xe,E),$e=>`${Gn(this.configuration,at)}: ${$e}`))[0];if(typeof be>"u")throw new Jt(82,`${Gn(this.configuration,at)}: No candidates found`);if(e.checkResolutions){let{locators:$e}=await p.getSatisfying(at,xe,[be],{...E,resolver:p});if(!$e.find(_e=>_e.locatorHash===be.locatorHash))throw new Jt(78,`Invalid resolution ${ZI(this.configuration,at,be)}`)}return I.set(at.descriptorHash,at),x.set(at.descriptorHash,be.locatorHash),Be(be)},H=at=>{let Re=N.get(at.descriptorHash);if(typeof Re<"u")return Re;I.set(at.descriptorHash,at);let Qe=Promise.resolve().then(()=>ht(at));return N.set(at.descriptorHash,Qe),Qe};for(let at of this.workspaces){let Re=at.anchoredDescriptor;te.push(H(Re))}for(;te.length>0;){let at=[...te];te.length=0,await _c(at)}});let ce=ol(r.values(),ne=>this.tryWorkspaceByLocator(ne)?ol.skip:ne);if(o.length>0||ce.length>0){let ne=new Set(this.workspaces.flatMap(at=>{let Re=v.get(at.anchoredLocator.locatorHash);if(!Re)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(Re.dependencies.values(),Qe=>{let xe=x.get(Qe.descriptorHash);if(!xe)throw new Error("Assertion failed: The resolution should have been registered");return xe})})),ee=at=>ne.has(at.locatorHash)?"0":"1",Be=at=>ba(at),Te=Rs(o,[ee,Be]),ht=Rs(ce,[ee,Be]),H=e.report.getRecommendedLength();Te.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Te,H)}`),ht.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ht,H)}`)}let Ce=new Set(this.resolutionAliases.values()),de=new Set(v.keys()),Ie=new Set,Ee=new Map,g=[],me=new Map;RAt({project:this,accessibleLocators:Ie,volatileDescriptors:Ce,optionalBuilds:de,peerRequirements:Ee,peerWarnings:g,peerRequirementNodes:me,allDescriptors:I,allResolutions:x,allPackages:v});for(let ne of V)de.delete(ne);for(let ne of Ce)I.delete(ne),x.delete(ne);let De=new Set,he=new Set;for(let ne of v.values())ne.conditions!=null&&(!de.has(ne.locatorHash)||(GS(ne,ae)||(GS(ne,le)&&e.report.reportWarningOnce(77,`${qr(this.configuration,ne)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ut(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),he.add(ne.locatorHash)),De.add(ne.locatorHash)));this.storedResolutions=x,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Ie,this.conditionalLocators=De,this.disabledLocators=he,this.originalPackages=C,this.optionalBuilds=de,this.peerRequirements=Ee,this.peerWarnings=g,this.peerRequirementNodes=me}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(Rs(this.storedResolutions.values(),[C=>{let F=this.storedPackages.get(C);if(!F)throw new Error("Assertion failed: The locator should have been registered");return ba(F)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,tk.default)(xAt);if(await _c(h.map(C=>v(async()=>{let F=this.storedPackages.get(C);if(!F)throw new Error("Assertion failed: The locator should have been registered");if(qc(F))return;let N;try{N=await A.fetch(F,p)}catch(U){U.message=`${qr(this.configuration,F)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}N.checksum!=null?this.storedChecksums.set(F.locatorHash,N.checksum):this.storedChecksums.delete(F.locatorHash),N.releaseFs&&N.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let x=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||x){let F=(await Promise.all([...r.cacheMisses].map(async ce=>{let Ce=this.storedPackages.get(ce),de=this.storedChecksums.get(ce)??null,Ie=e.getLocatorPath(Ce,de);return(await oe.statPromise(Ie)).size}))).reduce((ce,Ce)=>ce+Ce,0)-(x?.size??0),N=r.cacheMisses.size,U=x?.count??0,V=`${nS(N,{zero:"No new packages",one:"A package was",more:`${Ut(this.configuration,N,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ut(this.configuration,U,yt.NUMBER)} were`})} removed`,le=F!==0?` (${Ut(this.configuration,F,yt.SIZE_DIFF)})`:"",ae=U>0?N>0?`${V}, and ${te}${le}.`:`${V}, but ${te}${le}.`:`${V}${le}.`;r.reportInfo(13,ae)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(he=>{let ne=he.makeInstaller(h),ee=he.getCustomDataKey(),Be=this.linkersCustomData.get(ee);return typeof Be<"u"&&ne.attachCustomData(Be),[he,ne]})),I=new Map,v=new Map,x=new Map,C=new Map(await _c([...this.accessibleLocators].map(async he=>{let ne=this.storedPackages.get(he);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[he,await u.fetch(ne,A)]}))),F=[],N=new Set,U=[];for(let he of this.accessibleLocators){let ne=this.storedPackages.get(he);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Be=[],Te=H=>{Be.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:at}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])at.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,xe]of E)if(Qe.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:Te})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Be.length===0?ee.releaseFs?.():F.push(_c(Be).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=z.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!qc(ne)&&H.length>0&&x.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new Jt(12,`${qr(this.configuration,ne)} isn't supported by any available linker`);let at=E.get(H);if(!at)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await at.installPackage(ne,ee,{holdFetchResult:Te})}finally{Be.length===0?ee.releaseFs?.():F.push(_c(Be).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(N.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):x.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let V=new Map;for(let he of this.accessibleLocators){let ne=this.storedPackages.get(he);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Be=async(Te,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${qr(this.configuration,ne)}) should have been registered`);let at=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Re)}, from ${qr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(Qe);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);let je=this.tryWorkspaceByLocator(xe)===null?I.get(Qe):null;if(typeof je>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);je===Te||je===null?v.get(xe.locatorHash)!==null&&at.push([Re,xe]):!ee&&H!==null&&WI(V,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,at)};if(ee)for(let[Te,ht]of E)Te.supportsPackage(ne,h)&&await Be(Te,ht);else{let Te=I.get(ne.locatorHash);if(!Te)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(Te);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Be(Te,ht)}}for(let[he,ne]of V){let ee=this.storedPackages.get(he);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Be=I.get(ee.locatorHash);if(!Be)throw new Error("Assertion failed: The linker should have been found");let Te=E.get(Be);if(!Te)throw new Error("Assertion failed: The installer should have been registered");await Te.attachExternalDependents(ee,ne)}let te=new Map;for(let[he,ne]of E){let ee=await ne.finalizeInstall();for(let Be of ee?.records??[])Be.buildRequest.skipped?(N.add(Be.locator.locatorHash),this.skippedBuilds.has(Be.locator.locatorHash)||U.push([Be.locator,Be.buildRequest.explain])):x.set(Be.locator.locatorHash,{buildDirectives:Be.buildRequest.directives,buildLocations:Be.buildLocations});typeof ee?.customData<"u"&&te.set(he.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await _c(F),a==="skip-build")return;for(let[,he]of Rs(U,([ne])=>ba(ne)))he(r);let le=new Set(this.storedPackages.keys()),ae=new Set(x.keys());for(let he of ae)le.delete(he);let ce=(0,$x.createHash)("sha512");ce.update(process.versions.node),await this.configuration.triggerHook(he=>he.globalHashGeneration,this,he=>{ce.update("\0"),ce.update(he)});let Ce=ce.digest("hex"),de=new Map,Ie=he=>{let ne=de.get(he.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(he.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Be=(0,$x.createHash)("sha512");Be.update(he.locatorHash),de.set(he.locatorHash,"");for(let Te of ee.dependencies.values()){let ht=this.storedResolutions.get(Te.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Te)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Be.update(Ie(H))}return ne=Be.digest("hex"),de.set(he.locatorHash,ne),ne},Ee=(he,ne)=>{let ee=(0,$x.createHash)("sha512");ee.update(Ce),ee.update(Ie(he));for(let Be of ne)ee.update(Be);return ee.digest("hex")},g=new Map,me=!1,De=he=>{let ne=new Set([he.locatorHash]);for(let ee of ne){let Be=this.storedPackages.get(ee);if(!Be)throw new Error("Assertion failed: The package should have been registered");for(let Te of Be.dependencies.values()){let ht=this.storedResolutions.get(Te.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Te)}) should have been registered`);if(ht!==he.locatorHash&&ae.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let at=this.tryWorkspaceByLocator(H);if(at){if(at.anchoredLocator.locatorHash!==he.locatorHash&&ae.has(at.anchoredLocator.locatorHash))return!1;ne.add(at.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;ae.size>0;){let he=ae.size,ne=[];for(let ee of ae){let Be=this.storedPackages.get(ee);if(!Be)throw new Error("Assertion failed: The package should have been registered");if(!De(Be))continue;let Te=x.get(Be.locatorHash);if(!Te)throw new Error("Assertion failed: The build directive should have been registered");let ht=Ee(Be,Te.buildLocations);if(this.storedBuildState.get(Be.locatorHash)===ht){g.set(Be.locatorHash,ht),ae.delete(ee);continue}me||(await this.persistInstallStateFile(),me=!0),this.storedBuildState.has(Be.locatorHash)?r.reportInfo(8,`${qr(this.configuration,Be)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${qr(this.configuration,Be)} must be built because it never has been before or the last one failed`);let H=Te.buildLocations.map(async at=>{if(!z.isAbsolute(at))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${at})`);for(let Re of Te.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${ba(Be)}) +`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} +`;break;case 1:Qe+=`# Script code: ${Re.script} +`;break}let xe=null;if(!await oe.mktempPromise(async be=>{let $e=z.join(be,"build.log"),{stdout:_e,stderr:b}=this.configuration.getSubprocessStreams($e,{header:Qe,prefix:qr(this.configuration,Be),report:r}),w;try{switch(Re.type){case 0:w=await Kb(Be,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:_e,stderr:b});break;case 1:w=await EU(Be,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:_e,stderr:b});break}}catch(R){b.write(R.stack),w=1}if(_e.end(),b.end(),w===0)return!0;oe.detachTemp(be);let S=`${qr(this.configuration,Be)} couldn't be built successfully (exit code ${Ut(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ut(this.configuration,$e,yt.PATH)})`,y=this.optionalBuilds.has(Be.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),zce&&r.reportFold(ue.fromPortablePath($e),oe.readFileSync($e,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(at=>{ae.delete(ee),at.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Be.locatorHash,ht)}))}if(await _c(ne),he===ae.size){let ee=Array.from(ae).map(Be=>{let Te=this.storedPackages.get(Be);if(!Te)throw new Error("Assertion failed: The package should have been registered");return qr(this.configuration,Te)}).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: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Ft.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");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=z.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.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()=>{FAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let x=Ut(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${x}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${x}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Hg(u,this.generateLockfile());if(E!==u){let I=fpe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let x of v.lines)x.startsWith("+")?e.report.reportError(28,Ut(this.configuration,x,yt.ADDED)):x.startsWith("-")?e.report.reportError(28,Ut(this.configuration,x,yt.REMOVED)):e.report.reportInfo(null,Ut(this.configuration,x,"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[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(Ed(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>OS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ut(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>OS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Nr.getCacheKey(this.configuration);r.__metadata={version:rk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let I of u){let v=this.storedDescriptors.get(I);if(!v)throw new Error("Assertion failed: The descriptor should have been registered");p.push(v)}let h=p.map(I=>Sa(I)).sort().join(", "),E=new Ot;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:ba(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. `,`# Manual changes might be lost - proceed with caution! `].join("")} -`+Ba(r)}async persistLockfile(){let e=z.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Hg(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=Vpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(b_))e.push(...u);let r=(0,$x.default)(this,e),o=x_.default.serialize(r),a=Js(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(z.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await xAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await kAt(await oe.readFilePromise(a));n=x_.default.deserialize(u),this.installStateChecksum=Js(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,$x.default)(n,b_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,$x.default)(n,b_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,ek.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=z.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ut(this.configuration,z.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function RAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var uC,Zpe=Et(()=>{Pt();N1();ih();Ib();Gl();Qf();uC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&rn?kf(rn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){yd(this.values,e).add(r)}reportEnumerator(e,r){yd(this.enumerators,e).add(Js(r))}reportHit(e,r="*"){let o=Wy(this.hits,e),a=al(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return z.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=RAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(z.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let x=v;x.userId=I,x.reportType="primary";for(let N of Object.keys(x.enumerators??{}))x.enumerators[N]=x.enumerators[N].length;E(x);let C=new Map,R=20;for(let[N,U]of Object.entries(x.values))U.length>0&&C.set(N,U.slice(0,R));for(;C.size>0;){let N={};N.userId=I,N.reportType="secondary",N.metrics={};for(let[U,V]of C)N.metrics[U]=V.shift(),V.length===0&&C.delete(U);E(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(z.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var o2={};zt(o2,{BuildDirectiveType:()=>zx,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>Kx,Cache:()=>Nr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>j4,FormatType:()=>kle,InstallMode:()=>hl,LEGACY_PLUGINS:()=>v1,LOCKFILE_VERSION:()=>tk,LegacyMigrationResolver:()=>oC,LightReport:()=>fA,LinkType:()=>Jy,LockfileResolver:()=>aC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>hE,PackageExtensionStatus:()=>vN,PackageExtensionType:()=>BN,PeerWarningType:()=>rk,Project:()=>St,Report:()=>Xs,ReportError:()=>Jt,SettingsType:()=>D1,StreamReport:()=>Lt,TAG_REGEXP:()=>FE,TelemetryManager:()=>uC,ThrowReport:()=>Qi,VirtualFetcher:()=>gE,WindowsLinkType:()=>xb,Workspace:()=>cC,WorkspaceFetcher:()=>mE,WorkspaceResolver:()=>Xn,YarnVersion:()=>rn,execUtils:()=>Ur,folderUtils:()=>YS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>nn,miscUtils:()=>_e,nodeUtils:()=>Vi,parseMessageName:()=>AP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Ku,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Db();WS();jl();ih();Ib();Gl();vb();BU();Qf();bo();Zfe();spe();u_();P1();P1();ape();A_();lpe();f_();fE();fP();cM();Xpe();Wl();O1();Zpe();P_();AM();fM();Dd();S_();N1();Cne()});var ihe=_((z_t,l2)=>{"use strict";var LAt=process.env.TERM_PROGRAM==="Hyper",NAt=process.platform==="win32",the=process.platform==="linux",F_={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"},rhe=Object.assign({},F_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),nhe=Object.assign({},F_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:the?"\u25B8":"\u276F",pointerSmall:the?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});l2.exports=NAt&&!LAt?rhe:nhe;Reflect.defineProperty(l2.exports,"common",{enumerable:!1,value:F_});Reflect.defineProperty(l2.exports,"windows",{enumerable:!1,value:rhe});Reflect.defineProperty(l2.exports,"other",{enumerable:!1,value:nhe})});var zc=_((V_t,R_)=>{"use strict";var OAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),MAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,she=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` -`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=MAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!OAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=ihe(),t.define=a,t};R_.exports=she();R_.exports.create=she});var Lo=_(sn=>{"use strict";var UAt=Object.prototype.toString,nc=zc(),ohe=!1,T_=[],ahe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};sn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);sn.hasColor=t=>!!t&&nc.hasColor(t);var ik=sn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);sn.nativeType=t=>UAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");sn.isAsyncFn=t=>sn.nativeType(t)==="asyncfunction";sn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";sn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;sn.scrollDown=(t=[])=>[...t.slice(1),t[0]];sn.scrollUp=(t=[])=>[t.pop(),...t];sn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};sn.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};sn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};sn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` -`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};sn.unmute=t=>{let e=t.stack.find(o=>nc.keys.color.includes(o));return e?nc[e]:t.stack.find(o=>o.slice(2)==="bg")?nc[e.slice(2)]:o=>o};sn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";sn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>nc.keys.color.includes(o));if(e){let o=nc["bg"+sn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?nc[r.slice(2).toLowerCase()]||t:nc.none};sn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>nc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return nc[ahe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ahe[o];return a&&nc["bg"+sn.pascal(a)]||t}return nc.none};sn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};sn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!sn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};sn.mixin=(t,e)=>{if(!ik(t))return e;if(!ik(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ik(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ik(a.value)?t[r]=sn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};sn.merge=(...t)=>{let e={};for(let r of t)sn.mixin(e,r);return e};sn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?sn.define(t,o,a.bind(e)):sn.define(t,o,a)}};sn.onExit=t=>{let e=(r,o)=>{ohe||(ohe=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};sn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};sn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var lhe=_(hC=>{"use strict";hC.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"};hC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};hC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};hC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};hC.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 Ahe=_((Z_t,uhe)=>{"use strict";var che=ve("readline"),_At=lhe(),HAt=/^(?:\x1b)([a-zA-Z0-9])$/,qAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,GAt={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 jAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function YAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var sk=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` -`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=HAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=qAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=GAt[n],o.shift=jAt(n)||o.shift,o.ctrl=YAt(n)||o.ctrl}return o};sk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=che.createInterface({terminal:!0,input:r});che.emitKeypressEvents(r,o);let a=(A,p)=>e(A,sk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};sk.action=(t,e,r)=>{let o={..._At,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};uhe.exports=sk});var phe=_(($_t,fhe)=>{"use strict";fhe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),WAt(t,r,o)}};function WAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var ghe=_((e8t,hhe)=>{"use strict";var{define:KAt,width:zAt}=Lo(),L_=class{constructor(e){let r=e.options;KAt(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=zAt(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"}};hhe.exports=L_});var mhe=_((t8t,dhe)=>{"use strict";var N_=Lo(),eo=zc(),O_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||N_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||N_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.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}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=N_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};dhe.exports=O_});var Ehe=_((r8t,yhe)=>{"use strict";var M_=process.platform==="win32",zf=zc(),VAt=Lo(),U_={...zf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:zf.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:zf.symbols.question,submitted:zf.symbols.check,cancelled:zf.symbols.cross},separator:{pending:zf.symbols.pointerSmall,submitted:zf.symbols.middot,cancelled:zf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\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"]};U_.merge=t=>{let e=VAt.merge({},zf.symbols,U_,t.symbols);return delete e.merge,e};yhe.exports=U_});var whe=_((n8t,Che)=>{"use strict";var JAt=mhe(),XAt=Ehe(),ZAt=Lo();Che.exports=t=>{t.options=ZAt.merge({},t.options.theme,t.options),t.symbols=XAt.merge(t.options),t.styles=JAt.merge(t.options)}});var Phe=_((vhe,Dhe)=>{"use strict";var Ihe=process.env.TERM_PROGRAM==="Apple_Terminal",$At=zc(),__=Lo(),Vc=Dhe.exports=vhe,Di="\x1B[",Bhe="\x07",H_=!1,bh=Vc.code={bell:Bhe,beep:Bhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Ihe?"8":"u"),savePosition:Di+(Ihe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},Yd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,bh.hide},show(){return H_=!1,bh.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Yd.left(-t):t>0?Yd.right(t):"",r+=e<0?Yd.up(-e):e>0?Yd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},q_=Vc.erase={screen:bh.screen,up:bh.up,down:bh.down,line:bh.line,lineEnd:bh.lineEnd,lineStart:bh.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return q_.line+Yd.to(0);let r=n=>[...$At.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(q_.line+Yd.prevLine()).repeat(a-1)+q_.line+Yd.to(0)}});var gC=_((i8t,bhe)=>{"use strict";var eft=ve("events"),She=zc(),G_=Ahe(),tft=phe(),rft=ghe(),nft=whe(),Ra=Lo(),Wd=Phe(),c2=class extends eft{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,nft(this),tft(this),this.state=new rft(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=sft(this.options.margin),this.setMaxListeners(0),ift(this)}async keypress(e,r={}){this.keypressed=!0;let o=G_.action(e,G_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Wd.code.beep)}cursorHide(){this.stdout.write(Wd.cursor.hide()),Ra.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Wd.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(Wd.cursor.down(e)+Wd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Wd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`+Ba(r)}async persistLockfile(){let e=z.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Hg(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=Vpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(b_))e.push(...u);let r=(0,ek.default)(this,e),o=x_.default.serialize(r),a=zi(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(z.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await kAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await QAt(await oe.readFilePromise(a));n=x_.default.deserialize(u),this.installStateChecksum=zi(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,ek.default)(n,b_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,ek.default)(n,b_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,tk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=z.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ut(this.configuration,z.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function TAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var lC,Zpe=Et(()=>{Dt();O1();ih();Bb();Gl();Qf();lC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&nn?kf(nn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){jy(this.values,e).add(r)}reportEnumerator(e,r){jy(this.enumerators,e).add(zi(r))}reportHit(e,r="*"){let o=KI(this.hits,e),a=al(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return z.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=TAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(z.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let x=v;x.userId=I,x.reportType="primary";for(let N of Object.keys(x.enumerators??{}))x.enumerators[N]=x.enumerators[N].length;E(x);let C=new Map,F=20;for(let[N,U]of Object.entries(x.values))U.length>0&&C.set(N,U.slice(0,F));for(;C.size>0;){let N={};N.userId=I,N.reportType="secondary",N.metrics={};for(let[U,V]of C)N.metrics[U]=V.shift(),V.length===0&&C.delete(U);E(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(z.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var a2={};zt(a2,{BuildDirectiveType:()=>Vx,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>zx,Cache:()=>Nr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>j4,FormatType:()=>kle,InstallMode:()=>hl,LEGACY_PLUGINS:()=>P1,LOCKFILE_VERSION:()=>rk,LegacyMigrationResolver:()=>iC,LightReport:()=>fA,LinkType:()=>zy,LockfileResolver:()=>sC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>fE,PackageExtensionStatus:()=>vN,PackageExtensionType:()=>BN,PeerWarningType:()=>nk,Project:()=>St,Report:()=>Xs,ReportError:()=>Jt,SettingsType:()=>D1,StreamReport:()=>Ft,TAG_REGEXP:()=>kE,TelemetryManager:()=>lC,ThrowReport:()=>Qi,VirtualFetcher:()=>pE,WindowsLinkType:()=>kb,Workspace:()=>aC,WorkspaceFetcher:()=>gE,WorkspaceResolver:()=>Xn,YarnVersion:()=>nn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>fe,hashUtils:()=>wn,httpUtils:()=>sn,miscUtils:()=>He,nodeUtils:()=>Ji,parseMessageName:()=>fD,reportOptionDeprecations:()=>TE,scriptUtils:()=>An,semverUtils:()=>Lr,stringifyMessageName:()=>Ku,structUtils:()=>j,tgzUtils:()=>Zi,treeUtils:()=>fs});var Ye=Et(()=>{Db();KS();jl();ih();Bb();Gl();Pb();BU();Qf();So();Zfe();spe();u_();S1();S1();ape();A_();lpe();f_();uE();pD();cM();Xpe();Wl();M1();Zpe();D_();AM();fM();vd();S_();O1();Cne()});var ihe=_((J_t,c2)=>{"use strict";var NAt=process.env.TERM_PROGRAM==="Hyper",OAt=process.platform==="win32",the=process.platform==="linux",R_={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"},rhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),nhe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:the?"\u25B8":"\u276F",pointerSmall:the?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});c2.exports=OAt&&!NAt?rhe:nhe;Reflect.defineProperty(c2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(c2.exports,"windows",{enumerable:!1,value:rhe});Reflect.defineProperty(c2.exports,"other",{enumerable:!1,value:nhe})});var zc=_((X_t,F_)=>{"use strict";var MAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),UAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,she=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=UAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!MAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=ihe(),t.define=a,t};F_.exports=she();F_.exports.create=she});var To=_(on=>{"use strict";var _At=Object.prototype.toString,nc=zc(),ohe=!1,T_=[],ahe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};on.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);on.hasColor=t=>!!t&&nc.hasColor(t);var sk=on.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);on.nativeType=t=>_At.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");on.isAsyncFn=t=>on.nativeType(t)==="asyncfunction";on.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";on.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;on.scrollDown=(t=[])=>[...t.slice(1),t[0]];on.scrollUp=(t=[])=>[t.pop(),...t];on.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};on.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};on.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};on.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};on.unmute=t=>{let e=t.stack.find(o=>nc.keys.color.includes(o));return e?nc[e]:t.stack.find(o=>o.slice(2)==="bg")?nc[e.slice(2)]:o=>o};on.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";on.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>nc.keys.color.includes(o));if(e){let o=nc["bg"+on.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?nc[r.slice(2).toLowerCase()]||t:nc.none};on.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>nc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return nc[ahe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ahe[o];return a&&nc["bg"+on.pascal(a)]||t}return nc.none};on.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};on.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!on.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};on.mixin=(t,e)=>{if(!sk(t))return e;if(!sk(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&sk(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);sk(a.value)?t[r]=on.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};on.merge=(...t)=>{let e={};for(let r of t)on.mixin(e,r);return e};on.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?on.define(t,o,a.bind(e)):on.define(t,o,a)}};on.onExit=t=>{let e=(r,o)=>{ohe||(ohe=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};on.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};on.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var lhe=_(fC=>{"use strict";fC.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"};fC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};fC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};fC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};fC.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 Ahe=_((e8t,uhe)=>{"use strict";var che=ve("readline"),HAt=lhe(),qAt=/^(?:\x1b)([a-zA-Z0-9])$/,GAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,jAt={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 YAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function WAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ok=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=qAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=GAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=jAt[n],o.shift=YAt(n)||o.shift,o.ctrl=WAt(n)||o.ctrl}return o};ok.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=che.createInterface({terminal:!0,input:r});che.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ok(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ok.action=(t,e,r)=>{let o={...HAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};uhe.exports=ok});var phe=_((t8t,fhe)=>{"use strict";fhe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),KAt(t,r,o)}};function KAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var ghe=_((r8t,hhe)=>{"use strict";var{define:zAt,width:VAt}=To(),L_=class{constructor(e){let r=e.options;zAt(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=VAt(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"}};hhe.exports=L_});var mhe=_((n8t,dhe)=>{"use strict";var N_=To(),$s=zc(),O_={default:$s.noop,noop:$s.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||N_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||N_.complement(this.primary)},primary:$s.cyan,success:$s.green,danger:$s.magenta,strong:$s.bold,warning:$s.yellow,muted:$s.dim,disabled:$s.gray,dark:$s.dim.gray,underline:$s.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}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&($s.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&($s.visible=t.styles.visible);let e=N_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys($s))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>$s[r]});for(let r of Object.keys($s.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>$s[r]});return e};dhe.exports=O_});var Ehe=_((i8t,yhe)=>{"use strict";var M_=process.platform==="win32",zf=zc(),JAt=To(),U_={...zf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:zf.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:zf.symbols.question,submitted:zf.symbols.check,cancelled:zf.symbols.cross},separator:{pending:zf.symbols.pointerSmall,submitted:zf.symbols.middot,cancelled:zf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\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"]};U_.merge=t=>{let e=JAt.merge({},zf.symbols,U_,t.symbols);return delete e.merge,e};yhe.exports=U_});var whe=_((s8t,Che)=>{"use strict";var XAt=mhe(),ZAt=Ehe(),$At=To();Che.exports=t=>{t.options=$At.merge({},t.options.theme,t.options),t.symbols=ZAt.merge(t.options),t.styles=XAt.merge(t.options)}});var Dhe=_((vhe,Phe)=>{"use strict";var Ihe=process.env.TERM_PROGRAM==="Apple_Terminal",eft=zc(),__=To(),Vc=Phe.exports=vhe,Pi="\x1B[",Bhe="\x07",H_=!1,bh=Vc.code={bell:Bhe,beep:Bhe,beginning:`${Pi}G`,down:`${Pi}J`,esc:Pi,getPosition:`${Pi}6n`,hide:`${Pi}?25l`,line:`${Pi}2K`,lineEnd:`${Pi}K`,lineStart:`${Pi}1K`,restorePosition:Pi+(Ihe?"8":"u"),savePosition:Pi+(Ihe?"7":"s"),screen:`${Pi}2J`,show:`${Pi}?25h`,up:`${Pi}1J`},jd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,bh.hide},show(){return H_=!1,bh.show},forward:(t=1)=>`${Pi}${t}C`,backward:(t=1)=>`${Pi}${t}D`,nextLine:(t=1)=>`${Pi}E`.repeat(t),prevLine:(t=1)=>`${Pi}F`.repeat(t),up:(t=1)=>t?`${Pi}${t}A`:"",down:(t=1)=>t?`${Pi}${t}B`:"",right:(t=1)=>t?`${Pi}${t}C`:"",left:(t=1)=>t?`${Pi}${t}D`:"",to(t,e){return e?`${Pi}${e+1};${t+1}H`:`${Pi}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?jd.left(-t):t>0?jd.right(t):"",r+=e<0?jd.up(-e):e>0?jd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},q_=Vc.erase={screen:bh.screen,up:bh.up,down:bh.down,line:bh.line,lineEnd:bh.lineEnd,lineStart:bh.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return q_.line+jd.to(0);let r=n=>[...eft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(q_.line+jd.prevLine()).repeat(a-1)+q_.line+jd.to(0)}});var pC=_((o8t,bhe)=>{"use strict";var tft=ve("events"),She=zc(),G_=Ahe(),rft=phe(),nft=ghe(),ift=whe(),Fa=To(),Yd=Dhe(),u2=class extends tft{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,ift(this),rft(this),this.state=new nft(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=oft(this.options.margin),this.setMaxListeners(0),sft(this)}async keypress(e,r={}){this.keypressed=!0;let o=G_.action(e,G_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Yd.code.beep)}cursorHide(){this.stdout.write(Yd.cursor.hide()),Fa.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Yd.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(Yd.cursor.down(e)+Yd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Yd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` `),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,x=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ra.isObject(e)&&(e=e[o.status]||e.pending),Ra.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ra.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ra.isObject(n)&&(n=n[o.status]||n.pending),Ra.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ra.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ra.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ra.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 Ra.resolve(this,e,...r)}get base(){return c2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ra.height(this.stdout,25)}get width(){return this.options.columns||Ra.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function ift(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function sft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=c2});var Qhe=_((s8t,khe)=>{"use strict";var oft=Lo(),xhe={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 xhe.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}};khe.exports=(t,e={})=>{let r=oft.merge({},xhe,e.roles);return r[t]||r.default}});var u2=_((o8t,The)=>{"use strict";var aft=zc(),lft=gC(),cft=Qhe(),ok=Lo(),{reorder:j_,scrollUp:uft,scrollDown:Aft,isObject:Fhe,swap:fft}=ok,Y_=class extends lft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Fhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=cft(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,ok.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=j_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=j_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=j_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=uft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=Aft(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){fft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Fhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ok.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ok.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}The.exports=Y_});var xh=_((a8t,Lhe)=>{"use strict";var pft=u2(),W_=Lo(),K_=class extends pft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`+this.styles.danger(r),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit("submit",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel=="function"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit("cancel",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),r=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(Yd.cursor.down(e.rest.length)),this.write(` +`.repeat(r))}catch{}this.emit("close")}start(){!this.stop&&this.options.show!==!1&&(this.stop=G_.listen(this,this.keypress.bind(this)),this.once("close",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip=="function"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:r,result:o}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Fa.isObject(e)&&(e=e[o.status]||e.pending),Fa.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Fa.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Fa.isObject(n)&&(n=n[o.status]||n.pending),Fa.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Fa.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Fa.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Fa.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Fa.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Fa.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 Fa.resolve(this,e,...r)}get base(){return u2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Fa.height(this.stdout,25)}get width(){return this.options.columns||Fa.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function sft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function oft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=u2});var Qhe=_((a8t,khe)=>{"use strict";var aft=To(),xhe={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 xhe.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}};khe.exports=(t,e={})=>{let r=aft.merge({},xhe,e.roles);return r[t]||r.default}});var A2=_((l8t,The)=>{"use strict";var lft=zc(),cft=pC(),uft=Qhe(),ak=To(),{reorder:j_,scrollUp:Aft,scrollDown:fft,isObject:Rhe,swap:pft}=ak,Y_=class extends cft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Rhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=uft(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,ak.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,lft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Fhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=j_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=j_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=j_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Aft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=fft(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){pft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Rhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ak.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Fhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Fhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ak.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}The.exports=Y_});var xh=_((c8t,Lhe)=>{"use strict";var hft=A2(),W_=To(),K_=class extends hft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` `),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` `)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=K_});var Ohe=_((l8t,Nhe)=>{"use strict";var hft=xh(),gft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends hft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=gft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=z_});var J_=_((c8t,Mhe)=>{"use strict";var V_=Lo();Mhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=V_.inverse(t.styles.primary),h=R=>p(t.styles.black(R)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=R=>R,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=V_.isPrimitive(o)?`${o}`:"",r=V_.isPrimitive(r)?`${r}`:"";let x=o&&o.startsWith(r)&&o!==r,C=x?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),x){let R=t.styles.unstyle(E+C);return E+C+A(o.slice(R.length))}return E+C}});var ak=_((u8t,Uhe)=>{"use strict";var dft=zc(),mft=xh(),yft=J_(),X_=class extends mft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:x}=a,C=p,R=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),V=e.message;this.align==="right"&&(V=V.padStart(this.longest+1," ")),this.align==="left"&&(V=V.padEnd(this.longest+1," "));let te=this.values[A]=h||u,ae=h?"success":"dark";await N.call(e,te,this.state)!==!0&&(ae="danger");let fe=a[ae],ue=fe(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),he=()=>[me,ue,V+U,h,C].filter(Boolean).join(" ");if(o.submitted)return V=dft.unstyle(V),h=I(h),C="",he();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=yft(this,{input:h,initial:u,pos:n,showCursor:R,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),R&&(V=v(V)),e.error?h+=(h?" ":"")+x(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),he()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Uhe.exports=X_});var Z_=_((A8t,Hhe)=>{"use strict";var Eft=ak(),Cft=()=>{throw new Error("expected prompt to have a custom authenticate method")},_he=(t=Cft)=>{class e extends Eft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return _he(o)}}return e};Hhe.exports=_he()});var jhe=_((f8t,Ghe)=>{"use strict";var wft=Z_();function Ift(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Ift)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends wft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var lk=_((p8t,Yhe)=>{"use strict";var Bft=gC(),{isPrimitive:vft,hasColor:Dft}=Lo(),$_=class extends Bft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return vft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return Dft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Yhe.exports=$_});var Khe=_((h8t,Whe)=>{"use strict";var Pft=lk(),e8=class extends Pft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Whe.exports=e8});var Vhe=_((g8t,zhe)=>{"use strict";var Sft=xh(),bft=ak(),dC=bft.prototype,t8=class extends Sft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():dC.dispatch.call(this,e,r)}append(e,r){return dC.append.call(this,e,r)}delete(e,r){return dC.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?dC.next.call(this):super.next()}prev(){return this.focused.editable?dC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?dC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};zhe.exports=t8});var Kd=_((d8t,Jhe)=>{"use strict";var xft=gC(),kft=J_(),{isPrimitive:Qft}=Lo(),r8=class extends xft{constructor(e){super(e),this.initial=Qft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):kft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` -`)),this.restore()}};Jhe.exports=r8});var Zhe=_((m8t,Xhe)=>{"use strict";var Fft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),ck=t=>Fft(t).filter(Boolean);Xhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:ck([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:ck([...n,r]),present:u};case"save":return{past:ck([...o,r]),present:""};case"remove":return u=ck(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((y8t,e0e)=>{"use strict";var Rft=Kd(),$he=Zhe(),n8=class extends Rft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=$he(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=$he("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};e0e.exports=n8});var r0e=_((E8t,t0e)=>{"use strict";var Tft=Kd(),s8=class extends Tft{format(){return""}};t0e.exports=s8});var i0e=_((C8t,n0e)=>{"use strict";var Lft=Kd(),o8=class extends Lft{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()}};n0e.exports=o8});var o0e=_((w8t,s0e)=>{"use strict";var Nft=xh(),a8=class extends Nft{constructor(e){super({...e,multiple:!0})}};s0e.exports=a8});var c8=_((I8t,a0e)=>{"use strict";var Oft=Kd(),l8=class extends Oft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};a0e.exports=l8});var c0e=_((B8t,l0e)=>{l0e.exports=c8()});var A0e=_((v8t,u0e)=>{"use strict";var Mft=Kd(),u8=class extends Mft{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)):""}};u0e.exports=u8});var h0e=_((D8t,p0e)=>{"use strict";var Uft=zc(),_ft=u2(),f0e=Lo(),A8=class extends _ft{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||` +`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=K_});var Ohe=_((u8t,Nhe)=>{"use strict";var gft=xh(),dft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends gft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=dft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=z_});var J_=_((A8t,Mhe)=>{"use strict";var V_=To();Mhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=V_.inverse(t.styles.primary),h=F=>p(t.styles.black(F)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=F=>F,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=V_.isPrimitive(o)?`${o}`:"",r=V_.isPrimitive(r)?`${r}`:"";let x=o&&o.startsWith(r)&&o!==r,C=x?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),x){let F=t.styles.unstyle(E+C);return E+C+A(o.slice(F.length))}return E+C}});var lk=_((f8t,Uhe)=>{"use strict";var mft=zc(),yft=xh(),Eft=J_(),X_=class extends yft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:x}=a,C=p,F=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),V=e.message;this.align==="right"&&(V=V.padStart(this.longest+1," ")),this.align==="left"&&(V=V.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await N.call(e,te,this.state)!==!0&&(le="danger");let ae=a[le],ce=ae(await this.indicator(e,r))+(e.pad||""),Ce=this.indent(e),de=()=>[Ce,ce,V+U,h,C].filter(Boolean).join(" ");if(o.submitted)return V=mft.unstyle(V),h=I(h),C="",de();if(e.format)h=await e.format.call(this,h,e,r);else{let Ie=this.styles.muted;h=Eft(this,{input:h,initial:u,pos:n,showCursor:F,color:Ie})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),F&&(V=v(V)),e.error?h+=(h?" ":"")+x(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),de()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Uhe.exports=X_});var Z_=_((p8t,Hhe)=>{"use strict";var Cft=lk(),wft=()=>{throw new Error("expected prompt to have a custom authenticate method")},_he=(t=wft)=>{class e extends Cft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return _he(o)}}return e};Hhe.exports=_he()});var jhe=_((h8t,Ghe)=>{"use strict";var Ift=Z_();function Bft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Bft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Ift.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var ck=_((g8t,Yhe)=>{"use strict";var vft=pC(),{isPrimitive:Pft,hasColor:Dft}=To(),$_=class extends vft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return Pft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return Dft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Yhe.exports=$_});var Khe=_((d8t,Whe)=>{"use strict";var Sft=ck(),e8=class extends Sft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Whe.exports=e8});var Vhe=_((m8t,zhe)=>{"use strict";var bft=xh(),xft=lk(),hC=xft.prototype,t8=class extends bft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():hC.dispatch.call(this,e,r)}append(e,r){return hC.append.call(this,e,r)}delete(e,r){return hC.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?hC.next.call(this):super.next()}prev(){return this.focused.editable?hC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?hC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};zhe.exports=t8});var Wd=_((y8t,Jhe)=>{"use strict";var kft=pC(),Qft=J_(),{isPrimitive:Rft}=To(),r8=class extends kft{constructor(e){super(e),this.initial=Rft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Qft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Jhe.exports=r8});var Zhe=_((E8t,Xhe)=>{"use strict";var Fft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),uk=t=>Fft(t).filter(Boolean);Xhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:uk([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:uk([...n,r]),present:u};case"save":return{past:uk([...o,r]),present:""};case"remove":return u=uk(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((C8t,e0e)=>{"use strict";var Tft=Wd(),$he=Zhe(),n8=class extends Tft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=$he(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=$he("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};e0e.exports=n8});var r0e=_((w8t,t0e)=>{"use strict";var Lft=Wd(),s8=class extends Lft{format(){return""}};t0e.exports=s8});var i0e=_((I8t,n0e)=>{"use strict";var Nft=Wd(),o8=class extends Nft{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()}};n0e.exports=o8});var o0e=_((B8t,s0e)=>{"use strict";var Oft=xh(),a8=class extends Oft{constructor(e){super({...e,multiple:!0})}};s0e.exports=a8});var c8=_((v8t,a0e)=>{"use strict";var Mft=Wd(),l8=class extends Mft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};a0e.exports=l8});var c0e=_((P8t,l0e)=>{l0e.exports=c8()});var A0e=_((D8t,u0e)=>{"use strict";var Uft=Wd(),u8=class extends Uft{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)):""}};u0e.exports=u8});var h0e=_((S8t,p0e)=>{"use strict";var _ft=zc(),Hft=A2(),f0e=To(),A8=class extends Hft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!f0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=Uft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let x=f0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!f0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=_ft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let x=f0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` `).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),x=x.map(C=>this.styles.info(C))),x[0]+=E,this.linebreak&&x.push(""),[p+a,x.join(` `)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` `)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),x=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&x!=null&&(u+=this.styles.danger(x)),this.clear(r),this.write([A,u,h,I,v].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)}};p0e.exports=A8});var m0e=_((P8t,d0e)=>{"use strict";var g0e=zc(),Hft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Hft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},qft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],x=C=>{C.line=h,u.push(C)};for(x({type:"bos",value:""});Eae.name===U.key);U.field=a.find(ae=>ae.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let R=u[u.length-1];R.type==="text"&&R.line===h?R.value+=C:x({type:"text",value:C})}return x({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};d0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await qft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let x=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(V,te,ae,fe)=>{let ue=await h(V,te,ae,fe);return ue===!1?"Invalid field "+ae.name:ue};for(let V of a){let te=V.value,ae=V.key;if(V.type!=="template"){te&&(I.output+=te);continue}if(V.type==="template"){let fe=n.find(we=>we.name===ae);e.required===!0&&I.required.add(fe.name);let ue=[fe.input,I.values[fe.value],fe.value,te].find(E),he=(fe.field||{}).message||V.inner;if(v){let we=await C(I.values[ae],I,fe,x);if(we&&typeof we=="string"||we===!1){I.invalid.set(ae,we);continue}I.invalid.delete(ae);let g=await A(I.values[ae],I,fe,x);I.output+=g0e.unstyle(g);continue}fe.placeholder=!1;let Be=te;te=await p(te,I,fe,x),ue!==te?(I.values[ae]=ue,te=t.styles.typing(ue),I.missing.delete(he)):(I.values[ae]=void 0,ue=`<${he}>`,te=t.styles.primary(ue),fe.placeholder=!0,I.required.has(ae)&&I.missing.add(he)),I.missing.has(he)&&I.validating&&(te=t.styles.warning(ue)),I.invalid.has(ae)&&I.validating&&(te=t.styles.danger(ue)),x===I.index&&(Be!==te?te=t.styles.underline(te):te=t.styles.heading(g0e.unstyle(te))),x++}te&&(I.output+=te)}let R=I.output.split(` -`).map(V=>" "+V),N=n.length,U=0;for(let V of n)I.invalid.has(V.name)&&V.lines.forEach(te=>{R[te][0]===" "&&(R[te]=I.styles.danger(I.symbols.bullet)+R[te].slice(1))}),t.isValue(I.values[V.name])&&U++;return I.completed=(U/N*100).toFixed(0),I.output=R.join(` -`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var E0e=_((S8t,y0e)=>{"use strict";var Gft=zc(),jft=m0e(),Yft=gC(),h8=class extends Yft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await jft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` -`].find(V=>V!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",x=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",R=await this.format(C),N=await this.footer();R&&(h+=" "+R),v&&!R&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,x,N,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} -`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Gft.unstyle(o).split(` +`)),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)}};p0e.exports=A8});var m0e=_((b8t,d0e)=>{"use strict";var g0e=zc(),qft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=qft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Gft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],x=C=>{C.line=h,u.push(C)};for(x({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let F=u[u.length-1];F.type==="text"&&F.line===h?F.value+=C:x({type:"text",value:C})}return x({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};d0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Gft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let x=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(V,te,le,ae)=>{let ce=await h(V,te,le,ae);return ce===!1?"Invalid field "+le.name:ce};for(let V of a){let te=V.value,le=V.key;if(V.type!=="template"){te&&(I.output+=te);continue}if(V.type==="template"){let ae=n.find(Ee=>Ee.name===le);e.required===!0&&I.required.add(ae.name);let ce=[ae.input,I.values[ae.value],ae.value,te].find(E),de=(ae.field||{}).message||V.inner;if(v){let Ee=await C(I.values[le],I,ae,x);if(Ee&&typeof Ee=="string"||Ee===!1){I.invalid.set(le,Ee);continue}I.invalid.delete(le);let g=await A(I.values[le],I,ae,x);I.output+=g0e.unstyle(g);continue}ae.placeholder=!1;let Ie=te;te=await p(te,I,ae,x),ce!==te?(I.values[le]=ce,te=t.styles.typing(ce),I.missing.delete(de)):(I.values[le]=void 0,ce=`<${de}>`,te=t.styles.primary(ce),ae.placeholder=!0,I.required.has(le)&&I.missing.add(de)),I.missing.has(de)&&I.validating&&(te=t.styles.warning(ce)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(ce)),x===I.index&&(Ie!==te?te=t.styles.underline(te):te=t.styles.heading(g0e.unstyle(te))),x++}te&&(I.output+=te)}let F=I.output.split(` +`).map(V=>" "+V),N=n.length,U=0;for(let V of n)I.invalid.has(V.name)&&V.lines.forEach(te=>{F[te][0]===" "&&(F[te]=I.styles.danger(I.symbols.bullet)+F[te].slice(1))}),t.isValue(I.values[V.name])&&U++;return I.completed=(U/N*100).toFixed(0),I.output=F.join(` +`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var E0e=_((x8t,y0e)=>{"use strict";var jft=zc(),Yft=m0e(),Wft=pC(),h8=class extends Wft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Yft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(V=>V!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",x=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",F=await this.format(C),N=await this.footer();F&&(h+=" "+F),v&&!F&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,x,N,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=jft.unstyle(o).split(` `).map(A=>A.slice(1)).join(` -`);return this.value={values:a,result:u},super.submit()}};y0e.exports=h8});var w0e=_((b8t,C0e)=>{"use strict";var Wft="(Use + to sort)",Kft=xh(),g8=class extends Kft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Wft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};C0e.exports=g8});var B0e=_((x8t,I0e)=>{"use strict";var zft=u2(),d8=class extends zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=Vft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),x=this.indent(e),C=x+e.scale.map((te,ae)=>h(ae===e.scaleIdx)).join(A),R=te=>te===e.scaleIdx?I(te):te,N=x+e.scale.map((te,ae)=>R(ae)).join(p),U=()=>[E,v].filter(Boolean).join(" "),V=()=>[U(),C,N," "].filter(Boolean).join(` +`);return this.value={values:a,result:u},super.submit()}};y0e.exports=h8});var w0e=_((k8t,C0e)=>{"use strict";var Kft="(Use + to sort)",zft=xh(),g8=class extends zft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Kft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};C0e.exports=g8});var B0e=_((Q8t,I0e)=>{"use strict";var Vft=A2(),d8=class extends Vft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=Jft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),x=this.indent(e),C=x+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),F=te=>te===e.scaleIdx?I(te):te,N=x+e.scale.map((te,le)=>F(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),V=()=>[U(),C,N," "].filter(Boolean).join(` `);return o&&(C=this.styles.cyan(C),N=this.styles.cyan(N)),V()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` `)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].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 Vft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{v0e.exports=i8()});var S0e=_((Q8t,P0e)=>{"use strict";var Jft=lk(),m8=class extends Jft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};P0e.exports=m8});var x0e=_((F8t,b0e)=>{"use strict";var Xft=xh(),y8=class extends Xft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=y8});var Q0e=_(E8=>{"use strict";var k0e=Lo(),As=(t,e)=>{k0e.defineExport(E8,t,e),k0e.defineExport(E8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>jhe());As("Confirm",()=>Khe());As("Editable",()=>Vhe());As("Form",()=>ak());As("Input",()=>i8());As("Invisible",()=>r0e());As("List",()=>i0e());As("MultiSelect",()=>o0e());As("Numeral",()=>c0e());As("Password",()=>A0e());As("Scale",()=>h0e());As("Select",()=>xh());As("Snippet",()=>E0e());As("Sort",()=>w0e());As("Survey",()=>B0e());As("Text",()=>D0e());As("Toggle",()=>S0e());As("Quiz",()=>x0e())});var R0e=_((T8t,F0e)=>{F0e.exports={ArrayPrompt:u2(),AuthPrompt:Z_(),BooleanPrompt:lk(),NumberPrompt:c8(),StringPrompt:Kd()}});var f2=_((L8t,L0e)=>{"use strict";var T0e=ve("assert"),w8=ve("events"),kh=Lo(),Jc=class extends w8{constructor(e,r){super(),this.options=kh.merge({},e),this.answers={...r}}register(e,r){if(kh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}T0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(kh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=kh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=kh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];T0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||gC()}static get prompts(){return Q0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return kh.mixinEmitter(e,new w8),e}};kh.mixinEmitter(Jc,new w8);var C8=Jc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>C8[t]})}var A2=t=>{kh.defineExport(Jc,t,()=>Jc.types[t])};A2("ArrayPrompt");A2("AuthPrompt");A2("BooleanPrompt");A2("NumberPrompt");A2("StringPrompt");L0e.exports=Jc});var d2=_((mHt,q0e)=>{var npt=Jx();function ipt(t,e,r){var o=t==null?void 0:npt(t,e);return o===void 0?r:o}q0e.exports=ipt});var Y0e=_((BHt,j0e)=>{function spt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var opt=md(),apt=VP();function lpt(t,e){return t&&opt(e,apt(e),t)}W0e.exports=lpt});var V0e=_((DHt,z0e)=>{var cpt=md(),upt=jy();function Apt(t,e){return t&&cpt(e,upt(e),t)}z0e.exports=Apt});var X0e=_((PHt,J0e)=>{var fpt=md(),ppt=GP();function hpt(t,e){return fpt(t,ppt(t),e)}J0e.exports=hpt});var S8=_((SHt,Z0e)=>{var gpt=qP(),dpt=eS(),mpt=GP(),ypt=KL(),Ept=Object.getOwnPropertySymbols,Cpt=Ept?function(t){for(var e=[];t;)gpt(e,mpt(t)),t=dpt(t);return e}:ypt;Z0e.exports=Cpt});var ege=_((bHt,$0e)=>{var wpt=md(),Ipt=S8();function Bpt(t,e){return wpt(t,Ipt(t),e)}$0e.exports=Bpt});var b8=_((xHt,tge)=>{var vpt=WL(),Dpt=S8(),Ppt=jy();function Spt(t){return vpt(t,Ppt,Dpt)}tge.exports=Spt});var nge=_((kHt,rge)=>{var bpt=Object.prototype,xpt=bpt.hasOwnProperty;function kpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&xpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}rge.exports=kpt});var sge=_((QHt,ige)=>{var Qpt=ZP();function Fpt(t,e){var r=e?Qpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}ige.exports=Fpt});var age=_((FHt,oge)=>{var Rpt=/\w*$/;function Tpt(t){var e=new t.constructor(t.source,Rpt.exec(t));return e.lastIndex=t.lastIndex,e}oge.exports=Tpt});var fge=_((RHt,Age)=>{var lge=hd(),cge=lge?lge.prototype:void 0,uge=cge?cge.valueOf:void 0;function Lpt(t){return uge?Object(uge.call(t)):{}}Age.exports=Lpt});var hge=_((THt,pge)=>{var Npt=ZP(),Opt=sge(),Mpt=age(),Upt=fge(),_pt=aN(),Hpt="[object Boolean]",qpt="[object Date]",Gpt="[object Map]",jpt="[object Number]",Ypt="[object RegExp]",Wpt="[object Set]",Kpt="[object String]",zpt="[object Symbol]",Vpt="[object ArrayBuffer]",Jpt="[object DataView]",Xpt="[object Float32Array]",Zpt="[object Float64Array]",$pt="[object Int8Array]",eht="[object Int16Array]",tht="[object Int32Array]",rht="[object Uint8Array]",nht="[object Uint8ClampedArray]",iht="[object Uint16Array]",sht="[object Uint32Array]";function oht(t,e,r){var o=t.constructor;switch(e){case Vpt:return Npt(t);case Hpt:case qpt:return new o(+t);case Jpt:return Opt(t,r);case Xpt:case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:case sht:return _pt(t,r);case Gpt:return new o;case jpt:case Kpt:return new o(t);case Ypt:return Mpt(t);case Wpt:return new o;case zpt:return Upt(t)}}pge.exports=oht});var dge=_((LHt,gge)=>{var aht=jI(),lht=Ju(),cht="[object Map]";function uht(t){return lht(t)&&aht(t)==cht}gge.exports=uht});var Cge=_((NHt,Ege)=>{var Aht=dge(),fht=YP(),mge=WP(),yge=mge&&mge.isMap,pht=yge?fht(yge):Aht;Ege.exports=pht});var Ige=_((OHt,wge)=>{var hht=jI(),ght=Ju(),dht="[object Set]";function mht(t){return ght(t)&&hht(t)==dht}wge.exports=mht});var Pge=_((MHt,Dge)=>{var yht=Ige(),Eht=YP(),Bge=WP(),vge=Bge&&Bge.isSet,Cht=vge?Eht(vge):yht;Dge.exports=Cht});var x8=_((UHt,kge)=>{var wht=_P(),Iht=Y0e(),Bht=tS(),vht=K0e(),Dht=V0e(),Pht=oN(),Sht=$P(),bht=X0e(),xht=ege(),kht=XL(),Qht=b8(),Fht=jI(),Rht=nge(),Tht=hge(),Lht=lN(),Nht=ql(),Oht=UI(),Mht=Cge(),Uht=sl(),_ht=Pge(),Hht=VP(),qht=jy(),Ght=1,jht=2,Yht=4,Sge="[object Arguments]",Wht="[object Array]",Kht="[object Boolean]",zht="[object Date]",Vht="[object Error]",bge="[object Function]",Jht="[object GeneratorFunction]",Xht="[object Map]",Zht="[object Number]",xge="[object Object]",$ht="[object RegExp]",e0t="[object Set]",t0t="[object String]",r0t="[object Symbol]",n0t="[object WeakMap]",i0t="[object ArrayBuffer]",s0t="[object DataView]",o0t="[object Float32Array]",a0t="[object Float64Array]",l0t="[object Int8Array]",c0t="[object Int16Array]",u0t="[object Int32Array]",A0t="[object Uint8Array]",f0t="[object Uint8ClampedArray]",p0t="[object Uint16Array]",h0t="[object Uint32Array]",ri={};ri[Sge]=ri[Wht]=ri[i0t]=ri[s0t]=ri[Kht]=ri[zht]=ri[o0t]=ri[a0t]=ri[l0t]=ri[c0t]=ri[u0t]=ri[Xht]=ri[Zht]=ri[xge]=ri[$ht]=ri[e0t]=ri[t0t]=ri[r0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=!0;ri[Vht]=ri[bge]=ri[n0t]=!1;function Ak(t,e,r,o,a,n){var u,A=e&Ght,p=e&jht,h=e&Yht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Uht(t))return t;var E=Nht(t);if(E){if(u=Rht(t),!A)return Sht(t,u)}else{var I=Fht(t),v=I==bge||I==Jht;if(Oht(t))return Pht(t,A);if(I==xge||I==Sge||v&&!a){if(u=p||v?{}:Lht(t),!A)return p?xht(t,Dht(u,t)):bht(t,vht(u,t))}else{if(!ri[I])return a?t:{};u=Tht(t,I,A)}}n||(n=new wht);var x=n.get(t);if(x)return x;n.set(t,u),_ht(t)?t.forEach(function(N){u.add(Ak(N,e,r,N,t,n))}):Mht(t)&&t.forEach(function(N,U){u.set(U,Ak(N,e,r,U,t,n))});var C=h?p?Qht:kht:p?qht:Hht,R=E?void 0:C(t);return Iht(R||t,function(N,U){R&&(U=N,N=t[U]),Bht(u,U,Ak(N,e,r,U,t,n))}),u}kge.exports=Ak});var k8=_((_Ht,Qge)=>{var g0t=x8(),d0t=1,m0t=4;function y0t(t){return g0t(t,d0t|m0t)}Qge.exports=y0t});var Q8=_((HHt,Fge)=>{var E0t=I_();function C0t(t,e,r){return t==null?t:E0t(t,e,r)}Fge.exports=C0t});var Oge=_((KHt,Nge)=>{var w0t=Object.prototype,I0t=w0t.hasOwnProperty;function B0t(t,e){return t!=null&&I0t.call(t,e)}Nge.exports=B0t});var Uge=_((zHt,Mge)=>{var v0t=Oge(),D0t=B_();function P0t(t,e){return t!=null&&D0t(t,e,v0t)}Mge.exports=P0t});var Hge=_((VHt,_ge)=>{function S0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}_ge.exports=S0t});var Gge=_((JHt,qge)=>{var b0t=Jx(),x0t=pU();function k0t(t,e){return e.length<2?t:b0t(t,x0t(e,0,-1))}qge.exports=k0t});var R8=_((XHt,jge)=>{var Q0t=jd(),F0t=Hge(),R0t=Gge(),T0t=lC();function L0t(t,e){return e=Q0t(e,t),t=R0t(t,e),t==null||delete t[T0t(F0t(e))]}jge.exports=L0t});var T8=_((ZHt,Yge)=>{var N0t=R8();function O0t(t,e){return t==null?!0:N0t(t,e)}Yge.exports=O0t});var Jge=_((S6t,_0t)=>{_0t.exports={name:"@yarnpkg/cli",version:"4.2.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var G8=_((i9t,lde)=>{"use strict";lde.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var ude=_((s9t,cde)=>{"use strict";var sgt=G8();function ogt(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=sgt(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}cde.exports=ogt});var pde=_((o9t,fde)=>{"use strict";var agt=ude();function lgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var cgt=lgt(agt),ugt="text/plain",Agt="us-ascii",Ade=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),fgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,x=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(x=x.toLowerCase(),x===Agt)?"":`${v}${x?`=${x}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==ugt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function pgt(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 fgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,x=a.pathname.slice(A,v);p+=x.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];Ade(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])Ade(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var j8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>j8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=pgt(t,e));let a=cgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};j8.MAX_INPUT_LENGTH=2048;fde.exports=j8});var dde=_((a9t,gde)=>{"use strict";var hgt=G8();function hde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=hgt(t);if(t=t.substring(t.indexOf("://")+3),hde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var ggt=pde(),mde=dde();function dgt(t){var e=ggt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),mde(e.protocols)||e.protocols.length===0&&mde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}yde.exports=dgt});var wde=_((c9t,Cde)=>{"use strict";var mgt=Ede();function Y8(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=mgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(N){return Y8.stringify(this,N)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-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 x=a.length>n&&a[n+1]==="-"?n+1:n;a.length>x+2&&["raw","src","blob","tree","edit"].indexOf(a[x+1])>=0&&(r.filepathtype=a[x+1],r.ref=a[x+2],a.length>x+3&&(r.filepath=a.slice(x+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,R=C.exec(r.pathname);return R!=null&&(r.source="bitbucket-server",R[1]==="users"?r.owner="~"+R[2]:r.owner=R[2],r.organization=r.owner,r.name=R[3],a=R[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}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?ygt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Egt(t)+a;default:return t.href}};function ygt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Egt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Cde.exports=Y8});var Ode=_((q5t,Nde)=>{var kgt=Hb(),Qgt=$P(),Fgt=ql(),Rgt=pE(),Tgt=w_(),Lgt=lC(),Ngt=L1();function Ogt(t){return Fgt(t)?kgt(t,Lgt):Rgt(t)?[t]:Qgt(Tgt(Ngt(t)))}Nde.exports=Ogt});function Hgt(t,e){return e===1&&_gt.has(t[0])}function B2(t){let e=Array.isArray(t)?t:(0,_de.default)(t);return e.map((o,a)=>Mgt.test(o)?`[${o}]`:Ugt.test(o)&&!Hgt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function qgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function gk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(x=>({text:x,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[x,C]of p){if(C.size>1){let R=[...C].map(([N,U])=>{let V=de.pretty(t.configuration,N,de.Type.INSPECT),te=U.size>0?qgt(t.configuration,U.values().next().value):null;return te!==null?` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function Jft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{v0e.exports=i8()});var S0e=_((F8t,D0e)=>{"use strict";var Xft=ck(),m8=class extends Xft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};D0e.exports=m8});var x0e=_((T8t,b0e)=>{"use strict";var Zft=xh(),y8=class extends Zft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=y8});var Q0e=_(E8=>{"use strict";var k0e=To(),ps=(t,e)=>{k0e.defineExport(E8,t,e),k0e.defineExport(E8,t.toLowerCase(),e)};ps("AutoComplete",()=>Ohe());ps("BasicAuth",()=>jhe());ps("Confirm",()=>Khe());ps("Editable",()=>Vhe());ps("Form",()=>lk());ps("Input",()=>i8());ps("Invisible",()=>r0e());ps("List",()=>i0e());ps("MultiSelect",()=>o0e());ps("Numeral",()=>c0e());ps("Password",()=>A0e());ps("Scale",()=>h0e());ps("Select",()=>xh());ps("Snippet",()=>E0e());ps("Sort",()=>w0e());ps("Survey",()=>B0e());ps("Text",()=>P0e());ps("Toggle",()=>S0e());ps("Quiz",()=>x0e())});var F0e=_((N8t,R0e)=>{R0e.exports={ArrayPrompt:A2(),AuthPrompt:Z_(),BooleanPrompt:ck(),NumberPrompt:c8(),StringPrompt:Wd()}});var p2=_((O8t,L0e)=>{"use strict";var T0e=ve("assert"),w8=ve("events"),kh=To(),Jc=class extends w8{constructor(e,r){super(),this.options=kh.merge({},e),this.answers={...r}}register(e,r){if(kh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}T0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(kh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=kh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=kh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];T0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||pC()}static get prompts(){return Q0e()}static get types(){return F0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return kh.mixinEmitter(e,new w8),e}};kh.mixinEmitter(Jc,new w8);var C8=Jc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>C8[t]})}var f2=t=>{kh.defineExport(Jc,t,()=>Jc.types[t])};f2("ArrayPrompt");f2("AuthPrompt");f2("BooleanPrompt");f2("NumberPrompt");f2("StringPrompt");L0e.exports=Jc});var m2=_((EHt,q0e)=>{var ipt=Xx();function spt(t,e,r){var o=t==null?void 0:ipt(t,e);return o===void 0?r:o}q0e.exports=spt});var Y0e=_((PHt,j0e)=>{function opt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var apt=md(),lpt=JD();function cpt(t,e){return t&&apt(e,lpt(e),t)}W0e.exports=cpt});var V0e=_((SHt,z0e)=>{var upt=md(),Apt=Gy();function fpt(t,e){return t&&upt(e,Apt(e),t)}z0e.exports=fpt});var X0e=_((bHt,J0e)=>{var ppt=md(),hpt=jD();function gpt(t,e){return ppt(t,hpt(t),e)}J0e.exports=gpt});var S8=_((xHt,Z0e)=>{var dpt=GD(),mpt=tS(),ypt=jD(),Ept=zL(),Cpt=Object.getOwnPropertySymbols,wpt=Cpt?function(t){for(var e=[];t;)dpt(e,ypt(t)),t=mpt(t);return e}:Ept;Z0e.exports=wpt});var ege=_((kHt,$0e)=>{var Ipt=md(),Bpt=S8();function vpt(t,e){return Ipt(t,Bpt(t),e)}$0e.exports=vpt});var b8=_((QHt,tge)=>{var Ppt=KL(),Dpt=S8(),Spt=Gy();function bpt(t){return Ppt(t,Spt,Dpt)}tge.exports=bpt});var nge=_((RHt,rge)=>{var xpt=Object.prototype,kpt=xpt.hasOwnProperty;function Qpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&kpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}rge.exports=Qpt});var sge=_((FHt,ige)=>{var Rpt=$D();function Fpt(t,e){var r=e?Rpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}ige.exports=Fpt});var age=_((THt,oge)=>{var Tpt=/\w*$/;function Lpt(t){var e=new t.constructor(t.source,Tpt.exec(t));return e.lastIndex=t.lastIndex,e}oge.exports=Lpt});var fge=_((LHt,Age)=>{var lge=hd(),cge=lge?lge.prototype:void 0,uge=cge?cge.valueOf:void 0;function Npt(t){return uge?Object(uge.call(t)):{}}Age.exports=Npt});var hge=_((NHt,pge)=>{var Opt=$D(),Mpt=sge(),Upt=age(),_pt=fge(),Hpt=lN(),qpt="[object Boolean]",Gpt="[object Date]",jpt="[object Map]",Ypt="[object Number]",Wpt="[object RegExp]",Kpt="[object Set]",zpt="[object String]",Vpt="[object Symbol]",Jpt="[object ArrayBuffer]",Xpt="[object DataView]",Zpt="[object Float32Array]",$pt="[object Float64Array]",eht="[object Int8Array]",tht="[object Int16Array]",rht="[object Int32Array]",nht="[object Uint8Array]",iht="[object Uint8ClampedArray]",sht="[object Uint16Array]",oht="[object Uint32Array]";function aht(t,e,r){var o=t.constructor;switch(e){case Jpt:return Opt(t);case qpt:case Gpt:return new o(+t);case Xpt:return Mpt(t,r);case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:case sht:case oht:return Hpt(t,r);case jpt:return new o;case Ypt:case zpt:return new o(t);case Wpt:return Upt(t);case Kpt:return new o;case Vpt:return _pt(t)}}pge.exports=aht});var dge=_((OHt,gge)=>{var lht=qI(),cht=Ju(),uht="[object Map]";function Aht(t){return cht(t)&&lht(t)==uht}gge.exports=Aht});var Cge=_((MHt,Ege)=>{var fht=dge(),pht=WD(),mge=KD(),yge=mge&&mge.isMap,hht=yge?pht(yge):fht;Ege.exports=hht});var Ige=_((UHt,wge)=>{var ght=qI(),dht=Ju(),mht="[object Set]";function yht(t){return dht(t)&&ght(t)==mht}wge.exports=yht});var Dge=_((_Ht,Pge)=>{var Eht=Ige(),Cht=WD(),Bge=KD(),vge=Bge&&Bge.isSet,wht=vge?Cht(vge):Eht;Pge.exports=wht});var x8=_((HHt,kge)=>{var Iht=HD(),Bht=Y0e(),vht=rS(),Pht=K0e(),Dht=V0e(),Sht=aN(),bht=eS(),xht=X0e(),kht=ege(),Qht=ZL(),Rht=b8(),Fht=qI(),Tht=nge(),Lht=hge(),Nht=cN(),Oht=ql(),Mht=OI(),Uht=Cge(),_ht=sl(),Hht=Dge(),qht=JD(),Ght=Gy(),jht=1,Yht=2,Wht=4,Sge="[object Arguments]",Kht="[object Array]",zht="[object Boolean]",Vht="[object Date]",Jht="[object Error]",bge="[object Function]",Xht="[object GeneratorFunction]",Zht="[object Map]",$ht="[object Number]",xge="[object Object]",e0t="[object RegExp]",t0t="[object Set]",r0t="[object String]",n0t="[object Symbol]",i0t="[object WeakMap]",s0t="[object ArrayBuffer]",o0t="[object DataView]",a0t="[object Float32Array]",l0t="[object Float64Array]",c0t="[object Int8Array]",u0t="[object Int16Array]",A0t="[object Int32Array]",f0t="[object Uint8Array]",p0t="[object Uint8ClampedArray]",h0t="[object Uint16Array]",g0t="[object Uint32Array]",ri={};ri[Sge]=ri[Kht]=ri[s0t]=ri[o0t]=ri[zht]=ri[Vht]=ri[a0t]=ri[l0t]=ri[c0t]=ri[u0t]=ri[A0t]=ri[Zht]=ri[$ht]=ri[xge]=ri[e0t]=ri[t0t]=ri[r0t]=ri[n0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[g0t]=!0;ri[Jht]=ri[bge]=ri[i0t]=!1;function fk(t,e,r,o,a,n){var u,A=e&jht,p=e&Yht,h=e&Wht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!_ht(t))return t;var E=Oht(t);if(E){if(u=Tht(t),!A)return bht(t,u)}else{var I=Fht(t),v=I==bge||I==Xht;if(Mht(t))return Sht(t,A);if(I==xge||I==Sge||v&&!a){if(u=p||v?{}:Nht(t),!A)return p?kht(t,Dht(u,t)):xht(t,Pht(u,t))}else{if(!ri[I])return a?t:{};u=Lht(t,I,A)}}n||(n=new Iht);var x=n.get(t);if(x)return x;n.set(t,u),Hht(t)?t.forEach(function(N){u.add(fk(N,e,r,N,t,n))}):Uht(t)&&t.forEach(function(N,U){u.set(U,fk(N,e,r,U,t,n))});var C=h?p?Rht:Qht:p?Ght:qht,F=E?void 0:C(t);return Bht(F||t,function(N,U){F&&(U=N,N=t[U]),vht(u,U,fk(N,e,r,U,t,n))}),u}kge.exports=fk});var k8=_((qHt,Qge)=>{var d0t=x8(),m0t=1,y0t=4;function E0t(t){return d0t(t,m0t|y0t)}Qge.exports=E0t});var Q8=_((GHt,Rge)=>{var C0t=I_();function w0t(t,e,r){return t==null?t:C0t(t,e,r)}Rge.exports=w0t});var Oge=_((VHt,Nge)=>{var I0t=Object.prototype,B0t=I0t.hasOwnProperty;function v0t(t,e){return t!=null&&B0t.call(t,e)}Nge.exports=v0t});var Uge=_((JHt,Mge)=>{var P0t=Oge(),D0t=B_();function S0t(t,e){return t!=null&&D0t(t,e,P0t)}Mge.exports=S0t});var Hge=_((XHt,_ge)=>{function b0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}_ge.exports=b0t});var Gge=_((ZHt,qge)=>{var x0t=Xx(),k0t=pU();function Q0t(t,e){return e.length<2?t:x0t(t,k0t(e,0,-1))}qge.exports=Q0t});var F8=_(($Ht,jge)=>{var R0t=Gd(),F0t=Hge(),T0t=Gge(),L0t=oC();function N0t(t,e){return e=R0t(e,t),t=T0t(t,e),t==null||delete t[L0t(F0t(e))]}jge.exports=N0t});var T8=_((e6t,Yge)=>{var O0t=F8();function M0t(t,e){return t==null?!0:O0t(t,e)}Yge.exports=M0t});var Jge=_((x6t,H0t)=>{H0t.exports={name:"@yarnpkg/cli",version:"4.3.0",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var G8=_((o9t,lde)=>{"use strict";lde.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var ude=_((a9t,cde)=>{"use strict";var agt=G8();function lgt(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=agt(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}cde.exports=lgt});var pde=_((l9t,fde)=>{"use strict";var cgt=ude();function ugt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var Agt=ugt(cgt),fgt="text/plain",pgt="us-ascii",Ade=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),hgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,x=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(x=x.toLowerCase(),x===pgt)?"":`${v}${x?`=${x}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==fgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function ggt(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 hgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,x=a.pathname.slice(A,v);p+=x.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];Ade(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])Ade(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var j8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>j8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=ggt(t,e));let a=Agt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};j8.MAX_INPUT_LENGTH=2048;fde.exports=j8});var dde=_((c9t,gde)=>{"use strict";var dgt=G8();function hde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=dgt(t);if(t=t.substring(t.indexOf("://")+3),hde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var mgt=pde(),mde=dde();function ygt(t){var e=mgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),mde(e.protocols)||e.protocols.length===0&&mde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}yde.exports=ygt});var wde=_((A9t,Cde)=>{"use strict";var Egt=Ede();function Y8(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=Egt(t),o=r.resource.split("."),a=null;switch(r.toString=function(N){return Y8.stringify(this,N)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-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 x=a.length>n&&a[n+1]==="-"?n+1:n;a.length>x+2&&["raw","src","blob","tree","edit"].indexOf(a[x+1])>=0&&(r.filepathtype=a[x+1],r.ref=a[x+2],a.length>x+3&&(r.filepath=a.slice(x+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,F=C.exec(r.pathname);return F!=null&&(r.source="bitbucket-server",F[1]==="users"?r.owner="~"+F[2]:r.owner=F[2],r.organization=r.owner,r.name=F[3],a=F[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}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Cgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+wgt(t)+a;default:return t.href}};function Cgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function wgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Cde.exports=Y8});var Ode=_((j5t,Nde)=>{var Rgt=qb(),Fgt=eS(),Tgt=ql(),Lgt=AE(),Ngt=w_(),Ogt=oC(),Mgt=N1();function Ugt(t){return Tgt(t)?Rgt(t,Ogt):Lgt(t)?[t]:Fgt(Ngt(Mgt(t)))}Nde.exports=Ugt});function Ggt(t,e){return e===1&&qgt.has(t[0])}function v2(t){let e=Array.isArray(t)?t:(0,_de.default)(t);return e.map((o,a)=>_gt.test(o)?`[${o}]`:Hgt.test(o)&&!Ggt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function jgt(t,e){let r=[];if(e.methodName!==null&&r.push(fe.pretty(t,e.methodName,fe.Type.CODE)),e.file!==null){let o=[];o.push(fe.pretty(t,e.file,fe.Type.PATH)),e.line!==null&&(o.push(fe.pretty(t,e.line,fe.Type.NUMBER)),e.column!==null&&o.push(fe.pretty(t,e.column,fe.Type.NUMBER))),r.push(`(${o.join(fe.pretty(t,":","grey"))})`)}return r.join(" ")}function dk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(x=>({text:x,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[x,C]of p){if(C.size>1){let F=[...C].map(([N,U])=>{let V=fe.pretty(t.configuration,N,fe.Type.INSPECT),te=U.size>0?jgt(t.configuration,U.values().next().value):null;return te!==null?` ${V} at ${te}`:` -${V}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,x,de.Type.CODE)}; conflicting values are:${R}`,fixable:!1})}else{let[[R]]=C,N=(0,Mde.default)(v,x);if(JSON.stringify(N)===JSON.stringify(R))continue;if(!o){let U=typeof N>"u"?`Missing field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}`:typeof R>"u"?`Extraneous field ${de.pretty(t.configuration,x,de.Type.CODE)} currently set to ${de.pretty(t.configuration,N,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}, found ${de.pretty(t.configuration,N,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof R>"u"?(0,Hde.default)(v,x):(0,Ude.default)(v,x,R),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function qde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:_e.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=_e.sortMap(r.children,o=>o.value[1]),r}var Mde,Ude,_de,Hde,wC,Mgt,Ugt,_gt,v2=Et(()=>{Ye();Mde=$e(d2()),Ude=$e(Q8()),_de=$e(Ode()),Hde=$e(T8()),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 o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;_e.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Mgt=/^[0-9]+$/,Ugt=/^[a-zA-Z0-9_]+$/,_gt=new Set(["scripts",...Ot.allDependencies])});var Gde=_((e7t,sH)=>{var Ggt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),x=I.length-1;x>=0;x--)v=new t.type.Term(".",[new t.type.Term("-",[I[x],I[x].pair]),v]),delete I[x].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,x=0;x=0;x--)I=new t.type.Term(".",[E[x],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),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 sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Ggt)});var ime=_(Yr=>{"use strict";var em=process.platform==="win32",oH="aes-256-cbc",jgt="sha256",Wde="The current environment doesn't support interactive reading from TTY.",Yn=ve("fs"),jde=process.binding("tty_wrap").TTY,lH=ve("child_process"),u0=ve("path"),cH={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},Jf="none",Zc,BC,Yde=!1,c0,mk,aH,Ygt=0,hH="",$d=[],yk,Kde=!1,uH=!1,D2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return mk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Wgt(t,e){function r(U){var V,te="",ae;for(aH=aH||ve("os").tmpdir();;){V=u0.join(aH,U+te);try{ae=Yn.openSync(V,"wx")}catch(fe){if(fe.code==="EEXIST"){te++;continue}else throw fe}Yn.closeSync(ae);break}return V}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),x=ve("crypto"),C,R,N;C=x.createHash(jgt),C.update(""+process.pid+Ygt+++Math.random()),N=C.digest("hex"),R=x.createDecipher(oH,N),o=zde(t),em?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+c0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+c0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+N+'" >"'+h+'"; echo 1 >"'+v+'"']),D2&&D2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=R.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+R.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Wde+(p?` -`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Kgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(c0||(em?process.env.PSModulePath?(c0="powershell.exe",mk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(c0="cscript.exe",mk=["//nologo",__dirname+"\\read.cs.js"]):(c0="/bin/sh",mk=[__dirname+"/read.sh"])),em&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=zde(t),D2&&D2("execFileSync",e);try{r.input=lH.execFileSync(c0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Wde+(o?` -`+o:"")),r.error.method="execFileSync",r.error.program=c0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Wgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Kgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,em){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,BC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),BC=new jde(Jf,!0)}catch{}if(process.stdout.isTTY)Zc=process.stdout.fd;else{try{Zc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Zc!="number")try{Zc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),BC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),BC=new jde(Jf,!1)}catch{}if(process.stdout.isTTY)Zc=process.stdout.fd;else try{Zc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;yk="";function x(C){return C===Yde?!0:BC.setRawMode(C)!==0?!1:(Yde=C,!0)}if(Kde||!BC||typeof Zc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Zc,t.display),t.display=""),!t.displayOnly){if(!x(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){x(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),yk+=I):(I=` -`,yk+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Zc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Zc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Zc,` +${V}`}).join("");h.push({text:`Conflict detected in constraint targeting ${fe.pretty(t.configuration,x,fe.Type.CODE)}; conflicting values are:${F}`,fixable:!1})}else{let[[F]]=C,N=(0,Mde.default)(v,x);if(JSON.stringify(N)===JSON.stringify(F))continue;if(!o){let U=typeof N>"u"?`Missing field ${fe.pretty(t.configuration,x,fe.Type.CODE)}; expected ${fe.pretty(t.configuration,F,fe.Type.INSPECT)}`:typeof F>"u"?`Extraneous field ${fe.pretty(t.configuration,x,fe.Type.CODE)} currently set to ${fe.pretty(t.configuration,N,fe.Type.INSPECT)}`:`Invalid field ${fe.pretty(t.configuration,x,fe.Type.CODE)}; expected ${fe.pretty(t.configuration,F,fe.Type.INSPECT)}, found ${fe.pretty(t.configuration,N,fe.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof F>"u"?(0,Hde.default)(v,x):(0,Ude.default)(v,x,F),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function qde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${fe.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:fe.tuple(fe.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:fe.tuple(fe.Type.NO_HINT,h)}))})}let u={value:fe.tuple(fe.Type.LOCATOR,o.anchoredLocator),children:He.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=He.sortMap(r.children,o=>o.value[1]),r}var Mde,Ude,_de,Hde,EC,_gt,Hgt,qgt,P2=Et(()=>{Ye();Mde=Ze(m2()),Ude=Ze(Q8()),_de=Ze(Ode()),Hde=Ze(T8()),EC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;He.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},_gt=/^[0-9]+$/,Hgt=/^[a-zA-Z0-9_]+$/,qgt=new Set(["scripts",...Ot.allDependencies])});var Gde=_((r7t,sH)=>{var Ygt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),x=I.length-1;x>=0;x--)v=new t.type.Term(".",[new t.type.Term("-",[I[x],I[x].pair]),v]),delete I[x].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,x=0;x=0;x--)I=new t.type.Term(".",[E[x],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),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 sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Ygt)});var ime=_(Wr=>{"use strict";var $d=process.platform==="win32",oH="aes-256-cbc",Wgt="sha256",Wde="The current environment doesn't support interactive reading from TTY.",Yn=ve("fs"),jde=process.binding("tty_wrap").TTY,lH=ve("child_process"),u0=ve("path"),cH={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},Jf="none",Zc,wC,Yde=!1,c0,yk,aH,Kgt=0,hH="",Zd=[],Ek,Kde=!1,uH=!1,D2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return yk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var V,te="",le;for(aH=aH||ve("os").tmpdir();;){V=u0.join(aH,U+te);try{le=Yn.openSync(V,"wx")}catch(ae){if(ae.code==="EEXIST"){te++;continue}else throw ae}Yn.closeSync(le);break}return V}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),x=ve("crypto"),C,F,N;C=x.createHash(Wgt),C.update(""+process.pid+Kgt+++Math.random()),N=C.digest("hex"),F=x.createDecipher(oH,N),o=zde(t),$d?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+c0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+c0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+N+'" >"'+h+'"; echo 1 >"'+v+'"']),D2&&D2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=F.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+F.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Wde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Vgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(c0||($d?process.env.PSModulePath?(c0="powershell.exe",yk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(c0="cscript.exe",yk=["//nologo",__dirname+"\\read.cs.js"]):(c0="/bin/sh",yk=[__dirname+"/read.sh"])),$d&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=zde(t),D2&&D2("execFileSync",e);try{r.input=lH.execFileSync(c0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Wde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=c0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Vgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,$d){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,wC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),wC=new jde(Jf,!0)}catch{}if(process.stdout.isTTY)Zc=process.stdout.fd;else{try{Zc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Zc!="number")try{Zc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),wC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),wC=new jde(Jf,!1)}catch{}if(process.stdout.isTTY)Zc=process.stdout.fd;else try{Zc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ek="";function x(C){return C===Yde?!0:wC.setRawMode(C)!==0?!1:(Yde=C,!0)}if(Kde||!wC||typeof Zc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Zc,t.display),t.display=""),!t.displayOnly){if(!x(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){x(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ek+=I):(I=` +`,Ek+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Zc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Zc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Zc,` `),x(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Rs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=u0.normalize(em?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=u0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",em?"i":""),"~")}function vC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Vde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,x;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(x=I.charCodeAt(0),v&&v===n&&x===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=x),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Jde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function Xde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Vde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Jde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=u0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=$d[$d.length-n]||"")}return r}function Zde(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o -And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(x){return x==="charlist"?r.text:x==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=vC(e.charlist?e.charlist+"":"$",Zde),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Vde([u],n.caseSensitive,!0),r.text=Jde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function tme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Rs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return tme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return tme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Rs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var x=u0.resolve(I+=v+u0.sep);if(!Yn.existsSync(x))Yn.mkdirSync(x);else if(!Yn.statSync(x).isDirectory())throw new Error("Non directory already exists: "+x);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):u0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(u0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function rme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=rme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Rs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=rme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Rs({hideEchoBack:!1,history:!0},t,{prompt:function(){return em?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function nme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Rs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return nme(t,e)};Yr.keyInYNStrict=function(t,e){return nme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Rs({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Rs({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function Jgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ls(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Jgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=u0.normalize($d?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=u0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",$d?"i":""),"~")}function IC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Vde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,x;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(x=I.charCodeAt(0),v&&v===n&&x===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=x),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Jde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function Xde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Vde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Jde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=u0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Zd[Zd.length-n]||"")}return r}function Zde(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(x){return x==="charlist"?r.text:x==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=IC(e.charlist?e.charlist+"":"$",Zde),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Vde([u],n.caseSensitive,!0),r.text=Jde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Wr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Wr.question(A,n);return I};function tme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Wr.question(t,Ls({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Wr.questionInt=function(t,e){return tme(t,e,function(r){return parseInt(r,10)})};Wr.questionFloat=function(t,e){return tme(t,e,parseFloat)};Wr.questionPath=function(t,e){var r,o="",a=Ls({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var x=u0.resolve(I+=v+u0.sep);if(!Yn.existsSync(x))Yn.mkdirSync(x);else if(!Yn.statSync(x).isDirectory())throw new Error("Non directory already exists: "+x);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):u0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(u0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Wr.question(t,a),r};function rme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Wr.promptCL=function(t,e){var r=Ls({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=rme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Wr.prompt(r),o.args};Wr.promptLoop=function(t,e){for(var r=Ls({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Wr.prompt(r)););};Wr.promptCLLoop=function(t,e){var r=Ls({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=rme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Wr.prompt(r),!o.hRes;);};Wr.promptSimShell=function(t){return Wr.prompt(Ls({hideEchoBack:!1,history:!0},t,{prompt:function(){return $d?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function nme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Wr.keyIn(t,Ls(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Wr.keyInYN=function(t,e){return nme(t,e)};Wr.keyInYNStrict=function(t,e){return nme(t,e,"yn")};Wr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Wr.keyIn(t,Ls({limit:null},e,{hideEchoBack:!0,mask:""}))};Wr.keyInSelect=function(t,e,r){var o=Ls({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` `;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` `,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` `),o.limit=a,A+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return yk};function P2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return P2("print",arguments)};Yr.setPrompt=function(){return P2("prompt",arguments)};Yr.setEncoding=function(){return P2("encoding",arguments)};Yr.setMask=function(){return P2("mask",arguments)};Yr.setBufferSize=function(){return P2("bufferSize",arguments)}});var mH=_((r7t,gl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(J,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+J)},put:function(J,X){return X==="end_of_file"?(this.text+=J,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+J+this.text.substring(X+J.length),!0)},get_byte:function(J){if(J==="end_of_stream")return-1;var X=Math.floor(J/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(J/2)],0);return J%2===0?Z&255:Z/256>>>0},put_byte:function(J,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|J&255):(ie=ie&255,ie=(J&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var J=tau_file_system.files[this.path];return J?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length]: "),A+=e),n[Wr.keyIn(A,o).toLowerCase()]};Wr.getRawInput=function(){return Ek};function S2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Wr.setDefaultOptions(r)[t]}Wr.setPrint=function(){return S2("print",arguments)};Wr.setPrompt=function(){return S2("prompt",arguments)};Wr.setEncoding=function(){return S2("encoding",arguments)};Wr.setMask=function(){return S2("mask",arguments)};Wr.setBufferSize=function(){return S2("bufferSize",arguments)}});var mH=_((i7t,gl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var R=tau_file_system.files[w];if(!R){if(y==="read")return null;R={path:w,text:"",type:S,get:function(J,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+J)},put:function(J,X){return X==="end_of_file"?(this.text+=J,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+J+this.text.substring(X+J.length),!0)},get_byte:function(J){if(J==="end_of_stream")return-1;var X=Math.floor(J/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(J/2)],0);return J%2===0?Z&255:Z/256>>>0},put_byte:function(J,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|J&255):(ie=ie&255,ie=(J&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var J=tau_file_system.files[this.path];return J?!0:null}},tau_file_system.files[w]=R}return y==="write"&&(R.text=""),R}},tau_user_input={buffer:"",get:function(w,S){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,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}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 S,y=0,F=0,J=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=N(this.thread,this.text.substr(ie.len)),F=ie.line,J=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var be=[],Le=!1;if(/^\n/.exec(S)!==null){F++,J=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in R)if(R.hasOwnProperty(ot)){var dt=R[ot].exec(S);dt&&be.push({value:dt[0],name:ot,matches:dt})}if(!be.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:J}]);var ie=r(be,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=J,ie.line=F,S=S.replace(ie.value,""),J+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Le;break;case"string":var Gt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),Gt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Le=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Le=!1}var bt=this.set_last_tokens(X);return bt.length===0?null:bt};function V(w,S,y,F,J){if(!S[y])return{type:A,value:b.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new b.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new b.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var be=Z.value.length-1;be>=0;be--)ie=new H(".",[new b.type.Num(n(Z.value,be),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var be=Z.value.length-1;be>=0;be--)ie=new H(".",[new b.type.Term(Z.value.charAt(be),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var bt=V(w,S,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:S[bt.len]&&S[bt.len].name==="r_paren"?(bt.len++,bt):{type:A,derived:!0,value:b.error.syntax(S[bt.len]?S[bt.len]:S[bt.len-1],") or operator expected",!S[bt.len])};case"l_bracket":var bt=V(w,S,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:S[bt.len]&&S[bt.len].name==="r_bracket"?(bt.len++,bt.value=new H("{}",[bt.value]),bt):{type:A,derived:!0,value:b.error.syntax(S[bt.len]?S[bt.len]:S[bt.len-1],"} or operator expected",!S[bt.len])}}var Le=te(w,S,y,J);return Le.type===p||Le.derived||(Le=ae(w,S,y),Le.type===p||Le.derived)?Le:{type:A,derived:!1,value:b.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),Gt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var bt=V(w,S,y,F,J);if(bt.type!==A)return Z.value==="-"&&!Z.space&&b.type.is_number(bt.value)?{value:new b.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}else if($t&&$t.indexOf("fx")>-1){var bt=V(w,S,y,dt,J);if(bt.type!==A)return{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}}y=Gt;var bt=V(w,S,y,dt,J);if(bt.type===p){y=bt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new b.type.Term(Z.value,[bt.value]),len:++bt.len,type:p};if($t.indexOf("xfx")>-1){var mr=V(w,S,y+1,an,J);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=V(w,S,y+1,Qr,J);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(bt.type!==A)for(;;){y=bt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)bt={value:new b.type.Term(Z.value,[bt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=V(w,S,++y,an,J);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,bt={value:new b.type.Term(Z.value,[bt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:b.error.syntax(S[bt.len-1],"operator expected")};return bt}return bt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:b.error.syntax(S[y-1],"unfounded token")};var J=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new b.type.Term(J.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:b.error.syntax(S[y+1],"argument expected")};var Z=V(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=V(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new b.type.Term(J.value,X)}}return{type:A,derived:!1,value:b.error.syntax(S[y],"term expected")}}function ae(w,S,y){if(!S[y])return{type:A,derived:!1,value:b.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=V(w,S,++y,"999",!0),J=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new b.type.Term("[]",[])}:{type:A,derived:!0,value:b.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=V(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};J.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=V(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(J,X)}:{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:b.error.syntax(S[y],"list expected")}}function fe(w,S,y){var F=S[y].line,J=V(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(J.type!==A)if(y=J.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,b.type.is_term(J.value)){if(J.value.indicator===":-/2"?(X=new b.type.Rule(J.value.args[0],we(J.value.args[1])),Z={value:X,len:y,type:p}):J.value.indicator==="-->/2"?(X=he(new b.type.Rule(J.value.args[0],J.value.args[1]),w),X.body=we(X.body),Z={value:X,len:y,type:b.type.is_rule(X)?p:A}):(X=new b.type.Rule(J.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(b.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:b.error.syntax(S[y],"callable expected")};else return{type:A,value:b.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return J}function ue(w,S,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),J={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var be=fe(w,ie,Z);if(be.type===A)return new H("throw",[be.value]);if(be.value.body===null&&be.value.head.indicator==="?-/1"){var Le=new Ve(w.session);Le.add_goal(be.value.head.args[0]),Le.answer(function(dt){b.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(b.warning.failed_goal(be.value.head.args[0],be.len))}),Z=be.len;var ot=!0}else if(be.value.body===null&&be.value.head.indicator===":-/1"){var ot=w.run_directive(be.value.head.args[0]);Z=be.len,be.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=be.value.head.indicator,y.reconsult!==!1&&J[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(Gt){return Gt.dynamic}),J[X]=!0);var ot=w.add_rule(be.value,y);Z=be.len}if(!ot)return ot}while(!0);return!0}function me(w,S){var y=new U(w);y.new_text(S);var F=0;do{var J=y.get_tokens(F);if(J===null)break;var X=V(w,J,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(J[Z]&&J[Z].name==="atom"&&J[Z].raw===".")w.add_goal(we(X.value));else{var be=J[Z];return new H("throw",[b.error.syntax(be||J[Z-1],". or operator expected",!be)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function he(w,S){w=w.rename(S);var y=S.next_free_variable(),F=Be(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function Be(w,S,y){var F;if(b.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(b.type.is_term(w)&&w.indicator===",/2"){var J=Be(w.args[0],S,y);if(J.error)return J;var X=Be(w.args[1],J.variable,y);return X.error?X:{value:new H(",",[J.value,X.value]),variable:X.variable,error:!1}}else{if(b.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(b.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(b.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return b.type.is_variable(Z)?{value:b.error.instantiation("DCG"),variable:S,error:!0}:b.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:b.error.type("list",w,"DCG"),variable:S,error:!0}}else return b.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:b.error.type("callable",w,"DCG"),variable:S,error:!0}}}function we(w){return b.type.is_variable(w)?new H("call",[w]):b.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[we(w.args[0]),we(w.args[1])]):w}function g(w,S){for(var y=S||new b.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new b.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function Pe(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new Fe(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function Fe(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var At=0;function H(w,S,y){this.ref=y||++At,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var at=0;function Re(w,S,y,F,J,X){this.id=at++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=J!==void 0?J:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function ke(w){w=w||{},this.links=w}function xe(w,S,y){S=S||new ke,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function He(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Ve(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof gl<"u"&&gl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof gl<"u"&&gl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof gl<"u"&&gl.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(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:b.flag.bounded.value,max_integer:b.flag.max_integer.value,min_integer:b.flag.min_integer.value,integer_rounding_function:b.flag.integer_rounding_function.value,char_conversion:b.flag.char_conversion.value,debug:b.flag.debug.value,max_arity:b.flag.max_arity.value,unknown:b.flag.unknown.value,double_quotes:b.flag.double_quotes.value,occurs_check:b.flag.occurs_check.value,dialect:b.flag.dialect.value,version_data:b.flag.version_data.value,nodejs:b.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 Ve(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 qe(w,S,y){this.id=w,this.rules=S,this.exports=y,b.module[w]=this}qe.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!b.type.is_variable(w))return null;var y={};return y[this.id]=w,new ke(y)},Fe.prototype.unify=function(w,S){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new ke:null},H.prototype.unify=function(w,S){if(b.type.is_term(w)&&this.indicator===w.indicator){for(var y=new ke,F=0;F=0){var F=this.args[0].value,J=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(J!==0?J:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var be=this.id,Le=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Le===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(be)&&be!=="{}"&&be!=="[]"&&(be="'"+x(be)+"'"),be+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Le.priority>S.priority||Le.priority===S.priority&&(Le.class==="xfy"&&this.indicator!==S.indicator||Le.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Le.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Le.class==="xfy"&&y==="left");Le.indicator=this.indicator;var dt=ot?"(":"",Gt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Le.class)!==-1?dt+be+" "+this.args[0].toString(w,Le)+Gt:["yf","xf"].indexOf(Le.class)!==-1?dt+this.args[0].toString(w,Le)+" "+be+Gt:dt+this.args[0].toString(w,Le,"left")+" "+this.id+" "+this.args[1].toString(w,Le,"right")+Gt}},Re.prototype.toString=function(w){return"("+this.id+")"},ke.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},He.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y\?\@\^\~\\]+|'(?:[^']*?(?:\\(?: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,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}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 S,y=0,R=0,J=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=N(this.thread,this.text.substr(ie.len)),R=ie.line,J=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var ke=[],Le=!1;if(/^\n/.exec(S)!==null){R++,J=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in F)if(F.hasOwnProperty(ot)){var dt=F[ot].exec(S);dt&&ke.push({value:dt[0],name:ot,matches:dt})}if(!ke.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:R,start:J}]);var ie=r(ke,function(kr,mr){return kr.value.length>=mr.value.length?kr:mr});switch(ie.start=J,ie.line=R,S=S.replace(ie.value,""),J+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Le;break;case"string":var Gt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),Gt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var tr=X[X.length-1];tr&&(tr.space=!0),Le=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Le=!1}var bt=this.set_last_tokens(X);return bt.length===0?null:bt};function V(w,S,y,R,J){if(!S[y])return{type:A,value:b.error.syntax(S[y-1],"expression expected",!0)};var X;if(R==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new b.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new b.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var ke=Z.value.length-1;ke>=0;ke--)ie=new H(".",[new b.type.Num(n(Z.value,ke),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var ke=Z.value.length-1;ke>=0;ke--)ie=new H(".",[new b.type.Term(Z.value.charAt(ke),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var bt=V(w,S,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:S[bt.len]&&S[bt.len].name==="r_paren"?(bt.len++,bt):{type:A,derived:!0,value:b.error.syntax(S[bt.len]?S[bt.len]:S[bt.len-1],") or operator expected",!S[bt.len])};case"l_bracket":var bt=V(w,S,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:S[bt.len]&&S[bt.len].name==="r_bracket"?(bt.len++,bt.value=new H("{}",[bt.value]),bt):{type:A,derived:!0,value:b.error.syntax(S[bt.len]?S[bt.len]:S[bt.len-1],"} or operator expected",!S[bt.len])}}var Le=te(w,S,y,J);return Le.type===p||Le.derived||(Le=le(w,S,y),Le.type===p||Le.derived)?Le:{type:A,derived:!1,value:b.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(R),Gt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],tr=w.__lookup_operator_classes(R,Z.value);if(tr&&tr.indexOf("fy")>-1){var bt=V(w,S,y,R,J);if(bt.type!==A)return Z.value==="-"&&!Z.space&&b.type.is_number(bt.value)?{value:new b.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}else if(tr&&tr.indexOf("fx")>-1){var bt=V(w,S,y,dt,J);if(bt.type!==A)return{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}}y=Gt;var bt=V(w,S,y,dt,J);if(bt.type===p){y=bt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(R,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(R,"|"))){var ln=dt,kr=R,tr=w.__lookup_operator_classes(R,Z.value);if(tr.indexOf("xf")>-1)return{value:new b.type.Term(Z.value,[bt.value]),len:++bt.len,type:p};if(tr.indexOf("xfx")>-1){var mr=V(w,S,y+1,ln,J);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(tr.indexOf("xfy")>-1){var mr=V(w,S,y+1,kr,J);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(bt.type!==A)for(;;){y=bt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(R,Z.value)){var tr=w.__lookup_operator_classes(R,Z.value);if(tr.indexOf("yf")>-1)bt={value:new b.type.Term(Z.value,[bt.value]),len:++y,type:p};else if(tr.indexOf("yfx")>-1){var mr=V(w,S,++y,ln,J);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,bt={value:new b.type.Term(Z.value,[bt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:b.error.syntax(S[bt.len-1],"operator expected")};return bt}return bt}function te(w,S,y,R){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!R&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:b.error.syntax(S[y-1],"unfounded token")};var J=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new b.type.Term(J.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:b.error.syntax(S[y+1],"argument expected")};var Z=V(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=V(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new b.type.Term(J.value,X)}}return{type:A,derived:!1,value:b.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:b.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var R=V(w,S,++y,"999",!0),J=[R.value],X=void 0;if(R.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new b.type.Term("[]",[])}:{type:A,derived:!0,value:b.error.syntax(S[y],"] expected")};for(y=R.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(R=V(w,S,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};J.push(R.value),y=R.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,R=V(w,S,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:b.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=R.value,y=R.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(J,X)}:{type:A,derived:!0,value:b.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:b.error.syntax(S[y],"list expected")}}function ae(w,S,y){var R=S[y].line,J=V(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(J.type!==A)if(y=J.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,b.type.is_term(J.value)){if(J.value.indicator===":-/2"?(X=new b.type.Rule(J.value.args[0],Ee(J.value.args[1])),Z={value:X,len:y,type:p}):J.value.indicator==="-->/2"?(X=de(new b.type.Rule(J.value.args[0],J.value.args[1]),w),X.body=Ee(X.body),Z={value:X,len:y,type:b.type.is_rule(X)?p:A}):(X=new b.type.Rule(J.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(b.warning.singleton(ie,X.head.indicator,R))}return Z}else return{type:A,value:b.error.syntax(S[y],"callable expected")};else return{type:A,value:b.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return J}function ce(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var R=new U(w),J={},X;R.new_text(S);var Z=0,ie=R.get_tokens(Z);do{if(ie===null||!ie[Z])break;var ke=ae(w,ie,Z);if(ke.type===A)return new H("throw",[ke.value]);if(ke.value.body===null&&ke.value.head.indicator==="?-/1"){var Le=new $e(w.session);Le.add_goal(ke.value.head.args[0]),Le.answer(function(dt){b.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(b.warning.failed_goal(ke.value.head.args[0],ke.len))}),Z=ke.len;var ot=!0}else if(ke.value.body===null&&ke.value.head.indicator===":-/1"){var ot=w.run_directive(ke.value.head.args[0]);Z=ke.len,ke.value.head.args[0].indicator==="char_conversion/2"&&(ie=R.get_tokens(Z),Z=0)}else{X=ke.value.head.indicator,y.reconsult!==!1&&J[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(Gt){return Gt.dynamic}),J[X]=!0);var ot=w.add_rule(ke.value,y);Z=ke.len}if(!ot)return ot}while(!0);return!0}function Ce(w,S){var y=new U(w);y.new_text(S);var R=0;do{var J=y.get_tokens(R);if(J===null)break;var X=V(w,J,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(J[Z]&&J[Z].name==="atom"&&J[Z].raw===".")w.add_goal(Ee(X.value));else{var ke=J[Z];return new H("throw",[b.error.syntax(ke||J[Z-1],". or operator expected",!ke)])}R=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function de(w,S){w=w.rename(S);var y=S.next_free_variable(),R=Ie(w.body,y,S);return R.error?R.value:(w.body=R.value,w.head.args=w.head.args.concat([y,R.variable]),w.head=new H(w.head.id,w.head.args),w)}function Ie(w,S,y){var R;if(b.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(b.type.is_term(w)&&w.indicator===",/2"){var J=Ie(w.args[0],S,y);if(J.error)return J;var X=Ie(w.args[1],J.variable,y);return X.error?X:{value:new H(",",[J.value,X.value]),variable:X.variable,error:!1}}else{if(b.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(b.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(b.type.is_list(w)){R=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return b.type.is_variable(Z)?{value:b.error.instantiation("DCG"),variable:S,error:!0}:b.type.is_empty_list(Z)?(ie.args[1]=R,{value:new H("=",[S,w]),variable:R,error:!1}):{value:b.error.type("list",w,"DCG"),variable:S,error:!0}}else return b.type.is_callable(w)?(R=y.next_free_variable(),w.args=w.args.concat([S,R]),w=new H(w.id,w.args),{value:w,variable:R,error:!1}):{value:b.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Ee(w){return b.type.is_variable(w)?new H("call",[w]):b.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Ee(w.args[0]),Ee(w.args[1])]):w}function g(w,S){for(var y=S||new b.type.Term("[]",[]),R=w.length-1;R>=0;R--)y=new b.type.Term(".",[w[R],y]);return y}function me(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],R=0;R=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new Te(parseInt(w.substring(S+1)),!1)])}function Be(w){this.id=w}function Te(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var at=0;function Re(w,S,y,R,J,X){this.id=at++,this.stream=w,this.mode=S,this.alias=y,this.type=R!==void 0?R:"text",this.reposition=J!==void 0?J:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function xe(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function je(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function be(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new $e(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof gl<"u"&&gl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof gl<"u"&&gl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof gl<"u"&&gl.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(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:b.flag.bounded.value,max_integer:b.flag.max_integer.value,min_integer:b.flag.min_integer.value,integer_rounding_function:b.flag.integer_rounding_function.value,char_conversion:b.flag.char_conversion.value,debug:b.flag.debug.value,max_arity:b.flag.max_arity.value,unknown:b.flag.unknown.value,double_quotes:b.flag.double_quotes.value,occurs_check:b.flag.occurs_check.value,dialect:b.flag.dialect.value,version_data:b.flag.version_data.value,nodejs:b.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 $e(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 _e(w,S,y){this.id=w,this.rules=S,this.exports=y,b.module[w]=this}_e.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Be.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!b.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},Te.prototype.unify=function(w,S){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(b.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,R=0;R=0){var R=this.args[0].value,J=Math.floor(R/26),X=R%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(J!==0?J:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var ke=this.id,Le=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Le===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(ke)&&ke!=="{}"&&ke!=="[]"&&(ke="'"+x(ke)+"'"),ke+(this.args.length?"("+o(this.args,function(tr){return tr.toString(w)}).join(", ")+")":"");var ot=Le.priority>S.priority||Le.priority===S.priority&&(Le.class==="xfy"&&this.indicator!==S.indicator||Le.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Le.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Le.class==="xfy"&&y==="left");Le.indicator=this.indicator;var dt=ot?"(":"",Gt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Le.class)!==-1?dt+ke+" "+this.args[0].toString(w,Le)+Gt:["yf","xf"].indexOf(Le.class)!==-1?dt+this.args[0].toString(w,Le)+" "+ke+Gt:dt+this.args[0].toString(w,Le,"left")+" "+this.id+" "+this.args[1].toString(w,Le,"right")+Gt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},je.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},be.prototype.toString=function(w){for(var S="",y=0;y=0;J--)F=new H(".",[S[J],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},He.prototype.apply=function(w){return new He(this.head.apply(w),this.body!==null?this.body.apply(w):null)},ke.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new ke(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(b.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,b.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(b.format_variable(this.session.rename));this.session.renamed_variables[w.id]=b.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Ve.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,b.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(b.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Ve.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Ve.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Ve.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Ve.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Ve.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new ke,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Ve.prototype.step_rule=function(w,S){var y=S.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],J=0;J1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Ve.prototype.answers=function(w,S,y){var F=S||1e3,J=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){J.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Ve.prototype.again=function(w){for(var S,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&&!b.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 J=this.__calls.shift();this.current_limit<=0?J(null):this.points.length===0?J(!1):b.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],J(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),J(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),J=new Ve(this),X=[];J.add_goal(F),J.step();for(var Z=J.points.length-1;Z>=0;Z--){var ie=J.points[Z],be=S.apply(ie.substitution),Le=y.replace(ie.goal);Le!==null&&(Le=Le.apply(ie.substitution)),X.push(new He(be,Le))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Ve.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return b.error.instantiation(w.level)},Fe.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return b.type.is_unitary_list(this)?this.args[0].interpret(w):b.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},Fe.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===Fe){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof ke},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof He},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof Fe},is_integer:function(w){return w instanceof Fe&&!w.is_float},is_float:function(w){return w instanceof Fe&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(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 Fe&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&b.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&b.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&b.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof Fe&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&b.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!b.type.is_flag(w))return!1;for(var y in b.flag[w.id].allowed)if(!!b.flag[w.id].allowed.hasOwnProperty(y)&&b.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return b.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return b.type.is_term(w)&&(w.indicator==="alias/1"&&b.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&b.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 b.type.is_integer(w)&&w.value>=0||b.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return b.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(b.type.is_variable(w.args[0])||b.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(b.type.is_variable(w.args[0])||b.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"&&(b.type.is_variable(w.args[0])||b.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"&&(b.type.is_variable(w.args[0])||b.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 b.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return b.type.is_term(w)&&(w.indicator==="quoted/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return b.type.is_term(w)&&w.indicator==="force/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return b.type.is_flag(w)&&b.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&b.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,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):b.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:b.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):b.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:b.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:b.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_compound(y)||y.indicator!=="//2")w.throw_error(b.error.type("predicate_indicator",y,S.indicator));else if(b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1]))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],S.indicator));else if(!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];b.type.is_variable(y)?w.throw_error(b.error.instantiation(S.indicator)):!b.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(b.error.type("predicate_indicator",y,S.indicator)):b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1])?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_atom(y.args[0])?b.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(b.error.type("integer",y.args[1],S.indicator)):w.throw_error(b.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_atom(y)?b.type.is_flag(y)?b.type.is_value_flag(y,F)?b.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(b.error.permission("modify","flag",y)):w.throw_error(b.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(b.error.domain("prolog_flag",y,S.indicator)):w.throw_error(b.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_term(y))w.throw_error(b.error.type("term",y,S.indicator));else if(b.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,S){var y=S.args[0],F=S.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_character(y)?b.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(b.error.type("character",F,S.indicator)):w.throw_error(b.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],J=S.args[2];if(b.type.is_variable(y)||b.type.is_variable(F)||b.type.is_variable(J))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_integer(y))w.throw_error(b.error.type("integer",y,S.indicator));else if(!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,S.indicator));else if(!b.type.is_atom(J))w.throw_error(b.error.type("atom",J,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(b.error.domain("operator_priority",y,S.indicator));else if(J.id===",")w.throw_error(b.error.permission("modify","operator",J,S.indicator));else if(J.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(b.error.permission("modify","operator",J,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(b.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][J.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var be;switch(F.id){case"fy":case"fx":be="prefix";break;case"yf":case"xf":be="postfix";break;default:be="infix";break}if(((X.prefix&&be==="prefix"||X.postfix&&be==="postfix"||X.infix&&be==="infix")&&X[be].type!==F.id||X.infix&&be==="postfix"||X.postfix&&be==="infix")&&y.value!==0)w.throw_error(b.error.permission("create","operator",J,S.indicator));else return X[be]&&(Ee(w.session.__operators[X[be].priority][J.id],F.id),w.session.__operators[X[be].priority][J.id].length===0&&delete w.session.__operators[X[be].priority][J.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][J.id]||(w.session.__operators[y.value][J.id]=[]),w.session.__operators[y.value][J.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){b.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var be in w.session.__operators[ie])for(var Le=0;Le/2"){var F=w.points,J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Le){return Le.substitution},w.session.format_error=function(Le){return Le.goal},w.points=[new xe(y.args[0].args[0],S.substitution,S)];var Z=function(Le){w.points=F,w.session.format_success=J,w.session.format_error=X,Le===!1?w.prepend([new xe(S.goal.replace(y.args[1]),S.substitution,S)]):b.type.is_error(Le)?w.throw_error(Le.args[0]):Le===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new xe(S.goal.replace(y.args[0].args[1]).apply(Le),S.substitution.apply(Le),S)])};w.__calls.unshift(Z)}else{var ie=new xe(S.goal.replace(y.args[0]),S.substitution,S),be=new xe(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,be])}},"!/0":function(w,S,y){var F,J,X=[];for(F=S,J=null;F.parent!==null&&F.parent.goal.search(y);)if(J=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=J;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var be=w.points[ie],Le=be.parent;Le!==null&&Le!==F.parent;)Le=Le.parent;Le===null&&Le!==F.parent&&X.push(be)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(w.level)):b.type.is_callable(F)?w.prepend([new xe(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new xe(S.goal.replace(null),S.substitution,S)]):w.throw_error(b.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[J])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new xe(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){b.type.is_variable(y.args[0])?w.throw_error(b.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new xe(y.args[0],S.substitution,S)]);var J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var be=w.points;if(w.points=F,w.session.format_success=J,w.session.format_error=X,b.type.is_error(ie)){for(var Le=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Le.push($t)}w.points=Le;var Gt=w.get_flag("occurs_check").indicator==="true/0",$t=new xe,bt=b.unify(ie.args[0],y.args[1],Gt);bt!==null?($t.substitution=S.substitution.apply(bt),$t.goal=S.goal.replace(y.args[2]).apply(bt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new xe(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=be.length-1;ot>=0;ot--){Qr.push(be[ot]);var mr=be[ot].goal!==null?be[ot].goal.select():null;if(b.type.is_term(mr)&&mr.indicator==="!/0")break}var br=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new xe(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(br),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",J=new xe,X=b.unify(y.args[0],y.args[1],F);X!==null&&(J.goal=S.goal.apply(X).replace(null),J.substitution=S.substitution.apply(X),J.parent=S,w.prepend([J]))},"unify_with_occurs_check/2":function(w,S,y){var F=new xe,J=b.unify(y.args[0],y.args[1],!0);J!==null&&(F.goal=S.goal.apply(J).replace(null),F.substitution=S.substitution.apply(J),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",J=b.unify(y.args[0],y.args[1],F);J===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",J=b.unify(y.args[1],y.args[0],F);J!==null&&y.args[1].apply(J).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(J))w.throw_error(b.error.type("callable",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[J,new H("=",[Z,F])]),be=w.points,Le=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],Gt=function($t){if($t!==!1&&$t!==null&&!b.type.is_error($t))w.__calls.unshift(Gt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=be,w.session.limit=Le,w.session.format_success=ot,b.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var bt=new H("[]"),an=dt.length-1;an>=0;an--)bt=new H(".",[dt[an],bt]);w.prepend([new xe(S.goal.replace(new H("=",[X,bt])),S.substitution,S)])}};w.__calls.unshift(Gt)}},"bagof/3":function(w,S,y){var F,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),be;X.indicator==="^/2"?(be=X.args[0].variables(),X=X.args[1]):be=[],be=be.concat(J.variables());for(var Le=X.variables().filter(function(br){return e(be,br)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Le[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,S);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ls=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ls),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ls]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ns=new H(".",[br[so],Ns]);io.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ns])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),be;X.indicator==="^/2"?(be=X.args[0].variables(),X=X.args[1]):be=[],be=be.concat(J.variables());for(var Le=X.variables().filter(function(br){return e(be,br)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Le[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,S);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ls=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ls),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ls]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ns=new H(".",[br[so],Ns]);io.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ns])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(J)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation("functor/3"));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",y.args[2],"functor/3"));else if(!b.type.is_variable(X)&&!b.type.is_atomic(X))w.throw_error(b.error.type("atomic",y.args[1],"functor/3"));else if(b.type.is_integer(X)&&b.type.is_integer(Z)&&Z.value!==0)w.throw_error(b.error.type("atom",y.args[1],"functor/3"));else if(b.type.is_variable(J)){if(y.args[2].value>=0){for(var ie=[],be=0;be0&&F<=y.args[1].args.length){var J=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new xe(S.goal.replace(J),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(b.type.is_variable(y.args[0])&&(b.type.is_variable(y.args[1])||b.type.is_non_empty_list(y.args[1])&&b.type.is_variable(y.args[1].args[0])))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_fully_list(y.args[1]))w.throw_error(b.error.type("list",y.args[1],y.indicator));else if(b.type.is_variable(y.args[0])){if(!b.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];b.type.is_variable(y.args[0])&&b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):X.length===0&&b.type.is_compound(y.args[1].args[0])?w.throw_error(b.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(b.type.is_compound(y.args[1].args[0])||b.type.is_number(y.args[1].args[0]))?w.throw_error(b.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(b.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var J=y.args[0].args.length-1;J>=0;J--)F=new H(".",[y.args[0].args[J],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new xe(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new xe(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],J=y.args[1];if(!b.type.is_fully_list(J))w.throw_error(b.error.type("list",J,y.indicator));else{var X=g(o(Pe(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_callable(y.args[1]))w.throw_error(b.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 J in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(J)){var X=w.session.rules[y.args[0].indicator][J];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new xe(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(b.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!b.type.is_variable(F)&&(!b.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(b.error.type("predicate_indicator",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[0])&&!b.type.is_atom(F.args[0]))w.throw_error(b.error.type("atom",F.args[0],y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[1])&&!b.type.is_integer(F.args[1]))w.throw_error(b.error.type("integer",F.args[1],y.indicator));else{var J=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),be=parseInt(X.substr(Z+1,X.length-(Z+1))),Le=new H("/",[new H(ie),new Fe(be,!1)]),ot=new H("=",[Le,F]);J.push(new xe(S.goal.replace(ot),S.substitution,S))}w.prepend(J)}},"asserta/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,J;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],J=we(y.args[0].args[1])):(F=y.args[0],J=null),b.type.is_callable(F)?J!==null&&!b.type.is_callable(J)?w.throw_error(b.error.type("callable",J,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 He(F,J,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,J;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],J=we(y.args[0].args[1])):(F=y.args[0],J=null),b.type.is_callable(F)?J!==null&&!b.type.is_callable(J)?w.throw_error(b.error.type("callable",J,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 He(F,J,!0)),w.success(S)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,J;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],J=y.args[0].args[1]):(F=y.args[0],J=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(b.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(S)):w.throw_error(b.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],y.indicator));else if(b.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(b.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Fe(y.args[0].id.length,!1);w.prepend([new xe(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,J,X=y.args[0],Z=y.args[1],ie=y.args[2];if(b.type.is_variable(ie)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_atom(Z))w.throw_error(b.error.type("atom",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_atom(ie))w.throw_error(b.error.type("atom",ie,y.indicator));else{var be=b.type.is_variable(X),Le=b.type.is_variable(Z);if(!be&&!Le)J=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]);else if(be&&!Le)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(J=new H("=",[X,new H(F)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else if(Le&&!be)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(J=new H("=",[Z,new H(F)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var Gt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));J=new H(",",[new H("=",[Gt,X]),new H("=",[$t,Z])]),ot.push(new xe(S.goal.replace(J),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,J=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],be=y.args[4];if(b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_integer(ie))w.throw_error(b.error.type("integer",ie,y.indicator));else if(b.type.is_integer(X)&&X.value<0)w.throw_error(b.error.domain("not_less_than_zero",X,y.indicator));else if(b.type.is_integer(Z)&&Z.value<0)w.throw_error(b.error.domain("not_less_than_zero",Z,y.indicator));else if(b.type.is_integer(ie)&&ie.value<0)w.throw_error(b.error.domain("not_less_than_zero",ie,y.indicator));else{var Le=[],ot=[],dt=[];if(b.type.is_variable(X))for(F=0;F<=J.id.length;F++)Le.push(F);else Le.push(X.value);if(b.type.is_variable(Z))for(F=0;F<=J.id.length;F++)ot.push(F);else ot.push(Z.value);if(b.type.is_variable(ie))for(F=0;F<=J.id.length;F++)dt.push(F);else dt.push(ie.value);var Gt=[];for(var $t in Le)if(!!Le.hasOwnProperty($t)){F=Le[$t];for(var bt in ot)if(!!ot.hasOwnProperty(bt)){var an=ot[bt],Qr=J.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===J.id.length){var mr=J.id.substr(F,an);if(J.id===J.id.substr(0,F)+mr+J.id.substr(F+an,Qr)){var br=new H("=",[new H(mr),be]),Wr=new H("=",[X,new Fe(F)]),Kn=new H("=",[Z,new Fe(an)]),Ls=new H("=",[ie,new Fe(Qr)]),Ti=new H(",",[new H(",",[new H(",",[Wr,Kn]),Ls]),br]);Gt.push(new xe(S.goal.replace(Ti),S.substitution,S))}}}}w.prepend(Gt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],J=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=J,be=b.type.is_variable(F),Le="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))Le+=ie.args[0].id;else if(b.type.is_variable(ie.args[0])&&be){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&be?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],J=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=J,be=b.type.is_variable(F),Le="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))Le+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0])&&be){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.representation("character_code",y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&be?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new Fe(n(F.id,Z),!1),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],J=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_character(F))w.throw_error(b.error.type("character",F,y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_integer(J))w.throw_error(b.error.type("integer",J,y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_character_code(J))w.throw_error(b.error.representation("character_code",y.indicator));else if(b.type.is_variable(J)){var X=new Fe(n(F.id,0),!1);w.prepend([new xe(S.goal.replace(new H("=",[X,J])),S.substitution,S)])}else{var Z=new H(u(J.value));w.prepend([new xe(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,J=y.args[0],X=y.args[1];if(b.type.is_variable(J)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_number(J))w.throw_error(b.error.type("number",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(J);if(!b.type.is_variable(X)){var ie=X,be=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(b.type.is_variable(ie.args[0]))be=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(be=be&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!be&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(be)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Le=w.parse(F),ot=Le.value;!b.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){F=J.toString();for(var dt=new H("[]"),Gt=F.length-1;Gt>=0;Gt--)dt=new H(".",[new H(F.charAt(Gt)),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,J=y.args[0],X=y.args[1];if(b.type.is_variable(J)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_number(J))w.throw_error(b.error.type("number",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(J);if(!b.type.is_variable(X)){var ie=X,be=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0]))be=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(be=be&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!be&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(be)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Le=w.parse(F),ot=Le.value;!b.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){F=J.toString();for(var dt=new H("[]"),Gt=F.length-1;Gt>=0;Gt--)dt=new H(".",[new Fe(n(F,Gt),!1),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],J=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(J)&&!b.type.is_atom(J)?w.throw_error(b.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(b.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],J=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(J)&&!b.type.is_atom(J)?w.throw_error(b.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(b.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),J])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(J)||b.type.is_variable(F)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_list(F))w.throw_error(b.error.type("list",F,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(b.type.is_variable(X)){for(var ie="",be=F;b.type.is_term(be)&&be.indicator==="./2";){if(!b.type.is_atom(be.args[0])&&!b.type.is_number(be.args[0])){w.throw_error(b.error.type("atomic",be.args[0],y.indicator));return}ie!==""&&(ie+=J.id),b.type.is_atom(be.args[0])?ie+=be.args[0].id:ie+=""+be.args[0].value,be=be.args[1]}ie=new H(ie,[]),b.type.is_variable(be)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_term(be)||be.indicator!=="[]/0"?w.throw_error(b.error.type("list",F,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(J.id),function(Le){return new H(Le,[])}));w.prepend([new xe(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){b.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){b.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(b.type.domain("order",F,y.indicator));else{var Z=b.compare(J,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);b.type.is_number(F)?w.prepend([new xe(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(F)||b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_integer(F))w.throw_error(b.error.type("integer",F,y.indicator));else if(!b.type.is_integer(J))w.throw_error(b.error.type("integer",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(b.type.is_variable(X)){var Z=[new xe(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],J=y.args[1];b.type.is_variable(F)&&b.type.is_variable(J)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_variable(F)&&!b.type.is_integer(F)?w.throw_error(b.error.type("integer",F,y.indicator)):!b.type.is_variable(J)&&!b.type.is_integer(J)?w.throw_error(b.error.type("integer",J,y.indicator)):!b.type.is_variable(F)&&F.value<0?w.throw_error(b.error.domain("not_less_than_zero",F,y.indicator)):!b.type.is_variable(J)&&J.value<0?w.throw_error(b.error.domain("not_less_than_zero",J,y.indicator)):(b.type.is_variable(J)||J.value>0)&&(b.type.is_variable(F)?w.prepend([new xe(S.goal.replace(new H("=",[F,new Fe(J.value-1,!1)])),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[J,new Fe(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){b.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){b.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){b.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){b.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){b.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){b.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){b.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){b.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),J=y.args[0].variables(),X=0;X0?bt[bt.length-1]:null,bt!==null&&(Gt=V(w,bt,0,w.__get_max_priority(),!1))}if(Gt.type===p&&Gt.len===bt.length-1&&an.value==="."){Gt=Gt.value.rename(w);var Qr=new H("=",[J,Gt]);if(ie.variables){var mr=g(o(Pe(Gt.variables()),function(br){return new Ie(br)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(Pe(Gt.variables()),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new He(Gt,null).singleton_variables(),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(S.goal.replace(Qr),S.substitution,S)])}else Gt.type===p?w.throw_error(b.error.syntax(bt[Gt.len],"unexpected token",!1)):w.throw_error(Gt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[F,J,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[F,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[F,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,J])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],J=y.args[1],X=y.args[2],Z=b.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(b.type.is_variable(F)||b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else if(!b.type.is_stream(F)&&!b.type.is_atom(F))w.throw_error(b.error.domain("stream_or_alias",F,y.indicator));else if(!b.type.is_stream(Z)||Z.stream===null)w.throw_error(b.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(b.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(b.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(b.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},be=X,Le;b.type.is_term(be)&&be.indicator==="./2";){if(Le=be.args[0],b.type.is_variable(Le)){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_write_option(Le)){w.throw_error(b.error.domain("write_option",Le,y.indicator));return}ie[Le.id]=Le.args[0].id==="true",be=be.args[1]}if(be.indicator!=="[]/0"){b.type.is_variable(be)?w.throw_error(b.error.instantiation(y.indicator)):w.throw_error(b.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=J.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_integer(F)?w.points=[]:w.throw_error(b.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],J=y.args[1];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_flag(F))w.throw_error(b.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in b.flag)if(!!b.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),J])]);X.push(new xe(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],J=y.args[1];b.type.is_variable(F)||b.type.is_variable(J)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?b.type.is_flag(F)?b.type.is_value_flag(F,J)?b.type.is_modifiable_flag(F)?(w.session.flag[F.id]=J,w.success(S)):w.throw_error(b.error.permission("modify","flag",F)):w.throw_error(b.error.domain("flag_value",new H("+",[F,J]),y.indicator)):w.throw_error(b.error.domain("prolog_flag",F,y.indicator)):w.throw_error(b.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new Fe(Number.MAX_SAFE_INTEGER)],value:new Fe(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Fe(Number.MIN_SAFE_INTEGER)],value:new Fe(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)])],value:new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof gl<"u"&&gl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],J={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,b.type.is_term(w)&&b.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;ZJ.value?1:0:J}else return F},operate:function(w,S){if(b.type.is_operator(S)){for(var y=b.type.is_operator(S),F=[],J,X=!1,Z=0;Zw.get_flag("max_integer").value||J0?w.start+w.matches[0].length:w.start,J=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new Fe(w.line+1)]),new H(".",[new H("column",[new Fe(F+1)]),new H(".",[J,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),J=w.length-1;J>=0;J--)F=new H(".",[new Ie(w[J]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new Fe(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new Fe(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,b.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var J=0,X="";if(b.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Le,ot){return!b.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Le!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(J++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var be=typeof S>"u"||S.points.length>0?" ;":".";return J===0?"true"+be:X+be},flatten_error:function(w){if(!b.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new b.type.Session(w)}};typeof gl<"u"?gl.exports=b:window.pl=b})()});function sme(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=ame.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function lme(t,e){ame.set(t,e),t.consult(`:- use_module(library(${Xgt.id})).`)}var EH,Ta,ome,A0,Vgt,Jgt,ame,Xgt,cme=Et(()=>{Ye();EH=$e(d2()),Ta=$e(mH()),ome=$e(ve("vm")),{is_atom:A0,is_variable:Vgt,is_instantiated_list:Jgt}=Ta.default.type;ame=new WeakMap;Xgt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!A0(o)||!A0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Vgt(n)&&h!==null&&sme(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),A0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!A0(o)||!A0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||sme(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!A0(o)||!A0(a)||!A0(n)||!Jgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,x]of u.toJavaScript().entries())E[`$${v}`]=x;ome.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 b2={};zt(b2,{Constraints:()=>S2,DependencyType:()=>pme});function to(t){if(t instanceof DC.default.type.Num)return t.value;if(t instanceof DC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof DC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new Jt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new Jt(44,`Existence error: ${to(t.args[0])} ${to(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:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function Ame(t){let e;try{e=to(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 tm(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Zgt(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 f0(t){return typeof t=="string"?`'${t}'`:"[]"}var fme,DC,pme,ume,CH,S2,x2=Et(()=>{Ye();Ye();Pt();fme=$e(Gde()),DC=$e(mH());v2();cme();(0,fme.default)(DC.default);pme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(pme||{}),ume=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=DC.default.create(o),lme(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 Ame(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new Jt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw Ame(o);yield o}}};S2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new S2(e)}getProjectDatabase(){let e="";for(let r of ume)e+=`dependency_type(${r}). +`;return S},Be.prototype.clone=function(){return new Be(this.id)},Te.prototype.clone=function(){return new Te(this.value,this.is_float)},H.prototype.clone=function(){return new H(this.id,o(this.args,function(w){return w.clone()}))},Re.prototype.clone=function(){return new Stram(this.stream,this.mode,this.alias,this.type,this.reposition,this.eof_action)},Qe.prototype.clone=function(){var w={};for(var S in this.links)!this.links.hasOwnProperty(S)||(w[S]=this.links[S].clone());return new Qe(w)},xe.prototype.clone=function(){return new xe(this.goal.clone(),this.substitution.clone(),this.parent)},je.prototype.clone=function(){return new je(this.head.clone(),this.body!==null?this.body.clone():null)},Be.prototype.equals=function(w){return b.type.is_variable(w)&&this.id===w.id},Te.prototype.equals=function(w){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float},H.prototype.equals=function(w){if(!b.type.is_term(w)||this.indicator!==w.indicator)return!1;for(var S=0;S=0;J--)R=new H(".",[S[J],R]);return R}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},je.prototype.apply=function(w){return new je(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(b.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&R0&&(S=this.head_point().substitution.domain());e(S,b.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Be(b.format_variable(this.session.rename));this.session.renamed_variables[w.id]=b.format_variable(this.session.rename)}return new Be(this.session.renamed_variables[w.id])},be.prototype.next_free_variable=function(){return this.thread.next_free_variable()},$e.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,b.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Be(b.format_variable(this.session.rename))},be.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},$e.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},be.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},$e.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},be.prototype.prepend=function(w){return this.thread.prepend(w)},$e.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},be.prototype.success=function(w,S){return this.thread.success(w,S)},$e.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},be.prototype.throw_error=function(w){return this.thread.throw_error(w)},$e.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new Qe,null,null)])},be.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},$e.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var R=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],J=0;J1)&&this.again()},be.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},$e.prototype.answers=function(w,S,y){var R=S||1e3,J=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){J.answers(w,S-1,y)},1):y&&y()})},be.prototype.again=function(w){return this.thread.again(w)},$e.prototype.again=function(w){for(var S,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&&!b.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var R=Date.now();this.cpu_time_last=R-y,this.cpu_time+=this.cpu_time_last;var J=this.__calls.shift();this.current_limit<=0?J(null):this.points.length===0?J(!1):b.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],J(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),J(S))}},be.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,R=y.select(),J=new $e(this),X=[];J.add_goal(R),J.step();for(var Z=J.points.length-1;Z>=0;Z--){var ie=J.points[Z],ke=S.apply(ie.substitution),Le=y.replace(ie.goal);Le!==null&&(Le=Le.apply(ie.substitution)),X.push(new je(ke,Le))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},$e.prototype.unfold=function(w){return this.session.unfold(w)},Be.prototype.interpret=function(w){return b.error.instantiation(w.level)},Te.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return b.type.is_unitary_list(this)?this.args[0].interpret(w):b.operate(w,this)},Be.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},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SR)return 1;if(w.constructor===Te){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof je},is_variable:function(w){return w instanceof Be},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Be&&w.id==="_"},is_callable:function(w){return w instanceof H},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 H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Be)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Be||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(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 H&&b.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&b.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&b.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof Te&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&b.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!b.type.is_flag(w))return!1;for(var y in b.flag[w.id].allowed)if(!!b.flag[w.id].allowed.hasOwnProperty(y)&&b.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return b.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return b.type.is_term(w)&&(w.indicator==="alias/1"&&b.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&b.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 b.type.is_integer(w)&&w.value>=0||b.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return b.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(b.type.is_variable(w.args[0])||b.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(b.type.is_variable(w.args[0])||b.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"&&(b.type.is_variable(w.args[0])||b.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"&&(b.type.is_variable(w.args[0])||b.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 b.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return b.type.is_term(w)&&(w.indicator==="quoted/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return b.type.is_term(w)&&w.indicator==="force/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return b.type.is_flag(w)&&b.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&b.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,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):b.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:b.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):b.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:b.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:b.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_compound(y)||y.indicator!=="//2")w.throw_error(b.error.type("predicate_indicator",y,S.indicator));else if(b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1]))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],S.indicator));else if(!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],S.indicator));else{var R=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[R]=!0,w.session.rules[R]||(w.session.rules[R]=[])}},"multifile/1":function(w,S){var y=S.args[0];b.type.is_variable(y)?w.throw_error(b.error.instantiation(S.indicator)):!b.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(b.error.type("predicate_indicator",y,S.indicator)):b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1])?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_atom(y.args[0])?b.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(b.error.type("integer",y.args[1],S.indicator)):w.throw_error(b.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],R=S.args[1];b.type.is_variable(y)||b.type.is_variable(R)?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_atom(y)?b.type.is_flag(y)?b.type.is_value_flag(y,R)?b.type.is_modifiable_flag(y)?w.session.flag[y.id]=R:w.throw_error(b.error.permission("modify","flag",y)):w.throw_error(b.error.domain("flag_value",new H("+",[y,R]),S.indicator)):w.throw_error(b.error.domain("prolog_flag",y,S.indicator)):w.throw_error(b.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_term(y))w.throw_error(b.error.type("term",y,S.indicator));else if(b.type.is_module(y)){var R=y.args[0].id;e(w.session.modules,R)===-1&&w.session.modules.push(R)}},"char_conversion/2":function(w,S){var y=S.args[0],R=S.args[1];b.type.is_variable(y)||b.type.is_variable(R)?w.throw_error(b.error.instantiation(S.indicator)):b.type.is_character(y)?b.type.is_character(R)?y.id===R.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=R.id:w.throw_error(b.error.type("character",R,S.indicator)):w.throw_error(b.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],R=S.args[1],J=S.args[2];if(b.type.is_variable(y)||b.type.is_variable(R)||b.type.is_variable(J))w.throw_error(b.error.instantiation(S.indicator));else if(!b.type.is_integer(y))w.throw_error(b.error.type("integer",y,S.indicator));else if(!b.type.is_atom(R))w.throw_error(b.error.type("atom",R,S.indicator));else if(!b.type.is_atom(J))w.throw_error(b.error.type("atom",J,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(b.error.domain("operator_priority",y,S.indicator));else if(J.id===",")w.throw_error(b.error.permission("modify","operator",J,S.indicator));else if(J.id==="|"&&(y.value<1001||R.id.length!==3))w.throw_error(b.error.permission("modify","operator",J,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(R.id)===-1)w.throw_error(b.error.domain("operator_specifier",R,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][J.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var ke;switch(R.id){case"fy":case"fx":ke="prefix";break;case"yf":case"xf":ke="postfix";break;default:ke="infix";break}if(((X.prefix&&ke==="prefix"||X.postfix&&ke==="postfix"||X.infix&&ke==="infix")&&X[ke].type!==R.id||X.infix&&ke==="postfix"||X.postfix&&ke==="infix")&&y.value!==0)w.throw_error(b.error.permission("create","operator",J,S.indicator));else return X[ke]&&(me(w.session.__operators[X[ke].priority][J.id],R.id),w.session.__operators[X[ke].priority][J.id].length===0&&delete w.session.__operators[X[ke].priority][J.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][J.id]||(w.session.__operators[y.value][J.id]=[]),w.session.__operators[y.value][J.id].push(R.id)),!0}}},predicate:{"op/3":function(w,S,y){b.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var ke in w.session.__operators[ie])for(var Le=0;Le/2"){var R=w.points,J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Le){return Le.substitution},w.session.format_error=function(Le){return Le.goal},w.points=[new xe(y.args[0].args[0],S.substitution,S)];var Z=function(Le){w.points=R,w.session.format_success=J,w.session.format_error=X,Le===!1?w.prepend([new xe(S.goal.replace(y.args[1]),S.substitution,S)]):b.type.is_error(Le)?w.throw_error(Le.args[0]):Le===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new xe(S.goal.replace(y.args[0].args[1]).apply(Le),S.substitution.apply(Le),S)])};w.__calls.unshift(Z)}else{var ie=new xe(S.goal.replace(y.args[0]),S.substitution,S),ke=new xe(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,ke])}},"!/0":function(w,S,y){var R,J,X=[];for(R=S,J=null;R.parent!==null&&R.parent.goal.search(y);)if(J=R,R=R.parent,R.goal!==null){var Z=R.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){R=J;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var ke=w.points[ie],Le=ke.parent;Le!==null&&Le!==R.parent;)Le=Le.parent;Le===null&&Le!==R.parent&&X.push(ke)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var R=y.args[0];b.type.is_variable(R)?w.throw_error(b.error.instantiation(w.level)):b.type.is_callable(R)?w.prepend([new xe(S.goal.replace(new H(",",[new H(",",[new H("call",[R]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new xe(S.goal.replace(null),S.substitution,S)]):w.throw_error(b.error.type("callable",R,w.level))},"->/2":function(w,S,y){var R=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(R,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("call",[R]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("\\+",[new H(",",[new H("call",[R]),new H("\\+",[new H("call",[J])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new xe(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){b.type.is_variable(y.args[0])?w.throw_error(b.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var R=w.points;w.points=[],w.prepend([new xe(y.args[0],S.substitution,S)]);var J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var ke=w.points;if(w.points=R,w.session.format_success=J,w.session.format_error=X,b.type.is_error(ie)){for(var Le=[],ot=w.points.length-1;ot>=0;ot--){for(var tr=w.points[ot],dt=tr.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Le.push(tr)}w.points=Le;var Gt=w.get_flag("occurs_check").indicator==="true/0",tr=new xe,bt=b.unify(ie.args[0],y.args[1],Gt);bt!==null?(tr.substitution=S.substitution.apply(bt),tr.goal=S.goal.replace(y.args[2]).apply(bt),tr.parent=S,w.prepend([tr])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var ln=ie===null?[]:[new xe(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],kr=[],ot=ke.length-1;ot>=0;ot--){kr.push(ke[ot]);var mr=ke[ot].goal!==null?ke[ot].goal.select():null;if(b.type.is_term(mr)&&mr.indicator==="!/0")break}var br=o(kr,function(Kr){return Kr.goal===null&&(Kr.goal=new H("true",[])),Kr=new xe(S.goal.replace(new H("catch",[Kr.goal,y.args[1],y.args[2]])),S.substitution.apply(Kr.substitution),Kr.parent),Kr.exclude=y.args[0].variables(),Kr}).reverse();w.prepend(br),w.prepend(ln),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=new xe,X=b.unify(y.args[0],y.args[1],R);X!==null&&(J.goal=S.goal.apply(X).replace(null),J.substitution=S.substitution.apply(X),J.parent=S,w.prepend([J]))},"unify_with_occurs_check/2":function(w,S,y){var R=new xe,J=b.unify(y.args[0],y.args[1],!0);J!==null&&(R.goal=S.goal.apply(J).replace(null),R.substitution=S.substitution.apply(J),R.parent=S,w.prepend([R]))},"\\=/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=b.unify(y.args[0],y.args[1],R);J===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=b.unify(y.args[1],y.args[0],R);J!==null&&y.args[1].apply(J).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(J))w.throw_error(b.error.type("callable",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[J,new H("=",[Z,R])]),ke=w.points,Le=w.session.limit,ot=w.session.format_success;w.session.format_success=function(tr){return tr.substitution},w.add_goal(ie,!0,S);var dt=[],Gt=function(tr){if(tr!==!1&&tr!==null&&!b.type.is_error(tr))w.__calls.unshift(Gt),dt.push(tr.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=ke,w.session.limit=Le,w.session.format_success=ot,b.type.is_error(tr))w.throw_error(tr.args[0]);else if(w.current_limit>0){for(var bt=new H("[]"),ln=dt.length-1;ln>=0;ln--)bt=new H(".",[dt[ln],bt]);w.prepend([new xe(S.goal.replace(new H("=",[X,bt])),S.substitution,S)])}};w.__calls.unshift(Gt)}},"bagof/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),ke;X.indicator==="^/2"?(ke=X.args[0].variables(),X=X.args[1]):ke=[],ke=ke.concat(J.variables());for(var Le=X.variables().filter(function(br){return e(ke,br)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new Be(Le[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),tr=w.points,bt=w.session.limit,ln=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,S);var kr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Kr=!1,Kn=br.links[ie.id].args[0],Os=br.links[ie.id].args[1];for(var Ti in kr)if(!!kr.hasOwnProperty(Ti)){var gs=kr[Ti];if(gs.variables.equals(Kn)){gs.answers.push(Os),Kr=!0;break}}Kr||kr.push({variables:Kn,answers:[Os]}),w.session.limit=w.current_limit}else if(w.points=tr,w.session.limit=bt,w.session.format_success=ln,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var no=[],Si=0;Si=0;io--)Ms=new H(".",[br[io],Ms]);no.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,kr[Si].variables]),new H("=",[Z,Ms])])),S.substitution,S))}w.prepend(no)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),ke;X.indicator==="^/2"?(ke=X.args[0].variables(),X=X.args[1]):ke=[],ke=ke.concat(J.variables());for(var Le=X.variables().filter(function(br){return e(ke,br)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new Be(Le[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),tr=w.points,bt=w.session.limit,ln=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,S);var kr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Kr=!1,Kn=br.links[ie.id].args[0],Os=br.links[ie.id].args[1];for(var Ti in kr)if(!!kr.hasOwnProperty(Ti)){var gs=kr[Ti];if(gs.variables.equals(Kn)){gs.answers.push(Os),Kr=!0;break}}Kr||kr.push({variables:Kn,answers:[Os]}),w.session.limit=w.current_limit}else if(w.points=tr,w.session.limit=bt,w.session.format_success=ln,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var no=[],Si=0;Si=0;io--)Ms=new H(".",[br[io],Ms]);no.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,kr[Si].variables]),new H("=",[Z,Ms])])),S.substitution,S))}w.prepend(no)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(J)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation("functor/3"));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",y.args[2],"functor/3"));else if(!b.type.is_variable(X)&&!b.type.is_atomic(X))w.throw_error(b.error.type("atomic",y.args[1],"functor/3"));else if(b.type.is_integer(X)&&b.type.is_integer(Z)&&Z.value!==0)w.throw_error(b.error.type("atom",y.args[1],"functor/3"));else if(b.type.is_variable(J)){if(y.args[2].value>=0){for(var ie=[],ke=0;ke0&&R<=y.args[1].args.length){var J=new H("=",[y.args[1].args[R-1],y.args[2]]);w.prepend([new xe(S.goal.replace(J),S.substitution,S)])}}},"=../2":function(w,S,y){var R;if(b.type.is_variable(y.args[0])&&(b.type.is_variable(y.args[1])||b.type.is_non_empty_list(y.args[1])&&b.type.is_variable(y.args[1].args[0])))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_fully_list(y.args[1]))w.throw_error(b.error.type("list",y.args[1],y.indicator));else if(b.type.is_variable(y.args[0])){if(!b.type.is_variable(y.args[1])){var X=[];for(R=y.args[1].args[1];R.indicator==="./2";)X.push(R.args[0]),R=R.args[1];b.type.is_variable(y.args[0])&&b.type.is_variable(R)?w.throw_error(b.error.instantiation(y.indicator)):X.length===0&&b.type.is_compound(y.args[1].args[0])?w.throw_error(b.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(b.type.is_compound(y.args[1].args[0])||b.type.is_number(y.args[1].args[0]))?w.throw_error(b.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(b.type.is_atomic(y.args[0]))R=new H(".",[y.args[0],new H("[]")]);else{R=new H("[]");for(var J=y.args[0].args.length-1;J>=0;J--)R=new H(".",[y.args[0].args[J],R]);R=new H(".",[new H(y.args[0].id),R])}w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var R=y.args[0].rename(w);w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(!b.type.is_fully_list(J))w.throw_error(b.error.type("list",J,y.indicator));else{var X=g(o(De(R.variables()),function(Z){return new Be(Z)}));w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_callable(y.args[1]))w.throw_error(b.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 R=[];for(var J in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(J)){var X=w.session.rules[y.args[0].indicator][J];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);R.push(new xe(S.goal.replace(Z),S.substitution,S))}w.prepend(R)}else w.throw_error(b.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var R=y.args[0];if(!b.type.is_variable(R)&&(!b.type.is_compound(R)||R.indicator!=="//2"))w.throw_error(b.error.type("predicate_indicator",R,y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_variable(R.args[0])&&!b.type.is_atom(R.args[0]))w.throw_error(b.error.type("atom",R.args[0],y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_variable(R.args[1])&&!b.type.is_integer(R.args[1]))w.throw_error(b.error.type("integer",R.args[1],y.indicator));else{var J=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),ke=parseInt(X.substr(Z+1,X.length-(Z+1))),Le=new H("/",[new H(ie),new Te(ke,!1)]),ot=new H("=",[Le,R]);J.push(new xe(S.goal.replace(ot),S.substitution,S))}w.prepend(J)}},"asserta/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var R,J;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=Ee(y.args[0].args[1])):(R=y.args[0],J=null),b.type.is_callable(R)?J!==null&&!b.type.is_callable(J)?w.throw_error(b.error.type("callable",J,y.indicator)):w.is_public_predicate(R.indicator)?(w.session.rules[R.indicator]===void 0&&(w.session.rules[R.indicator]=[]),w.session.public_predicates[R.indicator]=!0,w.session.rules[R.indicator]=[new je(R,J,!0)].concat(w.session.rules[R.indicator]),w.success(S)):w.throw_error(b.error.permission("modify","static_procedure",R.indicator,y.indicator)):w.throw_error(b.error.type("callable",R,y.indicator))}},"assertz/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var R,J;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=Ee(y.args[0].args[1])):(R=y.args[0],J=null),b.type.is_callable(R)?J!==null&&!b.type.is_callable(J)?w.throw_error(b.error.type("callable",J,y.indicator)):w.is_public_predicate(R.indicator)?(w.session.rules[R.indicator]===void 0&&(w.session.rules[R.indicator]=[]),w.session.public_predicates[R.indicator]=!0,w.session.rules[R.indicator].push(new je(R,J,!0)),w.success(S)):w.throw_error(b.error.permission("modify","static_procedure",R.indicator,y.indicator)):w.throw_error(b.error.type("callable",R,y.indicator))}},"retract/1":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var R,J;if(y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=y.args[0].args[1]):(R=y.args[0],J=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(R.indicator)){if(w.session.rules[R.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(b.error.representation("max_arity",y.indicator));else{var R=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(R)?(delete w.session.rules[R],w.success(S)):w.throw_error(b.error.permission("modify","static_procedure",R,y.indicator))}},"atom_length/2":function(w,S,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],y.indicator));else if(b.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(b.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var R=new Te(y.args[0].id.length,!1);w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var R,J,X=y.args[0],Z=y.args[1],ie=y.args[2];if(b.type.is_variable(ie)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_atom(Z))w.throw_error(b.error.type("atom",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_atom(ie))w.throw_error(b.error.type("atom",ie,y.indicator));else{var ke=b.type.is_variable(X),Le=b.type.is_variable(Z);if(!ke&&!Le)J=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]);else if(ke&&!Le)R=ie.id.substr(0,ie.id.length-Z.id.length),R+Z.id===ie.id&&(J=new H("=",[X,new H(R)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else if(Le&&!ke)R=ie.id.substr(X.id.length),X.id+R===ie.id&&(J=new H("=",[Z,new H(R)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var Gt=new H(ie.id.substr(0,dt)),tr=new H(ie.id.substr(dt));J=new H(",",[new H("=",[Gt,X]),new H("=",[tr,Z])]),ot.push(new xe(S.goal.replace(J),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],ke=y.args[4];if(b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_integer(ie))w.throw_error(b.error.type("integer",ie,y.indicator));else if(b.type.is_integer(X)&&X.value<0)w.throw_error(b.error.domain("not_less_than_zero",X,y.indicator));else if(b.type.is_integer(Z)&&Z.value<0)w.throw_error(b.error.domain("not_less_than_zero",Z,y.indicator));else if(b.type.is_integer(ie)&&ie.value<0)w.throw_error(b.error.domain("not_less_than_zero",ie,y.indicator));else{var Le=[],ot=[],dt=[];if(b.type.is_variable(X))for(R=0;R<=J.id.length;R++)Le.push(R);else Le.push(X.value);if(b.type.is_variable(Z))for(R=0;R<=J.id.length;R++)ot.push(R);else ot.push(Z.value);if(b.type.is_variable(ie))for(R=0;R<=J.id.length;R++)dt.push(R);else dt.push(ie.value);var Gt=[];for(var tr in Le)if(!!Le.hasOwnProperty(tr)){R=Le[tr];for(var bt in ot)if(!!ot.hasOwnProperty(bt)){var ln=ot[bt],kr=J.id.length-R-ln;if(e(dt,kr)!==-1&&R+ln+kr===J.id.length){var mr=J.id.substr(R,ln);if(J.id===J.id.substr(0,R)+mr+J.id.substr(R+ln,kr)){var br=new H("=",[new H(mr),ke]),Kr=new H("=",[X,new Te(R)]),Kn=new H("=",[Z,new Te(ln)]),Os=new H("=",[ie,new Te(kr)]),Ti=new H(",",[new H(",",[new H(",",[Kr,Kn]),Os]),br]);Gt.push(new xe(S.goal.replace(Ti),S.substitution,S))}}}}w.prepend(Gt)}},"atom_chars/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(b.type.is_variable(R)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_atom(R))w.throw_error(b.error.type("atom",R,y.indicator));else if(b.type.is_variable(R)){for(var ie=J,ke=b.type.is_variable(R),Le="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))Le+=ie.args[0].id;else if(b.type.is_variable(ie.args[0])&&ke){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&ke?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),R])),S.substitution,S)])}else{for(var X=new H("[]"),Z=R.id.length-1;Z>=0;Z--)X=new H(".",[new H(R.id.charAt(Z)),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(b.type.is_variable(R)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_atom(R))w.throw_error(b.error.type("atom",R,y.indicator));else if(b.type.is_variable(R)){for(var ie=J,ke=b.type.is_variable(R),Le="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))Le+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0])&&ke){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.representation("character_code",y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&ke?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),R])),S.substitution,S)])}else{for(var X=new H("[]"),Z=R.id.length-1;Z>=0;Z--)X=new H(".",[new Te(n(R.id,Z),!1),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(b.type.is_variable(R)&&b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_character(R))w.throw_error(b.error.type("character",R,y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_integer(J))w.throw_error(b.error.type("integer",J,y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_character_code(J))w.throw_error(b.error.representation("character_code",y.indicator));else if(b.type.is_variable(J)){var X=new Te(n(R.id,0),!1);w.prepend([new xe(S.goal.replace(new H("=",[X,J])),S.substitution,S)])}else{var Z=new H(u(J.value));w.prepend([new xe(S.goal.replace(new H("=",[Z,R])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var R,J=y.args[0],X=y.args[1];if(b.type.is_variable(J)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_number(J))w.throw_error(b.error.type("number",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(J);if(!b.type.is_variable(X)){var ie=X,ke=!0;for(R="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))R+=ie.args[0].id;else if(b.type.is_variable(ie.args[0]))ke=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(ke=ke&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!ke&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(ke)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Le=w.parse(R),ot=Le.value;!b.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){R=J.toString();for(var dt=new H("[]"),Gt=R.length-1;Gt>=0;Gt--)dt=new H(".",[new H(R.charAt(Gt)),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var R,J=y.args[0],X=y.args[1];if(b.type.is_variable(J)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(J)&&!b.type.is_number(J))w.throw_error(b.error.type("number",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(J);if(!b.type.is_variable(X)){var ie=X,ke=!0;for(R="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))R+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0]))ke=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(ke=ke&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!ke&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(ke)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Le=w.parse(R),ot=Le.value;!b.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){R=J.toString();for(var dt=new H("[]"),Gt=R.length-1;Gt>=0;Gt--)dt=new H(".",[new Te(n(R,Gt),!1),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var R=y.args[0],J=y.args[1];b.type.is_variable(R)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(R)?!b.type.is_variable(J)&&!b.type.is_atom(J)?w.throw_error(b.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(R.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(b.error.type("atom",R,y.indicator))},"downcase_atom/2":function(w,S,y){var R=y.args[0],J=y.args[1];b.type.is_variable(R)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(R)?!b.type.is_variable(J)&&!b.type.is_atom(J)?w.throw_error(b.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(R.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(b.error.type("atom",R,y.indicator))},"atomic_list_concat/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("atomic_list_concat",[R,new H("",[]),J])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(J)||b.type.is_variable(R)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_list(R))w.throw_error(b.error.type("list",R,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(b.type.is_variable(X)){for(var ie="",ke=R;b.type.is_term(ke)&&ke.indicator==="./2";){if(!b.type.is_atom(ke.args[0])&&!b.type.is_number(ke.args[0])){w.throw_error(b.error.type("atomic",ke.args[0],y.indicator));return}ie!==""&&(ie+=J.id),b.type.is_atom(ke.args[0])?ie+=ke.args[0].id:ie+=""+ke.args[0].value,ke=ke.args[1]}ie=new H(ie,[]),b.type.is_variable(ke)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_term(ke)||ke.indicator!=="[]/0"?w.throw_error(b.error.type("list",R,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(J.id),function(Le){return new H(Le,[])}));w.prepend([new xe(S.goal.replace(new H("=",[Z,R])),S.substitution,S)])}},"@=/2":function(w,S,y){b.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){b.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(!b.type.is_variable(R)&&!b.type.is_atom(R))w.throw_error(b.error.type("atom",R,y.indicator));else if(b.type.is_atom(R)&&["<",">","="].indexOf(R.id)===-1)w.throw_error(b.type.domain("order",R,y.indicator));else{var Z=b.compare(J,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(S.goal.replace(new H("=",[R,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var R=y.args[1].interpret(w);b.type.is_number(R)?w.prepend([new xe(S.goal.replace(new H("=",[y.args[0],R],w.level)),S.substitution,S)]):w.throw_error(R)},"between/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(b.type.is_variable(R)||b.type.is_variable(J))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_integer(R))w.throw_error(b.error.type("integer",R,y.indicator));else if(!b.type.is_integer(J))w.throw_error(b.error.type("integer",J,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(b.type.is_variable(X)){var Z=[new xe(S.goal.replace(new H("=",[X,R])),S.substitution,S)];R.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var R=y.args[0],J=y.args[1];b.type.is_variable(R)&&b.type.is_variable(J)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_variable(R)&&!b.type.is_integer(R)?w.throw_error(b.error.type("integer",R,y.indicator)):!b.type.is_variable(J)&&!b.type.is_integer(J)?w.throw_error(b.error.type("integer",J,y.indicator)):!b.type.is_variable(R)&&R.value<0?w.throw_error(b.error.domain("not_less_than_zero",R,y.indicator)):!b.type.is_variable(J)&&J.value<0?w.throw_error(b.error.domain("not_less_than_zero",J,y.indicator)):(b.type.is_variable(J)||J.value>0)&&(b.type.is_variable(R)?w.prepend([new xe(S.goal.replace(new H("=",[R,new Te(J.value-1,!1)])),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[J,new Te(R.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var R=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(R)?w.throw_error(R):R===0&&w.success(S)},"=\\=/2":function(w,S,y){var R=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(R)?w.throw_error(R):R!==0&&w.success(S)},"/2":function(w,S,y){var R=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(R)?w.throw_error(R):R>0&&w.success(S)},">=/2":function(w,S,y){var R=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(R)?w.throw_error(R):R>=0&&w.success(S)},"var/1":function(w,S,y){b.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){b.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){b.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){b.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){b.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){b.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){b.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){b.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var R=S.substitution.apply(S.substitution),J=y.args[0].variables(),X=0;X0?bt[bt.length-1]:null,bt!==null&&(Gt=V(w,bt,0,w.__get_max_priority(),!1))}if(Gt.type===p&&Gt.len===bt.length-1&&ln.value==="."){Gt=Gt.value.rename(w);var kr=new H("=",[J,Gt]);if(ie.variables){var mr=g(o(De(Gt.variables()),function(br){return new Be(br)}));kr=new H(",",[kr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(Gt.variables()),function(Kr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Kr)break;return new H("=",[new H(Kn,[]),new Be(Kr)])}));kr=new H(",",[kr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new je(Gt,null).singleton_variables(),function(Kr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Kr)break;return new H("=",[new H(Kn,[]),new Be(Kr)])}));kr=new H(",",[kr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(S.goal.replace(kr),S.substitution,S)])}else Gt.type===p?w.throw_error(b.error.syntax(bt[Gt.len],"unexpected token",!1)):w.throw_error(Gt.value)}}},"write/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Be("S")]),new H("write",[new Be("S"),R])])),S.substitution,S)])},"write/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Be("S")]),new H("writeq",[new Be("S"),R])])),S.substitution,S)])},"writeq/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Be("S")]),new H("write_canonical",[new Be("S"),R])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new Be("S")]),new H("write_term",[new Be("S"),R,J])])),S.substitution,S)])},"write_term/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2],Z=b.type.is_stream(R)?R:w.get_stream_by_alias(R.id);if(b.type.is_variable(R)||b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else if(!b.type.is_stream(R)&&!b.type.is_atom(R))w.throw_error(b.error.domain("stream_or_alias",R,y.indicator));else if(!b.type.is_stream(Z)||Z.stream===null)w.throw_error(b.error.existence("stream",R,y.indicator));else if(Z.input)w.throw_error(b.error.permission("output","stream",R,y.indicator));else if(Z.type==="binary")w.throw_error(b.error.permission("output","binary_stream",R,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(b.error.permission("output","past_end_of_stream",R,y.indicator));else{for(var ie={},ke=X,Le;b.type.is_term(ke)&&ke.indicator==="./2";){if(Le=ke.args[0],b.type.is_variable(Le)){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_write_option(Le)){w.throw_error(b.error.domain("write_option",Le,y.indicator));return}ie[Le.id]=Le.args[0].id==="true",ke=ke.args[1]}if(ke.indicator!=="[]/0"){b.type.is_variable(ke)?w.throw_error(b.error.instantiation(y.indicator)):w.throw_error(b.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=J.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var R=y.args[0];b.type.is_variable(R)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_integer(R)?w.points=[]:w.throw_error(b.error.type("integer",R,y.indicator))},"current_prolog_flag/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(!b.type.is_variable(R)&&!b.type.is_atom(R))w.throw_error(b.error.type("atom",R,y.indicator));else if(!b.type.is_variable(R)&&!b.type.is_flag(R))w.throw_error(b.error.domain("prolog_flag",R,y.indicator));else{var X=[];for(var Z in b.flag)if(!!b.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),R]),new H("=",[w.get_flag(Z),J])]);X.push(new xe(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var R=y.args[0],J=y.args[1];b.type.is_variable(R)||b.type.is_variable(J)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(R)?b.type.is_flag(R)?b.type.is_value_flag(R,J)?b.type.is_modifiable_flag(R)?(w.session.flag[R.id]=J,w.success(S)):w.throw_error(b.error.permission("modify","flag",R)):w.throw_error(b.error.domain("flag_value",new H("+",[R,J]),y.indicator)):w.throw_error(b.error.domain("prolog_flag",R,y.indicator)):w.throw_error(b.error.type("atom",R,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("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 H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new Te(t.major,!1),new Te(t.minor,!1),new Te(t.patch,!1),new H(t.status)])],value:new H("tau",[new Te(t.major,!1),new Te(t.minor,!1),new Te(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof gl<"u"&&gl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var R=[{left:w,right:S}],J={};R.length!==0;){var X=R.pop();if(w=X.left,S=X.right,b.type.is_term(w)&&b.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;ZJ.value?1:0:J}else return R},operate:function(w,S){if(b.type.is_operator(S)){for(var y=b.type.is_operator(S),R=[],J,X=!1,Z=0;Zw.get_flag("max_integer").value||J0?w.start+w.matches[0].length:w.start,J=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new Te(w.line+1)]),new H(".",[new H("column",[new Te(R+1)]),new H(".",[J,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var R=new H("[]"),J=w.length-1;J>=0;J--)R=new H(".",[new Be(w[J]),R]);return new H("warning",[new H("singleton_variables",[R,ee(S)]),new H(".",[new H("line",[new Te(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new Te(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,R){S instanceof be&&(S=S.thread);var R=R||{};if(R.session=S?S.session:void 0,b.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var J=0,X="";if(b.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Le,ot){return!b.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Le!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(J++,X!==""&&(X+=", "),X+=ie.toString(R)+" = "+w.links[ie].toString(R));var ke=typeof S>"u"||S.points.length>0?" ;":".";return J===0?"true"+ke:X+ke},flatten_error:function(w){if(!b.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new b.type.Session(w)}};typeof gl<"u"?gl.exports=b:window.pl=b})()});function sme(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=ame.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function lme(t,e){ame.set(t,e),t.consult(`:- use_module(library(${$gt.id})).`)}var EH,Ta,ome,A0,Xgt,Zgt,ame,$gt,cme=Et(()=>{Ye();EH=Ze(m2()),Ta=Ze(mH()),ome=Ze(ve("vm")),{is_atom:A0,is_variable:Xgt,is_instantiated_list:Zgt}=Ta.default.type;ame=new WeakMap;$gt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!A0(o)||!A0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=j.parseIdent(o.id),A=j.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Xgt(n)&&h!==null&&sme(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),A0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!A0(o)||!A0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||sme(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!A0(o)||!A0(a)||!A0(n)||!Zgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,x]of u.toJavaScript().entries())E[`$${v}`]=x;ome.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 x2={};zt(x2,{Constraints:()=>b2,DependencyType:()=>pme});function eo(t){if(t instanceof BC.default.type.Num)return t.value;if(t instanceof BC.default.type.Term)switch(t.indicator){case"throw/1":return eo(t.args[0]);case"error/1":return eo(t.args[0]);case"error/2":if(t.args[0]instanceof BC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(eo(t.args[0]),...eo(t.args[1]));{let e=eo(t.args[0]);return e.message+=` (in ${eo(t.args[1])})`,e}case"syntax_error/1":return new Jt(43,`Syntax error: ${eo(t.args[0])}`);case"existence_error/2":return new Jt(44,`Existence error: ${eo(t.args[0])} ${eo(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:eo(t.args[0])};case"column/1":return{column:eo(t.args[0])};case"found/1":return{found:eo(t.args[0])};case"./2":return[eo(t.args[0])].concat(eo(t.args[1]));case"//2":return`${eo(t.args[0])}/${eo(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function Ame(t){let e;try{e=eo(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 em(t){return t.id==="null"?null:`${t.toJavaScript()}`}function edt(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 f0(t){return typeof t=="string"?`'${t}'`:"[]"}var fme,BC,pme,ume,CH,b2,k2=Et(()=>{Ye();Ye();Dt();fme=Ze(Gde()),BC=Ze(mH());P2();cme();(0,fme.default)(BC.default);pme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(pme||{}),ume=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=BC.default.create(o),lme(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 Ame(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new Jt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw Ame(o);yield o}}};b2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new b2(e)}getProjectDatabase(){let e="";for(let r of ume)e+=`dependency_type(${r}). `;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${f0(o)}). -`,e+=`workspace_ident(${f0(o)}, ${f0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_ident(${f0(o)}, ${f0(j.stringifyIdent(r.anchoredLocator))}). `,e+=`workspace_version(${f0(o)}, ${f0(r.manifest.version)}). -`;for(let a of ume)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${f0(o)}, ${f0(W.stringifyIdent(n))}, ${f0(n.range)}, ${a}). +`;for(let a of ume)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${f0(o)}, ${f0(j.stringifyIdent(n))}, ${f0(n.range)}, ${a}). `}return e+=`workspace(_) :- false. `,e+=`workspace_ident(_, _) :- false. `,e+=`workspace_version(_, _) :- false. @@ -282,41 +282,41 @@ And the length must be: $`,trueValue:null,falseValue:null,caseSensitive: `,e+=`gen_enforced_field(_, _, _) :- false. `,e}get fullSource(){return`${this.getProjectDatabase()} ${this.source} -${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=B2([A,W.stringifyIdent(n)]),h=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=B2(n),p=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=z.resolve(this.project.cwd,tm(o.links.WorkspaceCwd)),n=tm(o.links.DependencyIdent),u=tm(o.links.DependencyRange),A=tm(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return _e.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=z.resolve(this.project.cwd,tm(o.links.WorkspaceCwd)),n=tm(o.links.FieldPath),u=Zgt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return _e.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=tm(u));yield a}}}});var Ime=_(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});function j2(t){let e=[...t.caches],r=e.shift();return r===void 0?wme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>j2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>j2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>j2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>j2({caches:e}).clear())}}}function wme(){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()}}}Ik.createFallbackableCache=j2;Ik.createNullCache=wme});var vme=_((FWt,Bme)=>{Bme.exports=Ime()});var Dme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function mdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=mdt});var Sme=_((TWt,Pme)=>{Pme.exports=Dme()});var xme=_($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});function ydt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===LH.WithinHeaders?o:{}},queryParameters(){return t===LH.WithinQueryParameters?o:{}}}}function Edt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function bme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return bme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Cdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function wdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Idt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Bdt="4.22.1",vdt=t=>()=>t.transporter.requester.destroy(),LH={WithinQueryParameters:0,WithinHeaders:1};$c.AuthMode=LH;$c.addMethods=wdt;$c.createAuth=ydt;$c.createRetryablePromise=Edt;$c.createWaitablePromise=bme;$c.destroy=vdt;$c.encode=Idt;$c.shuffle=Cdt;$c.version=Bdt});var Y2=_((NWt,kme)=>{kme.exports=xme()});var Qme=_(NH=>{"use strict";Object.defineProperty(NH,"__esModule",{value:!0});var Ddt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};NH.MethodEnum=Ddt});var W2=_((MWt,Fme)=>{Fme.exports=Qme()});var Kme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Tme=W2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var K2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Lme=2*60*1e3;function UH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Lme}function Ome(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Lme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:K2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||K2.Any}}function Pdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Ome(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Sdt=({isTimedOut:t,status:e})=>!t&&~~e===0,bdt=t=>{let e=t.status;return t.isTimedOut||Sdt(t)||~~(e/100)!==2&&~~(e/100)!==4},xdt=({status:t})=>~~(t/100)===2,kdt=(t,e)=>bdt(t)?e.onRetry(t):xdt(t)?e.onSuccess(t):e.onFail(t);function Rme(t,e,r,o){let a=[],n=qme(r,o),u=Gme(t,o),A=r.method,p=r.method!==Tme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,x)=>{let C=v.pop();if(C===void 0)throw Wme(MH(a));let R={data:n,headers:u,method:A,url:_me(C,r.path,h),connectTimeout:x(E,t.timeouts.connect),responseTimeout:x(E,o.timeout)},N=V=>{let te={request:R,response:V,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:V=>Mme(V),onRetry(V){let te=N(V);return V.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(C,UH(C,V.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,x))},onFail(V){throw N(V),Ume(V,MH(a))}};return t.requester.send(R).then(V=>kdt(V,U))};return Pdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Qdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,x){let C=OH(x,I.timeouts.read),R=()=>Rme(I,I.hosts.filter(V=>(V.accept&K2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return R();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,R()).then(V=>Promise.all([I.requestsCache.delete(U),V]),V=>Promise.all([I.requestsCache.delete(U),Promise.reject(V)])).then(([V,te])=>te)),{miss:V=>I.responsesCache.set(U,V)})},write(v,x){return Rme(I,I.hosts.filter(C=>(C.accept&K2.Write)!==0),v,OH(x,I.timeouts.write))}};return I}function Fdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Mme(t){try{return JSON.parse(t.content)}catch(e){throw Yme(e.message,t)}}function Ume({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return jme(o,e,r)}function Rdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function _me(t,e,r){let o=Hme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function Hme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Rdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function qme(t,e){if(t.method===Tme.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 Gme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(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 jme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Yme(t,e){return{name:"DeserializationError",message:t,response:e}}function Wme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=K2;Fi.HostStatusEnum=xC;Fi.createApiError=jme;Fi.createDeserializationError=Yme;Fi.createMappedRequestOptions=OH;Fi.createRetryError=Wme;Fi.createStatefulHost=UH;Fi.createStatelessHost=_H;Fi.createTransporter=Qdt;Fi.createUserAgent=Fdt;Fi.deserializeFailure=Ume;Fi.deserializeSuccess=Mme;Fi.isStatefulHostTimeouted=Ome;Fi.isStatefulHostUp=Nme;Fi.serializeData=qme;Fi.serializeHeaders=Gme;Fi.serializeQueryParameters=Hme;Fi.serializeUrl=_me;Fi.stackFrameWithoutCredentials=HH;Fi.stackTraceWithoutCredentials=MH});var z2=_((_Wt,zme)=>{zme.exports=Kme()});var Vme=_(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var kC=Y2(),Tdt=z2(),V2=W2(),Ldt=t=>{let e=t.region||"us",r=kC.createAuth(kC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Tdt.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 kC.addMethods({appId:a,transporter:o},t.methods)},Ndt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Post,path:"2/abtests",data:e},r),Odt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Delete,path:kC.encode("2/abtests/%s",e)},r),Mdt=t=>(e,r)=>t.transporter.read({method:V2.MethodEnum.Get,path:kC.encode("2/abtests/%s",e)},r),Udt=t=>e=>t.transporter.read({method:V2.MethodEnum.Get,path:"2/abtests"},e),_dt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Post,path:kC.encode("2/abtests/%s/stop",e)},r);y0.addABTest=Ndt;y0.createAnalyticsClient=Ldt;y0.deleteABTest=Odt;y0.getABTest=Mdt;y0.getABTests=Udt;y0.stopABTest=_dt});var Xme=_((qWt,Jme)=>{Jme.exports=Vme()});var $me=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var qH=Y2(),Hdt=z2(),Zme=W2(),qdt=t=>{let e=t.region||"us",r=qH.createAuth(qH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Hdt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return qH.addMethods({appId:t.appId,transporter:o},t.methods)},Gdt=t=>e=>t.transporter.read({method:Zme.MethodEnum.Get,path:"1/strategies/personalization"},e),jdt=t=>(e,r)=>t.transporter.write({method:Zme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=qdt;J2.getPersonalizationStrategy=Gdt;J2.setPersonalizationStrategy=jdt});var tye=_((jWt,eye)=>{eye.exports=$me()});var gye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var jt=Y2(),La=z2(),Ir=W2(),Ydt=ve("crypto");function Bk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var Wdt=t=>{let e=t.appId,r=jt.createAuth(t.authMode!==void 0?t.authMode:jt.AuthMode.WithinHeaders,e,t.apiKey),o=La.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:La.CallEnum.Read},{url:`${e}.algolia.net`,accept:La.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:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return jt.addMethods(a,t.methods)};function rye(){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 nye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function iye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Kdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>jt.createRetryablePromise(h=>X2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},zdt=t=>(e,r,o)=>{let a=La.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Vdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Jdt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>QC(t)(o.taskID,a)),vk=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},Xdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Rules]}),Zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Settings]}),$dt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Synonyms]}),emt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),tmt=t=>(e,r)=>{let o=(a,n)=>jt.createRetryablePromise(u=>X2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/keys/%s",e)},r),o)},rmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},nmt=()=>(t,e)=>{let r=La.serializeQueryParameters(e),o=Ydt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},X2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/keys/%s",e)},r),sye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/task/%s",e.toString())},r),imt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),smt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),omt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw iye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),lmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/clusters/mapping/%s",e)},r),cmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},Z2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return jt.addMethods(o,r.methods)},umt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),pmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),hmt=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},gmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>Z2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},dmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),mmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:La.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},ymt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return Z2(t)(o.indexName,{methods:{searchForFacetValues:fye}}).searchForFacetValues(a,n,{...r,...u})})),Emt=t=>(e,r)=>{let o=La.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Cmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},wmt=t=>(e,r)=>{let o=(a,n)=>jt.createRetryablePromise(u=>X2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/keys/%s/restore",e)},r),o)},Imt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Bmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),vmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),Dmt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>QC(t)(o.taskID,a)),Pmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>{if(Array.isArray(E[I])&&Array.isArray(o[I])){let v=E[I];return v.length===o[I].length&&v.every((x,C)=>x===o[I][C])}else return E[I]===o[I]}),h=(E,I)=>jt.createRetryablePromise(v=>X2(t)(e,I).then(x=>p(x)?Promise.resolve():v()));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:jt.encode("1/keys/%s",e),data:u},n),h)},QC=t=>(e,r)=>jt.createRetryablePromise(o=>sye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),oye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Smt=t=>e=>Bk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),bmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},xmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return jt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},kmt=t=>e=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Qmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Fmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Rmt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Tmt=t=>e=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Lmt=t=>(e,r)=>jt.createWaitablePromise(aye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),aye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,im.DeleteObject,r)},Nmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Omt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Mmt=t=>e=>lye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Umt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),_mt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>Aye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw nye();return A()});return A()},Hmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/%s",t.indexName,e)},r),qmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Gmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),lye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),cye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Wmt=t=>(e,r)=>jt.createWaitablePromise(uye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),uye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?im.PartialUpdateObject:im.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Kmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,R,N,U)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",C),data:{operation:N,destination:R}},U),(V,te)=>Zi(t)(V.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=GH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let x=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,R,N])=>({objectIDs:R.objectIDs,taskIDs:[C.taskID,...R.taskIDs,N.taskID]}));return jt.createWaitablePromise(x,(C,R)=>Promise.all(I.map(N=>N.wait(R))))},zmt=t=>(e,r)=>jH(t)(e,{...r,clearExistingRules:!0}),Vmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),Jmt=t=>(e,r)=>jt.createWaitablePromise(GH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),GH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?im.AddObject:im.UpdateObject;if(n===im.UpdateObject){for(let u of e)if(u.objectID===void 0)return jt.createWaitablePromise(Promise.reject(rye()))}return Dk(t)(e,n,a)},Xmt=t=>(e,r)=>jH(t)([e],r),jH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=La.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},Zmt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=La.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),fye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),hye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),$mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:jt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>jt.createRetryablePromise(o=>cye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),eyt={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"},im={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Pk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},tyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},ryt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=eyt;Ft.BatchActionEnum=im;Ft.ScopeEnum=Pk;Ft.StrategyEnum=tyt;Ft.SynonymEnum=ryt;Ft.addApiKey=Kdt;Ft.assignUserID=zdt;Ft.assignUserIDs=Vdt;Ft.batch=oye;Ft.browseObjects=Smt;Ft.browseRules=bmt;Ft.browseSynonyms=xmt;Ft.chunkedBatch=Dk;Ft.clearDictionaryEntries=Jdt;Ft.clearObjects=kmt;Ft.clearRules=Qmt;Ft.clearSynonyms=Fmt;Ft.copyIndex=vk;Ft.copyRules=Xdt;Ft.copySettings=Zdt;Ft.copySynonyms=$dt;Ft.createBrowsablePromise=Bk;Ft.createMissingObjectIDError=rye;Ft.createObjectNotFoundError=nye;Ft.createSearchClient=Wdt;Ft.createValidUntilNotFoundError=iye;Ft.customRequest=emt;Ft.deleteApiKey=tmt;Ft.deleteBy=Rmt;Ft.deleteDictionaryEntries=rmt;Ft.deleteIndex=Tmt;Ft.deleteObject=Lmt;Ft.deleteObjects=aye;Ft.deleteRule=Nmt;Ft.deleteSynonym=Omt;Ft.exists=Mmt;Ft.findAnswers=Umt;Ft.findObject=_mt;Ft.generateSecuredApiKey=nmt;Ft.getApiKey=X2;Ft.getAppTask=sye;Ft.getDictionarySettings=imt;Ft.getLogs=smt;Ft.getObject=Hmt;Ft.getObjectPosition=qmt;Ft.getObjects=Gmt;Ft.getRule=jmt;Ft.getSecuredApiKeyRemainingValidity=omt;Ft.getSettings=lye;Ft.getSynonym=Ymt;Ft.getTask=cye;Ft.getTopUserIDs=amt;Ft.getUserID=lmt;Ft.hasPendingMappings=cmt;Ft.initIndex=Z2;Ft.listApiKeys=umt;Ft.listClusters=Amt;Ft.listIndices=fmt;Ft.listUserIDs=pmt;Ft.moveIndex=hmt;Ft.multipleBatch=gmt;Ft.multipleGetObjects=dmt;Ft.multipleQueries=mmt;Ft.multipleSearchForFacetValues=ymt;Ft.partialUpdateObject=Wmt;Ft.partialUpdateObjects=uye;Ft.removeUserID=Emt;Ft.replaceAllObjects=Kmt;Ft.replaceAllRules=zmt;Ft.replaceAllSynonyms=Vmt;Ft.replaceDictionaryEntries=Cmt;Ft.restoreApiKey=wmt;Ft.saveDictionaryEntries=Imt;Ft.saveObject=Jmt;Ft.saveObjects=GH;Ft.saveRule=Xmt;Ft.saveRules=jH;Ft.saveSynonym=Zmt;Ft.saveSynonyms=YH;Ft.search=Aye;Ft.searchDictionaryEntries=Bmt;Ft.searchForFacetValues=fye;Ft.searchRules=pye;Ft.searchSynonyms=hye;Ft.searchUserIDs=vmt;Ft.setDictionarySettings=Dmt;Ft.setSettings=$mt;Ft.updateApiKey=Pmt;Ft.waitAppTask=QC;Ft.waitTask=Zi});var mye=_((WWt,dye)=>{dye.exports=gye()});var yye=_(Sk=>{"use strict";Object.defineProperty(Sk,"__esModule",{value:!0});function nyt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var iyt={Debug:1,Info:2,Error:3};Sk.LogLevelEnum=iyt;Sk.createNullLogger=nyt});var Cye=_((zWt,Eye)=>{Eye.exports=yye()});var vye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var wye=ve("http"),Iye=ve("https"),syt=ve("url"),Bye={keepAlive:!0},oyt=new wye.Agent(Bye),ayt=new Iye.Agent(Bye);function lyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||oyt,n=r||t||ayt;return{send(u){return new Promise(A=>{let p=syt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?Iye:wye).request(E,R=>{let N=[];R.on("data",U=>{N=N.concat(U)}),R.on("end",()=>{clearTimeout(x),clearTimeout(C),A({status:R.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),v=(R,N)=>setTimeout(()=>{I.abort(),A({status:0,content:N,isTimedOut:!0})},R*1e3),x=v(u.connectTimeout,"Connection timeout"),C;I.on("error",R=>{clearTimeout(x),clearTimeout(C),A({status:0,content:R.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(x),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=lyt});var Pye=_((JWt,Dye)=>{Dye.exports=vye()});var kye=_((XWt,xye)=>{"use strict";var Sye=vme(),cyt=Sme(),FC=Xme(),zH=Y2(),KH=tye(),_t=mye(),uyt=Cye(),Ayt=Pye(),fyt=z2();function bye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:Ayt.createNodeHttpRequester(),logger:uyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:cyt.createInMemoryCache(),userAgent:fyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return _t.createSearchClient({...a,methods:{search:_t.multipleQueries,searchForFacetValues:_t.multipleSearchForFacetValues,multipleBatch:_t.multipleBatch,multipleGetObjects:_t.multipleGetObjects,multipleQueries:_t.multipleQueries,copyIndex:_t.copyIndex,copySettings:_t.copySettings,copyRules:_t.copyRules,copySynonyms:_t.copySynonyms,moveIndex:_t.moveIndex,listIndices:_t.listIndices,getLogs:_t.getLogs,listClusters:_t.listClusters,multipleSearchForFacetValues:_t.multipleSearchForFacetValues,getApiKey:_t.getApiKey,addApiKey:_t.addApiKey,listApiKeys:_t.listApiKeys,updateApiKey:_t.updateApiKey,deleteApiKey:_t.deleteApiKey,restoreApiKey:_t.restoreApiKey,assignUserID:_t.assignUserID,assignUserIDs:_t.assignUserIDs,getUserID:_t.getUserID,searchUserIDs:_t.searchUserIDs,listUserIDs:_t.listUserIDs,getTopUserIDs:_t.getTopUserIDs,removeUserID:_t.removeUserID,hasPendingMappings:_t.hasPendingMappings,generateSecuredApiKey:_t.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:_t.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:_t.clearDictionaryEntries,deleteDictionaryEntries:_t.deleteDictionaryEntries,getDictionarySettings:_t.getDictionarySettings,getAppTask:_t.getAppTask,replaceDictionaryEntries:_t.replaceDictionaryEntries,saveDictionaryEntries:_t.saveDictionaryEntries,searchDictionaryEntries:_t.searchDictionaryEntries,setDictionarySettings:_t.setDictionarySettings,waitAppTask:_t.waitAppTask,customRequest:_t.customRequest,initIndex:u=>A=>_t.initIndex(u)(A,{methods:{batch:_t.batch,delete:_t.deleteIndex,findAnswers:_t.findAnswers,getObject:_t.getObject,getObjects:_t.getObjects,saveObject:_t.saveObject,saveObjects:_t.saveObjects,search:_t.search,searchForFacetValues:_t.searchForFacetValues,waitTask:_t.waitTask,setSettings:_t.setSettings,getSettings:_t.getSettings,partialUpdateObject:_t.partialUpdateObject,partialUpdateObjects:_t.partialUpdateObjects,deleteObject:_t.deleteObject,deleteObjects:_t.deleteObjects,deleteBy:_t.deleteBy,clearObjects:_t.clearObjects,browseObjects:_t.browseObjects,getObjectPosition:_t.getObjectPosition,findObject:_t.findObject,exists:_t.exists,saveSynonym:_t.saveSynonym,saveSynonyms:_t.saveSynonyms,getSynonym:_t.getSynonym,searchSynonyms:_t.searchSynonyms,browseSynonyms:_t.browseSynonyms,deleteSynonym:_t.deleteSynonym,clearSynonyms:_t.clearSynonyms,replaceAllObjects:_t.replaceAllObjects,replaceAllSynonyms:_t.replaceAllSynonyms,searchRules:_t.searchRules,getRule:_t.getRule,deleteRule:_t.deleteRule,saveRule:_t.saveRule,saveRules:_t.saveRules,replaceAllRules:_t.replaceAllRules,browseRules:_t.browseRules,clearRules:_t.clearRules}}),initAnalytics:()=>u=>FC.createAnalyticsClient({...o,...u,methods:{addABTest:FC.addABTest,getABTest:FC.getABTest,getABTests:FC.getABTests,stopABTest:FC.stopABTest,deleteABTest:FC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}bye.version=zH.version;xye.exports=bye});var JH=_((ZWt,VH)=>{var Qye=kye();VH.exports=Qye;VH.exports.default=Qye});var $H=_((eKt,Tye)=>{"use strict";var Rye=Object.getOwnPropertySymbols,hyt=Object.prototype.hasOwnProperty,gyt=Object.prototype.propertyIsEnumerable;function dyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function myt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Tye.exports=myt()?Object.assign:function(t,e){for(var r,o=dyt(t),a,n=1;n{"use strict";var i6=$H(),eu=typeof Symbol=="function"&&Symbol.for,$2=eu?Symbol.for("react.element"):60103,yyt=eu?Symbol.for("react.portal"):60106,Eyt=eu?Symbol.for("react.fragment"):60107,Cyt=eu?Symbol.for("react.strict_mode"):60108,wyt=eu?Symbol.for("react.profiler"):60114,Iyt=eu?Symbol.for("react.provider"):60109,Byt=eu?Symbol.for("react.context"):60110,vyt=eu?Symbol.for("react.forward_ref"):60112,Dyt=eu?Symbol.for("react.suspense"):60113,Pyt=eu?Symbol.for("react.memo"):60115,Syt=eu?Symbol.for("react.lazy"):60116,Lye=typeof Symbol=="function"&&Symbol.iterator;function eB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rbk.length&&bk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case $2:case yyt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Kye.exports=Wye()});var u6=_((nKt,c6)=>{"use strict";var An=c6.exports;c6.exports.default=An;var Nn="\x1B[",tB="\x1B]",TC="\x07",xk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Nn+(t+1)+"G":Nn+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Nn+-t+"D":t>0&&(r+=Nn+t+"C"),e<0?r+=Nn+-e+"A":e>0&&(r+=Nn+e+"B"),r};An.cursorUp=(t=1)=>Nn+t+"A";An.cursorDown=(t=1)=>Nn+t+"B";An.cursorForward=(t=1)=>Nn+t+"C";An.cursorBackward=(t=1)=>Nn+t+"D";An.cursorLeft=Nn+"G";An.cursorSavePosition=zye?"\x1B7":Nn+"s";An.cursorRestorePosition=zye?"\x1B8":Nn+"u";An.cursorGetPosition=Nn+"6n";An.cursorNextLine=Nn+"E";An.cursorPrevLine=Nn+"F";An.cursorHide=Nn+"?25l";An.cursorShow=Nn+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[tB,"8",xk,xk,e,TC,t,tB,"8",xk,xk,TC].join("");An.image=(t,e={})=>{let r=`${tB}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")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${tB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${tB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Jye=_((iKt,A6)=>{"use strict";var Vye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=Vye;A6.exports.default=Vye});var Zye=_((sKt,Qk)=>{"use strict";var Ryt=Jye(),kk=new WeakMap,Xye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(kk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Ryt(n,t),kk.set(n,o),n};Qk.exports=Xye;Qk.exports.default=Xye;Qk.exports.callCount=t=>{if(!kk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return kk.get(t)}});var $ye=_((oKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((aKt,OC)=>{var Ei=global.process,sm=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"};sm(Ei)?(eEe=ve("assert"),LC=$ye(),tEe=/^win/i.test(Ei.platform),rB=ve("events"),typeof rB!="function"&&(rB=rB.EventEmitter),Ei.__signal_exit_emitter__?Ts=Ei.__signal_exit_emitter__:(Ts=Ei.__signal_exit_emitter__=new rB,Ts.count=0,Ts.emitted={}),Ts.infinite||(Ts.setMaxListeners(1/0),Ts.infinite=!0),OC.exports=function(t,e){if(!sm(global.process))return function(){};eEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ts.removeListener(r,t),Ts.listeners("exit").length===0&&Ts.listeners("afterexit").length===0&&Rk()};return Ts.on(r,t),o},Rk=function(){!NC||!sm(global.process)||(NC=!1,LC.forEach(function(e){try{Ei.removeListener(e,Tk[e])}catch{}}),Ei.emit=Lk,Ei.reallyExit=p6,Ts.count-=1)},OC.exports.unload=Rk,om=function(e,r,o){Ts.emitted[e]||(Ts.emitted[e]=!0,Ts.emit(e,r,o))},Tk={},LC.forEach(function(t){Tk[t]=function(){if(!!sm(global.process)){var r=Ei.listeners(t);r.length===Ts.count&&(Rk(),om("exit",null,t),om("afterexit",null,t),tEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),OC.exports.signals=function(){return LC},NC=!1,f6=function(){NC||!sm(global.process)||(NC=!0,Ts.count+=1,LC=LC.filter(function(e){try{return Ei.on(e,Tk[e]),!0}catch{return!1}}),Ei.emit=nEe,Ei.reallyExit=rEe)},OC.exports.load=f6,p6=Ei.reallyExit,rEe=function(e){!sm(global.process)||(Ei.exitCode=e||0,om("exit",Ei.exitCode,null),om("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Lk=Ei.emit,nEe=function(e,r){if(e==="exit"&&sm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Lk.apply(this,arguments);return om("exit",Ei.exitCode,null),om("afterexit",Ei.exitCode,null),o}else return Lk.apply(this,arguments)}):OC.exports=function(){return function(){}};var eEe,LC,tEe,rB,Ts,Rk,om,Tk,NC,f6,p6,rEe,Lk,nEe});var sEe=_((lKt,iEe)=>{"use strict";var Tyt=Zye(),Lyt=h6();iEe.exports=Tyt(()=>{Lyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(MC=>{"use strict";var Nyt=sEe(),Nk=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Nk=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(Nyt(),Nk=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Nk=t),Nk?MC.show(e):MC.hide(e)}});var cEe=_(nB=>{"use strict";var lEe=nB&&nB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nB,"__esModule",{value:!0});var oEe=lEe(u6()),aEe=lEe(g6()),Oyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(aEe.default.hide(),a=!0);let A=u+` +${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=v2([A,j.stringifyIdent(n)]),h=He.getMapWithDefault(o,a.cwd);He.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=v2(n),p=He.getMapWithDefault(o,a.cwd);He.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=z.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.DependencyIdent),u=em(o.links.DependencyRange),A=em(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=j.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return He.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>j.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>j.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=z.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.FieldPath),u=edt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return He.sortMap(r,[({workspace:o})=>j.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=em(u));yield a}}}});var Ime=_(Bk=>{"use strict";Object.defineProperty(Bk,"__esModule",{value:!0});function Y2(t){let e=[...t.caches],r=e.shift();return r===void 0?wme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>Y2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>Y2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>Y2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>Y2({caches:e}).clear())}}}function wme(){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()}}}Bk.createFallbackableCache=Y2;Bk.createNullCache=wme});var vme=_((TWt,Bme)=>{Bme.exports=Ime()});var Pme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function Edt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=Edt});var Sme=_((NWt,Dme)=>{Dme.exports=Pme()});var xme=_($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});function Cdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===LH.WithinHeaders?o:{}},queryParameters(){return t===LH.WithinQueryParameters?o:{}}}}function wdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function bme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return bme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Idt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Bdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function vdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Pdt="4.22.1",Ddt=t=>()=>t.transporter.requester.destroy(),LH={WithinQueryParameters:0,WithinHeaders:1};$c.AuthMode=LH;$c.addMethods=Bdt;$c.createAuth=Cdt;$c.createRetryablePromise=wdt;$c.createWaitablePromise=bme;$c.destroy=Ddt;$c.encode=vdt;$c.shuffle=Idt;$c.version=Pdt});var W2=_((MWt,kme)=>{kme.exports=xme()});var Qme=_(NH=>{"use strict";Object.defineProperty(NH,"__esModule",{value:!0});var Sdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};NH.MethodEnum=Sdt});var K2=_((_Wt,Rme)=>{Rme.exports=Qme()});var Kme=_(Ri=>{"use strict";Object.defineProperty(Ri,"__esModule",{value:!0});var Tme=K2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var z2={Read:1,Write:2,Any:3},SC={Up:1,Down:2,Timeouted:3},Lme=2*60*1e3;function UH(t,e=SC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===SC.Up||Date.now()-t.lastUpdate>Lme}function Ome(t){return t.status===SC.Timeouted&&Date.now()-t.lastUpdate<=Lme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:z2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||z2.Any}}function bdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Ome(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var xdt=({isTimedOut:t,status:e})=>!t&&~~e===0,kdt=t=>{let e=t.status;return t.isTimedOut||xdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Qdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>kdt(t)?e.onRetry(t):Qdt(t)?e.onSuccess(t):e.onFail(t);function Fme(t,e,r,o){let a=[],n=qme(r,o),u=Gme(t,o),A=r.method,p=r.method!==Tme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,x)=>{let C=v.pop();if(C===void 0)throw Wme(MH(a));let F={data:n,headers:u,method:A,url:_me(C,r.path,h),connectTimeout:x(E,t.timeouts.connect),responseTimeout:x(E,o.timeout)},N=V=>{let te={request:F,response:V,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:V=>Mme(V),onRetry(V){let te=N(V);return V.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(C,UH(C,V.isTimedOut?SC.Timeouted:SC.Down))]).then(()=>I(v,x))},onFail(V){throw N(V),Ume(V,MH(a))}};return t.requester.send(F).then(V=>Rdt(V,U))};return bdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Fdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,x){let C=OH(x,I.timeouts.read),F=()=>Fme(I,I.hosts.filter(V=>(V.accept&z2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return F();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,F()).then(V=>Promise.all([I.requestsCache.delete(U),V]),V=>Promise.all([I.requestsCache.delete(U),Promise.reject(V)])).then(([V,te])=>te)),{miss:V=>I.responsesCache.set(U,V)})},write(v,x){return Fme(I,I.hosts.filter(C=>(C.accept&z2.Write)!==0),v,OH(x,I.timeouts.write))}};return I}function Tdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Mme(t){try{return JSON.parse(t.content)}catch(e){throw Yme(e.message,t)}}function Ume({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return jme(o,e,r)}function Ldt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function _me(t,e,r){let o=Hme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function Hme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Ldt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function qme(t,e){if(t.method===Tme.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 Gme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(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 jme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Yme(t,e){return{name:"DeserializationError",message:t,response:e}}function Wme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Ri.CallEnum=z2;Ri.HostStatusEnum=SC;Ri.createApiError=jme;Ri.createDeserializationError=Yme;Ri.createMappedRequestOptions=OH;Ri.createRetryError=Wme;Ri.createStatefulHost=UH;Ri.createStatelessHost=_H;Ri.createTransporter=Fdt;Ri.createUserAgent=Tdt;Ri.deserializeFailure=Ume;Ri.deserializeSuccess=Mme;Ri.isStatefulHostTimeouted=Ome;Ri.isStatefulHostUp=Nme;Ri.serializeData=qme;Ri.serializeHeaders=Gme;Ri.serializeQueryParameters=Hme;Ri.serializeUrl=_me;Ri.stackFrameWithoutCredentials=HH;Ri.stackTraceWithoutCredentials=MH});var V2=_((qWt,zme)=>{zme.exports=Kme()});var Vme=_(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var bC=W2(),Ndt=V2(),J2=K2(),Odt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ndt.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 bC.addMethods({appId:a,transporter:o},t.methods)},Mdt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:"2/abtests",data:e},r),Udt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),_dt=t=>(e,r)=>t.transporter.read({method:J2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),Hdt=t=>e=>t.transporter.read({method:J2.MethodEnum.Get,path:"2/abtests"},e),qdt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);y0.addABTest=Mdt;y0.createAnalyticsClient=Odt;y0.deleteABTest=Udt;y0.getABTest=_dt;y0.getABTests=Hdt;y0.stopABTest=qdt});var Xme=_((jWt,Jme)=>{Jme.exports=Vme()});var $me=_(X2=>{"use strict";Object.defineProperty(X2,"__esModule",{value:!0});var qH=W2(),Gdt=V2(),Zme=K2(),jdt=t=>{let e=t.region||"us",r=qH.createAuth(qH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Gdt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return qH.addMethods({appId:t.appId,transporter:o},t.methods)},Ydt=t=>e=>t.transporter.read({method:Zme.MethodEnum.Get,path:"1/strategies/personalization"},e),Wdt=t=>(e,r)=>t.transporter.write({method:Zme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);X2.createPersonalizationClient=jdt;X2.getPersonalizationStrategy=Ydt;X2.setPersonalizationStrategy=Wdt});var tye=_((WWt,eye)=>{eye.exports=$me()});var gye=_(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});var jt=W2(),La=V2(),Ir=K2(),Kdt=ve("crypto");function vk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=jt.createAuth(t.authMode!==void 0?t.authMode:jt.AuthMode.WithinHeaders,e,t.apiKey),o=La.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:La.CallEnum.Read},{url:`${e}.algolia.net`,accept:La.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:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return jt.addMethods(a,t.methods)};function rye(){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 nye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function iye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Vdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>jt.createRetryablePromise(h=>Z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Jdt=t=>(e,r,o)=>{let a=La.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Xdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Zdt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>xC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>$2(t)(e,{methods:{waitTask:$i}}).waitTask(n.taskID,u);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},$dt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[Sk.Rules]}),emt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[Sk.Settings]}),tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[Sk.Synonyms]}),rmt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),nmt=t=>(e,r)=>{let o=(a,n)=>jt.createRetryablePromise(u=>Z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/keys/%s",e)},r),o)},imt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>xC(t)(n.taskID,u))},smt=()=>(t,e)=>{let r=La.serializeQueryParameters(e),o=Kdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},Z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/keys/%s",e)},r),sye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/task/%s",e.toString())},r),omt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),lmt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw iye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),umt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/clusters/mapping/%s",e)},r),Amt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},$2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return jt.addMethods(o,r.methods)},fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),pmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),dmt=t=>(e,r,o)=>{let a=(n,u)=>$2(t)(e,{methods:{waitTask:$i}}).waitTask(n.taskID,u);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},mmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>$2(t)(u,{methods:{waitTask:$i}}).waitTask(a.taskID[u],n)));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),Emt=t=>(e,r)=>{let o=e.map(a=>({...a,params:La.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Cmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return $2(t)(o.indexName,{methods:{searchForFacetValues:fye}}).searchForFacetValues(a,n,{...r,...u})})),wmt=t=>(e,r)=>{let o=La.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Imt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>xC(t)(n.taskID,u))},Bmt=t=>(e,r)=>{let o=(a,n)=>jt.createRetryablePromise(u=>Z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/keys/%s/restore",e)},r),o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>xC(t)(n.taskID,u))},Pmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),Dmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),Smt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>xC(t)(o.taskID,a)),bmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>{if(Array.isArray(E[I])&&Array.isArray(o[I])){let v=E[I];return v.length===o[I].length&&v.every((x,C)=>x===o[I][C])}else return E[I]===o[I]}),h=(E,I)=>jt.createRetryablePromise(v=>Z2(t)(e,I).then(x=>p(x)?Promise.resolve():v()));return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:jt.encode("1/keys/%s",e),data:u},n),h)},xC=t=>(e,r)=>jt.createRetryablePromise(o=>sye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),oye=t=>(e,r)=>{let o=(a,n)=>$i(t)(a.taskID,n);return jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},xmt=t=>e=>vk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),kmt=t=>e=>{let r={hitsPerPage:1e3,...e};return vk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Qmt=t=>e=>{let r={hitsPerPage:1e3,...e};return vk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return jt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>$i(t)(E,h))))},Rmt=t=>e=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>$i(t)(r.taskID,o)),Fmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>$i(t)(n.taskID,u))},Tmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>$i(t)(n.taskID,u))},Lmt=t=>(e,r)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>$i(t)(o.taskID,a)),Nmt=t=>e=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>$i(t)(r.taskID,o)),Omt=t=>(e,r)=>jt.createWaitablePromise(aye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>$i(t)(o.taskID,a)),aye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,nm.DeleteObject,r)},Mmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>$i(t)(u.taskID,A))},Umt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>$i(t)(u.taskID,A))},_mt=t=>e=>lye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Hmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),qmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>Aye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw nye();return A()});return A()},Gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/%s",t.indexName,e)},r),jmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Ymt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Wmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),lye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),cye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:jt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>jt.createWaitablePromise(uye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>$i(t)(o.taskID,a)),uye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?nm.PartialUpdateObject:nm.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Vmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,F,N,U)=>jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/operation",C),data:{operation:N,destination:F}},U),(V,te)=>$i(t)(V.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=GH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let x=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,F,N])=>({objectIDs:F.objectIDs,taskIDs:[C.taskID,...F.taskIDs,N.taskID]}));return jt.createWaitablePromise(x,(C,F)=>Promise.all(I.map(N=>N.wait(F))))},Jmt=t=>(e,r)=>jH(t)(e,{...r,clearExistingRules:!0}),Xmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),Zmt=t=>(e,r)=>jt.createWaitablePromise(GH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>$i(t)(o.taskID,a)),GH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?nm.AddObject:nm.UpdateObject;if(n===nm.UpdateObject){for(let u of e)if(u.objectID===void 0)return jt.createWaitablePromise(Promise.reject(rye()))}return Dk(t)(e,n,a)},$mt=t=>(e,r)=>jH(t)([e],r),jH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=La.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>$i(t)(A.taskID,p))},eyt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=La.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>$i(t)(p.taskID,h))},Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),fye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),hye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:jt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),tyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),jt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:jt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>$i(t)(u.taskID,A))},$i=t=>(e,r)=>jt.createRetryablePromise(o=>cye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),ryt={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"},nm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Sk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},nyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},iyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Rt.ApiKeyACLEnum=ryt;Rt.BatchActionEnum=nm;Rt.ScopeEnum=Sk;Rt.StrategyEnum=nyt;Rt.SynonymEnum=iyt;Rt.addApiKey=Vdt;Rt.assignUserID=Jdt;Rt.assignUserIDs=Xdt;Rt.batch=oye;Rt.browseObjects=xmt;Rt.browseRules=kmt;Rt.browseSynonyms=Qmt;Rt.chunkedBatch=Dk;Rt.clearDictionaryEntries=Zdt;Rt.clearObjects=Rmt;Rt.clearRules=Fmt;Rt.clearSynonyms=Tmt;Rt.copyIndex=Pk;Rt.copyRules=$dt;Rt.copySettings=emt;Rt.copySynonyms=tmt;Rt.createBrowsablePromise=vk;Rt.createMissingObjectIDError=rye;Rt.createObjectNotFoundError=nye;Rt.createSearchClient=zdt;Rt.createValidUntilNotFoundError=iye;Rt.customRequest=rmt;Rt.deleteApiKey=nmt;Rt.deleteBy=Lmt;Rt.deleteDictionaryEntries=imt;Rt.deleteIndex=Nmt;Rt.deleteObject=Omt;Rt.deleteObjects=aye;Rt.deleteRule=Mmt;Rt.deleteSynonym=Umt;Rt.exists=_mt;Rt.findAnswers=Hmt;Rt.findObject=qmt;Rt.generateSecuredApiKey=smt;Rt.getApiKey=Z2;Rt.getAppTask=sye;Rt.getDictionarySettings=omt;Rt.getLogs=amt;Rt.getObject=Gmt;Rt.getObjectPosition=jmt;Rt.getObjects=Ymt;Rt.getRule=Wmt;Rt.getSecuredApiKeyRemainingValidity=lmt;Rt.getSettings=lye;Rt.getSynonym=Kmt;Rt.getTask=cye;Rt.getTopUserIDs=cmt;Rt.getUserID=umt;Rt.hasPendingMappings=Amt;Rt.initIndex=$2;Rt.listApiKeys=fmt;Rt.listClusters=pmt;Rt.listIndices=hmt;Rt.listUserIDs=gmt;Rt.moveIndex=dmt;Rt.multipleBatch=mmt;Rt.multipleGetObjects=ymt;Rt.multipleQueries=Emt;Rt.multipleSearchForFacetValues=Cmt;Rt.partialUpdateObject=zmt;Rt.partialUpdateObjects=uye;Rt.removeUserID=wmt;Rt.replaceAllObjects=Vmt;Rt.replaceAllRules=Jmt;Rt.replaceAllSynonyms=Xmt;Rt.replaceDictionaryEntries=Imt;Rt.restoreApiKey=Bmt;Rt.saveDictionaryEntries=vmt;Rt.saveObject=Zmt;Rt.saveObjects=GH;Rt.saveRule=$mt;Rt.saveRules=jH;Rt.saveSynonym=eyt;Rt.saveSynonyms=YH;Rt.search=Aye;Rt.searchDictionaryEntries=Pmt;Rt.searchForFacetValues=fye;Rt.searchRules=pye;Rt.searchSynonyms=hye;Rt.searchUserIDs=Dmt;Rt.setDictionarySettings=Smt;Rt.setSettings=tyt;Rt.updateApiKey=bmt;Rt.waitAppTask=xC;Rt.waitTask=$i});var mye=_((zWt,dye)=>{dye.exports=gye()});var yye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function syt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var oyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=oyt;bk.createNullLogger=syt});var Cye=_((JWt,Eye)=>{Eye.exports=yye()});var vye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var wye=ve("http"),Iye=ve("https"),ayt=ve("url"),Bye={keepAlive:!0},lyt=new wye.Agent(Bye),cyt=new Iye.Agent(Bye);function uyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||lyt,n=r||t||cyt;return{send(u){return new Promise(A=>{let p=ayt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?Iye:wye).request(E,F=>{let N=[];F.on("data",U=>{N=N.concat(U)}),F.on("end",()=>{clearTimeout(x),clearTimeout(C),A({status:F.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),v=(F,N)=>setTimeout(()=>{I.abort(),A({status:0,content:N,isTimedOut:!0})},F*1e3),x=v(u.connectTimeout,"Connection timeout"),C;I.on("error",F=>{clearTimeout(x),clearTimeout(C),A({status:0,content:F.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(x),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=uyt});var Dye=_((ZWt,Pye)=>{Pye.exports=vye()});var kye=_(($Wt,xye)=>{"use strict";var Sye=vme(),Ayt=Sme(),kC=Xme(),zH=W2(),KH=tye(),_t=mye(),fyt=Cye(),pyt=Dye(),hyt=V2();function bye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:pyt.createNodeHttpRequester(),logger:fyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:Ayt.createInMemoryCache(),userAgent:hyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return _t.createSearchClient({...a,methods:{search:_t.multipleQueries,searchForFacetValues:_t.multipleSearchForFacetValues,multipleBatch:_t.multipleBatch,multipleGetObjects:_t.multipleGetObjects,multipleQueries:_t.multipleQueries,copyIndex:_t.copyIndex,copySettings:_t.copySettings,copyRules:_t.copyRules,copySynonyms:_t.copySynonyms,moveIndex:_t.moveIndex,listIndices:_t.listIndices,getLogs:_t.getLogs,listClusters:_t.listClusters,multipleSearchForFacetValues:_t.multipleSearchForFacetValues,getApiKey:_t.getApiKey,addApiKey:_t.addApiKey,listApiKeys:_t.listApiKeys,updateApiKey:_t.updateApiKey,deleteApiKey:_t.deleteApiKey,restoreApiKey:_t.restoreApiKey,assignUserID:_t.assignUserID,assignUserIDs:_t.assignUserIDs,getUserID:_t.getUserID,searchUserIDs:_t.searchUserIDs,listUserIDs:_t.listUserIDs,getTopUserIDs:_t.getTopUserIDs,removeUserID:_t.removeUserID,hasPendingMappings:_t.hasPendingMappings,generateSecuredApiKey:_t.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:_t.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:_t.clearDictionaryEntries,deleteDictionaryEntries:_t.deleteDictionaryEntries,getDictionarySettings:_t.getDictionarySettings,getAppTask:_t.getAppTask,replaceDictionaryEntries:_t.replaceDictionaryEntries,saveDictionaryEntries:_t.saveDictionaryEntries,searchDictionaryEntries:_t.searchDictionaryEntries,setDictionarySettings:_t.setDictionarySettings,waitAppTask:_t.waitAppTask,customRequest:_t.customRequest,initIndex:u=>A=>_t.initIndex(u)(A,{methods:{batch:_t.batch,delete:_t.deleteIndex,findAnswers:_t.findAnswers,getObject:_t.getObject,getObjects:_t.getObjects,saveObject:_t.saveObject,saveObjects:_t.saveObjects,search:_t.search,searchForFacetValues:_t.searchForFacetValues,waitTask:_t.waitTask,setSettings:_t.setSettings,getSettings:_t.getSettings,partialUpdateObject:_t.partialUpdateObject,partialUpdateObjects:_t.partialUpdateObjects,deleteObject:_t.deleteObject,deleteObjects:_t.deleteObjects,deleteBy:_t.deleteBy,clearObjects:_t.clearObjects,browseObjects:_t.browseObjects,getObjectPosition:_t.getObjectPosition,findObject:_t.findObject,exists:_t.exists,saveSynonym:_t.saveSynonym,saveSynonyms:_t.saveSynonyms,getSynonym:_t.getSynonym,searchSynonyms:_t.searchSynonyms,browseSynonyms:_t.browseSynonyms,deleteSynonym:_t.deleteSynonym,clearSynonyms:_t.clearSynonyms,replaceAllObjects:_t.replaceAllObjects,replaceAllSynonyms:_t.replaceAllSynonyms,searchRules:_t.searchRules,getRule:_t.getRule,deleteRule:_t.deleteRule,saveRule:_t.saveRule,saveRules:_t.saveRules,replaceAllRules:_t.replaceAllRules,browseRules:_t.browseRules,clearRules:_t.clearRules}}),initAnalytics:()=>u=>kC.createAnalyticsClient({...o,...u,methods:{addABTest:kC.addABTest,getABTest:kC.getABTest,getABTests:kC.getABTests,stopABTest:kC.stopABTest,deleteABTest:kC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}bye.version=zH.version;xye.exports=bye});var JH=_((eKt,VH)=>{var Qye=kye();VH.exports=Qye;VH.exports.default=Qye});var $H=_((rKt,Tye)=>{"use strict";var Fye=Object.getOwnPropertySymbols,dyt=Object.prototype.hasOwnProperty,myt=Object.prototype.propertyIsEnumerable;function yyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function Eyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Tye.exports=Eyt()?Object.assign:function(t,e){for(var r,o=yyt(t),a,n=1;n{"use strict";var i6=$H(),eu=typeof Symbol=="function"&&Symbol.for,eB=eu?Symbol.for("react.element"):60103,Cyt=eu?Symbol.for("react.portal"):60106,wyt=eu?Symbol.for("react.fragment"):60107,Iyt=eu?Symbol.for("react.strict_mode"):60108,Byt=eu?Symbol.for("react.profiler"):60114,vyt=eu?Symbol.for("react.provider"):60109,Pyt=eu?Symbol.for("react.context"):60110,Dyt=eu?Symbol.for("react.forward_ref"):60112,Syt=eu?Symbol.for("react.suspense"):60113,byt=eu?Symbol.for("react.memo"):60115,xyt=eu?Symbol.for("react.lazy"):60116,Lye=typeof Symbol=="function"&&Symbol.iterator;function tB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rxk.length&&xk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case eB:case Cyt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Kye.exports=Wye()});var u6=_((sKt,c6)=>{"use strict";var fn=c6.exports;c6.exports.default=fn;var Nn="\x1B[",rB="\x1B]",RC="\x07",kk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";fn.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Nn+(t+1)+"G":Nn+(e+1)+";"+(t+1)+"H"};fn.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Nn+-t+"D":t>0&&(r+=Nn+t+"C"),e<0?r+=Nn+-e+"A":e>0&&(r+=Nn+e+"B"),r};fn.cursorUp=(t=1)=>Nn+t+"A";fn.cursorDown=(t=1)=>Nn+t+"B";fn.cursorForward=(t=1)=>Nn+t+"C";fn.cursorBackward=(t=1)=>Nn+t+"D";fn.cursorLeft=Nn+"G";fn.cursorSavePosition=zye?"\x1B7":Nn+"s";fn.cursorRestorePosition=zye?"\x1B8":Nn+"u";fn.cursorGetPosition=Nn+"6n";fn.cursorNextLine=Nn+"E";fn.cursorPrevLine=Nn+"F";fn.cursorHide=Nn+"?25l";fn.cursorShow=Nn+"?25h";fn.eraseLines=t=>{let e="";for(let r=0;r[rB,"8",kk,kk,e,RC,t,rB,"8",kk,kk,RC].join("");fn.image=(t,e={})=>{let r=`${rB}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")+RC};fn.iTerm={setCwd:(t=process.cwd())=>`${rB}50;CurrentDir=${t}${RC}`,annotation:(t,e={})=>{let r=`${rB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+RC}}});var Jye=_((oKt,A6)=>{"use strict";var Vye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=Vye;A6.exports.default=Vye});var Zye=_((aKt,Rk)=>{"use strict";var Lyt=Jye(),Qk=new WeakMap,Xye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Qk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Lyt(n,t),Qk.set(n,o),n};Rk.exports=Xye;Rk.exports.default=Xye;Rk.exports.callCount=t=>{if(!Qk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Qk.get(t)}});var $ye=_((lKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((cKt,LC)=>{var Ei=global.process,im=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"};im(Ei)?(eEe=ve("assert"),FC=$ye(),tEe=/^win/i.test(Ei.platform),nB=ve("events"),typeof nB!="function"&&(nB=nB.EventEmitter),Ei.__signal_exit_emitter__?Ns=Ei.__signal_exit_emitter__:(Ns=Ei.__signal_exit_emitter__=new nB,Ns.count=0,Ns.emitted={}),Ns.infinite||(Ns.setMaxListeners(1/0),Ns.infinite=!0),LC.exports=function(t,e){if(!im(global.process))return function(){};eEe.equal(typeof t,"function","a callback must be provided for exit handler"),TC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ns.removeListener(r,t),Ns.listeners("exit").length===0&&Ns.listeners("afterexit").length===0&&Tk()};return Ns.on(r,t),o},Tk=function(){!TC||!im(global.process)||(TC=!1,FC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Nk,Ei.reallyExit=p6,Ns.count-=1)},LC.exports.unload=Tk,sm=function(e,r,o){Ns.emitted[e]||(Ns.emitted[e]=!0,Ns.emit(e,r,o))},Lk={},FC.forEach(function(t){Lk[t]=function(){if(!!im(global.process)){var r=Ei.listeners(t);r.length===Ns.count&&(Tk(),sm("exit",null,t),sm("afterexit",null,t),tEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return FC},TC=!1,f6=function(){TC||!im(global.process)||(TC=!0,Ns.count+=1,FC=FC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=nEe,Ei.reallyExit=rEe)},LC.exports.load=f6,p6=Ei.reallyExit,rEe=function(e){!im(global.process)||(Ei.exitCode=e||0,sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Nk=Ei.emit,nEe=function(e,r){if(e==="exit"&&im(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Nk.apply(this,arguments);return sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),o}else return Nk.apply(this,arguments)}):LC.exports=function(){return function(){}};var eEe,FC,tEe,nB,Ns,Tk,sm,Lk,TC,f6,p6,rEe,Nk,nEe});var sEe=_((uKt,iEe)=>{"use strict";var Nyt=Zye(),Oyt=h6();iEe.exports=Nyt(()=>{Oyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(NC=>{"use strict";var Myt=sEe(),Ok=!1;NC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};NC.hide=(t=process.stderr)=>{!t.isTTY||(Myt(),Ok=!0,t.write("\x1B[?25l"))};NC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?NC.show(e):NC.hide(e)}});var cEe=_(iB=>{"use strict";var lEe=iB&&iB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iB,"__esModule",{value:!0});var oEe=lEe(u6()),aEe=lEe(g6()),Uyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(aEe.default.hide(),a=!0);let A=u+` `;A!==o&&(o=A,t.write(oEe.default.eraseLines(r)+A),r=A.split(` -`).length)};return n.clear=()=>{t.write(oEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(aEe.default.show(),a=!1)},n};nB.default={create:Oyt}});var uEe=_((AKt,Myt)=>{Myt.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 pEe=_(dl=>{"use strict";var fEe=uEe(),hA=process.env;Object.defineProperty(dl,"_vendors",{value:fEe.map(function(t){return t.constant})});dl.name=null;dl.isPR=null;fEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return AEe(o)});if(dl[t.constant]=r,r)switch(dl.name=t.name,typeof t.pr){case"string":dl.isPR=!!hA[t.pr];break;case"object":"env"in t.pr?dl.isPR=t.pr.env in hA&&hA[t.pr.env]!==t.pr.ne:"any"in t.pr?dl.isPR=t.pr.any.some(function(o){return!!hA[o]}):dl.isPR=AEe(t.pr);break;default:dl.isPR=null}});dl.isCI=!!(hA.CI||hA.CONTINUOUS_INTEGRATION||hA.BUILD_NUMBER||hA.RUN_ID||dl.name);function AEe(t){return typeof t=="string"?!!hA[t]:Object.keys(t).every(function(e){return hA[e]===t[e]})}});var gEe=_((pKt,hEe)=>{"use strict";hEe.exports=pEe().isCI});var mEe=_((hKt,dEe)=>{"use strict";var Uyt=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};dEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Uyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var vEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var _C,oB,Hk,qk,I6;typeof window>"u"||typeof MessageChannel!="function"?(UC=null,d6=null,m6=function(){if(UC!==null)try{var t=kn.unstable_now();UC(!0,t),UC=null}catch(e){throw setTimeout(m6,0),e}},yEe=Date.now(),kn.unstable_now=function(){return Date.now()-yEe},_C=function(t){UC!==null?setTimeout(_C,0,t):(UC=t,setTimeout(m6,0))},oB=function(t,e){d6=setTimeout(t,e)},Hk=function(){clearTimeout(d6)},qk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Ok=window.performance,y6=window.Date,EEe=window.setTimeout,CEe=window.clearTimeout,typeof console<"u"&&(wEe=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://fb.me/react-polyfills"),typeof wEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ok=="object"&&typeof Ok.now=="function"?kn.unstable_now=function(){return Ok.now()}:(IEe=y6.now(),kn.unstable_now=function(){return y6.now()-IEe}),iB=!1,sB=null,Mk=-1,E6=5,C6=0,qk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125_k(u,r))p!==void 0&&0>_k(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>_k(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function _k(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var tu=[],E0=[],_yt=1,na=null,No=3,jk=!1,am=!1,aB=!1;function Yk(t){for(var e=ic(E0);e!==null;){if(e.callback===null)Gk(E0);else if(e.startTime<=t)Gk(E0),e.sortIndex=e.expirationTime,B6(tu,e);else break;e=ic(E0)}}function v6(t){if(aB=!1,Yk(t),!am)if(ic(tu)!==null)am=!0,_C(D6);else{var e=ic(E0);e!==null&&oB(v6,e.startTime-t)}}function D6(t,e){am=!1,aB&&(aB=!1,Hk()),jk=!0;var r=No;try{for(Yk(e),na=ic(tu);na!==null&&(!(na.expirationTime>e)||t&&!qk());){var o=na.callback;if(o!==null){na.callback=null,No=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===ic(tu)&&Gk(tu),Yk(e)}else Gk(tu);na=ic(tu)}if(na!==null)var n=!0;else{var u=ic(E0);u!==null&&oB(v6,u.startTime-e),n=!1}return n}finally{na=null,No=r,jk=!1}}function BEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Hyt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=No;No=t;try{return e()}finally{No=r}};kn.unstable_next=function(t){switch(No){case 1:case 2:case 3:var e=3;break;default:e=No}var r=No;No=e;try{return t()}finally{No=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(E0,t),ic(tu)===null&&t===ic(E0)&&(aB?Hk():aB=!0,oB(v6,a-o))):(t.sortIndex=r,B6(tu,t),am||jk||(am=!0,_C(D6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=No;return function(){var r=No;No=e;try{return t.apply(this,arguments)}finally{No=r}}};kn.unstable_getCurrentPriorityLevel=function(){return No};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Yk(t);var e=ic(tu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";DEe.exports=vEe()});var PEe=_((mKt,lB)=>{lB.exports=function t(e){"use strict";var r=$H(),o=on(),a=P6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,T=1;Tao||(P.current=El[ao],El[ao]=null,ao--)}function On(P,D){ao++,El[ao]=P.current,P.current=D}var Li={},Mn={current:Li},_i={current:!1},rr=Li;function Oe(P,D){var T=P.type.contextTypes;if(!T)return Li;var q=P.stateNode;if(q&&q.__reactInternalMemoizedUnmaskedChildContext===D)return q.__reactInternalMemoizedMaskedChildContext;var Y={},Ae;for(Ae in T)Y[Ae]=D[Ae];return q&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Ua(P){zn(_i,P),zn(Mn,P)}function hr(P){zn(_i,P),zn(Mn,P)}function Ac(P,D,T){if(Mn.current!==Li)throw Error(n(168));On(Mn,D,P),On(_i,T,P)}function Au(P,D,T){var q=P.stateNode;if(P=D.childContextTypes,typeof q.getChildContext!="function")return T;q=q.getChildContext();for(var Y in q)if(!(Y in P))throw Error(n(108,he(D)||"Unknown",Y));return r({},T,{},q)}function fc(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Li,rr=Mn.current,On(Mn,D,P),On(_i,_i.current,P),!0}function Cl(P,D,T){var q=P.stateNode;if(!q)throw Error(n(169));T?(D=Au(P,D,rr),q.__reactInternalMemoizedMergedChildContext=D,zn(_i,P),zn(Mn,P),On(Mn,D,P)):zn(_i,P),On(_i,T,P)}var DA=a.unstable_runWithPriority,fu=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Rt=a.unstable_shouldYield,pc=a.unstable_requestPaint,Hi=a.unstable_now,pu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,wl=a.unstable_UserBlockingPriority,PA=a.unstable_NormalPriority,Ap=a.unstable_LowPriority,hc=a.unstable_IdlePriority,SA={},Qn=pc!==void 0?pc:function(){},hi=null,gc=null,bA=!1,sa=Hi(),Ni=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(pu()){case Yt:return 99;case wl:return 98;case PA:return 97;case Ap:return 96;case hc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return wl;case 97:return PA;case 96:return Ap;case 95:return hc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),DA(P,D)}function dc(P,D,T){return P=Ze(P),fu(P,D,T)}function hu(P){return hi===null?(hi=[P],gc=fu(Yt,gu)):hi.push(P),SA}function qi(){if(gc!==null){var P=gc;gc=null,Ce(P)}gu()}function gu(){if(!bA&&hi!==null){bA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(Go=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return b?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var T=P.alternate;if(T===null){var q=P.updateQueue,Y=null;q===null&&(q=P.updateQueue=Un(P.memoizedState))}else q=P.updateQueue,Y=T.updateQueue,q===null?Y===null?(q=P.updateQueue=Un(P.memoizedState),Y=T.updateQueue=Un(T.memoizedState)):q=P.updateQueue=Pn(Y):Y===null&&(Y=T.updateQueue=Pn(q));Y===null||q===Y?We(q,D):q.lastUpdate===null||Y.lastUpdate===null?(We(q,D),We(Y,D)):(We(q,D),Y.lastUpdate=D)}function It(P,D){var T=P.updateQueue;T=T===null?P.updateQueue=Un(P.memoizedState):ir(P,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=D:(T.lastCapturedUpdate.next=D,T.lastCapturedUpdate=D)}function ir(P,D){var T=P.alternate;return T!==null&&D===T.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,T,q,Y,Ae){switch(T.tag){case 1:return P=T.payload,typeof P=="function"?P.call(Ae,q,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=T.payload,Y=typeof P=="function"?P.call(Ae,q,Y):P,Y==null)break;return r({},q,Y);case 2:_s=!0}return q}function ye(P,D,T,q,Y){_s=!1,D=ir(P,D);for(var Ae=D.baseState,De=null,vt=0,wt=D.firstUpdate,xt=Ae;wt!==null;){var _r=wt.expirationTime;_rbn?(ai=Fr,Fr=null):ai=Fr.sibling;var tn=di(rt,Fr,ft[bn],Wt);if(tn===null){Fr===null&&(Fr=ai);break}P&&Fr&&tn.alternate===null&&D(rt,Fr),ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn,Fr=ai}if(bn===ft.length)return T(rt,Fr),vr;if(Fr===null){for(;bnbn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,tn.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),ze=Ae(ho,ze,bn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(tn.done)return T(rt,Fr),vr;if(Fr===null){for(;!tn.done;bn++,tn=ft.next())tn=is(rt,tn.value,Wt),tn!==null&&(ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn);return vr}for(Fr=q(rt,Fr);!tn.done;bn++,tn=ft.next())tn=po(Fr,rt,bn,tn.value,Wt),tn!==null&&(P&&tn.alternate!==null&&Fr.delete(tn.key===null?bn:tn.key),ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn);return P&&Fr.forEach(function(vF){return D(rt,vF)}),vr}return function(rt,ze,ft,Wt){var vr=typeof ft=="object"&&ft!==null&&ft.type===E&&ft.key===null;vr&&(ft=ft.props.children);var Sn=typeof ft=="object"&&ft!==null;if(Sn)switch(ft.$$typeof){case p:e:{for(Sn=ft.key,vr=ze;vr!==null;){if(vr.key===Sn)if(vr.tag===7?ft.type===E:vr.elementType===ft.type){T(rt,vr.sibling),ze=Y(vr,ft.type===E?ft.props.children:ft.props,Wt),ze.ref=QA(rt,vr,ft),ze.return=rt,rt=ze;break e}else{T(rt,vr);break}else D(rt,vr);vr=vr.sibling}ft.type===E?(ze=xu(ft.props.children,rt.mode,Wt,ft.key),ze.return=rt,rt=ze):(Wt=qm(ft.type,ft.key,ft.props,null,rt.mode,Wt),Wt.ref=QA(rt,ze,ft),Wt.return=rt,rt=Wt)}return De(rt);case h:e:{for(vr=ft.key;ze!==null;){if(ze.key===vr)if(ze.tag===4&&ze.stateNode.containerInfo===ft.containerInfo&&ze.stateNode.implementation===ft.implementation){T(rt,ze.sibling),ze=Y(ze,ft.children||[],Wt),ze.return=rt,rt=ze;break e}else{T(rt,ze);break}else D(rt,ze);ze=ze.sibling}ze=Rw(ft,rt.mode,Wt),ze.return=rt,rt=ze}return De(rt)}if(typeof ft=="string"||typeof ft=="number")return ft=""+ft,ze!==null&&ze.tag===6?(T(rt,ze.sibling),ze=Y(ze,ft,Wt),ze.return=rt,rt=ze):(T(rt,ze),ze=Fw(ft,rt.mode,Wt),ze.return=rt,rt=ze),De(rt);if(kA(ft))return zA(rt,ze,ft,Wt);if(ue(ft))return Yo(rt,ze,ft,Wt);if(Sn&&fp(rt,ft),typeof ft>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,ze)}}var du=sg(!0),og=sg(!1),mu={},uo={current:mu},FA={current:mu},yc={current:mu};function ca(P){if(P===mu)throw Error(n(174));return P}function ag(P,D){On(yc,D,P),On(FA,P,P),On(uo,mu,P),D=ne(D),zn(uo,P),On(uo,D,P)}function Ec(P){zn(uo,P),zn(FA,P),zn(yc,P)}function Sm(P){var D=ca(yc.current),T=ca(uo.current);D=ee(T,P.type,D),T!==D&&(On(FA,P,P),On(uo,D,P))}function lg(P){FA.current===P&&(zn(uo,P),zn(FA,P))}var ei={current:0};function pp(P){for(var D=P;D!==null;){if(D.tag===13){var T=D.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Ns(T)||so(T)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function cg(P,D){return{responder:P,props:D}}var RA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,yu=0,qa=null,ji=null,ua=null,Eu=null,Es=null,Cc=null,wc=0,j=null,Dt=0,Il=!1,xi=null,Ic=0;function ct(){throw Error(n(321))}function Cu(P,D){if(D===null)return!1;for(var T=0;Twc&&(wc=_r,Hm(wc))):(Sw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===P?wt.eagerState:P(Ae,wt.action)),De=wt,wt=wt.next}while(wt!==null&&wt!==q);xt||(vt=De,Y=Ae),hs(Ae,D.memoizedState)||(Go=!0),D.memoizedState=Ae,D.baseUpdate=vt,D.baseState=Y,T.lastRenderedState=Ae}return[D.memoizedState,T.dispatch]}function Ag(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=dg.bind(null,qa,P),[D.memoizedState,P]}function fg(P){return Cs(Br,P)}function pg(P,D,T,q){return P={tag:P,create:D,destroy:T,deps:q,next:null},j===null?(j={lastEffect:null},j.lastEffect=P.next=P):(D=j.lastEffect,D===null?j.lastEffect=P.next=P:(T=D.next,D.next=P,P.next=T,j.lastEffect=P)),P}function gp(P,D,T,q){var Y=TA();Dt|=P,Y.memoizedState=pg(D,T,void 0,q===void 0?null:q)}function Bc(P,D,T,q){var Y=hp();q=q===void 0?null:q;var Ae=void 0;if(ji!==null){var De=ji.memoizedState;if(Ae=De.destroy,q!==null&&Cu(q,De.deps)){pg(0,T,Ae,q);return}}Dt|=P,Y.memoizedState=pg(D,T,Ae,q)}function Ct(P,D){return gp(516,192,P,D)}function bm(P,D){return Bc(516,192,P,D)}function hg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function gg(){}function wu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var T=hp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Cu(D,q[1])?q[0]:(T.memoizedState=[P,D],P)}function dg(P,D,T){if(!(25>Ic))throw Error(n(301));var q=P.alternate;if(P===qa||q!==null&&q===qa)if(Il=!0,P={expirationTime:yu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},xi===null&&(xi=new Map),T=xi.get(D),T===void 0)xi.set(D,P);else{for(D=T;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),Ae=ht.suspense;Y=qA(Y,P,Ae),Ae={expirationTime:Y,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var De=D.last;if(De===null)Ae.next=Ae;else{var vt=De.next;vt!==null&&(Ae.next=vt),De.next=Ae}if(D.last=Ae,P.expirationTime===0&&(q===null||q.expirationTime===0)&&(q=D.lastRenderedReducer,q!==null))try{var wt=D.lastRenderedState,xt=q(wt,T);if(Ae.eagerReducer=q,Ae.eagerState=xt,hs(xt,wt))return}catch{}finally{}bc(P,Y)}}var Iu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},Ew={readContext:ms,useCallback:wu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,T){return T=T!=null?T.concat([P]):null,gp(4,36,hg.bind(null,D,P),T)},useLayoutEffect:function(P,D){return gp(4,36,P,D)},useMemo:function(P,D){var T=TA();return D=D===void 0?null:D,P=P(),T.memoizedState=[P,D],P},useReducer:function(P,D,T){var q=TA();return D=T!==void 0?T(D):D,q.memoizedState=q.baseState=D,P=q.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=dg.bind(null,qa,P),[q.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:Ag,useDebugValue:gg,useResponder:cg,useDeferredValue:function(P,D){var T=Ag(P),q=T[0],Y=T[1];return Ct(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=Ae}})},[P,D]),q},useTransition:function(P){var D=Ag(!1),T=D[0],q=D[1];return[wu(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=P===void 0?null:P;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[P,T]),T]}},km={readContext:ms,useCallback:xm,useContext:ms,useEffect:bm,useImperativeHandle:function(P,D,T){return T=T!=null?T.concat([P]):null,Bc(4,36,hg.bind(null,D,P),T)},useLayoutEffect:function(P,D){return Bc(4,36,P,D)},useMemo:function(P,D){var T=hp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Cu(D,q[1])?q[0]:(P=P(),T.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return hp().memoizedState},useState:fg,useDebugValue:gg,useResponder:cg,useDeferredValue:function(P,D){var T=fg(P),q=T[0],Y=T[1];return bm(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=Ae}})},[P,D]),q},useTransition:function(P){var D=fg(!1),T=D[0],q=D[1];return[xm(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=P===void 0?null:P;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[P,T]),T]}},Aa=null,vc=null,Bl=!1;function Bu(P,D){var T=Pl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=D,T.return=P,T.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=T,P.lastEffect=T):P.firstEffect=P.lastEffect=T}function mg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function LA(P){if(Bl){var D=vc;if(D){var T=D;if(!mg(P,D)){if(D=uc(T),!D||!mg(P,D)){P.effectTag=P.effectTag&-1025|2,Bl=!1,Aa=P;return}Bu(Aa,T)}Aa=P,vc=uu(D)}else P.effectTag=P.effectTag&-1025|2,Bl=!1,Aa=P}}function dp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function Ga(P){if(!y||P!==Aa)return!1;if(!Bl)return dp(P),Bl=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!ke(D,P.memoizedProps))for(D=vc;D;)Bu(P,D),D=uc(D);if(dp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));vc=Os(P)}else vc=Aa?uc(P.stateNode):null;return!0}function yg(){y&&(vc=Aa=null,Bl=!1)}var mp=u.ReactCurrentOwner,Go=!1;function ws(P,D,T,q){D.child=P===null?og(D,null,T,q):du(D,P.child,T,q)}function Ii(P,D,T,q,Y){T=T.render;var Ae=D.ref;return ds(D,Y),q=ug(P,D,T,q,Ae,Y),P!==null&&!Go?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,q,Y),D.child)}function Qm(P,D,T,q,Y,Ae){if(P===null){var De=T.type;return typeof De=="function"&&!Qw(De)&&De.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(D.tag=15,D.type=De,Fm(P,D,De,q,Y,Ae)):(P=qm(T.type,null,q,null,D.mode,Ae),P.ref=D.ref,P.return=D,D.child=P)}return De=P.child,YD)&&HA.set(P,D)))}}function Pg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=hu(Pw.bind(null,P));else{var D=_m(P),T=P.callbackNode;if(D===0)T!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var q=ga();if(D===1073741823?q=99:D===1||D===2?q=95:(q=10*(1073741821-D)-10*(1073741821-q),q=0>=q?99:250>=q?98:5250>=q?97:95),T!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=q)return;T!==SA&&Ce(T)}P.callbackExpirationTime=D,P.callbackPriority=q,D=D===1073741823?hu(Pw.bind(null,P)):dc(q,Wv.bind(null,P),{timeout:10*(1073741821-D)-Ni()}),P.callbackNode=D}}}function Wv(P,D){if(Um=0,D)return D=ga(),Gm(P,D),fo(P),null;var T=_m(P);if(T!==0){if(D=P.callbackNode,(yr&(rs|qs))!==En)throw Error(n(327));if(vp(),P===gi&&T===ns||Su(P,T),Or!==null){var q=yr;yr|=rs;var Y=jA(P);do try{pF();break}catch(vt){GA(P,vt)}while(1);if(la(),yr=q,wp.current=Y,Yi===Lm)throw D=Nm,Su(P,T),KA(P,T),fo(P),D;if(Or===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=T,q=Yi,gi=null,q){case vu:case Lm:throw Error(n(345));case Bi:Gm(P,2=T){P.lastPingedTime=T,Su(P,T);break}}if(Ae=_m(P),Ae!==0&&Ae!==T)break;if(q!==0&&q!==T){P.lastPingedTime=q;break}P.timeoutHandle=Te(bu.bind(null,P),Y);break}bu(P);break;case Dl:if(KA(P,T),q=P.lastSuspendedTime,T===q&&(P.nextKnownPendingLevel=bw(Y)),UA&&(Y=P.lastPingedTime,Y===0||Y>=T)){P.lastPingedTime=T,Su(P,T);break}if(Y=_m(P),Y!==0&&Y!==T)break;if(q!==0&&q!==T){P.lastPingedTime=q;break}if(MA!==1073741823?q=10*(1073741821-MA)-Ni():Wa===1073741823?q=0:(q=10*(1073741821-Wa)-5e3,Y=Ni(),T=10*(1073741821-T)-Y,q=Y-q,0>q&&(q=0),q=(120>q?120:480>q?480:1080>q?1080:1920>q?1920:3e3>q?3e3:4320>q?4320:1960*ww(q/1960))-q,T=q?q=0:(Y=De.busyDelayMs|0,Ae=Ni()-(10*(1073741821-Ae)-(De.timeoutMs|0||5e3)),q=Ae<=Y?0:Y+q-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+yl(Y))}Yi!==Sc&&(Yi=Bi),Ae=Cg(Ae,Y),wt=q;do{switch(wt.tag){case 3:De=Ae,wt.effectTag|=4096,wt.expirationTime=D;var ze=jv(wt,De,D);It(wt,ze);break e;case 1:De=Ae;var ft=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof ft.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Pu===null||!Pu.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,De,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=Jv(Or)}catch(Sn){D=Sn;continue}break}while(1)}function jA(){var P=wp.current;return wp.current=Iu,P===null?Iu:P}function Sw(P,D){PIp&&(Ip=P)}function fF(){for(;Or!==null;)Or=Vv(Or)}function pF(){for(;Or!==null&&!Rt();)Or=Vv(Or)}function Vv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=Jv(P)),Iw.current=null,D}function Jv(P){Or=P;do{var D=Or.alternate;if(P=Or.return,(Or.effectTag&2048)===0){e:{var T=D;D=Or;var q=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Ua(D);break;case 3:Ec(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(T===null||T.child===null)&&Ga(D)&&pa(D),vl(D);break;case 5:lg(D);var Ae=ca(yc.current);if(q=D.type,T!==null&&D.stateNode!=null)ts(T,D,q,Y,Ae),T.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(T=ca(uo.current),Ga(D)){if(Y=D,!y)throw Error(n(175));T=cp(Y.stateNode,Y.type,Y.memoizedProps,Ae,T,Y),Y.updateQueue=T,T=T!==null,T&&pa(D)}else{var De=At(q,Y,Ae,T,D);Dc(De,D,!1,!1),D.stateNode=De,at(De,q,Y,Ae,T)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(T&&D.stateNode!=null)jr(T,D,T.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(T=ca(yc.current),Ae=ca(uo.current),Ga(D)){if(T=D,!y)throw Error(n(176));(T=up(T.stateNode,T.memoizedProps,T))&&pa(D)}else D.stateNode=He(Y,T,Ae,D)}break;case 11:break;case 13:if(zn(ei,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=q;break e}Y=Y!==null,Ae=!1,T===null?D.memoizedProps.fallback!==void 0&&Ga(D):(q=T.memoizedState,Ae=q!==null,Y||q===null||(q=T.child.sibling,q!==null&&(De=D.firstEffect,De!==null?(D.firstEffect=q,q.nextEffect=De):(D.firstEffect=D.lastEffect=q,q.nextEffect=null),q.effectTag=8))),Y&&!Ae&&(D.mode&2)!==0&&(T===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||(ei.current&1)!==0?Yi===vu&&(Yi=ha):((Yi===vu||Yi===ha)&&(Yi=Dl),Ip!==0&&gi!==null&&(KA(gi,ns),eD(gi,Ip)))),S&&Y&&(D.effectTag|=4),w&&(Y||Ae)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Ec(D),vl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Ua(D);break;case 19:if(zn(ei,D),Y=D.memoizedState,Y===null)break;if(Ae=(D.effectTag&64)!==0,De=Y.rendering,De===null){if(Ae)Pc(Y,!1);else if(Yi!==vu||T!==null&&(T.effectTag&64)!==0)for(T=D.child;T!==null;){if(De=pp(T),De!==null){for(D.effectTag|=64,Pc(Y,!1),T=De.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,T=q,Y=D.child;Y!==null;)Ae=Y,q=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,De=Ae.alternate,De===null?(Ae.childExpirationTime=0,Ae.expirationTime=q,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=De.childExpirationTime,Ae.expirationTime=De.expirationTime,Ae.child=De.child,Ae.memoizedProps=De.memoizedProps,Ae.memoizedState=De.memoizedState,Ae.updateQueue=De.updateQueue,q=De.dependencies,Ae.dependencies=q===null?null:{expirationTime:q.expirationTime,firstContext:q.firstContext,responders:q.responders}),Y=Y.sibling;On(ei,ei.current&1|2,D),D=D.child;break e}T=T.sibling}}else{if(!Ae)if(T=pp(De),T!==null){if(D.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Pc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!De.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Ni()>Y.tailExpiration&&1Y&&(Y=q),De>Y&&(Y=De),Ae=Ae.sibling;T.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Or.firstEffect),P.lastEffect=Or.lastEffect),1P?D:P}function bu(P){var D=_o();return lo(99,hF.bind(null,P,D)),null}function hF(P,D){do vp();while(vg!==null);if((yr&(rs|qs))!==En)throw Error(n(327));var T=P.finishedWork,q=P.finishedExpirationTime;if(T===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,T===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=bw(T);if(P.firstPendingTime=Y,q<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:q<=P.firstSuspendedTime&&(P.firstSuspendedTime=q-1),q<=P.lastPingedTime&&(P.lastPingedTime=0),q<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Or=gi=null,ns=0),1=T?ln(P,D,T):(On(ei,ei.current&1,D),D=si(P,D,T),D!==null?D.sibling:null);On(ei,ei.current&1,D);break;case 19:if(q=D.childExpirationTime>=T,(P.effectTag&64)!==0){if(q)return ja(P,D,T);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),On(ei,ei.current,D),!q)return null}return si(P,D,T)}Go=!1}}else Go=!1;switch(D.expirationTime=0,D.tag){case 2:if(q=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Oe(D,Mn.current),ds(D,T),Y=ug(null,D,q,P,Y,T),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,yw(),ii(q)){var Ae=!0;fc(D)}else Ae=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var De=q.getDerivedStateFromProps;typeof De=="function"&&er(D,q,De,P),Y.updater=$r,D.stateNode=Y,Y._reactInternalFiber=D,qo(D,q,P,T),D=Ep(null,D,q,!0,Ae,T)}else D.tag=0,ws(null,D,Y,T),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,me(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,Ae=D.tag=wF(Y),P=Ci(Y,P),Ae){case 0:D=NA(null,D,Y,P,T);break;case 1:D=yp(null,D,Y,P,T);break;case 11:D=Ii(null,D,Y,P,T);break;case 14:D=Qm(null,D,Y,Ci(Y.type,P),q,T);break;default:throw Error(n(306,Y,""))}return D;case 0:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),NA(P,D,q,Y,T);case 1:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),yp(P,D,q,Y,T);case 3:if(Eg(D),q=D.updateQueue,q===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,ye(D,q,D.pendingProps,null,T),q=D.memoizedState.element,q===Y)yg(),D=si(P,D,T);else{if((Y=D.stateNode.hydrate)&&(y?(vc=uu(D.stateNode.containerInfo),Aa=D,Y=Bl=!0):Y=!1),Y)for(T=og(D,null,q,T),D.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else ws(P,D,q,T),yg();D=D.child}return D;case 5:return Sm(D),P===null&&LA(D),q=D.type,Y=D.pendingProps,Ae=P!==null?P.memoizedProps:null,De=Y.children,ke(q,Y)?De=null:Ae!==null&&ke(q,Ae)&&(D.effectTag|=16),jo(P,D),D.mode&4&&T!==1&&xe(q,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,De,T),D=D.child),D;case 6:return P===null&&LA(D),null;case 13:return ln(P,D,T);case 4:return ag(D,D.stateNode.containerInfo),q=D.pendingProps,P===null?D.child=du(D,null,q,T):ws(P,D,q,T),D.child;case 11:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),Ii(P,D,q,Y,T);case 7:return ws(P,D,D.pendingProps,T),D.child;case 8:return ws(P,D,D.pendingProps.children,T),D.child;case 12:return ws(P,D,D.pendingProps.children,T),D.child;case 10:e:{if(q=D.type._context,Y=D.pendingProps,De=D.memoizedProps,Ae=Y.value,Ho(D,Ae),De!==null){var vt=De.value;if(Ae=hs(vt,Ae)?0:(typeof q._calculateChangedBits=="function"?q._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(De.children===Y.children&&!_i.current){D=si(P,D,T);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){De=vt.child;for(var xt=wt.firstContext;xt!==null;){if(xt.context===q&&(xt.observedBits&Ae)!==0){vt.tag===1&&(xt=ys(T,null),xt.tag=2,tt(vt,xt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var T=D.inject(P);xw=function(q){try{D.onCommitFiberRoot(T,q,void 0,(q.current.effectTag&64)===64)}catch{}},kw=function(q){try{D.onCommitFiberUnmount(T,q)}catch{}}}catch{}return!0}function CF(P,D,T,q){this.tag=P,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=q,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Pl(P,D,T,q){return new CF(P,D,T,q)}function Qw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function wF(P){if(typeof P=="function")return Qw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===N)return 11;if(P===te)return 14}return 2}function WA(P,D){var T=P.alternate;return T===null?(T=Pl(P.tag,D,P.key,P.mode),T.elementType=P.elementType,T.type=P.type,T.stateNode=P.stateNode,T.alternate=P,P.alternate=T):(T.pendingProps=D,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=P.childExpirationTime,T.expirationTime=P.expirationTime,T.child=P.child,T.memoizedProps=P.memoizedProps,T.memoizedState=P.memoizedState,T.updateQueue=P.updateQueue,D=P.dependencies,T.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},T.sibling=P.sibling,T.index=P.index,T.ref=P.ref,T}function qm(P,D,T,q,Y,Ae){var De=2;if(q=P,typeof P=="function")Qw(P)&&(De=1);else if(typeof P=="string")De=5;else e:switch(P){case E:return xu(T.children,Y,Ae,D);case R:De=8,Y|=7;break;case I:De=8,Y|=1;break;case v:return P=Pl(12,T,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=Ae,P;case U:return P=Pl(13,T,D,Y),P.type=U,P.elementType=U,P.expirationTime=Ae,P;case V:return P=Pl(19,T,D,Y),P.elementType=V,P.expirationTime=Ae,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case x:De=10;break e;case C:De=9;break e;case N:De=11;break e;case te:De=14;break e;case ae:De=16,q=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Pl(De,T,D,Y),D.elementType=P,D.type=q,D.expirationTime=Ae,D}function xu(P,D,T,q){return P=Pl(7,P,q,D),P.expirationTime=T,P}function Fw(P,D,T){return P=Pl(6,P,null,D),P.expirationTime=T,P}function Rw(P,D,T){return D=Pl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=T,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function IF(P,D,T){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=qe,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var T=P.firstSuspendedTime;return P=P.lastSuspendedTime,T!==0&&T>=D&&P<=D}function KA(P,D){var T=P.firstSuspendedTime,q=P.lastSuspendedTime;TD||T===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var T=P.firstSuspendedTime;T!==0&&(D>=T?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function Gm(P,D){var T=P.lastExpiredTime;(T===0||T>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";SEe.exports=PEe()});var kEe=_((EKt,xEe)=>{"use strict";var qyt={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};xEe.exports=qyt});var TEe=_((CKt,REe)=>{"use strict";var Gyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),QEe=function(){Wk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){b6(this,t),this.width=e,this.height=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),FEe=function(){function t(e,r){b6(this,t),this.unit=e,this.value=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ru.UNIT_POINT:return String(this.value);case ru.UNIT_PERCENT:return this.value+"%";case ru.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();REe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),x=1;x1&&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]:ru.DIRECTION_LTR;return u.call(this,A,p,h)}),Gyt({Config:e.Config,Node:e.Node,Layout:t("Layout",jyt),Size:t("Size",QEe),Value:t("Value",FEe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},ru)}});var LEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` -`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(x){Runtime.warnOnce("Blob constructor present but fails: "+x+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var R=C.getContext("2d");R.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(R){h||(h=!0,Module.preloadedAudios[u]=R,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var x=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(V){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ae="=",fe="",ue=0,me=0,he=0;he=6;){var Be=ue>>me-6&63;me-=6,fe+=te[Be]}return me==2?(fe+=te[(ue&3)<<4],fe+=ae+ae):me==4&&(fe+=te[(ue&15)<<2],fe+=ae),fe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=x,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,x){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var R;return x?R=E.replace("X",p).replace("Y",v):R=p.replace("X",E).replace("Y",v),R.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,x,C,R){x===void 0&&(x="X"),R===void 0&&(R=1);var N=E(p);if(N)return N;var U=I(p),V=U.placeholderFlag,te=e[V];C&&te&&(x=r(C[2],C[0],x,te[0],"?",!0));var ae;V==0&&(ae="Unbound"),V>=10&&(ae="Corrupt"),R>20&&(ae="Deeply nested"),ae&&o(ae,p,x,V,v||"?");var fe=U.paramList[0],ue=a(fe,h,E,I,v,x,te,R+1),me,he={flags:te[0],id:p,name:"",paramList:[ue]},Be=[],we="?";switch(U.placeholderFlag){case 1:me=ue.spec;break;case 2:if((ue.flags&15360)==1024&&ue.spec.ptrSize==1){he.flags=7168;break}case 3:case 6:case 5:me=ue.spec,ue.flags&15360;break;case 8:we=""+U.paramList[1],he.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var x=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[x/4],I=HEAPU32[x/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},R={__nbindFlags:E,__nbindPtr:I};v&&(R.__nbindShared=v,_nbind.mark(h));for(var N=0,U=Object.keys(R);N>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,x=e.ABORT|0,C=e.STACKTOP|0,R=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,V=0,te=0,ae=0,fe=0,ue=t.NaN,me=t.Infinity,he=0,Be=0,we=0,g=0,Ee=0,Pe=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,Fe=t.Math.cos,At=t.Math.sin,H=t.Math.tan,at=t.Math.acos,Re=t.Math.asin,ke=t.Math.atan,xe=t.Math.atan2,He=t.Math.exp,Te=t.Math.log,Ve=t.Math.ceil,qe=t.Math.imul,b=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,J=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,be=e.invoke_viiiii,Le=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,Gt=e.invoke_vi,$t=e.invoke_vii,bt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,br=e.invoke_diii,Wr=e.invoke_di,Kn=e.invoke_iid,Ls=e.invoke_iii,Ti=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ns=e.invoke_iiiiii,so=e.invoke_viiid,uc=e.invoke_viififi,uu=e.invoke_viii,cp=e.invoke_v,up=e.invoke_viid,Os=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Ms=e._emscripten_asm_const_iiidddddd,yl=e._emscripten_asm_const_iiiid,El=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,zn=e._removeAccessorPrefix,On=e._typeModule,Li=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,rr=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ua=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,Ac=e.__nbind_register_primitive,Au=e.__nbind_register_type,fc=e._emscripten_memcpy_big,Cl=e.__nbind_register_function,DA=e.___setErrNo,fu=e.__nbind_register_class,Ce=e.__nbind_finish,Rt=e._abort,pc=e._nbind_value,Hi=e._llvm_stacksave,pu=e.___syscall54,Yt=e._defineHidden,wl=e._emscripten_set_main_loop,PA=e._emscripten_get_now,Ap=e.__nbind_register_callback_signature,hc=e._emscripten_asm_const_iiiiii,SA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,gc=e.___syscall6,bA=e._atexit,sa=e.___syscall140,Ni=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function dc(){return C|0}function hu(s){s=s|0,C=s}function qi(s,l){s=s|0,l=l|0,C=s,R=l}function gu(s,l){s=s|0,l=l|0,V||(V=s,te=l)}function xA(s){s=s|0,Pe=s}function Ha(){return Pe|0}function mc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,rr(17,8104,U|0)|0}function hs(s){s=s|0,pt(s+948|0)}function Ht(s){return s=y(s),((Pu(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Cg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Rm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Bp(l,d,d,s+8|0),vg(s,l),_A(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Ne(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Ne(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||TR[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function ir(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Ne(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||TR[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0;et=C,C=C+64|0,G=et+52|0,k=et+48|0,se=et+28|0,je=et+24|0,Me=et+20|0,Qe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}HA(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=L(s)|0,d>>>0>>0&&Jr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Bp(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,Bp(se,f,f>>>2,n[Qe+16>>2]|0),n[je>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[je>>2],n[G>>2]=n[Me>>2],Dw(se,k,G),f=n[Qe>>2]|0,n[Qe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,_A(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=Dg(s,Qe,l)|0,_A(Qe)}while(0);return C=et,l|0}function Ne(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ue),s=n[s+944>>2]|0}while((s|0)!=0)}function pt(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ht(s){return s=s|0,n[s+944>>2]|0}function Tt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Ne(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function $r(s,l){s=s|0,l=l|0,FUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Ne(s))}function Gi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=Ht(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),Ht(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function bi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function qo(s){return s=s|0,n[s+980>>2]|0}function kA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function QA(s){return s=s|0,n[s+4>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function sg(s){return s=s|0,n[s+8>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function og(s){return s=s|0,n[s+12>>2]|0}function mu(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function FA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function yc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ag(s){return s=s|0,n[s+24>>2]|0}function Ec(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Sm(s){return s=s|0,n[s+28>>2]|0}function lg(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ei(s){return s=s|0,n[s+32>>2]|0}function pp(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function cg(s){return s=s|0,n[s+36>>2]|0}function RA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function yu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function qa(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function ji(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Cc(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function j(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Il(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ue),n[c>>2]=3,Ne(s))}function xi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Ic(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ug(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function hp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ue),n[l>>2]=3,Ne(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ag(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function fg(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ue),n[l>>2]=3,Ne(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function gp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Bc(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function bm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function hg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function gg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function dg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Iu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ew(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function km(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function vc(s){return s=s|0,y(h[s+396>>2])}function Bl(s){return s=s|0,y(h[s+400>>2])}function Bu(s){return s=s|0,y(h[s+404>>2])}function mg(s){return s=s|0,y(h[s+408>>2])}function LA(s){return s=s|0,y(h[s+412>>2])}function dp(s){return s=s|0,y(h[s+416>>2])}function Ga(s){return s=s|0,y(h[s+420>>2])}function yg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function mp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function Go(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ua(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),t3e(f),C=c}function jo(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(bR(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,M,O,G,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),G=y(G),se=se|0;var je=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze;return Q>2]),Me!=y(0))?(et=y(jo(l,Me,0,0)),Xe=y(jo(f,Me,0,0)),Qe=y(jo(m,Me,0,0)),Me=y(jo(k,Me,0,0))):(Qe=m,et=l,Me=k,Xe=f),(d|0)==(s|0)?je=Ii(Qe,et)|0:je=0,(B|0)==(c|0)?se=Ii(Me,Xe)|0:se=0,!je&&(lt=y(l-O),!(yp(s,lt,Q)|0))&&!(Ep(s,lt,d,Q)|0)?je=Eg(s,lt,d,m,Q)|0:je=1,!se&&(Ue=y(f-G),!(yp(c,Ue,M)|0))&&!(Ep(c,Ue,B,M)|0)?se=Eg(c,Ue,B,k,M)|0:se=1,se=je&se),se|0}function yp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function Ep(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function Eg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var G=0,se=0,je=0,Me=0,Qe=Ze,et=Ze,Xe=0,lt=0,Ue=0,Ge=0,Nt=0,Mr=0,ar=0,Xt=0,Pr=0,Lr=0,sr=0,xn=Ze,go=Ze,mo=Ze,yo=0,ya=0;sr=C,C=C+160|0,Xt=sr+152|0,ar=sr+120|0,Mr=sr+104|0,Ue=sr+72|0,Me=sr+56|0,Nt=sr+8|0,lt=sr,Ge=(n[2279]|0)+1|0,n[2279]=Ge,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Lr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Lr=1);e:do if(n[s+964>>2]|0)if(Qe=y(ln(s,2,B)),et=y(ln(s,0,B)),G=s+916|0,mo=y(h[G>>2]),go=y(h[s+920>>2]),xn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,xn,y(h[s+936>>2]),Qe,et,O)|0)Xe=22;else if(je=n[s+520>>2]|0,!je)Xe=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,xn=y(h[G>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,xn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Qe,et,O)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=je>>>0){Xe=21;break}}else{if(Q){if(G=s+916|0,!(Ii(y(h[G>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}G=(n[s+928>>2]|0)==(m|0)?G:0,Xe=22;break}if(je=n[s+520>>2]|0,!je)Xe=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,Ii(y(h[G>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=je>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(G=0,Xe=28):(G=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((G|0)!=0&(Lr^1)))if(se){Xe=28;break}else{Xe=31;break}Me=G+16|0,n[s+908>>2]=n[Me>>2],je=G+20|0,n[s+912>>2]=n[je>>2],(o[11698]|0)==0|se^1||(n[lt>>2]=OA(Ge)|0,n[lt+4>>2]=Ge,Ao(s,4,2972,lt),se=n[s+972>>2]|0,se|0&&tf[se&127](s),d=ja(d,Q)|0,m=ja(m,Q)|0,ya=+y(h[Me>>2]),yo=+y(h[je>>2]),n[Nt>>2]=d,n[Nt+4>>2]=m,E[Nt+8>>3]=+l,E[Nt+16>>3]=+c,E[Nt+24>>3]=ya,E[Nt+32>>3]=yo,n[Nt+40>>2]=M,Ao(s,4,2989,Nt))}while(0);return(Xe|0)==28&&(se=OA(Ge)|0,n[Me>>2]=se,n[Me+4>>2]=Ge,n[Me+8>>2]=Lr?3047:11699,Ao(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Nt=ja(d,Q)|0,Xe=ja(m,Q)|0,n[Ue>>2]=Nt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=M,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Nt=OA(se)|0,n[Mr>>2]=Nt,n[Mr+4>>2]=se,n[Mr+8>>2]=Lr?3047:11699,Ao(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Nt=ja(d,Q)|0,Mr=ja(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[ar>>2]=Nt,n[ar+4>>2]=Mr,E[ar+8>>3]=yo,E[ar+16>>3]=ya,n[ar+24>>2]=M,Ao(s,4,3092,ar)),n[s+516>>2]=f,G||(se=s+520|0,G=n[se>>2]|0,(G|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,G=0),Q?G=s+916|0:(n[se>>2]=G+1,G=s+524+(G*24|0)|0),h[G>>2]=l,h[G+4>>2]=c,n[G+8>>2]=d,n[G+12>>2]=m,n[G+16>>2]=n[s+908>>2],n[G+20>>2]=n[s+912>>2],G=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=sr,Lr|(G|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,wg(f,s,l,c,d),C=m}function OA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function ja(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,G=0,se=0,je=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze,Ge=Ze,Nt=0,Mr=0,ar=0,Xt=Ze,Pr=Ze,Lr=0,sr=Ze,xn=0,go=0,mo=0,yo=0,ya=0,Rp=0,Tp=0,xl=0,Lp=0,Ru=0,Tu=0,Np=0,Op=0,Mp=0,Xr=0,kl=0,Up=0,kc=0,_p=Ze,Hp=Ze,Lu=Ze,Nu=Ze,Qc=Ze,Gs=0,Xa=0,Wo=0,Ql=0,nf=0,sf=Ze,Ou=Ze,of=Ze,af=Ze,js=Ze,vs=Ze,Fl=0,Rn=Ze,lf=Ze,Eo=Ze,Fc=Ze,Co=Ze,Rc=Ze,cf=0,uf=0,Tc=Ze,Ys=Ze,Rl=0,Af=0,ff=0,pf=0,xr=Ze,Vn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Tl=0,Vt=Ze,hf=0,li=0;Tl=C,C=C+16|0,Gs=Tl+12|0,Xa=Tl+8|0,Wo=Tl+4|0,Ql=Tl,Un(s,(d|0)==0|(Ht(l)|0)^1,3326),Un(s,(m|0)==0|(Ht(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Rr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Bg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){jv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),kl=s+508|0,o[kl>>0]=0,Rr=fr(n[s+4>>2]|0,Ds)|0,ur=ww(Rr,Ds)|0,Vn=pe(Rr)|0,Up=n[s+8>>2]|0,Af=s+28|0,kc=(n[Af>>2]|0)!=0,Co=Vn?B:k,Tc=Vn?k:B,_p=y(wp(s,Rr,B)),Hp=y(Iw(s,Rr,B)),Me=y(wp(s,ur,B)),Rc=y(En(s,Rr,B)),Ys=y(En(s,ur,B)),ar=Vn?d:m,Rl=Vn?m:d,xr=Vn?Rc:Ys,lt=Vn?Ys:Rc,Fc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Qe=y(y(jr(s+364|0,B))-xr),et=y(y(jr(s+380|0,B))-xr),Ue=y(y(jr(s+372|0,k))-lt),Ge=y(y(jr(s+388|0,k))-lt),Lu=Vn?Qe:Ue,Nu=Vn?et:Ge,Fc=y(l-Fc),l=y(Fc-xr),Ht(l)|0?xr=l:xr=y(_n(y(Lg(l,et)),Qe)),lf=y(c-Xe),l=y(lf-lt),Ht(l)|0?Eo=l:Eo=y(_n(y(Lg(l,Ge)),Ue)),Qe=Vn?xr:Eo,Rn=Vn?Eo:xr;e:do if((ar|0)==1)for(f=0,G=0;;){if(O=gs(s,G)|0,!f)y(rs(O))>y(0)&&y(qs(O))>y(0)?f=O:f=0;else if(Tm(O)|0){je=0;break e}if(G=G+1|0,G>>>0>=Ws>>>0){je=f;break}}else je=0;while(0);Nt=je+500|0,Mr=je+504|0,f=0,O=0,l=y(0),se=0;do{if(G=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[G+36>>2]|0)==1)vu(G),o[G+985>>0]=1,o[G+984>>0]=0;else{vl(G),Q&&Cp(G,mt(G,Ds)|0,Qe,Rn,xr);do if((n[G+24>>2]|0)!=1)if((G|0)==(je|0)){n[Nt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Lm(s,G,xr,d,Eo,xr,Eo,m,Ds,M);break}else O|0&&(n[O+960>>2]=G),n[G+960>>2]=0,O=G,f=(f|0)==0?G:f;while(0);vs=y(h[G+504>>2]),l=y(l+y(vs+y(ln(G,Rr,xr))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Qe,Fl=kc&((ar|0)==2&mo)?1:ar,xn=(Rl|0)==1,ya=xn&(Q^1),Rp=(Fl|0)==1,Tp=(Fl|0)==2,xl=976+(Rr<<2)|0,Lp=(Rl|2|0)==2,Mp=xn&(kc^1),Ru=1040+(ur<<2)|0,Tu=1040+(Rr<<2)|0,Np=976+(ur<<2)|0,Op=(Rl|0)!=1,mo=kc&((ar|0)!=0&mo),go=s+976|0,xn=xn^1,l=Qe,Lr=0,yo=0,vs=y(0),Qc=y(0);;){e:do if(Lr>>>0>>0)for(Mr=n[wo>>2]|0,se=0,Ge=y(0),Ue=y(0),et=y(0),Qe=y(0),G=0,O=0,je=Lr;;){if(Nt=n[Mr+(je<<2)>>2]|0,(n[Nt+36>>2]|0)!=1&&(n[Nt+940>>2]=yo,(n[Nt+24>>2]|0)!=1)){if(Xe=y(ln(Nt,Rr,xr)),Xr=n[xl>>2]|0,c=y(jr(Nt+380+(Xr<<3)|0,Co)),lt=y(h[Nt+504>>2]),c=y(Lg(c,lt)),c=y(_n(y(jr(Nt+364+(Xr<<3)|0,Co)),c)),kc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=Ge,ar=je;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(Ge+Xe),Tm(Nt)|0&&(et=y(et+y(rs(Nt))),Qe=y(Qe-y(lt*y(qs(Nt))))),O|0&&(n[O+960>>2]=Nt),n[Nt+960>>2]=0,se=se+1|0,O=Nt,G=(G|0)==0?Nt:G}else Xe=Ge,c=Ue;if(je=je+1|0,je>>>0>>0)Ge=Xe,Ue=c;else{m=se,ar=je;break}}else m=0,Xe=y(0),et=y(0),Qe=y(0),G=0,ar=Lr;while(0);Xr=et>y(0)&ety(0)&QeNu&((Ht(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,Ht(l)|0?Xr=53:(Pr=y(l-Xe),sr=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,je=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),O=G;do c=y(jr(O+380+(se<<3)|0,Co)),Qe=y(jr(O+364+(se<<3)|0,Co)),Qe=y(Lg(c,y(_n(Qe,y(h[O+504>>2]))))),je?(c=y(Qe*y(qs(O))),c!=y(-0)&&(Vt=y(Qe-y(lt*c)),sf=y(Bi(O,Rr,Vt,sr,xr)),Vt!=sf)&&(et=y(et-y(sf-Qe)),l=y(l+c))):Nt&&(Ou=y(rs(O)),Ou!=y(0))&&(Vt=y(Qe+y(Ue*Ou)),of=y(Bi(O,Rr,Vt,sr,xr)),Vt!=of)&&(et=y(et-y(of-Qe)),Xe=y(Xe-Ou)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(Ge+l),Qe=y(Pr+et),nf)l=y(0);else{lt=y(Xt+Xe),je=n[xl>>2]|0,Nt=Qey(0),lt=y(Qe/lt),l=y(0);do{Vt=y(jr(G+380+(je<<3)|0,Co)),et=y(jr(G+364+(je<<3)|0,Co)),et=y(Lg(Vt,y(_n(et,y(h[G+504>>2]))))),Nt?(Vt=y(et*y(qs(G))),Qe=y(-Vt),Vt!=y(-0)?(Vt=y(Ue*Qe),Qe=y(Bi(G,Rr,y(et+(Mr?Qe:Vt)),sr,xr))):Qe=et):se&&(af=y(rs(G)),af!=y(0))?Qe=y(Bi(G,Rr,y(et+y(lt*af)),sr,xr)):Qe=et,l=y(l-y(Qe-et)),Xe=y(ln(G,Rr,xr)),c=y(ln(G,ur,xr)),Qe=y(Qe+Xe),h[Xa>>2]=Qe,n[Ql>>2]=1,et=y(h[G+396>>2]);e:do if(Ht(et)|0){O=Ht(Rn)|0;do if(!O){if(mo|(ts(G,ur,Rn)|0|xn)||(ha(s,G)|0)!=4||(n[(Dl(G,ur)|0)+4>>2]|0)==3||(n[(Sc(G,ur)|0)+4>>2]|0)==3)break;h[Gs>>2]=Rn,n[Wo>>2]=1;break e}while(0);if(ts(G,ur,Rn)|0){O=n[G+992+(n[Np>>2]<<2)>>2]|0,Vt=y(c+y(jr(O,Rn))),h[Gs>>2]=Vt,O=Op&(n[O+4>>2]|0)==2,n[Wo>>2]=((Ht(Vt)|0|O)^1)&1;break}else{h[Gs>>2]=Rn,n[Wo>>2]=O?0:2;break}}else Vt=y(Qe-Xe),Xt=y(Vt/et),Vt=y(et*Vt),n[Wo>>2]=1,h[Gs>>2]=y(c+(Vn?Xt:Vt));while(0);yr(G,Rr,sr,xr,Ql,Xa),yr(G,ur,Rn,xr,Wo,Gs);do if(!(ts(G,ur,Rn)|0)&&(ha(s,G)|0)==4){if((n[(Dl(G,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Sc(G,ur)|0)+4>>2]|0)!=3}else O=0;while(0);Vt=y(h[Xa>>2]),Xt=y(h[Gs>>2]),hf=n[Ql>>2]|0,li=n[Wo>>2]|0,fa(G,Vn?Vt:Xt,Vn?Xt:Vt,Ds,Vn?hf:li,Vn?li:hf,xr,Eo,Q&(O^1),3488,M)|0,o[kl>>0]=o[kl>>0]|o[G+508>>0],G=n[G+960>>2]|0}while((G|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[kl>>0],Tp&l>y(0)?(O=n[xl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(js=y(jr(s+364+(O<<3)|0,Co)),js>=y(0))?Qe=y(_n(y(0),y(js-y(sr-l)))):Qe=y(0)):Qe=l,Nt=Lr>>>0>>0,Nt){je=n[wo>>2]|0,se=Lr,O=0;do G=n[je+(se<<2)>>2]|0,n[G+24>>2]|0||(O=((n[(Dl(G,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Sc(G,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(ar|0));O?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Up|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(_n(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(_p+Xe),Nt){et=y(Qe/y(O|0)),se=n[wo>>2]|0,G=Lr,Qe=y(0);do{O=n[se+(G<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;Vt=y(Or(O,Rr,sr)),Vt=y(Vt+y(Cr(s,Rr))),Vt=y(Vt+y(K(O,Rr,xr))),h[O+400+(n[Tu>>2]<<2)>>2]=Vt;break e}break}case 0:if(li=(n[(Dl(O,Rr)|0)+4>>2]|0)==3,Vt=y(et+l),l=li?Vt:l,Q&&(li=O+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Sc(O,Rr)|0)+4>>2]|0)==3,Vt=y(et+l),l=li?Vt:l,ya){Vt=y(c+y(ln(O,Rr,xr))),Qe=Rn,l=y(l+y(Vt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(ns(O,Rr,xr)))),Qe=y(_n(Qe,y(ns(O,ur,xr))));break e}default:}Q&&(Vt=y(Xe+y(Cr(s,Rr))),li=O+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Vt+y(h[li>>2])))}while(0);G=G+1|0}while((G|0)!=(ar|0))}else Qe=y(0);if(c=y(Hp+l),Lp?Xe=y(y(Bi(s,ur,y(Ys+Qe),Tc,B))-Ys):Xe=Rn,et=y(y(Bi(s,ur,y(Ys+(Mp?Rn:Qe)),Tc,B))-Ys),Nt&Q){G=Lr;do{se=n[(n[wo>>2]|0)+(G<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Vt=y(Or(se,ur,Rn)),Vt=y(Vt+y(Cr(s,ur))),Vt=y(Vt+y(K(se,ur,xr))),O=n[Ru>>2]|0,h[se+400+(O<<2)>>2]=Vt,!(Ht(Vt)|0))break}else O=n[Ru>>2]|0;Vt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(Vt+y(K(se,ur,xr)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(Dl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Sc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Rn)|0){l=Me;break}hf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[Gs>>2]=hf,l=y(h[se+396>>2]),li=Ht(l)|0,Qe=(n[v>>2]=hf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,xr)),Vt=y(Qe/l),l=y(l*Qe),l=y(Pr+(Vn?Vt:l))),h[Xa>>2]=l,h[Gs>>2]=y(y(ln(se,Rr,xr))+Qe),n[Wo>>2]=1,n[Ql>>2]=1,yr(se,Rr,sr,xr,Wo,Gs),yr(se,ur,Rn,xr,Ql,Xa),l=y(h[Gs>>2]),Pr=y(h[Xa>>2]),Vt=Vn?l:Pr,l=Vn?Pr:l,li=((Ht(Vt)|0)^1)&1,fa(se,Vt,l,Ds,li,((Ht(l)|0)^1)&1,xr,Eo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,xr)));do if((n[(Dl(se,ur)|0)+4>>2]|0)==3){if((n[(Sc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Sc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(Dl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);Vt=y(vs+l),li=se+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(Vt+y(h[li>>2]))}while(0);G=G+1|0}while((G|0)!=(ar|0))}if(vs=y(vs+et),Qc=y(_n(Qc,c)),m=yo+1|0,ar>>>0>=Ws>>>0)break;l=sr,Lr=ar,yo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(Ht(Rn)|0)){l=y(Rn-vs);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Rn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Rn>vs){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Rn>vs&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Nt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,je=0,G=0;;){e:do if(G>>>0>>0)for(Qe=y(0),et=y(0),l=y(0),se=G;;){O=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(je|0))break e;if(Nm(O,ur)|0&&(Vt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(Vt+y(ln(O,ur,xr)))))),(ha(s,O)|0)!=5)break;js=y(Wa(O)),js=y(js+y(K(O,0,xr))),Vt=y(h[O+912>>2]),Vt=y(y(Vt+y(ln(O,0,xr)))-js),js=y(_n(et,js)),Vt=y(_n(Qe,Vt)),Qe=Vt,et=js,l=y(_n(l,y(js+Vt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=G;while(0);if(lt=y(Ue+l),c=Me,Me=y(Me+lt),G>>>0>>0){Xe=y(c+et),O=G;do{G=n[(n[wo>>2]|0)+(O<<2)>>2]|0;e:do if((n[G+36>>2]|0)!=1&&(n[G+24>>2]|0)==0)switch(ha(s,G)|0){case 1:{Vt=y(c+y(K(G,ur,xr))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 3:{Vt=y(y(Me-y(re(G,ur,xr)))-y(h[G+908+(n[Mr>>2]<<2)>>2])),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 2:{Vt=y(c+y(y(lt-y(h[G+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 4:{if(Vt=y(c+y(K(G,ur,xr))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt,ts(G,ur,Rn)|0||(Vn?(Qe=y(h[G+908>>2]),l=y(Qe+y(ln(G,Rr,xr))),et=lt):(et=y(h[G+912>>2]),et=y(et+y(ln(G,ur,xr))),l=lt,Qe=y(h[G+908>>2])),Ii(l,Qe)|0&&Ii(et,y(h[G+912>>2]))|0))break e;fa(G,l,et,Ds,1,1,xr,Eo,1,3501,M)|0;break e}case 5:{h[G+404>>2]=y(y(Xe-y(Wa(G)))+y(Or(G,0,Rn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(je=je+1|0,(je|0)==(m|0))break;G=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Fc,B,B)),h[s+912>>2]=y(Bi(s,0,lf,k,B)),(Fl|0)!=0&&(cf=n[s+32>>2]|0,uf=(Fl|0)==2,!(uf&(cf|0)!=2))?uf&(cf|0)==2&&(l=y(Rc+sr),l=y(_n(y(Lg(l,y(MA(s,Rr,Qc,Co)))),Rc)),Xr=198):(l=y(Bi(s,Rr,Qc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Rl|0)!=0&&(ff=n[s+32>>2]|0,pf=(Rl|0)==2,!(pf&(ff|0)!=2))?pf&(ff|0)==2&&(l=y(Ys+Rn),l=y(_n(y(Lg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[Af>>2]|0)==2){G=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do je=gs(s,O)|0,n[je+24>>2]|0||(hf=n[G>>2]|0,Vt=y(h[s+908+(hf<<2)>>2]),li=je+400+(n[se>>2]<<2)|0,Vt=y(Vt-y(h[li>>2])),h[li>>2]=y(Vt-y(h[je+908+(hf<<2)>>2]))),O=O+1|0;while((O|0)!=(Ws|0))}if(f|0){O=Vn?Fl:d;do Om(s,f,xr,O,Eo,Ds,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,G=(ur|2|0)==3,O|G){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&Ip(s,se,Rr),G&&Ip(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,vl(s),ts(s,2,l)|0?(d=y(jr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(jr(s+380|0,l)),d>=y(0)?Q=2:(Q=((Ht(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(jr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(jr(s+388|0,c)),m>=y(0)?k=2:(k=((Ht(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(Cp(s,n[s+496>>2]|0,l,c,l),Pc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&Qm(s,7)}function vl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ue)}return y(l)}function Cp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=ww(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Pc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,M=0,O=Ze,G=0,se=Ze,je=Ze,Me=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),G=s+416|0,je=y(h[G>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Qe+c),O=y(Me+f),f=y(se+je),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(jo(Qe,l,0,Q)),h[m>>2]=y(jo(Me,l,0,Q)),c=y(bR(y(je*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(bR(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Qe=y(jo(f,l,Q&m,Q&(m^1))),h[G>>2]=y(Qe-y(jo(se,l,0,Q))),Qe=y(jo(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Qe-y(jo(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Pc(gs(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function Cw(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=i7(n[489]|0,f,d)|0;break}default:s=XUe(f,d)|0}return s|0}function Cg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,wg(s,0,l,c,m),C=d}function wg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,D7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Rt();else return}function Ya(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Rm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Ig(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Ig(s,l){s=s|0,l=l|0;var c=0;if((L(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function L(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Je(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Je(s,c))}function pe(s){return s=s|0,(s|1|0)==3|0}function Je(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(jr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(jr(s+236|0,c)),f>=y(0))||(f=y(_n(y(jr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(jr(s+244|0,c)),f>=y(0))||(f=y(_n(y(jr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Bg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze,G=Ze,se=Ze,je=0,Me=0,Qe=0;Qe=C,C=C+16|0,je=Qe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(ln(s,2,l)),O=y(ln(s,0,l)),Ht(l)|0?G=l:G=y(_n(y(0),y(y(l-M)-k))),Ht(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(P7[n[Me>>2]&1](je,s,G,f,se,d),G=y(k+y(h[je>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?G:se,m,m)),se=y(Q+y(h[je+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Qe}function jv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),M=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function ww(s,l){return s=s|0,l=l|0,UA(s)|0?s=fr(2,l)|0:s=0,s|0}function wp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function Iw(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(wp(s,l,c)),y(f+y(Iw(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(qs(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),Ht(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((Ht(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function qs(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),Ht(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function vu(s){s=s|0;var l=0,c=0;if(Xm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do vu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Lm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,G=Ze,se=0,je=0,Me=Ze,Qe=Ze,et=0,Xe=Ze,lt=0,Ue=Ze,Ge=0,Nt=0,Mr=0,ar=0,Xt=0,Pr=0,Lr=0,sr=0,xn=0,go=0;xn=C,C=C+16|0,Mr=xn+12|0,ar=xn+8|0,Xt=xn+4|0,Pr=xn,sr=fr(n[s+4>>2]|0,Q)|0,Ge=pe(sr)|0,G=y(jr(Bw(l)|0,Ge?m:B)),Nt=ts(l,2,m)|0,Lr=ts(l,0,B)|0;do if(!(Ht(G)|0)&&!(Ht(Ge?c:d)|0)){if(O=l+504|0,!(Ht(y(h[O>>2]))|0)&&(!(vw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(G,y(En(l,sr,m))))}else se=7;while(0);do if((se|0)==7){if(lt=Ge^1,!(lt|Nt^1)){B=y(jr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(Ge|Lr^1)){B=y(jr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ue),h[ar>>2]=y(ue),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Nt?(Me=y(Xe+y(jr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,je=1):(je=0,Me=y(ue)),Lr?(G=y(Ue+y(jr(n[l+996>>2]|0,B))),h[ar>>2]=G,n[Pr>>2]=1,O=1):(O=0,G=y(ue)),se=n[s+32>>2]|0,Ge&(se|0)==2?se=2:Ht(Me)|0&&!(Ht(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,je=2,Me=c),!((se|0)==2<)&&Ht(G)|0&&!(Ht(d)|0)&&(h[ar>>2]=d,n[Pr>>2]=2,O=2,G=d),Qe=y(h[l+396>>2]),et=Ht(Qe)|0;do if(et)se=je;else{if((je|0)==1<){h[ar>>2]=y(y(Me-Xe)/Qe),n[Pr>>2]=1,O=1,se=1;break}Ge&(O|0)==1?(h[Mr>>2]=y(Qe*y(G-Ue)),n[Xt>>2]=1,O=1,se=1):se=je}while(0);go=Ht(c)|0,je=(ha(s,l)|0)!=4,!(Ge|Nt|((f|0)!=1|go)|(je|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[ar>>2]=y(y(c-Xe)/Qe),n[Pr>>2]=1,O=1),!(Lr|lt|((k|0)!=1|(Ht(d)|0))|(je|(O|0)==1))&&(h[ar>>2]=d,n[Pr>>2]=1,!et)&&(h[Mr>>2]=y(Qe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Pr,ar),c=y(h[Mr>>2]),d=y(h[ar>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(sr<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,sr,m))))}while(0);n[l+500>>2]=n[2278],C=xn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&UA(n[s+4>>2]|0)|0&&(l=1),l|0}function Dl(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Sc(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(jr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=Ht(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(jr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(UA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((Ht(c)|0)^1)|0}function Wa(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(w7[c&0](s,Q,l)),Un(s,(Ht(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Wa(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return UA(l)|0?(l=1,m=3):pe(l)|0?(l=0,m=3):(f=y(ue),d=y(ue)),(m|0)==3&&(d=y(jr(s+364+(l<<3)|0,f)),f=y(jr(s+380+(l<<3)|0,f))),m=f=y(0)&((Ht(f)|0)^1)),c=m?f:c,m=d>=y(0)&((Ht(d)|0)^1)&c>2]|0,m)|0,Me=ww(et,m)|0,Qe=pe(et)|0,G=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(G+y(jr(n[l+992>>2]|0,c))):gi(l,2)|0&&or(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(Du(l,2,c)))),c,c))):k=y(ue),ts(l,0,d)|0?Q=y(se+y(jr(n[l+996>>2]|0,d))):gi(l,0)|0&&or(l,0)|0?(Q=y(h[s+912>>2]),lt=y(Cr(s,0)),lt=y(Q-y(lt+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(lt-y(Q+y(Du(l,0,d)))),d,c))):Q=y(ue),M=Ht(k)|0,O=Ht(Q)|0;do if(M^O&&(je=y(h[l+396>>2]),!(Ht(je)|0)))if(M){k=y(G+y(y(Q-se)*je));break}else{lt=y(se+y(y(k-G)/je)),Q=O?lt:Q;break}while(0);O=Ht(k)|0,M=Ht(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,fa(l,k,Q,m,Qe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,or(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,et))),lt=y(lt-y(re(l,et,c))),lt=y(lt-y(Du(l,et,Qe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt)}while(0);or(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,Me))),lt=y(lt-y(re(l,Me,c))),lt=y(lt-y(Du(l,Me,Qe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt):Xe=30;do if((Xe|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt)}while(0)}function Ip(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function UA(s){return s=s|0,(s|1|0)==1|0}function Bw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((Ht(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function vw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function or(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Du(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(jr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(Du(s,l,c))),y(c)}function Pu(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Bp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function vg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _A(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HA(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function Dw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Um(){mc()}function ga(){var s=0;return s=Kt(4)|0,qA(s),s|0}function qA(s){s=s|0,n[s>>2]=ys()|0}function bc(s){s=s|0,s|0&&(Pg(s),gt(s))}function Pg(s){s=s|0,tt(n[s>>2]|0)}function _m(s,l,c){s=s|0,l=l|0,c=c|0,Ya(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,vw(n[s>>2]|0,l)|0}function Pw(){var s=0;return s=Kt(8)|0,Kv(s,0),s|0}function Kv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,bi(l,s)}function AF(s){s=s|0;var l=0;return l=Kt(8)|0,Kv(l,s),l|0}function zv(s){s=s|0,s|0&&(Su(s),gt(s))}function Su(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(GA(s),gt(s))}function GA(s){s=s|0,jA(s)}function jA(s){s=s|0,s=n[s>>2]|0,s|0&&SA(s|0)}function Sw(s){return s=s|0,qo(s)|0}function Hm(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),_s(n[s>>2]|0)}function fF(s,l){s=s|0,l=l|0,$r(n[s>>2]|0,n[l>>2]|0)}function pF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Vv(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function Jv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function bw(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function bu(s,l){s=s|0,l=l|0,mu(n[s>>2]|0,l)}function hF(s,l){s=s|0,l=l|0,FA(n[s>>2]|0,l)}function gF(s,l){s=s|0,l=l|0,kA(n[s>>2]|0,l)}function vp(s,l){s=s|0,l=l|0,Ec(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function YA(s,l,c){s=s|0,l=l|0,c=+c,j(n[s>>2]|0,l,y(c))}function mF(s,l){s=s|0,l=l|0,Il(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,lg(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,pp(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,RA(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,qa(n[s>>2]|0,y(l))}function EF(s,l){s=s|0,l=+l,ji(n[s>>2]|0,y(l))}function CF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Pl(s,l){s=s|0,l=+l,yu(n[s>>2]|0,y(l))}function Qw(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function WA(s){s=s|0,hp(n[s>>2]|0)}function qm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,Ag(n[s>>2]|0,y(l))}function Fw(s){s=s|0,fg(n[s>>2]|0)}function Rw(s,l){s=s|0,l=+l,gp(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Bc(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,bm(n[s>>2]|0,y(l))}function KA(s,l){s=s|0,l=+l,hg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function Gm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,Iu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,Ew(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Cu(n[s>>2]|0,l,y(c))}function BF(s,l,c){s=s|0,l=l|0,c=+c,xi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,Ic(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,ag(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Cc(d,n[l>>2]|0,c),q(s,d),C=f}function q(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Ae(s){return s=s|0,og(n[s>>2]|0)|0}function De(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,yc(n[s>>2]|0)|0}function wt(s){return s=s|0,QA(n[s>>2]|0)|0}function xt(s){return s=s|0,Sm(n[s>>2]|0)|0}function _r(s){return s=s|0,sg(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),q(s,d),C=f}function di(s){return s=s|0,ei(n[s>>2]|0)|0}function po(s){return s=s|0,cg(n[s>>2]|0)|0}function zA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),q(s,f),C=c}function Yo(s){return s=s|0,+ +y(Gi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function ze(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),q(s,f),C=c}function ft(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),q(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),q(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,gg(f,n[l>>2]|0),q(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,dg(f,n[l>>2]|0),q(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,km(f,n[l>>2]|0),q(s,f),C=c}function bn(s){return s=s|0,+ +y(vc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(ug(n[s>>2]|0,l))}function tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),q(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,ir(n[s>>2]|0,n[l>>2]|0,c)}function vF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function tve(s){return s=s|0,wi(n[s>>2]|0)|0}function rve(s){return s=s|0,s=ht(n[s>>2]|0)|0,s?s=Sw(s)|0:s=0,s|0}function nve(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Sw(s)|0:s=0,s|0}function ive(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,Jj(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,1)}function Jj(s,l){s=s|0,l=l|0,dve(s,l)}function sve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,ove(k,qo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function ove(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[Q>>3]=d,n[k>>2]=m,ave(s,n[l+4>>2]|0,O,M,Q,k),C=B}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,za(k),l=da(l)|0,lve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Va(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function lve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Sl(cve()|0)|0,c=+VA(c),f=DF(f)|0,d=+VA(d),uve(s,hi(0,B|0,l|0,+c,f|0,+d,DF(m)|0)|0)}function cve(){var s=0;return o[7608]|0||(hve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Sl(s){return s=s|0,n[s+8>>2]|0}function VA(s){return s=+s,+ +PF(s)}function DF(s){return s=s|0,Zj(s)|0}function uve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(Ave(c,0),ii(f|0,c|0)|0,fve(s,c),pve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function Ave(s,l){s=s|0,l=l|0,Xj(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function fve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function pve(s){s=s|0,o[s+24>>0]=0}function Xj(s,l){s=s|0,l=l|0,n[s>>2]=l}function Zj(s){return s=s|0,s|0}function PF(s){return s=+s,+s}function hve(s){s=s|0,bl(s,gve()|0,4)}function gve(){return 1064}function bl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=Ap(l|0,c+1|0)|0}function dve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,El(l|0)}function mve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,0)}function yve(s){s=s|0,Tt(n[s>>2]|0)}function Eve(s){return s=s|0,er(n[s>>2]|0)|0}function Cve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,Dc(n[s>>2]|0,y(l),y(c),f)}function wve(s){return s=s|0,+ +y(Bl(n[s>>2]|0))}function Ive(s){return s=s|0,+ +y(mg(n[s>>2]|0))}function Bve(s){return s=s|0,+ +y(Bu(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(LA(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(dp(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(Ga(n[s>>2]|0))}function Sve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Bl(n[l>>2]|0)),E[s+8>>3]=+y(mg(n[l>>2]|0)),E[s+16>>3]=+y(Bu(n[l>>2]|0)),E[s+24>>3]=+y(LA(n[l>>2]|0)),E[s+32>>3]=+y(dp(n[l>>2]|0)),E[s+40>>3]=+y(Ga(n[l>>2]|0))}function bve(s,l){return s=s|0,l=l|0,+ +y(yg(n[s>>2]|0,l))}function xve(s,l){return s=s|0,l=l|0,+ +y(mp(n[s>>2]|0,l))}function kve(s,l){return s=s|0,l=l|0,+ +y(Go(n[s>>2]|0,l))}function Qve(){return Pn()|0}function Fve(){Rve(),Tve(),Lve(),Nve(),Ove(),Mve()}function Rve(){OLe(11713,4938,1)}function Tve(){rLe(10448)}function Lve(){OTe(10408)}function Nve(){oTe(10324)}function Ove(){hFe(10096)}function Mve(){Uve(9132)}function Uve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Nt=0,Mr=0,ar=0,Xt=0,Pr=0,Lr=0,sr=0,xn=0,go=0,mo=0,yo=0,ya=0,Rp=0,Tp=0,xl=0,Lp=0,Ru=0,Tu=0,Np=0,Op=0,Mp=0,Xr=0,kl=0,Up=0,kc=0,_p=0,Hp=0,Lu=0,Nu=0,Qc=0,Gs=0,Xa=0,Wo=0,Ql=0,nf=0,sf=0,Ou=0,of=0,af=0,js=0,vs=0,Fl=0,Rn=0,lf=0,Eo=0,Fc=0,Co=0,Rc=0,cf=0,uf=0,Tc=0,Ys=0,Rl=0,Af=0,ff=0,pf=0,xr=0,Vn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Rr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Vn=l+600|0,xr=l+592|0,pf=l+584|0,ff=l+576|0,Af=l+568|0,Rl=l+560|0,Ys=l+552|0,Tc=l+544|0,uf=l+536|0,cf=l+528|0,Rc=l+520|0,Co=l+512|0,Fc=l+504|0,Eo=l+496|0,lf=l+488|0,Rn=l+480|0,Fl=l+472|0,vs=l+464|0,js=l+456|0,af=l+448|0,of=l+440|0,Ou=l+432|0,sf=l+424|0,nf=l+416|0,Ql=l+408|0,Wo=l+400|0,Xa=l+392|0,Gs=l+384|0,Qc=l+376|0,Nu=l+368|0,Lu=l+360|0,Hp=l+352|0,_p=l+344|0,kc=l+336|0,Up=l+328|0,kl=l+320|0,Xr=l+312|0,Mp=l+304|0,Op=l+296|0,Np=l+288|0,Tu=l+280|0,Ru=l+272|0,Lp=l+264|0,xl=l+256|0,Tp=l+248|0,Rp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,xn=l+200|0,sr=l+192|0,Lr=l+184|0,Pr=l+176|0,Xt=l+168|0,ar=l+160|0,Mr=l+152|0,Nt=l+144|0,Ge=l+136|0,Ue=l+128|0,lt=l+120|0,Xe=l+112|0,et=l+104|0,Qe=l+96|0,Me=l+88|0,je=l+80|0,se=l+72|0,G=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,_ve(s,3646),Hve(s,3651,2)|0,qve(s,3665,2)|0,Gve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],jve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],ku(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Sg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Sg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],ku(s,3753,c)|0,n[Vn>>2]=4,n[Vn+4>>2]=0,n[c>>2]=n[Vn>>2],n[c+4>>2]=n[Vn+4>>2],ku(s,3769,c)|0,n[xr>>2]=5,n[xr+4>>2]=0,n[c>>2]=n[xr>>2],n[c+4>>2]=n[xr+4>>2],ku(s,3783,c)|0,n[pf>>2]=6,n[pf+4>>2]=0,n[c>>2]=n[pf>>2],n[c+4>>2]=n[pf+4>>2],ku(s,3796,c)|0,n[ff>>2]=7,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],ku(s,3813,c)|0,n[Af>>2]=8,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],ku(s,3825,c)|0,n[Rl>>2]=3,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],Sg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Sg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],ku(s,3870,c)|0,n[uf>>2]=10,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],ku(s,3884,c)|0,n[cf>>2]=11,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],ku(s,3896,c)|0,n[Rc>>2]=1,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Fc>>2]=3,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[lf>>2]=5,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],Is(s,3960,c)|0,n[Rn>>2]=6,n[Rn+4>>2]=0,n[c>>2]=n[Rn>>2],n[c+4>>2]=n[Rn+4>>2],Is(s,3974,c)|0,n[Fl>>2]=7,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[js>>2]=8,n[js+4>>2]=0,n[c>>2]=n[js>>2],n[c+4>>2]=n[js+4>>2],Is(s,4012,c)|0,n[af>>2]=9,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,4022,c)|0,n[of>>2]=21,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Tw(s,4039,c)|0,n[Ou>>2]=10,n[Ou+4>>2]=0,n[c>>2]=n[Ou>>2],n[c+4>>2]=n[Ou+4>>2],Is(s,4053,c)|0,n[sf>>2]=11,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Is(s,4065,c)|0,n[nf>>2]=12,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4084,c)|0,n[Ql>>2]=13,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[Xa>>2]=15,n[Xa+4>>2]=0,n[c>>2]=n[Xa>>2],n[c+4>>2]=n[Xa+4>>2],Is(s,4129,c)|0,n[Gs>>2]=16,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4148,c)|0,n[Qc>>2]=17,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Lu>>2]=5,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Sg(s,4196,c)|0,n[Hp>>2]=6,n[Hp+4>>2]=0,n[c>>2]=n[Hp>>2],n[c+4>>2]=n[Hp+4>>2],Sg(s,4206,c)|0,n[_p>>2]=7,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Sg(s,4217,c)|0,n[kc>>2]=3,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],JA(s,4235,c)|0,n[Up>>2]=1,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],SF(s,4251,c)|0,n[kl>>2]=4,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Mp>>2]=6,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],JA(s,4293,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],JA(s,4306,c)|0,n[Np>>2]=8,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Ru>>2]=2,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],SF(s,4353,c)|0,n[Lp>>2]=12,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],bg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],XA(s,4376,c)|0,n[Tp>>2]=2,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],XA(s,4388,c)|0,n[Rp>>2]=13,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],bg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],bg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],bg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],bg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],bg(s,4446,c)|0,n[xn>>2]=18,n[xn+4>>2]=0,n[c>>2]=n[xn>>2],n[c+4>>2]=n[xn+4>>2],bg(s,4458,c)|0,n[sr>>2]=3,n[sr+4>>2]=0,n[c>>2]=n[sr>>2],n[c+4>>2]=n[sr+4>>2],XA(s,4471,c)|0,n[Lr>>2]=1,n[Lr+4>>2]=0,n[c>>2]=n[Lr>>2],n[c+4>>2]=n[Lr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[ar>>2]=3,n[ar+4>>2]=0,n[c>>2]=n[ar>>2],n[c+4>>2]=n[ar+4>>2],SF(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],Yve(s,4530,c)|0,n[Nt>>2]=19,n[Nt+4>>2]=0,n[c>>2]=n[Nt>>2],n[c+4>>2]=n[Nt+4>>2],Wve(s,4542,c)|0,n[Ge>>2]=12,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Kve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],zve(s,4568,c)|0,n[lt>>2]=2,n[lt+4>>2]=0,n[c>>2]=n[lt>>2],n[c+4>>2]=n[lt+4>>2],Vve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],Jve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],Tw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],Xve(s,4629,c)|0,n[je>>2]=1,n[je+4>>2]=0,n[c>>2]=n[je>>2],n[c+4>>2]=n[je+4>>2],Zve(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],XA(s,4653,c)|0,n[G>>2]=5,n[G+4>>2]=0,n[c>>2]=n[G>>2],n[c+4>>2]=n[G+4>>2],XA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],XA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],XA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],XA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],XA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],$ve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function _ve(s,l){s=s|0,l=l|0;var c=0;c=sFe()|0,n[s>>2]=c,oFe(c,l),kp(n[s>>2]|0)}function Hve(s,l,c){return s=s|0,l=l|0,c=c|0,YQe(s,pn(l)|0,c,0),s|0}function qve(s,l,c){return s=s|0,l=l|0,c=c|0,xQe(s,pn(l)|0,c,0),s|0}function Gve(s,l,c){return s=s|0,l=l|0,c=c|0,gQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(s,l,d),C=f,s|0}function jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tke(s,l,d),C=f,s|0}function ku(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yke(s,l,d),C=f,s|0}function Sg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_xe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,l,d),C=f,s|0}function SF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,l,d),C=f,s|0}function bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tbe(s,l,d),C=f,s|0}function XA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ybe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rbe(s,l,d),C=f,s|0}function Yve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Se(s,l,d),C=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vSe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],zPe(s,l,d),C=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QPe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hPe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZDe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TDe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eDe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],tDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function tDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=bF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=rDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,nDe(m,f)|0,f),C=d}function bF(){var s=0,l=0;if(o[7616]|0||(t9(9136),rr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t9(9136)}return 9136}function rDe(s){return s=s|0,0}function nDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=bF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],e9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0;B=C,C=C+32|0,se=B+24|0,G=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,je=B,n[G>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[je>>2]=n[m>>2],n[se>>2]=n[je>>2],iDe(s+24|0,se,G,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function iDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=sDe(l)|0,l=Kt(24)|0,$j(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function sDe(s){return s=s|0,n[s>>2]|0}function $j(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function e9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lDe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],e9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cDe(s,k),uDe(k),C=M;return}}function aDe(s){return s=s|0,357913941}function lDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function t9(s){s=s|0,pDe(s)}function ADe(s){s=s|0,fDe(s+24|0)}function Tr(s){return s=s|0,n[s>>2]|0}function fDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pDe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,3,l,hDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Kr(){return 9228}function hDe(){return 1140}function gDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mDe(l,f)|0,C=c,l|0}function zr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function dDe(s){return s=s|0,(n[(bF()|0)+24>>2]|0)+(s*12|0)|0}function mDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=yDe(f)|0,C=d,f|0}function yDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(r9()|0)|0,f?(kF(l,f),QF(c,l),EDe(s,c),s=FF(l)|0):s=CDe(s)|0,C=d,s|0}function r9(){var s=0;return o[7632]|0||(kDe(9184),rr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function xF(s){return s=s|0,n[s+36>>2]|0}function kF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function QF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function EDe(s,l){s=s|0,l=l|0,vDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function CDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Ka(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],n9(k,B,c),n[d>>2]=k,C=Q,m|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function wDe(s){s=s|0,Jm(s),gt(s)}function IDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function BDe(s){s=s|0,gt(s)}function vDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=DDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function DDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,za(Q),s=da(s)|0,B=PDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Va(Q),C=k,B|0}function PDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Sl(SDe()|0)|0,l=+VA(l),c=+VA(c),f=+VA(f),d=+VA(d),m=+VA(m),Ms(0,k|0,s|0,+l,+c,+f,+d,+m,+ +VA(B))|0}function SDe(){var s=0;return o[7624]|0||(bDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function bDe(s){s=s|0,bl(s,xDe()|0,6)}function xDe(){return 1112}function kDe(s){s=s|0,Dp(s)}function QDe(s){s=s|0,i9(s+24|0),s9(s+16|0)}function i9(s){s=s|0,RDe(s)}function s9(s){s=s|0,FDe(s)}function FDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function RDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Dp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function TDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],LDe(s,c,d,0),C=f}function LDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=RF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=NDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ODe(m,f)|0,f),C=d}function RF(){var s=0,l=0;if(o[7640]|0||(a9(9232),rr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(9232)}return 9232}function NDe(s){return s=s|0,0}function ODe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=RF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(MDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function MDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=UDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_De(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,HDe(s,k),qDe(k),C=M;return}}function UDe(s){return s=s|0,357913941}function _De(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,YDe(s)}function GDe(s){s=s|0,jDe(s+24|0)}function jDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function YDe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,1,l,WDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WDe(){return 1144}function KDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=zDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],VDe(l,B,c,f,d),C=m}function zDe(s){return s=s|0,(n[(RF()|0)+24>>2]|0)+(s*12|0)|0}function VDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),Qu(B,c),c=+Fu(B,c),Qu(k,f),f=+Fu(k,f),ZA(Q,d),Q=$A(Q,d)|0,I7[m&1](s,c,f,Q),C=M}function Qu(s,l){s=s|0,l=+l}function Fu(s,l){return s=s|0,l=+l,+ +XDe(l)}function ZA(s,l){s=s|0,l=l|0}function $A(s,l){return s=s|0,l=l|0,JDe(l)|0}function JDe(s){return s=s|0,s|0}function XDe(s){return s=+s,+s}function ZDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],$De(s,c,d,1),C=f}function $De(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ePe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tPe(m,f)|0,f),C=d}function TF(){var s=0,l=0;if(o[7648]|0||(c9(9268),rr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(9268)}return 9268}function ePe(s){return s=s|0,0}function tPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=TF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,iPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sPe(s,k),oPe(k),C=M;return}}function nPe(s){return s=s|0,357913941}function iPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,cPe(s)}function aPe(s){s=s|0,lPe(s+24|0)}function lPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cPe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,4,l,uPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uPe(){return 1160}function APe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=fPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=pPe(l,f)|0,C=c,l|0}function fPe(s){return s=s|0,(n[(TF()|0)+24>>2]|0)+(s*12|0)|0}function pPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),u9(Og[c&31](s)|0)|0}function u9(s){return s=s|0,s&1|0}function hPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],gPe(s,c,d,0),C=f}function gPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=dPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,mPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7656]|0||(f9(9304),rr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(9304)}return 9304}function dPe(s){return s=s|0,0}function mPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=LF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(yPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=EPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,CPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,wPe(s,k),IPe(k),C=M;return}}function EPe(s){return s=s|0,357913941}function CPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function IPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,DPe(s)}function BPe(s){s=s|0,vPe(s+24|0)}function vPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function DPe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,5,l,PPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function PPe(){return 1164}function SPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=bPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xPe(l,d,c),C=f}function bPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function xPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Pp(d,c),c=Sp(d,c)|0,rf[f&31](s,c),bp(d),C=m}function Pp(s,l){s=s|0,l=l|0,kPe(s,l)}function Sp(s,l){return s=s|0,l=l|0,s|0}function bp(s){s=s|0,GA(s)}function kPe(s,l){s=s|0,l=l|0,NF(s,l)}function NF(s,l){s=s|0,l=l|0,n[s>>2]=l}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],FPe(s,c,d,0),C=f}function FPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=OF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=RPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,TPe(m,f)|0,f),C=d}function OF(){var s=0,l=0;if(o[7664]|0||(h9(9340),rr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(9340)}return 9340}function RPe(s){return s=s|0,0}function TPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=OF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(LPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function LPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=NPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,OPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,MPe(s,k),UPe(k),C=M;return}}function NPe(s){return s=s|0,357913941}function OPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function MPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,qPe(s)}function _Pe(s){s=s|0,HPe(s+24|0)}function HPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function qPe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,4,l,GPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GPe(){return 1180}function jPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=YPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=WPe(l,d,c)|0,C=f,c|0}function YPe(s){return s=s|0,(n[(OF()|0)+24>>2]|0)+(s*12|0)|0}function WPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),xg(d,c),d=kg(d,c)|0,d=sD(RR[f&15](s,d)|0)|0,C=m,d|0}function xg(s,l){s=s|0,l=l|0}function kg(s,l){return s=s|0,l=l|0,KPe(l)|0}function sD(s){return s=s|0,s|0}function KPe(s){return s=s|0,s|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VPe(s,c,d,0),C=f}function VPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=JPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,XPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7672]|0||(d9(9376),rr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d9(9376)}return 9376}function JPe(s){return s=s|0,0}function XPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=MF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ZPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=$Pe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,eSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,tSe(s,k),rSe(k),C=M;return}}function $Pe(s){return s=s|0,357913941}function eSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d9(s){s=s|0,sSe(s)}function nSe(s){s=s|0,iSe(s+24|0)}function iSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function sSe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,5,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m9(){return 1196}function oSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=aSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=lSe(l,f)|0,C=c,l|0}function aSe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function lSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Og[c&31](s)|0)|0}function cSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],uSe(s,c,d,1),C=f}function uSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ASe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,fSe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7680]|0||(E9(9412),rr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E9(9412)}return 9412}function ASe(s){return s=s|0,0}function fSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=UF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(pSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=hSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,gSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,dSe(s,k),mSe(k),C=M;return}}function hSe(s){return s=s|0,357913941}function gSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function mSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E9(s){s=s|0,CSe(s)}function ySe(s){s=s|0,ESe(s+24|0)}function ESe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function CSe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,6,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C9(){return 1200}function wSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ISe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=BSe(l,f)|0,C=c,l|0}function ISe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function BSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Og[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function vSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],DSe(s,c,d,0),C=f}function DSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=PSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,SSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7688]|0||(I9(9448),rr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I9(9448)}return 9448}function PSe(s){return s=s|0,0}function SSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=_F()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=xSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,kSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,QSe(s,k),FSe(k),C=M;return}}function xSe(s){return s=s|0,357913941}function kSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I9(s){s=s|0,LSe(s)}function RSe(s){s=s|0,TSe(s+24|0)}function TSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LSe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,6,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B9(){return 1204}function NSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=OSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],MSe(l,d,c),C=f}function OSe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function MSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),HF(d,c),d=qF(d,c)|0,rf[f&31](s,d),C=m}function HF(s,l){s=s|0,l=l|0}function qF(s,l){return s=s|0,l=l|0,USe(l)|0}function USe(s){return s=s|0,s|0}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],HSe(s,c,d,0),C=f}function HSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=GF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=qSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GSe(m,f)|0,f),C=d}function GF(){var s=0,l=0;if(o[7696]|0||(D9(9484),rr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D9(9484)}return 9484}function qSe(s){return s=s|0,0}function GSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=GF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=YSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,WSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KSe(s,k),zSe(k),C=M;return}}function YSe(s){return s=s|0,357913941}function WSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function zSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D9(s){s=s|0,XSe(s)}function VSe(s){s=s|0,JSe(s+24|0)}function JSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function XSe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,1,l,ZSe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ZSe(){return 1212}function $Se(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ebe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],tbe(l,m,c,f),C=d}function ebe(s){return s=s|0,(n[(GF()|0)+24>>2]|0)+(s*12|0)|0}function tbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),HF(m,c),m=qF(m,c)|0,xg(B,f),B=kg(B,f)|0,Hw[d&15](s,m,B),C=k}function rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nbe(s,c,d,1),C=f}function nbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ibe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sbe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7704]|0||(S9(9520),rr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));S9(9520)}return 9520}function ibe(s){return s=s|0,0}function sbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=jF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],P9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(obe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function P9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=abe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lbe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],P9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cbe(s,k),ube(k),C=M;return}}function abe(s){return s=s|0,357913941}function lbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ube(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function S9(s){s=s|0,pbe(s)}function Abe(s){s=s|0,fbe(s+24|0)}function fbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pbe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,1,l,hbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hbe(){return 1224}function gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=dbe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+mbe(l,m,c),C=d,+f}function dbe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,B=+PF(+v7[f&7](s,d)),C=m,+B}function ybe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Ebe(s,c,d,1),C=f}function Ebe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Cbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wbe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7712]|0||(x9(9556),rr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x9(9556)}return 9556}function Cbe(s){return s=s|0,0}function wbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=YF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Ibe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function b9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Ibe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Bbe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,vbe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Dbe(s,k),Pbe(k),C=M;return}}function Bbe(s){return s=s|0,357913941}function vbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Dbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Pbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x9(s){s=s|0,xbe(s)}function Sbe(s){s=s|0,bbe(s+24|0)}function bbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function xbe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,5,l,kbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kbe(){return 1232}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Fbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Rbe(l,d),C=f,+c}function Fbe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function Rbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +PF(+B7[c&15](s))}function Tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Lbe(s,c,d,1),C=f}function Lbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Obe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7720]|0||(Q9(9592),rr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q9(9592)}return 9592}function Nbe(s){return s=s|0,0}function Obe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=WF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Mbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ube(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_be(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Hbe(s,k),qbe(k),C=M;return}}function Ube(s){return s=s|0,357913941}function _be(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q9(s){s=s|0,Ybe(s)}function Gbe(s){s=s|0,jbe(s+24|0)}function jbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ybe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,7,l,Wbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Wbe(){return 1276}function Kbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=zbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Vbe(l,f)|0,C=c,l|0}function zbe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=F9(f)|0,C=d,f|0}function F9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(R9()|0)|0,f?(kF(l,f),QF(c,l),Jbe(s,c),s=FF(l)|0):s=Xbe(s)|0,C=d,s|0}function R9(){var s=0;return o[7736]|0||(axe(9640),rr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Jbe(s,l){s=s|0,l=l|0,txe(l,s,s+8|0)|0}function Xbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(s,m,d),n[f>>2]=s,C=c,l|0}function KF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function Zbe(s){s=s|0,Jm(s),gt(s)}function $be(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function exe(s){s=s|0,gt(s)}function txe(s,l,c){return s=s|0,l=l|0,c=c|0,l=rxe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function rxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,za(d),s=da(s)|0,c=nxe(s,n[l>>2]|0,+E[c>>3])|0,Va(d),C=f,c|0}function nxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Sl(ixe()|0)|0,l=DF(l)|0,yl(0,f|0,s|0,l|0,+ +VA(c))|0}function ixe(){var s=0;return o[7728]|0||(sxe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function sxe(s){s=s|0,bl(s,oxe()|0,2)}function oxe(){return 1264}function axe(s){s=s|0,Dp(s)}function lxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cxe(s,c,d,1),C=f}function cxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Axe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(L9(9684),rr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));L9(9684)}return 9684}function uxe(s){return s=s|0,0}function Axe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=zF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,hxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,gxe(s,k),dxe(k),C=M;return}}function pxe(s){return s=s|0,357913941}function hxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function L9(s){s=s|0,Exe(s)}function mxe(s){s=s|0,yxe(s+24|0)}function yxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Exe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,5,l,Cxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Cxe(){return 1280}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Ixe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Bxe(l,d,c)|0,C=f,c|0}function Ixe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(m,c),m=$A(m,c)|0,Hw[f&15](d,s,m),m=F9(d)|0,C=B,m|0}function vxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Dxe(s,c,d,1),C=f}function Dxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Pxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Sxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7752]|0||(O9(9720),rr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O9(9720)}return 9720}function Pxe(s){return s=s|0,0}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=VF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],N9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function N9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=xxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,kxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],N9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Qxe(s,k),Fxe(k),C=M;return}}function xxe(s){return s=s|0,357913941}function kxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Fxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O9(s){s=s|0,Lxe(s)}function Rxe(s){s=s|0,Txe(s+24|0)}function Txe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Lxe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,8,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1288}function Oxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Mxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Uxe(l,f)|0,C=c,l|0}function Mxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Uxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),Zj(Og[c&31](s)|0)|0}function _xe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Hxe(s,c,d,0),C=f}function Hxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=qxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Gxe(m,f)|0,f),C=d}function JF(){var s=0,l=0;if(o[7760]|0||(U9(9756),rr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U9(9756)}return 9756}function qxe(s){return s=s|0,0}function Gxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=JF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Yxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Wxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Kxe(s,k),zxe(k),C=M;return}}function Yxe(s){return s=s|0,357913941}function Wxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Kxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function zxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U9(s){s=s|0,Xxe(s)}function Vxe(s){s=s|0,Jxe(s+24|0)}function Jxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Xxe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,8,l,Zxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Zxe(){return 1292}function $xe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=eke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tke(l,d,c),C=f}function eke(s){return s=s|0,(n[(JF()|0)+24>>2]|0)+(s*12|0)|0}function tke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Qu(d,c),c=+Fu(d,c),C7[f&31](s,c),C=m}function rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nke(s,c,d,0),C=f}function nke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ike(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ske(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7768]|0||(H9(9792),rr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H9(9792)}return 9792}function ike(s){return s=s|0,0}function ske(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=XF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ake(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cke(s,k),uke(k),C=M;return}}function ake(s){return s=s|0,357913941}function lke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H9(s){s=s|0,pke(s)}function Ake(s){s=s|0,fke(s+24|0)}function fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pke(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,1,l,hke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hke(){return 1300}function gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=dke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],mke(l,m,c,f),C=d}function dke(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function mke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,Qu(B,f),f=+Fu(B,f),b7[d&15](s,m,f),C=k}function yke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Eke(s,c,d,0),C=f}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Cke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wke(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7776]|0||(G9(9828),rr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G9(9828)}return 9828}function Cke(s){return s=s|0,0}function wke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=ZF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Ike(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Bke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,vke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Dke(s,k),Pke(k),C=M;return}}function Bke(s){return s=s|0,357913941}function vke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Pke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G9(s){s=s|0,xke(s)}function Ske(s){s=s|0,bke(s+24|0)}function bke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function xke(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,7,l,kke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kke(){return 1312}function Qke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Fke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rke(l,d,c),C=f}function Fke(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function Rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,rf[f&31](s,d),C=m}function Tke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Lke(s,c,d,0),C=f}function Lke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Oke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7784]|0||(Y9(9864),rr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y9(9864)}return 9864}function Nke(s){return s=s|0,0}function Oke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=$F()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],j9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Mke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Uke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_ke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],j9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Hke(s,k),qke(k),C=M;return}}function Uke(s){return s=s|0,357913941}function _ke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y9(s){s=s|0,Yke(s)}function Gke(s){s=s|0,jke(s+24|0)}function jke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Yke(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,8,l,Wke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Wke(){return 1320}function Kke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vke(l,d,c),C=f}function zke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Jke(d,c),d=Xke(d,c)|0,rf[f&31](s,d),C=m}function Jke(s,l){s=s|0,l=l|0}function Xke(s,l){return s=s|0,l=l|0,Zke(l)|0}function Zke(s){return s=s|0,s|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],eQe(s,c,d,0),C=f}function eQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,rQe(m,f)|0,f),C=d}function eR(){var s=0,l=0;if(o[7792]|0||(K9(9900),rr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K9(9900)}return 9900}function tQe(s){return s=s|0,0}function rQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=eR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(nQe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=iQe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,sQe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,oQe(s,k),aQe(k),C=M;return}}function iQe(s){return s=s|0,357913941}function sQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function aQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K9(s){s=s|0,uQe(s)}function lQe(s){s=s|0,cQe(s+24|0)}function cQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function uQe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,22,l,AQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function AQe(){return 1344}function fQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=pQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],hQe(l,f),C=c}function pQe(s){return s=s|0,(n[(eR()|0)+24>>2]|0)+(s*12|0)|0}function hQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&127](s)}function gQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tR()|0,s=dQe(c)|0,hn(m,l,d,s,mQe(c,f)|0,f)}function tR(){var s=0,l=0;if(o[7800]|0||(V9(9936),rr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(9936)}return 9936}function dQe(s){return s=s|0,s|0}function mQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=tR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(yQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function yQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=EQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,CQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,wQe(s,d),IQe(d),C=k;return}}function EQe(s){return s=s|0,536870911}function CQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function IQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,DQe(s)}function BQe(s){s=s|0,vQe(s+24|0)}function vQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function DQe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,23,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function PQe(s,l){s=s|0,l=l|0,bQe(n[(SQe(s)|0)>>2]|0,l)}function SQe(s){return s=s|0,(n[(tR()|0)+24>>2]|0)+(s<<3)|0}function bQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,HF(f,l),l=qF(f,l)|0,tf[s&127](l),C=c}function xQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rR()|0,s=kQe(c)|0,hn(m,l,d,s,QQe(c,f)|0,f)}function rR(){var s=0,l=0;if(o[7808]|0||(X9(9972),rr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(9972)}return 9972}function kQe(s){return s=s|0,s|0}function QQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(FQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function J9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function FQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=RQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,TQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,LQe(s,d),NQe(d),C=k;return}}function RQe(s){return s=s|0,536870911}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function LQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function NQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,UQe(s)}function OQe(s){s=s|0,MQe(s+24|0)}function MQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function UQe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,9,l,_Qe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _Qe(){return 1348}function HQe(s,l){return s=s|0,l=l|0,GQe(n[(qQe(s)|0)>>2]|0,l)|0}function qQe(s){return s=s|0,(n[(rR()|0)+24>>2]|0)+(s<<3)|0}function GQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,l=sD(Og[s&31](l)|0)|0,C=c,l|0}function Z9(s,l){s=s|0,l=l|0}function $9(s,l){return s=s|0,l=l|0,jQe(l)|0}function jQe(s){return s=s|0,s|0}function YQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nR()|0,s=WQe(c)|0,hn(m,l,d,s,KQe(c,f)|0,f)}function nR(){var s=0,l=0;if(o[7816]|0||(t5(10008),rr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t5(10008)}return 10008}function WQe(s){return s=s|0,s|0}function KQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=VQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,XQe(s,d),ZQe(d),C=k;return}}function VQe(s){return s=s|0,536870911}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t5(s){s=s|0,tFe(s)}function $Qe(s){s=s|0,eFe(s+24|0)}function eFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function tFe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,15,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rFe(s){return s=s|0,iFe(n[(nFe(s)|0)>>2]|0)|0}function nFe(s){return s=s|0,(n[(nR()|0)+24>>2]|0)+(s<<3)|0}function iFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function sFe(){var s=0;return o[7832]|0||(pFe(10052),rr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function oFe(s,l){s=s|0,l=l|0,n[s>>2]=aFe()|0,n[s+4>>2]=lFe()|0,n[s+12>>2]=l,n[s+8>>2]=cFe()|0,n[s+32>>2]=2}function aFe(){return 11709}function lFe(){return 1188}function cFe(){return aD()|0}function uFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(AFe(c),gt(c)):l|0&&(Su(l),gt(l))}function xp(s,l){return s=s|0,l=l|0,l&s|0}function AFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=fFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function fFe(){return 0}function pFe(s){s=s|0,Dp(s)}function hFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,gFe(s,4827),dFe(s,4834,3)|0,mFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],yFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],EFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],CFe(s,4891,c)|0,C=l}function gFe(s,l){s=s|0,l=l|0;var c=0;c=ZRe()|0,n[s>>2]=c,$Re(c,l),kp(n[s>>2]|0)}function dFe(s,l,c){return s=s|0,l=l|0,c=c|0,NRe(s,pn(l)|0,c,0),s|0}function mFe(s,l,c){return s=s|0,l=l|0,c=c|0,wRe(s,pn(l)|0,c,0),s|0}function yFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rRe(s,l,d),C=f,s|0}function EFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OFe(s,l,d),C=f,s|0}function CFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wFe(s,l,d),C=f,s|0}function wFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],IFe(s,c,d,1),C=f}function IFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=iR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=BFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,vFe(m,f)|0,f),C=d}function iR(){var s=0,l=0;if(o[7840]|0||(n5(10100),rr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n5(10100)}return 10100}function BFe(s){return s=s|0,0}function vFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=iR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(DFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function r5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=PFe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,SFe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bFe(s,k),xFe(k),C=M;return}}function PFe(s){return s=s|0,357913941}function SFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n5(s){s=s|0,FFe(s)}function kFe(s){s=s|0,QFe(s+24|0)}function QFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function FFe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,6,l,RFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RFe(){return 1364}function TFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=LFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NFe(l,d,c)|0,C=f,c|0}function LFe(s){return s=s|0,(n[(iR()|0)+24>>2]|0)+(s*12|0)|0}function NFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,d=u9(RR[f&15](s,d)|0)|0,C=m,d|0}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],MFe(s,c,d,0),C=f}function MFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=UFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,_Fe(m,f)|0,f),C=d}function sR(){var s=0,l=0;if(o[7848]|0||(s5(10136),rr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s5(10136)}return 10136}function UFe(s){return s=s|0,0}function _Fe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=sR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(HFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qFe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,GFe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jFe(s,k),YFe(k),C=M;return}}function qFe(s){return s=s|0,357913941}function GFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s5(s){s=s|0,zFe(s)}function WFe(s){s=s|0,KFe(s+24|0)}function KFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zFe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,9,l,VFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VFe(){return 1372}function JFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=XFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZFe(l,d,c),C=f}function XFe(s){return s=s|0,(n[(sR()|0)+24>>2]|0)+(s*12|0)|0}function ZFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),$Fe(d,c),B=y(eRe(d,c)),E7[f&1](s,B),C=m}function $Fe(s,l){s=s|0,l=+l}function eRe(s,l){return s=s|0,l=+l,y(tRe(l))}function tRe(s){return s=+s,y(s)}function rRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nRe(s,c,d,0),C=f}function nRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=iRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sRe(m,f)|0,f),C=d}function oR(){var s=0,l=0;if(o[7856]|0||(a5(10172),rr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a5(10172)}return 10172}function iRe(s){return s=s|0,0}function sRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=oR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aRe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lRe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cRe(s,k),uRe(k),C=M;return}}function aRe(s){return s=s|0,357913941}function lRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a5(s){s=s|0,pRe(s)}function ARe(s){s=s|0,fRe(s+24|0)}function fRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pRe(s){s=s|0;var l=0;l=Kr()|0,zr(s,2,3,l,hRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hRe(){return 1380}function gRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=dRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],mRe(l,m,c,f),C=d}function dRe(s){return s=s|0,(n[(oR()|0)+24>>2]|0)+(s*12|0)|0}function mRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,yRe(B,f),B=ERe(B,f)|0,Hw[d&15](s,m,B),C=k}function yRe(s,l){s=s|0,l=l|0}function ERe(s,l){return s=s|0,l=l|0,CRe(l)|0}function CRe(s){return s=s|0,(s|0)!=0|0}function wRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=aR()|0,s=IRe(c)|0,hn(m,l,d,s,BRe(c,f)|0,f)}function aR(){var s=0,l=0;if(o[7864]|0||(c5(10208),rr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(10208)}return 10208}function IRe(s){return s=s|0,s|0}function BRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=aR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(l5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(vRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function vRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=DRe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,PRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,l5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,SRe(s,d),bRe(d),C=k;return}}function DRe(s){return s=s|0,536870911}function PRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function SRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,QRe(s)}function xRe(s){s=s|0,kRe(s+24|0)}function kRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function QRe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,24,l,FRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FRe(){return 1392}function RRe(s,l){s=s|0,l=l|0,LRe(n[(TRe(s)|0)>>2]|0,l)}function TRe(s){return s=s|0,(n[(aR()|0)+24>>2]|0)+(s<<3)|0}function LRe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,tf[s&127](l),C=c}function NRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lR()|0,s=ORe(c)|0,hn(m,l,d,s,MRe(c,f)|0,f)}function lR(){var s=0,l=0;if(o[7872]|0||(A5(10244),rr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A5(10244)}return 10244}function ORe(s){return s=s|0,s|0}function MRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(URe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function u5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function URe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=_Re(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,HRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,qRe(s,d),GRe(d),C=k;return}}function _Re(s){return s=s|0,536870911}function HRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function qRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A5(s){s=s|0,WRe(s)}function jRe(s){s=s|0,YRe(s+24|0)}function YRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WRe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,16,l,KRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(){return 1400}function zRe(s){return s=s|0,JRe(n[(VRe(s)|0)>>2]|0)|0}function VRe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s<<3)|0}function JRe(s){return s=s|0,XRe(CD[s&7]()|0)|0}function XRe(s){return s=s|0,s|0}function ZRe(){var s=0;return o[7880]|0||(sTe(10280),rr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function $Re(s,l){s=s|0,l=l|0,n[s>>2]=eTe()|0,n[s+4>>2]=tTe()|0,n[s+12>>2]=l,n[s+8>>2]=rTe()|0,n[s+32>>2]=4}function eTe(){return 11711}function tTe(){return 1356}function rTe(){return aD()|0}function nTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(iTe(c),gt(c)):l|0&&(Pg(l),gt(l))}function iTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function sTe(s){s=s|0,Dp(s)}function oTe(s){s=s|0,aTe(s,4920),lTe(s)|0,cTe(s)|0}function aTe(s,l){s=s|0,l=l|0;var c=0;c=R9()|0,n[s>>2]=c,kTe(c,l),kp(n[s>>2]|0)}function lTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,CTe()|0),s|0}function cTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,uTe()|0),s|0}function uTe(){var s=0;return o[7888]|0||(f5(10328),rr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Tr(10328)|0||f5(10328),10328}function Qg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function f5(s){s=s|0,pTe(s),Fg(s,10)}function ATe(s){s=s|0,fTe(s+24|0)}function fTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pTe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,1,l,mTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hTe(s,l,c){s=s|0,l=l|0,c=+c,gTe(s,l,c)}function Fg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function gTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,Qu(B,c),E[d>>3]=+Fu(B,c),dTe(s,m,d),C=f}function dTe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function mTe(){return 1404}function yTe(s,l){return s=s|0,l=+l,ETe(s,l)|0}function ETe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Ka(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,Qu(B,l),Y(Q,s,+Fu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,C=f,c|0}function CTe(){var s=0;return o[7896]|0||(p5(10364),rr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||p5(10364),10364}function p5(s){s=s|0,BTe(s),Fg(s,55)}function wTe(s){s=s|0,ITe(s+24|0)}function ITe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function BTe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vTe(s){s=s|0,DTe(s)}function DTe(s){s=s|0,PTe(s)}function PTe(s){s=s|0,h5(s+8|0),o[s+24>>0]=1}function h5(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function STe(){return 1424}function bTe(){return xTe()|0}function xTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,f=Kt(16)|0,h5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(f,m,d),n[c>>2]=f,C=l,s|0}function kTe(s,l){s=s|0,l=l|0,n[s>>2]=QTe()|0,n[s+4>>2]=FTe()|0,n[s+12>>2]=l,n[s+8>>2]=RTe()|0,n[s+32>>2]=5}function QTe(){return 11710}function FTe(){return 1416}function RTe(){return lD()|0}function TTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(LTe(c),gt(c)):l|0&>(l)}function LTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=NTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function NTe(){return n[357]|0}function OTe(s){s=s|0,MTe(s,4926),UTe(s)|0}function MTe(s,l){s=s|0,l=l|0;var c=0;c=r9()|0,n[s>>2]=c,JTe(c,l),kp(n[s>>2]|0)}function UTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,_Te()|0),s|0}function _Te(){var s=0;return o[7912]|0||(g5(10412),rr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Tr(10412)|0||g5(10412),10412}function g5(s){s=s|0,GTe(s),Fg(s,57)}function HTe(s){s=s|0,qTe(s+24|0)}function qTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function GTe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,5,l,KTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jTe(s){s=s|0,YTe(s)}function YTe(s){s=s|0,WTe(s)}function WTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function KTe(){return 1432}function zTe(){return VTe()|0}function VTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Ka(8)|0,f=c,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=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],n9(k,m,s),n[c>>2]=k,C=B,f|0}function JTe(s,l){s=s|0,l=l|0,n[s>>2]=XTe()|0,n[s+4>>2]=ZTe()|0,n[s+12>>2]=l,n[s+8>>2]=$Te()|0,n[s+32>>2]=6}function XTe(){return 11704}function ZTe(){return 1436}function $Te(){return lD()|0}function eLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(tLe(c),gt(c)):l|0&>(l)}function tLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function rLe(s){s=s|0,nLe(s,4933),iLe(s)|0,sLe(s)|0}function nLe(s,l){s=s|0,l=l|0;var c=0;c=xLe()|0,n[s>>2]=c,kLe(c,l),kp(n[s>>2]|0)}function iLe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,ELe()|0),s|0}function sLe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,oLe()|0),s|0}function oLe(){var s=0;return o[7920]|0||(d5(10452),rr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Tr(10452)|0||d5(10452),10452}function d5(s){s=s|0,cLe(s),Fg(s,1)}function aLe(s){s=s|0,lLe(s+24|0)}function lLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function cLe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,1,l,pLe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uLe(s,l,c){s=s|0,l=+l,c=+c,ALe(s,l,c)}function ALe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,Qu(k,l),E[m>>3]=+Fu(k,l),Qu(B,c),E[d>>3]=+Fu(B,c),fLe(s,m,d),C=f}function fLe(s,l,c){s=s|0,l=l|0,c=c|0,m5(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function m5(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function pLe(){return 1472}function hLe(s,l){return s=+s,l=+l,gLe(s,l)|0}function gLe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Ka(8)|0,c=d,m=Kt(16)|0,Qu(B,s),s=+Fu(B,s),Qu(k,l),m5(m,s,+Fu(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],y5(m,k,B),n[d>>2]=m,C=f,c|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function dLe(s){s=s|0,Jm(s),gt(s)}function mLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function yLe(s){s=s|0,gt(s)}function ELe(){var s=0;return o[7928]|0||(E5(10488),rr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Tr(10488)|0||E5(10488),10488}function E5(s){s=s|0,ILe(s),Fg(s,60)}function CLe(s){s=s|0,wLe(s+24|0)}function wLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ILe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,6,l,PLe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BLe(s){s=s|0,vLe(s)}function vLe(s){s=s|0,DLe(s)}function DLe(s){s=s|0,C5(s+8|0),o[s+24>>0]=1}function C5(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function PLe(){return 1492}function SLe(){return bLe()|0}function bLe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,f=Kt(16)|0,C5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],y5(f,m,d),n[c>>2]=f,C=l,s|0}function xLe(){var s=0;return o[7936]|0||(NLe(10524),rr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function kLe(s,l){s=s|0,l=l|0,n[s>>2]=QLe()|0,n[s+4>>2]=FLe()|0,n[s+12>>2]=l,n[s+8>>2]=RLe()|0,n[s+32>>2]=7}function QLe(){return 11700}function FLe(){return 1484}function RLe(){return lD()|0}function TLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(LLe(c),gt(c)):l|0&>(l)}function LLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function NLe(s){s=s|0,Dp(s)}function OLe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=MLe(c)|0,c=ULe(c,0)|0,gNe(s,l,c,cR()|0,0)}function MLe(s){return s=s|0,s|0}function ULe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(I5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(WLe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function cR(){var s=0,l=0;if(o[7944]|0||(w5(10568),rr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w5(10568)}return 10568}function w5(s){s=s|0,qLe(s)}function _Le(s){s=s|0,HLe(s+24|0)}function HLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qLe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,17,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GLe(s){return s=s|0,YLe(n[(jLe(s)|0)>>2]|0)|0}function jLe(s){return s=s|0,(n[(cR()|0)+24>>2]|0)+(s<<3)|0}function YLe(s){return s=s|0,oD(CD[s&7]()|0)|0}function I5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function WLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=KLe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,zLe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,I5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,VLe(s,d),JLe(d),C=k;return}}function KLe(s){return s=s|0,536870911}function zLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function VLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function XLe(){ZLe()}function ZLe(){$Le(10604)}function $Le(s){s=s|0,eNe(s,4955)}function eNe(s,l){s=s|0,l=l|0;var c=0;c=tNe()|0,n[s>>2]=c,rNe(c,l),kp(n[s>>2]|0)}function tNe(){var s=0;return o[7952]|0||(ANe(10612),rr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function rNe(s,l){s=s|0,l=l|0,n[s>>2]=oNe()|0,n[s+4>>2]=aNe()|0,n[s+12>>2]=l,n[s+8>>2]=lNe()|0,n[s+32>>2]=8}function kp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Ym()|0,n[c>>2]=s,nNe(10608,c),C=l}function Ym(){return o[11714]|0||(n[2652]=0,rr(62,10608,U|0)|0,o[11714]=1),10608}function nNe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function iNe(s){s=s|0,sNe(s)}function sNe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function oNe(){return 11715}function aNe(){return 1496}function lNe(){return aD()|0}function cNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(uNe(c),gt(c)):l|0&>(l)}function uNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function ANe(s){s=s|0,Dp(s)}function fNe(s,l){s=s|0,l=l|0;var c=0,f=0;Ym()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(n7(uR(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;pNe(f,l)}while(0)}function uR(s){return s=s|0,n[s+12>>2]|0}function pNe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(GA(c),gt(c)),c=Kt(4)|0,Jj(c,l),n[s>>2]=c}function AR(){return o[11716]|0||(n[2664]=0,rr(63,10656,U|0)|0,o[11716]=1),10656}function B5(){var s=0;return o[11717]|0?s=n[2665]|0:(hNe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function hNe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function v5(){return 1572}function gNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,AR()|0,dNe(10656,O,M,Q,k,B),C=m}function dNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,$j(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function D5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0,lt=0;if(lt=C,C=C+32|0,Me=lt+20|0,Qe=lt+8|0,et=lt+4|0,Xe=lt,l=n[l>>2]|0,l|0){je=Me+4|0,Q=Me+8|0,M=Qe+4|0,O=Qe+8|0,G=Qe+8|0,se=Me+8|0;do{if(B=l+4|0,k=fR(B)|0,k|0){if(d=Lw(k)|0,n[Me>>2]=0,n[je>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,mNe(Me,f),f|0)for(;f=f+-1|0,xc(Qe,n[d>>2]|0),m=n[je>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[je>>2]=(n[je>>2]|0)+4):pR(Me,Qe),f;)d=d+4|0;f=Ow(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?yNe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[G>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Tr(k)|0,ENe(c,s,et,Xe,Me,Qe),hR(Qe),ef(Me)}l=n[l>>2]|0}while((l|0)!=0)}C=lt}function fR(s){return s=s|0,n[s+12>>2]|0}function Lw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function mNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(R5(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),T5(s,c),L5(c)),C=d}function pR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=F5(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,R5(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,T5(s,c),L5(c),C=B;return}}function Ow(s){return s=s|0,n[s+8>>2]|0}function yNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=Q5(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,MNe(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,UNe(s,c),_Ne(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function ENe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,CNe(s,l,c,f,d,m)}function hR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ef(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function CNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,G=B+24|0,Q=B+12|0,M=B,za(k),s=da(s)|0,n[G>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,gR(Q,d),wNe(M,m),n[O>>2]=n[G>>2],INe(s,O,c,f,Q,M),hR(M),ef(Q),Va(k),C=B}function gR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NNe(s,f),ONe(s,n[l>>2]|0,n[c>>2]|0,f))}function wNe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(TNe(s,f),LNe(s,n[l>>2]|0,n[c>>2]|0,f))}function INe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,O=B+28|0,G=B+24|0,k=B+12|0,Q=B,M=Sl(BNe()|0)|0,n[G>>2]=n[l>>2],n[O>>2]=n[G>>2],l=Rg(O)|0,c=P5(c)|0,f=dR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],G=d+8|0,n[k+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[d>>2]=0,d=mR(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],G=m+8|0,n[Q+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[m>>2]=0,ao(0,M|0,s|0,l|0,c|0,f|0,d|0,vNe(Q)|0)|0,hR(Q),ef(k),C=B}function BNe(){var s=0;return o[7968]|0||(FNe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Rg(s){return s=s|0,b5(s)|0}function P5(s){return s=s|0,S5(s)|0}function dR(s){return s=s|0,oD(s)|0}function mR(s){return s=s|0,PNe(s)|0}function vNe(s){return s=s|0,DNe(s)|0}function DNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Ka(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=S5(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function S5(s){return s=s|0,s|0}function PNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Ka(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b5((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(x5()|0)|0,f?(kF(l,f),QF(c,l),lUe(s,c),s=FF(l)|0):s=SNe(s)|0,C=d,s|0}function x5(){var s=0;return o[7960]|0||(QNe(10664),rr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function SNe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function bNe(s){s=s|0,Jm(s),gt(s)}function xNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function kNe(s){s=s|0,gt(s)}function QNe(s){s=s|0,Dp(s)}function FNe(s){s=s|0,bl(s,RNe()|0,5)}function RNe(){return 1676}function TNe(s,l){s=s|0,l=l|0;var c=0;if((Q5(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function LNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function Q5(s){return s=s|0,1073741823}function NNe(s,l){s=s|0,l=l|0;var c=0;if((F5(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function F5(s){return s=s|0,1073741823}function MNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function UNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Ne(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function R5(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function T5(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function L5(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0;if(Qe=C,C=C+32|0,O=Qe+20|0,G=Qe+12|0,M=Qe+16|0,se=Qe+4|0,je=Qe,Me=Qe+8|0,k=B5()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(O,B),qNe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=v5()|0,B=n[m>>2]|0,B|0)do xc(O,B),n[G>>2]=n[m+4>>2],GNe(l,O,G),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Ym()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(O,n[(Wm(l)|0)>>2]|0),n[G>>2]=uR(l)|0,jNe(c,O,G),m=n[m>>2]|0;while((m|0)!=0);if(xc(M,0),m=AR()|0,n[O>>2]=n[M>>2],D5(O,m,d),m=n[(Ym()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,xc(G,n[(Wm(Q)|0)>>2]|0),YNe(se,N5(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(je,n[(Wm(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[je>>2],n[s>>2]=(n[s>>2]|0)+4):pR(O,je),B=n[B>>2]|0;while((B|0)!=0);WNe(f,G,O),ef(O)}n[Me>>2]=n[G>>2],M=O5(Q)|0,n[O>>2]=n[Me>>2],D5(O,M,d),s9(se),m=n[m>>2]|0}while((m|0)!=0)}C=Qe}function qNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,iOe(s,l,c,f)}function GNe(s,l,c){s=s|0,l=l|0,c=c|0,nOe(s,l,c)}function Wm(s){return s=s|0,s|0}function jNe(s,l,c){s=s|0,l=l|0,c=c|0,$Ne(s,l,c)}function N5(s){return s=s|0,s+16|0}function YNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=ZNe(c)|0,f|0){if(f=Kt(12)|0,B=(M5(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(M5(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function WNe(s,l,c){s=s|0,l=l|0,c=c|0,KNe(s,l,c)}function O5(s){return s=s|0,s+24|0}function KNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,za(d),s=da(s)|0,n[k>>2]=n[l>>2],gR(m,c),n[B>>2]=n[k>>2],zNe(s,B,m),ef(m),Va(d),C=f}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Sl(VNe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Rg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,mR(d)|0)|0,ef(d),C=f}function VNe(){var s=0;return o[7976]|0||(JNe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function JNe(s){s=s|0,bl(s,XNe()|0,2)}function XNe(){return 1732}function ZNe(s){return s=s|0,n[s>>2]|0}function M5(s){return s=s|0,n[s>>2]|0}function $Ne(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,za(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Sl(eOe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Rg(m)|0,oo(0,d|0,s|0,l|0,P5(c)|0)|0,C=f}function eOe(){var s=0;return o[7984]|0||(tOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function tOe(s){s=s|0,bl(s,rOe()|0,2)}function rOe(){return 1744}function nOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,za(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,za(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],sOe(s,B,c,f),Va(m),C=d}function sOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Sl(oOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Rg(B)|0,c=Km(c)|0,hc(0,m|0,s|0,l|0,c|0,Km(f)|0)|0,C=d}function oOe(){var s=0;return o[7992]|0||(lOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Km(s){return s=s|0,aOe(s)|0}function aOe(s){return s=s|0,s&255|0}function lOe(s){s=s|0,bl(s,cOe()|0,3)}function cOe(){return 1756}function uOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,NF(s,0),f=aUe(l)|0,n[k>>2]=0,G=k+4|0,n[G>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,AOe(Q,c,M),uD(s,Q)|0,jA(Q);break}case 8:{G=BR(l)|0,o[M>>0]=8,xc(O,n[G+4>>2]|0),fOe(Q,c,M,O,G+8|0),uD(s,Q)|0,jA(Q);break}case 9:{if(m=BR(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[G>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[G>>2]=(n[G>>2]|0)+4):pR(k,Q),l;)d=d+4|0;o[M>>0]=9,xc(O,n[m+8>>2]|0),pOe(Q,c,M,O,k),uD(s,Q)|0,jA(Q);break}default:G=BR(l)|0,o[M>>0]=f,xc(O,n[G+4>>2]|0),hOe(Q,c,M,O),uD(s,Q)|0,jA(Q)}ef(k),C=se}function AOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,za(d),l=da(l)|0,SOe(s,l,o[c>>0]|0),Va(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&SA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function fOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,za(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],BOe(s,l,c,k,d),Va(B),C=m}function pOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,za(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],gR(k,d),n[Q>>2]=n[M>>2],EOe(s,l,c,Q,k),ef(k),Va(B),C=m}function hOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,za(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],gOe(s,l,c,B),Va(m),C=d}function gOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Sl(dOe()|0)|0,c=Km(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Rg(m)|0)|0),C=d}function dOe(){var s=0;return o[8e3]|0||(mOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,NF(s,l)}function mOe(s){s=s|0,bl(s,yOe()|0,2)}function yOe(){return 1772}function EOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+16|0,M=m+12|0,B=m,k=Sl(COe()|0)|0,c=Km(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=Rg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,hc(0,k|0,l|0,c|0,f|0,mR(B)|0)|0),ef(B),C=m}function COe(){var s=0;return o[8008]|0||(wOe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function wOe(s){s=s|0,bl(s,IOe()|0,3)}function IOe(){return 1784}function BOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Sl(vOe()|0)|0,c=Km(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Rg(k)|0,AD(s,hc(0,B|0,l|0,c|0,f|0,dR(d)|0)|0),C=m}function vOe(){var s=0;return o[8016]|0||(DOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function DOe(s){s=s|0,bl(s,POe()|0,3)}function POe(){return 1800}function SOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Sl(bOe()|0)|0,AD(s,Qn(0,f|0,l|0,Km(c)|0)|0)}function bOe(){var s=0;return o[8024]|0||(xOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function xOe(s){s=s|0,bl(s,kOe()|0,1)}function kOe(){return 1816}function QOe(){FOe(),ROe(),TOe()}function FOe(){n[2702]=p7(65536)|0}function ROe(){eMe(10856)}function TOe(){LOe(10816)}function LOe(s){s=s|0,NOe(s,5044),OOe(s)|0}function NOe(s,l){s=s|0,l=l|0;var c=0;c=x5()|0,n[s>>2]=c,zOe(c,l),kp(n[s>>2]|0)}function OOe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,MOe()|0),s|0}function MOe(){var s=0;return o[8032]|0||(_5(10820),rr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Tr(10820)|0||_5(10820),10820}function _5(s){s=s|0,HOe(s),Fg(s,25)}function UOe(s){s=s|0,_Oe(s+24|0)}function _Oe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HOe(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,18,l,YOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qOe(s,l){s=s|0,l=l|0,GOe(s,l)}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,xg(d,l),n[f>>2]=kg(d,l)|0,jOe(s,f),C=c}function jOe(s,l){s=s|0,l=l|0,H5(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function H5(s,l){s=s|0,l=l|0,n[s>>2]=l}function YOe(){return 1824}function WOe(s){return s=s|0,KOe(s)|0}function KOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(4)|0,xg(d,s),H5(k,kg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function Ka(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=p7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function zOe(s,l){s=s|0,l=l|0,n[s>>2]=VOe()|0,n[s+4>>2]=JOe()|0,n[s+12>>2]=l,n[s+8>>2]=XOe()|0,n[s+32>>2]=9}function VOe(){return 11744}function JOe(){return 1832}function XOe(){return lD()|0}function ZOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&($Oe(c),gt(c)):l|0&>(l)}function $Oe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function eMe(s){s=s|0,tMe(s,5052),rMe(s)|0,nMe(s,5058,26)|0,iMe(s,5069,1)|0,sMe(s,5077,10)|0,oMe(s,5087,19)|0,aMe(s,5094,27)|0}function tMe(s,l){s=s|0,l=l|0;var c=0;c=$4e()|0,n[s>>2]=c,eUe(c,l),kp(n[s>>2]|0)}function rMe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,U4e()|0),s|0}function nMe(s,l,c){return s=s|0,l=l|0,c=c|0,w4e(s,pn(l)|0,c,0),s|0}function iMe(s,l,c){return s=s|0,l=l|0,c=c|0,o4e(s,pn(l)|0,c,0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,MMe(s,pn(l)|0,c,0),s|0}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,BMe(s,pn(l)|0,c,0),s|0}function q5(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function aMe(s,l,c){return s=s|0,l=l|0,c=c|0,lMe(s,pn(l)|0,c,0),s|0}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=yR()|0,s=cMe(c)|0,hn(m,l,d,s,uMe(c,f)|0,f)}function yR(){var s=0,l=0;if(o[8040]|0||(j5(10860),rr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(10860)}return 10860}function cMe(s){return s=s|0,s|0}function uMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=yR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(G5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(AMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function AMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=fMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,pMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,G5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,hMe(s,d),gMe(d),C=k;return}}function fMe(s){return s=s|0,536870911}function pMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function hMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function gMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,yMe(s)}function dMe(s){s=s|0,mMe(s+24|0)}function mMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function yMe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,11,l,EMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function EMe(){return 1840}function CMe(s,l,c){s=s|0,l=l|0,c=c|0,IMe(n[(wMe(s)|0)>>2]|0,l,c)}function wMe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s<<3)|0}function IMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,xg(m,l),l=kg(m,l)|0,xg(d,c),c=kg(d,c)|0,rf[s&31](l,c),C=f}function BMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ER()|0,s=vMe(c)|0,hn(m,l,d,s,DMe(c,f)|0,f)}function ER(){var s=0,l=0;if(o[8048]|0||(W5(10896),rr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(10896)}return 10896}function vMe(s){return s=s|0,s|0}function DMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=ER()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(PMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function PMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,bMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,xMe(s,d),kMe(d),C=k;return}}function SMe(s){return s=s|0,536870911}function bMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function xMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,RMe(s)}function QMe(s){s=s|0,FMe(s+24|0)}function FMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function RMe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,11,l,TMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function TMe(){return 1852}function LMe(s,l){return s=s|0,l=l|0,OMe(n[(NMe(s)|0)>>2]|0,l)|0}function NMe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s<<3)|0}function OMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,xg(f,l),l=kg(f,l)|0,l=oD(Og[s&31](l)|0)|0,C=c,l|0}function MMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CR()|0,s=UMe(c)|0,hn(m,l,d,s,_Me(c,f)|0,f)}function CR(){var s=0,l=0;if(o[8056]|0||(z5(10932),rr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(10932)}return 10932}function UMe(s){return s=s|0,s|0}function _Me(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(HMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function HMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=qMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,GMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,jMe(s,d),YMe(d),C=k;return}}function qMe(s){return s=s|0,536870911}function GMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function jMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,zMe(s)}function WMe(s){s=s|0,KMe(s+24|0)}function KMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zMe(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,7,l,VMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VMe(){return 1860}function JMe(s,l,c){return s=s|0,l=l|0,c=c|0,ZMe(n[(XMe(s)|0)>>2]|0,l,c)|0}function XMe(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s<<3)|0}function ZMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,$Me(Q,l),e4e(k,Q,l),Pp(d,c),c=Sp(d,c)|0,n[B>>2]=n[k>>2],Hw[s&15](m,B,c),c=t4e(m)|0,jA(m),bp(d),C=f,c|0}function $Me(s,l){s=s|0,l=l|0}function e4e(s,l,c){s=s|0,l=l|0,c=c|0,r4e(s,c)}function t4e(s){return s=s|0,da(s)|0}function r4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(n4e(c,0),ii(f|0,c|0)|0,i4e(s,c),s4e(c)):n[s>>2]=n[l>>2],C=d}function n4e(s,l){s=s|0,l=l|0,Xj(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function i4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function s4e(s){s=s|0,o[s+8>>0]=0}function o4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wR()|0,s=a4e(c)|0,hn(m,l,d,s,l4e(c,f)|0,f)}function wR(){var s=0,l=0;if(o[8064]|0||(J5(10968),rr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J5(10968)}return 10968}function a4e(s){return s=s|0,s|0}function l4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(V5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(c4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function c4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=u4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,A4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,V5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,f4e(s,d),p4e(d),C=k;return}}function u4e(s){return s=s|0,536870911}function A4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function p4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J5(s){s=s|0,d4e(s)}function h4e(s){s=s|0,g4e(s+24|0)}function g4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function d4e(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,1,l,m4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m4e(){return 1872}function y4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,C4e(n[(E4e(s)|0)>>2]|0,l,c,f,d,m)}function E4e(s){return s=s|0,(n[(wR()|0)+24>>2]|0)+(s<<3)|0}function C4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,G=B,Pp(k,l),l=Sp(k,l)|0,Pp(Q,c),c=Sp(Q,c)|0,Pp(M,f),f=Sp(M,f)|0,Pp(O,d),d=Sp(O,d)|0,Pp(G,m),m=Sp(G,m)|0,y7[s&1](l,c,f,d,m),bp(G),bp(O),bp(M),bp(Q),bp(k),C=B}function w4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IR()|0,s=I4e(c)|0,hn(m,l,d,s,B4e(c,f)|0,f)}function IR(){var s=0,l=0;if(o[8072]|0||(Z5(11004),rr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Tr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(11004)}return 11004}function I4e(s){return s=s|0,s|0}function B4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(v4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function v4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=D4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,P4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,S4e(s,d),b4e(d),C=k;return}}function D4e(s){return s=s|0,536870911}function P4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function b4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,Q4e(s)}function x4e(s){s=s|0,k4e(s+24|0)}function k4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function Q4e(s){s=s|0;var l=0;l=Kr()|0,zr(s,1,12,l,F4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function F4e(){return 1896}function R4e(s,l,c){s=s|0,l=l|0,c=c|0,L4e(n[(T4e(s)|0)>>2]|0,l,c)}function T4e(s){return s=s|0,(n[(IR()|0)+24>>2]|0)+(s<<3)|0}function L4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,N4e(m,l),l=O4e(m,l)|0,Pp(d,c),c=Sp(d,c)|0,rf[s&31](l,c),bp(d),C=f}function N4e(s,l){s=s|0,l=l|0}function O4e(s,l){return s=s|0,l=l|0,M4e(l)|0}function M4e(s){return s=s|0,s|0}function U4e(){var s=0;return o[8080]|0||($5(11040),rr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Tr(11040)|0||$5(11040),11040}function $5(s){s=s|0,q4e(s),Fg(s,71)}function _4e(s){s=s|0,H4e(s+24|0)}function H4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function q4e(s){s=s|0;var l=0;l=Kr()|0,zr(s,5,7,l,W4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function G4e(s){s=s|0,j4e(s)}function j4e(s){s=s|0,Y4e(s)}function Y4e(s){s=s|0,o[s+8>>0]=1}function W4e(){return 1936}function K4e(){return z4e()|0}function z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],V4e(f,m,d),n[c>>2]=f,C=l,s|0}function V4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function J4e(s){s=s|0,Jm(s),gt(s)}function X4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function Z4e(s){s=s|0,gt(s)}function $4e(){var s=0;return o[8088]|0||(oUe(11076),rr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function eUe(s,l){s=s|0,l=l|0,n[s>>2]=tUe()|0,n[s+4>>2]=rUe()|0,n[s+12>>2]=l,n[s+8>>2]=nUe()|0,n[s+32>>2]=10}function tUe(){return 11745}function rUe(){return 1940}function nUe(){return aD()|0}function iUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(sUe(c),gt(c)):l|0&>(l)}function sUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function oUe(s){s=s|0,Dp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function BR(s){return s=s|0,n[s>>2]|0}function aUe(s){return s=s|0,o[n[s>>2]>>0]|0}function lUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],cUe(l,f)|0,C=c}function cUe(s,l){s=s|0,l=l|0;var c=0;return c=uUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function uUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,za(f),s=da(s)|0,l=AUe(s,n[l>>2]|0)|0,Va(f),C=c,l|0}function za(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function AUe(s,l){s=s|0,l=l|0;var c=0;return c=Sl(fUe()|0)|0,Qn(0,c|0,s|0,dR(l)|0)|0}function Va(s){s=s|0,q5(n[s>>2]|0,n[s+4>>2]|0)}function fUe(){var s=0;return o[8096]|0||(pUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function pUe(s){s=s|0,bl(s,hUe()|0,1)}function hUe(){return 1948}function gUe(){dUe()}function dUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0;if(Me=C,C=C+16|0,O=Me+4|0,G=Me,Li(65536,10804,n[2702]|0,10812),c=B5()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;Ac(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=v5()|0,l=n[s>>2]|0,l|0)do Au(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);Au(mUe()|0,5167),M=Ym()|0,s=n[M>>2]|0;e:do if(s|0){do yUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(EUe(d)|0);)if(n[G>>2]=Q,n[O>>2]=n[G>>2],CUe(M,O)|0,!s)break e;if(wUe(d),Q=n[Q>>2]|0,l=e7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(N5(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Wm(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=Wm(d)|0,l=IUe(d)|0,c=e7(d)|0,f=BUe(d)|0,fu(Qe|0,l|0,B|0,k|0,c|0,f|0,uR(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(AR()|0)>>2]|0,s|0)do Qe=s+4|0,M=fR(Qe)|0,d=Ow(M)|0,m=Lw(M)|0,B=(Nw(M)|0)+1|0,k=fD(M)|0,Q=t7(Qe)|0,M=Tr(M)|0,O=cD(Qe)|0,G=vR(Qe)|0,Cl(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,G|0,DR(Qe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Ym()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Wm(l)|0)>>2]|0,je=n[(O5(l)|0)>>2]|0,je|0)){c=je;do{l=c+4|0,f=fR(l)|0;r:do if(f|0)switch(Tr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Ow(f)|0,Q=Lw(f)|0,M=(Nw(f)|0)+1|0,O=fD(f)|0,G=Tr(f)|0,Qe=cD(l)|0,Cl(se|0,k|0,Q|0,M|0,O|0,0,G|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 1:{B=Ow(f)|0,k=Lw(f)|0,Q=(Nw(f)|0)+1|0,M=fD(f)|0,O=t7(l)|0,G=Tr(f)|0,Qe=cD(l)|0,Cl(se|0,B|0,k|0,Q|0,M|0,O|0,G|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 5:{M=Ow(f)|0,O=Lw(f)|0,G=(Nw(f)|0)+1|0,Qe=fD(f)|0,Cl(se|0,M|0,O|0,G|0,Qe|0,vUe(f)|0,Tr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Rt()}while(0);Ce(),C=Me}function mUe(){return 11703}function yUe(s){s=s|0,o[s+40>>0]=0}function EUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function CUe(s,l){return s=s|0,l=l|0,l=DUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function wUe(s){s=s|0,o[s+40>>0]=1}function e7(s){return s=s|0,n[s+20>>2]|0}function IUe(s){return s=s|0,n[s+8>>2]|0}function BUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function t7(s){return s=s|0,n[s+4>>2]|0}function vR(s){return s=s|0,n[s+8>>2]|0}function DR(s){return s=s|0,n[s+16>>2]|0}function vUe(s){return s=s|0,n[s+20>>2]|0}function DUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Nt=0;Nt=C,C=C+16|0,se=Nt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,G=n[2783]|0,c=G>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=G&~(1<>2]=s,n[c>>2]=m),Ge=l<<3,n[f+4>>2]=Ge|3,Ge=f+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1,Ge=d,C=Nt,Ge|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=G&~(1<>2]=l,n[s>>2]=c,s=G),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,Ge=B,C=Nt,Ge|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(Ge=m+M|0,n[Q+4>>2]=Ge|3,Ge=Q+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=G|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),Ge=Q+8|0,C=Nt,Ge|0}else G=M}else G=M}else G=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(G=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|G|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,G=G>>>B,m=G>>>5&8,G=G>>>m,k=G>>>2&4,G=G>>>k,O=G>>>1&2,G=G>>>O,c=G>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(G>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,G=c>>>0>>0,c=G?c:f,s=G?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return Ge=0,C=Nt,Ge|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else Ge=n[k+8>>2]|0,n[Ge+12>>2]=l,n[l+8>>2]=Ge;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(lt|Ue|l)+(Ge<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=Ge,n[m+12>>2]=c,n[m+24>>2]=0;break}}else Ge=B+M|0,n[k+4>>2]=Ge|3,Ge=k+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1;while(0);return Ge=k+8|0,C=Nt,Ge|0}else G=M}else G=M;else G=-1;while(0);if(c=n[2785]|0,c>>>0>=G>>>0)return l=c-G|0,s=n[2788]|0,l>>>0>15?(Ge=s+G|0,n[2788]=Ge,n[2785]=l,n[Ge+4>>2]=l|1,n[Ge+l>>2]=l,n[s+4>>2]=G|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,Ge=s+c+4|0,n[Ge>>2]=n[Ge>>2]|1),Ge=s+8|0,C=Nt,Ge|0;if(B=n[2786]|0,B>>>0>G>>>0)return lt=B-G|0,n[2786]=lt,Ge=n[2789]|0,Ue=Ge+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,C=Nt,Ge|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=G+48|0,Q=G+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=G>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return Ge=0,C=Nt,Ge|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Fp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=Fp(0)|0,(c|0)!=-1&&(l=c,je=n[2902]|0,Me=je+-1|0,l=((Me&l|0)==0?0:(Me+l&0-je)-l|0)+M|0,je=n[2891]|0,Me=l+je|0,l>>>0>G>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Me>>>0<=je>>>0|Me>>>0>Qe>>>0){l=0;break}if(s=Fp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((Fp(s|0)|0)==-1){Fp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(lt=Fp(M|0)|0,Qe=Fp(0)|0,et=Qe-lt|0,Xe=et>>>0>(G+40|0)>>>0,!((lt|0)==-1|Xe^1|lt>>>0>>0&((lt|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?et:l,m=lt,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,Ge=Q+8|0,Ge=(Ge&7|0)==0?0:0-Ge&7,Ue=Q+Ge|0,Ge=(n[2786]|0)+(B-Ge)|0,n[2789]=Ue,n[2786]=Ge,n[Ue+4>>2]=Ge|1,n[Ue+Ge+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+G|0,k=l-O-G|0,n[O+4>>2]=G|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){Ge=(n[2785]|0)+k|0,n[2785]=Ge,n[2788]=M,n[M+4>>2]=Ge|1,n[M+Ge>>2]=Ge;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else Ge=n[l+8>>2]|0,n[Ge+12>>2]=s,n[s+8>>2]=Ge;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(lt|Ue|l)+(Ge<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=Ge,n[M+12>>2]=c,n[M+24>>2]=0;break}}else Ge=(n[2786]|0)+k|0,n[2786]=Ge,n[2789]=M,n[M+4>>2]=Ge|1;while(0);return Ge=O+8|0,C=Nt,Ge|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(Ge=s+(n[l+4>>2]|0)|0,Ge>>>0>Q>>>0));)l=n[l+8>>2]|0;d=Ge+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,c=14-(lt|Ue|c)+(Ge<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=Ge,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{Ge=n[2787]|0,(Ge|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do Ge=11172+(l<<1<<2)|0,n[Ge+12>>2]=Ge,n[Ge+8>>2]=Ge,l=l+1|0;while((l|0)!=32);Ge=m+8|0,Ge=(Ge&7|0)==0?0:0-Ge&7,Ue=m+Ge|0,Ge=B+-40-Ge|0,n[2789]=Ue,n[2786]=Ge,n[Ue+4>>2]=Ge|1,n[Ue+Ge+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>G>>>0)return lt=l-G|0,n[2786]=lt,Ge=n[2789]|0,Ue=Ge+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,C=Nt,Ge|0}return n[(zm()|0)>>2]=12,Ge=0,C=Nt,Ge|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function PUe(){return 11628}function SUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=kUe(n[s+60>>2]|0)|0,s=gD(gc(6,c|0)|0)|0,C=l,s|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0;G=C,C=C+48|0,M=G+16|0,m=G,d=G+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Ni(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,je=n[d+4>>2]|0,se=m>>>0>je>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,je=m-(se?je:0)|0,n[d>>2]=(n[d>>2]|0)+je,se=d+4|0,n[se>>2]=(n[se>>2]|0)-je,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=gD(Ni(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(je=n[s+44>>2]|0,n[s+16>>2]=je+(n[s+48>>2]|0),n[k>>2]=je,n[Q>>2]=je),C=G,c|0}function bUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(zm()|0)>>2]=0-s,s=-1),s|0}function zm(){return(xUe()|0)+64|0}function xUe(){return PR()|0}function PR(){return 2084}function kUe(s){return s=s|0,s|0}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,pu(54,f|0)|0)&&(o[s+75>>0]=-1),f=r7(s,l,c)|0,C=d,f|0}function n7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0;Qe=C,C=C+224|0,O=Qe+120|0,G=Qe+80|0,je=Qe,Me=Qe+136|0,f=G,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(SR(0,l,O,je,G)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=RUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=SR(s,l,O,je,G)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=SR(s,l,O,je,G)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&TUe(s),c=(f&32|0)==0?c:-1),C=Qe,c|0}function SR(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Nt=0,Mr=0,ar=0,Xt=0,Pr=0,Lr=0,sr=0;sr=C,C=C+64|0,ar=sr+16|0,Xt=sr,Nt=sr+24|0,Pr=sr+8|0,Lr=sr+20|0,n[ar>>2]=l,lt=(s|0)!=0,Ue=Nt+40|0,Ge=Ue,Nt=Nt+39|0,Mr=Pr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(zm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[ar>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[ar>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,lt&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Qe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Qe=-1,n[ar>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,G=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;G=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}lt?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[ar>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=s7(ar)|0,(B|0)<0){m=-1;break}Q=n[ar>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[ar>>2]=Q+1,k=s7(ar)|0,Q=n[ar>>2]|0;break}if(G=Q+2|0,k=(o[G>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[G>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[ar>>2]=Q;break}if(O|0){m=-1;break e}lt?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[ar>>2]=G,Q=G}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[ar>>2]=et,G=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=G&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(G<<24>>24)){m=-1;break}je=(Qe|0)>-1;do if(G<<24>>24==19)if(je){m=-1;break e}else Xe=49;else{if(je){n[d+(Qe<<2)>>2]=se,je=f+(Qe<<3)|0,Qe=n[je+4>>2]|0,Xe=Xt,n[Xe>>2]=n[je>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!lt){m=0;break e}o7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!lt)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,je=M&-65537,Qe=(M&8192|0)==0?M:je;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=NUe(l,Q,Ue)|0,je=Ge-se|0,M=0,G=5642,k=(Qe&8|0)==0|(k|0)>(je|0)?k:je+1|0,je=Qe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=Pe,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,G=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,G=(Qe&2048|0)==0?(Qe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,M=0,G=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Nt>>0]=n[Xt>>2],l=Nt,M=0,G=5642,se=Ue,Q=1,k=je;break}case 109:{Q=OUe(n[(zm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=UUe(s,+E[Xt>>3],B,k,Qe,Q)|0,l=et;continue e}default:M=0,G=5642,se=Ue,Q=k,k=Qe}while(0);t:do if((Xe|0)==61)Qe=Xt,Me=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,se=LUe(Me,Qe,Ue,Q&32)|0,G=(l&8|0)==0|(Me|0)==0&(Qe|0)==0,M=G?0:2,G=G?5642:5642+(Q>>4)|0,je=l,l=Me,Q=Qe,Xe=67;else if((Xe|0)==66)se=Vm(l,Q,Ue)|0,je=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=MUe(Q,0,k)|0,Me=(Qe|0)==0,l=Q,M=0,G=5642,se=Me?Q+k|0:Qe,Q=Me?k:Qe-Q|0,k=je;else if((Xe|0)==75){for(Xe=0,G=Q,l=0,k=0;M=n[G>>2]|0,!(!M||(k=a7(Lr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)G=G+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=a7(Lr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(ss(s,Lr,k),M>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Qe=(k|0)!=0|Q,Q=((Q^1)&1)+(Ge-se)|0,l=Qe?se:Ue,se=Ue,Q=Qe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?je&-65537:je;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,je=(Q|0)<(Me|0)?Me:Q,Qe=je+M|0,B=(B|0)<(Qe|0)?Qe:B,Bs(s,32,B,Qe,k),ss(s,G,M),Bs(s,48,B,Qe,k^65536),Bs(s,48,je,Me,0),ss(s,l,Me),Bs(s,32,B,Qe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(o7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=sr,m|0}function RUe(s){return s=s|0,0}function TUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||zUe(l,c,s)|0}function s7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function LUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=Pe;while(!((s|0)==0&(l|0)==0));return c|0}function NUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=Pe;while(!((s|0)==0&(l|0)==0));return c|0}function Vm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=QR(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=kR(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=Pe;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function OUe(s){return s=s|0,jUe(s,n[(GUe()|0)+188>>2]|0)|0}function MUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=qe(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Xm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function a7(s,l){return s=s|0,l=l|0,s?s=HUe(s,l,0)|0:s=0,s|0}function UUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Nt=0,Mr=0,ar=0,Xt=0,Pr=0,Lr=0,sr=0,xn=0;xn=C,C=C+560|0,Q=xn+8|0,et=xn,sr=xn+524|0,Lr=sr,M=xn+512|0,n[et>>2]=0,Pr=M+12|0,l7(l)|0,(Pe|0)<0?(l=-l,ar=1,Mr=5659):(ar=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),l7(l)|0,Xt=Pe&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(je=+_Ue(l,et)*2,B=je!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),lt=m|32,(lt|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,G=ar|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=je;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-je-l));break}else{l=je+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Vm(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=sr;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Lr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Lr|0,Lr=Pr-O|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Lr+G+Pr|0,Bs(s,32,c,B,d),ss(s,se,G),Bs(s,48,c,B,d^65536),ss(s,sr,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,O,Lr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=je*268435456):(l=je,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do Ge=~~l>>>0,n[Q>>2]=Ge,Q=Q+4|0,l=(l-+(Ge>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,G=Q;;){if(O=(B|0)<29?B:29,B=G+-4|0,B>>>0>=M>>>0){Q=0;do Ue=h7(n[B>>2]|0,0,O|0)|0,Ue=xR(Ue|0,Pe|0,Q|0,0)|0,Ge=Pe,Xe=QR(Ue|0,Ge|0,1e9,0)|0,n[B>>2]=Xe,Q=kR(Ue|0,Ge|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=G;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)G=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(lt|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do Ge=n[B>>2]|0,n[B>>2]=(Ge>>>Me)+se,se=qe(Ge&O,G)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Qe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(Ge=Xt,B>>>0>>0){if(Q=(Ge-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Qe=(lt|0)==103,Xe=(k|0)!=0,M=k-((lt|0)!=102?Q:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-Ge>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(G=n[Me>>2]|0,se=(G>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(je=(((G>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,ar&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,je=Ue?-je:je),M=G-se|0,n[Me>>2]=M,je+l!=je){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(Ge-B>>2)*9|0,G=n[B>>2]|0,G>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(G>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(lt=M;;){if(lt>>>0<=Ue>>>0){et=0;break}if(B=lt+-4|0,!(n[B>>2]|0))lt=B;else{et=1;break}}f=0-Q|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Nt=n[lt+-4>>2]|0,(Nt|0)!=0))if((Nt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Nt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((lt-Ge>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Qe=k|Me,G=(Qe|0)!=0&1,se=(O|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Vm(B,((B|0)<0)<<31>>31,Pr)|0,M=Pr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=ar+1+k+G+B|0,Bs(s,32,c,B,d),ss(s,Mr,ar),Bs(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=sr+9|0,G=Me,se=sr+8|0,M=O;do{if(Q=Vm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>sr>>>0){Xm(sr|0,48,Q-Lr|0)|0;do Q=Q+-1|0;while(Q>>>0>sr>>>0)}ss(s,Q,G-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Qe|0&&ss(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=Vm(n[M>>2]|0,0,Me)|0,Q>>>0>sr>>>0){Xm(sr|0,48,Q-Lr|0)|0;do Q=Q+-1|0;while(Q>>>0>sr>>>0)}if(ss(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Qe=et?lt:Ue+4|0,(k|0)>-1){et=sr+9|0,Me=(Me|0)==0,f=et,G=0-Lr|0,se=sr+8|0,O=Ue;do{Q=Vm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,ss(s,Q,1),Me&(k|0)<1){Q=M;break}ss(s,5710,1),Q=M}else{if(Q>>>0<=sr>>>0)break;Xm(sr|0,48,Q+G|0)|0;do Q=Q+-1|0;while(Q>>>0>sr>>>0)}while(0);Lr=f-Q|0,ss(s,Q,(k|0)>(Lr|0)?Lr:k),k=k-Lr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else sr=(m&32|0)!=0,B=ar+3|0,Bs(s,32,c,B,d&-65537),ss(s,Mr,ar),ss(s,l!=l|!1?sr?5686:5690:sr?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=xn,((B|0)<(c|0)?c:B)|0}function l7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,Pe=n[v+4>>2]|0,l|0}function _Ue(s,l){return s=+s,l=l|0,+ +c7(s,l)}function c7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+c7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function HUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(qUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(zm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(zm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function qUe(){return PR()|0}function GUe(){return PR()|0}function jUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return YUe(c,n[l+20>>2]|0)|0}function YUe(s,l){return s=s|0,l=l|0,WUe(s,l)|0}function WUe(s,l){return s=s|0,l=l|0,l?l=KUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function KUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Tg(n[s+8>>2]|0,se)|0,f=Tg(n[s+12>>2]|0,se)|0,d=Tg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(G=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(G=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+G|0,f=Tg(n[s+(d<<2)>>2]|0,se)|0,d=Tg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=n7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Tg(n[s+(f<<2)>>2]|0,se)|0,f=Tg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Tg(s,l){s=s|0,l=l|0;var c=0;return c=m7(s|0)|0,((l|0)==0?s:c)|0}function zUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:VUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function VUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=u7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=u7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Lg(s,l){s=y(s),l=y(l);var c=0,f=0;c=A7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=A7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function bR(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((JUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function JUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function XUe(s,l){return s=s|0,l=l|0,i7(n[582]|0,s,l)|0}function Jr(s){s=s|0,Rt()}function Jm(s){s=s|0}function ZUe(s,l){return s=s|0,l=l|0,0}function $Ue(s){return s=s|0,(f7(s+4|0)|0)==-1?(tf[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function f7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function Qp(s){s=s|0,$Ue(s)|0&&e3e(s)}function e3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(f7(l)|0)!=-1||tf[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=r3e()|0,!s){s=0;break}S7[s&0]()}return s|0}function p7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,hD(s)}function t3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function r3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function n3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,Pe=f,s-c>>>0|0|0}function xR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,Pe=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Xm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function h7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(Pe=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return fc(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function g7(s){s=s|0;var l=0;return l=o[N+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[N+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[N+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[N+(s>>>24)>>0]|0)+24|0))}function d7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,je=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,Pe=se,d|0):(se=0,d=0,Pe=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,Pe=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=31){G=m+1|0,k=31-m|0,l=m-31>>31,B=G,s=O>>>(G>>>0)&l|M<>>(G>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,Pe=se,d|0):(se=0,d=0,Pe=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(M|0)|0)|0,Me=64-k|0,G=32-k|0,Q=G>>31,je=k-32|0,l=je>>31,B=k,s=G-1>>31&M>>>(je>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(je>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(je=Q|l&0,Me=s|0|0,Pe=je,Me|0):(Me=g7(B|0)|0,je=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,Pe=je,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),je=0,Me=(M>>>0)/(B>>>0)>>>0,Pe=je,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),je=0,Me=(M>>>0)/(k>>>0)>>>0,Pe=je,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),je=0,Me=M>>>((g7(k|0)|0)>>>0),Pe=je,Me|0;if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,je=0,Me=0,Pe=je,Me|0):(je=0,Me=0,Pe=je,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{G=c|0|0,O=se|f&0,M=xR(G|0,O|0,-1,-1)|0,c=Pe,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(M|0,c|0,f|0,se|0)|0,Me=Pe,je=Me>>31|((Me|0)<0?-1:0)<<1,k=je&1,s=dD(f|0,se|0,je&G|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=Pe,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),je=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,Pe=je,Me|0}function kR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,d7(s,l,c,f,0)|0}function Fp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,DA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,DA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function QR(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,d7(s,l,c,f,d)|0,C=m,Pe=n[d+4>>2]|0,n[d>>2]|0|0}function m7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function i3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,y7[s&1](l|0,c|0,f|0,d|0,m|0)}function s3e(s,l,c){s=s|0,l=l|0,c=y(c),E7[s&1](l|0,y(c))}function o3e(s,l,c){s=s|0,l=l|0,c=+c,C7[s&31](l|0,+c)}function a3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(w7[s&0](l|0,y(c),y(f)))}function l3e(s,l){s=s|0,l=l|0,tf[s&127](l|0)}function c3e(s,l,c){s=s|0,l=l|0,c=c|0,rf[s&31](l|0,c|0)}function u3e(s,l){return s=s|0,l=l|0,Og[s&31](l|0)|0}function A3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,I7[s&1](l|0,+c,+f,d|0)}function f3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,W3e[s&1](l|0,+c,+f)}function p3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function h3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+K3e[s&1](l|0,c|0,f|0)}function g3e(s,l){return s=s|0,l=l|0,+B7[s&15](l|0)}function d3e(s,l,c){return s=s|0,l=l|0,c=+c,z3e[s&1](l|0,+c)|0}function m3e(s,l,c){return s=s|0,l=l|0,c=c|0,RR[s&15](l|0,c|0)|0}function y3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,V3e[s&1](l|0,c|0,+f,+d,m|0)}function E3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,J3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=c|0,+v7[s&7](l|0,c|0)}function w3e(s){return s=s|0,CD[s&7]()|0}function I3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,D7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function B3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,X3e[s&1](l|0,c|0,f|0,+d)}function v3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,P7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function D3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,Hw[s&15](l|0,c|0,f|0)}function P3e(s){s=s|0,S7[s&0]()}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,b7[s&15](l|0,c|0,+f)}function b3e(s,l,c){return s=s|0,l=+l,c=+c,Z3e[s&1](+l,+c)|0}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,TR[s&15](l|0,c|0,f|0,d|0)}function k3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function Q3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function F3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Uw(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function R3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function T3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function L3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function N3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Ng(s){return s=s|0,F(11),0}function O3e(s,l){return s=s|0,l=+l,F(12),0}function _w(s,l){return s=s|0,l=l|0,F(13),0}function M3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function U3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function FR(s,l){return s=s|0,l=l|0,F(16),0}function _3e(){return F(17),0}function H3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function G3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function j3e(){F(22)}function Zm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function Y3e(s,l){return s=+s,l=+l,F(24),0}function $m(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var y7=[k3e,HNe],E7=[Q3e,fo],C7=[ma,xw,kw,EF,CF,Pl,Qw,wF,qm,xu,Rw,IF,$v,KA,eD,Gm,tD,rD,jm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],w7=[F3e],tf=[Er,Jm,wDe,IDe,BDe,Zbe,$be,exe,dLe,mLe,yLe,bNe,xNe,kNe,J4e,X4e,Z4e,hs,zv,Hm,WA,Fw,mve,yve,ADe,QDe,GDe,aPe,BPe,_Pe,nSe,ySe,RSe,VSe,Abe,Sbe,Gbe,mxe,Rxe,Vxe,Ake,Ske,Gke,lQe,BQe,OQe,$Qe,bc,kFe,WFe,ARe,xRe,jRe,ATe,wTe,vTe,HTe,jTe,aLe,CLe,BLe,_Le,iNe,i9,UOe,dMe,QMe,WMe,h4e,x4e,_4e,G4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],rf=[Uw,fF,pF,bw,bu,hF,gF,vp,dF,mF,yF,Zv,zA,ze,ft,Wt,vr,Sn,Fr,vF,ive,Sve,fQe,PQe,RRe,qOe,fNe,q5,Uw,Uw,Uw,Uw],Og=[Ja,SUe,AF,D,Ae,De,vt,wt,xt,_r,di,po,tve,rve,Eve,rFe,zRe,GLe,WOe,Ka,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],I7=[R3e,Cve],W3e=[T3e,uLe],ED=[L3e,r7,bUe,QUe,jPe,wxe,TFe,JMe],K3e=[N3e,gbe],B7=[Ng,Yo,rt,bn,wve,Ive,Bve,vve,Dve,Pve,Ng,Ng,Ng,Ng,Ng,Ng],z3e=[O3e,yTe],RR=[_w,ZUe,nve,gDe,APe,oSe,wSe,Kbe,Oxe,HQe,Wv,LMe,_w,_w,_w,_w],V3e=[M3e,KDe],J3e=[U3e,y4e],v7=[FR,ai,bve,xve,kve,Qbe,FR,FR],CD=[_3e,Qve,Pw,ga,bTe,zTe,SLe,K4e],D7=[H3e,Cw],X3e=[q3e,gke],P7=[G3e,sve],Hw=[yD,T,is,tn,ho,SPe,NSe,Qke,Kke,_m,uOe,CMe,R4e,yD,yD,yD],S7=[j3e],b7=[Zm,Vv,Jv,Xv,YA,nD,BF,P,$xe,JFe,hTe,Zm,Zm,Zm,Zm,Zm],Z3e=[Y3e,hLe],TR=[$m,$Se,uFe,gRe,nTe,TTe,eLe,TLe,cNe,ZOe,iUe,$m,$m,$m,$m,$m];return{_llvm_bswap_i32:m7,dynCall_idd:b3e,dynCall_i:w3e,_i64Subtract:dD,___udivdi3:kR,dynCall_vif:s3e,setThrew:gu,dynCall_viii:D3e,_bitshift64Lshr:mD,_bitshift64Shl:h7,dynCall_vi:l3e,dynCall_viiddi:y3e,dynCall_diii:h3e,dynCall_iii:m3e,_memset:Xm,_sbrk:Fp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Um,dynCall_vii:c3e,___uremdi3:QR,dynCall_vid:o3e,stackAlloc:lo,_nbind_init:gUe,getTempRet0:Ha,dynCall_di:g3e,dynCall_iid:d3e,setTempRet0:xA,_i64Add:xR,dynCall_fiff:a3e,dynCall_iiii:p3e,_emscripten_get_global_libc:PUe,dynCall_viid:S3e,dynCall_viiid:B3e,dynCall_viififi:v3e,dynCall_ii:u3e,__GLOBAL__sub_I_Binding_cc:QOe,dynCall_viiii:x3e,dynCall_iiiiii:I3e,stackSave:dc,dynCall_viiiii:i3e,__GLOBAL__sub_I_nbind_cc:Fve,dynCall_vidd:f3e,_free:hD,runPostSets:n3e,dynCall_viiiiii:E3e,establishStackSpace:qi,_memmove:Mw,stackRestore:hu,_malloc:pD,__GLOBAL__sub_I_common_cc:XLe,dynCall_viddi:A3e,dynCall_dii:C3e,dynCall_v:P3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var lm=_((IKt,NEe)=>{"use strict";var Yyt=TEe(),Wyt=LEe(),x6=!1,k6=null;Wyt({},function(t,e){if(!x6){if(x6=!0,t)throw t;k6=e}});if(!x6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=Yyt(k6.bind,k6.lib)});var F6=_((BKt,Q6)=>{"use strict";var OEe=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);Q6.exports=OEe;Q6.exports.default=OEe});var UEe=_((vKt,MEe)=>{"use strict";MEe.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 Kk=_((DKt,R6)=>{"use strict";var Kyt=NP(),zyt=F6(),Vyt=UEe(),_Ee=t=>{if(typeof t!="string"||t.length===0||(t=Kyt(t),t.length===0))return 0;t=t.replace(Vyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=zyt(o)?2:1)}return e};R6.exports=_Ee;R6.exports.default=_Ee});var L6=_((PKt,T6)=>{"use strict";var Jyt=Kk(),HEe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,Jyt(r));return e};T6.exports=HEe;T6.exports.default=HEe});var qEe=_(cB=>{"use strict";var Xyt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var Zyt=Xyt(L6()),N6={};cB.default=t=>{if(t.length===0)return{width:0,height:0};if(N6[t])return N6[t];let e=Zyt.default(t),r=t.split(` -`).length;return N6[t]={width:e,height:r},{width:e,height:r}}});var GEe=_(uB=>{"use strict";var $yt=uB&&uB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uB,"__esModule",{value:!0});var dn=$yt(lm()),eEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},tEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},rEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},nEt=(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(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.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(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},iEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},sEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},oEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};uB.default=(t,e={})=>{eEt(t,e),tEt(t,e),rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e),oEt(t,e)}});var WEe=_((xKt,YEe)=>{"use strict";var AB=Kk(),aEt=NP(),lEt=DI(),M6=new Set(["\x1B","\x9B"]),cEt=39,jEe=t=>`${M6.values().next().value}[${t}m`,uEt=t=>t.split(" ").map(e=>AB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=AB(aEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=AB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},AEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(AB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},fEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=uEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=AB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(AEt)),o=A.join(` -`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===cEt?null:I}let E=lEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`).length)};return n.clear=()=>{t.write(oEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(aEe.default.show(),a=!1)},n};iB.default={create:Uyt}});var uEe=_((pKt,_yt)=>{_yt.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 pEe=_(dl=>{"use strict";var fEe=uEe(),hA=process.env;Object.defineProperty(dl,"_vendors",{value:fEe.map(function(t){return t.constant})});dl.name=null;dl.isPR=null;fEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return AEe(o)});if(dl[t.constant]=r,r)switch(dl.name=t.name,typeof t.pr){case"string":dl.isPR=!!hA[t.pr];break;case"object":"env"in t.pr?dl.isPR=t.pr.env in hA&&hA[t.pr.env]!==t.pr.ne:"any"in t.pr?dl.isPR=t.pr.any.some(function(o){return!!hA[o]}):dl.isPR=AEe(t.pr);break;default:dl.isPR=null}});dl.isCI=!!(hA.CI||hA.CONTINUOUS_INTEGRATION||hA.BUILD_NUMBER||hA.RUN_ID||dl.name);function AEe(t){return typeof t=="string"?!!hA[t]:Object.keys(t).every(function(e){return hA[e]===t[e]})}});var gEe=_((gKt,hEe)=>{"use strict";hEe.exports=pEe().isCI});var mEe=_((dKt,dEe)=>{"use strict";var Hyt=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};dEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Hyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var vEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var MC,aB,qk,Gk,I6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,d6=null,m6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(m6,0),e}},yEe=Date.now(),kn.unstable_now=function(){return Date.now()-yEe},MC=function(t){OC!==null?setTimeout(MC,0,t):(OC=t,setTimeout(m6,0))},aB=function(t,e){d6=setTimeout(t,e)},qk=function(){clearTimeout(d6)},Gk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Mk=window.performance,y6=window.Date,EEe=window.setTimeout,CEe=window.clearTimeout,typeof console<"u"&&(wEe=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://fb.me/react-polyfills"),typeof wEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Mk=="object"&&typeof Mk.now=="function"?kn.unstable_now=function(){return Mk.now()}:(IEe=y6.now(),kn.unstable_now=function(){return y6.now()-IEe}),sB=!1,oB=null,Uk=-1,E6=5,C6=0,Gk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125Hk(u,r))p!==void 0&&0>Hk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>Hk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function Hk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var tu=[],E0=[],qyt=1,na=null,Lo=3,Yk=!1,om=!1,lB=!1;function Wk(t){for(var e=ic(E0);e!==null;){if(e.callback===null)jk(E0);else if(e.startTime<=t)jk(E0),e.sortIndex=e.expirationTime,B6(tu,e);else break;e=ic(E0)}}function v6(t){if(lB=!1,Wk(t),!om)if(ic(tu)!==null)om=!0,MC(P6);else{var e=ic(E0);e!==null&&aB(v6,e.startTime-t)}}function P6(t,e){om=!1,lB&&(lB=!1,qk()),Yk=!0;var r=Lo;try{for(Wk(e),na=ic(tu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===ic(tu)&&jk(tu),Wk(e)}else jk(tu);na=ic(tu)}if(na!==null)var n=!0;else{var u=ic(E0);u!==null&&aB(v6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Yk=!1}}function BEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Gyt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(E0,t),ic(tu)===null&&t===ic(E0)&&(lB?qk():lB=!0,aB(v6,a-o))):(t.sortIndex=r,B6(tu,t),om||Yk||(om=!0,MC(P6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Wk(t);var e=ic(tu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";PEe.exports=vEe()});var DEe=_((EKt,cB)=>{cB.exports=function t(e){"use strict";var r=$H(),o=an(),a=D6();function n(D){for(var P="https://reactjs.org/docs/error-decoder.html?invariant="+D,T=1;Too||(D.current=El[oo],El[oo]=null,oo--)}function On(D,P){oo++,El[oo]=D.current,D.current=P}var Li={},Mn={current:Li},_i={current:!1},ir=Li;function Oe(D,P){var T=D.type.contextTypes;if(!T)return Li;var q=D.stateNode;if(q&&q.__reactInternalMemoizedUnmaskedChildContext===P)return q.__reactInternalMemoizedMaskedChildContext;var W={},Ae;for(Ae in T)W[Ae]=P[Ae];return q&&(D=D.stateNode,D.__reactInternalMemoizedUnmaskedChildContext=P,D.__reactInternalMemoizedMaskedChildContext=W),W}function ii(D){return D=D.childContextTypes,D!=null}function Ua(D){zn(_i,D),zn(Mn,D)}function hr(D){zn(_i,D),zn(Mn,D)}function Ac(D,P,T){if(Mn.current!==Li)throw Error(n(168));On(Mn,P,D),On(_i,T,D)}function Au(D,P,T){var q=D.stateNode;if(D=P.childContextTypes,typeof q.getChildContext!="function")return T;q=q.getChildContext();for(var W in q)if(!(W in D))throw Error(n(108,de(P)||"Unknown",W));return r({},T,{},q)}function fc(D){var P=D.stateNode;return P=P&&P.__reactInternalMemoizedMergedChildContext||Li,ir=Mn.current,On(Mn,P,D),On(_i,_i.current,D),!0}function Cl(D,P,T){var q=D.stateNode;if(!q)throw Error(n(169));T?(P=Au(D,P,ir),q.__reactInternalMemoizedMergedChildContext=P,zn(_i,D),zn(Mn,D),On(Mn,P,D)):zn(_i,D),On(_i,T,D)}var PA=a.unstable_runWithPriority,fu=a.unstable_scheduleCallback,we=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,pc=a.unstable_requestPaint,Hi=a.unstable_now,pu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,wl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,Ap=a.unstable_LowPriority,hc=a.unstable_IdlePriority,SA={},Qn=pc!==void 0?pc:function(){},hi=null,gc=null,bA=!1,sa=Hi(),Ni=1e4>sa?Hi:function(){return Hi()-sa};function Uo(){switch(pu()){case Yt:return 99;case wl:return 98;case DA:return 97;case Ap:return 96;case hc:return 95;default:throw Error(n(332))}}function Xe(D){switch(D){case 99:return Yt;case 98:return wl;case 97:return DA;case 96:return Ap;case 95:return hc;default:throw Error(n(332))}}function ao(D,P){return D=Xe(D),PA(D,P)}function dc(D,P,T){return D=Xe(D),fu(D,P,T)}function hu(D){return hi===null?(hi=[D],gc=fu(Yt,gu)):hi.push(D),SA}function qi(){if(gc!==null){var D=gc;gc=null,we(D)}gu()}function gu(){if(!bA&&hi!==null){bA=!0;var D=0;try{var P=hi;ao(99,function(){for(;D=P&&(qo=!0),D.firstContext=null)}function Es(D,P){if(aa!==D&&P!==!1&&P!==0)if((typeof P!="number"||P===1073741823)&&(aa=D,P=1073741823),P={context:D,observedBits:P,next:null},Hs===null){if(lo===null)throw Error(n(308));Hs=P,lo.dependencies={expirationTime:0,firstContext:P,responders:null}}else Hs=Hs.next=P;return b?D._currentValue:D._currentValue2}var qs=!1;function Un(D){return{baseState:D,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Dn(D){return{baseState:D.baseState,firstUpdate:D.firstUpdate,lastUpdate:D.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Cs(D,P){return{expirationTime:D,suspenseConfig:P,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(D,P){D.lastUpdate===null?D.firstUpdate=D.lastUpdate=P:(D.lastUpdate.next=P,D.lastUpdate=P)}function tt(D,P){var T=D.alternate;if(T===null){var q=D.updateQueue,W=null;q===null&&(q=D.updateQueue=Un(D.memoizedState))}else q=D.updateQueue,W=T.updateQueue,q===null?W===null?(q=D.updateQueue=Un(D.memoizedState),W=T.updateQueue=Un(T.memoizedState)):q=D.updateQueue=Dn(W):W===null&&(W=T.updateQueue=Dn(q));W===null||q===W?We(q,P):q.lastUpdate===null||W.lastUpdate===null?(We(q,P),We(W,P)):(We(q,P),W.lastUpdate=P)}function It(D,P){var T=D.updateQueue;T=T===null?D.updateQueue=Un(D.memoizedState):or(D,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=P:(T.lastCapturedUpdate.next=P,T.lastCapturedUpdate=P)}function or(D,P){var T=D.alternate;return T!==null&&P===T.updateQueue&&(P=D.updateQueue=Dn(P)),P}function $(D,P,T,q,W,Ae){switch(T.tag){case 1:return D=T.payload,typeof D=="function"?D.call(Ae,q,W):D;case 3:D.effectTag=D.effectTag&-4097|64;case 0:if(D=T.payload,W=typeof D=="function"?D.call(Ae,q,W):D,W==null)break;return r({},q,W);case 2:qs=!0}return q}function ye(D,P,T,q,W){qs=!1,P=or(D,P);for(var Ae=P.baseState,Pe=null,vt=0,wt=P.firstUpdate,xt=Ae;wt!==null;){var _r=wt.expirationTime;_rbn?(ai=Qr,Qr=null):ai=Qr.sibling;var tn=di(rt,Qr,At[bn],Wt);if(tn===null){Qr===null&&(Qr=ai);break}D&&Qr&&tn.alternate===null&&P(rt,Qr),ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn,Qr=ai}if(bn===At.length)return T(rt,Qr),vr;if(Qr===null){for(;bnbn?(ai=Qr,Qr=null):ai=Qr.sibling;var po=di(rt,Qr,tn.value,Wt);if(po===null){Qr===null&&(Qr=ai);break}D&&Qr&&po.alternate===null&&P(rt,Qr),ze=Ae(po,ze,bn),Sn===null?vr=po:Sn.sibling=po,Sn=po,Qr=ai}if(tn.done)return T(rt,Qr),vr;if(Qr===null){for(;!tn.done;bn++,tn=At.next())tn=ss(rt,tn.value,Wt),tn!==null&&(ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn);return vr}for(Qr=q(rt,Qr);!tn.done;bn++,tn=At.next())tn=fo(Qr,rt,bn,tn.value,Wt),tn!==null&&(D&&tn.alternate!==null&&Qr.delete(tn.key===null?bn:tn.key),ze=Ae(tn,ze,bn),Sn===null?vr=tn:Sn.sibling=tn,Sn=tn);return D&&Qr.forEach(function(PR){return P(rt,PR)}),vr}return function(rt,ze,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=ze;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){T(rt,vr.sibling),ze=W(vr,At.type===E?At.props.children:At.props,Wt),ze.ref=QA(rt,vr,At),ze.return=rt,rt=ze;break e}else{T(rt,vr);break}else P(rt,vr);vr=vr.sibling}At.type===E?(ze=xu(At.props.children,rt.mode,Wt,At.key),ze.return=rt,rt=ze):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=QA(rt,ze,At),Wt.return=rt,rt=Wt)}return Pe(rt);case h:e:{for(vr=At.key;ze!==null;){if(ze.key===vr)if(ze.tag===4&&ze.stateNode.containerInfo===At.containerInfo&&ze.stateNode.implementation===At.implementation){T(rt,ze.sibling),ze=W(ze,At.children||[],Wt),ze.return=rt,rt=ze;break e}else{T(rt,ze);break}else P(rt,ze);ze=ze.sibling}ze=Qw(At,rt.mode,Wt),ze.return=rt,rt=ze}return Pe(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,ze!==null&&ze.tag===6?(T(rt,ze.sibling),ze=W(ze,At,Wt),ze.return=rt,rt=ze):(T(rt,ze),ze=kw(At,rt.mode,Wt),ze.return=rt,rt=ze),Pe(rt);if(kA(At))return zA(rt,ze,At,Wt);if(ce(At))return jo(rt,ze,At,Wt);if(Sn&&fp(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,ze)}}var du=sg(!0),og=sg(!1),mu={},co={current:mu},RA={current:mu},yc={current:mu};function ca(D){if(D===mu)throw Error(n(174));return D}function ag(D,P){On(yc,P,D),On(RA,D,D),On(co,mu,D),P=ne(P),zn(co,D),On(co,P,D)}function Ec(D){zn(co,D),zn(RA,D),zn(yc,D)}function Dm(D){var P=ca(yc.current),T=ca(co.current);P=ee(T,D.type,P),T!==P&&(On(RA,D,D),On(co,P,D))}function lg(D){RA.current===D&&(zn(co,D),zn(RA,D))}var ei={current:0};function pp(D){for(var P=D;P!==null;){if(P.tag===13){var T=P.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Ms(T)||io(T)))return P}else if(P.tag===19&&P.memoizedProps.revealOrder!==void 0){if((P.effectTag&64)!==0)return P}else if(P.child!==null){P.child.return=P,P=P.child;continue}if(P===D)break;for(;P.sibling===null;){if(P.return===null||P.return===D)return null;P=P.return}P.sibling.return=P.return,P=P.sibling}return null}function cg(D,P){return{responder:D,props:P}}var FA=u.ReactCurrentDispatcher,Gs=u.ReactCurrentBatchConfig,yu=0,qa=null,ji=null,ua=null,Eu=null,ws=null,Cc=null,wc=0,Y=null,Pt=0,Il=!1,xi=null,Ic=0;function ct(){throw Error(n(321))}function Cu(D,P){if(P===null)return!1;for(var T=0;Twc&&(wc=_r,_m(wc))):(Pw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===D?wt.eagerState:D(Ae,wt.action)),Pe=wt,wt=wt.next}while(wt!==null&&wt!==q);xt||(vt=Pe,W=Ae),ds(Ae,P.memoizedState)||(qo=!0),P.memoizedState=Ae,P.baseUpdate=vt,P.baseState=W,T.lastRenderedState=Ae}return[P.memoizedState,T.dispatch]}function Ag(D){var P=TA();return typeof D=="function"&&(D=D()),P.memoizedState=P.baseState=D,D=P.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:D},D=D.dispatch=dg.bind(null,qa,D),[P.memoizedState,D]}function fg(D){return Is(Br,D)}function pg(D,P,T,q){return D={tag:D,create:P,destroy:T,deps:q,next:null},Y===null?(Y={lastEffect:null},Y.lastEffect=D.next=D):(P=Y.lastEffect,P===null?Y.lastEffect=D.next=D:(T=P.next,P.next=D,D.next=T,Y.lastEffect=D)),D}function gp(D,P,T,q){var W=TA();Pt|=D,W.memoizedState=pg(P,T,void 0,q===void 0?null:q)}function Bc(D,P,T,q){var W=hp();q=q===void 0?null:q;var Ae=void 0;if(ji!==null){var Pe=ji.memoizedState;if(Ae=Pe.destroy,q!==null&&Cu(q,Pe.deps)){pg(0,T,Ae,q);return}}Pt|=D,W.memoizedState=pg(P,T,Ae,q)}function Ct(D,P){return gp(516,192,D,P)}function Sm(D,P){return Bc(516,192,D,P)}function hg(D,P){if(typeof P=="function")return D=D(),P(D),function(){P(null)};if(P!=null)return D=D(),P.current=D,function(){P.current=null}}function gg(){}function wu(D,P){return TA().memoizedState=[D,P===void 0?null:P],D}function bm(D,P){var T=hp();P=P===void 0?null:P;var q=T.memoizedState;return q!==null&&P!==null&&Cu(P,q[1])?q[0]:(T.memoizedState=[D,P],D)}function dg(D,P,T){if(!(25>Ic))throw Error(n(301));var q=D.alternate;if(D===qa||q!==null&&q===qa)if(Il=!0,D={expirationTime:yu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},xi===null&&(xi=new Map),T=xi.get(P),T===void 0)xi.set(P,D);else{for(P=T;P.next!==null;)P=P.next;P.next=D}else{var W=ga(),Ae=pt.suspense;W=qA(W,D,Ae),Ae={expirationTime:W,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var Pe=P.last;if(Pe===null)Ae.next=Ae;else{var vt=Pe.next;vt!==null&&(Ae.next=vt),Pe.next=Ae}if(P.last=Ae,D.expirationTime===0&&(q===null||q.expirationTime===0)&&(q=P.lastRenderedReducer,q!==null))try{var wt=P.lastRenderedState,xt=q(wt,T);if(Ae.eagerReducer=q,Ae.eagerState=xt,ds(xt,wt))return}catch{}finally{}bc(D,W)}}var Iu={readContext:Es,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},mw={readContext:Es,useCallback:wu,useContext:Es,useEffect:Ct,useImperativeHandle:function(D,P,T){return T=T!=null?T.concat([D]):null,gp(4,36,hg.bind(null,P,D),T)},useLayoutEffect:function(D,P){return gp(4,36,D,P)},useMemo:function(D,P){var T=TA();return P=P===void 0?null:P,D=D(),T.memoizedState=[D,P],D},useReducer:function(D,P,T){var q=TA();return P=T!==void 0?T(P):P,q.memoizedState=q.baseState=P,D=q.queue={last:null,dispatch:null,lastRenderedReducer:D,lastRenderedState:P},D=D.dispatch=dg.bind(null,qa,D),[q.memoizedState,D]},useRef:function(D){var P=TA();return D={current:D},P.memoizedState=D},useState:Ag,useDebugValue:gg,useResponder:cg,useDeferredValue:function(D,P){var T=Ag(D),q=T[0],W=T[1];return Ct(function(){a.unstable_next(function(){var Ae=Gs.suspense;Gs.suspense=P===void 0?null:P;try{W(D)}finally{Gs.suspense=Ae}})},[D,P]),q},useTransition:function(D){var P=Ag(!1),T=P[0],q=P[1];return[wu(function(W){q(!0),a.unstable_next(function(){var Ae=Gs.suspense;Gs.suspense=D===void 0?null:D;try{q(!1),W()}finally{Gs.suspense=Ae}})},[D,T]),T]}},xm={readContext:Es,useCallback:bm,useContext:Es,useEffect:Sm,useImperativeHandle:function(D,P,T){return T=T!=null?T.concat([D]):null,Bc(4,36,hg.bind(null,P,D),T)},useLayoutEffect:function(D,P){return Bc(4,36,D,P)},useMemo:function(D,P){var T=hp();P=P===void 0?null:P;var q=T.memoizedState;return q!==null&&P!==null&&Cu(P,q[1])?q[0]:(D=D(),T.memoizedState=[D,P],D)},useReducer:Is,useRef:function(){return hp().memoizedState},useState:fg,useDebugValue:gg,useResponder:cg,useDeferredValue:function(D,P){var T=fg(D),q=T[0],W=T[1];return Sm(function(){a.unstable_next(function(){var Ae=Gs.suspense;Gs.suspense=P===void 0?null:P;try{W(D)}finally{Gs.suspense=Ae}})},[D,P]),q},useTransition:function(D){var P=fg(!1),T=P[0],q=P[1];return[bm(function(W){q(!0),a.unstable_next(function(){var Ae=Gs.suspense;Gs.suspense=D===void 0?null:D;try{q(!1),W()}finally{Gs.suspense=Ae}})},[D,T]),T]}},Aa=null,vc=null,Bl=!1;function Bu(D,P){var T=Dl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=P,T.return=D,T.effectTag=8,D.lastEffect!==null?(D.lastEffect.nextEffect=T,D.lastEffect=T):D.firstEffect=D.lastEffect=T}function mg(D,P){switch(D.tag){case 5:return P=no(P,D.type,D.pendingProps),P!==null?(D.stateNode=P,!0):!1;case 6:return P=Si(P,D.pendingProps),P!==null?(D.stateNode=P,!0):!1;case 13:return!1;default:return!1}}function LA(D){if(Bl){var P=vc;if(P){var T=P;if(!mg(D,P)){if(P=uc(T),!P||!mg(D,P)){D.effectTag=D.effectTag&-1025|2,Bl=!1,Aa=D;return}Bu(Aa,T)}Aa=D,vc=uu(P)}else D.effectTag=D.effectTag&-1025|2,Bl=!1,Aa=D}}function dp(D){for(D=D.return;D!==null&&D.tag!==5&&D.tag!==3&&D.tag!==13;)D=D.return;Aa=D}function Ga(D){if(!y||D!==Aa)return!1;if(!Bl)return dp(D),Bl=!0,!1;var P=D.type;if(D.tag!==5||P!=="head"&&P!=="body"&&!Qe(P,D.memoizedProps))for(P=vc;P;)Bu(D,P),P=uc(P);if(dp(D),D.tag===13){if(!y)throw Error(n(316));if(D=D.memoizedState,D=D!==null?D.dehydrated:null,!D)throw Error(n(317));vc=Us(D)}else vc=Aa?uc(D.stateNode):null;return!0}function yg(){y&&(vc=Aa=null,Bl=!1)}var mp=u.ReactCurrentOwner,qo=!1;function Bs(D,P,T,q){P.child=D===null?og(P,null,T,q):du(P,D.child,T,q)}function Ii(D,P,T,q,W){T=T.render;var Ae=P.ref;return ys(P,W),q=ug(D,P,T,q,Ae,W),D!==null&&!qo?(P.updateQueue=D.updateQueue,P.effectTag&=-517,D.expirationTime<=W&&(D.expirationTime=0),si(D,P,W)):(P.effectTag|=1,Bs(D,P,q,W),P.child)}function km(D,P,T,q,W,Ae){if(D===null){var Pe=T.type;return typeof Pe=="function"&&!xw(Pe)&&Pe.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(P.tag=15,P.type=Pe,Qm(D,P,Pe,q,W,Ae)):(D=Hm(T.type,null,q,null,P.mode,Ae),D.ref=P.ref,D.return=P,P.child=D)}return Pe=D.child,WP)&&HA.set(D,P)))}}function Dg(D,P){D.expirationTimeD?P:D)}function Ao(D){if(D.lastExpiredTime!==0)D.callbackExpirationTime=1073741823,D.callbackPriority=99,D.callbackNode=hu(vw.bind(null,D));else{var P=Um(D),T=D.callbackNode;if(P===0)T!==null&&(D.callbackNode=null,D.callbackExpirationTime=0,D.callbackPriority=90);else{var q=ga();if(P===1073741823?q=99:P===1||P===2?q=95:(q=10*(1073741821-P)-10*(1073741821-q),q=0>=q?99:250>=q?98:5250>=q?97:95),T!==null){var W=D.callbackPriority;if(D.callbackExpirationTime===P&&W>=q)return;T!==SA&&we(T)}D.callbackExpirationTime=P,D.callbackPriority=q,P=P===1073741823?hu(vw.bind(null,D)):dc(q,Kv.bind(null,D),{timeout:10*(1073741821-P)-Ni()}),D.callbackNode=P}}}function Kv(D,P){if(Mm=0,P)return P=ga(),qm(D,P),Ao(D),null;var T=Um(D);if(T!==0){if(P=D.callbackNode,(yr&(ns|js))!==En)throw Error(n(327));if(vp(),D===gi&&T===is||Su(D,T),Or!==null){var q=yr;yr|=ns;var W=jA(D);do try{hR();break}catch(vt){GA(D,vt)}while(1);if(la(),yr=q,wp.current=W,Yi===Tm)throw P=Lm,Su(D,T),KA(D,T),Ao(D),P;if(Or===null)switch(W=D.finishedWork=D.current.alternate,D.finishedExpirationTime=T,q=Yi,gi=null,q){case vu:case Tm:throw Error(n(345));case Bi:qm(D,2=T){D.lastPingedTime=T,Su(D,T);break}}if(Ae=Um(D),Ae!==0&&Ae!==T)break;if(q!==0&&q!==T){D.lastPingedTime=q;break}D.timeoutHandle=be(bu.bind(null,D),W);break}bu(D);break;case Pl:if(KA(D,T),q=D.lastSuspendedTime,T===q&&(D.nextKnownPendingLevel=Dw(W)),UA&&(W=D.lastPingedTime,W===0||W>=T)){D.lastPingedTime=T,Su(D,T);break}if(W=Um(D),W!==0&&W!==T)break;if(q!==0&&q!==T){D.lastPingedTime=q;break}if(MA!==1073741823?q=10*(1073741821-MA)-Ni():Wa===1073741823?q=0:(q=10*(1073741821-Wa)-5e3,W=Ni(),T=10*(1073741821-T)-W,q=W-q,0>q&&(q=0),q=(120>q?120:480>q?480:1080>q?1080:1920>q?1920:3e3>q?3e3:4320>q?4320:1960*Ew(q/1960))-q,T=q?q=0:(W=Pe.busyDelayMs|0,Ae=Ni()-(10*(1073741821-Ae)-(Pe.timeoutMs|0||5e3)),q=Ae<=W?0:W+q-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+yl(W))}Yi!==Sc&&(Yi=Bi),Ae=Cg(Ae,W),wt=q;do{switch(wt.tag){case 3:Pe=Ae,wt.effectTag|=4096,wt.expirationTime=P;var ze=Yv(wt,Pe,P);It(wt,ze);break e;case 1:Pe=Ae;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=P;var vr=Wv(wt,Pe,P);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=Xv(Or)}catch(Sn){P=Sn;continue}break}while(1)}function jA(){var D=wp.current;return wp.current=Iu,D===null?Iu:D}function Pw(D,P){DIp&&(Ip=D)}function pR(){for(;Or!==null;)Or=Jv(Or)}function hR(){for(;Or!==null&&!Tt();)Or=Jv(Or)}function Jv(D){var P=$v(D.alternate,D,is);return D.memoizedProps=D.pendingProps,P===null&&(P=Xv(D)),Cw.current=null,P}function Xv(D){Or=D;do{var P=Or.alternate;if(D=Or.return,(Or.effectTag&2048)===0){e:{var T=P;P=Or;var q=is,W=P.pendingProps;switch(P.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(P.type)&&Ua(P);break;case 3:Ec(P),hr(P),W=P.stateNode,W.pendingContext&&(W.context=W.pendingContext,W.pendingContext=null),(T===null||T.child===null)&&Ga(P)&&pa(P),vl(P);break;case 5:lg(P);var Ae=ca(yc.current);if(q=P.type,T!==null&&P.stateNode!=null)rs(T,P,q,W,Ae),T.ref!==P.ref&&(P.effectTag|=128);else if(W){if(T=ca(co.current),Ga(P)){if(W=P,!y)throw Error(n(175));T=cp(W.stateNode,W.type,W.memoizedProps,Ae,T,W),W.updateQueue=T,T=T!==null,T&&pa(P)}else{var Pe=ht(q,W,Ae,T,P);Pc(Pe,P,!1,!1),P.stateNode=Pe,at(Pe,q,W,Ae,T)&&pa(P)}P.ref!==null&&(P.effectTag|=128)}else if(P.stateNode===null)throw Error(n(166));break;case 6:if(T&&P.stateNode!=null)Yr(T,P,T.memoizedProps,W);else{if(typeof W!="string"&&P.stateNode===null)throw Error(n(166));if(T=ca(yc.current),Ae=ca(co.current),Ga(P)){if(T=P,!y)throw Error(n(176));(T=up(T.stateNode,T.memoizedProps,T))&&pa(P)}else P.stateNode=je(W,T,Ae,P)}break;case 11:break;case 13:if(zn(ei,P),W=P.memoizedState,(P.effectTag&64)!==0){P.expirationTime=q;break e}W=W!==null,Ae=!1,T===null?P.memoizedProps.fallback!==void 0&&Ga(P):(q=T.memoizedState,Ae=q!==null,W||q===null||(q=T.child.sibling,q!==null&&(Pe=P.firstEffect,Pe!==null?(P.firstEffect=q,q.nextEffect=Pe):(P.firstEffect=P.lastEffect=q,q.nextEffect=null),q.effectTag=8))),W&&!Ae&&(P.mode&2)!==0&&(T===null&&P.memoizedProps.unstable_avoidThisFallback!==!0||(ei.current&1)!==0?Yi===vu&&(Yi=ha):((Yi===vu||Yi===ha)&&(Yi=Pl),Ip!==0&&gi!==null&&(KA(gi,is),tP(gi,Ip)))),S&&W&&(P.effectTag|=4),w&&(W||Ae)&&(P.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Ec(P),vl(P);break;case 10:wi(P);break;case 9:break;case 14:break;case 17:ii(P.type)&&Ua(P);break;case 19:if(zn(ei,P),W=P.memoizedState,W===null)break;if(Ae=(P.effectTag&64)!==0,Pe=W.rendering,Pe===null){if(Ae)Dc(W,!1);else if(Yi!==vu||T!==null&&(T.effectTag&64)!==0)for(T=P.child;T!==null;){if(Pe=pp(T),Pe!==null){for(P.effectTag|=64,Dc(W,!1),T=Pe.updateQueue,T!==null&&(P.updateQueue=T,P.effectTag|=4),W.lastEffect===null&&(P.firstEffect=null),P.lastEffect=W.lastEffect,T=q,W=P.child;W!==null;)Ae=W,q=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,Pe=Ae.alternate,Pe===null?(Ae.childExpirationTime=0,Ae.expirationTime=q,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=Pe.childExpirationTime,Ae.expirationTime=Pe.expirationTime,Ae.child=Pe.child,Ae.memoizedProps=Pe.memoizedProps,Ae.memoizedState=Pe.memoizedState,Ae.updateQueue=Pe.updateQueue,q=Pe.dependencies,Ae.dependencies=q===null?null:{expirationTime:q.expirationTime,firstContext:q.firstContext,responders:q.responders}),W=W.sibling;On(ei,ei.current&1|2,P),P=P.child;break e}T=T.sibling}}else{if(!Ae)if(T=pp(Pe),T!==null){if(P.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(P.updateQueue=T,P.effectTag|=4),Dc(W,!0),W.tail===null&&W.tailMode==="hidden"&&!Pe.alternate){P=P.lastEffect=W.lastEffect,P!==null&&(P.nextEffect=null);break}}else Ni()>W.tailExpiration&&1W&&(W=q),Pe>W&&(W=Pe),Ae=Ae.sibling;T.childExpirationTime=W}if(P!==null)return P;D!==null&&(D.effectTag&2048)===0&&(D.firstEffect===null&&(D.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(D.lastEffect!==null&&(D.lastEffect.nextEffect=Or.firstEffect),D.lastEffect=Or.lastEffect),1D?P:D}function bu(D){var P=Uo();return ao(99,gR.bind(null,D,P)),null}function gR(D,P){do vp();while(vg!==null);if((yr&(ns|js))!==En)throw Error(n(327));var T=D.finishedWork,q=D.finishedExpirationTime;if(T===null)return null;if(D.finishedWork=null,D.finishedExpirationTime=0,T===D.current)throw Error(n(177));D.callbackNode=null,D.callbackExpirationTime=0,D.callbackPriority=90,D.nextKnownPendingLevel=0;var W=Dw(T);if(D.firstPendingTime=W,q<=D.lastSuspendedTime?D.firstSuspendedTime=D.lastSuspendedTime=D.nextKnownPendingLevel=0:q<=D.firstSuspendedTime&&(D.firstSuspendedTime=q-1),q<=D.lastPingedTime&&(D.lastPingedTime=0),q<=D.lastExpiredTime&&(D.lastExpiredTime=0),D===gi&&(Or=gi=null,is=0),1=T?cn(D,P,T):(On(ei,ei.current&1,P),P=si(D,P,T),P!==null?P.sibling:null);On(ei,ei.current&1,P);break;case 19:if(q=P.childExpirationTime>=T,(D.effectTag&64)!==0){if(q)return ja(D,P,T);P.effectTag|=64}if(W=P.memoizedState,W!==null&&(W.rendering=null,W.tail=null),On(ei,ei.current,P),!q)return null}return si(D,P,T)}qo=!1}}else qo=!1;switch(P.expirationTime=0,P.tag){case 2:if(q=P.type,D!==null&&(D.alternate=null,P.alternate=null,P.effectTag|=2),D=P.pendingProps,W=Oe(P,Mn.current),ys(P,T),W=ug(null,P,q,D,W,T),P.effectTag|=1,typeof W=="object"&&W!==null&&typeof W.render=="function"&&W.$$typeof===void 0){if(P.tag=1,dw(),ii(q)){var Ae=!0;fc(P)}else Ae=!1;P.memoizedState=W.state!==null&&W.state!==void 0?W.state:null;var Pe=q.getDerivedStateFromProps;typeof Pe=="function"&&rr(P,q,Pe,D),W.updater=$r,P.stateNode=W,W._reactInternalFiber=P,Ho(P,q,D,T),P=Ep(null,P,q,!0,Ae,T)}else P.tag=0,Bs(null,P,W,T),P=P.child;return P;case 16:if(W=P.elementType,D!==null&&(D.alternate=null,P.alternate=null,P.effectTag|=2),D=P.pendingProps,Ce(W),W._status!==1)throw W._result;switch(W=W._result,P.type=W,Ae=P.tag=IR(W),D=Ci(W,D),Ae){case 0:P=NA(null,P,W,D,T);break;case 1:P=yp(null,P,W,D,T);break;case 11:P=Ii(null,P,W,D,T);break;case 14:P=km(null,P,W,Ci(W.type,D),q,T);break;default:throw Error(n(306,W,""))}return P;case 0:return q=P.type,W=P.pendingProps,W=P.elementType===q?W:Ci(q,W),NA(D,P,q,W,T);case 1:return q=P.type,W=P.pendingProps,W=P.elementType===q?W:Ci(q,W),yp(D,P,q,W,T);case 3:if(Eg(P),q=P.updateQueue,q===null)throw Error(n(282));if(W=P.memoizedState,W=W!==null?W.element:null,ye(P,q,P.pendingProps,null,T),q=P.memoizedState.element,q===W)yg(),P=si(D,P,T);else{if((W=P.stateNode.hydrate)&&(y?(vc=uu(P.stateNode.containerInfo),Aa=P,W=Bl=!0):W=!1),W)for(T=og(P,null,q,T),P.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else Bs(D,P,q,T),yg();P=P.child}return P;case 5:return Dm(P),D===null&&LA(P),q=P.type,W=P.pendingProps,Ae=D!==null?D.memoizedProps:null,Pe=W.children,Qe(q,W)?Pe=null:Ae!==null&&Qe(q,Ae)&&(P.effectTag|=16),Go(D,P),P.mode&4&&T!==1&&xe(q,W)?(P.expirationTime=P.childExpirationTime=1,P=null):(Bs(D,P,Pe,T),P=P.child),P;case 6:return D===null&&LA(P),null;case 13:return cn(D,P,T);case 4:return ag(P,P.stateNode.containerInfo),q=P.pendingProps,D===null?P.child=du(P,null,q,T):Bs(D,P,q,T),P.child;case 11:return q=P.type,W=P.pendingProps,W=P.elementType===q?W:Ci(q,W),Ii(D,P,q,W,T);case 7:return Bs(D,P,P.pendingProps,T),P.child;case 8:return Bs(D,P,P.pendingProps.children,T),P.child;case 12:return Bs(D,P,P.pendingProps.children,T),P.child;case 10:e:{if(q=P.type._context,W=P.pendingProps,Pe=P.memoizedProps,Ae=W.value,_o(P,Ae),Pe!==null){var vt=Pe.value;if(Ae=ds(vt,Ae)?0:(typeof q._calculateChangedBits=="function"?q._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(Pe.children===W.children&&!_i.current){P=si(D,P,T);break e}}else for(vt=P.child,vt!==null&&(vt.return=P);vt!==null;){var wt=vt.dependencies;if(wt!==null){Pe=vt.child;for(var xt=wt.firstContext;xt!==null;){if(xt.context===q&&(xt.observedBits&Ae)!==0){vt.tag===1&&(xt=Cs(T,null),xt.tag=2,tt(vt,xt)),vt.expirationTime"u")return!1;var P=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(P.isDisabled||!P.supportsFiber)return!0;try{var T=P.inject(D);Sw=function(q){try{P.onCommitFiberRoot(T,q,void 0,(q.current.effectTag&64)===64)}catch{}},bw=function(q){try{P.onCommitFiberUnmount(T,q)}catch{}}}catch{}return!0}function wR(D,P,T,q){this.tag=D,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=P,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=q,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(D,P,T,q){return new wR(D,P,T,q)}function xw(D){return D=D.prototype,!(!D||!D.isReactComponent)}function IR(D){if(typeof D=="function")return xw(D)?1:0;if(D!=null){if(D=D.$$typeof,D===N)return 11;if(D===te)return 14}return 2}function WA(D,P){var T=D.alternate;return T===null?(T=Dl(D.tag,P,D.key,D.mode),T.elementType=D.elementType,T.type=D.type,T.stateNode=D.stateNode,T.alternate=D,D.alternate=T):(T.pendingProps=P,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=D.childExpirationTime,T.expirationTime=D.expirationTime,T.child=D.child,T.memoizedProps=D.memoizedProps,T.memoizedState=D.memoizedState,T.updateQueue=D.updateQueue,P=D.dependencies,T.dependencies=P===null?null:{expirationTime:P.expirationTime,firstContext:P.firstContext,responders:P.responders},T.sibling=D.sibling,T.index=D.index,T.ref=D.ref,T}function Hm(D,P,T,q,W,Ae){var Pe=2;if(q=D,typeof D=="function")xw(D)&&(Pe=1);else if(typeof D=="string")Pe=5;else e:switch(D){case E:return xu(T.children,W,Ae,P);case F:Pe=8,W|=7;break;case I:Pe=8,W|=1;break;case v:return D=Dl(12,T,P,W|8),D.elementType=v,D.type=v,D.expirationTime=Ae,D;case U:return D=Dl(13,T,P,W),D.type=U,D.elementType=U,D.expirationTime=Ae,D;case V:return D=Dl(19,T,P,W),D.elementType=V,D.expirationTime=Ae,D;default:if(typeof D=="object"&&D!==null)switch(D.$$typeof){case x:Pe=10;break e;case C:Pe=9;break e;case N:Pe=11;break e;case te:Pe=14;break e;case le:Pe=16,q=null;break e}throw Error(n(130,D==null?D:typeof D,""))}return P=Dl(Pe,T,P,W),P.elementType=D,P.type=q,P.expirationTime=Ae,P}function xu(D,P,T,q){return D=Dl(7,D,q,P),D.expirationTime=T,D}function kw(D,P,T){return D=Dl(6,D,null,P),D.expirationTime=T,D}function Qw(D,P,T){return P=Dl(4,D.children!==null?D.children:[],D.key,P),P.expirationTime=T,P.stateNode={containerInfo:D.containerInfo,pendingChildren:null,implementation:D.implementation},P}function BR(D,P,T){this.tag=P,this.current=null,this.containerInfo=D,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=_e,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function eP(D,P){var T=D.firstSuspendedTime;return D=D.lastSuspendedTime,T!==0&&T>=P&&D<=P}function KA(D,P){var T=D.firstSuspendedTime,q=D.lastSuspendedTime;TP||T===0)&&(D.lastSuspendedTime=P),P<=D.lastPingedTime&&(D.lastPingedTime=0),P<=D.lastExpiredTime&&(D.lastExpiredTime=0)}function tP(D,P){P>D.firstPendingTime&&(D.firstPendingTime=P);var T=D.firstSuspendedTime;T!==0&&(P>=T?D.firstSuspendedTime=D.lastSuspendedTime=D.nextKnownPendingLevel=0:P>=D.lastSuspendedTime&&(D.lastSuspendedTime=P+1),P>D.nextKnownPendingLevel&&(D.nextKnownPendingLevel=P))}function qm(D,P){var T=D.lastExpiredTime;(T===0||T>P)&&(D.lastExpiredTime=P)}function rP(D){var P=D._reactInternalFiber;if(P===void 0)throw typeof D.render=="function"?Error(n(188)):Error(n(268,Object.keys(D)));return D=me(P),D===null?null:D.stateNode}function nP(D,P){D=D.memoizedState,D!==null&&D.dehydrated!==null&&D.retryTime{"use strict";SEe.exports=DEe()});var kEe=_((wKt,xEe)=>{"use strict";var jyt={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};xEe.exports=jyt});var TEe=_((IKt,FEe)=>{"use strict";var Yyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),QEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){b6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){b6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ru.UNIT_POINT:return String(this.value);case ru.UNIT_PERCENT:return this.value+"%";case ru.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();FEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),x=1;x1&&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]:ru.DIRECTION_LTR;return u.call(this,A,p,h)}),Yyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Wyt),Size:t("Size",QEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},ru)}});var LEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(x){Runtime.warnOnce("Blob constructor present but fails: "+x+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var F=C.getContext("2d");F.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(F){h||(h=!0,Module.preloadedAudios[u]=F,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var x=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(V){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",ae="",ce=0,Ce=0,de=0;de=6;){var Ie=ce>>Ce-6&63;Ce-=6,ae+=te[Ie]}return Ce==2?(ae+=te[(ce&3)<<4],ae+=le+le):Ce==4&&(ae+=te[(ce&15)<<2],ae+=le),ae}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=x,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,x){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var F;return x?F=E.replace("X",p).replace("Y",v):F=p.replace("X",E).replace("Y",v),F.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,x,C,F){x===void 0&&(x="X"),F===void 0&&(F=1);var N=E(p);if(N)return N;var U=I(p),V=U.placeholderFlag,te=e[V];C&&te&&(x=r(C[2],C[0],x,te[0],"?",!0));var le;V==0&&(le="Unbound"),V>=10&&(le="Corrupt"),F>20&&(le="Deeply nested"),le&&o(le,p,x,V,v||"?");var ae=U.paramList[0],ce=a(ae,h,E,I,v,x,te,F+1),Ce,de={flags:te[0],id:p,name:"",paramList:[ce]},Ie=[],Ee="?";switch(U.placeholderFlag){case 1:Ce=ce.spec;break;case 2:if((ce.flags&15360)==1024&&ce.spec.ptrSize==1){de.flags=7168;break}case 3:case 6:case 5:Ce=ce.spec,ce.flags&15360;break;case 8:Ee=""+U.paramList[1],de.paramList.push(U.paramList[1]);break;case 9:for(var g=0,me=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var x=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[x/4],I=HEAPU32[x/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},F={__nbindFlags:E,__nbindPtr:I};v&&(F.__nbindShared=v,_nbind.mark(h));for(var N=0,U=Object.keys(F);N>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,x=e.ABORT|0,C=e.STACKTOP|0,F=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,V=0,te=0,le=0,ae=0,ce=t.NaN,Ce=t.Infinity,de=0,Ie=0,Ee=0,g=0,me=0,De=0,he=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Be=t.Math.pow,Te=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,at=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,xe=t.Math.atan2,je=t.Math.exp,be=t.Math.log,$e=t.Math.ceil,_e=t.Math.imul,b=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,R=e.abort,J=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,ke=e.invoke_viiiii,Le=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,Gt=e.invoke_vi,tr=e.invoke_vii,bt=e.invoke_ii,ln=e.invoke_viddi,kr=e.invoke_vidd,mr=e.invoke_iiii,br=e.invoke_diii,Kr=e.invoke_di,Kn=e.invoke_iid,Os=e.invoke_iii,Ti=e.invoke_viiddi,gs=e.invoke_viiiiii,no=e.invoke_dii,Si=e.invoke_i,Ms=e.invoke_iiiiii,io=e.invoke_viiid,uc=e.invoke_viififi,uu=e.invoke_viii,cp=e.invoke_v,up=e.invoke_viid,Us=e.invoke_idd,Pn=e.invoke_viiii,so=e._emscripten_asm_const_iiiii,_s=e._emscripten_asm_const_iiidddddd,yl=e._emscripten_asm_const_iiiid,El=e.__nbind_reference_external,oo=e._emscripten_asm_const_iiiiiiii,zn=e._removeAccessorPrefix,On=e._typeModule,Li=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,ir=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ua=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,Ac=e.__nbind_register_primitive,Au=e.__nbind_register_type,fc=e._emscripten_memcpy_big,Cl=e.__nbind_register_function,PA=e.___setErrNo,fu=e.__nbind_register_class,we=e.__nbind_finish,Tt=e._abort,pc=e._nbind_value,Hi=e._llvm_stacksave,pu=e.___syscall54,Yt=e._defineHidden,wl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,Ap=e.__nbind_register_callback_signature,hc=e._emscripten_asm_const_iiiiii,SA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,gc=e.___syscall6,bA=e._atexit,sa=e.___syscall140,Ni=e.___syscall146,Uo=y(0);let Xe=y(0);function ao(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function dc(){return C|0}function hu(s){s=s|0,C=s}function qi(s,l){s=s|0,l=l|0,C=s,F=l}function gu(s,l){s=s|0,l=l|0,V||(V=s,te=l)}function xA(s){s=s|0,De=s}function Ha(){return De|0}function mc(){var s=0,l=0;Pr(8104,8,400)|0,Pr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,ir(17,8104,U|0)|0}function ds(s){s=s|0,ft(s+948|0)}function Ht(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Rn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=hP(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Pr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Cg(s,5,3197,f)),C=d}function lo(){return Ci(956)|0}function Hs(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Pr(s|0,l|0,948)|0,Rm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(_o(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(ms(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ys(c),gP(s),n[2276]=(n[2276]|0)+-1}function _o(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Nw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function ms(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ys(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Bp(l,d,d,s+8|0),vg(s,l),_A(l)),C=f}function Es(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(ms(s,0)|0)+944>>2]|0)==(s|0)){if(!(_o(s+948|0,l)|0))break;Pr(l+400|0,8504,540)|0,n[l+944>>2]=0,Ne(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Ne(s):(d=Hs(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LF[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Nw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function qs(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ys(l),l=s+976|0,c=n[l>>2]|0,Pr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,uo(s,5,3197,f)),C=d}function Dn(){return n[2276]|0}function Cs(){var s=0;return s=hP(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,uo(0,5,3197,c)),C=f}function tt(s){s=s|0,gP(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function or(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Ne(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(ms(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Hs(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LF[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0;et=C,C=C+64|0,G=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Me=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}HA(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=L(s)|0,d>>>0>>0&&Jr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Bp(Fe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Fe+8|0,f=n[O>>2]|0,m=Fe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Fe+4|0,f=n[M>>2]|0,Je=n[Fe>>2]|0,d=Je,f>>>0<=Je>>>0){f=B-d>>1,f=(f|0)==0?1:f,Bp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[Ge>>2],n[G>>2]=n[Me>>2],Bw(se,k,G),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Je=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Je,f=se+8|0,Je=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Je,f=se+12|0,Je=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Je,_A(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Nw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Je=k+(m<<2)|0,n[O>>2]=Je,n[M>>2]=f+(B<<2),f=Je}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=Pg(s,Fe,l)|0,_A(Fe)}while(0);return C=et,l|0}function Ne(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ce),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Lt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Ne(s)}function rr(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function $r(s,l){s=s|0,l=l|0,RUe(s,l,400)|0&&(Pr(s|0,l|0,400)|0,Ne(s))}function Gi(s){s=s|0;var l=Xe;return l=y(h[s+44>>2]),s=Ht(l)|0,y(s?y(0):l)}function ts(s){s=s|0;var l=Xe;return l=y(h[s+48>>2]),Ht(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function bi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function Ho(s){return s=s|0,n[s+980>>2]|0}function kA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function QA(s){return s=s|0,n[s+4>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function sg(s){return s=s|0,n[s+8>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function og(s){return s=s|0,n[s+12>>2]|0}function mu(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function co(s){return s=s|0,n[s+16>>2]|0}function RA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function yc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ag(s){return s=s|0,n[s+24>>2]|0}function Ec(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Dm(s){return s=s|0,n[s+28>>2]|0}function lg(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ei(s){return s=s|0,n[s+32>>2]|0}function pp(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function cg(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Gs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function yu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function qa(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function ji(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ws(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Cc(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Y(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Pt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Il(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ce),n[c>>2]=3,Ne(s))}function xi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Ic(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ht(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ug(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function dw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function hp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ce),n[l>>2]=3,Ne(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Is(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ag(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ht(l)|0,n[c>>2]=f?3:2,Ne(s))}function fg(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ce),n[l>>2]=3,Ne(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function gp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Bc(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function hg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function gg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function bm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function dg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Iu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ht(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function xm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function vc(s){return s=s|0,y(h[s+396>>2])}function Bl(s){return s=s|0,y(h[s+400>>2])}function Bu(s){return s=s|0,y(h[s+404>>2])}function mg(s){return s=s|0,y(h[s+408>>2])}function LA(s){return s=s|0,y(h[s+412>>2])}function dp(s){return s=s|0,y(h[s+416>>2])}function Ga(s){return s=s|0,y(h[s+420>>2])}function yg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function mp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function Bs(s,l){s=s|0,l=l|0;var c=0,f=Xe;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ua(f|0,s|0,l|0,0),uo(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),t3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Xe;s=y(s*l),d=y(xF(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,M,O,G,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),G=y(G),se=se|0;var Ge=0,Me=Xe,Fe=Xe,et=Xe,Je=Xe,lt=Xe,Ue=Xe;return Q>2]),Me!=y(0))?(et=y(Go(l,Me,0,0)),Je=y(Go(f,Me,0,0)),Fe=y(Go(m,Me,0,0)),Me=y(Go(k,Me,0,0))):(Fe=m,et=l,Me=k,Je=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Me,Je)|0:se=0,!Ge&&(lt=y(l-O),!(yp(s,lt,Q)|0))&&!(Ep(s,lt,d,Q)|0)?Ge=Eg(s,lt,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-G),!(yp(c,Ue,M)|0))&&!(Ep(c,Ue,B,M)|0)?se=Eg(c,Ue,B,k,M)|0:se=1,se=Ge&se),se|0}function yp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function Ep(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function Eg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var G=0,se=0,Ge=0,Me=0,Fe=Xe,et=Xe,Je=0,lt=0,Ue=0,qe=0,Nt=0,Mr=0,cr=0,Xt=0,Dr=0,Tr=0,ar=0,xn=Xe,ho=Xe,go=Xe,mo=0,ya=0;ar=C,C=C+160|0,Xt=ar+152|0,cr=ar+120|0,Mr=ar+104|0,Ue=ar+72|0,Me=ar+56|0,Nt=ar+8|0,lt=ar,qe=(n[2279]|0)+1|0,n[2279]=qe,Dr=s+984|0,(o[Dr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Je=4:(n[s+516>>2]|0)==(f|0)?Tr=0:Je=4,(Je|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Tr=1);e:do if(n[s+964>>2]|0)if(Fe=y(cn(s,2,B)),et=y(cn(s,0,B)),G=s+916|0,go=y(h[G>>2]),ho=y(h[s+920>>2]),xn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,go,n[s+928>>2]|0,ho,xn,y(h[s+936>>2]),Fe,et,O)|0)Je=22;else if(Ge=n[s+520>>2]|0,!Ge)Je=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,xn=y(h[G>>2]),ho=y(h[s+524+(se*24|0)+4>>2]),go=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,xn,n[s+524+(se*24|0)+12>>2]|0,ho,go,y(h[s+524+(se*24|0)+20>>2]),Fe,et,O)|0){Je=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Je=21;break}}else{if(Q){if(G=s+916|0,!(Ii(y(h[G>>2]),l)|0)){Je=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Je=21;break}if((n[s+924>>2]|0)!=(d|0)){Je=21;break}G=(n[s+928>>2]|0)==(m|0)?G:0,Je=22;break}if(Ge=n[s+520>>2]|0,!Ge)Je=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,Ii(y(h[G>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Je=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Je=21;break}}}while(0);do if((Je|0)==21)o[11697]|0?(G=0,Je=28):(G=0,Je=31);else if((Je|0)==22){if(se=(o[11697]|0)!=0,!((G|0)!=0&(Tr^1)))if(se){Je=28;break}else{Je=31;break}Me=G+16|0,n[s+908>>2]=n[Me>>2],Ge=G+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[lt>>2]=OA(qe)|0,n[lt+4>>2]=qe,uo(s,4,2972,lt),se=n[s+972>>2]|0,se|0&&tf[se&127](s),d=ja(d,Q)|0,m=ja(m,Q)|0,ya=+y(h[Me>>2]),mo=+y(h[Ge>>2]),n[Nt>>2]=d,n[Nt+4>>2]=m,E[Nt+8>>3]=+l,E[Nt+16>>3]=+c,E[Nt+24>>3]=ya,E[Nt+32>>3]=mo,n[Nt+40>>2]=M,uo(s,4,2989,Nt))}while(0);return(Je|0)==28&&(se=OA(qe)|0,n[Me>>2]=se,n[Me+4>>2]=qe,n[Me+8>>2]=Tr?3047:11699,uo(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Nt=ja(d,Q)|0,Je=ja(m,Q)|0,n[Ue>>2]=Nt,n[Ue+4>>2]=Je,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=M,uo(s,4,3049,Ue),Je=31),(Je|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Nt=OA(se)|0,n[Mr>>2]=Nt,n[Mr+4>>2]=se,n[Mr+8>>2]=Tr?3047:11699,uo(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Nt=ja(d,Q)|0,Mr=ja(m,Q)|0,mo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[cr>>2]=Nt,n[cr+4>>2]=Mr,E[cr+8>>3]=mo,E[cr+16>>3]=ya,n[cr+24>>2]=M,uo(s,4,3092,cr)),n[s+516>>2]=f,G||(se=s+520|0,G=n[se>>2]|0,(G|0)==16&&(o[11697]|0&&uo(s,4,3124,Xt),n[se>>2]=0,G=0),Q?G=s+916|0:(n[se>>2]=G+1,G=s+524+(G*24|0)|0),h[G>>2]=l,h[G+4>>2]=c,n[G+8>>2]=d,n[G+12>>2]=m,n[G+16>>2]=n[s+908>>2],n[G+20>>2]=n[s+912>>2],G=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Dr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ar,Tr|(G|0)==0|0}function cn(s,l,c){s=s|0,l=l|0,c=y(c);var f=Xe;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function uo(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,wg(f,s,l,c,d),C=m}function OA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function ja(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,G=0,se=0,Ge=0,Me=Xe,Fe=Xe,et=Xe,Je=Xe,lt=Xe,Ue=Xe,qe=Xe,Nt=0,Mr=0,cr=0,Xt=Xe,Dr=Xe,Tr=0,ar=Xe,xn=0,ho=0,go=0,mo=0,ya=0,Fp=0,Tp=0,xl=0,Lp=0,Fu=0,Tu=0,Np=0,Op=0,Mp=0,Xr=0,kl=0,Up=0,kc=0,_p=Xe,Hp=Xe,Lu=Xe,Nu=Xe,Qc=Xe,Ys=0,Xa=0,Yo=0,Ql=0,nf=0,sf=Xe,Ou=Xe,of=Xe,af=Xe,Ws=Xe,Ds=Xe,Rl=0,Fn=Xe,lf=Xe,yo=Xe,Rc=Xe,Eo=Xe,Fc=Xe,cf=0,uf=0,Tc=Xe,Ks=Xe,Fl=0,Af=0,ff=0,pf=0,xr=Xe,Vn=0,Ss=0,Co=0,zs=0,Rr=0,ur=0,Tl=0,Vt=Xe,hf=0,li=0;Tl=C,C=C+16|0,Ys=Tl+12|0,Xa=Tl+8|0,Yo=Tl+4|0,Ql=Tl,Un(s,(d|0)==0|(Ht(l)|0)^1,3326),Un(s,(m|0)==0|(Ht(c)|0)^1,3406),Ss=mt(s,f)|0,n[s+496>>2]=Ss,Rr=fr(2,Ss)|0,ur=fr(0,Ss)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Bg(s,l,c,d,m,B,k);else{if(Co=s+948|0,zs=(n[s+952>>2]|0)-(n[Co>>2]|0)>>2,!zs){Yv(s,l,c,d,m,B,k);break}if(!Q&&Wv(s,l,c,d,m,B,k)|0)break;$(s),kl=s+508|0,o[kl>>0]=0,Rr=fr(n[s+4>>2]|0,Ss)|0,ur=Ew(Rr,Ss)|0,Vn=pe(Rr)|0,Up=n[s+8>>2]|0,Af=s+28|0,kc=(n[Af>>2]|0)!=0,Eo=Vn?B:k,Tc=Vn?k:B,_p=y(wp(s,Rr,B)),Hp=y(Cw(s,Rr,B)),Me=y(wp(s,ur,B)),Fc=y(En(s,Rr,B)),Ks=y(En(s,ur,B)),cr=Vn?d:m,Fl=Vn?m:d,xr=Vn?Fc:Ks,lt=Vn?Ks:Fc,Rc=y(cn(s,2,B)),Je=y(cn(s,0,B)),Fe=y(y(Yr(s+364|0,B))-xr),et=y(y(Yr(s+380|0,B))-xr),Ue=y(y(Yr(s+372|0,k))-lt),qe=y(y(Yr(s+388|0,k))-lt),Lu=Vn?Fe:Ue,Nu=Vn?et:qe,Rc=y(l-Rc),l=y(Rc-xr),Ht(l)|0?xr=l:xr=y(_n(y(Lg(l,et)),Fe)),lf=y(c-Je),l=y(lf-lt),Ht(l)|0?yo=l:yo=y(_n(y(Lg(l,qe)),Ue)),Fe=Vn?xr:yo,Fn=Vn?yo:xr;e:do if((cr|0)==1)for(f=0,G=0;;){if(O=ms(s,G)|0,!f)y(ns(O))>y(0)&&y(js(O))>y(0)?f=O:f=0;else if(Fm(O)|0){Ge=0;break e}if(G=G+1|0,G>>>0>=zs>>>0){Ge=f;break}}else Ge=0;while(0);Nt=Ge+500|0,Mr=Ge+504|0,f=0,O=0,l=y(0),se=0;do{if(G=n[(n[Co>>2]|0)+(se<<2)>>2]|0,(n[G+36>>2]|0)==1)vu(G),o[G+985>>0]=1,o[G+984>>0]=0;else{vl(G),Q&&Cp(G,mt(G,Ss)|0,Fe,Fn,xr);do if((n[G+24>>2]|0)!=1)if((G|0)==(Ge|0)){n[Nt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Tm(s,G,xr,d,yo,xr,yo,m,Ss,M);break}else O|0&&(n[O+960>>2]=G),n[G+960>>2]=0,O=G,f=(f|0)==0?G:f;while(0);Ds=y(h[G+504>>2]),l=y(l+y(Ds+y(cn(G,Rr,xr))))}se=se+1|0}while((se|0)!=(zs|0));for(go=l>Fe,Rl=kc&((cr|0)==2&go)?1:cr,xn=(Fl|0)==1,ya=xn&(Q^1),Fp=(Rl|0)==1,Tp=(Rl|0)==2,xl=976+(Rr<<2)|0,Lp=(Fl|2|0)==2,Mp=xn&(kc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Rr<<2)|0,Np=976+(ur<<2)|0,Op=(Fl|0)!=1,go=kc&((cr|0)!=0&go),ho=s+976|0,xn=xn^1,l=Fe,Tr=0,mo=0,Ds=y(0),Qc=y(0);;){e:do if(Tr>>>0>>0)for(Mr=n[Co>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),G=0,O=0,Ge=Tr;;){if(Nt=n[Mr+(Ge<<2)>>2]|0,(n[Nt+36>>2]|0)!=1&&(n[Nt+940>>2]=mo,(n[Nt+24>>2]|0)!=1)){if(Je=y(cn(Nt,Rr,xr)),Xr=n[xl>>2]|0,c=y(Yr(Nt+380+(Xr<<3)|0,Eo)),lt=y(h[Nt+504>>2]),c=y(Lg(c,lt)),c=y(_n(y(Yr(Nt+364+(Xr<<3)|0,Eo)),c)),kc&(se|0)!=0&y(Je+y(Ue+c))>l){m=se,Je=qe,cr=Ge;break e}Je=y(Je+c),c=y(Ue+Je),Je=y(qe+Je),Fm(Nt)|0&&(et=y(et+y(ns(Nt))),Fe=y(Fe-y(lt*y(js(Nt))))),O|0&&(n[O+960>>2]=Nt),n[Nt+960>>2]=0,se=se+1|0,O=Nt,G=(G|0)==0?Nt:G}else Je=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Je,Ue=c;else{m=se,cr=Ge;break}}else m=0,Je=y(0),et=y(0),Fe=y(0),G=0,cr=Tr;while(0);Xr=et>y(0)&ety(0)&FeNu&((Ht(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[ho>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(ns(s))!=y(0)){Xr=53;break}l=Je,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,Ht(l)|0?Xr=53:(Dr=y(l-Je),ar=l)),(Xr|0)==53&&(Xr=0,Je>2]|0,Ge=Dry(0),Ue=y(Dr/Xt),et=y(0),Je=y(0),l=y(0),O=G;do c=y(Yr(O+380+(se<<3)|0,Eo)),Fe=y(Yr(O+364+(se<<3)|0,Eo)),Fe=y(Lg(c,y(_n(Fe,y(h[O+504>>2]))))),Ge?(c=y(Fe*y(js(O))),c!=y(-0)&&(Vt=y(Fe-y(lt*c)),sf=y(Bi(O,Rr,Vt,ar,xr)),Vt!=sf)&&(et=y(et-y(sf-Fe)),l=y(l+c))):Nt&&(Ou=y(ns(O)),Ou!=y(0))&&(Vt=y(Fe+y(Ue*Ou)),of=y(Bi(O,Rr,Vt,ar,xr)),Vt!=of)&&(et=y(et-y(of-Fe)),Je=y(Je-Ou)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(qe+l),Fe=y(Dr+et),nf)l=y(0);else{lt=y(Xt+Je),Ge=n[xl>>2]|0,Nt=Fey(0),lt=y(Fe/lt),l=y(0);do{Vt=y(Yr(G+380+(Ge<<3)|0,Eo)),et=y(Yr(G+364+(Ge<<3)|0,Eo)),et=y(Lg(Vt,y(_n(et,y(h[G+504>>2]))))),Nt?(Vt=y(et*y(js(G))),Fe=y(-Vt),Vt!=y(-0)?(Vt=y(Ue*Fe),Fe=y(Bi(G,Rr,y(et+(Mr?Fe:Vt)),ar,xr))):Fe=et):se&&(af=y(ns(G)),af!=y(0))?Fe=y(Bi(G,Rr,y(et+y(lt*af)),ar,xr)):Fe=et,l=y(l-y(Fe-et)),Je=y(cn(G,Rr,xr)),c=y(cn(G,ur,xr)),Fe=y(Fe+Je),h[Xa>>2]=Fe,n[Ql>>2]=1,et=y(h[G+396>>2]);e:do if(Ht(et)|0){O=Ht(Fn)|0;do if(!O){if(go|(rs(G,ur,Fn)|0|xn)||(ha(s,G)|0)!=4||(n[(Pl(G,ur)|0)+4>>2]|0)==3||(n[(Sc(G,ur)|0)+4>>2]|0)==3)break;h[Ys>>2]=Fn,n[Yo>>2]=1;break e}while(0);if(rs(G,ur,Fn)|0){O=n[G+992+(n[Np>>2]<<2)>>2]|0,Vt=y(c+y(Yr(O,Fn))),h[Ys>>2]=Vt,O=Op&(n[O+4>>2]|0)==2,n[Yo>>2]=((Ht(Vt)|0|O)^1)&1;break}else{h[Ys>>2]=Fn,n[Yo>>2]=O?0:2;break}}else Vt=y(Fe-Je),Xt=y(Vt/et),Vt=y(et*Vt),n[Yo>>2]=1,h[Ys>>2]=y(c+(Vn?Xt:Vt));while(0);yr(G,Rr,ar,xr,Ql,Xa),yr(G,ur,Fn,xr,Yo,Ys);do if(!(rs(G,ur,Fn)|0)&&(ha(s,G)|0)==4){if((n[(Pl(G,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Sc(G,ur)|0)+4>>2]|0)!=3}else O=0;while(0);Vt=y(h[Xa>>2]),Xt=y(h[Ys>>2]),hf=n[Ql>>2]|0,li=n[Yo>>2]|0,fa(G,Vn?Vt:Xt,Vn?Xt:Vt,Ss,Vn?hf:li,Vn?li:hf,xr,yo,Q&(O^1),3488,M)|0,o[kl>>0]=o[kl>>0]|o[G+508>>0],G=n[G+960>>2]|0}while((G|0)!=0)}}else l=y(0);if(l=y(Dr+l),li=l>0]=li|u[kl>>0],Tp&l>y(0)?(O=n[xl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(Ws=y(Yr(s+364+(O<<3)|0,Eo)),Ws>=y(0))?Fe=y(_n(y(0),y(Ws-y(ar-l)))):Fe=y(0)):Fe=l,Nt=Tr>>>0>>0,Nt){Ge=n[Co>>2]|0,se=Tr,O=0;do G=n[Ge+(se<<2)>>2]|0,n[G+24>>2]|0||(O=((n[(Pl(G,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Sc(G,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(cr|0));O?(Je=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Up|0){case 1:{O=0,Je=y(Fe*y(.5)),c=y(0);break e}case 2:{O=0,Je=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Je=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Je=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),O=0,Je=c;break e}case 4:{c=y(Fe/y(m>>>0)),O=0,Je=y(c*y(.5));break e}default:{O=0,Je=y(0),c=y(0);break e}}while(0);if(l=y(_p+Je),Nt){et=y(Fe/y(O|0)),se=n[Co>>2]|0,G=Tr,Fe=y(0);do{O=n[se+(G<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;Vt=y(Or(O,Rr,ar)),Vt=y(Vt+y(Cr(s,Rr))),Vt=y(Vt+y(K(O,Rr,xr))),h[O+400+(n[Tu>>2]<<2)>>2]=Vt;break e}break}case 0:if(li=(n[(Pl(O,Rr)|0)+4>>2]|0)==3,Vt=y(et+l),l=li?Vt:l,Q&&(li=O+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Sc(O,Rr)|0)+4>>2]|0)==3,Vt=y(et+l),l=li?Vt:l,ya){Vt=y(c+y(cn(O,Rr,xr))),Fe=Fn,l=y(l+y(Vt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(is(O,Rr,xr)))),Fe=y(_n(Fe,y(is(O,ur,xr))));break e}default:}Q&&(Vt=y(Je+y(Cr(s,Rr))),li=O+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Vt+y(h[li>>2])))}while(0);G=G+1|0}while((G|0)!=(cr|0))}else Fe=y(0);if(c=y(Hp+l),Lp?Je=y(y(Bi(s,ur,y(Ks+Fe),Tc,B))-Ks):Je=Fn,et=y(y(Bi(s,ur,y(Ks+(Mp?Fn:Fe)),Tc,B))-Ks),Nt&Q){G=Tr;do{se=n[(n[Co>>2]|0)+(G<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Vt=y(Or(se,ur,Fn)),Vt=y(Vt+y(Cr(s,ur))),Vt=y(Vt+y(K(se,ur,xr))),O=n[Fu>>2]|0,h[se+400+(O<<2)>>2]=Vt,!(Ht(Vt)|0))break}else O=n[Fu>>2]|0;Vt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(Vt+y(K(se,ur,xr)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(Pl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Sc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(rs(se,ur,Fn)|0){l=Me;break}hf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[Ys>>2]=hf,l=y(h[se+396>>2]),li=Ht(l)|0,Fe=(n[v>>2]=hf,y(h[v>>2])),li?l=et:(Dr=y(cn(se,ur,xr)),Vt=y(Fe/l),l=y(l*Fe),l=y(Dr+(Vn?Vt:l))),h[Xa>>2]=l,h[Ys>>2]=y(y(cn(se,Rr,xr))+Fe),n[Yo>>2]=1,n[Ql>>2]=1,yr(se,Rr,ar,xr,Yo,Ys),yr(se,ur,Fn,xr,Ql,Xa),l=y(h[Ys>>2]),Dr=y(h[Xa>>2]),Vt=Vn?l:Dr,l=Vn?Dr:l,li=((Ht(Vt)|0)^1)&1,fa(se,Vt,l,Ss,li,((Ht(l)|0)^1)&1,xr,yo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Je-y(is(se,ur,xr)));do if((n[(Pl(se,ur)|0)+4>>2]|0)==3){if((n[(Sc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Sc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(Pl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);Vt=y(Ds+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Vt+y(h[li>>2]))}while(0);G=G+1|0}while((G|0)!=(cr|0))}if(Ds=y(Ds+et),Qc=y(_n(Qc,c)),m=mo+1|0,cr>>>0>=zs>>>0)break;l=ar,Tr=cr,mo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(Ht(Fn)|0)){l=y(Fn-Ds);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Fn>Ds?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Fn>Ds){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(mo>>>0)),Ue=Fn>Ds&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Nt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,Ge=0,G=0;;){e:do if(G>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=G;;){O=n[(n[Co>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(Ge|0))break e;if(Lm(O,ur)|0&&(Vt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(Vt+y(cn(O,ur,xr)))))),(ha(s,O)|0)!=5)break;Ws=y(Wa(O)),Ws=y(Ws+y(K(O,0,xr))),Vt=y(h[O+912>>2]),Vt=y(y(Vt+y(cn(O,0,xr)))-Ws),Ws=y(_n(et,Ws)),Vt=y(_n(Fe,Vt)),Fe=Vt,et=Ws,l=y(_n(l,y(Ws+Vt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=G;while(0);if(lt=y(Ue+l),c=Me,Me=y(Me+lt),G>>>0>>0){Je=y(c+et),O=G;do{G=n[(n[Co>>2]|0)+(O<<2)>>2]|0;e:do if((n[G+36>>2]|0)!=1&&(n[G+24>>2]|0)==0)switch(ha(s,G)|0){case 1:{Vt=y(c+y(K(G,ur,xr))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 3:{Vt=y(y(Me-y(re(G,ur,xr)))-y(h[G+908+(n[Mr>>2]<<2)>>2])),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 2:{Vt=y(c+y(y(lt-y(h[G+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt;break e}case 4:{if(Vt=y(c+y(K(G,ur,xr))),h[G+400+(n[Nt>>2]<<2)>>2]=Vt,rs(G,ur,Fn)|0||(Vn?(Fe=y(h[G+908>>2]),l=y(Fe+y(cn(G,Rr,xr))),et=lt):(et=y(h[G+912>>2]),et=y(et+y(cn(G,ur,xr))),l=lt,Fe=y(h[G+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[G+912>>2]))|0))break e;fa(G,l,et,Ss,1,1,xr,yo,1,3501,M)|0;break e}case 5:{h[G+404>>2]=y(y(Je-y(Wa(G)))+y(Or(G,0,Fn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;G=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Rc,B,B)),h[s+912>>2]=y(Bi(s,0,lf,k,B)),(Rl|0)!=0&&(cf=n[s+32>>2]|0,uf=(Rl|0)==2,!(uf&(cf|0)!=2))?uf&(cf|0)==2&&(l=y(Fc+ar),l=y(_n(y(Lg(l,y(MA(s,Rr,Qc,Eo)))),Fc)),Xr=198):(l=y(Bi(s,Rr,Qc,Eo,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(ff=n[s+32>>2]|0,pf=(Fl|0)==2,!(pf&(ff|0)!=2))?pf&(ff|0)==2&&(l=y(Ks+Fn),l=y(_n(y(Lg(l,y(MA(s,ur,y(Ks+Ds),Tc)))),Ks)),Xr=204):(l=y(Bi(s,ur,y(Ks+Ds),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[Af>>2]|0)==2){G=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do Ge=ms(s,O)|0,n[Ge+24>>2]|0||(hf=n[G>>2]|0,Vt=y(h[s+908+(hf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Vt=y(Vt-y(h[li>>2])),h[li>>2]=y(Vt-y(h[Ge+908+(hf<<2)>>2]))),O=O+1|0;while((O|0)!=(zs|0))}if(f|0){O=Vn?Rl:d;do Nm(s,f,xr,O,yo,Ss,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,G=(ur|2|0)==3,O|G){f=0;do se=n[(n[Co>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&Ip(s,se,Rr),G&&Ip(s,se,ur)),f=f+1|0;while((f|0)!=(zs|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function Pc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Xe,m=Xe,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,vl(s),rs(s,2,l)|0?(d=y(Yr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(cn(s,2,l)))):(d=y(Yr(s+380|0,l)),d>=y(0)?Q=2:(Q=((Ht(l)|0)^1)&1,d=l)),rs(s,0,c)|0?(m=y(Yr(n[s+996>>2]|0,c)),k=1,m=y(m+y(cn(s,0,l)))):(m=y(Yr(s+388|0,c)),m>=y(0)?k=2:(k=((Ht(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(Cp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function vl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],Bs(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function rs(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ce)}return y(l)}function Cp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Xe;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Ew(m,l)|0,c=y(Om(s,m,c)),f=y(Om(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Xe,k=Xe,Q=0,M=0,O=Xe,G=0,se=Xe,Ge=Xe,Me=Xe,Fe=Xe;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),G=s+416|0,Ge=y(h[G>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Fe+c),O=y(Me+f),f=y(se+Ge),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Me,l,0,Q)),c=y(xF(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(xF(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[G>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Fe-y(Go(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(ms(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function yw(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=i7(n[489]|0,f,d)|0;break}default:s=XUe(f,d)|0}return s|0}function Cg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,wg(s,0,l,c,m),C=d}function wg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,P7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ya(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Rm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Ig(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Ig(s,l){s=s|0,l=l|0;var c=0;if((L(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Tt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Pr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function L(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Rn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Ve(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Rn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Ve(s,c))}function pe(s){return s=s|0,(s|1|0)==3|0}function Ve(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Yr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Xe;return pe(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Rn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Xe;return pe(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Rn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Xe;return pe(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Yr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Yr(Rn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Xe;return pe(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Yr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Yr(Rn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Bg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Xe,Q=Xe,M=Xe,O=Xe,G=Xe,se=Xe,Ge=0,Me=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(cn(s,2,l)),O=y(cn(s,0,l)),Ht(l)|0?G=l:G=y(_n(y(0),y(y(l-M)-k))),Ht(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(D7[n[Me>>2]&1](Ge,s,G,f,se,d),G=y(k+y(h[Ge>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?G:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Xe,Q=Xe,M=Xe,O=Xe;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(cn(s,2,m)),Q=y(cn(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Wv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Xe,M=Xe;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(cn(s,0,m)),M=y(cn(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Ew(s,l){return s=s|0,l=l|0,UA(s)|0?s=fr(2,l)|0:s=0,s|0}function wp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function Cw(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Xe;return f=y(wp(s,l,c)),y(f+y(Cw(s,l,c)))}function Fm(s){return s=s|0,n[s+24>>2]|0?s=0:y(ns(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function ns(s){s=s|0;var l=Xe;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),Ht(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((Ht(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Xe,c=0,f=Xe;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),Ht(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function vu(s){s=s|0;var l=0,c=0;if(Jm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do vu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Tm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,G=Xe,se=0,Ge=0,Me=Xe,Fe=Xe,et=0,Je=Xe,lt=0,Ue=Xe,qe=0,Nt=0,Mr=0,cr=0,Xt=0,Dr=0,Tr=0,ar=0,xn=0,ho=0;xn=C,C=C+16|0,Mr=xn+12|0,cr=xn+8|0,Xt=xn+4|0,Dr=xn,ar=fr(n[s+4>>2]|0,Q)|0,qe=pe(ar)|0,G=y(Yr(ww(l)|0,qe?m:B)),Nt=rs(l,2,m)|0,Tr=rs(l,0,B)|0;do if(!(Ht(G)|0)&&!(Ht(qe?c:d)|0)){if(O=l+504|0,!(Ht(y(h[O>>2]))|0)&&(!(Iw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(G,y(En(l,ar,m))))}else se=7;while(0);do if((se|0)==7){if(lt=qe^1,!(lt|Nt^1)){B=y(Yr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Tr^1)){B=y(Yr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ce),h[cr>>2]=y(ce),n[Xt>>2]=0,n[Dr>>2]=0,Je=y(cn(l,2,m)),Ue=y(cn(l,0,m)),Nt?(Me=y(Je+y(Yr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,Ge=1):(Ge=0,Me=y(ce)),Tr?(G=y(Ue+y(Yr(n[l+996>>2]|0,B))),h[cr>>2]=G,n[Dr>>2]=1,O=1):(O=0,G=y(ce)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:Ht(Me)|0&&!(Ht(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,Ge=2,Me=c),!((se|0)==2<)&&Ht(G)|0&&!(Ht(d)|0)&&(h[cr>>2]=d,n[Dr>>2]=2,O=2,G=d),Fe=y(h[l+396>>2]),et=Ht(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1<){h[cr>>2]=y(y(Me-Je)/Fe),n[Dr>>2]=1,O=1,se=1;break}qe&(O|0)==1?(h[Mr>>2]=y(Fe*y(G-Ue)),n[Xt>>2]=1,O=1,se=1):se=Ge}while(0);ho=Ht(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Nt|((f|0)!=1|ho)|(Ge|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[cr>>2]=y(y(c-Je)/Fe),n[Dr>>2]=1,O=1),!(Tr|lt|((k|0)!=1|(Ht(d)|0))|(Ge|(O|0)==1))&&(h[cr>>2]=d,n[Dr>>2]=1,!et)&&(h[Mr>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Dr,cr),c=y(h[Mr>>2]),d=y(h[cr>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Dr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(ar<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ar,m))))}while(0);n[l+500>>2]=n[2278],C=xn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&UA(n[s+4>>2]|0)|0&&(l=1),l|0}function Pl(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Sc(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Yr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(cn(s,l,f))),n[d>>2]|0){case 2:case 1:{d=Ht(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Rn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Rn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Rn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Rn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Yr(f,c))),y(c)}function is(s,l,c){s=s|0,l=l|0,c=y(c);var f=Xe;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(UA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=ms(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Lm(s,l){s=s|0,l=l|0;var c=Xe;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((Ht(c)|0)^1)|0}function Wa(s){s=s|0;var l=Xe,c=0,f=0,d=0,m=0,B=0,k=0,Q=Xe;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(w7[c&0](s,Q,l)),Un(s,(Ht(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=ms(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Wa(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Xe,m=0;return UA(l)|0?(l=1,m=3):pe(l)|0?(l=0,m=3):(f=y(ce),d=y(ce)),(m|0)==3&&(d=y(Yr(s+364+(l<<3)|0,f)),f=y(Yr(s+380+(l<<3)|0,f))),m=f=y(0)&((Ht(f)|0)^1)),c=m?f:c,m=d>=y(0)&((Ht(d)|0)^1)&c>2]|0,m)|0,Me=Ew(et,m)|0,Fe=pe(et)|0,G=y(cn(l,2,c)),se=y(cn(l,0,c)),rs(l,2,c)|0?k=y(G+y(Yr(n[l+992>>2]|0,c))):gi(l,2)|0&&lr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(Pu(l,2,c)))),c,c))):k=y(ce),rs(l,0,d)|0?Q=y(se+y(Yr(n[l+996>>2]|0,d))):gi(l,0)|0&&lr(l,0)|0?(Q=y(h[s+912>>2]),lt=y(Cr(s,0)),lt=y(Q-y(lt+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(lt-y(Q+y(Pu(l,0,d)))),d,c))):Q=y(ce),M=Ht(k)|0,O=Ht(Q)|0;do if(M^O&&(Ge=y(h[l+396>>2]),!(Ht(Ge)|0)))if(M){k=y(G+y(y(Q-se)*Ge));break}else{lt=y(se+y(y(k-G)/Ge)),Q=O?lt:Q;break}while(0);O=Ht(k)|0,M=Ht(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(cn(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(cn(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,lr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,et))),lt=y(lt-y(re(l,et,c))),lt=y(lt-y(Pu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt):Je=21;do if((Je|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt)}while(0);lr(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,Me))),lt=y(lt-y(re(l,Me,c))),lt=y(lt-y(Pu(l,Me,Fe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt):Je=30;do if((Je|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt)}while(0)}function Ip(s,l,c){s=s|0,l=l|0,c=c|0;var f=Xe,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function UA(s){return s=s|0,(s|1|0)==1|0}function ww(s){s=s|0;var l=Xe;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((Ht(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Iw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function lr(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Rn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Rn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Pu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Rn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Rn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Yr(f,c))),y(c)}function Om(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(Pu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Bp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function vg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _A(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HA(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Nw(k+(0-m<<2)|0,l|0,d|0)|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Pr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Pr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function Bw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Mm(){mc()}function ga(){var s=0;return s=Kt(4)|0,qA(s),s|0}function qA(s){s=s|0,n[s>>2]=Cs()|0}function bc(s){s=s|0,s|0&&(Dg(s),gt(s))}function Dg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ya(n[s>>2]|0,l,c)}function Ao(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Kv(s,l){return s=s|0,l=l|0,Iw(n[s>>2]|0,l)|0}function vw(){var s=0;return s=Kt(8)|0,zv(s,0),s|0}function zv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=lo()|0,n[s>>2]=l,n[s+4>>2]=0,bi(l,s)}function fR(s){s=s|0;var l=0;return l=Kt(8)|0,zv(l,s),l|0}function Vv(s){s=s|0,s|0&&(Su(s),gt(s))}function Su(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(GA(s),gt(s))}function GA(s){s=s|0,jA(s)}function jA(s){s=s|0,s=n[s>>2]|0,s|0&&SA(s|0)}function Pw(s){return s=s|0,Ho(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),qs(n[s>>2]|0)}function pR(s,l){s=s|0,l=l|0,$r(n[s>>2]|0,n[l>>2]|0)}function hR(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function Xv(s,l,c){s=s|0,l=l|0,c=+c,ws(n[s>>2]|0,l,y(c))}function Dw(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function bu(s,l){s=s|0,l=l|0,mu(n[s>>2]|0,l)}function gR(s,l){s=s|0,l=l|0,RA(n[s>>2]|0,l)}function dR(s,l){s=s|0,l=l|0,kA(n[s>>2]|0,l)}function vp(s,l){s=s|0,l=l|0,Ec(n[s>>2]|0,l)}function mR(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function Zv(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function YA(s,l,c){s=s|0,l=l|0,c=+c,Y(n[s>>2]|0,l,y(c))}function yR(s,l){s=s|0,l=l|0,Il(n[s>>2]|0,l)}function ER(s,l){s=s|0,l=l|0,lg(n[s>>2]|0,l)}function $v(s,l){s=s|0,l=l|0,pp(n[s>>2]|0,l)}function Sw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,qa(n[s>>2]|0,y(l))}function CR(s,l){s=s|0,l=+l,ji(n[s>>2]|0,y(l))}function wR(s,l){s=s|0,l=+l,Gs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,yu(n[s>>2]|0,y(l))}function xw(s,l){s=s|0,l=+l,dw(n[s>>2]|0,y(l))}function IR(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function WA(s){s=s|0,hp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Is(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,Ag(n[s>>2]|0,y(l))}function kw(s){s=s|0,fg(n[s>>2]|0)}function Qw(s,l){s=s|0,l=+l,gp(n[s>>2]|0,y(l))}function BR(s,l){s=s|0,l=+l,Bc(n[s>>2]|0,y(l))}function eP(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function KA(s,l){s=s|0,l=+l,hg(n[s>>2]|0,y(l))}function tP(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,bm(n[s>>2]|0,y(l))}function rP(s,l){s=s|0,l=+l,Iu(n[s>>2]|0,y(l))}function nP(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function Gm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function iP(s,l,c){s=s|0,l=l|0,c=+c,Cu(n[s>>2]|0,l,y(c))}function vR(s,l,c){s=s|0,l=l|0,c=+c,xi(n[s>>2]|0,l,y(c))}function D(s,l,c){s=s|0,l=l|0,c=+c,Ic(n[s>>2]|0,l,y(c))}function P(s){return s=s|0,ag(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Cc(d,n[l>>2]|0,c),q(s,d),C=f}function q(s,l){s=s|0,l=l|0,W(s,n[l+4>>2]|0,+y(h[l>>2]))}function W(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Ae(s){return s=s|0,og(n[s>>2]|0)|0}function Pe(s){return s=s|0,co(n[s>>2]|0)|0}function vt(s){return s=s|0,yc(n[s>>2]|0)|0}function wt(s){return s=s|0,QA(n[s>>2]|0)|0}function xt(s){return s=s|0,Dm(n[s>>2]|0)|0}function _r(s){return s=s|0,sg(n[s>>2]|0)|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Pt(d,n[l>>2]|0,c),q(s,d),C=f}function di(s){return s=s|0,ei(n[s>>2]|0)|0}function fo(s){return s=s|0,cg(n[s>>2]|0)|0}function zA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),q(s,f),C=c}function jo(s){return s=s|0,+ +y(Gi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(ts(n[s>>2]|0))}function ze(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),q(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),q(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),q(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,gg(f,n[l>>2]|0),q(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,dg(f,n[l>>2]|0),q(s,f),C=c}function Qr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,xm(f,n[l>>2]|0),q(s,f),C=c}function bn(s){return s=s|0,+ +y(vc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(ug(n[s>>2]|0,l))}function tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),q(s,d),C=f}function po(s,l,c){s=s|0,l=l|0,c=c|0,or(n[s>>2]|0,n[l>>2]|0,c)}function PR(s,l){s=s|0,l=l|0,Es(n[s>>2]|0,n[l>>2]|0)}function tve(s){return s=s|0,wi(n[s>>2]|0)|0}function rve(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function nve(s,l){return s=s|0,l=l|0,s=ms(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function ive(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,Jj(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,1)}function Jj(s,l){s=s|0,l=l|0,dve(s,l)}function sve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,ove(k,Ho(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function ove(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[Q>>3]=d,n[k>>2]=m,ave(s,n[l+4>>2]|0,O,M,Q,k),C=B}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,za(k),l=da(l)|0,lve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Va(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function lve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Sl(cve()|0)|0,c=+VA(c),f=DR(f)|0,d=+VA(d),uve(s,hi(0,B|0,l|0,+c,f|0,+d,DR(m)|0)|0)}function cve(){var s=0;return o[7608]|0||(hve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Sl(s){return s=s|0,n[s+8>>2]|0}function VA(s){return s=+s,+ +SR(s)}function DR(s){return s=s|0,Zj(s)|0}function uve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(Ave(c,0),ii(f|0,c|0)|0,fve(s,c),pve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function Ave(s,l){s=s|0,l=l|0,Xj(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function fve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function pve(s){s=s|0,o[s+24>>0]=0}function Xj(s,l){s=s|0,l=l|0,n[s>>2]=l}function Zj(s){return s=s|0,s|0}function SR(s){return s=+s,+s}function hve(s){s=s|0,bl(s,gve()|0,4)}function gve(){return 1064}function bl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=Ap(l|0,c+1|0)|0}function dve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,El(l|0)}function mve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,0)}function yve(s){s=s|0,Lt(n[s>>2]|0)}function Eve(s){return s=s|0,rr(n[s>>2]|0)|0}function Cve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,Pc(n[s>>2]|0,y(l),y(c),f)}function wve(s){return s=s|0,+ +y(Bl(n[s>>2]|0))}function Ive(s){return s=s|0,+ +y(mg(n[s>>2]|0))}function Bve(s){return s=s|0,+ +y(Bu(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(LA(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(dp(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(Ga(n[s>>2]|0))}function Sve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Bl(n[l>>2]|0)),E[s+8>>3]=+y(mg(n[l>>2]|0)),E[s+16>>3]=+y(Bu(n[l>>2]|0)),E[s+24>>3]=+y(LA(n[l>>2]|0)),E[s+32>>3]=+y(dp(n[l>>2]|0)),E[s+40>>3]=+y(Ga(n[l>>2]|0))}function bve(s,l){return s=s|0,l=l|0,+ +y(yg(n[s>>2]|0,l))}function xve(s,l){return s=s|0,l=l|0,+ +y(mp(n[s>>2]|0,l))}function kve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Qve(){return Dn()|0}function Rve(){Fve(),Tve(),Lve(),Nve(),Ove(),Mve()}function Fve(){OLe(11713,4938,1)}function Tve(){rLe(10448)}function Lve(){OTe(10408)}function Nve(){oTe(10324)}function Ove(){hRe(10096)}function Mve(){Uve(9132)}function Uve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0,lt=0,Ue=0,qe=0,Nt=0,Mr=0,cr=0,Xt=0,Dr=0,Tr=0,ar=0,xn=0,ho=0,go=0,mo=0,ya=0,Fp=0,Tp=0,xl=0,Lp=0,Fu=0,Tu=0,Np=0,Op=0,Mp=0,Xr=0,kl=0,Up=0,kc=0,_p=0,Hp=0,Lu=0,Nu=0,Qc=0,Ys=0,Xa=0,Yo=0,Ql=0,nf=0,sf=0,Ou=0,of=0,af=0,Ws=0,Ds=0,Rl=0,Fn=0,lf=0,yo=0,Rc=0,Eo=0,Fc=0,cf=0,uf=0,Tc=0,Ks=0,Fl=0,Af=0,ff=0,pf=0,xr=0,Vn=0,Ss=0,Co=0,zs=0,Rr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Rr=l+632|0,zs=l+624|0,Co=l+616|0,Ss=l+608|0,Vn=l+600|0,xr=l+592|0,pf=l+584|0,ff=l+576|0,Af=l+568|0,Fl=l+560|0,Ks=l+552|0,Tc=l+544|0,uf=l+536|0,cf=l+528|0,Fc=l+520|0,Eo=l+512|0,Rc=l+504|0,yo=l+496|0,lf=l+488|0,Fn=l+480|0,Rl=l+472|0,Ds=l+464|0,Ws=l+456|0,af=l+448|0,of=l+440|0,Ou=l+432|0,sf=l+424|0,nf=l+416|0,Ql=l+408|0,Yo=l+400|0,Xa=l+392|0,Ys=l+384|0,Qc=l+376|0,Nu=l+368|0,Lu=l+360|0,Hp=l+352|0,_p=l+344|0,kc=l+336|0,Up=l+328|0,kl=l+320|0,Xr=l+312|0,Mp=l+304|0,Op=l+296|0,Np=l+288|0,Tu=l+280|0,Fu=l+272|0,Lp=l+264|0,xl=l+256|0,Tp=l+248|0,Fp=l+240|0,ya=l+232|0,mo=l+224|0,go=l+216|0,ho=l+208|0,xn=l+200|0,ar=l+192|0,Tr=l+184|0,Dr=l+176|0,Xt=l+168|0,cr=l+160|0,Mr=l+152|0,Nt=l+144|0,qe=l+136|0,Ue=l+128|0,lt=l+120|0,Je=l+112|0,et=l+104|0,Fe=l+96|0,Me=l+88|0,Ge=l+80|0,se=l+72|0,G=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,_ve(s,3646),Hve(s,3651,2)|0,qve(s,3665,2)|0,Gve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Rw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],jve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],ku(s,3706,c)|0,n[zs>>2]=1,n[zs+4>>2]=0,n[c>>2]=n[zs>>2],n[c+4>>2]=n[zs+4>>2],Sg(s,3722,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Sg(s,3734,c)|0,n[Ss>>2]=3,n[Ss+4>>2]=0,n[c>>2]=n[Ss>>2],n[c+4>>2]=n[Ss+4>>2],ku(s,3753,c)|0,n[Vn>>2]=4,n[Vn+4>>2]=0,n[c>>2]=n[Vn>>2],n[c+4>>2]=n[Vn+4>>2],ku(s,3769,c)|0,n[xr>>2]=5,n[xr+4>>2]=0,n[c>>2]=n[xr>>2],n[c+4>>2]=n[xr+4>>2],ku(s,3783,c)|0,n[pf>>2]=6,n[pf+4>>2]=0,n[c>>2]=n[pf>>2],n[c+4>>2]=n[pf+4>>2],ku(s,3796,c)|0,n[ff>>2]=7,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],ku(s,3813,c)|0,n[Af>>2]=8,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],ku(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Sg(s,3843,c)|0,n[Ks>>2]=4,n[Ks+4>>2]=0,n[c>>2]=n[Ks>>2],n[c+4>>2]=n[Ks+4>>2],Sg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],ku(s,3870,c)|0,n[uf>>2]=10,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],ku(s,3884,c)|0,n[cf>>2]=11,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],ku(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],vs(s,3907,c)|0,n[Eo>>2]=2,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],vs(s,3915,c)|0,n[Rc>>2]=3,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],vs(s,3928,c)|0,n[yo>>2]=4,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],vs(s,3948,c)|0,n[lf>>2]=5,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],vs(s,3960,c)|0,n[Fn>>2]=6,n[Fn+4>>2]=0,n[c>>2]=n[Fn>>2],n[c+4>>2]=n[Fn+4>>2],vs(s,3974,c)|0,n[Rl>>2]=7,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],vs(s,3983,c)|0,n[Ds>>2]=20,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],Rw(s,3999,c)|0,n[Ws>>2]=8,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],vs(s,4012,c)|0,n[af>>2]=9,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],vs(s,4022,c)|0,n[of>>2]=21,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Rw(s,4039,c)|0,n[Ou>>2]=10,n[Ou+4>>2]=0,n[c>>2]=n[Ou>>2],n[c+4>>2]=n[Ou+4>>2],vs(s,4053,c)|0,n[sf>>2]=11,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],vs(s,4065,c)|0,n[nf>>2]=12,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],vs(s,4084,c)|0,n[Ql>>2]=13,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],vs(s,4097,c)|0,n[Yo>>2]=14,n[Yo+4>>2]=0,n[c>>2]=n[Yo>>2],n[c+4>>2]=n[Yo+4>>2],vs(s,4117,c)|0,n[Xa>>2]=15,n[Xa+4>>2]=0,n[c>>2]=n[Xa>>2],n[c+4>>2]=n[Xa+4>>2],vs(s,4129,c)|0,n[Ys>>2]=16,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],vs(s,4148,c)|0,n[Qc>>2]=17,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],vs(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],vs(s,4181,c)|0,n[Lu>>2]=5,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Sg(s,4196,c)|0,n[Hp>>2]=6,n[Hp+4>>2]=0,n[c>>2]=n[Hp>>2],n[c+4>>2]=n[Hp+4>>2],Sg(s,4206,c)|0,n[_p>>2]=7,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Sg(s,4217,c)|0,n[kc>>2]=3,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],JA(s,4235,c)|0,n[Up>>2]=1,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],bR(s,4251,c)|0,n[kl>>2]=4,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Mp>>2]=6,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],JA(s,4293,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],JA(s,4306,c)|0,n[Np>>2]=8,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bR(s,4353,c)|0,n[Lp>>2]=12,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],bg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],XA(s,4376,c)|0,n[Tp>>2]=2,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],XA(s,4388,c)|0,n[Fp>>2]=13,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],bg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],bg(s,4411,c)|0,n[mo>>2]=15,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],bg(s,4421,c)|0,n[go>>2]=16,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],bg(s,4433,c)|0,n[ho>>2]=17,n[ho+4>>2]=0,n[c>>2]=n[ho>>2],n[c+4>>2]=n[ho+4>>2],bg(s,4446,c)|0,n[xn>>2]=18,n[xn+4>>2]=0,n[c>>2]=n[xn>>2],n[c+4>>2]=n[xn+4>>2],bg(s,4458,c)|0,n[ar>>2]=3,n[ar+4>>2]=0,n[c>>2]=n[ar>>2],n[c+4>>2]=n[ar+4>>2],XA(s,4471,c)|0,n[Tr>>2]=1,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],sP(s,4486,c)|0,n[Dr>>2]=10,n[Dr+4>>2]=0,n[c>>2]=n[Dr>>2],n[c+4>>2]=n[Dr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[cr>>2]=3,n[cr+4>>2]=0,n[c>>2]=n[cr>>2],n[c+4>>2]=n[cr+4>>2],bR(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],Yve(s,4530,c)|0,n[Nt>>2]=19,n[Nt+4>>2]=0,n[c>>2]=n[Nt>>2],n[c+4>>2]=n[Nt+4>>2],Wve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Kve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],zve(s,4568,c)|0,n[lt>>2]=2,n[lt+4>>2]=0,n[c>>2]=n[lt>>2],n[c+4>>2]=n[lt+4>>2],Vve(s,4578,c)|0,n[Je>>2]=20,n[Je+4>>2]=0,n[c>>2]=n[Je>>2],n[c+4>>2]=n[Je+4>>2],Jve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Rw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Rw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],Xve(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Zve(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],XA(s,4653,c)|0,n[G>>2]=5,n[G+4>>2]=0,n[c>>2]=n[G>>2],n[c+4>>2]=n[G+4>>2],XA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],XA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],XA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],XA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],XA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],$ve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],sP(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],sP(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],sP(s,4808,c)|0,C=l}function _ve(s,l){s=s|0,l=l|0;var c=0;c=sRe()|0,n[s>>2]=c,oRe(c,l),kp(n[s>>2]|0)}function Hve(s,l,c){return s=s|0,l=l|0,c=c|0,YQe(s,pn(l)|0,c,0),s|0}function qve(s,l,c){return s=s|0,l=l|0,c=c|0,xQe(s,pn(l)|0,c,0),s|0}function Gve(s,l,c){return s=s|0,l=l|0,c=c|0,gQe(s,pn(l)|0,c,0),s|0}function Rw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(s,l,d),C=f,s|0}function jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tke(s,l,d),C=f,s|0}function ku(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yke(s,l,d),C=f,s|0}function Sg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rke(s,l,d),C=f,s|0}function vs(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_xe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,l,d),C=f,s|0}function bR(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,l,d),C=f,s|0}function bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tbe(s,l,d),C=f,s|0}function XA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ybe(s,l,d),C=f,s|0}function sP(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rbe(s,l,d),C=f,s|0}function Yve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Se(s,l,d),C=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vSe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],zDe(s,l,d),C=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QDe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hDe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ePe(s,l,d),C=f,s|0}function ePe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],tPe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function tPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=xR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=rPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,nPe(m,f)|0,f),C=d}function xR(){var s=0,l=0;if(o[7616]|0||(t9(9136),ir(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t9(9136)}return 9136}function rPe(s){return s=s|0,0}function nPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=xR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],e9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,G=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,Ge=B,n[G>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],iPe(s+24|0,se,G,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function iPe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=sPe(l)|0,l=Kt(24)|0,$j(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function sPe(s){return s=s|0,n[s>>2]|0}function $j(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function e9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],e9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=M;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function t9(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function Fr(s){return s=s|0,n[s>>2]|0}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,3,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zr(){return 9228}function hPe(){return 1140}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function Vr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function dPe(s){return s=s|0,(n[(xR()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=yPe(f)|0,C=d,f|0}function yPe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=kR(r9()|0)|0,f?(QR(l,f),RR(c,l),EPe(s,c),s=FR(l)|0):s=CPe(s)|0,C=d,s|0}function r9(){var s=0;return o[7632]|0||(kPe(9184),ir(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function kR(s){return s=s|0,n[s+36>>2]|0}function QR(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function RR(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function EPe(s,l){s=s|0,l=l|0,vPe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FR(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function CPe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Ka(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],n9(k,B,c),n[d>>2]=k,C=Q,m|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function wPe(s){s=s|0,Vm(s),gt(s)}function IPe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function BPe(s){s=s|0,gt(s)}function vPe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=PPe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function PPe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,za(Q),s=da(s)|0,B=DPe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Va(Q),C=k,B|0}function DPe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Sl(SPe()|0)|0,l=+VA(l),c=+VA(c),f=+VA(f),d=+VA(d),m=+VA(m),_s(0,k|0,s|0,+l,+c,+f,+d,+m,+ +VA(B))|0}function SPe(){var s=0;return o[7624]|0||(bPe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function bPe(s){s=s|0,bl(s,xPe()|0,6)}function xPe(){return 1112}function kPe(s){s=s|0,Pp(s)}function QPe(s){s=s|0,i9(s+24|0),s9(s+16|0)}function i9(s){s=s|0,FPe(s)}function s9(s){s=s|0,RPe(s)}function RPe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function FPe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Pp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=NPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function TR(){var s=0,l=0;if(o[7640]|0||(a9(9232),ir(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(9232)}return 9232}function NPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=TR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(MPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function MPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=UPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_Pe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,HPe(s,k),qPe(k),C=M;return}}function UPe(s){return s=s|0,357913941}function _Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function HPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,YPe(s)}function GPe(s){s=s|0,jPe(s+24|0)}function jPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function YPe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,1,l,WPe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WPe(){return 1144}function KPe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=zPe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],VPe(l,B,c,f,d),C=m}function zPe(s){return s=s|0,(n[(TR()|0)+24>>2]|0)+(s*12|0)|0}function VPe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),Qu(B,c),c=+Ru(B,c),Qu(k,f),f=+Ru(k,f),ZA(Q,d),Q=$A(Q,d)|0,I7[m&1](s,c,f,Q),C=M}function Qu(s,l){s=s|0,l=+l}function Ru(s,l){return s=s|0,l=+l,+ +XPe(l)}function ZA(s,l){s=s|0,l=l|0}function $A(s,l){return s=s|0,l=l|0,JPe(l)|0}function JPe(s){return s=s|0,s|0}function XPe(s){return s=+s,+s}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],$Pe(s,c,d,1),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=eDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tDe(m,f)|0,f),C=d}function LR(){var s=0,l=0;if(o[7648]|0||(c9(9268),ir(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(9268)}return 9268}function eDe(s){return s=s|0,0}function tDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=LR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,iDe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sDe(s,k),oDe(k),C=M;return}}function nDe(s){return s=s|0,357913941}function iDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,cDe(s)}function aDe(s){s=s|0,lDe(s+24|0)}function lDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cDe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,4,l,uDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uDe(){return 1160}function ADe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=fDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=pDe(l,f)|0,C=c,l|0}function fDe(s){return s=s|0,(n[(LR()|0)+24>>2]|0)+(s*12|0)|0}function pDe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),u9(Og[c&31](s)|0)|0}function u9(s){return s=s|0,s&1|0}function hDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],gDe(s,c,d,0),C=f}function gDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=dDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,mDe(m,f)|0,f),C=d}function NR(){var s=0,l=0;if(o[7656]|0||(f9(9304),ir(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(9304)}return 9304}function dDe(s){return s=s|0,0}function mDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=NR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(yDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function yDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=EDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,CDe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,wDe(s,k),IDe(k),C=M;return}}function EDe(s){return s=s|0,357913941}function CDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function IDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,PDe(s)}function BDe(s){s=s|0,vDe(s+24|0)}function vDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function PDe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,5,l,DDe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DDe(){return 1164}function SDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=bDe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xDe(l,d,c),C=f}function bDe(s){return s=s|0,(n[(NR()|0)+24>>2]|0)+(s*12|0)|0}function xDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Dp(d,c),c=Sp(d,c)|0,rf[f&31](s,c),bp(d),C=m}function Dp(s,l){s=s|0,l=l|0,kDe(s,l)}function Sp(s,l){return s=s|0,l=l|0,s|0}function bp(s){s=s|0,GA(s)}function kDe(s,l){s=s|0,l=l|0,OR(s,l)}function OR(s,l){s=s|0,l=l|0,n[s>>2]=l}function QDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],RDe(s,c,d,0),C=f}function RDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=FDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,TDe(m,f)|0,f),C=d}function MR(){var s=0,l=0;if(o[7664]|0||(h9(9340),ir(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(9340)}return 9340}function FDe(s){return s=s|0,0}function TDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=MR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(LDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function LDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=NDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,ODe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,MDe(s,k),UDe(k),C=M;return}}function NDe(s){return s=s|0,357913941}function ODe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function MDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,qDe(s)}function _De(s){s=s|0,HDe(s+24|0)}function HDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function qDe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,4,l,GDe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GDe(){return 1180}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=YDe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=WDe(l,d,c)|0,C=f,c|0}function YDe(s){return s=s|0,(n[(MR()|0)+24>>2]|0)+(s*12|0)|0}function WDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),xg(d,c),d=kg(d,c)|0,d=oP(TF[f&15](s,d)|0)|0,C=m,d|0}function xg(s,l){s=s|0,l=l|0}function kg(s,l){return s=s|0,l=l|0,KDe(l)|0}function oP(s){return s=s|0,s|0}function KDe(s){return s=s|0,s|0}function zDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],VDe(s,c,d,0),C=f}function VDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=JDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,XDe(m,f)|0,f),C=d}function UR(){var s=0,l=0;if(o[7672]|0||(d9(9376),ir(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d9(9376)}return 9376}function JDe(s){return s=s|0,0}function XDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=UR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ZDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ZDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=$De(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,eSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,tSe(s,k),rSe(k),C=M;return}}function $De(s){return s=s|0,357913941}function eSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d9(s){s=s|0,sSe(s)}function nSe(s){s=s|0,iSe(s+24|0)}function iSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function sSe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,5,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m9(){return 1196}function oSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=aSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=lSe(l,f)|0,C=c,l|0}function aSe(s){return s=s|0,(n[(UR()|0)+24>>2]|0)+(s*12|0)|0}function lSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oP(Og[c&31](s)|0)|0}function cSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],uSe(s,c,d,1),C=f}function uSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_R()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ASe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,fSe(m,f)|0,f),C=d}function _R(){var s=0,l=0;if(o[7680]|0||(E9(9412),ir(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E9(9412)}return 9412}function ASe(s){return s=s|0,0}function fSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=_R()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(pSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=hSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,gSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,dSe(s,k),mSe(k),C=M;return}}function hSe(s){return s=s|0,357913941}function gSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function mSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E9(s){s=s|0,CSe(s)}function ySe(s){s=s|0,ESe(s+24|0)}function ESe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function CSe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,6,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C9(){return 1200}function wSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ISe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=BSe(l,f)|0,C=c,l|0}function ISe(s){return s=s|0,(n[(_R()|0)+24>>2]|0)+(s*12|0)|0}function BSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),aP(Og[c&31](s)|0)|0}function aP(s){return s=s|0,s|0}function vSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],PSe(s,c,d,0),C=f}function PSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=DSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,SSe(m,f)|0,f),C=d}function HR(){var s=0,l=0;if(o[7688]|0||(I9(9448),ir(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I9(9448)}return 9448}function DSe(s){return s=s|0,0}function SSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=HR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=xSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,kSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,QSe(s,k),RSe(k),C=M;return}}function xSe(s){return s=s|0,357913941}function kSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function RSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I9(s){s=s|0,LSe(s)}function FSe(s){s=s|0,TSe(s+24|0)}function TSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LSe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,6,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B9(){return 1204}function NSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=OSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],MSe(l,d,c),C=f}function OSe(s){return s=s|0,(n[(HR()|0)+24>>2]|0)+(s*12|0)|0}function MSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qR(d,c),d=GR(d,c)|0,rf[f&31](s,d),C=m}function qR(s,l){s=s|0,l=l|0}function GR(s,l){return s=s|0,l=l|0,USe(l)|0}function USe(s){return s=s|0,s|0}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],HSe(s,c,d,0),C=f}function HSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=qSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GSe(m,f)|0,f),C=d}function jR(){var s=0,l=0;if(o[7696]|0||(P9(9484),ir(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));P9(9484)}return 9484}function qSe(s){return s=s|0,0}function GSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=jR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=YSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,WSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KSe(s,k),zSe(k),C=M;return}}function YSe(s){return s=s|0,357913941}function WSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function zSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function P9(s){s=s|0,XSe(s)}function VSe(s){s=s|0,JSe(s+24|0)}function JSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function XSe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,1,l,ZSe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ZSe(){return 1212}function $Se(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ebe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],tbe(l,m,c,f),C=d}function ebe(s){return s=s|0,(n[(jR()|0)+24>>2]|0)+(s*12|0)|0}function tbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qR(m,c),m=GR(m,c)|0,xg(B,f),B=kg(B,f)|0,Uw[d&15](s,m,B),C=k}function rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nbe(s,c,d,1),C=f}function nbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ibe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sbe(m,f)|0,f),C=d}function YR(){var s=0,l=0;if(o[7704]|0||(S9(9520),ir(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));S9(9520)}return 9520}function ibe(s){return s=s|0,0}function sbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=YR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],D9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(obe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=abe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lbe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],D9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cbe(s,k),ube(k),C=M;return}}function abe(s){return s=s|0,357913941}function lbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ube(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function S9(s){s=s|0,pbe(s)}function Abe(s){s=s|0,fbe(s+24|0)}function fbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pbe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,1,l,hbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hbe(){return 1224}function gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=dbe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+mbe(l,m,c),C=d,+f}function dbe(s){return s=s|0,(n[(YR()|0)+24>>2]|0)+(s*12|0)|0}function mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,B=+SR(+v7[f&7](s,d)),C=m,+B}function ybe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Ebe(s,c,d,1),C=f}function Ebe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Cbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wbe(m,f)|0,f),C=d}function WR(){var s=0,l=0;if(o[7712]|0||(x9(9556),ir(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x9(9556)}return 9556}function Cbe(s){return s=s|0,0}function wbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=WR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Ibe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function b9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Ibe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Bbe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,vbe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Pbe(s,k),Dbe(k),C=M;return}}function Bbe(s){return s=s|0,357913941}function vbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Pbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x9(s){s=s|0,xbe(s)}function Sbe(s){s=s|0,bbe(s+24|0)}function bbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function xbe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,5,l,kbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kbe(){return 1232}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Rbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Fbe(l,d),C=f,+c}function Rbe(s){return s=s|0,(n[(WR()|0)+24>>2]|0)+(s*12|0)|0}function Fbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +SR(+B7[c&15](s))}function Tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Lbe(s,c,d,1),C=f}function Lbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Obe(m,f)|0,f),C=d}function KR(){var s=0,l=0;if(o[7720]|0||(Q9(9592),ir(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q9(9592)}return 9592}function Nbe(s){return s=s|0,0}function Obe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=KR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Mbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ube(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_be(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Hbe(s,k),qbe(k),C=M;return}}function Ube(s){return s=s|0,357913941}function _be(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q9(s){s=s|0,Ybe(s)}function Gbe(s){s=s|0,jbe(s+24|0)}function jbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ybe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,7,l,Wbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Wbe(){return 1276}function Kbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=zbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Vbe(l,f)|0,C=c,l|0}function zbe(s){return s=s|0,(n[(KR()|0)+24>>2]|0)+(s*12|0)|0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=R9(f)|0,C=d,f|0}function R9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=kR(F9()|0)|0,f?(QR(l,f),RR(c,l),Jbe(s,c),s=FR(l)|0):s=Xbe(s)|0,C=d,s|0}function F9(){var s=0;return o[7736]|0||(axe(9640),ir(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Jbe(s,l){s=s|0,l=l|0,txe(l,s,s+8|0)|0}function Xbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],zR(s,m,d),n[f>>2]=s,C=c,l|0}function zR(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function Zbe(s){s=s|0,Vm(s),gt(s)}function $be(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function exe(s){s=s|0,gt(s)}function txe(s,l,c){return s=s|0,l=l|0,c=c|0,l=rxe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function rxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,za(d),s=da(s)|0,c=nxe(s,n[l>>2]|0,+E[c>>3])|0,Va(d),C=f,c|0}function nxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Sl(ixe()|0)|0,l=DR(l)|0,yl(0,f|0,s|0,l|0,+ +VA(c))|0}function ixe(){var s=0;return o[7728]|0||(sxe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function sxe(s){s=s|0,bl(s,oxe()|0,2)}function oxe(){return 1264}function axe(s){s=s|0,Pp(s)}function lxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cxe(s,c,d,1),C=f}function cxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Axe(m,f)|0,f),C=d}function VR(){var s=0,l=0;if(o[7744]|0||(L9(9684),ir(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));L9(9684)}return 9684}function uxe(s){return s=s|0,0}function Axe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=VR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,hxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,gxe(s,k),dxe(k),C=M;return}}function pxe(s){return s=s|0,357913941}function hxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function L9(s){s=s|0,Exe(s)}function mxe(s){s=s|0,yxe(s+24|0)}function yxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Exe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,5,l,Cxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Cxe(){return 1280}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Ixe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Bxe(l,d,c)|0,C=f,c|0}function Ixe(s){return s=s|0,(n[(VR()|0)+24>>2]|0)+(s*12|0)|0}function Bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(m,c),m=$A(m,c)|0,Uw[f&15](d,s,m),m=R9(d)|0,C=B,m|0}function vxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Pxe(s,c,d,1),C=f}function Pxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Dxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Sxe(m,f)|0,f),C=d}function JR(){var s=0,l=0;if(o[7752]|0||(O9(9720),ir(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O9(9720)}return 9720}function Dxe(s){return s=s|0,0}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=JR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],N9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function N9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=xxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,kxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],N9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Qxe(s,k),Rxe(k),C=M;return}}function xxe(s){return s=s|0,357913941}function kxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Rxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O9(s){s=s|0,Lxe(s)}function Fxe(s){s=s|0,Txe(s+24|0)}function Txe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Lxe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,8,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1288}function Oxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Mxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Uxe(l,f)|0,C=c,l|0}function Mxe(s){return s=s|0,(n[(JR()|0)+24>>2]|0)+(s*12|0)|0}function Uxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),Zj(Og[c&31](s)|0)|0}function _xe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Hxe(s,c,d,0),C=f}function Hxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=qxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Gxe(m,f)|0,f),C=d}function XR(){var s=0,l=0;if(o[7760]|0||(U9(9756),ir(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U9(9756)}return 9756}function qxe(s){return s=s|0,0}function Gxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=XR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Yxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Wxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Kxe(s,k),zxe(k),C=M;return}}function Yxe(s){return s=s|0,357913941}function Wxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Kxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function zxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U9(s){s=s|0,Xxe(s)}function Vxe(s){s=s|0,Jxe(s+24|0)}function Jxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Xxe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,8,l,Zxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Zxe(){return 1292}function $xe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=eke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tke(l,d,c),C=f}function eke(s){return s=s|0,(n[(XR()|0)+24>>2]|0)+(s*12|0)|0}function tke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Qu(d,c),c=+Ru(d,c),C7[f&31](s,c),C=m}function rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nke(s,c,d,0),C=f}function nke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ike(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ske(m,f)|0,f),C=d}function ZR(){var s=0,l=0;if(o[7768]|0||(H9(9792),ir(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H9(9792)}return 9792}function ike(s){return s=s|0,0}function ske(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=ZR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ake(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cke(s,k),uke(k),C=M;return}}function ake(s){return s=s|0,357913941}function lke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H9(s){s=s|0,pke(s)}function Ake(s){s=s|0,fke(s+24|0)}function fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pke(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,1,l,hke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hke(){return 1300}function gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=dke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],mke(l,m,c,f),C=d}function dke(s){return s=s|0,(n[(ZR()|0)+24>>2]|0)+(s*12|0)|0}function mke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,Qu(B,f),f=+Ru(B,f),b7[d&15](s,m,f),C=k}function yke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Eke(s,c,d,0),C=f}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$R()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Cke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wke(m,f)|0,f),C=d}function $R(){var s=0,l=0;if(o[7776]|0||(G9(9828),ir(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G9(9828)}return 9828}function Cke(s){return s=s|0,0}function wke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=$R()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Ike(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Bke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,vke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Pke(s,k),Dke(k),C=M;return}}function Bke(s){return s=s|0,357913941}function vke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G9(s){s=s|0,xke(s)}function Ske(s){s=s|0,bke(s+24|0)}function bke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function xke(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,7,l,kke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kke(){return 1312}function Qke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Rke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Fke(l,d,c),C=f}function Rke(s){return s=s|0,(n[($R()|0)+24>>2]|0)+(s*12|0)|0}function Fke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,rf[f&31](s,d),C=m}function Tke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],Lke(s,c,d,0),C=f}function Lke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Oke(m,f)|0,f),C=d}function eF(){var s=0,l=0;if(o[7784]|0||(Y9(9864),ir(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y9(9864)}return 9864}function Nke(s){return s=s|0,0}function Oke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=eF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],j9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Mke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Uke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,_ke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],j9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Hke(s,k),qke(k),C=M;return}}function Uke(s){return s=s|0,357913941}function _ke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y9(s){s=s|0,Yke(s)}function Gke(s){s=s|0,jke(s+24|0)}function jke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Yke(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,8,l,Wke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Wke(){return 1320}function Kke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vke(l,d,c),C=f}function zke(s){return s=s|0,(n[(eF()|0)+24>>2]|0)+(s*12|0)|0}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Jke(d,c),d=Xke(d,c)|0,rf[f&31](s,d),C=m}function Jke(s,l){s=s|0,l=l|0}function Xke(s,l){return s=s|0,l=l|0,Zke(l)|0}function Zke(s){return s=s|0,s|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],eQe(s,c,d,0),C=f}function eQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,rQe(m,f)|0,f),C=d}function tF(){var s=0,l=0;if(o[7792]|0||(K9(9900),ir(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K9(9900)}return 9900}function tQe(s){return s=s|0,0}function rQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=tF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(nQe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=iQe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,sQe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,oQe(s,k),aQe(k),C=M;return}}function iQe(s){return s=s|0,357913941}function sQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function aQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K9(s){s=s|0,uQe(s)}function lQe(s){s=s|0,cQe(s+24|0)}function cQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function uQe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,22,l,AQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function AQe(){return 1344}function fQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=pQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],hQe(l,f),C=c}function pQe(s){return s=s|0,(n[(tF()|0)+24>>2]|0)+(s*12|0)|0}function hQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&127](s)}function gQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rF()|0,s=dQe(c)|0,hn(m,l,d,s,mQe(c,f)|0,f)}function rF(){var s=0,l=0;if(o[7800]|0||(V9(9936),ir(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(9936)}return 9936}function dQe(s){return s=s|0,s|0}function mQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(yQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function yQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=EQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,CQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,wQe(s,d),IQe(d),C=k;return}}function EQe(s){return s=s|0,536870911}function CQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function IQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,PQe(s)}function BQe(s){s=s|0,vQe(s+24|0)}function vQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PQe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,23,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DQe(s,l){s=s|0,l=l|0,bQe(n[(SQe(s)|0)>>2]|0,l)}function SQe(s){return s=s|0,(n[(rF()|0)+24>>2]|0)+(s<<3)|0}function bQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qR(f,l),l=GR(f,l)|0,tf[s&127](l),C=c}function xQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nF()|0,s=kQe(c)|0,hn(m,l,d,s,QQe(c,f)|0,f)}function nF(){var s=0,l=0;if(o[7808]|0||(X9(9972),ir(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Fr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(9972)}return 9972}function kQe(s){return s=s|0,s|0}function QQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(RQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function J9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function RQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=FQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,TQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,LQe(s,d),NQe(d),C=k;return}}function FQe(s){return s=s|0,536870911}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function LQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function NQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,UQe(s)}function OQe(s){s=s|0,MQe(s+24|0)}function MQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function UQe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,9,l,_Qe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _Qe(){return 1348}function HQe(s,l){return s=s|0,l=l|0,GQe(n[(qQe(s)|0)>>2]|0,l)|0}function qQe(s){return s=s|0,(n[(nF()|0)+24>>2]|0)+(s<<3)|0}function GQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,l=oP(Og[s&31](l)|0)|0,C=c,l|0}function Z9(s,l){s=s|0,l=l|0}function $9(s,l){return s=s|0,l=l|0,jQe(l)|0}function jQe(s){return s=s|0,s|0}function YQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iF()|0,s=WQe(c)|0,hn(m,l,d,s,KQe(c,f)|0,f)}function iF(){var s=0,l=0;if(o[7816]|0||(t5(10008),ir(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t5(10008)}return 10008}function WQe(s){return s=s|0,s|0}function KQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=VQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,XQe(s,d),ZQe(d),C=k;return}}function VQe(s){return s=s|0,536870911}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t5(s){s=s|0,tRe(s)}function $Qe(s){s=s|0,eRe(s+24|0)}function eRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function tRe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,15,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rRe(s){return s=s|0,iRe(n[(nRe(s)|0)>>2]|0)|0}function nRe(s){return s=s|0,(n[(iF()|0)+24>>2]|0)+(s<<3)|0}function iRe(s){return s=s|0,oP(wP[s&7]()|0)|0}function sRe(){var s=0;return o[7832]|0||(pRe(10052),ir(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function oRe(s,l){s=s|0,l=l|0,n[s>>2]=aRe()|0,n[s+4>>2]=lRe()|0,n[s+12>>2]=l,n[s+8>>2]=cRe()|0,n[s+32>>2]=2}function aRe(){return 11709}function lRe(){return 1188}function cRe(){return lP()|0}function uRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(ARe(c),gt(c)):l|0&&(Su(l),gt(l))}function xp(s,l){return s=s|0,l=l|0,l&s|0}function ARe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function lP(){var s=0;return o[7824]|0||(n[2511]=fRe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function fRe(){return 0}function pRe(s){s=s|0,Pp(s)}function hRe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,gRe(s,4827),dRe(s,4834,3)|0,mRe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],yRe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],ERe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],CRe(s,4891,c)|0,C=l}function gRe(s,l){s=s|0,l=l|0;var c=0;c=ZFe()|0,n[s>>2]=c,$Fe(c,l),kp(n[s>>2]|0)}function dRe(s,l,c){return s=s|0,l=l|0,c=c|0,NFe(s,pn(l)|0,c,0),s|0}function mRe(s,l,c){return s=s|0,l=l|0,c=c|0,wFe(s,pn(l)|0,c,0),s|0}function yRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rFe(s,l,d),C=f,s|0}function ERe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ORe(s,l,d),C=f,s|0}function CRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wRe(s,l,d),C=f,s|0}function wRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],IRe(s,c,d,1),C=f}function IRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=BRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,vRe(m,f)|0,f),C=d}function sF(){var s=0,l=0;if(o[7840]|0||(n5(10100),ir(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n5(10100)}return 10100}function BRe(s){return s=s|0,0}function vRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=sF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(PRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function r5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function PRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=DRe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,SRe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bRe(s,k),xRe(k),C=M;return}}function DRe(s){return s=s|0,357913941}function SRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n5(s){s=s|0,RRe(s)}function kRe(s){s=s|0,QRe(s+24|0)}function QRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function RRe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,6,l,FRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FRe(){return 1364}function TRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=LRe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NRe(l,d,c)|0,C=f,c|0}function LRe(s){return s=s|0,(n[(sF()|0)+24>>2]|0)+(s*12|0)|0}function NRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,d=u9(TF[f&15](s,d)|0)|0,C=m,d|0}function ORe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],MRe(s,c,d,0),C=f}function MRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=URe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,_Re(m,f)|0,f),C=d}function oF(){var s=0,l=0;if(o[7848]|0||(s5(10136),ir(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s5(10136)}return 10136}function URe(s){return s=s|0,0}function _Re(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=oF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(HRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function HRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qRe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,GRe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jRe(s,k),YRe(k),C=M;return}}function qRe(s){return s=s|0,357913941}function GRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s5(s){s=s|0,zRe(s)}function WRe(s){s=s|0,KRe(s+24|0)}function KRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zRe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,9,l,VRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VRe(){return 1372}function JRe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=XRe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZRe(l,d,c),C=f}function XRe(s){return s=s|0,(n[(oF()|0)+24>>2]|0)+(s*12|0)|0}function ZRe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Xe;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),$Re(d,c),B=y(eFe(d,c)),E7[f&1](s,B),C=m}function $Re(s,l){s=s|0,l=+l}function eFe(s,l){return s=s|0,l=+l,y(tFe(l))}function tFe(s){return s=+s,y(s)}function rFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(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],nFe(s,c,d,0),C=f}function nFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=iFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sFe(m,f)|0,f),C=d}function aF(){var s=0,l=0;if(o[7856]|0||(a5(10172),ir(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a5(10172)}return 10172}function iFe(s){return s=s|0,0}function sFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=aF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aFe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,lFe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cFe(s,k),uFe(k),C=M;return}}function aFe(s){return s=s|0,357913941}function lFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a5(s){s=s|0,pFe(s)}function AFe(s){s=s|0,fFe(s+24|0)}function fFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pFe(s){s=s|0;var l=0;l=zr()|0,Vr(s,2,3,l,hFe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hFe(){return 1380}function gFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=dFe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],mFe(l,m,c,f),C=d}function dFe(s){return s=s|0,(n[(aF()|0)+24>>2]|0)+(s*12|0)|0}function mFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,yFe(B,f),B=EFe(B,f)|0,Uw[d&15](s,m,B),C=k}function yFe(s,l){s=s|0,l=l|0}function EFe(s,l){return s=s|0,l=l|0,CFe(l)|0}function CFe(s){return s=s|0,(s|0)!=0|0}function wFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lF()|0,s=IFe(c)|0,hn(m,l,d,s,BFe(c,f)|0,f)}function lF(){var s=0,l=0;if(o[7864]|0||(c5(10208),ir(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(10208)}return 10208}function IFe(s){return s=s|0,s|0}function BFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(l5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(vFe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=PFe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,DFe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,l5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,SFe(s,d),bFe(d),C=k;return}}function PFe(s){return s=s|0,536870911}function DFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function SFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,QFe(s)}function xFe(s){s=s|0,kFe(s+24|0)}function kFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function QFe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,24,l,RFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RFe(){return 1392}function FFe(s,l){s=s|0,l=l|0,LFe(n[(TFe(s)|0)>>2]|0,l)}function TFe(s){return s=s|0,(n[(lF()|0)+24>>2]|0)+(s<<3)|0}function LFe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,tf[s&127](l),C=c}function NFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cF()|0,s=OFe(c)|0,hn(m,l,d,s,MFe(c,f)|0,f)}function cF(){var s=0,l=0;if(o[7872]|0||(A5(10244),ir(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A5(10244)}return 10244}function OFe(s){return s=s|0,s|0}function MFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(UFe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function u5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function UFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=_Fe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,HFe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,qFe(s,d),GFe(d),C=k;return}}function _Fe(s){return s=s|0,536870911}function HFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function qFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A5(s){s=s|0,WFe(s)}function jFe(s){s=s|0,YFe(s+24|0)}function YFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WFe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,16,l,KFe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KFe(){return 1400}function zFe(s){return s=s|0,JFe(n[(VFe(s)|0)>>2]|0)|0}function VFe(s){return s=s|0,(n[(cF()|0)+24>>2]|0)+(s<<3)|0}function JFe(s){return s=s|0,XFe(wP[s&7]()|0)|0}function XFe(s){return s=s|0,s|0}function ZFe(){var s=0;return o[7880]|0||(sTe(10280),ir(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function $Fe(s,l){s=s|0,l=l|0,n[s>>2]=eTe()|0,n[s+4>>2]=tTe()|0,n[s+12>>2]=l,n[s+8>>2]=rTe()|0,n[s+32>>2]=4}function eTe(){return 11711}function tTe(){return 1356}function rTe(){return lP()|0}function nTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(iTe(c),gt(c)):l|0&&(Dg(l),gt(l))}function iTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function sTe(s){s=s|0,Pp(s)}function oTe(s){s=s|0,aTe(s,4920),lTe(s)|0,cTe(s)|0}function aTe(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,kTe(c,l),kp(n[s>>2]|0)}function lTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,CTe()|0),s|0}function cTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,uTe()|0),s|0}function uTe(){var s=0;return o[7888]|0||(f5(10328),ir(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Fr(10328)|0||f5(10328),10328}function Qg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function f5(s){s=s|0,pTe(s),Rg(s,10)}function ATe(s){s=s|0,fTe(s+24|0)}function fTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pTe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,1,l,mTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hTe(s,l,c){s=s|0,l=l|0,c=+c,gTe(s,l,c)}function Rg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function gTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,Qu(B,c),E[d>>3]=+Ru(B,c),dTe(s,m,d),C=f}function dTe(s,l,c){s=s|0,l=l|0,c=c|0,W(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function mTe(){return 1404}function yTe(s,l){return s=s|0,l=+l,ETe(s,l)|0}function ETe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Ka(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,Qu(B,l),W(Q,s,+Ru(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],zR(s,B,m),n[d>>2]=s,C=f,c|0}function CTe(){var s=0;return o[7896]|0||(p5(10364),ir(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Fr(10364)|0||p5(10364),10364}function p5(s){s=s|0,BTe(s),Rg(s,55)}function wTe(s){s=s|0,ITe(s+24|0)}function ITe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function BTe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vTe(s){s=s|0,PTe(s)}function PTe(s){s=s|0,DTe(s)}function DTe(s){s=s|0,h5(s+8|0),o[s+24>>0]=1}function h5(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function STe(){return 1424}function bTe(){return xTe()|0}function xTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,f=Kt(16)|0,h5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],zR(f,m,d),n[c>>2]=f,C=l,s|0}function kTe(s,l){s=s|0,l=l|0,n[s>>2]=QTe()|0,n[s+4>>2]=RTe()|0,n[s+12>>2]=l,n[s+8>>2]=FTe()|0,n[s+32>>2]=5}function QTe(){return 11710}function RTe(){return 1416}function FTe(){return cP()|0}function TTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(LTe(c),gt(c)):l|0&>(l)}function LTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function cP(){var s=0;return o[7904]|0||(n[2600]=NTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function NTe(){return n[357]|0}function OTe(s){s=s|0,MTe(s,4926),UTe(s)|0}function MTe(s,l){s=s|0,l=l|0;var c=0;c=r9()|0,n[s>>2]=c,JTe(c,l),kp(n[s>>2]|0)}function UTe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,_Te()|0),s|0}function _Te(){var s=0;return o[7912]|0||(g5(10412),ir(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Fr(10412)|0||g5(10412),10412}function g5(s){s=s|0,GTe(s),Rg(s,57)}function HTe(s){s=s|0,qTe(s+24|0)}function qTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function GTe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,5,l,KTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jTe(s){s=s|0,YTe(s)}function YTe(s){s=s|0,WTe(s)}function WTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function KTe(){return 1432}function zTe(){return VTe()|0}function VTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Ka(8)|0,f=c,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=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],n9(k,m,s),n[c>>2]=k,C=B,f|0}function JTe(s,l){s=s|0,l=l|0,n[s>>2]=XTe()|0,n[s+4>>2]=ZTe()|0,n[s+12>>2]=l,n[s+8>>2]=$Te()|0,n[s+32>>2]=6}function XTe(){return 11704}function ZTe(){return 1436}function $Te(){return cP()|0}function eLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(tLe(c),gt(c)):l|0&>(l)}function tLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function rLe(s){s=s|0,nLe(s,4933),iLe(s)|0,sLe(s)|0}function nLe(s,l){s=s|0,l=l|0;var c=0;c=xLe()|0,n[s>>2]=c,kLe(c,l),kp(n[s>>2]|0)}function iLe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,ELe()|0),s|0}function sLe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,oLe()|0),s|0}function oLe(){var s=0;return o[7920]|0||(d5(10452),ir(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Fr(10452)|0||d5(10452),10452}function d5(s){s=s|0,cLe(s),Rg(s,1)}function aLe(s){s=s|0,lLe(s+24|0)}function lLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function cLe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,1,l,pLe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uLe(s,l,c){s=s|0,l=+l,c=+c,ALe(s,l,c)}function ALe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,Qu(k,l),E[m>>3]=+Ru(k,l),Qu(B,c),E[d>>3]=+Ru(B,c),fLe(s,m,d),C=f}function fLe(s,l,c){s=s|0,l=l|0,c=c|0,m5(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function m5(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function pLe(){return 1472}function hLe(s,l){return s=+s,l=+l,gLe(s,l)|0}function gLe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Ka(8)|0,c=d,m=Kt(16)|0,Qu(B,s),s=+Ru(B,s),Qu(k,l),m5(m,s,+Ru(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],y5(m,k,B),n[d>>2]=m,C=f,c|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function dLe(s){s=s|0,Vm(s),gt(s)}function mLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function yLe(s){s=s|0,gt(s)}function ELe(){var s=0;return o[7928]|0||(E5(10488),ir(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Fr(10488)|0||E5(10488),10488}function E5(s){s=s|0,ILe(s),Rg(s,60)}function CLe(s){s=s|0,wLe(s+24|0)}function wLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ILe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,6,l,DLe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BLe(s){s=s|0,vLe(s)}function vLe(s){s=s|0,PLe(s)}function PLe(s){s=s|0,C5(s+8|0),o[s+24>>0]=1}function C5(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function DLe(){return 1492}function SLe(){return bLe()|0}function bLe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,f=Kt(16)|0,C5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],y5(f,m,d),n[c>>2]=f,C=l,s|0}function xLe(){var s=0;return o[7936]|0||(NLe(10524),ir(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function kLe(s,l){s=s|0,l=l|0,n[s>>2]=QLe()|0,n[s+4>>2]=RLe()|0,n[s+12>>2]=l,n[s+8>>2]=FLe()|0,n[s+32>>2]=7}function QLe(){return 11700}function RLe(){return 1484}function FLe(){return cP()|0}function TLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(LLe(c),gt(c)):l|0&>(l)}function LLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function NLe(s){s=s|0,Pp(s)}function OLe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=MLe(c)|0,c=ULe(c,0)|0,gNe(s,l,c,uF()|0,0)}function MLe(s){return s=s|0,s|0}function ULe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(I5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(WLe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function uF(){var s=0,l=0;if(o[7944]|0||(w5(10568),ir(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w5(10568)}return 10568}function w5(s){s=s|0,qLe(s)}function _Le(s){s=s|0,HLe(s+24|0)}function HLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qLe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,17,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GLe(s){return s=s|0,YLe(n[(jLe(s)|0)>>2]|0)|0}function jLe(s){return s=s|0,(n[(uF()|0)+24>>2]|0)+(s<<3)|0}function YLe(s){return s=s|0,aP(wP[s&7]()|0)|0}function I5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function WLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=KLe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,zLe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,I5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,VLe(s,d),JLe(d),C=k;return}}function KLe(s){return s=s|0,536870911}function zLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function VLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function XLe(){ZLe()}function ZLe(){$Le(10604)}function $Le(s){s=s|0,eNe(s,4955)}function eNe(s,l){s=s|0,l=l|0;var c=0;c=tNe()|0,n[s>>2]=c,rNe(c,l),kp(n[s>>2]|0)}function tNe(){var s=0;return o[7952]|0||(ANe(10612),ir(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function rNe(s,l){s=s|0,l=l|0,n[s>>2]=oNe()|0,n[s+4>>2]=aNe()|0,n[s+12>>2]=l,n[s+8>>2]=lNe()|0,n[s+32>>2]=8}function kp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,jm()|0,n[c>>2]=s,nNe(10608,c),C=l}function jm(){return o[11714]|0||(n[2652]=0,ir(62,10608,U|0)|0,o[11714]=1),10608}function nNe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function iNe(s){s=s|0,sNe(s)}function sNe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function oNe(){return 11715}function aNe(){return 1496}function lNe(){return lP()|0}function cNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(uNe(c),gt(c)):l|0&>(l)}function uNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function ANe(s){s=s|0,Pp(s)}function fNe(s,l){s=s|0,l=l|0;var c=0,f=0;jm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(n7(AF(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;pNe(f,l)}while(0)}function AF(s){return s=s|0,n[s+12>>2]|0}function pNe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(GA(c),gt(c)),c=Kt(4)|0,Jj(c,l),n[s>>2]=c}function fF(){return o[11716]|0||(n[2664]=0,ir(63,10656,U|0)|0,o[11716]=1),10656}function B5(){var s=0;return o[11717]|0?s=n[2665]|0:(hNe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function hNe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function v5(){return 1572}function gNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,fF()|0,dNe(10656,O,M,Q,k,B),C=m}function dNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,$j(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function P5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0,lt=0;if(lt=C,C=C+32|0,Me=lt+20|0,Fe=lt+8|0,et=lt+4|0,Je=lt,l=n[l>>2]|0,l|0){Ge=Me+4|0,Q=Me+8|0,M=Fe+4|0,O=Fe+8|0,G=Fe+8|0,se=Me+8|0;do{if(B=l+4|0,k=pF(B)|0,k|0){if(d=Fw(k)|0,n[Me>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Tw(k)|0)+1|0,mNe(Me,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):hF(Me,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?yNe(Fe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[G>>2]|0}while(0);n[et>>2]=uP(B)|0,n[Je>>2]=Fr(k)|0,ENe(c,s,et,Je,Me,Fe),gF(Fe),ef(Me)}l=n[l>>2]|0}while((l|0)!=0)}C=lt}function pF(s){return s=s|0,n[s+12>>2]|0}function Fw(s){return s=s|0,n[s+12>>2]|0}function Tw(s){return s=s|0,n[s+16>>2]|0}function mNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(F5(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),T5(s,c),L5(c)),C=d}function hF(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R5(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,F5(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,T5(s,c),L5(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function yNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=Q5(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,MNe(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,UNe(s,c),_Ne(c),C=B;return}}function uP(s){return s=s|0,n[s>>2]|0}function ENe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,CNe(s,l,c,f,d,m)}function gF(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ef(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function CNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,G=B+24|0,Q=B+12|0,M=B,za(k),s=da(s)|0,n[G>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,dF(Q,d),wNe(M,m),n[O>>2]=n[G>>2],INe(s,O,c,f,Q,M),gF(M),ef(Q),Va(k),C=B}function dF(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NNe(s,f),ONe(s,n[l>>2]|0,n[c>>2]|0,f))}function wNe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(TNe(s,f),LNe(s,n[l>>2]|0,n[c>>2]|0,f))}function INe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,O=B+28|0,G=B+24|0,k=B+12|0,Q=B,M=Sl(BNe()|0)|0,n[G>>2]=n[l>>2],n[O>>2]=n[G>>2],l=Fg(O)|0,c=D5(c)|0,f=mF(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],G=d+8|0,n[k+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[d>>2]=0,d=yF(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],G=m+8|0,n[Q+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[m>>2]=0,oo(0,M|0,s|0,l|0,c|0,f|0,d|0,vNe(Q)|0)|0,gF(Q),ef(k),C=B}function BNe(){var s=0;return o[7968]|0||(RNe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Fg(s){return s=s|0,b5(s)|0}function D5(s){return s=s|0,S5(s)|0}function mF(s){return s=s|0,aP(s)|0}function yF(s){return s=s|0,DNe(s)|0}function vNe(s){return s=s|0,PNe(s)|0}function PNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Ka(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=S5(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function S5(s){return s=s|0,s|0}function DNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Ka(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b5((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=kR(x5()|0)|0,f?(QR(l,f),RR(c,l),lUe(s,c),s=FR(l)|0):s=SNe(s)|0,C=d,s|0}function x5(){var s=0;return o[7960]|0||(QNe(10664),ir(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function SNe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function bNe(s){s=s|0,Vm(s),gt(s)}function xNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function kNe(s){s=s|0,gt(s)}function QNe(s){s=s|0,Pp(s)}function RNe(s){s=s|0,bl(s,FNe()|0,5)}function FNe(){return 1676}function TNe(s,l){s=s|0,l=l|0;var c=0;if((Q5(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Tt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function LNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Pr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function Q5(s){return s=s|0,1073741823}function NNe(s,l){s=s|0,l=l|0;var c=0;if((R5(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Tt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Pr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R5(s){return s=s|0,1073741823}function MNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function UNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Ne(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function F5(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function T5(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function L5(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0;if(Fe=C,C=C+32|0,O=Fe+20|0,G=Fe+12|0,M=Fe+16|0,se=Fe+4|0,Ge=Fe,Me=Fe+8|0,k=B5()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(O,B),qNe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=v5()|0,B=n[m>>2]|0,B|0)do xc(O,B),n[G>>2]=n[m+4>>2],GNe(l,O,G),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(jm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(O,n[(Ym(l)|0)>>2]|0),n[G>>2]=AF(l)|0,jNe(c,O,G),m=n[m>>2]|0;while((m|0)!=0);if(xc(M,0),m=fF()|0,n[O>>2]=n[M>>2],P5(O,m,d),m=n[(jm()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,xc(G,n[(Ym(Q)|0)>>2]|0),YNe(se,N5(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):hF(O,Ge),B=n[B>>2]|0;while((B|0)!=0);WNe(f,G,O),ef(O)}n[Me>>2]=n[G>>2],M=O5(Q)|0,n[O>>2]=n[Me>>2],P5(O,M,d),s9(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function qNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,iOe(s,l,c,f)}function GNe(s,l,c){s=s|0,l=l|0,c=c|0,nOe(s,l,c)}function Ym(s){return s=s|0,s|0}function jNe(s,l,c){s=s|0,l=l|0,c=c|0,$Ne(s,l,c)}function N5(s){return s=s|0,s+16|0}function YNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=ZNe(c)|0,f|0){if(f=Kt(12)|0,B=(M5(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(M5(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function WNe(s,l,c){s=s|0,l=l|0,c=c|0,KNe(s,l,c)}function O5(s){return s=s|0,s+24|0}function KNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,za(d),s=da(s)|0,n[k>>2]=n[l>>2],dF(m,c),n[B>>2]=n[k>>2],zNe(s,B,m),ef(m),Va(d),C=f}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Sl(VNe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,so(0,m|0,s|0,l|0,yF(d)|0)|0,ef(d),C=f}function VNe(){var s=0;return o[7976]|0||(JNe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function JNe(s){s=s|0,bl(s,XNe()|0,2)}function XNe(){return 1732}function ZNe(s){return s=s|0,n[s>>2]|0}function M5(s){return s=s|0,n[s>>2]|0}function $Ne(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,za(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Sl(eOe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Fg(m)|0,so(0,d|0,s|0,l|0,D5(c)|0)|0,C=f}function eOe(){var s=0;return o[7984]|0||(tOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function tOe(s){s=s|0,bl(s,rOe()|0,2)}function rOe(){return 1744}function nOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,za(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,za(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],sOe(s,B,c,f),Va(m),C=d}function sOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Sl(oOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,c=Wm(c)|0,hc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function oOe(){var s=0;return o[7992]|0||(lOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,aOe(s)|0}function aOe(s){return s=s|0,s&255|0}function lOe(s){s=s|0,bl(s,cOe()|0,3)}function cOe(){return 1756}function uOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,OR(s,0),f=aUe(l)|0,n[k>>2]=0,G=k+4|0,n[G>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,AOe(Q,c,M),AP(s,Q)|0,jA(Q);break}case 8:{G=vF(l)|0,o[M>>0]=8,xc(O,n[G+4>>2]|0),fOe(Q,c,M,O,G+8|0),AP(s,Q)|0,jA(Q);break}case 9:{if(m=vF(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[G>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[G>>2]=(n[G>>2]|0)+4):hF(k,Q),l;)d=d+4|0;o[M>>0]=9,xc(O,n[m+8>>2]|0),pOe(Q,c,M,O,k),AP(s,Q)|0,jA(Q);break}default:G=vF(l)|0,o[M>>0]=f,xc(O,n[G+4>>2]|0),hOe(Q,c,M,O),AP(s,Q)|0,jA(Q)}ef(k),C=se}function AOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,za(d),l=da(l)|0,SOe(s,l,o[c>>0]|0),Va(d),C=f}function AP(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&SA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function fOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,za(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],BOe(s,l,c,k,d),Va(B),C=m}function pOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,za(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],dF(k,d),n[Q>>2]=n[M>>2],EOe(s,l,c,Q,k),ef(k),Va(B),C=m}function hOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,za(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],gOe(s,l,c,B),Va(m),C=d}function gOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Sl(dOe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],fP(s,so(0,B|0,l|0,c|0,Fg(m)|0)|0),C=d}function dOe(){var s=0;return o[8e3]|0||(mOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function fP(s,l){s=s|0,l=l|0,OR(s,l)}function mOe(s){s=s|0,bl(s,yOe()|0,2)}function yOe(){return 1772}function EOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+16|0,M=m+12|0,B=m,k=Sl(COe()|0)|0,c=Wm(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=Fg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,fP(s,hc(0,k|0,l|0,c|0,f|0,yF(B)|0)|0),ef(B),C=m}function COe(){var s=0;return o[8008]|0||(wOe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function wOe(s){s=s|0,bl(s,IOe()|0,3)}function IOe(){return 1784}function BOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Sl(vOe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Fg(k)|0,fP(s,hc(0,B|0,l|0,c|0,f|0,mF(d)|0)|0),C=m}function vOe(){var s=0;return o[8016]|0||(POe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function POe(s){s=s|0,bl(s,DOe()|0,3)}function DOe(){return 1800}function SOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Sl(bOe()|0)|0,fP(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function bOe(){var s=0;return o[8024]|0||(xOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function xOe(s){s=s|0,bl(s,kOe()|0,1)}function kOe(){return 1816}function QOe(){ROe(),FOe(),TOe()}function ROe(){n[2702]=p7(65536)|0}function FOe(){eMe(10856)}function TOe(){LOe(10816)}function LOe(s){s=s|0,NOe(s,5044),OOe(s)|0}function NOe(s,l){s=s|0,l=l|0;var c=0;c=x5()|0,n[s>>2]=c,zOe(c,l),kp(n[s>>2]|0)}function OOe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,MOe()|0),s|0}function MOe(){var s=0;return o[8032]|0||(_5(10820),ir(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Fr(10820)|0||_5(10820),10820}function _5(s){s=s|0,HOe(s),Rg(s,25)}function UOe(s){s=s|0,_Oe(s+24|0)}function _Oe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HOe(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,18,l,YOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qOe(s,l){s=s|0,l=l|0,GOe(s,l)}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,xg(d,l),n[f>>2]=kg(d,l)|0,jOe(s,f),C=c}function jOe(s,l){s=s|0,l=l|0,H5(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function H5(s,l){s=s|0,l=l|0,n[s>>2]=l}function YOe(){return 1824}function WOe(s){return s=s|0,KOe(s)|0}function KOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Ka(8)|0,l=f,k=Kt(4)|0,xg(d,s),H5(k,kg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function Ka(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=p7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function zOe(s,l){s=s|0,l=l|0,n[s>>2]=VOe()|0,n[s+4>>2]=JOe()|0,n[s+12>>2]=l,n[s+8>>2]=XOe()|0,n[s+32>>2]=9}function VOe(){return 11744}function JOe(){return 1832}function XOe(){return cP()|0}function ZOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&($Oe(c),gt(c)):l|0&>(l)}function $Oe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function eMe(s){s=s|0,tMe(s,5052),rMe(s)|0,nMe(s,5058,26)|0,iMe(s,5069,1)|0,sMe(s,5077,10)|0,oMe(s,5087,19)|0,aMe(s,5094,27)|0}function tMe(s,l){s=s|0,l=l|0;var c=0;c=$4e()|0,n[s>>2]=c,eUe(c,l),kp(n[s>>2]|0)}function rMe(s){s=s|0;var l=0;return l=n[s>>2]|0,Qg(l,U4e()|0),s|0}function nMe(s,l,c){return s=s|0,l=l|0,c=c|0,w4e(s,pn(l)|0,c,0),s|0}function iMe(s,l,c){return s=s|0,l=l|0,c=c|0,o4e(s,pn(l)|0,c,0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,MMe(s,pn(l)|0,c,0),s|0}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,BMe(s,pn(l)|0,c,0),s|0}function q5(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function aMe(s,l,c){return s=s|0,l=l|0,c=c|0,lMe(s,pn(l)|0,c,0),s|0}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=EF()|0,s=cMe(c)|0,hn(m,l,d,s,uMe(c,f)|0,f)}function EF(){var s=0,l=0;if(o[8040]|0||(j5(10860),ir(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(10860)}return 10860}function cMe(s){return s=s|0,s|0}function uMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=EF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(G5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(AMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function AMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=fMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,pMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,G5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,hMe(s,d),gMe(d),C=k;return}}function fMe(s){return s=s|0,536870911}function pMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function hMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function gMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,yMe(s)}function dMe(s){s=s|0,mMe(s+24|0)}function mMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function yMe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,11,l,EMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function EMe(){return 1840}function CMe(s,l,c){s=s|0,l=l|0,c=c|0,IMe(n[(wMe(s)|0)>>2]|0,l,c)}function wMe(s){return s=s|0,(n[(EF()|0)+24>>2]|0)+(s<<3)|0}function IMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,xg(m,l),l=kg(m,l)|0,xg(d,c),c=kg(d,c)|0,rf[s&31](l,c),C=f}function BMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CF()|0,s=vMe(c)|0,hn(m,l,d,s,PMe(c,f)|0,f)}function CF(){var s=0,l=0;if(o[8048]|0||(W5(10896),ir(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(10896)}return 10896}function vMe(s){return s=s|0,s|0}function PMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(DMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function DMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,bMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,xMe(s,d),kMe(d),C=k;return}}function SMe(s){return s=s|0,536870911}function bMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function xMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,FMe(s)}function QMe(s){s=s|0,RMe(s+24|0)}function RMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function FMe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,11,l,TMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function TMe(){return 1852}function LMe(s,l){return s=s|0,l=l|0,OMe(n[(NMe(s)|0)>>2]|0,l)|0}function NMe(s){return s=s|0,(n[(CF()|0)+24>>2]|0)+(s<<3)|0}function OMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,xg(f,l),l=kg(f,l)|0,l=aP(Og[s&31](l)|0)|0,C=c,l|0}function MMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wF()|0,s=UMe(c)|0,hn(m,l,d,s,_Me(c,f)|0,f)}function wF(){var s=0,l=0;if(o[8056]|0||(z5(10932),ir(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(10932)}return 10932}function UMe(s){return s=s|0,s|0}function _Me(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(HMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function HMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=qMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,GMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,jMe(s,d),YMe(d),C=k;return}}function qMe(s){return s=s|0,536870911}function GMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function jMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,zMe(s)}function WMe(s){s=s|0,KMe(s+24|0)}function KMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zMe(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,7,l,VMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VMe(){return 1860}function JMe(s,l,c){return s=s|0,l=l|0,c=c|0,ZMe(n[(XMe(s)|0)>>2]|0,l,c)|0}function XMe(s){return s=s|0,(n[(wF()|0)+24>>2]|0)+(s<<3)|0}function ZMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,$Me(Q,l),e4e(k,Q,l),Dp(d,c),c=Sp(d,c)|0,n[B>>2]=n[k>>2],Uw[s&15](m,B,c),c=t4e(m)|0,jA(m),bp(d),C=f,c|0}function $Me(s,l){s=s|0,l=l|0}function e4e(s,l,c){s=s|0,l=l|0,c=c|0,r4e(s,c)}function t4e(s){return s=s|0,da(s)|0}function r4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(n4e(c,0),ii(f|0,c|0)|0,i4e(s,c),s4e(c)):n[s>>2]=n[l>>2],C=d}function n4e(s,l){s=s|0,l=l|0,Xj(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function i4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function s4e(s){s=s|0,o[s+8>>0]=0}function o4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IF()|0,s=a4e(c)|0,hn(m,l,d,s,l4e(c,f)|0,f)}function IF(){var s=0,l=0;if(o[8064]|0||(J5(10968),ir(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Fr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J5(10968)}return 10968}function a4e(s){return s=s|0,s|0}function l4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(V5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(c4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function c4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=u4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,A4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,V5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,f4e(s,d),p4e(d),C=k;return}}function u4e(s){return s=s|0,536870911}function A4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function p4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J5(s){s=s|0,d4e(s)}function h4e(s){s=s|0,g4e(s+24|0)}function g4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function d4e(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,1,l,m4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m4e(){return 1872}function y4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,C4e(n[(E4e(s)|0)>>2]|0,l,c,f,d,m)}function E4e(s){return s=s|0,(n[(IF()|0)+24>>2]|0)+(s<<3)|0}function C4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,G=B,Dp(k,l),l=Sp(k,l)|0,Dp(Q,c),c=Sp(Q,c)|0,Dp(M,f),f=Sp(M,f)|0,Dp(O,d),d=Sp(O,d)|0,Dp(G,m),m=Sp(G,m)|0,y7[s&1](l,c,f,d,m),bp(G),bp(O),bp(M),bp(Q),bp(k),C=B}function w4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BF()|0,s=I4e(c)|0,hn(m,l,d,s,B4e(c,f)|0,f)}function BF(){var s=0,l=0;if(o[8072]|0||(Z5(11004),ir(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Fr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(11004)}return 11004}function I4e(s){return s=s|0,s|0}function B4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BF()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(v4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function v4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=P4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,D4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,S4e(s,d),b4e(d),C=k;return}}function P4e(s){return s=s|0,536870911}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Pr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function b4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,Q4e(s)}function x4e(s){s=s|0,k4e(s+24|0)}function k4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function Q4e(s){s=s|0;var l=0;l=zr()|0,Vr(s,1,12,l,R4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function R4e(){return 1896}function F4e(s,l,c){s=s|0,l=l|0,c=c|0,L4e(n[(T4e(s)|0)>>2]|0,l,c)}function T4e(s){return s=s|0,(n[(BF()|0)+24>>2]|0)+(s<<3)|0}function L4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,N4e(m,l),l=O4e(m,l)|0,Dp(d,c),c=Sp(d,c)|0,rf[s&31](l,c),bp(d),C=f}function N4e(s,l){s=s|0,l=l|0}function O4e(s,l){return s=s|0,l=l|0,M4e(l)|0}function M4e(s){return s=s|0,s|0}function U4e(){var s=0;return o[8080]|0||($5(11040),ir(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Fr(11040)|0||$5(11040),11040}function $5(s){s=s|0,q4e(s),Rg(s,71)}function _4e(s){s=s|0,H4e(s+24|0)}function H4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function q4e(s){s=s|0;var l=0;l=zr()|0,Vr(s,5,7,l,W4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function G4e(s){s=s|0,j4e(s)}function j4e(s){s=s|0,Y4e(s)}function Y4e(s){s=s|0,o[s+8>>0]=1}function W4e(){return 1936}function K4e(){return z4e()|0}function z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Ka(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],V4e(f,m,d),n[c>>2]=f,C=l,s|0}function V4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function J4e(s){s=s|0,Vm(s),gt(s)}function X4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function Z4e(s){s=s|0,gt(s)}function $4e(){var s=0;return o[8088]|0||(oUe(11076),ir(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function eUe(s,l){s=s|0,l=l|0,n[s>>2]=tUe()|0,n[s+4>>2]=rUe()|0,n[s+12>>2]=l,n[s+8>>2]=nUe()|0,n[s+32>>2]=10}function tUe(){return 11745}function rUe(){return 1940}function nUe(){return lP()|0}function iUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(xp(f,896)|0)==512?c|0&&(sUe(c),gt(c)):l|0&>(l)}function sUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Qp(s)}function oUe(s){s=s|0,Pp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function vF(s){return s=s|0,n[s>>2]|0}function aUe(s){return s=s|0,o[n[s>>2]>>0]|0}function lUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],cUe(l,f)|0,C=c}function cUe(s,l){s=s|0,l=l|0;var c=0;return c=uUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function uUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,za(f),s=da(s)|0,l=AUe(s,n[l>>2]|0)|0,Va(f),C=c,l|0}function za(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function AUe(s,l){s=s|0,l=l|0;var c=0;return c=Sl(fUe()|0)|0,Qn(0,c|0,s|0,mF(l)|0)|0}function Va(s){s=s|0,q5(n[s>>2]|0,n[s+4>>2]|0)}function fUe(){var s=0;return o[8096]|0||(pUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function pUe(s){s=s|0,bl(s,hUe()|0,1)}function hUe(){return 1948}function gUe(){dUe()}function dUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0;if(Me=C,C=C+16|0,O=Me+4|0,G=Me,Li(65536,10804,n[2702]|0,10812),c=B5()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;Ac(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=v5()|0,l=n[s>>2]|0,l|0)do Au(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);Au(mUe()|0,5167),M=jm()|0,s=n[M>>2]|0;e:do if(s|0){do yUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(EUe(d)|0);)if(n[G>>2]=Q,n[O>>2]=n[G>>2],CUe(M,O)|0,!s)break e;if(wUe(d),Q=n[Q>>2]|0,l=e7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(N5(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=IUe(d)|0,c=e7(d)|0,f=BUe(d)|0,fu(Fe|0,l|0,B|0,k|0,c|0,f|0,AF(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(fF()|0)>>2]|0,s|0)do Fe=s+4|0,M=pF(Fe)|0,d=Lw(M)|0,m=Fw(M)|0,B=(Tw(M)|0)+1|0,k=pP(M)|0,Q=t7(Fe)|0,M=Fr(M)|0,O=uP(Fe)|0,G=PF(Fe)|0,Cl(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,G|0,DF(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(jm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(O5(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=pF(l)|0;r:do if(f|0)switch(Fr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Fw(f)|0,M=(Tw(f)|0)+1|0,O=pP(f)|0,G=Fr(f)|0,Fe=uP(l)|0,Cl(se|0,k|0,Q|0,M|0,O|0,0,G|0,Fe|0,PF(l)|0,DF(l)|0);break r}case 1:{B=Lw(f)|0,k=Fw(f)|0,Q=(Tw(f)|0)+1|0,M=pP(f)|0,O=t7(l)|0,G=Fr(f)|0,Fe=uP(l)|0,Cl(se|0,B|0,k|0,Q|0,M|0,O|0,G|0,Fe|0,PF(l)|0,DF(l)|0);break r}case 5:{M=Lw(f)|0,O=Fw(f)|0,G=(Tw(f)|0)+1|0,Fe=pP(f)|0,Cl(se|0,M|0,O|0,G|0,Fe|0,vUe(f)|0,Fr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);we(),C=Me}function mUe(){return 11703}function yUe(s){s=s|0,o[s+40>>0]=0}function EUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function CUe(s,l){return s=s|0,l=l|0,l=PUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function wUe(s){s=s|0,o[s+40>>0]=1}function e7(s){return s=s|0,n[s+20>>2]|0}function IUe(s){return s=s|0,n[s+8>>2]|0}function BUe(s){return s=s|0,n[s+32>>2]|0}function pP(s){return s=s|0,n[s+4>>2]|0}function t7(s){return s=s|0,n[s+4>>2]|0}function PF(s){return s=s|0,n[s+8>>2]|0}function DF(s){return s=s|0,n[s+16>>2]|0}function vUe(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s>>2]|0}function hP(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0,lt=0,Ue=0,qe=0,Nt=0;Nt=C,C=C+16|0,se=Nt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,G=n[2783]|0,c=G>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=G&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Nt,qe|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=G&~(1<>2]=l,n[s>>2]=c,s=G),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Nt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+M|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=G|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Nt,qe|0}else G=M}else G=M}else G=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(G=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|G|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,G=G>>>B,m=G>>>5&8,G=G>>>m,k=G>>>2&4,G=G>>>k,O=G>>>1&2,G=G>>>O,c=G>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(G>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,G=c>>>0>>0,c=G?c:f,s=G?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return qe=0,C=Nt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(lt|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+M|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Nt,qe|0}else G=M}else G=M;else G=-1;while(0);if(c=n[2785]|0,c>>>0>=G>>>0)return l=c-G|0,s=n[2788]|0,l>>>0>15?(qe=s+G|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=G|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Nt,qe|0;if(B=n[2786]|0,B>>>0>G>>>0)return lt=B-G|0,n[2786]=lt,qe=n[2789]|0,Ue=qe+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[qe+4>>2]=G|3,qe=qe+8|0,C=Nt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=G+48|0,Q=G+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=G>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return qe=0,C=Nt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Rp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=Rp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Me=Ge+-1|0,l=((Me&l|0)==0?0:(Me+l&0-Ge)-l|0)+M|0,Ge=n[2891]|0,Me=l+Ge|0,l>>>0>G>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Me>>>0<=Ge>>>0|Me>>>0>Fe>>>0){l=0;break}if(s=Rp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((Rp(s|0)|0)==-1){Rp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(lt=Rp(M|0)|0,Fe=Rp(0)|0,et=Fe-lt|0,Je=et>>>0>(G+40|0)>>>0,!((lt|0)==-1|Je^1|lt>>>0>>0&((lt|0)!=-1&(Fe|0)!=-1)^1))&&(B=Je?et:l,m=lt,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+G|0,k=l-O-G|0,n[O+4>>2]=G|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=M,n[M+4>>2]=qe|1,n[M+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(lt|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=qe,n[M+12>>2]=c,n[M+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=M,n[M+4>>2]=qe|1;while(0);return qe=O+8|0,C=Nt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(lt|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|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 qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>G>>>0)return lt=l-G|0,n[2786]=lt,qe=n[2789]|0,Ue=qe+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[qe+4>>2]=G|3,qe=qe+8|0,C=Nt,qe|0}return n[(Km()|0)>>2]=12,qe=0,C=Nt,qe|0}function gP(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function DUe(){return 11628}function SUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=kUe(n[s+60>>2]|0)|0,s=dP(gc(6,c|0)|0)|0,C=l,s|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0;G=C,C=C+48|0,M=G+16|0,m=G,d=G+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=dP(Ni(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=dP(Ni(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=G,c|0}function bUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(dP(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function dP(s){return s=s|0,s>>>0>4294963200&&(n[(Km()|0)>>2]=0-s,s=-1),s|0}function Km(){return(xUe()|0)+64|0}function xUe(){return SF()|0}function SF(){return 2084}function kUe(s){return s=s|0,s|0}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,pu(54,f|0)|0)&&(o[s+75>>0]=-1),f=r7(s,l,c)|0,C=d,f|0}function n7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function RUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0;Fe=C,C=C+224|0,O=Fe+120|0,G=Fe+80|0,Ge=Fe,Me=Fe+136|0,f=G,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(bF(0,l,O,Ge,G)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=FUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bF(s,l,O,Ge,G)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=bF(s,l,O,Ge,G)|0,m&&(CP[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&TUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bF(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0,lt=0,Ue=0,qe=0,Nt=0,Mr=0,cr=0,Xt=0,Dr=0,Tr=0,ar=0;ar=C,C=C+64|0,cr=ar+16|0,Xt=ar,Nt=ar+24|0,Dr=ar+8|0,Tr=ar+20|0,n[cr>>2]=l,lt=(s|0)!=0,Ue=Nt+40|0,qe=Ue,Nt=Nt+39|0,Mr=Dr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Km()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Je=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Je=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[cr>>2]=et,B=o[et>>0]|0,k=et}t:do if((Je|0)==9)for(;;){if(Je=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[cr>>2]=k,(o[k>>0]|0)==37)Je=9;else break}while(0);if(B=B-l|0,lt&&os(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Fe=-1,n[cr>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,G=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;G=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}lt?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[cr>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=s7(cr)|0,(B|0)<0){m=-1;break}Q=n[cr>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[cr>>2]=Q+1,k=s7(cr)|0,Q=n[cr>>2]|0;break}if(G=Q+2|0,k=(o[G>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[G>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[cr>>2]=Q;break}if(O|0){m=-1;break e}lt?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[cr>>2]=G,Q=G}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[cr>>2]=et,G=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=G&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(G<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(G<<24>>24==19)if(Ge){m=-1;break e}else Je=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Je=Xt,n[Je>>2]=n[Ge>>2],n[Je+4>>2]=Fe,Je=49;break}if(!lt){m=0;break e}o7(Xt,se,c)}while(0);if((Je|0)==49&&(Je=0,!lt)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=M&-65537,Fe=(M&8192|0)==0?M:Ge;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Je=61;break}case 88:case 120:{l=Fe,Je=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=NUe(l,Q,Ue)|0,Ge=qe-se|0,M=0,G=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Je=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=mP(0,0,l|0,Q|0)|0,Q=De,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,G=5642,Je=66;break t}else{M=(Fe&2049|0)!=0&1,G=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Je=66;break t}case 117:{Q=Xt,M=0,G=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Je=66;break}case 99:{o[Nt>>0]=n[Xt>>2],l=Nt,M=0,G=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=OUe(n[(Km()|0)>>2]|0)|0,Je=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Je=71;break}case 67:{n[Dr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Dr,se=-1,Q=Dr,Je=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Je=75):(Ps(s,32,B,0,Fe),l=0,Je=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=UUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:M=0,G=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Je|0)==61)Fe=Xt,Me=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=LUe(Me,Fe,Ue,Q&32)|0,G=(l&8|0)==0|(Me|0)==0&(Fe|0)==0,M=G?0:2,G=G?5642:5642+(Q>>4)|0,Ge=l,l=Me,Q=Fe,Je=67;else if((Je|0)==66)se=zm(l,Q,Ue)|0,Ge=Fe,Je=67;else if((Je|0)==71)Je=0,Fe=MUe(Q,0,k)|0,Me=(Fe|0)==0,l=Q,M=0,G=5642,se=Me?Q+k|0:Fe,Q=Me?k:Fe-Q|0,k=Ge;else if((Je|0)==75){for(Je=0,G=Q,l=0,k=0;M=n[G>>2]|0,!(!M||(k=a7(Tr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)G=G+4|0;else break;if((k|0)<0){m=-1;break e}if(Ps(s,32,B,l,Fe),!l)l=0,Je=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Je=84;break t}if(k=a7(Tr,k)|0,M=k+M|0,(M|0)>(l|0)){Je=84;break t}if(os(s,Tr,k),M>>>0>=l>>>0){Je=84;break}else Q=Q+4|0}}while(0);if((Je|0)==67)Je=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Je|0)==84){Je=0,Ps(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,Ge=(Q|0)<(Me|0)?Me:Q,Fe=Ge+M|0,B=(B|0)<(Fe|0)?Fe:B,Ps(s,32,B,Fe,k),os(s,G,M),Ps(s,48,B,Fe,k^65536),Ps(s,48,Ge,Me,0),os(s,l,Me),Ps(s,32,B,Fe,k^8192),l=et}e:do if((Je|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(o7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ar,m|0}function FUe(s){return s=s|0,0}function TUe(s){s=s|0}function os(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||zUe(l,c,s)|0}function s7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function LUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=yP(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function NUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=yP(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=RF(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=QF(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function OUe(s){return s=s|0,jUe(s,n[(GUe()|0)+188>>2]|0)|0}function MUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=_e(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Ps(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Jm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do os(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}os(s,m,d)}C=B}function a7(s,l){return s=s|0,l=l|0,s?s=HUe(s,l,0)|0:s=0,s|0}function UUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0,Fe=0,et=0,Je=0,lt=0,Ue=0,qe=0,Nt=0,Mr=0,cr=0,Xt=0,Dr=0,Tr=0,ar=0,xn=0;xn=C,C=C+560|0,Q=xn+8|0,et=xn,ar=xn+524|0,Tr=ar,M=xn+512|0,n[et>>2]=0,Dr=M+12|0,l7(l)|0,(De|0)<0?(l=-l,cr=1,Mr=5659):(cr=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),l7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+_Ue(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),lt=m|32,(lt|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,G=cr|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=zm(B,((B|0)<0)<<31>>31,Dr)|0,(B|0)==(Dr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=ar;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Tr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Tr|0,Tr=Dr-O|0,Dr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Tr+G+Dr|0,Ps(s,32,c,B,d),os(s,se,G),Ps(s,48,c,B,d^65536),os(s,ar,Xt),Ps(s,48,Dr-Xt|0,0,0),os(s,O,Tr),Ps(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,G=Q;;){if(O=(B|0)<29?B:29,B=G+-4|0,B>>>0>=M>>>0){Q=0;do Ue=h7(n[B>>2]|0,0,O|0)|0,Ue=kF(Ue|0,De|0,Q|0,0)|0,qe=De,Je=RF(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Je,Q=QF(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=G;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)G=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(lt|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Me)+se,se=_e(qe&O,G)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Fe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Fe=(lt|0)==103,Je=(k|0)!=0,M=k-((lt|0)!=102?Q:0)+((Je&Fe)<<31>>31)|0,(M|0)<(((f-qe>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(G=n[Me>>2]|0,se=(G>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(Ge=(((G>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,cr&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),M=G-se|0,n[Me>>2]=M,Ge+l!=Ge){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(qe-B>>2)*9|0,G=n[B>>2]|0,G>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(G>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(lt=M;;){if(lt>>>0<=Ue>>>0){et=0;break}if(B=lt+-4|0,!(n[B>>2]|0))lt=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Je^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Nt=n[lt+-4>>2]|0,(Nt|0)!=0))if((Nt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Nt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((lt-qe>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Fe=k|Me,G=(Fe|0)!=0&1,se=(O|32|0)==102,se)Je=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=zm(B,((B|0)<0)<<31>>31,Dr)|0,M=Dr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Je=B,B=M-B|0}if(B=cr+1+k+G+B|0,Ps(s,32,c,B,d),os(s,Mr,cr),Ps(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=ar+9|0,G=Me,se=ar+8|0,M=O;do{if(Q=zm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ar>>>0){Jm(ar|0,48,Q-Tr|0)|0;do Q=Q+-1|0;while(Q>>>0>ar>>>0)}os(s,Q,G-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Fe|0&&os(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=zm(n[M>>2]|0,0,Me)|0,Q>>>0>ar>>>0){Jm(ar|0,48,Q-Tr|0)|0;do Q=Q+-1|0;while(Q>>>0>ar>>>0)}if(os(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Ps(s,48,k+9|0,9,0)}else{if(Fe=et?lt:Ue+4|0,(k|0)>-1){et=ar+9|0,Me=(Me|0)==0,f=et,G=0-Tr|0,se=ar+8|0,O=Ue;do{Q=zm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,os(s,Q,1),Me&(k|0)<1){Q=M;break}os(s,5710,1),Q=M}else{if(Q>>>0<=ar>>>0)break;Jm(ar|0,48,Q+G|0)|0;do Q=Q+-1|0;while(Q>>>0>ar>>>0)}while(0);Tr=f-Q|0,os(s,Q,(k|0)>(Tr|0)?Tr:k),k=k-Tr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Ps(s,48,k+18|0,18,0),os(s,Je,Dr-Je|0)}Ps(s,32,c,B,d^8192)}else ar=(m&32|0)!=0,B=cr+3|0,Ps(s,32,c,B,d&-65537),os(s,Mr,cr),os(s,l!=l|!1?ar?5686:5690:ar?5678:5682,3),Ps(s,32,c,B,d^8192);while(0);return C=xn,((B|0)<(c|0)?c:B)|0}function l7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function _Ue(s,l){return s=+s,l=l|0,+ +c7(s,l)}function c7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=yP(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+c7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function HUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(qUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Km()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Km()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function qUe(){return SF()|0}function GUe(){return SF()|0}function jUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return YUe(c,n[l+20>>2]|0)|0}function YUe(s,l){return s=s|0,l=l|0,WUe(s,l)|0}function WUe(s,l){return s=s|0,l=l|0,l?l=KUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function KUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Tg(n[s+8>>2]|0,se)|0,f=Tg(n[s+12>>2]|0,se)|0,d=Tg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(G=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(G=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+G|0,f=Tg(n[s+(d<<2)>>2]|0,se)|0,d=Tg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=n7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Tg(n[s+(f<<2)>>2]|0,se)|0,f=Tg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Tg(s,l){s=s|0,l=l|0;var c=0;return c=m7(s|0)|0,((l|0)==0?s:c)|0}function zUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:VUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=CP[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=CP[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Pr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function VUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=u7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=u7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Lg(s,l){s=y(s),l=y(l);var c=0,f=0;c=A7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=A7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function xF(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((JUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function JUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function XUe(s,l){return s=s|0,l=l|0,i7(n[582]|0,s,l)|0}function Jr(s){s=s|0,Tt()}function Vm(s){s=s|0}function ZUe(s,l){return s=s|0,l=l|0,0}function $Ue(s){return s=s|0,(f7(s+4|0)|0)==-1?(tf[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function f7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function Qp(s){s=s|0,$Ue(s)|0&&e3e(s)}function e3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(f7(l)|0)!=-1||tf[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=hP(l)|0,!(s|0);){if(s=r3e()|0,!s){s=0;break}S7[s&0]()}return s|0}function p7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,gP(s)}function t3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function r3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function n3e(){}function mP(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function kF(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Jm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function h7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Pr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return fc(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function g7(s){s=s|0;var l=0;return l=o[N+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[N+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[N+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[N+(s>>>24)>>0]|0)+24|0))}function d7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,Ge=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=31){G=m+1|0,k=31-m|0,l=m-31>>31,B=G,s=O>>>(G>>>0)&l|M<>>(G>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(M|0)|0)|0,Me=64-k|0,G=32-k|0,Q=G>>31,Ge=k-32|0,l=Ge>>31,B=k,s=G-1>>31&M>>>(Ge>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(Ge>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Me=s|0|0,De=Ge,Me|0):(Me=g7(B|0)|0,Ge=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,De=Ge,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Me=(M>>>0)/(B>>>0)>>>0,De=Ge,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),Ge=0,Me=(M>>>0)/(k>>>0)>>>0,De=Ge,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),Ge=0,Me=M>>>((g7(k|0)|0)>>>0),De=Ge,Me|0;if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Me=0,De=Ge,Me|0):(Ge=0,Me=0,De=Ge,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{G=c|0|0,O=se|f&0,M=kF(G|0,O|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,mP(M|0,c|0,f|0,se|0)|0,Me=De,Ge=Me>>31|((Me|0)<0?-1:0)<<1,k=Ge&1,s=mP(f|0,se|0,Ge&G|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=De,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,De=Ge,Me|0}function QF(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,d7(s,l,c,f,0)|0}function Rp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,PA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,PA(12),-1):l|0)}function Nw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Pr(s,l,c)|0;return s|0}function RF(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,d7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function m7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function i3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,y7[s&1](l|0,c|0,f|0,d|0,m|0)}function s3e(s,l,c){s=s|0,l=l|0,c=y(c),E7[s&1](l|0,y(c))}function o3e(s,l,c){s=s|0,l=l|0,c=+c,C7[s&31](l|0,+c)}function a3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(w7[s&0](l|0,y(c),y(f)))}function l3e(s,l){s=s|0,l=l|0,tf[s&127](l|0)}function c3e(s,l,c){s=s|0,l=l|0,c=c|0,rf[s&31](l|0,c|0)}function u3e(s,l){return s=s|0,l=l|0,Og[s&31](l|0)|0}function A3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,I7[s&1](l|0,+c,+f,d|0)}function f3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,W3e[s&1](l|0,+c,+f)}function p3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,CP[s&7](l|0,c|0,f|0)|0}function h3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+K3e[s&1](l|0,c|0,f|0)}function g3e(s,l){return s=s|0,l=l|0,+B7[s&15](l|0)}function d3e(s,l,c){return s=s|0,l=l|0,c=+c,z3e[s&1](l|0,+c)|0}function m3e(s,l,c){return s=s|0,l=l|0,c=c|0,TF[s&15](l|0,c|0)|0}function y3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,V3e[s&1](l|0,c|0,+f,+d,m|0)}function E3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,J3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=c|0,+v7[s&7](l|0,c|0)}function w3e(s){return s=s|0,wP[s&7]()|0}function I3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,P7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function B3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,X3e[s&1](l|0,c|0,f|0,+d)}function v3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,D7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function P3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,Uw[s&15](l|0,c|0,f|0)}function D3e(s){s=s|0,S7[s&0]()}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,b7[s&15](l|0,c|0,+f)}function b3e(s,l,c){return s=s|0,l=+l,c=+c,Z3e[s&1](+l,+c)|0}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LF[s&15](l|0,c|0,f|0,d|0)}function k3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(0)}function Q3e(s,l){s=s|0,l=y(l),R(1)}function ma(s,l){s=s|0,l=+l,R(2)}function R3e(s,l,c){return s=s|0,l=y(l),c=y(c),R(3),Xe}function Er(s){s=s|0,R(4)}function Ow(s,l){s=s|0,l=l|0,R(5)}function Ja(s){return s=s|0,R(6),0}function F3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,R(7)}function T3e(s,l,c){s=s|0,l=+l,c=+c,R(8)}function L3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(9),0}function N3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(10),0}function Ng(s){return s=s|0,R(11),0}function O3e(s,l){return s=s|0,l=+l,R(12),0}function Mw(s,l){return s=s|0,l=l|0,R(13),0}function M3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,R(14)}function U3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,R(15)}function FF(s,l){return s=s|0,l=l|0,R(16),0}function _3e(){return R(17),0}function H3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(18),0}function q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,R(19)}function G3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,R(20)}function EP(s,l,c){s=s|0,l=l|0,c=c|0,R(21)}function j3e(){R(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,R(23)}function Y3e(s,l){return s=+s,l=+l,R(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,R(25)}var y7=[k3e,HNe],E7=[Q3e,Ao],C7=[ma,Sw,bw,CR,wR,Dl,xw,IR,Hm,xu,Qw,BR,eP,KA,tP,qm,rP,nP,Gm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],w7=[R3e],tf=[Er,Vm,wPe,IPe,BPe,Zbe,$be,exe,dLe,mLe,yLe,bNe,xNe,kNe,J4e,X4e,Z4e,ds,Vv,_m,WA,kw,mve,yve,APe,QPe,GPe,aDe,BDe,_De,nSe,ySe,FSe,VSe,Abe,Sbe,Gbe,mxe,Fxe,Vxe,Ake,Ske,Gke,lQe,BQe,OQe,$Qe,bc,kRe,WRe,AFe,xFe,jFe,ATe,wTe,vTe,HTe,jTe,aLe,CLe,BLe,_Le,iNe,i9,UOe,dMe,QMe,WMe,h4e,x4e,_4e,G4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],rf=[Ow,pR,hR,Dw,bu,gR,dR,vp,mR,yR,ER,$v,zA,ze,At,Wt,vr,Sn,Qr,PR,ive,Sve,fQe,DQe,FFe,qOe,fNe,q5,Ow,Ow,Ow,Ow],Og=[Ja,SUe,fR,P,Ae,Pe,vt,wt,xt,_r,di,fo,tve,rve,Eve,rRe,zFe,GLe,WOe,Ka,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],I7=[F3e,Cve],W3e=[T3e,uLe],CP=[L3e,r7,bUe,QUe,jDe,wxe,TRe,JMe],K3e=[N3e,gbe],B7=[Ng,jo,rt,bn,wve,Ive,Bve,vve,Pve,Dve,Ng,Ng,Ng,Ng,Ng,Ng],z3e=[O3e,yTe],TF=[Mw,ZUe,nve,gPe,ADe,oSe,wSe,Kbe,Oxe,HQe,Kv,LMe,Mw,Mw,Mw,Mw],V3e=[M3e,KPe],J3e=[U3e,y4e],v7=[FF,ai,bve,xve,kve,Qbe,FF,FF],wP=[_3e,Qve,vw,ga,bTe,zTe,SLe,K4e],P7=[H3e,yw],X3e=[q3e,gke],D7=[G3e,sve],Uw=[EP,T,ss,tn,po,SDe,NSe,Qke,Kke,Um,uOe,CMe,F4e,EP,EP,EP],S7=[j3e],b7=[Xm,Jv,Xv,Zv,YA,iP,vR,D,$xe,JRe,hTe,Xm,Xm,Xm,Xm,Xm],Z3e=[Y3e,hLe],LF=[Zm,$Se,uRe,gFe,nTe,TTe,eLe,TLe,cNe,ZOe,iUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:m7,dynCall_idd:b3e,dynCall_i:w3e,_i64Subtract:mP,___udivdi3:QF,dynCall_vif:s3e,setThrew:gu,dynCall_viii:P3e,_bitshift64Lshr:yP,_bitshift64Shl:h7,dynCall_vi:l3e,dynCall_viiddi:y3e,dynCall_diii:h3e,dynCall_iii:m3e,_memset:Jm,_sbrk:Rp,_memcpy:Pr,__GLOBAL__sub_I_Yoga_cpp:Mm,dynCall_vii:c3e,___uremdi3:RF,dynCall_vid:o3e,stackAlloc:ao,_nbind_init:gUe,getTempRet0:Ha,dynCall_di:g3e,dynCall_iid:d3e,setTempRet0:xA,_i64Add:kF,dynCall_fiff:a3e,dynCall_iiii:p3e,_emscripten_get_global_libc:DUe,dynCall_viid:S3e,dynCall_viiid:B3e,dynCall_viififi:v3e,dynCall_ii:u3e,__GLOBAL__sub_I_Binding_cc:QOe,dynCall_viiii:x3e,dynCall_iiiiii:I3e,stackSave:dc,dynCall_viiiii:i3e,__GLOBAL__sub_I_nbind_cc:Rve,dynCall_vidd:f3e,_free:gP,runPostSets:n3e,dynCall_viiiiii:E3e,establishStackSpace:qi,_memmove:Nw,stackRestore:hu,_malloc:hP,__GLOBAL__sub_I_common_cc:XLe,dynCall_viddi:A3e,dynCall_dii:C3e,dynCall_v:D3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var am=_((vKt,NEe)=>{"use strict";var Kyt=TEe(),zyt=LEe(),x6=!1,k6=null;zyt({},function(t,e){if(!x6){if(x6=!0,t)throw t;k6=e}});if(!x6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=Kyt(k6.bind,k6.lib)});var R6=_((PKt,Q6)=>{"use strict";var OEe=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);Q6.exports=OEe;Q6.exports.default=OEe});var UEe=_((DKt,MEe)=>{"use strict";MEe.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 zk=_((SKt,F6)=>{"use strict";var Vyt=OD(),Jyt=R6(),Xyt=UEe(),_Ee=t=>{if(typeof t!="string"||t.length===0||(t=Vyt(t),t.length===0))return 0;t=t.replace(Xyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Jyt(o)?2:1)}return e};F6.exports=_Ee;F6.exports.default=_Ee});var L6=_((bKt,T6)=>{"use strict";var Zyt=zk(),HEe=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,Zyt(r));return e};T6.exports=HEe;T6.exports.default=HEe});var qEe=_(uB=>{"use strict";var $yt=uB&&uB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uB,"__esModule",{value:!0});var eEt=$yt(L6()),N6={};uB.default=t=>{if(t.length===0)return{width:0,height:0};if(N6[t])return N6[t];let e=eEt.default(t),r=t.split(` +`).length;return N6[t]={width:e,height:r},{width:e,height:r}}});var GEe=_(AB=>{"use strict";var tEt=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var dn=tEt(am()),rEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},nEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},iEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},sEt=(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(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.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(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},oEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},aEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},lEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};AB.default=(t,e={})=>{rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e)}});var WEe=_((QKt,YEe)=>{"use strict";var fB=zk(),cEt=OD(),uEt=BI(),M6=new Set(["\x1B","\x9B"]),AEt=39,jEe=t=>`${M6.values().next().value}[${t}m`,fEt=t=>t.split(" ").map(e=>fB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=fB(cEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=fB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},pEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(fB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},hEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=fEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=fB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(pEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===AEt?null:I}let E=uEt.codes.get(Number(n));n&&E&&(o[p+1]===` `?a+=jEe(E):h===` `&&(a+=jEe(n)))}return a};YEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` `).split(` -`).map(o=>fEt(o,e,r)).join(` -`)});var VEe=_((kKt,zEe)=>{"use strict";var KEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",pEt=t=>t&&t.exact?new RegExp(`^${KEe}$`):new RegExp(KEe,"g");zEe.exports=pEt});var U6=_((QKt,$Ee)=>{"use strict";var hEt=F6(),gEt=VEe(),JEe=DI(),ZEe=["\x1B","\x9B"],zk=t=>`${ZEe[0]}[${t}m`,XEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};$Ee.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(ZEe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=XEe(a);else if(A>=r){p+=XEe(a,!0,u);break}}return p}});var tCe=_((FKt,eCe)=>{"use strict";var C0=U6(),dEt=Kk();function Vk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}eCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=dEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Vk(t,p-e+1,!0);return u+C0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+C0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Vk(t,h),I=Vk(t,p-(e-h)+1,!0);return C0(t,0,E)+u+C0(t,I,p).trim()}return C0(t,0,h)+u+C0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Vk(t,e-1);return C0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),C0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(fB=>{"use strict";var rCe=fB&&fB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fB,"__esModule",{value:!0});var mEt=rCe(WEe()),yEt=rCe(tCe()),_6={};fB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=mEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=yEt.default(t,e,{position:n})}return _6[o]=a,a}});var G6=_(q6=>{"use strict";Object.defineProperty(q6,"__esModule",{value:!0});var nCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=nCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};q6.default=nCe});var j6=_(pi=>{"use strict";var pB=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 EEt=pB(lm()),iCe=pB(qEe()),CEt=pB(GEe()),wEt=pB(H6()),IEt=pB(G6());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:EEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(BEt.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")&&Jk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,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&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Jk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Jk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&CEt.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 BEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:IEt.default(t),n=iCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=wEt.default(a,e,u);return iCe.default(A)},sCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:sCe(t.parentNode)},Jk=t=>{let e=sCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Jk(t)}});var uCe=_(hB=>{"use strict";var cCe=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var oCe=P6(),vEt=cCe(bEe()),aCe=cCe(lm()),Oo=j6(),lCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};hB.default=vEt.default({schedulePassiveEffects:oCe.unstable_scheduleCallback,cancelPassiveEffects:oCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Oo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Oo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Oo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Oo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Oo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Oo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_FLEX)},appendInitialChild:Oo.appendChildNode,appendChild:Oo.appendChildNode,insertBefore:Oo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Oo.appendChildNode,insertInContainerBefore:Oo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Oo.removeChildNode(t,e),lCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let x={};n.style=x}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let x={};n.style=x}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Oo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Oo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Oo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Oo.removeChildNode(t,e),lCe(e.yogaNode)}})});var fCe=_((OKt,ACe)=>{"use strict";ACe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var pCe=_(gB=>{"use strict";var DEt=gB&&gB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gB,"__esModule",{value:!0});var Xk=DEt(lm());gB.default=t=>t.getComputedWidth()-t.getComputedPadding(Xk.default.EDGE_LEFT)-t.getComputedPadding(Xk.default.EDGE_RIGHT)-t.getComputedBorder(Xk.default.EDGE_LEFT)-t.getComputedBorder(Xk.default.EDGE_RIGHT)});var hCe=_((UKt,PEt)=>{PEt.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 dCe=_((_Kt,Y6)=>{"use strict";var gCe=hCe();Y6.exports=gCe;Y6.exports.default=gCe});var yCe=_((HKt,mCe)=>{"use strict";var SEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},bEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`).map(o=>hEt(o,e,r)).join(` +`)});var VEe=_((RKt,zEe)=>{"use strict";var KEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",gEt=t=>t&&t.exact?new RegExp(`^${KEe}$`):new RegExp(KEe,"g");zEe.exports=gEt});var U6=_((FKt,$Ee)=>{"use strict";var dEt=R6(),mEt=VEe(),JEe=BI(),ZEe=["\x1B","\x9B"],Vk=t=>`${ZEe[0]}[${t}m`,XEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(Vk(e?u:n))}else if(e){o.push(Vk(0));break}else o.push(Vk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=Vk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};$Ee.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(ZEe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=XEe(a);else if(A>=r){p+=XEe(a,!0,u);break}}return p}});var tCe=_((TKt,eCe)=>{"use strict";var C0=U6(),yEt=zk();function Jk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}eCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=yEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Jk(t,p-e+1,!0);return u+C0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+C0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Jk(t,h),I=Jk(t,p-(e-h)+1,!0);return C0(t,0,E)+u+C0(t,I,p).trim()}return C0(t,0,h)+u+C0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Jk(t,e-1);return C0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),C0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(pB=>{"use strict";var rCe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var EEt=rCe(WEe()),CEt=rCe(tCe()),_6={};pB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=EEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=CEt.default(t,e,{position:n})}return _6[o]=a,a}});var G6=_(q6=>{"use strict";Object.defineProperty(q6,"__esModule",{value:!0});var nCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=nCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};q6.default=nCe});var j6=_(pi=>{"use strict";var hB=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 wEt=hB(am()),iCe=hB(qEe()),IEt=hB(GEe()),BEt=hB(H6()),vEt=hB(G6());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:wEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(PEt.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")&&Xk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,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&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Xk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Xk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&IEt.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 PEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:vEt.default(t),n=iCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=BEt.default(a,e,u);return iCe.default(A)},sCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:sCe(t.parentNode)},Xk=t=>{let e=sCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Xk(t)}});var uCe=_(gB=>{"use strict";var cCe=gB&&gB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gB,"__esModule",{value:!0});var oCe=D6(),DEt=cCe(bEe()),aCe=cCe(am()),No=j6(),lCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};gB.default=DEt.default({schedulePassiveEffects:oCe.unstable_scheduleCallback,cancelPassiveEffects:oCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=No.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?No.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:No.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return No.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{No.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{No.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_FLEX)},appendInitialChild:No.appendChildNode,appendChild:No.appendChildNode,insertBefore:No.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:No.appendChildNode,insertInContainerBefore:No.insertBeforeNode,removeChildFromContainer:(t,e)=>{No.removeChildNode(t,e),lCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let x={};n.style=x}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let x={};n.style=x}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?No.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:No.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{No.setTextNodeValue(t,r)},removeChild:(t,e)=>{No.removeChildNode(t,e),lCe(e.yogaNode)}})});var fCe=_((UKt,ACe)=>{"use strict";ACe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var pCe=_(dB=>{"use strict";var SEt=dB&&dB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(dB,"__esModule",{value:!0});var Zk=SEt(am());dB.default=t=>t.getComputedWidth()-t.getComputedPadding(Zk.default.EDGE_LEFT)-t.getComputedPadding(Zk.default.EDGE_RIGHT)-t.getComputedBorder(Zk.default.EDGE_LEFT)-t.getComputedBorder(Zk.default.EDGE_RIGHT)});var hCe=_((HKt,bEt)=>{bEt.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 dCe=_((qKt,Y6)=>{"use strict";var gCe=hCe();Y6.exports=gCe;Y6.exports.default=gCe});var yCe=_((GKt,mCe)=>{"use strict";var xEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},kEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r `:` `)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};mCe.exports={stringReplaceAll:SEt,stringEncaseCRLFWithFirstIndex:bEt}});var BCe=_((qKt,ICe)=>{"use strict";var xEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,ECe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,kEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,QEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,FEt=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function wCe(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)):FEt.get(t)||t}function REt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(kEt))r.push(a[2].replace(QEt,(A,p,h)=>p?wCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function TEt(t){ECe.lastIndex=0;let e=[],r;for(;(r=ECe.exec(t))!==null;){let o=r[1];if(r[2]){let a=REt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function CCe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}ICe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(xEt,(n,u,A,p,h,E)=>{if(u)a.push(wCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:CCe(t,r)(I)),r.push({inverse:A,styles:TEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(CCe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var rQ=_((GKt,xCe)=>{"use strict";var dB=DI(),{stdout:K6,stderr:z6}=dL(),{stringReplaceAll:LEt,stringEncaseCRLFWithFirstIndex:NEt}=yCe(),{isArray:Zk}=Array,DCe=["ansi","ansi","ansi256","ansi16m"],HC=Object.create(null),OEt=(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=K6?K6.level:0;t.level=e.level===void 0?r:e.level},V6=class{constructor(e){return PCe(e)}},PCe=t=>{let e={};return OEt(e,t),e.template=(...r)=>bCe(e.template,...r),Object.setPrototypeOf(e,$k.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=V6,e.template};function $k(t){return PCe(t)}for(let[t,e]of Object.entries(dB))HC[t]={get(){let r=eQ(this,J6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};HC.visible={get(){let t=eQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)HC[t]={get(){let{level:e}=this;return function(...r){let o=J6(dB.color[DCe[e]][t](...r),dB.color.close,this._styler);return eQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);HC[e]={get(){let{level:r}=this;return function(...o){let a=J6(dB.bgColor[DCe[r]][t](...o),dB.bgColor.close,this._styler);return eQ(this,a,this._isEmpty)}}}}var MEt=Object.defineProperties(()=>{},{...HC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),J6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},eQ=(t,e,r)=>{let o=(...a)=>Zk(a[0])&&Zk(a[0].raw)?vCe(o,bCe(o,...a)):vCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,MEt),o._generator=t,o._styler=e,o._isEmpty=r,o},vCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=LEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=NEt(e,a,o,n)),o+e+a},W6,bCe=(t,...e)=>{let[r]=e;if(!Zk(r)||!Zk(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var UEt=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var mB=UEt(rQ()),_Et=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,HEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,nQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);yB.default=(t,e,r)=>{if(!e)return t;if(e in mB.default){let a=nQ(e,r);return mB.default[a](t)}if(e.startsWith("#")){let a=nQ("hex",r);return mB.default[a](e)(t)}if(e.startsWith("ansi")){let a=HEt.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]);return mB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=_Et.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return mB.default[n](u,A,p)(t)}return t}});var QCe=_(EB=>{"use strict";var kCe=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var qEt=kCe(dCe()),Z6=kCe(X6());EB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=qEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` -`).repeat(n-2),E=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var RCe=_(CB=>{"use strict";var cm=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var GEt=cm(lm()),jEt=cm(L6()),YEt=cm(fCe()),WEt=cm(H6()),KEt=cm(pCe()),zEt=cm(G6()),VEt=cm(QCe()),JEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` -`.repeat(n)+YEt.default(e,a)}return e},FCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===GEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=zEt.default(t);if(v.length>0){let x=jEt.default(v),C=KEt.default(p);if(x>C){let R=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=WEt.default(v,C,R)}v=JEt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&VEt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)FCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};CB.default=FCe});var LCe=_((KKt,TCe)=>{"use strict";TCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var OCe=_((zKt,$6)=>{"use strict";var XEt=LCe(),NCe=t=>typeof t=="string"?t.replace(XEt(),""):t;$6.exports=NCe;$6.exports.default=NCe});var _Ce=_((VKt,UCe)=>{"use strict";var MCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";UCe.exports=t=>t&&t.exact?new RegExp(`^${MCe}$`):new RegExp(MCe,"g")});var qCe=_((JKt,eq)=>{"use strict";var ZEt=OCe(),$Et=_Ce(),HCe=t=>ZEt(t).replace($Et()," ").length;eq.exports=HCe;eq.exports.default=HCe});var YCe=_(wB=>{"use strict";var jCe=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var GCe=jCe(U6()),eCt=jCe(qCe()),tq=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` -`),height:e.length}}};wB.default=tq});var zCe=_(IB=>{"use strict";var rq=IB&&IB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(IB,"__esModule",{value:!0});var tCt=rq(lm()),WCe=rq(RCe()),KCe=rq(YCe());IB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,tCt.default.DIRECTION_LTR);let o=new KCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});WCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new KCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),WCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ZCe=_(($Kt,XCe)=>{"use strict";var VCe=ve("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nq={},rCt=t=>{let e=new VCe.PassThrough,r=new VCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nq[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nq[a];nq={}}};XCe.exports=rCt});var sq=_(iq=>{"use strict";Object.defineProperty(iq,"__esModule",{value:!0});iq.default=new WeakMap});var aq=_(oq=>{"use strict";Object.defineProperty(oq,"__esModule",{value:!0});var nCt=on(),$Ce=nCt.createContext({exit:()=>{}});$Ce.displayName="InternalAppContext";oq.default=$Ce});var cq=_(lq=>{"use strict";Object.defineProperty(lq,"__esModule",{value:!0});var iCt=on(),ewe=iCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});ewe.displayName="InternalStdinContext";lq.default=ewe});var Aq=_(uq=>{"use strict";Object.defineProperty(uq,"__esModule",{value:!0});var sCt=on(),twe=sCt.createContext({stdout:void 0,write:()=>{}});twe.displayName="InternalStdoutContext";uq.default=twe});var pq=_(fq=>{"use strict";Object.defineProperty(fq,"__esModule",{value:!0});var oCt=on(),rwe=oCt.createContext({stderr:void 0,write:()=>{}});rwe.displayName="InternalStderrContext";fq.default=rwe});var iQ=_(hq=>{"use strict";Object.defineProperty(hq,"__esModule",{value:!0});var aCt=on(),nwe=aCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});nwe.displayName="InternalFocusContext";hq.default=nwe});var swe=_((ozt,iwe)=>{"use strict";var lCt=/[|\\{}()[\]^$+*?.-]/g;iwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(lCt,"\\$&")}});var cwe=_((azt,lwe)=>{"use strict";var cCt=swe(),uCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",awe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));awe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var BB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=BB.nodeInternals()),"cwd"in e||(e.cwd=uCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,ACt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...awe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`,a)}while(o!==-1);return n+=t.substr(a),n};mCe.exports={stringReplaceAll:xEt,stringEncaseCRLFWithFirstIndex:kEt}});var BCe=_((jKt,ICe)=>{"use strict";var QEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,ECe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,FEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,TEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function wCe(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)):TEt.get(t)||t}function LEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(FEt,(A,p,h)=>p?wCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function NEt(t){ECe.lastIndex=0;let e=[],r;for(;(r=ECe.exec(t))!==null;){let o=r[1];if(r[2]){let a=LEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function CCe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}ICe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(QEt,(n,u,A,p,h,E)=>{if(u)a.push(wCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:CCe(t,r)(I)),r.push({inverse:A,styles:NEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(CCe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var nQ=_((YKt,xCe)=>{"use strict";var mB=BI(),{stdout:K6,stderr:z6}=mL(),{stringReplaceAll:OEt,stringEncaseCRLFWithFirstIndex:MEt}=yCe(),{isArray:$k}=Array,PCe=["ansi","ansi","ansi256","ansi16m"],UC=Object.create(null),UEt=(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=K6?K6.level:0;t.level=e.level===void 0?r:e.level},V6=class{constructor(e){return DCe(e)}},DCe=t=>{let e={};return UEt(e,t),e.template=(...r)=>bCe(e.template,...r),Object.setPrototypeOf(e,eQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=V6,e.template};function eQ(t){return DCe(t)}for(let[t,e]of Object.entries(mB))UC[t]={get(){let r=tQ(this,J6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};UC.visible={get(){let t=tQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)UC[t]={get(){let{level:e}=this;return function(...r){let o=J6(mB.color[PCe[e]][t](...r),mB.color.close,this._styler);return tQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);UC[e]={get(){let{level:r}=this;return function(...o){let a=J6(mB.bgColor[PCe[r]][t](...o),mB.bgColor.close,this._styler);return tQ(this,a,this._isEmpty)}}}}var _Et=Object.defineProperties(()=>{},{...UC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),J6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},tQ=(t,e,r)=>{let o=(...a)=>$k(a[0])&&$k(a[0].raw)?vCe(o,bCe(o,...a)):vCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,_Et),o._generator=t,o._styler=e,o._isEmpty=r,o},vCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=OEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=MEt(e,a,o,n)),o+e+a},W6,bCe=(t,...e)=>{let[r]=e;if(!$k(r)||!$k(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var HEt=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var yB=HEt(nQ()),qEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,GEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,iQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);EB.default=(t,e,r)=>{if(!e)return t;if(e in yB.default){let a=iQ(e,r);return yB.default[a](t)}if(e.startsWith("#")){let a=iQ("hex",r);return yB.default[a](e)(t)}if(e.startsWith("ansi")){let a=GEt.exec(e);if(!a)return t;let n=iQ(a[1],r),u=Number(a[2]);return yB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=qEt.exec(e);if(!a)return t;let n=iQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return yB.default[n](u,A,p)(t)}return t}});var QCe=_(CB=>{"use strict";var kCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var jEt=kCe(dCe()),Z6=kCe(X6());CB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=jEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var FCe=_(wB=>{"use strict";var lm=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var YEt=lm(am()),WEt=lm(L6()),KEt=lm(fCe()),zEt=lm(H6()),VEt=lm(pCe()),JEt=lm(G6()),XEt=lm(QCe()),ZEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+KEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===YEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=JEt.default(t);if(v.length>0){let x=WEt.default(v),C=VEt.default(p);if(x>C){let F=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,F)}v=ZEt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&XEt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};wB.default=RCe});var LCe=_((VKt,TCe)=>{"use strict";TCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var OCe=_((JKt,$6)=>{"use strict";var $Et=LCe(),NCe=t=>typeof t=="string"?t.replace($Et(),""):t;$6.exports=NCe;$6.exports.default=NCe});var _Ce=_((XKt,UCe)=>{"use strict";var MCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";UCe.exports=t=>t&&t.exact?new RegExp(`^${MCe}$`):new RegExp(MCe,"g")});var qCe=_((ZKt,eq)=>{"use strict";var eCt=OCe(),tCt=_Ce(),HCe=t=>eCt(t).replace(tCt()," ").length;eq.exports=HCe;eq.exports.default=HCe});var YCe=_(IB=>{"use strict";var jCe=IB&&IB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(IB,"__esModule",{value:!0});var GCe=jCe(U6()),rCt=jCe(qCe()),tq=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};IB.default=tq});var zCe=_(BB=>{"use strict";var rq=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var nCt=rq(am()),WCe=rq(FCe()),KCe=rq(YCe());BB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,nCt.default.DIRECTION_LTR);let o=new KCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});WCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new KCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),WCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ZCe=_((tzt,XCe)=>{"use strict";var VCe=ve("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nq={},iCt=t=>{let e=new VCe.PassThrough,r=new VCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nq[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nq[a];nq={}}};XCe.exports=iCt});var sq=_(iq=>{"use strict";Object.defineProperty(iq,"__esModule",{value:!0});iq.default=new WeakMap});var aq=_(oq=>{"use strict";Object.defineProperty(oq,"__esModule",{value:!0});var sCt=an(),$Ce=sCt.createContext({exit:()=>{}});$Ce.displayName="InternalAppContext";oq.default=$Ce});var cq=_(lq=>{"use strict";Object.defineProperty(lq,"__esModule",{value:!0});var oCt=an(),ewe=oCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});ewe.displayName="InternalStdinContext";lq.default=ewe});var Aq=_(uq=>{"use strict";Object.defineProperty(uq,"__esModule",{value:!0});var aCt=an(),twe=aCt.createContext({stdout:void 0,write:()=>{}});twe.displayName="InternalStdoutContext";uq.default=twe});var pq=_(fq=>{"use strict";Object.defineProperty(fq,"__esModule",{value:!0});var lCt=an(),rwe=lCt.createContext({stderr:void 0,write:()=>{}});rwe.displayName="InternalStderrContext";fq.default=rwe});var sQ=_(hq=>{"use strict";Object.defineProperty(hq,"__esModule",{value:!0});var cCt=an(),nwe=cCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});nwe.displayName="InternalFocusContext";hq.default=nwe});var swe=_((lzt,iwe)=>{"use strict";var uCt=/[|\\{}()[\]^$+*?.-]/g;iwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(uCt,"\\$&")}});var cwe=_((czt,lwe)=>{"use strict";var ACt=swe(),fCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",awe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));awe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var vB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=vB.nodeInternals()),"cwd"in e||(e.cwd=fCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,pCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...awe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` `)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};owe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(fCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",x=r[11]===")",C,R={};if(E&&(R.line=Number(E)),I&&(R.column=Number(I)),x&&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 V=h.slice(0,U-1);h=h.slice(U+1),a+=` (${V}`;break}}if(a){let N=a.match(pCt);N&&(a=N[1],C=N[2])}return owe(R,h,this._cwd),o&&(R.constructor=!0),n&&(R.evalOrigin=n,R.evalLine=A,R.evalColumn=p,R.evalFile=u&&u.replace(/\\/g,"/")),v&&(R.native=!0),a&&(R.function=a),C&&a!==C&&(R.method=C),R}};function owe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function ACt(t){if(t.length===0)return[];let e=t.map(r=>cCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var fCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),pCt=/^(.*?) \[as (.*?)\]$/;lwe.exports=BB});var Awe=_((lzt,uwe)=>{"use strict";uwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var pwe=_((czt,fwe)=>{"use strict";var hCt=Awe(),gCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};fwe.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=hCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},gCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var sQ=_(nu=>{"use strict";var dCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),mCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),yCt=nu&&nu.__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)&&dCt(e,t,r);return mCt(e,t),e},ECt=nu&&nu.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=ECt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return hwe.default.createElement("ink-box",{ref:e,style:a},r)});gq.displayName="Box";gq.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};nu.default=gq});var yq=_(vB=>{"use strict";var dq=vB&&vB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(vB,"__esModule",{value:!0});var CCt=dq(on()),qC=dq(rQ()),gwe=dq(X6()),mq=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=qC.default.dim(I)),t&&(I=gwe.default(I,t,"foreground")),e&&(I=gwe.default(I,e,"background")),o&&(I=qC.default.bold(I)),a&&(I=qC.default.italic(I)),n&&(I=qC.default.underline(I)),u&&(I=qC.default.strikethrough(I)),A&&(I=qC.default.inverse(I)),I);return CCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};mq.displayName="Text";mq.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};vB.default=mq});var Ewe=_(iu=>{"use strict";var wCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ICt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),BCt=iu&&iu.__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)&&wCt(e,t,r);return ICt(e,t),e},DB=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var dwe=BCt(ve("fs")),fs=DB(on()),mwe=DB(cwe()),vCt=DB(pwe()),Zf=DB(sQ()),gA=DB(yq()),ywe=new mwe.default({cwd:process.cwd(),internals:mwe.default.nodeInternals()}),DCt=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?ywe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&dwe.existsSync(r.file)){let n=dwe.readFileSync(r.file,"utf8");if(o=vCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Zf.default,{flexDirection:"column",padding:1},fs.default.createElement(Zf.default,null,fs.default.createElement(gA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(gA.default,null," ",t.message)),r&&fs.default.createElement(Zf.default,{marginTop:1},fs.default.createElement(gA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Zf.default,{key:n},fs.default.createElement(Zf.default,{width:a+1},fs.default.createElement(gA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(gA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let u=ywe.parseLine(n);return u?fs.default.createElement(Zf.default,{key:n},fs.default.createElement(gA.default,{dimColor:!0},"- "),fs.default.createElement(gA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(gA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Zf.default,{key:n},fs.default.createElement(gA.default,{dimColor:!0},"- "),fs.default.createElement(gA.default,{dimColor:!0,bold:!0},n))})))};iu.default=DCt});var wwe=_(su=>{"use strict";var PCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),SCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),bCt=su&&su.__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)&&PCt(e,t,r);return SCt(e,t),e},Am=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var um=bCt(on()),Cwe=Am(g6()),xCt=Am(aq()),kCt=Am(cq()),QCt=Am(Aq()),FCt=Am(pq()),RCt=Am(iQ()),TCt=Am(Ewe()),LCt=" ",NCt="\x1B[Z",OCt="\x1B",oQ=class extends um.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. +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};owe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(hCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",x=r[11]===")",C,F={};if(E&&(F.line=Number(E)),I&&(F.column=Number(I)),x&&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 V=h.slice(0,U-1);h=h.slice(U+1),a+=` (${V}`;break}}if(a){let N=a.match(gCt);N&&(a=N[1],C=N[2])}return owe(F,h,this._cwd),o&&(F.constructor=!0),n&&(F.evalOrigin=n,F.evalLine=A,F.evalColumn=p,F.evalFile=u&&u.replace(/\\/g,"/")),v&&(F.native=!0),a&&(F.function=a),C&&a!==C&&(F.method=C),F}};function owe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function pCt(t){if(t.length===0)return[];let e=t.map(r=>ACt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var hCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),gCt=/^(.*?) \[as (.*?)\]$/;lwe.exports=vB});var Awe=_((uzt,uwe)=>{"use strict";uwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var pwe=_((Azt,fwe)=>{"use strict";var dCt=Awe(),mCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};fwe.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=dCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},mCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var oQ=_(nu=>{"use strict";var yCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ECt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),CCt=nu&&nu.__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)&&yCt(e,t,r);return ECt(e,t),e},wCt=nu&&nu.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=wCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return hwe.default.createElement("ink-box",{ref:e,style:a},r)});gq.displayName="Box";gq.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};nu.default=gq});var yq=_(PB=>{"use strict";var dq=PB&&PB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(PB,"__esModule",{value:!0});var ICt=dq(an()),_C=dq(nQ()),gwe=dq(X6()),mq=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=_C.default.dim(I)),t&&(I=gwe.default(I,t,"foreground")),e&&(I=gwe.default(I,e,"background")),o&&(I=_C.default.bold(I)),a&&(I=_C.default.italic(I)),n&&(I=_C.default.underline(I)),u&&(I=_C.default.strikethrough(I)),A&&(I=_C.default.inverse(I)),I);return ICt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};mq.displayName="Text";mq.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};PB.default=mq});var Ewe=_(iu=>{"use strict";var BCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),vCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),PCt=iu&&iu.__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)&&BCt(e,t,r);return vCt(e,t),e},DB=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var dwe=PCt(ve("fs")),hs=DB(an()),mwe=DB(cwe()),DCt=DB(pwe()),Zf=DB(oQ()),gA=DB(yq()),ywe=new mwe.default({cwd:process.cwd(),internals:mwe.default.nodeInternals()}),SCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?ywe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&dwe.existsSync(r.file)){let n=dwe.readFileSync(r.file,"utf8");if(o=DCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return hs.default.createElement(Zf.default,{flexDirection:"column",padding:1},hs.default.createElement(Zf.default,null,hs.default.createElement(gA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),hs.default.createElement(gA.default,null," ",t.message)),r&&hs.default.createElement(Zf.default,{marginTop:1},hs.default.createElement(gA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&hs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>hs.default.createElement(Zf.default,{key:n},hs.default.createElement(Zf.default,{width:a+1},hs.default.createElement(gA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),hs.default.createElement(gA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&hs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=ywe.parseLine(n);return u?hs.default.createElement(Zf.default,{key:n},hs.default.createElement(gA.default,{dimColor:!0},"- "),hs.default.createElement(gA.default,{dimColor:!0,bold:!0},u.function),hs.default.createElement(gA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):hs.default.createElement(Zf.default,{key:n},hs.default.createElement(gA.default,{dimColor:!0},"- "),hs.default.createElement(gA.default,{dimColor:!0,bold:!0},n))})))};iu.default=SCt});var wwe=_(su=>{"use strict";var bCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),kCt=su&&su.__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)&&bCt(e,t,r);return xCt(e,t),e},um=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var cm=kCt(an()),Cwe=um(g6()),QCt=um(aq()),RCt=um(cq()),FCt=um(Aq()),TCt=um(pq()),LCt=um(sQ()),NCt=um(Ewe()),OCt=" ",MCt="\x1B[Z",UCt="\x1B",aQ=class extends cm.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===OCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===LCt&&this.focusNext(),e===NCt&&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.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return um.default.createElement(xCt.default.Provider,{value:{exit:this.handleExit}},um.default.createElement(kCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},um.default.createElement(QCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},um.default.createElement(FCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},um.default.createElement(RCt.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}},this.state.error?um.default.createElement(TCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Cwe.default.hide(this.props.stdout)}componentWillUnmount(){Cwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};su.default=oQ;oQ.displayName="InternalApp"});var vwe=_(ou=>{"use strict";var MCt=ou&&ou.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),UCt=ou&&ou.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),_Ct=ou&&ou.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&MCt(e,t,r);return UCt(e,t),e},au=ou&&ou.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ou,"__esModule",{value:!0});var HCt=au(on()),Iwe=lM(),qCt=au(cEe()),GCt=au(u6()),jCt=au(gEe()),YCt=au(mEe()),Eq=au(uCe()),WCt=au(zCe()),KCt=au(h6()),zCt=au(ZCe()),VCt=_Ct(j6()),JCt=au(sq()),XCt=au(wwe()),GC=process.env.CI==="false"?!1:jCt.default,Bwe=()=>{},Cq=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=WCt.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(GC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(GCt.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},YCt.default(this),this.options=e,this.rootNode=VCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:Iwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=qCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:Iwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Eq.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=KCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),GC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=HCt.default.createElement(XCt.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);Eq.default.updateContainer(r,this.container,null,Bwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(GC){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(GC){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(),GC?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,Eq.default.updateContainer(null,this.container,null,Bwe),JCt.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(){!GC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=zCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};ou.default=Cq});var Pwe=_(PB=>{"use strict";var Dwe=PB&&PB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(PB,"__esModule",{value:!0});var ZCt=Dwe(vwe()),aQ=Dwe(sq()),$Ct=ve("stream"),ewt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},twt(e)),o=rwt(r.stdout,()=>new ZCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>aQ.default.delete(r.stdout),clear:o.clear}};PB.default=ewt;var twt=(t={})=>t instanceof $Ct.Stream?{stdout:t,stdin:process.stdin}:t,rwt=(t,e)=>{let r;return aQ.default.has(t)?r=aQ.default.get(t):(r=e(),aQ.default.set(t,r)),r}});var bwe=_($f=>{"use strict";var nwt=$f&&$f.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),iwt=$f&&$f.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),swt=$f&&$f.__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)&&nwt(e,t,r);return iwt(e,t),e};Object.defineProperty($f,"__esModule",{value:!0});var SB=swt(on()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=SB.useState(0),u=SB.useMemo(()=>e.slice(a),[e,a]);SB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=SB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return SB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";$f.default=Swe});var kwe=_(bB=>{"use strict";var owt=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var awt=owt(on()),xwe=({children:t,transform:e})=>t==null?null:awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);xwe.displayName="Transform";bB.default=xwe});var Fwe=_(xB=>{"use strict";var lwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var cwt=lwt(on()),Qwe=({count:t=1})=>cwt.default.createElement("ink-text",null,` -`.repeat(t));Qwe.displayName="Newline";xB.default=Qwe});var Lwe=_(kB=>{"use strict";var Rwe=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var uwt=Rwe(on()),Awt=Rwe(sQ()),Twe=()=>uwt.default.createElement(Awt.default,{flexGrow:1});Twe.displayName="Spacer";kB.default=Twe});var lQ=_(QB=>{"use strict";var fwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var pwt=on(),hwt=fwt(cq()),gwt=()=>pwt.useContext(hwt.default);QB.default=gwt});var Owe=_(FB=>{"use strict";var dwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Nwe=on(),mwt=dwt(lQ()),ywt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=mwt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};FB.default=ywt});var Mwe=_(RB=>{"use strict";var Ewt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Cwt=on(),wwt=Ewt(aq()),Iwt=()=>Cwt.useContext(wwt.default);RB.default=Iwt});var Uwe=_(TB=>{"use strict";var Bwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var vwt=on(),Dwt=Bwt(Aq()),Pwt=()=>vwt.useContext(Dwt.default);TB.default=Pwt});var _we=_(LB=>{"use strict";var Swt=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var bwt=on(),xwt=Swt(pq()),kwt=()=>bwt.useContext(xwt.default);LB.default=kwt});var qwe=_(OB=>{"use strict";var Hwe=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var NB=on(),Qwt=Hwe(iQ()),Fwt=Hwe(lQ()),Rwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Fwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Qwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};OB.default=Rwt});var Gwe=_(MB=>{"use strict";var Twt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Lwt=on(),Nwt=Twt(iQ()),Owt=()=>{let t=Lwt.useContext(Nwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Owt});var jwe=_(wq=>{"use strict";Object.defineProperty(wq,"__esModule",{value:!0});wq.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var sc=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var Mwt=Pwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return Mwt.default}});var Uwt=sQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return Uwt.default}});var _wt=yq();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return _wt.default}});var Hwt=bwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Hwt.default}});var qwt=kwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Fwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Gwt.default}});var jwt=Lwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return jwt.default}});var Ywt=Owe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Mwe();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=lQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Kwt.default}});var zwt=Uwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return zwt.default}});var Vwt=_we();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return Vwt.default}});var Jwt=qwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return Jwt.default}});var Xwt=Gwe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=jwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return Zwt.default}})});var Bq={};zt(Bq,{Gem:()=>Iq});var Ywe,fm,Iq,cQ=Et(()=>{Ywe=$e(sc()),fm=$e(on()),Iq=(0,fm.memo)(({active:t})=>{let e=(0,fm.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,fm.useMemo)(()=>t?"green":"yellow",[t]);return fm.default.createElement(Ywe.Text,{color:r},e)})});var Kwe={};zt(Kwe,{useKeypress:()=>pm});function pm({active:t},e,r){let{stdin:o}=(0,Wwe.useStdin)(),a=(0,uQ.useCallback)((n,u)=>e(n,u),r);(0,uQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Wwe,uQ,UB=Et(()=>{Wwe=$e(sc()),uQ=$e(on())});var Vwe={};zt(Vwe,{FocusRequest:()=>zwe,useFocusRequest:()=>vq});var zwe,vq,Dq=Et(()=>{UB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),vq=function({active:t},e,r){pm({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};zt(Jwe,{useListInput:()=>_B});var _B,AQ=Et(()=>{UB();_B=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){pm({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var fQ={};zt(fQ,{ScrollableItems:()=>$wt});var w0,Na,$wt,pQ=Et(()=>{w0=$e(sc()),Na=$e(on());Dq();AQ();$wt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=Na.default.Children.map(e,N=>A(N)),h=p[0],[E,I]=(0,Na.useState)(h),v=p.indexOf(E);(0,Na.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,Na.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vq({active:t&&!!n},N=>{n?.(N)},[n]),_B(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let x=v-r,C=v+r;C>p.length&&(x-=C-p.length,C=p.length),x<0&&(C+=-x,x=0),C>=p.length&&(C=p.length-1);let R=[];for(let N=x;N<=C;++N){let U=p[N],V=t&&U===E;R.push(Na.default.createElement(w0.Box,{key:U,height:o},Na.default.createElement(w0.Box,{marginLeft:1,marginRight:1},Na.default.createElement(w0.Text,null,V?Na.default.createElement(w0.Text,{color:"cyan",bold:!0},">"):" ")),Na.default.createElement(w0.Box,null,Na.default.cloneElement(e[N],{active:V}))))}return Na.default.createElement(w0.Box,{flexDirection:"column",width:"100%"},R)}});var Xwe,ep,Zwe,Pq,$we,Sq=Et(()=>{Xwe=$e(sc()),ep=$e(on()),Zwe=ve("readline"),Pq=ep.default.createContext(null),$we=({children:t})=>{let{stdin:e,setRawMode:r}=(0,Xwe.useStdin)();(0,ep.useEffect)(()=>{r&&r(!0),e&&(0,Zwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,ep.useState)(new Map),n=(0,ep.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return ep.default.createElement(Pq.Provider,{value:n,children:t})}});var bq={};zt(bq,{useMinistore:()=>eIt});function eIt(t,e){let r=(0,hQ.useContext)(Pq);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,hQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var hQ,xq=Et(()=>{hQ=$e(on());Sq()});var dQ={};zt(dQ,{renderForm:()=>tIt});async function tIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,gQ.useApp)();pm({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,gQ.render)(kq.default.createElement($we,null,kq.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var gQ,kq,mQ=Et(()=>{gQ=$e(sc()),kq=$e(on());Sq();UB()});var nIe=_(HB=>{"use strict";Object.defineProperty(HB,"__esModule",{value:!0});HB.UncontrolledTextInput=void 0;var tIe=on(),Qq=on(),eIe=sc(),hm=rQ(),rIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Qq.useState({cursorOffset:(t||"").length,cursorWidth:0});Qq.useEffect(()=>{E(R=>{if(!r||!n)return R;let N=t||"";return R.cursorOffset>N.length-1?{cursorOffset:N.length,cursorWidth:0}:R})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,x=v,C=e?hm.grey(e):void 0;if(n&&r){C=e.length>0?hm.inverse(e[0])+hm.grey(e.slice(1)):hm.inverse(" "),x=v.length>0?"":hm.inverse(" ");let R=0;for(let N of v)R>=p-I&&R<=p?x+=hm.inverse(N):x+=N,R++;v.length>0&&p===v.length&&(x+=hm.inverse(" "))}return eIe.useInput((R,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&R==="c"||N.tab||N.shift&&N.tab)return;if(N.return){A&&A(t);return}let U=p,V=t,te=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(V=t.slice(0,p-1)+t.slice(p,t.length),U--):(V=t.slice(0,p)+R+t.slice(p,t.length),U+=R.length,R.length>1&&(te=R.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),V!==t&&u(V)},{isActive:r}),tIe.createElement(eIe.Text,null,e?v.length>0?x:C:x)};HB.default=rIe;HB.UncontrolledTextInput=t=>{let[e,r]=Qq.useState("");return tIe.createElement(rIe,Object.assign({},t,{value:e,onChange:r}))}});var oIe={};zt(oIe,{Pad:()=>Fq});var iIe,sIe,Fq,Rq=Et(()=>{iIe=$e(sc()),sIe=$e(on()),Fq=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return sIe.default.createElement(iIe.Text,{dimColor:!e},r)}});var aIe={};zt(aIe,{ItemOptions:()=>rIt});var GB,B0,rIt,lIe=Et(()=>{GB=$e(sc()),B0=$e(on());AQ();cQ();Rq();rIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return _B(o,u,{active:t,minus:"left",plus:"right",set:a}),B0.default.createElement(B0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),x=Math.max(0,I-v.length-2);return p?B0.default.createElement(GB.Box,{key:p,width:I,marginLeft:1},B0.default.createElement(GB.Text,{wrap:"truncate"},B0.default.createElement(Iq,{active:E})," ",p),e?B0.default.createElement(Fq,{active:t,length:x}):null):B0.default.createElement(GB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var vIe=_((XVt,BIe)=>{var qq;BIe.exports=()=>(typeof qq>"u"&&(qq=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qq)});var YIe=_((IJt,jIe)=>{var Xq=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function sv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,x=[])=>(x.push(E(I,v,x[x.length-1])),x),h=E===Boolean||E[Xq]===!0}else if(typeof p=="function")h=p===Boolean||p[Xq]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let V=x===R?"":` (alias for ${R})`;throw new Oa(`option requires argument: ${x}${V}`,"ARG_MISSING_REQUIRED_LONGARG")}a[R]=N(e[A+1],R,a[R]),++A}else a[R]=N(C,R,a[R])}}else a._.push(h)}return a}sv.flag=t=>(t[Xq]=!0,t);sv.COUNT=sv.flag((t,e,r)=>(r||0)+1);sv.ArgError=Oa;jIe.exports=sv});var $Ie=_((ZJt,ZIe)=>{var tG;ZIe.exports=()=>(typeof tG>"u"&&(tG=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),tG)});var i1e=_((aG,lG)=>{(function(t){aG&&typeof aG=="object"&&typeof lG<"u"?lG.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 l1e=_((JXt,a1e)=>{"use strict";cG.ifExists=$It;var YC=ve("util"),oc=ve("path"),s1e=i1e(),JIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,XIt={createPwshFile:!0,createCmdFile:s1e(),fs:ve("fs")},ZIt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function o1e(t){let e={...XIt,...t},r=e.fs;return e.fs_={chmod:r.chmod?YC.promisify(r.chmod):async()=>{},mkdir:YC.promisify(r.mkdir),readFile:YC.promisify(r.readFile),stat:YC.promisify(r.stat),unlink:YC.promisify(r.unlink),writeFile:YC.promisify(r.writeFile)},e}async function cG(t,e,r){let o=o1e(r);await o.fs_.stat(t),await t1t(t,e,o)}function $It(t,e,r){return cG(t,e,r).catch(()=>{})}function e1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function t1t(t,e,r){let o=await o1t(t,r);return await r1t(e,r),n1t(t,e,o,r)}function r1t(t,e){return e.fs_.mkdir(oc.dirname(t),{recursive:!0})}function n1t(t,e,r,o){let a=o1e(o),n=[{generator:c1t,extension:""}];return a.createCmdFile&&n.push({generator:l1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:u1t,extension:".ps1"}),Promise.all(n.map(u=>a1t(t,e+u.extension,r,u.generator,a)))}function i1t(t,e){return e1t(t,e)}function s1t(t,e){return A1t(t,e)}async function o1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(JIt);if(!a){let n=oc.extname(t).toLowerCase();return{program:ZIt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function a1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await i1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),s1t(e,a)}function l1t(t,e,r){let a=oc.relative(oc.dirname(e),t).split("/").join("\\"),n=oc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=uG(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +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===UCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===OCt&&this.focusNext(),e===MCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return cm.default.createElement(QCt.default.Provider,{value:{exit:this.handleExit}},cm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},cm.default.createElement(FCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},cm.default.createElement(TCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},cm.default.createElement(LCt.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}},this.state.error?cm.default.createElement(NCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Cwe.default.hide(this.props.stdout)}componentWillUnmount(){Cwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};su.default=aQ;aQ.displayName="InternalApp"});var vwe=_(ou=>{"use strict";var _Ct=ou&&ou.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),HCt=ou&&ou.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),qCt=ou&&ou.__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)&&_Ct(e,t,r);return HCt(e,t),e},au=ou&&ou.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ou,"__esModule",{value:!0});var GCt=au(an()),Iwe=lM(),jCt=au(cEe()),YCt=au(u6()),WCt=au(gEe()),KCt=au(mEe()),Eq=au(uCe()),zCt=au(zCe()),VCt=au(h6()),JCt=au(ZCe()),XCt=qCt(j6()),ZCt=au(sq()),$Ct=au(wwe()),HC=process.env.CI==="false"?!1:WCt.default,Bwe=()=>{},Cq=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.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(HC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(YCt.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},KCt.default(this),this.options=e,this.rootNode=XCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:Iwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=jCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:Iwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Eq.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=VCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),HC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=GCt.default.createElement($Ct.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);Eq.default.updateContainer(r,this.container,null,Bwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(HC){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(HC){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(),HC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,Eq.default.updateContainer(null,this.container,null,Bwe),ZCt.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(){!HC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=JCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};ou.default=Cq});var Dwe=_(SB=>{"use strict";var Pwe=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var ewt=Pwe(vwe()),lQ=Pwe(sq()),twt=ve("stream"),rwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},nwt(e)),o=iwt(r.stdout,()=>new ewt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>lQ.default.delete(r.stdout),clear:o.clear}};SB.default=rwt;var nwt=(t={})=>t instanceof twt.Stream?{stdout:t,stdin:process.stdin}:t,iwt=(t,e)=>{let r;return lQ.default.has(t)?r=lQ.default.get(t):(r=e(),lQ.default.set(t,r)),r}});var bwe=_($f=>{"use strict";var swt=$f&&$f.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),owt=$f&&$f.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),awt=$f&&$f.__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)&&swt(e,t,r);return owt(e,t),e};Object.defineProperty($f,"__esModule",{value:!0});var bB=awt(an()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=bB.useState(0),u=bB.useMemo(()=>e.slice(a),[e,a]);bB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=bB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return bB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";$f.default=Swe});var kwe=_(xB=>{"use strict";var lwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var cwt=lwt(an()),xwe=({children:t,transform:e})=>t==null?null:cwt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);xwe.displayName="Transform";xB.default=xwe});var Rwe=_(kB=>{"use strict";var uwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var Awt=uwt(an()),Qwe=({count:t=1})=>Awt.default.createElement("ink-text",null,` +`.repeat(t));Qwe.displayName="Newline";kB.default=Qwe});var Lwe=_(QB=>{"use strict";var Fwe=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var fwt=Fwe(an()),pwt=Fwe(oQ()),Twe=()=>fwt.default.createElement(pwt.default,{flexGrow:1});Twe.displayName="Spacer";QB.default=Twe});var cQ=_(RB=>{"use strict";var hwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var gwt=an(),dwt=hwt(cq()),mwt=()=>gwt.useContext(dwt.default);RB.default=mwt});var Owe=_(FB=>{"use strict";var ywt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Nwe=an(),Ewt=ywt(cQ()),Cwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=Ewt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};FB.default=Cwt});var Mwe=_(TB=>{"use strict";var wwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var Iwt=an(),Bwt=wwt(aq()),vwt=()=>Iwt.useContext(Bwt.default);TB.default=vwt});var Uwe=_(LB=>{"use strict";var Pwt=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var Dwt=an(),Swt=Pwt(Aq()),bwt=()=>Dwt.useContext(Swt.default);LB.default=bwt});var _we=_(NB=>{"use strict";var xwt=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var kwt=an(),Qwt=xwt(pq()),Rwt=()=>kwt.useContext(Qwt.default);NB.default=Rwt});var qwe=_(MB=>{"use strict";var Hwe=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var OB=an(),Fwt=Hwe(sQ()),Twt=Hwe(cQ()),Lwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Twt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=OB.useContext(Fwt.default),h=OB.useMemo(()=>Math.random().toString().slice(2,7),[]);return OB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),OB.useEffect(()=>{t?A(h):p(h)},[t,h]),OB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};MB.default=Lwt});var Gwe=_(UB=>{"use strict";var Nwt=UB&&UB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(UB,"__esModule",{value:!0});var Owt=an(),Mwt=Nwt(sQ()),Uwt=()=>{let t=Owt.useContext(Mwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};UB.default=Uwt});var jwe=_(wq=>{"use strict";Object.defineProperty(wq,"__esModule",{value:!0});wq.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var sc=_(to=>{"use strict";Object.defineProperty(to,"__esModule",{value:!0});var _wt=Dwe();Object.defineProperty(to,"render",{enumerable:!0,get:function(){return _wt.default}});var Hwt=oQ();Object.defineProperty(to,"Box",{enumerable:!0,get:function(){return Hwt.default}});var qwt=yq();Object.defineProperty(to,"Text",{enumerable:!0,get:function(){return qwt.default}});var Gwt=bwe();Object.defineProperty(to,"Static",{enumerable:!0,get:function(){return Gwt.default}});var jwt=kwe();Object.defineProperty(to,"Transform",{enumerable:!0,get:function(){return jwt.default}});var Ywt=Rwe();Object.defineProperty(to,"Newline",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Lwe();Object.defineProperty(to,"Spacer",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=Owe();Object.defineProperty(to,"useInput",{enumerable:!0,get:function(){return Kwt.default}});var zwt=Mwe();Object.defineProperty(to,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Vwt=cQ();Object.defineProperty(to,"useStdin",{enumerable:!0,get:function(){return Vwt.default}});var Jwt=Uwe();Object.defineProperty(to,"useStdout",{enumerable:!0,get:function(){return Jwt.default}});var Xwt=_we();Object.defineProperty(to,"useStderr",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=qwe();Object.defineProperty(to,"useFocus",{enumerable:!0,get:function(){return Zwt.default}});var $wt=Gwe();Object.defineProperty(to,"useFocusManager",{enumerable:!0,get:function(){return $wt.default}});var eIt=jwe();Object.defineProperty(to,"measureElement",{enumerable:!0,get:function(){return eIt.default}})});var Bq={};zt(Bq,{Gem:()=>Iq});var Ywe,Am,Iq,uQ=Et(()=>{Ywe=Ze(sc()),Am=Ze(an()),Iq=(0,Am.memo)(({active:t})=>{let e=(0,Am.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Am.useMemo)(()=>t?"green":"yellow",[t]);return Am.default.createElement(Ywe.Text,{color:r},e)})});var Kwe={};zt(Kwe,{useKeypress:()=>fm});function fm({active:t},e,r){let{stdin:o}=(0,Wwe.useStdin)(),a=(0,AQ.useCallback)((n,u)=>e(n,u),r);(0,AQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Wwe,AQ,_B=Et(()=>{Wwe=Ze(sc()),AQ=Ze(an())});var Vwe={};zt(Vwe,{FocusRequest:()=>zwe,useFocusRequest:()=>vq});var zwe,vq,Pq=Et(()=>{_B();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),vq=function({active:t},e,r){fm({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};zt(Jwe,{useListInput:()=>HB});var HB,fQ=Et(()=>{_B();HB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){fm({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var pQ={};zt(pQ,{ScrollableItems:()=>tIt});var w0,Na,tIt,hQ=Et(()=>{w0=Ze(sc()),Na=Ze(an());Pq();fQ();tIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=Na.default.Children.map(e,N=>A(N)),h=p[0],[E,I]=(0,Na.useState)(h),v=p.indexOf(E);(0,Na.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,Na.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vq({active:t&&!!n},N=>{n?.(N)},[n]),HB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let x=v-r,C=v+r;C>p.length&&(x-=C-p.length,C=p.length),x<0&&(C+=-x,x=0),C>=p.length&&(C=p.length-1);let F=[];for(let N=x;N<=C;++N){let U=p[N],V=t&&U===E;F.push(Na.default.createElement(w0.Box,{key:U,height:o},Na.default.createElement(w0.Box,{marginLeft:1,marginRight:1},Na.default.createElement(w0.Text,null,V?Na.default.createElement(w0.Text,{color:"cyan",bold:!0},">"):" ")),Na.default.createElement(w0.Box,null,Na.default.cloneElement(e[N],{active:V}))))}return Na.default.createElement(w0.Box,{flexDirection:"column",width:"100%"},F)}});var Xwe,ep,Zwe,Dq,$we,Sq=Et(()=>{Xwe=Ze(sc()),ep=Ze(an()),Zwe=ve("readline"),Dq=ep.default.createContext(null),$we=({children:t})=>{let{stdin:e,setRawMode:r}=(0,Xwe.useStdin)();(0,ep.useEffect)(()=>{r&&r(!0),e&&(0,Zwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,ep.useState)(new Map),n=(0,ep.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return ep.default.createElement(Dq.Provider,{value:n,children:t})}});var bq={};zt(bq,{useMinistore:()=>rIt});function rIt(t,e){let r=(0,gQ.useContext)(Dq);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,gQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var gQ,xq=Et(()=>{gQ=Ze(an());Sq()});var mQ={};zt(mQ,{renderForm:()=>nIt});async function nIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,dQ.useApp)();fm({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,dQ.render)(kq.default.createElement($we,null,kq.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var dQ,kq,yQ=Et(()=>{dQ=Ze(sc()),kq=Ze(an());Sq();_B()});var nIe=_(qB=>{"use strict";Object.defineProperty(qB,"__esModule",{value:!0});qB.UncontrolledTextInput=void 0;var tIe=an(),Qq=an(),eIe=sc(),pm=nQ(),rIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Qq.useState({cursorOffset:(t||"").length,cursorWidth:0});Qq.useEffect(()=>{E(F=>{if(!r||!n)return F;let N=t||"";return F.cursorOffset>N.length-1?{cursorOffset:N.length,cursorWidth:0}:F})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,x=v,C=e?pm.grey(e):void 0;if(n&&r){C=e.length>0?pm.inverse(e[0])+pm.grey(e.slice(1)):pm.inverse(" "),x=v.length>0?"":pm.inverse(" ");let F=0;for(let N of v)F>=p-I&&F<=p?x+=pm.inverse(N):x+=N,F++;v.length>0&&p===v.length&&(x+=pm.inverse(" "))}return eIe.useInput((F,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&F==="c"||N.tab||N.shift&&N.tab)return;if(N.return){A&&A(t);return}let U=p,V=t,te=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(V=t.slice(0,p-1)+t.slice(p,t.length),U--):(V=t.slice(0,p)+F+t.slice(p,t.length),U+=F.length,F.length>1&&(te=F.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),V!==t&&u(V)},{isActive:r}),tIe.createElement(eIe.Text,null,e?v.length>0?x:C:x)};qB.default=rIe;qB.UncontrolledTextInput=t=>{let[e,r]=Qq.useState("");return tIe.createElement(rIe,Object.assign({},t,{value:e,onChange:r}))}});var oIe={};zt(oIe,{Pad:()=>Rq});var iIe,sIe,Rq,Fq=Et(()=>{iIe=Ze(sc()),sIe=Ze(an()),Rq=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return sIe.default.createElement(iIe.Text,{dimColor:!e},r)}});var aIe={};zt(aIe,{ItemOptions:()=>iIt});var jB,B0,iIt,lIe=Et(()=>{jB=Ze(sc()),B0=Ze(an());fQ();uQ();Fq();iIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return HB(o,u,{active:t,minus:"left",plus:"right",set:a}),B0.default.createElement(B0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),x=Math.max(0,I-v.length-2);return p?B0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},B0.default.createElement(jB.Text,{wrap:"truncate"},B0.default.createElement(Iq,{active:E})," ",p),e?B0.default.createElement(Rq,{active:t,length:x}):null):B0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var vIe=_(($Vt,BIe)=>{var qq;BIe.exports=()=>(typeof qq>"u"&&(qq=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qq)});var YIe=_((vJt,jIe)=>{var Xq=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function ov(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,x=[])=>(x.push(E(I,v,x[x.length-1])),x),h=E===Boolean||E[Xq]===!0}else if(typeof p=="function")h=p===Boolean||p[Xq]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let V=x===F?"":` (alias for ${F})`;throw new Oa(`option requires argument: ${x}${V}`,"ARG_MISSING_REQUIRED_LONGARG")}a[F]=N(e[A+1],F,a[F]),++A}else a[F]=N(C,F,a[F])}}else a._.push(h)}return a}ov.flag=t=>(t[Xq]=!0,t);ov.COUNT=ov.flag((t,e,r)=>(r||0)+1);ov.ArgError=Oa;jIe.exports=ov});var $Ie=_((eXt,ZIe)=>{var tG;ZIe.exports=()=>(typeof tG>"u"&&(tG=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),tG)});var i1e=_((aG,lG)=>{(function(t){aG&&typeof aG=="object"&&typeof lG<"u"?lG.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 l1e=_((ZXt,a1e)=>{"use strict";cG.ifExists=t1t;var GC=ve("util"),oc=ve("path"),s1e=i1e(),ZIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,$It={createPwshFile:!0,createCmdFile:s1e(),fs:ve("fs")},e1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function o1e(t){let e={...$It,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function cG(t,e,r){let o=o1e(r);await o.fs_.stat(t),await n1t(t,e,o)}function t1t(t,e,r){return cG(t,e,r).catch(()=>{})}function r1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function n1t(t,e,r){let o=await l1t(t,r);return await i1t(e,r),s1t(t,e,o,r)}function i1t(t,e){return e.fs_.mkdir(oc.dirname(t),{recursive:!0})}function s1t(t,e,r,o){let a=o1e(o),n=[{generator:A1t,extension:""}];return a.createCmdFile&&n.push({generator:u1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:f1t,extension:".ps1"}),Promise.all(n.map(u=>c1t(t,e+u.extension,r,u.generator,a)))}function o1t(t,e){return r1t(t,e)}function a1t(t,e){return p1t(t,e)}async function l1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(ZIt);if(!a){let n=oc.extname(t).toLowerCase();return{program:e1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function c1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await o1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),a1t(e,a)}function u1t(t,e,r){let a=oc.relative(oc.dirname(e),t).split("/").join("\\"),n=oc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=uG(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r `:"";return u?I+=`@IF EXIST ${u} (\r ${u} ${p} ${a} ${E}%*\r ) ELSE (\r @@ -325,7 +325,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr ${A} ${p} ${a} ${E}%*\r )\r `:I+=`@${A} ${p} ${a} ${E}%*\r -`,I}function c1t(t,e,r){let o=oc.relative(oc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=oc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=uG(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +`,I}function A1t(t,e,r){let o=oc.relative(oc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=oc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=uG(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") case \`uname\` in @@ -340,7 +340,7 @@ else fi `:E+=`${I}${a} ${A} ${o} ${h}"$@" exit $? -`,E}function u1t(t,e,r){let o=oc.relative(oc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=oc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=uG(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",x=`#!/usr/bin/env pwsh +`,E}function f1t(t,e,r){let o=oc.relative(oc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=oc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=uG(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",x=`#!/usr/bin/env pwsh $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent $exe="" @@ -382,83 +382,83 @@ if ($MyInvocation.ExpectingInput) { } ${r.nodePath?`$env:NODE_PATH=$env_node_path `:""}exit $LASTEXITCODE -`,x}function A1t(t,e){return e.fs_.chmod(t,493)}function uG(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(oc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}a1e.exports=cG});var vG=_((m$t,x1e)=>{x1e.exports=ve("stream")});var R1e=_((y$t,F1e)=>{"use strict";function k1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function M1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return xQ.alloc(0);for(var o=xQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)Y1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=xQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:j1t,value:function(r,o){return DG(this,M1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var SG=_((E$t,L1e)=>{"use strict";function W1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(PG,this,t)):process.nextTick(PG,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(kQ,r):(r._writableState.errorEmitted=!0,process.nextTick(T1e,r,n)):process.nextTick(T1e,r,n):e?(process.nextTick(kQ,r),e(n)):process.nextTick(kQ,r)}),this)}function T1e(t,e){PG(t,e),kQ(t)}function kQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){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 PG(t,e){t.emit("error",e)}function z1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}L1e.exports={destroy:W1t,undestroy:K1t,errorOrDestroy:z1t}});var F0=_((C$t,M1e)=>{"use strict";var O1e={};function lc(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,O1e[t]=a}function N1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function V1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function J1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function X1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}lc("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);lc("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&V1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(J1t(t," argument"))a=`The ${t} ${o} ${N1e(e,"type")}`;else{let n=X1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${N1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);lc("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");lc("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});lc("ERR_STREAM_PREMATURE_CLOSE","Premature close");lc("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});lc("ERR_MULTIPLE_CALLBACK","Callback called multiple times");lc("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");lc("ERR_STREAM_WRITE_AFTER_END","write after end");lc("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);lc("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);lc("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");M1e.exports.codes=O1e});var bG=_((w$t,U1e)=>{"use strict";var Z1t=F0().codes.ERR_INVALID_OPT_VALUE;function $1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function e2t(t,e,r,o){var a=$1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new Z1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}U1e.exports={getHighWaterMark:e2t}});var _1e=_((I$t,xG)=>{typeof Object.create=="function"?xG.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:xG.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var R0=_((B$t,QG)=>{try{if(kG=ve("util"),typeof kG.inherits!="function")throw"";QG.exports=kG.inherits}catch{QG.exports=_1e()}var kG});var q1e=_((v$t,H1e)=>{H1e.exports=ve("util").deprecate});var TG=_((D$t,z1e)=>{"use strict";z1e.exports=Ri;function j1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){S2t(e,t)}}var JC;Ri.WritableState=mv;var t2t={deprecate:q1e()},Y1e=vG(),FQ=ve("buffer").Buffer,r2t=global.Uint8Array||function(){};function n2t(t){return FQ.from(t)}function i2t(t){return FQ.isBuffer(t)||t instanceof r2t}var RG=SG(),s2t=bG(),o2t=s2t.getHighWaterMark,T0=F0().codes,a2t=T0.ERR_INVALID_ARG_TYPE,l2t=T0.ERR_METHOD_NOT_IMPLEMENTED,c2t=T0.ERR_MULTIPLE_CALLBACK,u2t=T0.ERR_STREAM_CANNOT_PIPE,A2t=T0.ERR_STREAM_DESTROYED,f2t=T0.ERR_STREAM_NULL_VALUES,p2t=T0.ERR_STREAM_WRITE_AFTER_END,h2t=T0.ERR_UNKNOWN_ENCODING,XC=RG.errorOrDestroy;R0()(Ri,Y1e);function g2t(){}function mv(t,e,r){JC=JC||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=o2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){I2t(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 j1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:t2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var QQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(QQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ri,Symbol.hasInstance,{value:function(e){return QQ.call(this,e)?!0:this!==Ri?!1:e&&e._writableState instanceof mv}})):QQ=function(e){return e instanceof this};function Ri(t){JC=JC||Cm();var e=this instanceof JC;if(!e&&!QQ.call(Ri,this))return new Ri(t);this._writableState=new mv(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)),Y1e.call(this)}Ri.prototype.pipe=function(){XC(this,new u2t)};function d2t(t,e){var r=new p2t;XC(t,r),process.nextTick(e,r)}function m2t(t,e,r,o){var a;return r===null?a=new f2t:typeof r!="string"&&!e.objectMode&&(a=new a2t("chunk",["string","Buffer"],r)),a?(XC(t,a),process.nextTick(o,a),!1):!0}Ri.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&i2t(t);return n&&!FQ.isBuffer(t)&&(t=n2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=g2t),o.ending?d2t(this,r):(n||m2t(this,o,t,r))&&(o.pendingcb++,a=E2t(this,o,n,t,e,r)),a};Ri.prototype.cork=function(){this._writableState.corked++};Ri.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&W1e(this,t))};Ri.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 h2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ri.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function y2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Ri.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function E2t(t,e,r,o,a,n){if(!r){var u=y2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};J1e.exports=EA;var V1e=OG(),NG=TG();R0()(EA,V1e);for(LG=b2t(NG.prototype),RQ=0;RQ{var LQ=ve("buffer"),sp=LQ.Buffer;function X1e(t,e){for(var r in t)e[r]=t[r]}sp.from&&sp.alloc&&sp.allocUnsafe&&sp.allocUnsafeSlow?Z1e.exports=LQ:(X1e(LQ,MG),MG.Buffer=ZC);function ZC(t,e,r){return sp(t,e,r)}X1e(sp,ZC);ZC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return sp(t,e,r)};ZC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=sp(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};ZC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return sp(t)};ZC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return LQ.SlowBuffer(t)}});var HG=_(t2e=>{"use strict";var _G=$1e().Buffer,e2e=_G.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 Q2t(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 F2t(t){var e=Q2t(t);if(typeof e!="string"&&(_G.isEncoding===e2e||!e2e(t)))throw new Error("Unknown encoding: "+t);return e||t}t2e.StringDecoder=yv;function yv(t){this.encoding=F2t(t);var e;switch(this.encoding){case"utf16le":this.text=M2t,this.end=U2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=_2t,this.end=H2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=_G.allocUnsafe(e)}yv.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 R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function T2t(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 L2t(t){var e=this.lastTotal-this.lastNeed,r=T2t(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 N2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function M2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function U2t(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 _2t(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 H2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var NQ=_((b$t,i2e)=>{"use strict";var r2e=F0().codes.ERR_STREAM_PREMATURE_CLOSE;function j2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var OQ;function L0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=NQ(),N0=Symbol("lastResolve"),wm=Symbol("lastReject"),Ev=Symbol("error"),MQ=Symbol("ended"),Im=Symbol("lastPromise"),qG=Symbol("handlePromise"),Bm=Symbol("stream");function O0(t,e){return{value:t,done:e}}function z2t(t){var e=t[N0];if(e!==null){var r=t[Bm].read();r!==null&&(t[Im]=null,t[N0]=null,t[wm]=null,e(O0(r,!1)))}}function V2t(t){process.nextTick(z2t,t)}function J2t(t,e){return function(r,o){t.then(function(){if(e[MQ]){r(O0(void 0,!0));return}e[qG](r,o)},o)}}var X2t=Object.getPrototypeOf(function(){}),Z2t=Object.setPrototypeOf((OQ={get stream(){return this[Bm]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[MQ])return Promise.resolve(O0(void 0,!0));if(this[Bm].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(O0(void 0,!0))})});var o=this[Im],a;if(o)a=new Promise(J2t(o,this));else{var n=this[Bm].read();if(n!==null)return Promise.resolve(O0(n,!1));a=new Promise(this[qG])}return this[Im]=a,a}},L0(OQ,Symbol.asyncIterator,function(){return this}),L0(OQ,"return",function(){var e=this;return new Promise(function(r,o){e[Bm].destroy(null,function(a){if(a){o(a);return}r(O0(void 0,!0))})})}),OQ),X2t),$2t=function(e){var r,o=Object.create(Z2t,(r={},L0(r,Bm,{value:e,writable:!0}),L0(r,N0,{value:null,writable:!0}),L0(r,wm,{value:null,writable:!0}),L0(r,Ev,{value:null,writable:!0}),L0(r,MQ,{value:e._readableState.endEmitted,writable:!0}),L0(r,qG,{value:function(n,u){var A=o[Bm].read();A?(o[Im]=null,o[N0]=null,o[wm]=null,n(O0(A,!1))):(o[N0]=n,o[wm]=u)},writable:!0}),r));return o[Im]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[wm];n!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,n(a)),o[Ev]=a;return}var u=o[N0];u!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,u(O0(void 0,!0))),o[MQ]=!0}),e.on("readable",V2t.bind(null,o)),o};s2e.exports=$2t});var u2e=_((k$t,c2e)=>{"use strict";function a2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function eBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){a2e(n,o,a,u,A,"next",p)}function A(p){a2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function l2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function tBt(t){for(var e=1;e{"use strict";C2e.exports=mn;var $C;mn.ReadableState=h2e;var Q$t=ve("events").EventEmitter,p2e=function(e,r){return e.listeners(r).length},wv=vG(),UQ=ve("buffer").Buffer,sBt=global.Uint8Array||function(){};function oBt(t){return UQ.from(t)}function aBt(t){return UQ.isBuffer(t)||t instanceof sBt}var GG=ve("util"),en;GG&&GG.debuglog?en=GG.debuglog("stream"):en=function(){};var lBt=R1e(),JG=SG(),cBt=bG(),uBt=cBt.getHighWaterMark,_Q=F0().codes,ABt=_Q.ERR_INVALID_ARG_TYPE,fBt=_Q.ERR_STREAM_PUSH_AFTER_EOF,pBt=_Q.ERR_METHOD_NOT_IMPLEMENTED,hBt=_Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,ew,jG,YG;R0()(mn,wv);var Cv=JG.errorOrDestroy,WG=["error","close","destroy","pause","resume"];function gBt(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 h2e(t,e,r){$C=$C||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof $C),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=uBt(this,t,"readableHighWaterMark",r),this.buffer=new lBt,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&&(ew||(ew=HG().StringDecoder),this.decoder=new ew(t.encoding),this.encoding=t.encoding)}function mn(t){if($C=$C||Cm(),!(this instanceof mn))return new mn(t);var e=this instanceof $C;this._readableState=new h2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=JG.destroy;mn.prototype._undestroy=JG.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=UQ.from(t,e),e=""),o=!0),g2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return g2e(this,t,null,!0,!1)};function g2e(t,e,r,o,a){en("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,yBt(t,n);else{var u;if(a||(u=dBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==UQ.prototype&&(e=oBt(e)),o)n.endEmitted?Cv(t,new hBt):KG(t,n,e,!0);else if(n.ended)Cv(t,new fBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?KG(t,n,e,!1):VG(t,n)):KG(t,n,e,!1)}else o||(n.reading=!1,VG(t,n))}return!n.ended&&(n.length=A2e?t=A2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function f2e(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=mBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){en("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 en("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?zG(this):HQ(this),null;if(t=f2e(t,e),t===0&&e.ended)return e.length===0&&zG(this),null;var o=e.needReadable;en("need readable",o),(e.length===0||e.length-t0?a=y2e(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&&zG(this)),a!==null&&this.emit("data",a),a};function yBt(t,e){if(en("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?HQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,d2e(t)))}}function HQ(t){var e=t._readableState;en("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(en("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(d2e,t))}function d2e(t){var e=t._readableState;en("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,XG(t)}function VG(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(EBt,t,e))}function EBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&E2e(o.pipes,t)!==-1)&&!h&&(en("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(N){en("onerror",N),R(),t.removeListener("error",v),p2e(t,"error")===0&&Cv(t,N)}gBt(t,"error",v);function x(){t.removeListener("finish",C),R()}t.once("close",x);function C(){en("onfinish"),t.removeListener("close",x),R()}t.once("finish",C);function R(){en("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(en("pipe resume"),r.resume()),t};function CBt(t){return function(){var r=t._readableState;en("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&p2e(t,"data")&&(r.flowing=!0,XG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,en("on readable",o.length,o.reading),o.length?HQ(this):o.reading||process.nextTick(wBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(m2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(m2e,this),e};function m2e(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 wBt(t){en("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||(en("resume"),t.flowing=!t.readableListening,IBt(this,t)),t.paused=!1,this};function IBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(BBt,t,e))}function BBt(t,e){en("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),XG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return en("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(en("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function XG(t){var e=t._readableState;for(en("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(en("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(en("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function zG(t){var e=t._readableState;en("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(vBt,e,t))}function vBt(t,e){if(en("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"&&(mn.from=function(t,e){return YG===void 0&&(YG=u2e()),YG(mn,t,e)});function E2e(t,e){for(var r=0,o=t.length;r{"use strict";I2e.exports=op;var qQ=F0().codes,DBt=qQ.ERR_METHOD_NOT_IMPLEMENTED,PBt=qQ.ERR_MULTIPLE_CALLBACK,SBt=qQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=qQ.ERR_TRANSFORM_WITH_LENGTH_0,GQ=Cm();R0()(op,GQ);function xBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new PBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";v2e.exports=Iv;var B2e=ZG();R0()(Iv,B2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);B2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var k2e=_((L$t,x2e)=>{"use strict";var $G;function QBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var b2e=F0().codes,FBt=b2e.ERR_MISSING_ARGS,RBt=b2e.ERR_STREAM_DESTROYED;function P2e(t){if(t)throw t}function TBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=QBt(o);var a=!1;t.on("close",function(){a=!0}),$G===void 0&&($G=NQ()),$G(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,TBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function S2e(t){t()}function NBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?P2e:t.pop()}function MBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(S2e),!p&&(n.forEach(S2e),o(a))})});return e.reduce(NBt)}x2e.exports=MBt});var tw=_((cc,vv)=>{var Bv=ve("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(cc=vv.exports=OG(),cc.Stream=Bv||cc,cc.Readable=cc,cc.Writable=TG(),cc.Duplex=Cm(),cc.Transform=ZG(),cc.PassThrough=D2e(),cc.finished=NQ(),cc.pipeline=k2e())});var R2e=_((N$t,F2e)=>{"use strict";var{Buffer:cu}=ve("buffer"),Q2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,Q2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.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)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||cu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:cu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.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};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var ej=tw().Duplex,UBt=R0(),Dv=R2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),ej.call(this)}UBt(Uo,ej);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.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)};Uo.prototype.end=function(e){ej.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;jQ.exports=Uo;jQ.exports.BufferListStream=Uo;jQ.exports.BufferList=Dv});var nj=_(nw=>{var _Bt=Buffer.alloc,HBt="0000000000000000000",qBt="7777777777777777777",L2e="0".charCodeAt(0),N2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),jBt=Buffer.from("ustar ","binary"),YBt=Buffer.from(" \0","binary"),WBt=parseInt("7777",8),Pv=257,rj=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},zBt=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},VBt=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},O2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":HBt.slice(0,e-t.length)+t+" "};function JBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};nw.decodeLongPath=function(t,e){return rw(t,0,t.length,e)};nw.encodePax=function(t){var e="";t.name&&(e+=tj(" path="+t.name+` +`,x}function p1t(t,e){return e.fs_.chmod(t,493)}function uG(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(oc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}a1e.exports=cG});var vG=_((E$t,x1e)=>{x1e.exports=ve("stream")});var F1e=_((C$t,R1e)=>{"use strict";function k1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function _1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return kQ.alloc(0);for(var o=kQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)K1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=kQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:W1t,value:function(r,o){return PG(this,_1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var SG=_((w$t,L1e)=>{"use strict";function z1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(DG,this,t)):process.nextTick(DG,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(QQ,r):(r._writableState.errorEmitted=!0,process.nextTick(T1e,r,n)):process.nextTick(T1e,r,n):e?(process.nextTick(QQ,r),e(n)):process.nextTick(QQ,r)}),this)}function T1e(t,e){DG(t,e),QQ(t)}function QQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function V1t(){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 DG(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}L1e.exports={destroy:z1t,undestroy:V1t,errorOrDestroy:J1t}});var R0=_((I$t,M1e)=>{"use strict";var O1e={};function lc(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,O1e[t]=a}function N1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function X1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function Z1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function $1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}lc("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);lc("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&X1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(Z1t(t," argument"))a=`The ${t} ${o} ${N1e(e,"type")}`;else{let n=$1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${N1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);lc("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");lc("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});lc("ERR_STREAM_PREMATURE_CLOSE","Premature close");lc("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});lc("ERR_MULTIPLE_CALLBACK","Callback called multiple times");lc("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");lc("ERR_STREAM_WRITE_AFTER_END","write after end");lc("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);lc("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);lc("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");M1e.exports.codes=O1e});var bG=_((B$t,U1e)=>{"use strict";var e2t=R0().codes.ERR_INVALID_OPT_VALUE;function t2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function r2t(t,e,r,o){var a=t2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new e2t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}U1e.exports={getHighWaterMark:r2t}});var _1e=_((v$t,xG)=>{typeof Object.create=="function"?xG.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:xG.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var F0=_((P$t,QG)=>{try{if(kG=ve("util"),typeof kG.inherits!="function")throw"";QG.exports=kG.inherits}catch{QG.exports=_1e()}var kG});var q1e=_((D$t,H1e)=>{H1e.exports=ve("util").deprecate});var TG=_((S$t,z1e)=>{"use strict";z1e.exports=Fi;function j1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var zC;Fi.WritableState=yv;var n2t={deprecate:q1e()},Y1e=vG(),FQ=ve("buffer").Buffer,i2t=global.Uint8Array||function(){};function s2t(t){return FQ.from(t)}function o2t(t){return FQ.isBuffer(t)||t instanceof i2t}var FG=SG(),a2t=bG(),l2t=a2t.getHighWaterMark,T0=R0().codes,c2t=T0.ERR_INVALID_ARG_TYPE,u2t=T0.ERR_METHOD_NOT_IMPLEMENTED,A2t=T0.ERR_MULTIPLE_CALLBACK,f2t=T0.ERR_STREAM_CANNOT_PIPE,p2t=T0.ERR_STREAM_DESTROYED,h2t=T0.ERR_STREAM_NULL_VALUES,g2t=T0.ERR_STREAM_WRITE_AFTER_END,d2t=T0.ERR_UNKNOWN_ENCODING,VC=FG.errorOrDestroy;F0()(Fi,Y1e);function m2t(){}function yv(t,e,r){zC=zC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof zC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=l2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){v2t(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 j1e(this)}yv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(yv.prototype,"buffer",{get:n2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var RQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(RQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Fi,Symbol.hasInstance,{value:function(e){return RQ.call(this,e)?!0:this!==Fi?!1:e&&e._writableState instanceof yv}})):RQ=function(e){return e instanceof this};function Fi(t){zC=zC||Em();var e=this instanceof zC;if(!e&&!RQ.call(Fi,this))return new Fi(t);this._writableState=new yv(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)),Y1e.call(this)}Fi.prototype.pipe=function(){VC(this,new f2t)};function y2t(t,e){var r=new g2t;VC(t,r),process.nextTick(e,r)}function E2t(t,e,r,o){var a;return r===null?a=new h2t:typeof r!="string"&&!e.objectMode&&(a=new c2t("chunk",["string","Buffer"],r)),a?(VC(t,a),process.nextTick(o,a),!1):!0}Fi.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&o2t(t);return n&&!FQ.isBuffer(t)&&(t=s2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=m2t),o.ending?y2t(this,r):(n||E2t(this,o,t,r))&&(o.pendingcb++,a=w2t(this,o,n,t,e,r)),a};Fi.prototype.cork=function(){this._writableState.corked++};Fi.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&W1e(this,t))};Fi.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 d2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Fi.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function C2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Fi.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function w2t(t,e,r,o,a,n){if(!r){var u=C2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var k2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};J1e.exports=EA;var V1e=OG(),NG=TG();F0()(EA,V1e);for(LG=k2t(NG.prototype),TQ=0;TQ{var NQ=ve("buffer"),sp=NQ.Buffer;function X1e(t,e){for(var r in t)e[r]=t[r]}sp.from&&sp.alloc&&sp.allocUnsafe&&sp.allocUnsafeSlow?Z1e.exports=NQ:(X1e(NQ,MG),MG.Buffer=JC);function JC(t,e,r){return sp(t,e,r)}X1e(sp,JC);JC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return sp(t,e,r)};JC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=sp(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};JC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return sp(t)};JC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return NQ.SlowBuffer(t)}});var HG=_(t2e=>{"use strict";var _G=$1e().Buffer,e2e=_G.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(_G.isEncoding===e2e||!e2e(t)))throw new Error("Unknown encoding: "+t);return e||t}t2e.StringDecoder=Ev;function Ev(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=_2t,this.end=H2t,e=4;break;case"utf8":this.fillLast=O2t,e=4;break;case"base64":this.text=q2t,this.end=G2t,e=3;break;default:this.write=j2t,this.end=Y2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=_G.allocUnsafe(e)}Ev.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 L2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(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 O2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=L2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function U2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function _2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function H2t(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 q2t(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 G2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function j2t(t){return t.toString(this.encoding)}function Y2t(t){return t&&t.length?this.write(t):""}});var OQ=_((k$t,i2e)=>{"use strict";var r2e=R0().codes.ERR_STREAM_PREMATURE_CLOSE;function W2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var MQ;function L0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var V2t=OQ(),N0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Cv=Symbol("error"),UQ=Symbol("ended"),wm=Symbol("lastPromise"),qG=Symbol("handlePromise"),Im=Symbol("stream");function O0(t,e){return{value:t,done:e}}function J2t(t){var e=t[N0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[N0]=null,t[Cm]=null,e(O0(r,!1)))}}function X2t(t){process.nextTick(J2t,t)}function Z2t(t,e){return function(r,o){t.then(function(){if(e[UQ]){r(O0(void 0,!0));return}e[qG](r,o)},o)}}var $2t=Object.getPrototypeOf(function(){}),eBt=Object.setPrototypeOf((MQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Cv];if(r!==null)return Promise.reject(r);if(this[UQ])return Promise.resolve(O0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Cv]?A(e[Cv]):u(O0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(Z2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(O0(n,!1));a=new Promise(this[qG])}return this[wm]=a,a}},L0(MQ,Symbol.asyncIterator,function(){return this}),L0(MQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(O0(void 0,!0))})})}),MQ),$2t),tBt=function(e){var r,o=Object.create(eBt,(r={},L0(r,Im,{value:e,writable:!0}),L0(r,N0,{value:null,writable:!0}),L0(r,Cm,{value:null,writable:!0}),L0(r,Cv,{value:null,writable:!0}),L0(r,UQ,{value:e._readableState.endEmitted,writable:!0}),L0(r,qG,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[N0]=null,o[Cm]=null,n(O0(A,!1))):(o[N0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,V2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[N0]=null,o[Cm]=null,n(a)),o[Cv]=a;return}var u=o[N0];u!==null&&(o[wm]=null,o[N0]=null,o[Cm]=null,u(O0(void 0,!0))),o[UQ]=!0}),e.on("readable",X2t.bind(null,o)),o};s2e.exports=tBt});var u2e=_((R$t,c2e)=>{"use strict";function a2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function rBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){a2e(n,o,a,u,A,"next",p)}function A(p){a2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function l2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function nBt(t){for(var e=1;e{"use strict";C2e.exports=mn;var XC;mn.ReadableState=h2e;var F$t=ve("events").EventEmitter,p2e=function(e,r){return e.listeners(r).length},Iv=vG(),_Q=ve("buffer").Buffer,aBt=global.Uint8Array||function(){};function lBt(t){return _Q.from(t)}function cBt(t){return _Q.isBuffer(t)||t instanceof aBt}var GG=ve("util"),en;GG&&GG.debuglog?en=GG.debuglog("stream"):en=function(){};var uBt=F1e(),JG=SG(),ABt=bG(),fBt=ABt.getHighWaterMark,HQ=R0().codes,pBt=HQ.ERR_INVALID_ARG_TYPE,hBt=HQ.ERR_STREAM_PUSH_AFTER_EOF,gBt=HQ.ERR_METHOD_NOT_IMPLEMENTED,dBt=HQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,ZC,jG,YG;F0()(mn,Iv);var wv=JG.errorOrDestroy,WG=["error","close","destroy","pause","resume"];function mBt(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 h2e(t,e,r){XC=XC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof XC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=fBt(this,t,"readableHighWaterMark",r),this.buffer=new uBt,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&&(ZC||(ZC=HG().StringDecoder),this.decoder=new ZC(t.encoding),this.encoding=t.encoding)}function mn(t){if(XC=XC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof XC;this._readableState=new h2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),Iv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=JG.destroy;mn.prototype._undestroy=JG.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=_Q.from(t,e),e=""),o=!0),g2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return g2e(this,t,null,!0,!1)};function g2e(t,e,r,o,a){en("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,CBt(t,n);else{var u;if(a||(u=yBt(n,e)),u)wv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==_Q.prototype&&(e=lBt(e)),o)n.endEmitted?wv(t,new dBt):KG(t,n,e,!0);else if(n.ended)wv(t,new hBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?KG(t,n,e,!1):VG(t,n)):KG(t,n,e,!1)}else o||(n.reading=!1,VG(t,n))}return!n.ended&&(n.length=A2e?t=A2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function f2e(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=EBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){en("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 en("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?zG(this):qQ(this),null;if(t=f2e(t,e),t===0&&e.ended)return e.length===0&&zG(this),null;var o=e.needReadable;en("need readable",o),(e.length===0||e.length-t0?a=y2e(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&&zG(this)),a!==null&&this.emit("data",a),a};function CBt(t,e){if(en("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?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,d2e(t)))}}function qQ(t){var e=t._readableState;en("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(en("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(d2e,t))}function d2e(t){var e=t._readableState;en("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,XG(t)}function VG(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(wBt,t,e))}function wBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&E2e(o.pipes,t)!==-1)&&!h&&(en("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(N){en("onerror",N),F(),t.removeListener("error",v),p2e(t,"error")===0&&wv(t,N)}mBt(t,"error",v);function x(){t.removeListener("finish",C),F()}t.once("close",x);function C(){en("onfinish"),t.removeListener("close",x),F()}t.once("finish",C);function F(){en("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(en("pipe resume"),r.resume()),t};function IBt(t){return function(){var r=t._readableState;en("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&p2e(t,"data")&&(r.flowing=!0,XG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,en("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(BBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=Iv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(m2e,this),r};mn.prototype.removeAllListeners=function(t){var e=Iv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(m2e,this),e};function m2e(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 BBt(t){en("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||(en("resume"),t.flowing=!t.readableListening,vBt(this,t)),t.paused=!1,this};function vBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(PBt,t,e))}function PBt(t,e){en("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),XG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return en("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(en("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function XG(t){var e=t._readableState;for(en("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(en("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(en("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function zG(t){var e=t._readableState;en("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if(en("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"&&(mn.from=function(t,e){return YG===void 0&&(YG=u2e()),YG(mn,t,e)});function E2e(t,e){for(var r=0,o=t.length;r{"use strict";I2e.exports=op;var GQ=R0().codes,SBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,bBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,kBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,jQ=Em();F0()(op,jQ);function QBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new bBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";v2e.exports=Bv;var B2e=ZG();F0()(Bv,B2e);function Bv(t){if(!(this instanceof Bv))return new Bv(t);B2e.call(this,t)}Bv.prototype._transform=function(t,e,r){r(null,t)}});var k2e=_((O$t,x2e)=>{"use strict";var $G;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var b2e=R0().codes,TBt=b2e.ERR_MISSING_ARGS,LBt=b2e.ERR_STREAM_DESTROYED;function D2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function OBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),$G===void 0&&($G=OQ()),$G(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new LBt("pipe"))}}}function S2e(t){t()}function MBt(t,e){return t.pipe(e)}function UBt(t){return!t.length||typeof t[t.length-1]!="function"?D2e:t.pop()}function _Bt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return OBt(u,p,h,function(E){a||(a=E),E&&n.forEach(S2e),!p&&(n.forEach(S2e),o(a))})});return e.reduce(MBt)}x2e.exports=_Bt});var $C=_((cc,Pv)=>{var vv=ve("stream");process.env.READABLE_STREAM==="disable"&&vv?(Pv.exports=vv.Readable,Object.assign(Pv.exports,vv),Pv.exports.Stream=vv):(cc=Pv.exports=OG(),cc.Stream=vv||cc,cc.Readable=cc,cc.Writable=TG(),cc.Duplex=Em(),cc.Transform=ZG(),cc.PassThrough=P2e(),cc.finished=OQ(),cc.pipeline=k2e())});var F2e=_((M$t,R2e)=>{"use strict";var{Buffer:cu}=ve("buffer"),Q2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,Q2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.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)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||cu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:cu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.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};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var ej=$C().Duplex,HBt=F0(),Dv=F2e();function Mo(t){if(!(this instanceof Mo))return new Mo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),ej.call(this)}HBt(Mo,ej);Object.assign(Mo.prototype,Dv.prototype);Mo.prototype._new=function(e){return new Mo(e)};Mo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Mo.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)};Mo.prototype.end=function(e){ej.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Mo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Mo.prototype._isBufferList=function(e){return e instanceof Mo||e instanceof Dv||Mo.isBufferList(e)};Mo.isBufferList=Dv.isBufferList;YQ.exports=Mo;YQ.exports.BufferListStream=Mo;YQ.exports.BufferList=Dv});var nj=_(tw=>{var qBt=Buffer.alloc,GBt="0000000000000000000",jBt="7777777777777777777",L2e="0".charCodeAt(0),N2e=Buffer.from("ustar\0","binary"),YBt=Buffer.from("00","binary"),WBt=Buffer.from("ustar ","binary"),KBt=Buffer.from(" \0","binary"),zBt=parseInt("7777",8),Sv=257,rj=263,VBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=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},XBt=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},O2e=function(t,e,r,o){for(;re?jBt.slice(0,e)+" ":GBt.slice(0,e-t.length)+t+" "};function ZBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};tw.decodeLongPath=function(t,e){return ew(t,0,t.length,e)};tw.encodePax=function(t){var e="";t.name&&(e+=tj(" path="+t.name+` `)),t.linkname&&(e+=tj(" linkpath="+t.linkname+` `));var r=t.pax;if(r)for(var o in r)e+=tj(" "+o+"="+r[o]+` -`);return Buffer.from(e)};nw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(M0(t.mode&WBt,6),100),e.write(M0(t.uid,6),108),e.write(M0(t.gid,6),116),e.write(M0(t.size,11),124),e.write(M0(t.mtime.getTime()/1e3|0,11),136),e[156]=L2e+VBt(t.type),t.linkname&&e.write(t.linkname,157),N2e.copy(e,Pv),GBt.copy(e,rj),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(M0(t.devmajor||0,6),329),e.write(M0(t.devminor||0,6),337),o&&e.write(o,345),e.write(M0(M2e(e),6),148),e)};nw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-L2e,a=rw(t,0,100,e),n=U0(t,100,8),u=U0(t,108,8),A=U0(t,116,8),p=U0(t,124,12),h=U0(t,136,12),E=zBt(o),I=t[157]===0?null:rw(t,157,100,e),v=rw(t,265,32),x=rw(t,297,32),C=U0(t,329,8),R=U0(t,337,8),N=M2e(t);if(N===8*32)return null;if(N!==U0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(N2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=rw(t,345,155,e)+"/"+a);else if(!(jBt.compare(t,Pv,Pv+6)===0&&YBt.compare(t,rj,rj+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:x,devmajor:C,devminor:R}}});var Y2e=_((U$t,j2e)=>{var _2e=ve("util"),XBt=T2e(),Sv=nj(),H2e=tw().Writable,q2e=tw().PassThrough,G2e=function(){},U2e=function(t){return t&=511,t&&512-t},ZBt=function(t,e){var r=new YQ(t,e);return r.end(),r},$Bt=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},YQ=function(t,e){this._parent=t,this.offset=e,q2e.call(this,{autoDestroy:!1})};_2e.inherits(YQ,q2e);YQ.prototype.destroy=function(t){this._parent.destroy(t)};var ap=function(t){if(!(this instanceof ap))return new ap(t);H2e.call(this,t),t=t||{},this._offset=0,this._buffer=XBt(),this._missing=0,this._partial=!1,this._onparse=G2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=U2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(U2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,x;try{x=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!x){e._parse(512,I),o();return}if(x.type==="gnu-long-path"){e._parse(x.size,h),o();return}if(x.type==="gnu-long-link-path"){e._parse(x.size,E),o();return}if(x.type==="pax-global-header"){e._parse(x.size,A),o();return}if(x.type==="pax-header"){e._parse(x.size,p),o();return}if(e._gnuLongPath&&(x.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(x.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=x=$Bt(x,e._pax),e._pax=null),e._locked=!0,!x.size||x.type==="directory"){e._parse(512,I),e.emit("entry",x,ZBt(e,v),a);return}e._stream=new YQ(e,v),e.emit("entry",x,e._stream,a),e._parse(x.size,n),o()};this._onheader=I,this._parse(512,I)};_2e.inherits(ap,H2e);ap.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};ap.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};ap.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=G2e,this._overflow?this._write(this._overflow,void 0,t):t()}};ap.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};ap.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};j2e.exports=ap});var K2e=_((_$t,W2e)=>{W2e.exports=ve("fs").constants||ve("constants")});var Z2e=_((H$t,X2e)=>{var iw=K2e(),z2e=NM(),KQ=R0(),evt=Buffer.alloc,V2e=tw().Readable,sw=tw().Writable,tvt=ve("string_decoder").StringDecoder,WQ=nj(),rvt=parseInt("755",8),nvt=parseInt("644",8),J2e=evt(1024),sj=function(){},ij=function(t,e){e&=511,e&&t.push(J2e.slice(0,512-e))};function ivt(t){switch(t&iw.S_IFMT){case iw.S_IFBLK:return"block-device";case iw.S_IFCHR:return"character-device";case iw.S_IFDIR:return"directory";case iw.S_IFIFO:return"fifo";case iw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){sw.call(this),this.written=0,this._to=t,this._destroyed=!1};KQ(zQ,sw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var VQ=function(){sw.call(this),this.linkname="",this._decoder=new tvt("utf-8"),this._destroyed=!1};KQ(VQ,sw);VQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var bv=function(){sw.call(this),this._destroyed=!1};KQ(bv,sw);bv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};bv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var CA=function(t){if(!(this instanceof CA))return new CA(t);V2e.call(this,t),this._drain=sj,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};KQ(CA,V2e);CA.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=sj);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=ivt(t.mode)),t.mode||(t.mode=t.type==="directory"?rvt:nvt),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 ij(o,t.size),a?process.nextTick(r):this._drain=r,new bv}if(t.type==="symlink"&&!t.linkname){var n=new VQ;return z2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new bv;var u=new zQ(this);return this._stream=u,z2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));ij(o,t.size),o._finalizing&&o.finalize(),r()}),u}};CA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(J2e),this.push(null))};CA.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())};CA.prototype._encode=function(t){if(!t.pax){var e=WQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};CA.prototype._encodePax=function(t){var e=WQ.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(WQ.encode(r)),this.push(e),ij(this,e.length),r.size=t.size,r.type=t.type,this.push(WQ.encode(r))};CA.prototype._read=function(t){var e=this._drain;this._drain=sj,e()};X2e.exports=CA});var $2e=_(oj=>{oj.extract=Y2e();oj.pack=Z2e()});var ABe=_((aer,uBe)=>{"use strict";var vm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=lBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return fj(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Evt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new vm(this.__specs,this.__opts,lBe(this.__providers).concat(e)),cBe)}};try{let t=ve("util");vm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function mvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function fj(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))mvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=aBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=aBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function aBe(t,e){let r;return e.__isFiggyPudding?r=fj(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var cBe={has(t,e){return e in t.__specs&&fj(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in vm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};uBe.exports=yvt;function yvt(t,e){function r(...o){return new Proxy(new vm(t,e,o),cBe)}return r}function lBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Evt(t){return Object.keys(t).map(e=>[e,t[e]])}});var hBe=_((ler,BA)=>{"use strict";var kv=ve("crypto"),Cvt=ABe(),wvt=ve("stream").Transform,fBe=["sha256","sha384","sha512"],Ivt=/^[a-z0-9+/]+(?:=?=?)$/i,Bvt=/^([^-]+)-([^?]+)([?\S*]*)$/,vvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Dvt=/^[\x21-\x7E]+$/,ia=Cvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),H0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?vvt:Bvt);if(!a||o&&!fBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(fBe.some(o=>o===this.algorithm)&&this.digest.match(Ivt)&&(this.options||[]).every(o=>o.match(Dvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Dm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>H0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:xv(e,r);return IA(`${this.toString(r)} ${o}`,r)}hexDigest(){return IA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=IA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};BA.exports.parse=IA;function IA(t,e){if(e=ia(e),typeof t=="string")return pj(t,e);if(t.algorithm&&t.digest){let r=new Dm;return r[t.algorithm]=[t],pj(xv(r,e),e)}else return pj(xv(t,e),e)}function pj(t,e){return e.single?new H0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new H0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new Dm)}BA.exports.stringify=xv;function xv(t,e){return e=ia(e),t.algorithm&&t.digest?H0.prototype.toString.call(t,e):typeof t=="string"?xv(IA(t,e),e):Dm.prototype.toString.call(t,e)}BA.exports.fromHex=Pvt;function Pvt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return IA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}BA.exports.fromData=Svt;function Svt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new H0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new Dm)}BA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=hj(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}BA.exports.checkData=xvt;function xvt(t,e,r){if(r=ia(r),e=IA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=IA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. +`);return Buffer.from(e)};tw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(M0(t.mode&zBt,6),100),e.write(M0(t.uid,6),108),e.write(M0(t.gid,6),116),e.write(M0(t.size,11),124),e.write(M0(t.mtime.getTime()/1e3|0,11),136),e[156]=L2e+XBt(t.type),t.linkname&&e.write(t.linkname,157),N2e.copy(e,Sv),YBt.copy(e,rj),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(M0(t.devmajor||0,6),329),e.write(M0(t.devminor||0,6),337),o&&e.write(o,345),e.write(M0(M2e(e),6),148),e)};tw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-L2e,a=ew(t,0,100,e),n=U0(t,100,8),u=U0(t,108,8),A=U0(t,116,8),p=U0(t,124,12),h=U0(t,136,12),E=JBt(o),I=t[157]===0?null:ew(t,157,100,e),v=ew(t,265,32),x=ew(t,297,32),C=U0(t,329,8),F=U0(t,337,8),N=M2e(t);if(N===8*32)return null;if(N!==U0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(N2e.compare(t,Sv,Sv+6)===0)t[345]&&(a=ew(t,345,155,e)+"/"+a);else if(!(WBt.compare(t,Sv,Sv+6)===0&&KBt.compare(t,rj,rj+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:x,devmajor:C,devminor:F}}});var Y2e=_((H$t,j2e)=>{var _2e=ve("util"),$Bt=T2e(),bv=nj(),H2e=$C().Writable,q2e=$C().PassThrough,G2e=function(){},U2e=function(t){return t&=511,t&&512-t},evt=function(t,e){var r=new WQ(t,e);return r.end(),r},tvt=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},WQ=function(t,e){this._parent=t,this.offset=e,q2e.call(this,{autoDestroy:!1})};_2e.inherits(WQ,q2e);WQ.prototype.destroy=function(t){this._parent.destroy(t)};var ap=function(t){if(!(this instanceof ap))return new ap(t);H2e.call(this,t),t=t||{},this._offset=0,this._buffer=$Bt(),this._missing=0,this._partial=!1,this._onparse=G2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=U2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(U2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=bv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=bv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=bv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=bv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,x;try{x=e._header=bv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!x){e._parse(512,I),o();return}if(x.type==="gnu-long-path"){e._parse(x.size,h),o();return}if(x.type==="gnu-long-link-path"){e._parse(x.size,E),o();return}if(x.type==="pax-global-header"){e._parse(x.size,A),o();return}if(x.type==="pax-header"){e._parse(x.size,p),o();return}if(e._gnuLongPath&&(x.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(x.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=x=tvt(x,e._pax),e._pax=null),e._locked=!0,!x.size||x.type==="directory"){e._parse(512,I),e.emit("entry",x,evt(e,v),a);return}e._stream=new WQ(e,v),e.emit("entry",x,e._stream,a),e._parse(x.size,n),o()};this._onheader=I,this._parse(512,I)};_2e.inherits(ap,H2e);ap.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};ap.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};ap.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=G2e,this._overflow?this._write(this._overflow,void 0,t):t()}};ap.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};ap.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};j2e.exports=ap});var K2e=_((q$t,W2e)=>{W2e.exports=ve("fs").constants||ve("constants")});var Z2e=_((G$t,X2e)=>{var rw=K2e(),z2e=NM(),zQ=F0(),rvt=Buffer.alloc,V2e=$C().Readable,nw=$C().Writable,nvt=ve("string_decoder").StringDecoder,KQ=nj(),ivt=parseInt("755",8),svt=parseInt("644",8),J2e=rvt(1024),sj=function(){},ij=function(t,e){e&=511,e&&t.push(J2e.slice(0,512-e))};function ovt(t){switch(t&rw.S_IFMT){case rw.S_IFBLK:return"block-device";case rw.S_IFCHR:return"character-device";case rw.S_IFDIR:return"directory";case rw.S_IFIFO:return"fifo";case rw.S_IFLNK:return"symlink"}return"file"}var VQ=function(t){nw.call(this),this.written=0,this._to=t,this._destroyed=!1};zQ(VQ,nw);VQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var JQ=function(){nw.call(this),this.linkname="",this._decoder=new nvt("utf-8"),this._destroyed=!1};zQ(JQ,nw);JQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};JQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){nw.call(this),this._destroyed=!1};zQ(xv,nw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var CA=function(t){if(!(this instanceof CA))return new CA(t);V2e.call(this,t),this._drain=sj,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};zQ(CA,V2e);CA.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=sj);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=ovt(t.mode)),t.mode||(t.mode=t.type==="directory"?ivt:svt),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 ij(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new JQ;return z2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new VQ(this);return this._stream=u,z2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));ij(o,t.size),o._finalizing&&o.finalize(),r()}),u}};CA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(J2e),this.push(null))};CA.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())};CA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};CA.prototype._encodePax=function(t){var e=KQ.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(KQ.encode(r)),this.push(e),ij(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};CA.prototype._read=function(t){var e=this._drain;this._drain=sj,e()};X2e.exports=CA});var $2e=_(oj=>{oj.extract=Y2e();oj.pack=Z2e()});var ABe=_((cer,uBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=lBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return fj(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):wvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,lBe(this.__providers).concat(e)),cBe)}};try{let t=ve("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function Evt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function fj(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))Evt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=aBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=aBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function aBe(t,e){let r;return e.__isFiggyPudding?r=fj(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var cBe={has(t,e){return e in t.__specs&&fj(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};uBe.exports=Cvt;function Cvt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),cBe)}return r}function lBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function wvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var hBe=_((uer,BA)=>{"use strict";var Qv=ve("crypto"),Ivt=ABe(),Bvt=ve("stream").Transform,fBe=["sha256","sha384","sha512"],vvt=/^[a-z0-9+/]+(?:=?=?)$/i,Pvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Svt=/^[\x21-\x7E]+$/,ia=Ivt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Lvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),H0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:Pvt);if(!a||o&&!fBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(fBe.some(o=>o===this.algorithm)&&this.digest.match(vvt)&&(this.options||[]).every(o=>o.match(Svt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>H0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:kv(e,r);return IA(`${this.toString(r)} ${o}`,r)}hexDigest(){return IA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=IA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};BA.exports.parse=IA;function IA(t,e){if(e=ia(e),typeof t=="string")return pj(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],pj(kv(r,e),e)}else return pj(kv(t,e),e)}function pj(t,e){return e.single?new H0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new H0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}BA.exports.stringify=kv;function kv(t,e){return e=ia(e),t.algorithm&&t.digest?H0.prototype.toString.call(t,e):typeof t=="string"?kv(IA(t,e),e):vm.prototype.toString.call(t,e)}BA.exports.fromHex=bvt;function bvt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return IA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}BA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=Qv.createHash(n).update(t).digest("base64"),A=new H0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}BA.exports.fromStream=kvt;function kvt(t,e){e=ia(e);let r=e.Promise||Promise,o=hj(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}BA.exports.checkData=Qvt;function Qvt(t,e,r){if(r=ia(r),e=IA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=Qv.createHash(o).update(t).digest("base64"),n=IA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. Wanted: ${r.size} - Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}BA.exports.checkStream=kvt;function kvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=hj(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}BA.exports.integrityStream=hj;function hj(t){t=ia(t);let e=t.integrity&&IA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new wvt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=IA(u.map((v,x)=>`${n[x]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}BA.exports.checkStream=Rvt;function Rvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=hj(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}BA.exports.integrityStream=hj;function hj(t){t=ia(t);let e=t.integrity&&IA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(Qv.createHash),A=0,p=new Bvt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=IA(u.map((v,x)=>`${n[x]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. Wanted: ${t.size} - Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}BA.exports.create=Qvt;function Qvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new H0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new Dm)}}}var Fvt=new Set(kv.getHashes()),pBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Fvt.has(t));function Rvt(t,e){return pBe.indexOf(t.toLowerCase())>=pBe.indexOf(e.toLowerCase())?t:e}});var GBe=_((Air,qBe)=>{var RDt=cN();function TDt(t){return RDt(t)?void 0:t}qBe.exports=TDt});var YBe=_((fir,jBe)=>{var LDt=Hb(),NDt=x8(),ODt=R8(),MDt=jd(),UDt=md(),_Dt=GBe(),HDt=v_(),qDt=b8(),GDt=1,jDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=LDt(e,function(n){return n=MDt(n,t),o||(o=n.length>1),n}),UDt(t,qDt(t),r),o&&(r=NDt(r,GDt|jDt|YDt,_Dt));for(var a=e.length;a--;)ODt(r,e[a]);return r});jBe.exports=WDt});Pt();Ye();Pt();var JBe=ve("child_process"),XBe=$e(rd());qt();var AC=new Map([]);var a2={};zt(a2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>nr,getCli:()=>ehe,getDynamicLibs:()=>$pe,getPluginConfiguration:()=>pC,openWorkspace:()=>fC,pluginCommands:()=>AC,runExit:()=>nk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var nr=class extends it{constructor(e,r){let o=z.relative(e,r),a=z.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();iA();Nl();k1();qt();var TAt=$e(Jn());$a();var $pe=()=>new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",zw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",TAt],["typanion",zo]]);Ye();async function fC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new nr(r.cwd,e);return o}Ye();Pt();iA();Nl();k1();qt();var tPt=$e(Jn());$a();var $8={};zt($8,{AddCommand:()=>Qh,BinCommand:()=>Fh,CacheCleanCommand:()=>Rh,ClipanionCommand:()=>zd,ConfigCommand:()=>Oh,ConfigGetCommand:()=>Th,ConfigSetCommand:()=>Lh,ConfigUnsetCommand:()=>Nh,DedupeCommand:()=>Mh,EntryCommand:()=>mC,ExecCommand:()=>Uh,ExplainCommand:()=>qh,ExplainPeerRequirementsCommand:()=>_h,HelpCommand:()=>Vd,InfoCommand:()=>Gh,LinkCommand:()=>Yh,NodeCommand:()=>Wh,PluginCheckCommand:()=>Kh,PluginImportCommand:()=>Jh,PluginImportSourcesCommand:()=>Xh,PluginListCommand:()=>zh,PluginRemoveCommand:()=>Zh,PluginRuntimeCommand:()=>$h,RebuildCommand:()=>e0,RemoveCommand:()=>t0,RunCommand:()=>r0,RunIndexCommand:()=>Zd,SetResolutionCommand:()=>n0,SetVersionCommand:()=>Hh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>i0,UpCommand:()=>Vf,VersionCommand:()=>Jd,WhyCommand:()=>s0,WorkspaceCommand:()=>l0,WorkspacesListCommand:()=>a0,YarnCommand:()=>jh,dedupeUtils:()=>pk,default:()=>Sgt,suggestUtils:()=>Xc});var Qde=$e(rd());Ye();Ye();Ye();qt();var H0e=$e(f2());$a();var Xc={};zt(Xc,{Modifier:()=>B8,Strategy:()=>uk,Target:()=>p2,WorkspaceModifier:()=>N0e,applyModifier:()=>ept,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>D8,findProjectDescriptors:()=>_0e,getModifier:()=>h2,getSuggestedDescriptors:()=>g2,makeWorkspaceDescriptor:()=>U0e,toWorkspaceModifier:()=>M0e});Ye();Ye();Pt();var I8=$e(Jn()),Zft="workspace:",p2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(p2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),uk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(uk||{});function h2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var $ft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match($ft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ept(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function M0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function U0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${Zft}${M0e(e)}`)}async function _0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await tpt(async o=>{z.isAbsolute(t)||(t=z.relative(r.cwd,z.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await D8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),x=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!x.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(x.name,t)})}async function g2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],x=[],C=async R=>{try{await R()}catch(N){x.push(N)}};for(let R of A){if(v.length>=p)break;switch(R){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:N,locators:U}of(await _0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let V=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;V+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:N,name:`Reuse ${W.prettyDescriptor(e.configuration,N)}`,reason:V})}});break;case"cache":await C(async()=>{for(let N of e.storedDescriptors.values())N.identHash===t.identHash&&v.push({descriptor:N,name:`Reuse ${W.prettyDescriptor(e.configuration,N)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let N=e.tryWorkspaceByIdent(t);if(N===null)return;let U=U0e(N,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,N.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let N=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!N&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let V=await D8(t,E,{project:e,cache:o,workspace:r,modifier:u});V&&v.push({descriptor:V,name:`Use ${W.prettyDescriptor(e.configuration,V)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:x.slice(0,p)}}async function D8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},x=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(x,{},v);if(C.length===0)return null;let R=C[0],{protocol:N,source:U,params:V,selector:te}=W.parseRange(W.convertToManifestRange(R.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),I8.default.valid(te)){let ae=te;if(typeof u<"u")te=u+te;else if(n!==!1){let me=typeof n=="string"?n:A.range;te=O0e(me,{project:r})+te}let fe=W.makeDescriptor(R,W.makeRange({protocol:N,source:U,params:V,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(fe),{},v)).length!==1&&(te=ae)}return W.makeDescriptor(R,W.makeRange({protocol:N,source:U,params:V,selector:te}))}async function tpt(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Nr(e,{configuration:r,check:!1,immutable:!1}))})}var Qh=class extends ut{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:Ks(hl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=h2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let V=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!V)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let ae=rpt(a,V,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(ae.map(async ue=>{let me=await g2(V,{project:o,workspace:a,cache:n,fixed:u,target:ue,modifier:h,strategies:E,maxResults:I});return{request:V,suggestedDescriptors:me,target:ue}}))})).then(U=>U.flat()),x=await fA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:V,suggestedDescriptors:{suggestions:te,rejections:ae}}of v)if(te.filter(ue=>ue.descriptor!==null).length===0){let[ue]=ae;if(typeof ue>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,V)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,V)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ue)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[],N=[];for(let{suggestedDescriptors:{suggestions:U},target:V}of v){let te,ae=U.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ue=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ue?te=fe:(C=!0,{answer:te}=await(0,H0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=a.manifest[V].get(te.identHash);(typeof me>"u"||me.descriptorHash!==te.descriptorHash)&&(a.manifest[V].set(te.identHash,te),this.optional&&(V==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:V==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof me>"u"?R.push([a,V,te,E]):N.push([a,V,me,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,R),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,N),C&&this.context.stdout.write(` -`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};Qh.paths=[["add"]],Qh.usage=nt.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"]]});function rpt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var Fh=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} -`),0}return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Fh.paths=[["bin"]],Fh.usage=nt.Usage({description:"get the path to a binary script",details:` + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}BA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(Qv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new H0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(Qv.getHashes()),pBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Lvt(t,e){return pBe.indexOf(t.toLowerCase())>=pBe.indexOf(e.toLowerCase())?t:e}});var GBe=_((pir,qBe)=>{var LPt=uN();function NPt(t){return LPt(t)?void 0:t}qBe.exports=NPt});var YBe=_((hir,jBe)=>{var OPt=qb(),MPt=x8(),UPt=F8(),_Pt=Gd(),HPt=md(),qPt=GBe(),GPt=v_(),jPt=b8(),YPt=1,WPt=2,KPt=4,zPt=GPt(function(t,e){var r={};if(t==null)return r;var o=!1;e=OPt(e,function(n){return n=_Pt(n,t),o||(o=n.length>1),n}),HPt(t,jPt(t),r),o&&(r=MPt(r,YPt|WPt|KPt,qPt));for(var a=e.length;a--;)UPt(r,e[a]);return r});jBe.exports=zPt});Dt();Ye();Dt();var JBe=ve("child_process"),XBe=Ze(rd());qt();var cC=new Map([]);var l2={};zt(l2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>sr,getCli:()=>ehe,getDynamicLibs:()=>$pe,getPluginConfiguration:()=>AC,openWorkspace:()=>uC,pluginCommands:()=>cC,runExit:()=>ik});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Dt();qt();var sr=class extends it{constructor(e,r){let o=z.relative(e,r),a=z.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Dt();iA();Nl();Q1();qt();var LAt=Ze(Jn());$a();var $pe=()=>new Map([["@yarnpkg/cli",l2],["@yarnpkg/core",a2],["@yarnpkg/fslib",Ww],["@yarnpkg/libzip",k1],["@yarnpkg/parsers",eI],["@yarnpkg/shell",L1],["clipanion",fI],["semver",LAt],["typanion",Ko]]);Ye();async function uC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new sr(r.cwd,e);return o}Ye();Dt();iA();Nl();Q1();qt();var nDt=Ze(Jn());$a();var $8={};zt($8,{AddCommand:()=>Qh,BinCommand:()=>Rh,CacheCleanCommand:()=>Fh,ClipanionCommand:()=>Kd,ConfigCommand:()=>Oh,ConfigGetCommand:()=>Th,ConfigSetCommand:()=>Lh,ConfigUnsetCommand:()=>Nh,DedupeCommand:()=>Mh,EntryCommand:()=>gC,ExecCommand:()=>Uh,ExplainCommand:()=>qh,ExplainPeerRequirementsCommand:()=>_h,HelpCommand:()=>zd,InfoCommand:()=>Gh,LinkCommand:()=>Yh,NodeCommand:()=>Wh,PluginCheckCommand:()=>Kh,PluginImportCommand:()=>Jh,PluginImportSourcesCommand:()=>Xh,PluginListCommand:()=>zh,PluginRemoveCommand:()=>Zh,PluginRuntimeCommand:()=>$h,RebuildCommand:()=>e0,RemoveCommand:()=>t0,RunCommand:()=>r0,RunIndexCommand:()=>Xd,SetResolutionCommand:()=>n0,SetVersionCommand:()=>Hh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>i0,UpCommand:()=>Vf,VersionCommand:()=>Vd,WhyCommand:()=>s0,WorkspaceCommand:()=>l0,WorkspacesListCommand:()=>a0,YarnCommand:()=>jh,dedupeUtils:()=>hk,default:()=>xgt,suggestUtils:()=>Xc});var Qde=Ze(rd());Ye();Ye();Ye();qt();var H0e=Ze(p2());$a();var Xc={};zt(Xc,{Modifier:()=>B8,Strategy:()=>Ak,Target:()=>h2,WorkspaceModifier:()=>N0e,applyModifier:()=>tpt,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>P8,findProjectDescriptors:()=>_0e,getModifier:()=>g2,getSuggestedDescriptors:()=>d2,makeWorkspaceDescriptor:()=>U0e,toWorkspaceModifier:()=>M0e});Ye();Ye();Dt();var I8=Ze(Jn()),$ft="workspace:",h2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(h2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),Ak=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(Ak||{});function g2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var ept=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(ept);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function tpt(t,e){let{protocol:r,source:o,params:a,selector:n}=j.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),j.makeDescriptor(t,j.makeRange({protocol:r,source:o,params:a,selector:n}))}function M0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function U0e(t,e){return j.makeDescriptor(t.anchoredDescriptor,`${$ft}${M0e(e)}`)}async function _0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await rpt(async o=>{z.isAbsolute(t)||(t=z.relative(r.cwd,z.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await P8(j.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=j.convertDescriptorToLocator(E),v=await p.fetch(I,h),x=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!x.name)throw new Error("Target path doesn't have a name");return j.makeDescriptor(x.name,t)})}async function d2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||Lr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${j.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],x=[],C=async F=>{try{await F()}catch(N){x.push(N)}};for(let F of A){if(v.length>=p)break;switch(F){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${j.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:N,locators:U}of(await _0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let V=`(originally used by ${j.prettyLocator(e.configuration,U[0])}`;V+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:N,name:`Reuse ${j.prettyDescriptor(e.configuration,N)}`,reason:V})}});break;case"cache":await C(async()=>{for(let N of e.storedDescriptors.values())N.identHash===t.identHash&&v.push({descriptor:N,name:`Reuse ${j.prettyDescriptor(e.configuration,N)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let N=e.tryWorkspaceByIdent(t);if(N===null)return;let U=U0e(N,u);v.push({descriptor:U,name:`Attach ${j.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${fe.pretty(e.configuration,N.relativeCwd,fe.Type.PATH)})`})});break;case"latest":{let N=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:j.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!N&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:fe.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let V=await P8(t,E,{project:e,cache:o,workspace:r,modifier:u});V&&v.push({descriptor:V,name:`Use ${j.prettyDescriptor(e.configuration,V)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:x.slice(0,p)}}async function P8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(j.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},x=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(x,{},v);if(C.length===0)return null;let F=C[0],{protocol:N,source:U,params:V,selector:te}=j.parseRange(j.convertToManifestRange(F.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),I8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let Ce=typeof n=="string"?n:A.range;te=O0e(Ce,{project:r})+te}let ae=j.makeDescriptor(F,j.makeRange({protocol:N,source:U,params:V,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(ae),{},v)).length!==1&&(te=le)}return j.makeDescriptor(F,j.makeRange({protocol:N,source:U,params:V,selector:te}))}async function rpt(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Nr(e,{configuration:r,check:!1,immutable:!1}))})}var Qh=class extends ut{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:Vs(hl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=g2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let V=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):j.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${fe.pretty(r,`${te[0]}...`,fe.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${fe.pretty(r,"yarn add",fe.Type.CODE)} ${fe.pretty(r,j.makeDescriptor(j.makeIdent(null,"my-package"),`${te[0]}...`),fe.Type.DESCRIPTOR)}`);if(!V)throw new it(`The ${fe.pretty(r,U,fe.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=npt(a,V,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async ce=>{let Ce=await d2(V,{project:o,workspace:a,cache:n,fixed:u,target:ce,modifier:h,strategies:E,maxResults:I});return{request:V,suggestedDescriptors:Ce,target:ce}}))})).then(U=>U.flat()),x=await fA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:V,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(ce=>ce.descriptor!==null).length===0){let[ce]=le;if(typeof ce>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${j.prettyDescriptor(r,V)} can't be resolved to a satisfying range`):U.reportError(27,`${j.prettyDescriptor(r,V)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ce)}});if(x.hasErrors())return x.exitCode();let C=!1,F=[],N=[];for(let{suggestedDescriptors:{suggestions:U},target:V}of v){let te,le=U.filter(de=>de.descriptor!==null),ae=le[0].descriptor,ce=le.every(de=>j.areDescriptorsEqual(de.descriptor,ae));le.length===1||ce?te=ae:(C=!0,{answer:te}=await(0,H0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:de,name:Ie,reason:Ee})=>de?{name:Ie,hint:Ee,descriptor:de}:{name:Ie,hint:Ee,disabled:!0}),onCancel:()=>process.exit(130),result(de){return this.find(de,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let Ce=a.manifest[V].get(te.identHash);(typeof Ce>"u"||Ce.descriptorHash!==te.descriptorHash)&&(a.manifest[V].set(te.identHash,te),this.optional&&(V==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:V==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof Ce>"u"?F.push([a,V,te,E]):N.push([a,V,Ce,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,F),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,N),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};Qh.paths=[["add"]],Qh.usage=nt.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"]]});function npt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${j.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${j.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${j.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${j.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${j.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var Rh=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await An.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${j.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await An.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:j.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${j.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Rh.paths=[["bin"]],Rh.usage=nt.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"]]});Ye();Pt();qt();var Rh=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Nr.find(r);return(await Lt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Rh.paths=[["cache","clean"],["cache","clear"]],Rh.usage=nt.Usage({description:"remove the shared cache files",details:` + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Dt();qt();var Fh=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Nr.find(r);return(await Ft.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Fh.paths=[["cache","clean"],["cache","clear"]],Fh.usage=nt.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"]]});Ye();qt();var G0e=$e(d2()),P8=ve("util"),Th=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=_e.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} -`),h.exitCode();P8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,P8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=Ze(m2()),D8=ve("util"),Th=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=He.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Ft.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();D8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,D8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} `)}return h.exitCode()}};Th.paths=[["config","get"]],Th.usage=nt.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"]]});Ye();qt();var Rge=$e(k8()),Tge=$e(d2()),Lge=$e(Q8()),F8=ve("util"),Lh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ke.updateHomeConfiguration(C):C=>Ke.updateConfiguration(o(),C))(C=>{if(n){let R=(0,Rge.default)(C);return(0,Lge.default)(R,this.name,A),R}else return{...C,[a]:A}});let E=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=_e.convertMapsToIndexableObjects(E),v=n?(0,Tge.default)(I,n):I;return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{F8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,F8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Lh.paths=[["config","set"]],Lh.usage=nt.Usage({description:"change a configuration settings",details:` + `,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"]]});Ye();qt();var Fge=Ze(k8()),Tge=Ze(m2()),Lge=Ze(Q8()),R8=ve("util"),Lh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ke.updateHomeConfiguration(C):C=>Ke.updateConfiguration(o(),C))(C=>{if(n){let F=(0,Fge.default)(C);return(0,Lge.default)(F,this.name,A),F}else return{...C,[a]:A}});let E=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=He.convertMapsToIndexableObjects(E),v=n?(0,Tge.default)(I,n):I;return(await Ft.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Lh.paths=[["config","set"]],Lh.usage=nt.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"`]]});Ye();qt();var Wge=$e(k8()),Kge=$e(Uge()),zge=$e(T8()),Nh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Wge.default)(I):{...I};return(0,zge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Nh.paths=[["config","unset"]],Nh.usage=nt.Usage({description:"unset a configuration setting",details:` + `,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"`]]});Ye();qt();var Wge=Ze(k8()),Kge=Ze(Uge()),zge=Ze(T8()),Nh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Ft.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Wge.default)(I):{...I};return(0,zge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Nh.paths=[["config","unset"]],Nh.usage=nt.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"]]});Ye();Pt();qt();var fk=ve("util"),Oh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?le.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),x=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),R={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(x[0]==="<"?de.Type.CODE:de.Type.PATH,x)}};h[I]={value:de.tuple(de.Type.CODE,I),children:R};let N=(U,V)=>{for(let[te,ae]of V)if(ae instanceof Map){let fe={};U[te]={children:fe},N(fe,ae)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(ae,p))}};C instanceof Map?N(R,C):R.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,fk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` + `,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"]]});Ye();Dt();qt();var pk=ve("util"),Oh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await TE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),x=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),F={Description:{label:"Description",value:fe.tuple(fe.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:fe.tuple(x[0]==="<"?fe.Type.CODE:fe.Type.PATH,x)}};h[I]={value:fe.tuple(fe.Type.CODE,I),children:F};let N=(U,V)=>{for(let[te,le]of V)if(le instanceof Map){let ae={};U[te]={children:ae},N(ae,le)}else U[te]={label:te,value:fe.tuple(fe.Type.NO_HINT,(0,pk.inspect)(le,p))}};C instanceof Map?N(F,C):F.Value={label:"Value",value:fe.tuple(fe.Type.NO_HINT,(0,pk.inspect)(C,p))}}a.length!==1&&(n=void 0),fs.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,pk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` `),this.context.stdout.write(`${p} `)}return u.exitCode()}};Oh.paths=[["config"]],Oh.usage=nt.Usage({description:"display the current configuration",details:` This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();$a();var pk={};zt(pk,{Strategy:()=>m2,acceptedStrategies:()=>M0t,dedupe:()=>L8});Ye();Ye();var Vge=$e(Zo()),m2=(e=>(e.HIGHEST="highest",e))(m2||{}),M0t=new Set(Object.values(m2)),U0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);_e.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(_e.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?_e.mapAndFilter.skip:[p.descriptorHash,_e.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),x=Object.fromEntries(await _e.allSettledSafe(Object.entries(v).map(async([te,ae])=>{let fe=A.get(ae.descriptorHash);if(typeof fe>"u")throw new Error(`Assertion failed: The descriptor (${ae.descriptorHash}) should have been registered`);let ue=await fe.promise;if(!ue)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ue.updatedPackage]})));if(e.length&&!Vge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let R=[...C].map(te=>{let ae=t.originalPackages.get(te);if(typeof ae>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return ae}),N=await r.getSatisfying(p,x,R,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return I;let V=t.originalPackages.get(U.locatorHash);if(typeof V>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return V}).then(async v=>{let x=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:x})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function L8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=U0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),x=Xs.progressViaCounter(v.length);await a.reportProgress(x);let C=0;await Promise.all(v.map(U=>U.then(V=>{if(V===null||V.currentPackage.locatorHash===V.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:ae,updatedPackage:fe}=V;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,ae)} to ${W.prettyLocator(n,fe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(ae),updatedResolution:W.stringifyLocator(fe)}),t.storedResolutions.set(te.descriptorHash,fe.locatorHash)}).finally(()=>x.tick())));let R;switch(C){case 0:R="No packages";break;case 1:R="One package";break;default:R=`${C} packages`}let N=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${R} can be deduped using the ${N} strategy`),C})}var Mh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Ks(m2)});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:Ks(hl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await L8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Mh.paths=[["dedupe"]],Mh.usage=nt.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"]]});Ye();qt();var zd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} -`)}};zd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var mC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=z.resolve(this.context.cwd,le.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Jd=class extends ut{async execute(){this.context.stdout.write(`${rn||""} -`)}};Jd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Uh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Uh.paths=[["exec"]],Uh.usage=nt.Usage({description:"execute a shell script",details:` + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();$a();var hk={};zt(hk,{Strategy:()=>y2,acceptedStrategies:()=>U0t,dedupe:()=>L8});Ye();Ye();var Vge=Ze(Xo()),y2=(e=>(e.HIGHEST="highest",e))(y2||{}),U0t=new Set(Object.values(y2)),_0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);He.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(He.mapAndFilter(t.storedDescriptors.values(),p=>j.isVirtualDescriptor(p)?He.mapAndFilter.skip:[p.descriptorHash,He.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),x=Object.fromEntries(await He.allSettledSafe(Object.entries(v).map(async([te,le])=>{let ae=A.get(le.descriptorHash);if(typeof ae>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let ce=await ae.promise;if(!ce)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ce.updatedPackage]})));if(e.length&&!Vge.default.isMatch(j.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let F=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),N=await r.getSatisfying(p,x,F,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return I;let V=t.originalPackages.get(U.locatorHash);if(typeof V>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return V}).then(async v=>{let x=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:x})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function L8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=_0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),x=Xs.progressViaCounter(v.length);await a.reportProgress(x);let C=0;await Promise.all(v.map(U=>U.then(V=>{if(V===null||V.currentPackage.locatorHash===V.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:ae}=V;a.reportInfo(0,`${j.prettyDescriptor(n,te)} can be deduped from ${j.prettyLocator(n,le)} to ${j.prettyLocator(n,ae)}`),a.reportJson({descriptor:j.stringifyDescriptor(te),currentResolution:j.stringifyLocator(le),updatedResolution:j.stringifyLocator(ae)}),t.storedResolutions.set(te.descriptorHash,ae.locatorHash)}).finally(()=>x.tick())));let F;switch(C){case 0:F="No packages";break;case 1:F="One package";break;default:F=`${C} packages`}let N=fe.pretty(n,e,fe.Type.CODE);return a.reportInfo(0,`${F} can be deduped using the ${N} strategy`),C})}var Mh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(y2)});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:Vs(hl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Ft.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await L8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Mh.paths=[["dedupe"]],Mh.usage=nt.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"]]});Ye();qt();var Kd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=ls.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Kd.paths=[["--clipanion=definitions"]];var zd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};zd.paths=[["help"],["--help"],["-h"]];Ye();Dt();qt();var gC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!j.tryParseIdent(this.leadingArgument)){let r=z.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Vd=class extends ut{async execute(){this.context.stdout.write(`${nn||""} +`)}};Vd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Uh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await An.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Uh.paths=[["exec"]],Uh.usage=nt.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"']]});Ye();qt();$a();var _h=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:oP(Cy(),[oI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await H0t(this.hash,o,{stdout:this.context.stdout})}};_h.paths=[["explain","peer-requirements"]],_h.usage=nt.Usage({description:"explain a set of peer requirements",details:` - A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();$a();var _h=class extends ut{constructor(){super(...arguments);this.hash=ge.String({required:!1,validator:aD(Ey(),[iI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),typeof this.hash<"u"?await q0t(this.hash,o,{stdout:this.context.stdout}):await G0t(o,{stdout:this.context.stdout})}};_h.paths=[["explain","peer-requirements"]],_h.usage=nt.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 all requirements of the set corresponding to the hash and whether they're satisfied or not. + 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 sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + When used without arguments, this command lists all peer requirements and the corresponding hash that can be used to get detailed information about a given requirement. **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function H0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Lt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();$a();Ye();Ye();Pt();qt();var Xge=$e(Jn()),Hh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(z.contains(p,A))return 0}let o=()=>{if(typeof rn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:rn??"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 y2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(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}[\\/]/)||le.isAbsolute(this.version))a={url:`file://${z.resolve(le.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await q0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Lt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await nn.get(a.url,{configuration:r}))};await N8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Hh.paths=[["set","version"]],Hh.usage=nt.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 function q0t(t,e){let o=(await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function y2(t,e){let r=await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function N8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async ae=>{let fe=z.join(ae,"yarn.cjs");await oe.writeFilePromise(fe,te);let{stdout:ue}=await Ur.execvp(process.execPath,[le.fromPortablePath(fe),"--version"],{cwd:ae,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ue.trim(),!Xge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: -${e}`)})}let A=t.projectCwd??t.startingCwd,p=z.resolve(A,".yarn/releases"),h=z.resolve(p,`yarn-${e}.cjs`),E=z.relative(t.startingCwd,h),I=_e.isTaggedYarnVersion(e),v=t.get("yarnPath"),x=!I,C=x||!!v||!!a;if(a===!1){if(x)throw new Jt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(z.dirname(h)),await oe.mkdirPromise(z.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:z.relative(A,h)})}else await oe.removePromise(z.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let R=await Ot.tryFind(A)||new Ot;R.packageManager=`yarn@${I?e:await y2(t,"stable")}`;let N={};R.exportTo(N);let U=z.join(A,Ot.fileName),V=`${JSON.stringify(N,null,R.indent)} -`;return await oe.changeFilePromise(U,V,{automaticNewlines:!0}),{bundleVersion:e}}function Zge(t){return wr[AP(t)]}var G0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function j0t(t){let r=`https://repo.yarnpkg.com/${_e.isTaggedYarnVersion(rn)?rn:await y2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await nn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(G0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Zge(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 qh=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:aI(Cy(),[oI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Zge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await j0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + `,examples:[["Explain the corresponding peer requirement for a hash","$0 explain peer-requirements p1a4ed"],["List all peer requirements","$0 explain peer-requirements"]]});async function q0t(t,e,r){let o=e.peerRequirementNodes.get(t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);let a=new Set,n=p=>a.has(p.requester.locatorHash)?{value:fe.tuple(fe.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:p.children.size>0?[{value:fe.tuple(fe.Type.NO_HINT,"...")}]:[]}:(a.add(p.requester.locatorHash),{value:fe.tuple(fe.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:Object.fromEntries(Array.from(p.children.values(),h=>[j.stringifyLocator(h.requester),n(h)]))}),u=e.peerWarnings.find(p=>p.hash===t);return(await Ft.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async p=>{let h=fe.mark(e.configuration),E=u?h.Cross:h.Check;if(p.reportInfo(0,`Package ${fe.pretty(e.configuration,o.subject,fe.Type.LOCATOR)} is requested to provide ${fe.pretty(e.configuration,o.ident,fe.Type.IDENT)} by its descendants`),p.reportSeparator(),p.reportInfo(0,fe.pretty(e.configuration,o.subject,fe.Type.LOCATOR)),fs.emitTree({children:Object.fromEntries(Array.from(o.requests.values(),I=>[j.stringifyLocator(I.requester),n(I)]))},{configuration:e.configuration,stdout:r.stdout,json:!1}),p.reportSeparator(),o.provided.range==="missing:"){let I=u?"":" , but all peer requests are optional";p.reportInfo(0,`${E} Package ${fe.pretty(e.configuration,o.subject,fe.Type.LOCATOR)} does not provide ${fe.pretty(e.configuration,o.ident,fe.Type.IDENT)}${I}.`)}else{let I=e.storedResolutions.get(o.provided.descriptorHash);if(!I)throw new Error("Assertion failed: Expected the descriptor to be registered");let v=e.storedPackages.get(I);if(!v)throw new Error("Assertion failed: Expected the package to be registered");p.reportInfo(0,`${E} Package ${fe.pretty(e.configuration,o.subject,fe.Type.LOCATOR)} provides ${fe.pretty(e.configuration,o.ident,fe.Type.IDENT)} with version ${j.prettyReference(e.configuration,v.version??"0.0.0")}, ${u?"which does not satisfy all requests.":"which satisfies all requests"}`),u?.type===3&&(u.range?p.reportInfo(0,` The combined requested range is ${fe.pretty(e.configuration,u.range,fe.Type.RANGE)}`):p.reportInfo(0," Unfortunately, the requested ranges have no overlap"))}})).exitCode()}async function G0t(t,e){return(await Ft.start({configuration:t.configuration,stdout:e.stdout,includeFooter:!1,includePrefix:!1},async o=>{let a=fe.mark(t.configuration),n=He.sortMap(t.peerRequirementNodes,[([,u])=>j.stringifyLocator(u.subject),([,u])=>j.stringifyIdent(u.ident)]);for(let[,u]of n.values()){if(!u.root)continue;let A=t.peerWarnings.find(E=>E.hash===u.hash),p=[...j.allPeerRequests(u)],h;if(p.length>2?h=` and ${p.length-1} other dependencies`:p.length===2?h=" and 1 other dependency":h="",u.provided.range!=="missing:"){let E=t.storedResolutions.get(u.provided.descriptorHash);if(!E)throw new Error("Assertion failed: Expected the resolution to have been registered");let I=t.storedPackages.get(E);if(!I)throw new Error("Assertion failed: Expected the provided package to have been registered");let v=`${fe.pretty(t.configuration,u.hash,fe.Type.CODE)} \u2192 ${A?a.Cross:a.Check} ${j.prettyLocator(t.configuration,u.subject)} provides ${j.prettyLocator(t.configuration,I)} to ${j.prettyLocator(t.configuration,p[0].requester)}${h}`;A?o.reportWarning(0,v):o.reportInfo(0,v)}else{let E=`${fe.pretty(t.configuration,u.hash,fe.Type.CODE)} \u2192 ${A?a.Cross:a.Check} ${j.prettyLocator(t.configuration,u.subject)} doesn't provide ${j.prettyIdent(t.configuration,u.ident)} to ${j.prettyLocator(t.configuration,p[0].requester)}${h}`;A?o.reportWarning(0,E):o.reportInfo(0,E)}}})).exitCode()}Ye();qt();$a();Ye();Ye();Dt();qt();var Xge=Ze(Jn()),Hh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(z.contains(p,A))return 0}let o=()=>{if(typeof nn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:nn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await E2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await E2(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}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${z.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(Lr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(Lr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(Lr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await j0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Ft.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${fe.pretty(r,a.url,fe.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${fe.pretty(r,a.url,fe.Type.URL)}`),await sn.get(a.url,{configuration:r}))};await N8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Hh.paths=[["set","version"]],Hh.usage=nt.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 function j0t(t,e){let o=(await sn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>Lr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${fe.pretty(t,e,fe.Type.RANGE)}.`);return o[0]}async function E2(t,e){let r=await sn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${fe.pretty(t,e,fe.Type.RANGE)} not found`);return r.latest[e]}async function N8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let ae=z.join(le,"yarn.cjs");await oe.writeFilePromise(ae,te);let{stdout:ce}=await Ur.execvp(process.execPath,[ue.fromPortablePath(ae),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ce.trim(),!Xge.default.valid(e))throw new Error(`Invalid semver version. ${fe.pretty(t,"yarn --version",fe.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=z.resolve(A,".yarn/releases"),h=z.resolve(p,`yarn-${e}.cjs`),E=z.relative(t.startingCwd,h),I=He.isTaggedYarnVersion(e),v=t.get("yarnPath"),x=!I,C=x||!!v||!!a;if(a===!1){if(x)throw new Jt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${fe.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${fe.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${fe.pretty(t,E,"magenta")}`),await oe.removePromise(z.dirname(h)),await oe.mkdirPromise(z.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:z.relative(A,h)})}else await oe.removePromise(z.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let F=await Ot.tryFind(A)||new Ot;F.packageManager=`yarn@${I?e:await E2(t,"stable")}`;let N={};F.exportTo(N);let U=z.join(A,Ot.fileName),V=`${JSON.stringify(N,null,F.indent)} +`;return await oe.changeFilePromise(U,V,{automaticNewlines:!0}),{bundleVersion:e}}function Zge(t){return wr[fD(t)]}var Y0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function W0t(t){let r=`https://repo.yarnpkg.com/${He.isTaggedYarnVersion(nn)?nn:await E2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await sn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(Y0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Zge(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 qh=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:sI(Ey(),[iI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Zge(this.code),a=fe.pretty(r,o,fe.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await W0t(r)).get(this.code),p=typeof A<"u"?fe.jsonOrPretty(this.json,r,fe.tuple(fe.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. You can help us by editing this page on GitHub \u{1F642}: -${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +${fe.jsonOrPretty(this.json,r,fe.tuple(fe.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} `;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} `):this.context.stdout.write(`${n} ${p} -`)}else{let o={children:_e.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?_e.mapAndFilter.skip:{label:Ku(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};qh.paths=[["explain"]],qh.usage=nt.Usage({description:"explain an error code",details:` +`)}else{let o={children:He.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?He.mapAndFilter.skip:{label:Ku(Number(a)),value:fe.tuple(fe.Type.CODE,n)})};fs.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};qh.paths=[["explain"]],qh.usage=nt.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"]]});Ye();Pt();qt();var $ge=$e(Zo()),Gh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a&&!this.all)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(ae,{recursive:fe})=>{let ue=ae.anchoredLocator.locatorHash,me=new Map,he=[ue];for(;he.length>0;){let Be=he.shift();if(me.has(Be))continue;let we=o.storedPackages.get(Be);if(typeof we>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,we),W.isVirtualLocator(we)&&he.push(W.devirtualizeLocator(we).locatorHash),!(!fe&&Be!==ue))for(let g of we.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");he.push(Ee)}}return me.values()},p=({recursive:ae})=>{let fe=new Map;for(let ue of o.workspaces)for(let me of A(ue,{recursive:ae}))fe.set(me.locatorHash,me);return fe.values()},h=({all:ae,recursive:fe})=>ae&&fe?o.storedPackages.values():ae?p({recursive:fe}):A(a,{recursive:fe}),E=({all:ae,recursive:fe})=>{let ue=h({all:ae,recursive:fe}),me=this.patterns.map(we=>{let g=W.parseLocator(we),Ee=$ge.default.makeRe(W.stringifyIdent(g)),Pe=W.isVirtualLocator(g),ce=Pe?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),Fe=Ie?W.devirtualizeLocator(ne):ne;return!(Pe&&Ie&&g.reference!==ne.reference||ce.reference!==Fe.reference)}}),he=_e.sortMap([...ue],we=>W.stringifyLocator(we));return{selection:he.filter(we=>me.length===0||me.some(g=>g(we))),sortedLookup:he}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let x=new Map;if(this.dependents)for(let ae of v)for(let fe of ae.dependencies.values()){let ue=o.storedResolutions.get(fe.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: Expected the resolution to be registered");_e.getArrayWithDefault(x,ue).push(ae)}let C=new Map;for(let ae of v){if(!W.isVirtualLocator(ae))continue;let fe=W.devirtualizeLocator(ae);_e.getArrayWithDefault(C,fe.locatorHash).push(ae)}let R={},N={children:R},U=r.makeFetcher(),V={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(ae,fe,ue)=>{if(!fe.has("manifest"))return;let me=await U.fetch(ae,V),he;try{he=await Ot.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}ue("Manifest",{License:de.tuple(de.Type.NO_HINT,he.license),Homepage:de.tuple(de.Type.URL,he.raw.homepage??null)})},async(ae,fe,ue)=>{if(!fe.has("cache"))return;let me=o.storedChecksums.get(ae.locatorHash)??null,he=n.getLocatorPath(ae,me),Be;if(he!==null)try{Be=await oe.statPromise(he)}catch{}let we=typeof Be<"u"?[Be.size,de.Type.SIZE]:void 0;ue("Cache",{Checksum:de.tuple(de.Type.NO_HINT,me),Path:de.tuple(de.Type.PATH,he),Size:we})}];for(let ae of I){let fe=W.isVirtualLocator(ae);if(!this.virtuals&&fe)continue;let ue={},me={value:[ae,de.Type.LOCATOR],children:ue};if(R[W.stringifyLocator(ae)]=me,this.nameOnly){delete me.children;continue}let he=C.get(ae.locatorHash);typeof he<"u"&&(ue.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,he.length)}),ue.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,ae.version)};let Be=(g,Ee)=>{let Pe={};if(ue[g]=Pe,Array.isArray(Ee))Pe.children=Ee.map(ce=>({value:ce}));else{let ce={};Pe.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!fe){for(let g of te)await g(ae,u,Be);await r.triggerHook(g=>g.fetchPackageInfo,ae,u,Be)}ae.bin.size>0&&!fe&&Be("Exported Binaries",[...ae.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let we=x.get(ae.locatorHash);typeof we<"u"&&we.length>0&&Be("Dependents",we.map(g=>de.tuple(de.Type.LOCATOR,g))),ae.dependencies.size>0&&!fe&&Be("Dependencies",[...ae.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),Pe=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:Pe})})),ae.peerDependencies.size>0&&fe&&Be("Peer dependencies",[...ae.peerDependencies.values()].map(g=>{let Ee=ae.dependencies.get(g.identHash),Pe=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=Pe!==null?o.storedPackages.get(Pe)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Gh.paths=[["info"]],Gh.usage=nt.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"]]});Ye();Pt();Nl();var hk=$e(rd());qt();var O8=$e(Jn());$a();var Y0t=[{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"}],jh=class extends ut{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:Ks(hl)});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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({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:!hk.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:!hk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!hk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let R=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U=!1;await z0t(r,u)&&(N.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await K0t(r,u)&&(N.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&N.reportSeparator()});if(R.hasErrors())return R.exitCode()}if(r.projectCwd!==null){let R=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),N.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),N.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),N.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let U=await nn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let V=null;if(rn!==null){let ae=O8.default.prerelease(rn)?"canary":"stable",fe=U.latest[ae];O8.default.gt(fe,rn)&&(V=[ae,fe])}if(V)Ke.telemetry.commitTips(),N.reportInfo(88,`${de.applyStyle(r,`A new ${V[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,V[1])}!`),N.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${V[1]}`,de.Type.CODE)}`),N.reportSeparator();else{let te=Ke.telemetry.selectTip(U.tips);te&&(N.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&N.reportInfo(89,`Learn more at ${te.url}`),N.reportSeparator())}}}});if(R.hasErrors())return R.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let R=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U={};for(let V of Y0t)V.selector(E)&&typeof r.sources.get(V.name)>"u"&&(r.use("",{[V.name]:V.value},p.cwd,{overwrite:!0}),U[V.name]=V.value);Object.keys(U).length>0&&(await Ke.updateConfiguration(p.cwd,U),N.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),N.reportSeparator())});if(R.hasErrors())return R.exitCode()}let I=await Nr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new nr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async R=>{R.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),R.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),R.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let x=this.checkResolutions??v;return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async R=>{await p.install({cache:I,report:R,immutable:u,checkResolutions:x,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.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"]]});var W0t="<<<<<<<";async function K0t(t,e){if(!t.projectCwd)return!1;let r=z.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(W0t))return!1;if(e)throw new Jt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new Jt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new Jt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new Jt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=z.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=z.resolve(t.projectCwd,A.path),h=v1.has(A.spec)&&z.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var Yh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=z.resolve(this.context.cwd,le.toPortablePath(p)),E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new nr(I.cwd,h);if(this.all){let x=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),x=!0);if(!x)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?z.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Yh.paths=[["link"]],Yh.usage=nt.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"]]});qt();var Wh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Wh.paths=[["node"]],Wh.usage=nt.Usage({description:"run node with the hook already setup",details:` + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Dt();qt();var $ge=Ze(Xo()),Gh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a&&!this.all)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:ae})=>{let ce=le.anchoredLocator.locatorHash,Ce=new Map,de=[ce];for(;de.length>0;){let Ie=de.shift();if(Ce.has(Ie))continue;let Ee=o.storedPackages.get(Ie);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the package to be registered");if(Ce.set(Ie,Ee),j.isVirtualLocator(Ee)&&de.push(j.devirtualizeLocator(Ee).locatorHash),!(!ae&&Ie!==ce))for(let g of Ee.dependencies.values()){let me=o.storedResolutions.get(g.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: Expected the resolution to be registered");de.push(me)}}return Ce.values()},p=({recursive:le})=>{let ae=new Map;for(let ce of o.workspaces)for(let Ce of A(ce,{recursive:le}))ae.set(Ce.locatorHash,Ce);return ae.values()},h=({all:le,recursive:ae})=>le&&ae?o.storedPackages.values():le?p({recursive:ae}):A(a,{recursive:ae}),E=({all:le,recursive:ae})=>{let ce=h({all:le,recursive:ae}),Ce=this.patterns.map(Ee=>{let g=j.parseLocator(Ee),me=$ge.default.makeRe(j.stringifyIdent(g)),De=j.isVirtualLocator(g),he=De?j.devirtualizeLocator(g):g;return ne=>{let ee=j.stringifyIdent(ne);if(!me.test(ee))return!1;if(g.reference==="unknown")return!0;let Be=j.isVirtualLocator(ne),Te=Be?j.devirtualizeLocator(ne):ne;return!(De&&Be&&g.reference!==ne.reference||he.reference!==Te.reference)}}),de=He.sortMap([...ce],Ee=>j.stringifyLocator(Ee));return{selection:de.filter(Ee=>Ce.length===0||Ce.some(g=>g(Ee))),sortedLookup:de}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let x=new Map;if(this.dependents)for(let le of v)for(let ae of le.dependencies.values()){let ce=o.storedResolutions.get(ae.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: Expected the resolution to be registered");He.getArrayWithDefault(x,ce).push(le)}let C=new Map;for(let le of v){if(!j.isVirtualLocator(le))continue;let ae=j.devirtualizeLocator(le);He.getArrayWithDefault(C,ae.locatorHash).push(le)}let F={},N={children:F},U=r.makeFetcher(),V={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,ae,ce)=>{if(!ae.has("manifest"))return;let Ce=await U.fetch(le,V),de;try{de=await Ot.find(Ce.prefixPath,{baseFs:Ce.packageFs})}finally{Ce.releaseFs?.()}ce("Manifest",{License:fe.tuple(fe.Type.NO_HINT,de.license),Homepage:fe.tuple(fe.Type.URL,de.raw.homepage??null)})},async(le,ae,ce)=>{if(!ae.has("cache"))return;let Ce=o.storedChecksums.get(le.locatorHash)??null,de=n.getLocatorPath(le,Ce),Ie;if(de!==null)try{Ie=await oe.statPromise(de)}catch{}let Ee=typeof Ie<"u"?[Ie.size,fe.Type.SIZE]:void 0;ce("Cache",{Checksum:fe.tuple(fe.Type.NO_HINT,Ce),Path:fe.tuple(fe.Type.PATH,de),Size:Ee})}];for(let le of I){let ae=j.isVirtualLocator(le);if(!this.virtuals&&ae)continue;let ce={},Ce={value:[le,fe.Type.LOCATOR],children:ce};if(F[j.stringifyLocator(le)]=Ce,this.nameOnly){delete Ce.children;continue}let de=C.get(le.locatorHash);typeof de<"u"&&(ce.Instances={label:"Instances",value:fe.tuple(fe.Type.NUMBER,de.length)}),ce.Version={label:"Version",value:fe.tuple(fe.Type.NO_HINT,le.version)};let Ie=(g,me)=>{let De={};if(ce[g]=De,Array.isArray(me))De.children=me.map(he=>({value:he}));else{let he={};De.children=he;for(let[ne,ee]of Object.entries(me))typeof ee>"u"||(he[ne]={label:ne,value:ee})}};if(!ae){for(let g of te)await g(le,u,Ie);await r.triggerHook(g=>g.fetchPackageInfo,le,u,Ie)}le.bin.size>0&&!ae&&Ie("Exported Binaries",[...le.bin.keys()].map(g=>fe.tuple(fe.Type.PATH,g)));let Ee=x.get(le.locatorHash);typeof Ee<"u"&&Ee.length>0&&Ie("Dependents",Ee.map(g=>fe.tuple(fe.Type.LOCATOR,g))),le.dependencies.size>0&&!ae&&Ie("Dependencies",[...le.dependencies.values()].map(g=>{let me=o.storedResolutions.get(g.descriptorHash),De=typeof me<"u"?o.storedPackages.get(me)??null:null;return fe.tuple(fe.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&ae&&Ie("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let me=le.dependencies.get(g.identHash),De=typeof me<"u"?o.storedResolutions.get(me.descriptorHash)??null:null,he=De!==null?o.storedPackages.get(De)??null:null;return fe.tuple(fe.Type.RESOLUTION,{descriptor:g,locator:he})}))}fs.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Gh.paths=[["info"]],Gh.usage=nt.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"]]});Ye();Dt();Nl();var gk=Ze(rd());qt();var O8=Ze(Jn());$a();var K0t=[{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"}],jh=class extends ut{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:Vs(hl)});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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await TE({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:!gk.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:!gk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!gk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${fe.pretty(r,"--immutable",fe.Type.CODE)} and ${fe.pretty(r,"--immutable-cache",fe.Type.CODE)} cannot be used with ${fe.pretty(r,"--mode=update-lockfile",fe.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let F=await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U=!1;await J0t(r,u)&&(N.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await V0t(r,u)&&(N.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&N.reportSeparator()});if(F.hasErrors())return F.exitCode()}if(r.projectCwd!==null){let F=await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),N.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),N.reportInfo(65,`Run ${fe.pretty(r,"yarn config set --home enableTelemetry 0",fe.Type.CODE)} to disable`),N.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let U=await sn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let V=null;if(nn!==null){let le=O8.default.prerelease(nn)?"canary":"stable",ae=U.latest[le];O8.default.gt(ae,nn)&&(V=[le,ae])}if(V)Ke.telemetry.commitTips(),N.reportInfo(88,`${fe.applyStyle(r,`A new ${V[0]} version of Yarn is available:`,fe.Style.BOLD)} ${j.prettyReference(r,V[1])}!`),N.reportInfo(88,`Upgrade now by running ${fe.pretty(r,`yarn set version ${V[1]}`,fe.Type.CODE)}`),N.reportSeparator();else{let te=Ke.telemetry.selectTip(U.tips);te&&(N.reportInfo(89,fe.pretty(r,te.message,fe.Type.MARKDOWN_INLINE)),te.url&&N.reportInfo(89,`Learn more at ${te.url}`),N.reportSeparator())}}}});if(F.hasErrors())return F.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let F=await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U={};for(let V of K0t)V.selector(E)&&typeof r.sources.get(V.name)>"u"&&(r.use("",{[V.name]:V.value},p.cwd,{overwrite:!0}),U[V.name]=V.value);Object.keys(U).length>0&&(await Ke.updateConfiguration(p.cwd,U),N.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),N.reportSeparator())});if(F.hasErrors())return F.exitCode()}let I=await Nr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new sr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async F=>{F.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),F.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${fe.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),F.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let x=this.checkResolutions??v;return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async F=>{await p.install({cache:I,report:F,immutable:u,checkResolutions:x,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.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"]]});var z0t="<<<<<<<";async function V0t(t,e){if(!t.projectCwd)return!1;let r=z.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new Jt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new Jt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new Jt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new Jt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=j.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=j.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function J0t(t,e){if(!t.projectCwd)return!1;let r=[],o=z.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=z.resolve(t.projectCwd,A.path),h=P1.has(A.spec)&&z.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Dt();qt();var Yh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=z.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new sr(I.cwd,h);if(this.all){let x=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),x=!0);if(!x)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=j.stringifyIdent(p.anchoredLocator),E=this.relative?z.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Yh.paths=[["link"]],Yh.usage=nt.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"]]});qt();var Wh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Wh.paths=[["node"]],Wh.usage=nt.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"]]});Ye();qt();var Kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await nn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Kh.paths=[["plugin","check"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await sn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=fe.pretty(r,A.path,fe.Type.PATH),I=fe.pretty(r,A.spec,fe.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Kh.paths=[["plugin","check"]],Kh.usage=nt.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"]]});Ye();Ye();Pt();qt();var ide=ve("os");Ye();Pt();qt();var ede=ve("os");Ye();Nl();qt();var V0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Xd(t,e){let r=await nn.get(V0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var zh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Xd(r,rn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};zh.paths=[["plugin","list"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var J0t=/^[0-9]+$/,X0t=process.platform==="win32";function tde(t){return J0t.test(t)?`pull/${t}/head`:t}var Z0t=({repository:t,branch:e},r)=>[["git","init",le.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",tde(e)],["git","reset","--hard","FETCH_HEAD"]],$0t=({branch:t})=>[["git","fetch","origin","--depth=1",tde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],egt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",z.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[X0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",le.fromPortablePath(r),"|"]],Vh=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?z.resolve(this.context.cwd,le.toPortablePath(this.installPath)):z.resolve(le.toPortablePath((0,ede.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=z.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await E2(egt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await N8(r,null,async()=>h,{report:u});this.skipPlugins||await tgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Dt();qt();var ide=ve("os");Ye();Dt();qt();var ede=ve("os");Ye();Nl();qt();var X0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await sn.get(X0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||Lr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var zh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,nn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};zh.paths=[["plugin","list"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var Z0t=/^[0-9]+$/,$0t=process.platform==="win32";function tde(t){return Z0t.test(t)?`pull/${t}/head`:t}var egt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",tde(e)],["git","reset","--hard","FETCH_HEAD"]],tgt=({branch:t})=>[["git","fetch","origin","--depth=1",tde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],rgt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",z.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[$0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?z.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):z.resolve(ue.toPortablePath((0,ede.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Ft.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=z.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await C2(rgt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await N8(r,null,async()=>h,{report:u});this.skipPlugins||await ngt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.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 function E2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(z.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await E2($0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await E2(Z0t(t,o),{configuration:e,context:t.context,target:o}))}async function tgt(t,e,{project:r,report:o,target:a}){let n=await Xd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var rde=$e(Jn()),nde=ve("vm");var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||le.isAbsolute(this.name)){let p=z.resolve(this.context.cwd,le.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=z.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new Jt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!rde.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=W.stringifyIdent(h),I=await Xd(r,rn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new Jt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):rn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${rn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await nn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Jh.paths=[["plugin","import"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function C2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${fe.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(z.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await C2(tgt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await C2(egt(t,o),{configuration:e,context:t.context,target:o}))}async function ngt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();Dt();qt();var rde=Ze(Jn()),nde=ve("vm");var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Ft.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=z.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${fe.pretty(r,p,fe.Type.PATH)}`),u=z.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new Jt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=j.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!rde.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=j.stringifyIdent(h),I=await Jd(r,nn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${j.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${j.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${fe.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",fe.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${fe.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",fe.Type.URL)}).`,new Jt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):nn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${nn}/`))}a.reportInfo(0,`Downloading ${fe.pretty(r,p,"green")}`),A=await sn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Jh.paths=[["plugin","import"]],Jh.usage=nt.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: @@ -470,23 +470,23 @@ ${p} 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 function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,nde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=z.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(z.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var rgt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Xh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?z.resolve(this.context.cwd,le.toPortablePath(this.installPath)):z.resolve(le.toPortablePath((0,ide.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Xd(r,rn);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 M8(this,{configuration:r,report:n,target:o}),await U8(E,this,{project:u,report:n,target:o})})).exitCode()}};Xh.paths=[["plugin","import","from","sources"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + `,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 function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,nde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=z.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${fe.pretty(n,h,"magenta")}`),await oe.mkdirPromise(z.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var igt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Xh=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?z.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):z.resolve(ue.toPortablePath((0,ide.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Ft.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=j.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=j.stringifyIdent(A),h=await Jd(r,nn);if(!Object.hasOwn(h,p))throw new Jt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await M8(this,{configuration:r,report:n,target:o}),await U8(E,this,{project:u,report:n,target:o})})).exitCode()}};Xh.paths=[["plugin","import","from","sources"]],Xh.usage=nt.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 function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await E2(rgt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=z.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();Pt();qt();var Zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=z.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};Zh.paths=[["plugin","remove"]],Zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + `,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 function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await C2(igt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=z.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();Dt();qt();var Zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Ft.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=j.parseIdent(u);if(!r.plugins.has(u))throw new it(`${j.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=z.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${fe.pretty(r,p,fe.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};Zh.paths=[["plugin","remove"]],Zh.usage=nt.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"]]});Ye();qt();var $h=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};$h.paths=[["plugin","runtime"]],$h.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + `,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"]]});Ye();qt();var $h=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};$h.paths=[["plugin","runtime"]],$h.usage=nt.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"]]});Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};e0.paths=[["rebuild"]],e0.usage=nt.Usage({description:"rebuild the project's native packages",details:` + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(j.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};e0.paths=[["rebuild"]],e0.usage=nt.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"]]});Ye();Ye();Ye();qt();var H8=$e(Zo());$a();var t0=class extends ut{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:Ks(hl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let R=!1,N=W.parseIdent(C);for(let U of u){let V=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(V,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,R=!0;for(let te of A){let ae=U.manifest.getForScope(te),fe=[...ae.values()].map(ue=>W.stringifyIdent(ue));for(let ue of(0,H8.default)(fe,W.stringifyIdent(N))){let{identHash:me}=W.parseIdent(ue),he=ae.get(me);if(typeof he>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(me),E.push([U,te,he]),h=!0,R=!0}}}R||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",x=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${x} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};t0.paths=[["remove"]],t0.usage=nt.Usage({description:"remove dependencies from the project",details:` + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var H8=Ze(Xo());$a();var t0=class extends ut{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:Vs(hl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let F=!1,N=j.parseIdent(C);for(let U of u){let V=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(V,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,F=!0;for(let te of A){let le=U.manifest.getForScope(te),ae=[...le.values()].map(ce=>j.stringifyIdent(ce));for(let ce of(0,H8.default)(ae,j.stringifyIdent(N))){let{identHash:Ce}=j.parseIdent(ce),de=le.get(Ce);if(typeof de>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(Ce),E.push([U,te,de]),h=!0,F=!0}}}F||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",x=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${fe.prettyList(r,p,fe.Type.CODE)} ${v} match any packages referenced by ${x} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};t0.paths=[["remove"]],t0.usage=nt.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: @@ -496,7 +496,7 @@ ${p} - \`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}'"]]});Ye();Ye();qt();var sde=ve("util"),Zd=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);return(await Lt.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=_e.sortMap(A.keys(),I=>I),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((I,v)=>Math.max(I,v.length),0);for(let[I,v]of A.entries())u.reportInfo(null,`${I.padEnd(E," ")} ${(0,sde.inspect)(v,h)}`),u.reportJson({name:I,script:v})})).exitCode()}};Zd.paths=[["run"]];Ye();Ye();qt();var r0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of AC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};r0.paths=[["run"]],r0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + `,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}'"]]});Ye();Ye();qt();var sde=ve("util"),Xd=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);return(await Ft.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=He.sortMap(A.keys(),I=>I),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((I,v)=>Math.max(I,v.length),0);for(let[I,v]of A.entries())u.reportInfo(null,`${I.padEnd(E," ")} ${(0,sde.inspect)(v,h)}`),u.reportJson({name:I,script:v})})).exitCode()}};Xd.paths=[["run"]];Ye();Ye();qt();var r0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await An.hasPackageScript(u,this.scriptName,{project:o}))return await An.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await An.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await An.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await An.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${j.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${j.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of cC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};r0.paths=[["run"]],r0.usage=nt.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. @@ -506,32 +506,32 @@ ${p} - 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"]]});Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new nr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};n0.paths=[["set","resolution"]],n0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var ode=$e(Zo()),i0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=z.resolve(this.context.cwd,le.toPortablePath(p));if(_e.isPathLike(p)){let E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new nr(I.cwd,h);if(this.all){for(let x of I.workspaces)x.manifest.name&&A.add(W.stringifyIdent(x.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,ode.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};i0.paths=[["unlink"]],i0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + `,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"]]});Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new sr(o.cwd,this.context.cwd);let u=j.parseDescriptor(this.descriptor,!0),A=j.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};n0.paths=[["set","resolution"]],n0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Dt();qt();var ode=Ze(Xo()),i0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=z.resolve(this.context.cwd,ue.toPortablePath(p));if(He.isPathLike(p)){let E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new sr(I.cwd,h);if(this.all){for(let x of I.workspaces)x.manifest.name&&A.add(j.stringifyIdent(x.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(j.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,ode.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};i0.paths=[["unlink"]],i0.usage=nt.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}'"]]});Ye();Ye();Ye();qt();var ade=$e(f2()),q8=$e(Zo());$a();var Vf=class extends ut{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:Ks(hl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,q8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=h2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let N of this.patterns){let U=!1,V=W.parseDescriptor(N),te=W.stringifyIdent(V);for(let ae of o.workspaces)for(let fe of["dependencies","devDependencies"]){let me=[...ae.manifest.getForScope(fe).values()].map(Be=>W.stringifyIdent(Be)),he=te==="*"?me:(0,q8.default)(me,te);for(let Be of he){let we=W.parseIdent(Be),g=ae.manifest[fe].get(we.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(we,V.range);E.push(Promise.resolve().then(async()=>[ae,fe,g,await g2(Ee,{project:o,workspace:ae,cache:n,target:fe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(N)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),x=await fA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:V,rejections:te}]of v){let ae=V.filter(fe=>fe.descriptor!==null);if(ae.length===0){let[fe]=te;if(typeof fe>"u")throw new Error("Assertion failed: Expected an error to have been set");let ue=this.cli.error(fe);o.configuration.get("enableNetwork")?N.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + `,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}'"]]});Ye();Ye();Ye();qt();var ade=Ze(p2()),q8=Ze(Xo());$a();var Vf=class extends ut{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:Vs(hl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>j.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(j.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,q8.default)(A,E)){let v=j.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=g2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let N of this.patterns){let U=!1,V=j.parseDescriptor(N),te=j.stringifyIdent(V);for(let le of o.workspaces)for(let ae of["dependencies","devDependencies"]){let Ce=[...le.manifest.getForScope(ae).values()].map(Ie=>j.stringifyIdent(Ie)),de=te==="*"?Ce:(0,q8.default)(Ce,te);for(let Ie of de){let Ee=j.parseIdent(Ie),g=le.manifest[ae].get(Ee.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let me=j.makeDescriptor(Ee,V.range);E.push(Promise.resolve().then(async()=>[le,ae,g,await d2(me,{project:o,workspace:le,cache:n,target:ae,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(N)}if(I.length>1)throw new it(`Patterns ${fe.prettyList(r,I,fe.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${fe.prettyList(r,I,fe.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),x=await fA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:V,rejections:te}]of v){let le=V.filter(ae=>ae.descriptor!==null);if(le.length===0){let[ae]=te;if(typeof ae>"u")throw new Error("Assertion failed: Expected an error to have been set");let ce=this.cli.error(ae);o.configuration.get("enableNetwork")?N.reportError(27,`${j.prettyDescriptor(r,U)} can't be resolved to a satisfying range -${ue}`):N.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) +${ce}`):N.reportError(27,`${j.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) -${ue}`)}else ae.length>1&&!A&&N.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[];for(let[N,U,,{suggestions:V}]of v){let te,ae=V.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ue=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ue?te=fe:(C=!0,{answer:te}=await(0,ade.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,N)} \u276F ${U}?`,choices:V.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=N.manifest[U].get(te.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==te.descriptorHash)N.manifest[U].set(te.identHash,te),R.push([N,U,me,te]);else{let he=r.makeResolver(),Be={project:o,resolver:he},we=r.normalizeDependency(me),g=he.bindDescriptor(we,N.anchoredLocator,Be);o.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,R),C&&this.context.stdout.write(` -`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Vf.paths=[["up"]],Vf.usage=nt.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'"]]}),Vf.schema=[cI("recursive",Yu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var s0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?igt(o,n,{configuration:r,peers:this.peers}):ngt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};s0.paths=[["why"]],s0.usage=nt.Usage({description:"display the reason why a package is needed",details:` +${ce}`)}else le.length>1&&!A&&N.reportError(27,`${j.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(x.hasErrors())return x.exitCode();let C=!1,F=[];for(let[N,U,,{suggestions:V}]of v){let te,le=V.filter(de=>de.descriptor!==null),ae=le[0].descriptor,ce=le.every(de=>j.areDescriptorsEqual(de.descriptor,ae));le.length===1||ce?te=ae:(C=!0,{answer:te}=await(0,ade.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${j.prettyWorkspace(r,N)} \u276F ${U}?`,choices:V.map(({descriptor:de,name:Ie,reason:Ee})=>de?{name:Ie,hint:Ee,descriptor:de}:{name:Ie,hint:Ee,disabled:!0}),onCancel:()=>process.exit(130),result(de){return this.find(de,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let Ce=N.manifest[U].get(te.identHash);if(typeof Ce>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(Ce.descriptorHash!==te.descriptorHash)N.manifest[U].set(te.identHash,te),F.push([N,U,Ce,te]);else{let de=r.makeResolver(),Ie={project:o,resolver:de},Ee=r.normalizeDependency(Ce),g=de.bindDescriptor(Ee,N.anchoredLocator,Ie);o.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,F),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Vf.paths=[["up"]],Vf.usage=nt.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'"]]}),Vf.schema=[aI("recursive",Yu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var s0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=j.parseIdent(this.package).identHash,u=this.recursive?ogt(o,n,{configuration:r,peers:this.peers}):sgt(o,n,{configuration:r,peers:this.peers});fs.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};s0.paths=[["why"]],s0.usage=nt.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"]]});function ngt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let x=W.stringifyLocator(v);p[x]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function igt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let x=!1;v.identHash===e&&(x=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let R=t.storedResolutions.get(C.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let N=t.storedPackages.get(R);if(!N)throw new Error("Assertion failed: The package should have been registered");A(N)&&(x=!0)}return x&&u.add(v.locatorHash),x};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,x,C)=>{if(!u.has(v.locatorHash))return;let R=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),N={},U={value:R,children:N},V=W.stringifyLocator(v);if(x[V]=U,!(C!==null&&t.tryWorkspaceByLocator(v))&&!p.has(v.locatorHash)){p.add(v.locatorHash);for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let ae=t.storedResolutions.get(te.descriptorHash);if(!ae)throw new Error("Assertion failed: The resolution should have been registered");let fe=t.storedPackages.get(ae);if(!fe)throw new Error("Assertion failed: The package should have been registered");I(fe,N,te)}}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var Z8={};zt(Z8,{GitFetcher:()=>w2,GitResolver:()=>I2,default:()=>Dgt,gitUtils:()=>ra});Ye();Pt();var ra={};zt(ra,{TreeishProtocols:()=>C2,clone:()=>X8,fetchBase:()=>xde,fetchChangedFiles:()=>kde,fetchChangedWorkspaces:()=>Bgt,fetchRoot:()=>bde,isGitUrl:()=>CC,lsRemote:()=>Sde,normalizeLocator:()=>Igt,normalizeRepoUrl:()=>yC,resolveUrl:()=>J8,splitRepoUrl:()=>o0,validateRepoUrl:()=>V8});Ye();Pt();qt();var vde=$e(wde()),Dde=$e(mU()),EC=$e(ve("querystring")),K8=$e(Jn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function Ide(t){try{return new URL(t)}catch{return}}function Cgt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Bde(t){return Ide(t)||Ide(Cgt(t))}function yC(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=Bde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Pde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var wgt=[/^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\/(.+)?$/],C2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(C2||{});function CC(t){return t?wgt.some(e=>!!t.match(e)):!1}function o0(t){t=yC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=EC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(C2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(C2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Igt(t){return W.makeLocator(t,yC(t.reference))}function V8(t,{configuration:e}){let r=yC(t,{git:!0});if(!nn.getNetworkSettings(`https://${(0,vde.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 Sde(t,e){let r=V8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Pde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function J8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=o0(t),u=await Sde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return EC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return EC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return EC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,R])=>[K8.default.parse(C.slice(10)),R]).filter(C=>C[0]!==null)),x=K8.default.maxSatisfying([...v.keys()],I);if(x===null)throw new Error(`No matching range ("${E}")`);return EC.default.stringify({...n,commit:v.get(x)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return yC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=o0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=V8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Pde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,le.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function bde(t){let e,r=t;do{if(e=r,await oe.existsPromise(z.join(e,".git")))return e;r=z.dirname(e)}while(r!==e);return null}async function xde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function kde(t,{base:e,project:r}){let o=_e.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>z.resolve(t,le.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>z.resolve(t,le.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!z.relative(r.cwd,h).match(o)):p}async function Bgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[z.resolve(e.cwd,dr.lockfile),z.resolve(e.cwd,e.configuration.get("cacheFolder")),z.resolve(e.cwd,e.configuration.get("installStatePath")),z.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await bde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await xde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await kde(o,{base:a.hash,project:e});return new Set(_e.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?_e.mapAndFilter.skip:r.some(p=>u.startsWith(p))?_e.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new Jt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Dde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var w2=class{supports(e,r){return CC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=o0(e.reference),n=z.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await _e.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var I2=class{supportsDescriptor(e,r){return CC(e.range)}supportsLocator(e,r){return CC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await J8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=o0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=o0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var vgt={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:[w2],resolvers:[I2]};var Dgt=vgt;qt();var a0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let x of Ot.hardDependencies)for(let[C,R]of h.getForScope(x)){let N=o.tryWorkspaceByDescriptor(R);N===null?o.workspacesByIdent.has(C)&&v.add(R):I.add(N)}E={workspaceDependencies:Array.from(I).map(x=>x.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(x=>W.stringifyDescriptor(x))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};a0.paths=[["workspaces","list"]],a0.usage=nt.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 "});Ye();Ye();qt();var l0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function sgt(t,e,{configuration:r,peers:o}){let a=He.sortMap(t.storedPackages.values(),A=>j.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=j.stringifyLocator(A);n[C]={value:[A,fe.Type.LOCATOR],children:p}}let x=j.stringifyLocator(v);p[x]={value:[{descriptor:E,locator:v},fe.Type.DEPENDENT]}}}return u}function ogt(t,e,{configuration:r,peers:o}){let a=He.sortMap(t.workspaces,v=>j.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let x=!1;v.identHash===e&&(x=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let F=t.storedResolutions.get(C.descriptorHash);if(!F)throw new Error("Assertion failed: The resolution should have been registered");let N=t.storedPackages.get(F);if(!N)throw new Error("Assertion failed: The package should have been registered");A(N)&&(x=!0)}return x&&u.add(v.locatorHash),x};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,x,C)=>{if(!u.has(v.locatorHash))return;let F=C!==null?fe.tuple(fe.Type.DEPENDENT,{locator:v,descriptor:C}):fe.tuple(fe.Type.LOCATOR,v),N={},U={value:F,children:N},V=j.stringifyLocator(v);if(x[V]=U,!(C!==null&&t.tryWorkspaceByLocator(v))&&!p.has(v.locatorHash)){p.add(v.locatorHash);for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let ae=t.storedPackages.get(le);if(!ae)throw new Error("Assertion failed: The package should have been registered");I(ae,N,te)}}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var Z8={};zt(Z8,{GitFetcher:()=>I2,GitResolver:()=>B2,default:()=>Sgt,gitUtils:()=>ra});Ye();Dt();var ra={};zt(ra,{TreeishProtocols:()=>w2,clone:()=>X8,fetchBase:()=>xde,fetchChangedFiles:()=>kde,fetchChangedWorkspaces:()=>Pgt,fetchRoot:()=>bde,isGitUrl:()=>yC,lsRemote:()=>Sde,normalizeLocator:()=>vgt,normalizeRepoUrl:()=>dC,resolveUrl:()=>J8,splitRepoUrl:()=>o0,validateRepoUrl:()=>V8});Ye();Dt();qt();var vde=Ze(wde()),Pde=Ze(mU()),mC=Ze(ve("querystring")),K8=Ze(Jn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function Ide(t){try{return new URL(t)}catch{return}}function Igt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Bde(t){return Ide(t)||Ide(Igt(t))}function dC(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=Bde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Dde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Bgt=[/^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\/(.+)?$/],w2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(w2||{});function yC(t){return t?Bgt.some(e=>!!t.match(e)):!1}function o0(t){t=dC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=mC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(w2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(w2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function vgt(t){return j.makeLocator(t,dC(t.reference))}function V8(t,{configuration:e}){let r=dC(t,{git:!0});if(!sn.getNetworkSettings(`https://${(0,vde.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 Sde(t,e){let r=V8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Dde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function J8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=o0(t),u=await Sde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return mC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return mC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return mC.default.stringify({...n,commit:I})}case"semver":{let I=Lr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,F])=>[K8.default.parse(C.slice(10)),F]).filter(C=>C[0]!==null)),x=K8.default.maxSatisfying([...v.keys()],I);if(x===null)throw new Error(`No matching range ("${E}")`);return mC.default.stringify({...n,commit:v.get(x)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return dC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=o0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=V8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Dde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function bde(t){let e,r=t;do{if(e=r,await oe.existsPromise(z.join(e,".git")))return e;r=z.dirname(e)}while(r!==e);return null}async function xde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function kde(t,{base:e,project:r}){let o=He.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>z.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>z.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!z.relative(r.cwd,h).match(o)):p}async function Pgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[z.resolve(e.cwd,dr.lockfile),z.resolve(e.cwd,e.configuration.get("cacheFolder")),z.resolve(e.cwd,e.configuration.get("installStatePath")),z.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await bde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await xde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await kde(o,{base:a.hash,project:e});return new Set(He.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?He.mapAndFilter.skip:r.some(p=>u.startsWith(p))?He.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new Jt(1,`Failed ${t}`,p=>{p.reportError(1,` ${fe.prettyField(o,{label:"Repository URL",value:fe.tuple(fe.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Pde.default)(E)} Error`;p.reportError(1,` ${fe.prettyField(o,{label:v,value:fe.tuple(fe.Type.NO_HINT,I)})}`)}u?.(p)})}}var I2=class{supports(e,r){return yC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:j.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=o0(e.reference),n=z.join(o,"package.tgz");await An.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await He.releaseAfterUseAsync(async()=>await Zi.convertToZip(u,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var B2=class{supportsDescriptor(e,r){return yC(e.range)}supportsLocator(e,r){return yC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await J8(e.range,o.project.configuration);return[j.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=o0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=o0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Dgt={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:[I2],resolvers:[B2]};var Sgt=Dgt;qt();var a0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let x of Ot.hardDependencies)for(let[C,F]of h.getForScope(x)){let N=o.tryWorkspaceByDescriptor(F);N===null?o.workspacesByIdent.has(C)&&v.add(F):I.add(N)}E={workspaceDependencies:Array.from(I).map(x=>x.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(x=>j.stringifyDescriptor(x))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?j.stringifyIdent(h.name):null,...E})}})).exitCode()}};a0.paths=[["workspaces","list"]],a0.usage=nt.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 "});Ye();Ye();qt();var l0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[j.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - ${p.join(` - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};l0.paths=[["workspace"]],l0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var Pgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Qde.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:[Rh,Th,Lh,Nh,n0,Vh,Hh,a0,zd,Vd,mC,Jd,Qh,Fh,Oh,Mh,Uh,_h,qh,Gh,jh,Yh,i0,Wh,Kh,Xh,Jh,Zh,zh,$h,e0,t0,Zd,r0,Vf,s0,l0]},Sgt=Pgt;var iH={};zt(iH,{default:()=>xgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}],["eslint-import-resolver-vite@<2.0.1",{dependencies:{debug:"^4.3.4",resolve:"^1.22.8"}}]];var tH;function Fde(){return typeof tH>"u"&&(tH=ve("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Rde(){return typeof rH>"u"&&(rH=ve("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Tde(){return typeof nH>"u"&&(nH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Lde=new Map([[W.makeIdent(null,"fsevents").identHash,Fde],[W.makeIdent(null,"resolve").identHash,Rde],[W.makeIdent(null,"typescript").identHash,Tde]]),bgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Lde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Lde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},xgt=bgt;var wH={};zt(wH,{ConstraintsCheckCommand:()=>g0,ConstraintsQueryCommand:()=>p0,ConstraintsSourceCommand:()=>h0,default:()=>rdt});Ye();Ye();v2();var IC=class{constructor(e){this.project=e}createEnvironment(){let e=new wC(["cwd","ident"]),r=new wC(["workspace","type","ident"]),o=new wC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(R,N,{caller:U=Vi.getCaller()}={})=>{let V=B2(R),te=_e.getMapWithDefault(a.manifestUpdates,A.cwd),ae=_e.getMapWithDefault(te,V),fe=_e.getSetWithDefault(ae,N);U!==null&&fe.add(U)},v=R=>I(R,void 0,{caller:Vi.getCaller()}),x=R=>{_e.getArrayWithDefault(a.reportedErrors,A.cwd).push(R)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:x});u.set(A,C);for(let R of Ot.allDependencies)for(let N of A.manifest[R].values()){let U=W.stringifyIdent(N),V=()=>{I([R,U],void 0,{caller:Vi.getCaller()})},te=fe=>{I([R,U],fe,{caller:Vi.getCaller()})},ae=null;if(R!=="peerDependencies"&&(R!=="dependencies"||!A.manifest.devDependencies.has(N.identHash))){let fe=A.anchoredPackage.dependencies.get(N.identHash);if(fe){if(typeof fe>"u")throw new Error("Assertion failed: The dependency should have been registered");let ue=this.project.storedResolutions.get(fe.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(ue);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ae=me}}r.insert({workspace:C,ident:U,range:N.range,type:R,resolution:ae,update:te,delete:V,error:x})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var p0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Lt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((x,[C])=>Math.max(x,C.length),0);for(let x=0;xQgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}],["eslint-import-resolver-vite@<2.0.1",{dependencies:{debug:"^4.3.4",resolve:"^1.22.8"}}]];var tH;function Rde(){return typeof tH>"u"&&(tH=ve("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Fde(){return typeof rH>"u"&&(rH=ve("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Tde(){return typeof nH>"u"&&(nH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Lde=new Map([[j.makeIdent(null,"fsevents").identHash,Rde],[j.makeIdent(null,"resolve").identHash,Fde],[j.makeIdent(null,"typescript").identHash,Tde]]),kgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(j.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=j.parseIdent(e.slice(r.length)),a=Lde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Lde.get(t.identHash)>"u"?t:j.makeDescriptor(t,j.makeRange({protocol:"patch:",source:j.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Qgt=kgt;var wH={};zt(wH,{ConstraintsCheckCommand:()=>g0,ConstraintsQueryCommand:()=>p0,ConstraintsSourceCommand:()=>h0,default:()=>idt});Ye();Ye();P2();var CC=class{constructor(e){this.project=e}createEnvironment(){let e=new EC(["cwd","ident"]),r=new EC(["workspace","type","ident"]),o=new EC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[j.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:j.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[j.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=j.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(F,N,{caller:U=Ji.getCaller()}={})=>{let V=v2(F),te=He.getMapWithDefault(a.manifestUpdates,A.cwd),le=He.getMapWithDefault(te,V),ae=He.getSetWithDefault(le,N);U!==null&&ae.add(U)},v=F=>I(F,void 0,{caller:Ji.getCaller()}),x=F=>{He.getArrayWithDefault(a.reportedErrors,A.cwd).push(F)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:x});u.set(A,C);for(let F of Ot.allDependencies)for(let N of A.manifest[F].values()){let U=j.stringifyIdent(N),V=()=>{I([F,U],void 0,{caller:Ji.getCaller()})},te=ae=>{I([F,U],ae,{caller:Ji.getCaller()})},le=null;if(F!=="peerDependencies"&&(F!=="dependencies"||!A.manifest.devDependencies.has(N.identHash))){let ae=A.anchoredPackage.dependencies.get(N.identHash);if(ae){if(typeof ae>"u")throw new Error("Assertion failed: The dependency should have been registered");let ce=this.project.storedResolutions.get(ae.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let Ce=n.get(ce);if(typeof Ce>"u")throw new Error("Assertion failed: The package should have been registered");le=Ce}}r.insert({workspace:C,ident:U,range:N.range,type:F,resolution:le,update:te,delete:V,error:x})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var p0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(k2(),x2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Ft.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((x,[C])=>Math.max(x,C.length),0);for(let x=0;x(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};h0.paths=[["constraints","source"]],h0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();v2();var g0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new IC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),b2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=gk(o,E,{fix:this.fix}),x=[];for(let[C,R]of I){let N=C.manifest.indent;C.manifest=new Ot,C.manifest.indent=N,C.manifest.load(R),x.push(C.persistManifest())}if(await Promise.all(x),!(I.size>0&&h>1)){u=qde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let R of C)R.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Lt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=_e.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};g0.paths=[["constraints"]],g0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + `,examples:[["List all dependencies throughout the workspace","yarn constraints query 'workspace_has_dependency(_, DependencyName, _, _).'"]]});function tdt(t){return typeof t!="string"?`${t}`:t.match(/^[a-zA-Z][a-zA-Z0-9_]+$/)?t:`'${t}'`}function rdt(t,e){let r=t===0,o=t===e-1;return r&&o?"":r?"\u250C ":o?"\u2514 ":"\u2502 "}Ye();qt();var h0=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also print the fact database automatically compiled from the workspace manifests"})}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(k2(),x2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};h0.paths=[["constraints","source"]],h0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();P2();var g0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new CC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(k2(),x2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=dk(o,E,{fix:this.fix}),x=[];for(let[C,F]of I){let N=C.manifest.indent;C.manifest=new Ot,C.manifest.indent=N,C.manifest.load(F),x.push(C.persistManifest())}if(await Promise.all(x),!(I.size>0&&h>1)){u=qde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let F of C)F.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${fe.pretty(r,"yarn constraints --fix",fe.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${fe.pretty(r,"yarn constraints --fix",fe.Type.CODE)}`;await Ft.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=He.sortMap(u.children,h=>h.value[1]),fs.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};g0.paths=[["constraints"]],g0.usage=nt.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"]]});v2();var tdt={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:[p0,h0,g0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new IC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),b2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=gk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},rdt=tdt;var IH={};zt(IH,{CreateCommand:()=>rm,DlxCommand:()=>d0,default:()=>idt});Ye();qt();var rm=class extends ut{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()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};rm.paths=[["create"]];Ye();Ye();Pt();qt();var d0=class extends ut{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()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=z.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(z.join(o,"package.json"),`{} -`),await oe.writeFilePromise(z.join(o,"yarn.lock"),"");let a=z.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Ku(68),level:de.LogLevel.Discard}]},p=n!==null?z.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,N=>{let U=_e.toMerged(N,A);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(V=>{let te=typeof V=="string"?V:V.path,ae=le.isAbsolute(te)?te:le.resolve(le.fromPortablePath(n),te);return typeof V=="string"?ae:{path:ae,spec:V.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` -`);let v=await Ke.find(o,this.context.plugins),{project:x,workspace:C}=await St.find(v,o);if(C===null)throw new nr(x.cwd,o);await x.restoreInstallState();let R=await un.getWorkspaceAccessibleBinaries(C);return R.has(E)===!1&&R.size===1&&typeof this.packages>"u"&&(E=Array.from(R)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:R,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};d0.paths=[["dlx"]],d0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var ndt={commands:[rm,d0]},idt=ndt;var DH={};zt(DH,{ExecFetcher:()=>Q2,ExecResolver:()=>F2,default:()=>adt,execUtils:()=>Ek});Ye();Ye();Pt();var pA="exec:";var Ek={};zt(Ek,{loadGeneratorFile:()=>k2,makeLocator:()=>vH,makeSpec:()=>hme,parseSpec:()=>BH});Ye();Pt();function BH(t){let{params:e,selector:r}=W.parseRange(t),o=le.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function hme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,hme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function k2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var Q2=class{supports(e,r){return!!e.reference.startsWith(pA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:pA});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await k2(e.reference,pA,r);return oe.mktempPromise(async a=>{let n=z.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(z.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(z.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=z.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=z.join(p,"buildfile.log"),E=z.join(e,"generator"),I=z.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:le.fromPortablePath(E),buildDir:le.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});P2();var ndt={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:[p0,h0,g0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new CC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(k2(),x2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=dk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${fe.pretty(t.configuration,u.anchoredLocator,fe.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${fe.pretty(t.configuration,"yarn constraints",fe.Type.CODE)} for more details`)}}},idt=ndt;var IH={};zt(IH,{CreateCommand:()=>tm,DlxCommand:()=>d0,default:()=>odt});Ye();qt();var tm=class extends ut{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()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=j.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?j.makeIdent(a.scope,`create-${a.name}`):j.makeIdent(null,`create-${a.name}`),u=j.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};tm.paths=[["create"]];Ye();Ye();Dt();qt();var d0=class extends ut{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()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=z.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(z.join(o,"package.json"),`{} +`),await oe.writeFilePromise(z.join(o,"yarn.lock"),"");let a=z.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Ku(68),level:fe.LogLevel.Discard}]},p=n!==null?z.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,N=>{let U=He.toMerged(N,A);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(V=>{let te=typeof V=="string"?V:V.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof V=="string"?le:{path:le,spec:V.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=j.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ke.find(o,this.context.plugins),{project:x,workspace:C}=await St.find(v,o);if(C===null)throw new sr(x.cwd,o);await x.restoreInstallState();let F=await An.getWorkspaceAccessibleBinaries(C);return F.has(E)===!1&&F.size===1&&typeof this.packages>"u"&&(E=Array.from(F)[0][0]),await An.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:F,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};d0.paths=[["dlx"]],d0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var sdt={commands:[tm,d0]},odt=sdt;var PH={};zt(PH,{ExecFetcher:()=>R2,ExecResolver:()=>F2,default:()=>cdt,execUtils:()=>Ck});Ye();Ye();Dt();var pA="exec:";var Ck={};zt(Ck,{loadGeneratorFile:()=>Q2,makeLocator:()=>vH,makeSpec:()=>hme,parseSpec:()=>BH});Ye();Dt();function BH(t){let{params:e,selector:r}=j.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?j.parseLocator(e.locator):null,path:o}}function hme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:j.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return j.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return j.makeLocator(t,hme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function Q2(t,e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(t,{protocol:e}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var R2=class{supports(e,r){return!!e.reference.startsWith(pA)}getLocalPath(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:pA});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:j.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await Q2(e.reference,pA,r);return oe.mktempPromise(async a=>{let n=z.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(z.join(u,"build")))throw new Error("The script should have generated a build directory");return await Zi.makeArchiveFromDirectory(z.join(u,"build"),{prefixPath:j.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await An.makeScriptEnv({project:a.project,binFolder:n}),A=z.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=z.join(p,"buildfile.log"),E=z.join(e,"generator"),I=z.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:j.stringifyLocator(r)};await oe.writeFilePromise(A,` // Expose 'Module' as a global variable Object.defineProperty(global, 'Module', { get: () => require('module'), @@ -555,117 +555,117 @@ ${ue}`)}else ae.length>1&&!A&&N.reportError(27,`${W.prettyDescriptor(r,U)} has m }, enumerable: true, }); - `);let x=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;x=x.replace(C," ").trim(),u.NODE_OPTIONS=x;let{stdout:R,stderr:N}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) -`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",le.fromPortablePath(A),le.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:R,stderr:N});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var sdt=2,F2=class{supportsDescriptor(e,r){return!!e.range.startsWith(pA)}supportsLocator(e,r){return!!e.reference.startsWith(pA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await k2(W.makeRange({protocol:pA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),pA,o.fetchOptions),A=wn.makeHash(`${sdt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:pA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var odt={fetchers:[Q2],resolvers:[F2]},adt=odt;var SH={};zt(SH,{FileFetcher:()=>N2,FileResolver:()=>O2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>U2,default:()=>udt,fileUtils:()=>nm});Ye();Pt();var PC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,R2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var nm={};zt(nm,{fetchArchiveFromLocator:()=>L2,makeArchiveFromLocator:()=>Ck,makeBufferFromLocator:()=>PH,makeLocator:()=>SC,makeSpec:()=>gme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=le.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function gme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function SC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,gme({parentLocator:e,path:r,hash:o,protocol:a}))}async function L2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=z.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=z.join(n.prefixPath,o);return await _e.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ck(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=z.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=z.join(A.prefixPath,n);return await _e.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function PH(t,{protocol:e,fetchOptions:r}){return(await Ck(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ck(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var ldt=2,O2=class{supportsDescriptor(e,r){return e.range.match(PC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return PC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await PH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${ldt}`,u).slice(0,6);return[SC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await L2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var U2=class{supportsDescriptor(e,r){return R2.test(e.range)?!!(e.range.startsWith(Ui)||PC.test(e.range)):!1}supportsLocator(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return PC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=SC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await L2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[SC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cdt={fetchers:[M2,N2],resolvers:[U2,O2]},udt=cdt;var kH={};zt(kH,{GithubFetcher:()=>_2,default:()=>fdt,githubUtils:()=>wk});Ye();Pt();var wk={};zt(wk,{invalidGithubUrlMessage:()=>yme,isGithubUrl:()=>bH,parseGithubUrl:()=>xH});var dme=$e(ve("querystring")),mme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function bH(t){return t?mme.some(e=>!!t.match(e)):!1}function xH(t){let e;for(let A of mme)if(e=t.match(A),e)break;if(!e)throw new Error(yme(t));let[,r,o,a,n="master"]=e,{commit:u}=dme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function yme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var _2=class{supports(e,r){return!!bH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.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:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=z.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=xH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var Adt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new _2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},fdt=Adt;var QH={};zt(QH,{TarballHttpFetcher:()=>q2,TarballHttpResolver:()=>G2,default:()=>hdt});Ye();function H2(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 q2=class{supports(e,r){return H2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var G2=class{supportsDescriptor(e,r){return H2(e.range)}supportsLocator(e,r){return H2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[q2],resolvers:[G2]},hdt=pdt;var FH={};zt(FH,{InitCommand:()=>m0,default:()=>ddt});Ye();Ye();Pt();qt();var m0=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=z.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??z.basename(this.context.cwd)),n.packageManager=rn&&_e.isTaggedYarnVersion(rn)?`yarn@${rn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(z.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=z.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} -`,{automaticNewlines:!0});let h=[p],E=z.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} -`),h.push(E)),!o||o.cwd===this.context.cwd){let I=z.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let x=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# 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(fe=>`${fe} -`).join(""),C=z.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,x),h.push(C));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(fe=>`${fe} -`).join(""),U=z.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,N),h.push(U));let V={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};_e.mergeIntoTarget(V,r.get("initEditorConfig"));let te=`root = true -`;for(let[fe,ue]of Object.entries(V)){te+=` -[${fe}] -`;for(let[me,he]of Object.entries(ue)){let Be=me.replace(/[A-Z]/g,we=>`_${we.toLowerCase()}`);te+=`${Be} = ${he} -`}}let ae=z.join(this.context.cwd,".editorconfig");oe.existsSync(ae)||(await oe.writeFilePromise(ae,te),h.push(ae)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(z.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};m0.paths=[["init"]],m0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var gdt={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:[m0]},ddt=gdt;var Tq={};zt(Tq,{SearchCommand:()=>I0,UpgradeInteractiveCommand:()=>v0,default:()=>iIt});Ye();var Cme=$e(ve("os"));function bC({stdout:t}){if(Cme.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")}qt();var Fye=$e(JH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},pyt=(0,Fye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await pyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var qB=["regular","dev","peer"],I0=class extends ut{async execute(){bC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:r}=await Promise.resolve().then(()=>(pQ(),fQ)),{useKeypress:o}=await Promise.resolve().then(()=>(UB(),Kwe)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{default:u}=await Promise.resolve().then(()=>$e(nIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(sc())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),x=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),R=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:he,active:Be})=>{let[we,g]=a(he.name,null);o({active:Be},(ce,ne)=>{if(ne.name!=="space")return;if(!we){g(qB[0]);return}let ee=qB.indexOf(we)+1;ee===qB.length?g(null):g(qB[ee])},[we,g]);let Ee=W.parseIdent(he.name),Pe=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},Pe)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},he.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},he.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,he.humanDownloadsLast30Days)))},U=({name:he,active:Be})=>{let[we]=a(he,null),g=W.parseIdent(he);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),qB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:we===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},V=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ae=await n(({useSubmit:he})=>{let Be=a();he(Be);let we=Array.from(Be.keys()).filter(H=>Be.get(H)!==null),[g,Ee]=I(""),[Pe,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},Fe=async()=>{ce(0);let H=await ZH(g);H.query===g&&ee(H.hits)},At=async()=>{let H=await ZH(g,Pe+1);H.query===g&&H.page-1===Pe&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?Fe():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(x,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(N,{key:H.name,hit:H,active:!1})),willReachEnd:At}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(R,null)),we.length?we.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(V,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ae>"u")return 1;let fe=Array.from(ae.keys()).filter(he=>ae.get(he)==="regular"),ue=Array.from(ae.keys()).filter(he=>ae.get(he)==="dev"),me=Array.from(ae.keys()).filter(he=>ae.get(he)==="peer");return fe.length&&await this.cli.run(["add",...fe]),ue.length&&await this.cli.run(["add","--dev",...ue]),me&&await this.cli.run(["add","--peer",...me]),0}};I0.paths=[["search"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + `);let x=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;x=x.replace(C," ").trim(),u.NODE_OPTIONS=x;let{stdout:F,stderr:N}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${j.stringifyLocator(r)}) +`,prefix:j.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),j.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:F,stderr:N});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${fe.pretty(a.project.configuration,h,fe.Type.PATH)})`)})})}};Ye();Ye();var adt=2,F2=class{supportsDescriptor(e,r){return!!e.range.startsWith(pA)}supportsLocator(e,r){return!!e.reference.startsWith(pA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await Q2(j.makeRange({protocol:pA,source:a,selector:a,params:{locator:j.stringifyLocator(n)}}),pA,o.fetchOptions),A=wn.makeHash(`${adt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:pA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ldt={fetchers:[R2],resolvers:[F2]},cdt=ldt;var SH={};zt(SH,{FileFetcher:()=>O2,FileResolver:()=>M2,TarballFileFetcher:()=>U2,TarballFileResolver:()=>_2,default:()=>fdt,fileUtils:()=>rm});Ye();Dt();var vC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,T2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var rm={};zt(rm,{fetchArchiveFromLocator:()=>N2,makeArchiveFromLocator:()=>wk,makeBufferFromLocator:()=>DH,makeLocator:()=>PC,makeSpec:()=>gme,parseSpec:()=>L2});Ye();Dt();function L2(t){let{params:e,selector:r}=j.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?j.parseLocator(e.locator):null,path:o}}function gme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:j.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return j.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return j.makeLocator(t,gme({parentLocator:e,path:r,hash:o,protocol:a}))}async function N2(t,e){let{parentLocator:r,path:o}=j.parseFileStyleRange(t.reference,{protocol:Ui}),a=z.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=z.join(n.prefixPath,o);return await He.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function wk(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=j.parseFileStyleRange(t.reference,{protocol:e}),u=z.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=z.join(A.prefixPath,n);return await He.releaseAfterUseAsync(async()=>await Zi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:j.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function DH(t,{protocol:e,fetchOptions:r}){return(await wk(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var O2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:Ui});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return wk(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var udt=2,M2=class{supportsDescriptor(e,r){return e.range.match(vC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return vC.test(e.range)&&(e=j.makeDescriptor(e,`${Ui}${e.range}`)),j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=L2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await DH(j.makeLocator(e,j.makeRange({protocol:Ui,source:a,selector:a,params:{locator:j.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${udt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var U2=class{supports(e,r){return T2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await N2(e,r);return await Zi.convertToZip(o,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var _2=class{supportsDescriptor(e,r){return T2.test(e.range)?!!(e.range.startsWith(Ui)||vC.test(e.range)):!1}supportsLocator(e,r){return T2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return vC.test(e.range)&&(e=j.makeDescriptor(e,`${Ui}${e.range}`)),j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=L2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await N2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Adt={fetchers:[U2,O2],resolvers:[_2,M2]},fdt=Adt;var kH={};zt(kH,{GithubFetcher:()=>H2,default:()=>hdt,githubUtils:()=>Ik});Ye();Dt();var Ik={};zt(Ik,{invalidGithubUrlMessage:()=>yme,isGithubUrl:()=>bH,parseGithubUrl:()=>xH});var dme=Ze(ve("querystring")),mme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function bH(t){return t?mme.some(e=>!!t.match(e)):!1}function xH(t){let e;for(let A of mme)if(e=t.match(A),e)break;if(!e)throw new Error(yme(t));let[,r,o,a,n="master"]=e,{commit:u}=dme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function yme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var H2=class{supports(e,r){return!!bH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await sn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Zi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=z.join(a,"package.tgz");await An.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Zi.convertToZip(p,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=xH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var pdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new H2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},hdt=pdt;var QH={};zt(QH,{TarballHttpFetcher:()=>G2,TarballHttpResolver:()=>j2,default:()=>ddt});Ye();function q2(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 G2=class{supports(e,r){return q2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await sn.get(e.reference,{configuration:r.project.configuration});return await Zi.convertToZip(o,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return q2(e.range)}supportsLocator(e,r){return q2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[j.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var gdt={fetchers:[G2],resolvers:[j2]},ddt=gdt;var RH={};zt(RH,{InitCommand:()=>m0,default:()=>ydt});Ye();Ye();Dt();qt();var m0=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=z.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await An.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??j.makeIdent(r.get("initScope"),this.name??z.basename(this.context.cwd)),n.packageManager=nn&&He.isTaggedYarnVersion(nn)?`yarn@${nn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(z.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=z.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=z.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${j.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=z.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let x=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# 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(ae=>`${ae} +`).join(""),C=z.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,x),h.push(C));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(ae=>`${ae} +`).join(""),U=z.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,N),h.push(U));let V={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};He.mergeIntoTarget(V,r.get("initEditorConfig"));let te=`root = true +`;for(let[ae,ce]of Object.entries(V)){te+=` +[${ae}] +`;for(let[Ce,de]of Object.entries(ce)){let Ie=Ce.replace(/[A-Z]/g,Ee=>`_${Ee.toLowerCase()}`);te+=`${Ie} = ${de} +`}}let le=z.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(z.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};m0.paths=[["init"]],m0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var mdt={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:[m0]},ydt=mdt;var Tq={};zt(Tq,{SearchCommand:()=>I0,UpgradeInteractiveCommand:()=>v0,default:()=>oIt});Ye();var Cme=Ze(ve("os"));function DC({stdout:t}){if(Cme.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")}qt();var Rye=Ze(JH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},gyt=(0,Rye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await gyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var GB=["regular","dev","peer"],I0=class extends ut{async execute(){DC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(uQ(),Bq)),{ScrollableItems:r}=await Promise.resolve().then(()=>(hQ(),pQ)),{useKeypress:o}=await Promise.resolve().then(()=>(_B(),Kwe)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(yQ(),mQ)),{default:u}=await Promise.resolve().then(()=>Ze(nIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>Ze(sc())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>Ze(an())),v=await Ke.find(this.context.cwd,this.context.plugins),x=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),F=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:de,active:Ie})=>{let[Ee,g]=a(de.name,null);o({active:Ie},(he,ne)=>{if(ne.name!=="space")return;if(!Ee){g(GB[0]);return}let ee=GB.indexOf(Ee)+1;ee===GB.length?g(null):g(GB[ee])},[Ee,g]);let me=j.parseIdent(de.name),De=j.prettyIdent(v,me);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},de.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},de.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,de.humanDownloadsLast30Days)))},U=({name:de,active:Ie})=>{let[Ee]=a(de,null),g=j.parseIdent(de);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",j.prettyIdent(v,g))),GB.map(me=>h.createElement(A,{key:me,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Ee===me})," ",h.createElement(p,{bold:!0},me)))))},V=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:de})=>{let Ie=a();de(Ie);let Ee=Array.from(Ie.keys()).filter(H=>Ie.get(H)!==null),[g,me]=I(""),[De,he]=I(0),[ne,ee]=I([]),Be=H=>{H.match(/\t| /)||me(H)},Te=async()=>{he(0);let H=await ZH(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await ZH(g,De+1);H.query===g&&H.page-1===De&&(he(H.page),ee([...ne,...H.hits]))};return E(()=>{g?Te():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(x,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Be,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(N,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(F,null)),Ee.length?Ee.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(V,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let ae=Array.from(le.keys()).filter(de=>le.get(de)==="regular"),ce=Array.from(le.keys()).filter(de=>le.get(de)==="dev"),Ce=Array.from(le.keys()).filter(de=>le.get(de)==="peer");return ae.length&&await this.cli.run(["add",...ae]),ce.length&&await this.cli.run(["add","--dev",...ce]),Ce&&await this.cli.run(["add","--peer",...Ce]),0}};I0.paths=[["search"]],I0.usage=nt.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"]]});Ye();qt();E_();var uIe=$e(Jn()),cIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,AIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(AIe(t.slice(e),e)):[],v0=class extends ut{async execute(){bC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(lIe(),aIe)),{Pad:r}=await Promise.resolve().then(()=>(Rq(),oIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(sc())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await St.find(v,this.context.cwd),R=await Nr.find(v);if(!C)throw new nr(x.cwd,this.context.cwd);await x.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(Ee,Pe)=>{let ce=Ape(Ee,Pe),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},V=(Ee,Pe)=>{if(Ee===Pe)return Pe;let ce=W.parseRange(Ee),ne=W.parseRange(Pe),ee=ce.selector.match(cIe),Ie=ne.selector.match(cIe);if(!ee||!Ie)return U(Ee,Pe);let Fe=["gray","red","yellow","green","magenta"],At=null,H="";for(let at=1;at{let ne=await Xc.fetchDescriptorFrom(Ee,ce,{project:x,cache:R,preserveModifier:Pe,workspace:C});return ne!==null?ne.range:Ee.range},ae=async Ee=>{let Pe=uIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,Pe).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:V(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:V(Ee.range,ne)}):ee.push({value:null,label:""}),ee},fe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ue=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:Ee,descriptor:Pe,suggestions:ce})=>{let[ne,ee]=a(Pe.descriptorHash,null),Ie=W.stringifyIdent(Pe),Fe=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,Pe)),p.createElement(r,{active:Ee,length:Fe})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},he=({dependencies:Ee})=>{let[Pe,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let Fe=await ae(Ie);return Fe.filter(At=>At.label!=="").length<=1?null:{descriptor:Ie,suggestions:Fe}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(N*1.75),Fe=Ee.slice(0,Ie),At=Ee.slice(Ie),H=AIe(At,N),at=Fe.map(ee).reduce(async(Re,ke)=>{await Re;let xe=await ke;xe!==null&&(!ne.current||ce(He=>{let Te=He.findIndex(qe=>qe===null),Ve=[...He];return Ve[Te]=xe,Ve}))},Promise.resolve());H.reduce((Re,ke)=>Promise.all(ke.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(He=>He!==null),await Re,ne.current&&ce(He=>{let Te=He.findIndex(Ve=>Ve===null);return He.slice(0,Te).concat(xe).concat(He.slice(Te+xe.length))})}),at).then(()=>{ne.current&&ce(Re=>Re.filter(ke=>ke!==null))})},[]),Pe.length?p.createElement(o,{radius:N>>1,children:Pe.map((Ie,Fe)=>Ie!==null?p.createElement(me,{key:Fe,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:Fe},"Loading..."))}):p.createElement(A,null,"No upgrades found")},we=await n(({useSubmit:Ee})=>{Ee(a());let Pe=new Map;for(let ne of x.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())x.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||Pe.set(Ie.descriptorHash,Ie));let ce=_e.sortMap(Pe.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(fe,null),p.createElement(ue,null),p.createElement(he,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof we>"u")return 1;let g=!1;for(let Ee of x.workspaces)for(let Pe of["dependencies","devDependencies"]){let ce=Ee.manifest[Pe];for(let ne of ce.values()){let ee=we.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await x.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:R}):0}};v0.paths=[["upgrade-interactive"]],v0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + `,examples:[["Open the search window","yarn search"]]});Ye();qt();E_();var uIe=Ze(Jn()),cIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,AIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(AIe(t.slice(e),e)):[],v0=class extends ut{async execute(){DC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(lIe(),aIe)),{Pad:r}=await Promise.resolve().then(()=>(Fq(),oIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(hQ(),pQ)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(yQ(),mQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>Ze(sc())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>Ze(an())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await St.find(v,this.context.cwd),F=await Nr.find(v);if(!C)throw new sr(x.cwd,this.context.cwd);await x.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(me,De)=>{let he=Ape(me,De),ne="";for(let ee of he)ee.added?ne+=fe.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},V=(me,De)=>{if(me===De)return De;let he=j.parseRange(me),ne=j.parseRange(De),ee=he.selector.match(cIe),Be=ne.selector.match(cIe);if(!ee||!Be)return U(me,De);let Te=["gray","red","yellow","green","magenta"],ht=null,H="";for(let at=1;at{let ne=await Xc.fetchDescriptorFrom(me,he,{project:x,cache:F,preserveModifier:De,workspace:C});return ne!==null?ne.range:me.range},le=async me=>{let De=uIe.default.valid(me.range)?`^${me.range}`:me.range,[he,ne]=await Promise.all([te(me,me.range,De).catch(()=>null),te(me,me.range,"latest").catch(()=>null)]),ee=[{value:null,label:me.range}];return he&&he!==me.range?ee.push({value:he,label:V(me.range,he)}):ee.push({value:null,label:""}),ne&&ne!==he&&ne!==me.range?ee.push({value:ne,label:V(me.range,ne)}):ee.push({value:null,label:""}),ee},ae=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ce=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),Ce=({active:me,descriptor:De,suggestions:he})=>{let[ne,ee]=a(De.descriptorHash,null),Be=j.stringifyIdent(De),Te=Math.max(0,45-Be.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},j.prettyIdent(v,De)),p.createElement(r,{active:me,length:Te})),p.createElement(e,{active:me,options:he,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},de=({dependencies:me})=>{let[De,he]=I(me.map(()=>null)),ne=E(!0),ee=async Be=>{let Te=await le(Be);return Te.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Be,suggestions:Te}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Be=Math.trunc(N*1.75),Te=me.slice(0,Be),ht=me.slice(Be),H=AIe(ht,N),at=Te.map(ee).reduce(async(Re,Qe)=>{await Re;let xe=await Qe;xe!==null&&(!ne.current||he(je=>{let be=je.findIndex(_e=>_e===null),$e=[...je];return $e[be]=xe,$e}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(je=>je!==null),await Re,ne.current&&he(je=>{let be=je.findIndex($e=>$e===null);return je.slice(0,be).concat(xe).concat(je.slice(be+xe.length))})}),at).then(()=>{ne.current&&he(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:N>>1,children:De.map((Be,Te)=>Be!==null?p.createElement(Ce,{key:Te,active:!1,descriptor:Be.descriptor,suggestions:Be.suggestions}):p.createElement(A,{key:Te},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Ee=await n(({useSubmit:me})=>{me(a());let De=new Map;for(let ne of x.workspaces)for(let ee of["dependencies","devDependencies"])for(let Be of ne.manifest[ee].values())x.tryWorkspaceByDescriptor(Be)===null&&(Be.range.startsWith("link:")||De.set(Be.descriptorHash,Be));let he=He.sortMap(De.values(),ne=>j.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(ae,null),p.createElement(ce,null),p.createElement(de,{dependencies:he}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ee>"u")return 1;let g=!1;for(let me of x.workspaces)for(let De of["dependencies","devDependencies"]){let he=me.manifest[De];for(let ne of he.values()){let ee=Ee.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(he.set(ne.identHash,j.makeDescriptor(ne,ee)),g=!0)}}return g?await x.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:F}):0}};v0.paths=[["upgrade-interactive"]],v0.usage=nt.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"]]});var nIt={commands:[I0,v0]},iIt=nIt;var Lq={};zt(Lq,{LinkFetcher:()=>jB,LinkResolver:()=>YB,PortalFetcher:()=>WB,PortalResolver:()=>KB,default:()=>oIt});Ye();Pt();var tp="portal:",rp="link:";var jB=class{supports(e,r){return!!e.reference.startsWith(rp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new Hu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var YB=class{supportsDescriptor(e,r){return!!e.range.startsWith(rp)}supportsLocator(e,r){return!!e.reference.startsWith(rp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(rp.length);return[W.makeLocator(e,`${rp}${le.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var WB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new Hu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var KB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${le.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var sIt={fetchers:[jB,WB],resolvers:[YB,KB]},oIt=sIt;var yG={};zt(yG,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>hG,PnpLooseLinker:()=>cv,default:()=>I1t});Pt();Ye();Pt();Pt();var Oq=(t,e)=>`${t}@${e}`,fIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oq(t,o)};var gIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=pIt(t,n),p=!1,h=0;do p=Mq(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=zB(A);if(Mq(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var sIt={commands:[I0,v0]},oIt=sIt;var Lq={};zt(Lq,{LinkFetcher:()=>YB,LinkResolver:()=>WB,PortalFetcher:()=>KB,PortalResolver:()=>zB,default:()=>lIt});Ye();Dt();var tp="portal:",rp="link:";var YB=class{supports(e,r){return!!e.reference.startsWith(rp)}getLocalPath(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:rp});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:rp}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new Hu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Dt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(rp)}supportsLocator(e,r){return!!e.reference.startsWith(rp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(rp.length);return[j.makeLocator(e,`${rp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Dt();var KB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:tp});if(z.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:z.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=j.parseFileStyleRange(e.reference,{protocol:tp}),n=z.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=z.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new Hu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Dt();var zB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[j.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await He.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var aIt={fetchers:[YB,KB],resolvers:[WB,zB]},lIt=aIt;var yG={};zt(yG,{NodeModulesLinker:()=>cv,NodeModulesMode:()=>hG,PnpLooseLinker:()=>uv,default:()=>v1t});Dt();Ye();Dt();Dt();var Oq=(t,e)=>`${t}@${e}`,fIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oq(t,o)};var gIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=gIt(t,n),p=!1,h=0;do p=Mq(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(Mq(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: ${E}, next tree: -${zB(A)}`);let v=dIe(A);if(v)throw new Error(`${v}, after hoisting finished: -${zB(A)}`)}return n.debugLevel>=2&&console.log(zB(A)),hIt(A)},aIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},lIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},pIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:C,hoistedTo:R}=e,N={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:new Map(C),hoistedTo:new Map(R)},U=N.dependencies.get(r);return U&&U.ident==N.ident&&N.dependencies.set(r,N),t.dependencies.set(N.name,N),N},cIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Nq=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mq=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=gIt(u),p=cIt(u,A),h=t==u?new Map:a.fastLookupPossible?aIt(e):lIt(e),E,I=!1,v=!1,x=new Map(Array.from(p.entries()).map(([R,N])=>[R,N[0]])),C=new Map;do{let R=fIt(t,e,r,h,x,p,o,C,a);R.isGraphChanged&&(v=!0),R.anotherRoundNeeded&&(I=!0),E=!1;for(let[N,U]of p)U.length>1&&!u.dependencies.has(N)&&(x.delete(N),U.shift(),x.set(N,U[0]),E=!0)}while(E);for(let R of u.dependencies.values())if(!u.peerNames.has(R.name)&&!r.has(R.locator)){r.add(R.locator);let N=Mq(t,[...e,R],r,C,a);N.isGraphChanged&&(v=!0),N.anotherRoundNeeded&&(I=!0),r.delete(R.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},uIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},AIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(N=>no(N)).join("\u2192")}`);let x=r[r.length-1],R=!(o.ident===x.ident);if(p&&!R&&(I="- self-reference"),R&&(R=o.dependencyKind!==1,p&&!R&&(I="- workspace")),R&&o.dependencyKind===2&&(R=!uIt(o),p&&!R&&(I="- external soft link with unhoisted dependencies")),R&&(R=x.dependencyKind!==1||x.hoistedFrom.has(o.name)||e.size===1,p&&!R&&(I=x.reasons.get(o.name))),R&&(R=!t.peerNames.has(o.name),p&&!R&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),R){let N=!1,U=a.get(o.name);if(N=!U||U.ident===o.ident,p&&!N&&(I=`- filled by: ${no(U.locator)} at ${E}`),N)for(let V=r.length-1;V>=1;V--){let ae=r[V].dependencies.get(o.name);if(ae&&ae.ident!==o.ident){N=!1;let fe=A.get(x);fe||(fe=new Set,A.set(x,fe)),fe.add(o.name),p&&(I=`- filled by ${no(ae.locator)} at ${r.slice(0,V).map(ue=>no(ue.locator)).join("\u2192")}`);break}}R=N}if(R&&(R=n.get(o.name)===o.ident,p&&!R&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),R){let N=!0,U=new Set(o.peerNames);for(let V=r.length-1;V>=1;V--){let te=r[V];for(let ae of U){if(te.peerNames.has(ae)&&te.originalDependencies.has(ae))continue;let fe=te.dependencies.get(ae);fe&&t.dependencies.get(ae)!==fe&&(V===r.length-1?v.add(fe):(v=null,N=!1,p&&(I=`- peer dependency ${no(fe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(ae)}if(!N)break}R=N}if(R&&!h)for(let N of o.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){R=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(N.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:R?0:1,reason:I}},yQ=t=>`${t.name}@${t.locator}`,fIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,x=(U,V,te,ae,fe)=>{if(E.has(ae))return;let ue=[...V,yQ(ae)],me=[...te,yQ(ae)],he=new Map,Be=new Map;for(let ce of Nq(ae)){let ne=AIt(h,r,[h,...U,ae],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=he.get(ee.name)||new Set;Ie.add(ce.name),he.set(ee.name,Ie)}}let we=new Set,g=(ce,ne,ee)=>{if(!we.has(ce)){we.add(ce),Be.set(ce,{isHoistable:1,reason:ee});for(let Ie of he.get(ce.name)||[])g(ae.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(ae.locator)} was not hoisted`:"")}};for(let[ce,ne]of Be)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of Be.keys())if(!we.has(ce)){v=!0;let ne=u.get(ae);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,ae.dependencies.delete(ce.name),ae.hoistedDependencies.set(ce.name,ce),ae.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(V).concat([ae.locator]).map(At=>no(At)).join("\u2192"),Fe=h.hoistedFrom.get(ce.name);Fe||(Fe=[],h.hoistedFrom.set(ce.name,Fe)),Fe.push(Ie),ae.hoistedTo.set(ce.name,Array.from(e).map(At=>no(At.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),fe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(ae.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=dIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,ae].map(ne=>no(ne.locator)).join("\u2192")}: -${zB(t)}`)}let Pe=Nq(ae);for(let ce of Pe)if(we.has(ce)){let ne=Be.get(ce);if((a.get(ce.name)===ce.ident||!ae.reasons.has(ce.name))&&ne.isHoistable!==0&&ae.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&me.indexOf(yQ(ce))<0){E.add(ae);let Ie=pIe(ae,ce);x([...U,ae],ue,me,Ie,R),E.delete(ae)}}},C,R=new Set(Nq(h)),N=Array.from(e).map(U=>yQ(U));do{C=R,R=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let V=pIe(h,U);x([],Array.from(r),N,V,R)}}while(R.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},dIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),x=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,R=`${x?` hoisted to ${x}`:""}`,N=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${N} - broken require promise for ${h.name}${R}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${N} - broken require promise: no required dependency ${h.name}${R} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},pIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oq(r,a),ident:fIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:x,identName:C,reference:R,peerNames:N,hoistPriority:U,dependencyKind:V}=h,te=e.hoistingLimits.get(E.locator);I={name:x,references:new Set([R]),locator:Oq(C,R),ident:fIe(C,R),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(x):!1,hoistPriority:U||0,dependencyKind:V||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let x=new Set,C=R=>{if(!x.has(R)){x.add(R),R.decoupled=!1;for(let N of R.dependencies.values())R.peerNames.has(N.name)||C(N)}};C(I)}else for(let x of h.dependencies)p(x,I)};for(let h of t.dependencies)p(h,u);return u},Uq=t=>t.substring(0,t.indexOf("@",1)),hIt=t=>{let e={name:t.name,identName:Uq(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Uq(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},gIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},hIe=5e4,zB=t=>{let e=0,r=(a,n,u="")=>{if(e>hIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +${VB(A)}`);let v=dIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),dIt(A)},cIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},uIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},pIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:C,hoistedTo:F}=e,N={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:new Map(C),hoistedTo:new Map(F)},U=N.dependencies.get(r);return U&&U.ident==N.ident&&N.dependencies.set(r,N),t.dependencies.set(N.name,N),N},AIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Nq=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mq=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=mIt(u),p=AIt(u,A),h=t==u?new Map:a.fastLookupPossible?cIt(e):uIt(e),E,I=!1,v=!1,x=new Map(Array.from(p.entries()).map(([F,N])=>[F,N[0]])),C=new Map;do{let F=hIt(t,e,r,h,x,p,o,C,a);F.isGraphChanged&&(v=!0),F.anotherRoundNeeded&&(I=!0),E=!1;for(let[N,U]of p)U.length>1&&!u.dependencies.has(N)&&(x.delete(N),U.shift(),x.set(N,U[0]),E=!0)}while(E);for(let F of u.dependencies.values())if(!u.peerNames.has(F.name)&&!r.has(F.locator)){r.add(F.locator);let N=Mq(t,[...e,F],r,C,a);N.isGraphChanged&&(v=!0),N.anotherRoundNeeded&&(I=!0),r.delete(F.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},fIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},pIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(N=>ro(N)).join("\u2192")}`);let x=r[r.length-1],F=!(o.ident===x.ident);if(p&&!F&&(I="- self-reference"),F&&(F=o.dependencyKind!==1,p&&!F&&(I="- workspace")),F&&o.dependencyKind===2&&(F=!fIt(o),p&&!F&&(I="- external soft link with unhoisted dependencies")),F&&(F=x.dependencyKind!==1||x.hoistedFrom.has(o.name)||e.size===1,p&&!F&&(I=x.reasons.get(o.name))),F&&(F=!t.peerNames.has(o.name),p&&!F&&(I=`- cannot shadow peer: ${ro(t.originalDependencies.get(o.name).locator)} at ${E}`)),F){let N=!1,U=a.get(o.name);if(N=!U||U.ident===o.ident,p&&!N&&(I=`- filled by: ${ro(U.locator)} at ${E}`),N)for(let V=r.length-1;V>=1;V--){let le=r[V].dependencies.get(o.name);if(le&&le.ident!==o.ident){N=!1;let ae=A.get(x);ae||(ae=new Set,A.set(x,ae)),ae.add(o.name),p&&(I=`- filled by ${ro(le.locator)} at ${r.slice(0,V).map(ce=>ro(ce.locator)).join("\u2192")}`);break}}F=N}if(F&&(F=n.get(o.name)===o.ident,p&&!F&&(I=`- filled by: ${ro(u.get(o.name)[0])} at ${E}`)),F){let N=!0,U=new Set(o.peerNames);for(let V=r.length-1;V>=1;V--){let te=r[V];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let ae=te.dependencies.get(le);ae&&t.dependencies.get(le)!==ae&&(V===r.length-1?v.add(ae):(v=null,N=!1,p&&(I=`- peer dependency ${ro(ae.locator)} from parent ${ro(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!N)break}F=N}if(F&&!h)for(let N of o.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){F=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${ro(N.locator)}, available: ${ro(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:F?0:1,reason:I}},EQ=t=>`${t.name}@${t.locator}`,hIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,x=(U,V,te,le,ae)=>{if(E.has(le))return;let ce=[...V,EQ(le)],Ce=[...te,EQ(le)],de=new Map,Ie=new Map;for(let he of Nq(le)){let ne=pIt(h,r,[h,...U,le],he,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Ie.set(he,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Be=de.get(ee.name)||new Set;Be.add(he.name),de.set(ee.name,Be)}}let Ee=new Set,g=(he,ne,ee)=>{if(!Ee.has(he)){Ee.add(he),Ie.set(he,{isHoistable:1,reason:ee});for(let Be of de.get(he.name)||[])g(le.dependencies.get(Be),ne,p.debugLevel>=2?`- peer dependency ${ro(he.locator)} from parent ${ro(le.locator)} was not hoisted`:"")}};for(let[he,ne]of Ie)ne.isHoistable===1&&g(he,ne,ne.reason);let me=!1;for(let he of Ie.keys())if(!Ee.has(he)){v=!0;let ne=u.get(le);ne&&ne.has(he.name)&&(I=!0),me=!0,le.dependencies.delete(he.name),le.hoistedDependencies.set(he.name,he),le.reasons.delete(he.name);let ee=h.dependencies.get(he.name);if(p.debugLevel>=2){let Be=Array.from(V).concat([le.locator]).map(ht=>ro(ht)).join("\u2192"),Te=h.hoistedFrom.get(he.name);Te||(Te=[],h.hoistedFrom.set(he.name,Te)),Te.push(Be),le.hoistedTo.set(he.name,Array.from(e).map(ht=>ro(ht.locator)).join("\u2192"))}if(!ee)h.ident!==he.ident&&(h.dependencies.set(he.name,he),ae.add(he));else for(let Be of he.references)ee.references.add(Be)}if(le.dependencyKind===2&&me&&(I=!0),p.check){let he=dIe(t);if(he)throw new Error(`${he}, after hoisting dependencies of ${[h,...U,le].map(ne=>ro(ne.locator)).join("\u2192")}: +${VB(t)}`)}let De=Nq(le);for(let he of De)if(Ee.has(he)){let ne=Ie.get(he);if((a.get(he.name)===he.ident||!le.reasons.has(he.name))&&ne.isHoistable!==0&&le.reasons.set(he.name,ne.reason),!he.isHoistBorder&&Ce.indexOf(EQ(he))<0){E.add(le);let Be=pIe(le,he);x([...U,le],ce,Ce,Be,F),E.delete(le)}}},C,F=new Set(Nq(h)),N=Array.from(e).map(U=>EQ(U));do{C=F,F=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let V=pIe(h,U);x([],Array.from(r),N,V,F)}}while(F.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},dIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>ro(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),x=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,F=`${x?` hoisted to ${x}`:""}`,N=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${N} - broken require promise for ${h.name}${F}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${N} - broken require promise: no required dependency ${h.name}${F} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},gIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oq(r,a),ident:fIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:x,identName:C,reference:F,peerNames:N,hoistPriority:U,dependencyKind:V}=h,te=e.hoistingLimits.get(E.locator);I={name:x,references:new Set([F]),locator:Oq(C,F),ident:fIe(C,F),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(x):!1,hoistPriority:U||0,dependencyKind:V||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let x=new Set,C=F=>{if(!x.has(F)){x.add(F),F.decoupled=!1;for(let N of F.dependencies.values())F.peerNames.has(N.name)||C(N)}};C(I)}else for(let x of h.dependencies)p(x,I)};for(let h of t.dependencies)p(h,u);return u},Uq=t=>t.substring(0,t.indexOf("@",1)),dIt=t=>{let e={name:t.name,identName:Uq(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Uq(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},mIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},ro=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},hIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>hIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+ro(E.locator)+(I?` ${I}`:"")} `,p+=r(E,n,`${u}${hhIe?` Tree is too large, part of the tree has been dunped -`:"")};var VB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(VB||{}),mIe="node_modules",D0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=mIt(t,e),u=null;if(a.length===0){let A=gIe(r,{hoistingLimits:o});u=EIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},dA=t=>`${t.name}@${t.reference}`,Hq=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(z.delimiter).length,u=a.split(z.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},yIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},_q=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=le.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return z.contains(o,a)===null},dIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=le.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,x)=>{let C=dA(v);if(p.has(C))return;p.add(C);let R=t.getPackageInformation(v);if(R){let N=x?dA(x):"";if(dA(v)!==N&&R.linkType==="SOFT"&&!v.reference.startsWith("link:")&&!_q(R,v,t,o)){let U=EIe(R,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,V]of R.packageDependencies)V!==null&&(R.packagePeers.has(U)||h(t.getLocator(U,V),v))}};for(let v of u)h(v,null);let E=o.split(z.sep);for(let v of A.values()){let x=t.getPackageInformation(v),R=le.toPortablePath(x.packageLocation.slice(0,-1)).split(z.sep).slice(E.length),N=n;for(let U of R){let V=N.children.get(U);V||(V={children:new Map},N.children.set(U,V)),N=V}N.workspaceLocator=v}let I=(v,x)=>{if(v.workspaceLocator){let C=dA(x),R=a.get(C);R||(R=new Set,a.set(C,R)),R.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||x)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},mIt=(t,e)=>{let r=[],o=!1,a=new Map,n=dIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=le.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(x,C)=>`${dA(C)}:${x}`,v=(x,C,R,N,U,V,te,ae)=>{let fe=I(x,R),ue=E.get(fe),me=!!ue;!me&&R.name===A.name&&R.reference===A.reference&&(ue=h,E.set(fe,h));let he=_q(C,R,t,p);if(!ue){let ce=0;he?ce=2:C.linkType==="SOFT"&&R.name.endsWith(D0)&&(ce=1),ue={name:x,identName:R.name,reference:R.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(fe,ue)}let Be;if(he?Be=2:U.linkType==="SOFT"?Be=1:Be=0,ue.hoistPriority=Math.max(ue.hoistPriority||0,Be),ae&&!he){let ce=dA({name:N.identName,reference:N.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(ue.name)}let we=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(le.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)we.has(ee)||(we.set(ee,V.get(ee)||null),ue.peerNames.add(ee))}}let g=dA({name:R.name.replace(D0,""),reference:R.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)we.set(`${ce.name}${D0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!he&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&N.dependencies.add(ue);let Pe=R!==A&&C.linkType==="SOFT"&&!R.name.endsWith(D0)&&!he;if(!me&&!Pe){let ce=new Map;for(let[ne,ee]of we)if(ee!==null){let Ie=t.getLocator(ne,ee),Fe=t.getLocator(ne.replace(D0,""),ee),At=t.getPackageInformation(Fe);if(At===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_q(At,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){At.packageDependencies.size>0&&(o=!0);for(let[He,Te]of At.packageDependencies)if(Te!==null){let Ve=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${He}@${Te}`);if(dA(Ve)!==dA(Ie)){let qe=we.get(He);if(qe){let b=W.parseLocator(Array.isArray(qe)?`${qe[0]}@${qe[1]}`:`${He}@${qe}`);yIe(b,Ve)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Ve)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,b)}`})}else{let b=ce.get(He);if(b){let w=b.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${He}@${w}`);yIe(S,Ve)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Ve)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(b.portal.name))}`})}else ce.set(He,{target:Ve.reference,portal:Ie})}}}}let at=e.hoistingLimitsByCwd?.get(te),Re=H?te:z.relative(p,le.toPortablePath(At.packageLocation))||Bt.dot,ke=e.hoistingLimitsByCwd?.get(Re);v(ne,At,Ie,ue,C,we,Re,at==="dependencies"||ke==="dependencies"||ke==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function EIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return le.toPortablePath(o||t.packageLocation)}function yIt(t,e,r){let o=e.getLocator(t.name.replace(D0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:le.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:EIe(a,t,e)}}var EIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:x,target:C}=yIt(E,t,r);return{locator:dA(E),nodePath:I,target:C,linkType:x,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let x=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let R=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(D0,"")&&R===x)continue;let N=Array.from(C.references).sort(),U={name:C.identName,reference:N[0]},{name:V,scope:te}=n(C.name),ae=te?[te,V]:[V],fe=z.join(I,mIe),ue=z.join(fe,...ae),me=`${v}/${U.name}`,he=a(U,v,N.slice(1)),Be=!1;if(he.linkType==="SOFT"&&r.project){let we=r.project.workspacesByCwd.get(he.target.slice(0,-1));Be=!!(we&&!we.manifest.name)}if(!C.name.endsWith(D0)&&!Be){let we=o.get(ue);if(we){if(we.dirList)throw new Error(`Assertion failed: ${ue} cannot merge dir node with leaf node`);{let Pe=W.parseLocator(we.locator),ce=W.parseLocator(he.locator);if(we.linkType!==he.linkType)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different link types ${we.nodePath}/${W.stringifyLocator(Pe)} and ${v}/${W.stringifyLocator(ce)}`);if(Pe.identHash!==ce.identHash)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different idents ${we.nodePath}/${W.stringifyLocator(Pe)} and ${v}/s${W.stringifyLocator(ce)}`);he.aliases=[...he.aliases,...we.aliases,W.parseLocator(we.locator).reference]}}o.set(ue,he);let g=ue.split("/"),Ee=g.indexOf(mIe);for(let Pe=g.length-1;Ee>=0&&Pe>Ee;Pe--){let ce=le.toPortablePath(g.slice(0,Pe).join(z.sep)),ne=g[Pe],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,he.linkType==="SOFT"?he.target:ue,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();iA();Nl();var oG={};zt(oG,{PnpInstaller:()=>mm,PnpLinker:()=>b0,UnplugCommand:()=>k0,default:()=>VIt,getPnpPath:()=>x0,jsInstallUtils:()=>yA,pnpUtils:()=>av,quotePathIfNeeded:()=>n1e});Pt();var r1e=ve("url");Ye();Ye();Pt();Pt();var CIe={["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 CIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=EQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function BIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`:"")};var JB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(JB||{}),mIe="node_modules",P0="$wsroot$";var XB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=EIt(t,e),u=null;if(a.length===0){let A=gIe(r,{hoistingLimits:o});u=wIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},dA=t=>`${t.name}@${t.reference}`,Hq=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(z.delimiter).length,u=a.split(z.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},yIe=(t,e)=>{let r=j.isVirtualLocator(t)?j.devirtualizeLocator(t):t,o=j.isVirtualLocator(e)?j.devirtualizeLocator(e):e;return j.areLocatorsEqual(r,o)},_q=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return z.contains(o,a)===null},yIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,x)=>{let C=dA(v);if(p.has(C))return;p.add(C);let F=t.getPackageInformation(v);if(F){let N=x?dA(x):"";if(dA(v)!==N&&F.linkType==="SOFT"&&!v.reference.startsWith("link:")&&!_q(F,v,t,o)){let U=EIe(F,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,V]of F.packageDependencies)V!==null&&(F.packagePeers.has(U)||h(t.getLocator(U,V),v))}};for(let v of u)h(v,null);let E=o.split(z.sep);for(let v of A.values()){let x=t.getPackageInformation(v),F=ue.toPortablePath(x.packageLocation.slice(0,-1)).split(z.sep).slice(E.length),N=n;for(let U of F){let V=N.children.get(U);V||(V={children:new Map},N.children.set(U,V)),N=V}N.workspaceLocator=v}let I=(v,x)=>{if(v.workspaceLocator){let C=dA(x),F=a.get(C);F||(F=new Set,a.set(C,F)),F.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||x)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},EIt=(t,e)=>{let r=[],o=!1,a=new Map,n=yIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(x,C)=>`${dA(C)}:${x}`,v=(x,C,F,N,U,V,te,le)=>{let ae=I(x,F),ce=E.get(ae),Ce=!!ce;!Ce&&F.name===A.name&&F.reference===A.reference&&(ce=h,E.set(ae,h));let de=_q(C,F,t,p);if(!ce){let he=0;de?he=2:C.linkType==="SOFT"&&F.name.endsWith(P0)&&(he=1),ce={name:x,identName:F.name,reference:F.reference,dependencies:new Set,peerNames:he===1?new Set:C.packagePeers,dependencyKind:he},E.set(ae,ce)}let Ie;if(de?Ie=2:U.linkType==="SOFT"?Ie=1:Ie=0,ce.hoistPriority=Math.max(ce.hoistPriority||0,Ie),le&&!de){let he=dA({name:N.identName,reference:N.reference}),ne=a.get(he)||new Set;a.set(he,ne),ne.add(ce.name)}let Ee=new Map(C.packageDependencies);if(e.project){let he=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(he){let ne=new Set([...Array.from(he.manifest.peerDependencies.values(),ee=>j.stringifyIdent(ee)),...Array.from(he.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Ee.has(ee)||(Ee.set(ee,V.get(ee)||null),ce.peerNames.add(ee))}}let g=dA({name:F.name.replace(P0,""),reference:F.reference}),me=n.get(g);if(me)for(let he of me)Ee.set(`${he.name}${P0}`,he.reference);(C!==U||C.linkType!=="SOFT"||!de&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&N.dependencies.add(ce);let De=F!==A&&C.linkType==="SOFT"&&!F.name.endsWith(P0)&&!de;if(!Ce&&!De){let he=new Map;for(let[ne,ee]of Ee)if(ee!==null){let Be=t.getLocator(ne,ee),Te=t.getLocator(ne.replace(P0,""),ee),ht=t.getPackageInformation(Te);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_q(ht,Be,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[je,be]of ht.packageDependencies)if(be!==null){let $e=j.parseLocator(Array.isArray(be)?`${be[0]}@${be[1]}`:`${je}@${be}`);if(dA($e)!==dA(Be)){let _e=Ee.get(je);if(_e){let b=j.parseLocator(Array.isArray(_e)?`${_e[0]}@${_e[1]}`:`${je}@${_e}`);yIe(b,$e)||r.push({messageName:71,text:`Cannot link ${j.prettyIdent(e.project.configuration,j.parseIdent(Be.name))} into ${j.prettyLocator(e.project.configuration,j.parseLocator(`${F.name}@${F.reference}`))} dependency ${j.prettyLocator(e.project.configuration,$e)} conflicts with parent dependency ${j.prettyLocator(e.project.configuration,b)}`})}else{let b=he.get(je);if(b){let w=b.target,S=j.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${je}@${w}`);yIe(S,$e)||r.push({messageName:71,text:`Cannot link ${j.prettyIdent(e.project.configuration,j.parseIdent(Be.name))} into ${j.prettyLocator(e.project.configuration,j.parseLocator(`${F.name}@${F.reference}`))} dependency ${j.prettyLocator(e.project.configuration,$e)} conflicts with dependency ${j.prettyLocator(e.project.configuration,S)} from sibling portal ${j.prettyIdent(e.project.configuration,j.parseIdent(b.portal.name))}`})}else he.set(je,{target:$e.reference,portal:Be})}}}}let at=e.hoistingLimitsByCwd?.get(te),Re=H?te:z.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Be,ce,C,Ee,Re,at==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function EIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function CIt(t,e,r){let o=e.getLocator(t.name.replace(P0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:EIe(a,t,e)}}var wIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:x,target:C}=CIt(E,t,r);return{locator:dA(E),nodePath:I,target:C,linkType:x,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let x=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let F=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(P0,"")&&F===x)continue;let N=Array.from(C.references).sort(),U={name:C.identName,reference:N[0]},{name:V,scope:te}=n(C.name),le=te?[te,V]:[V],ae=z.join(I,mIe),ce=z.join(ae,...le),Ce=`${v}/${U.name}`,de=a(U,v,N.slice(1)),Ie=!1;if(de.linkType==="SOFT"&&r.project){let Ee=r.project.workspacesByCwd.get(de.target.slice(0,-1));Ie=!!(Ee&&!Ee.manifest.name)}if(!C.name.endsWith(P0)&&!Ie){let Ee=o.get(ce);if(Ee){if(Ee.dirList)throw new Error(`Assertion failed: ${ce} cannot merge dir node with leaf node`);{let De=j.parseLocator(Ee.locator),he=j.parseLocator(de.locator);if(Ee.linkType!==de.linkType)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different link types ${Ee.nodePath}/${j.stringifyLocator(De)} and ${v}/${j.stringifyLocator(he)}`);if(De.identHash!==he.identHash)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different idents ${Ee.nodePath}/${j.stringifyLocator(De)} and ${v}/s${j.stringifyLocator(he)}`);de.aliases=[...de.aliases,...Ee.aliases,j.parseLocator(Ee.locator).reference]}}o.set(ce,de);let g=ce.split("/"),me=g.indexOf(mIe);for(let De=g.length-1;me>=0&&De>me;De--){let he=ue.toPortablePath(g.slice(0,De).join(z.sep)),ne=g[De],ee=o.get(he);if(!ee)o.set(he,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,de.linkType==="SOFT"?de.target:ce,Ce)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Dt();Dt();iA();Nl();var oG={};zt(oG,{PnpInstaller:()=>dm,PnpLinker:()=>b0,UnplugCommand:()=>k0,default:()=>XIt,getPnpPath:()=>x0,jsInstallUtils:()=>yA,pnpUtils:()=>lv,quotePathIfNeeded:()=>n1e});Dt();var r1e=ve("url");Ye();Ye();Dt();Dt();var CIe={["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 IIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=CQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function PIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ `;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=EQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` -`),n+=r,n+="}",n}function EQ(t,e,r,o){let{next:a}=CIe[r],n=a[t]||a["*"];return wIe(e,n,o)}function wIe(t,e,r){let{collapsed:o}=CIe[e];return Array.isArray(t)?o?CIt(t,e,r):wIt(t,e,r):typeof t=="object"&&t!==null?o?IIt(t,e,r):BIt(t,e,r):JSON.stringify(t)}function IIe(t){return wIe(t,"TOP_LEVEL","")}function XB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function vIt(t){let e=new Map,r=XB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function DIt(t){return XB(t.fallbackPool||[],([e])=>e)}function PIt(t){let e=[];for(let[r,o]of XB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of XB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,R]of XB(A.entries(),([N])=>N))I.push([C,R]);let v=p&&p.size>0?Array.from(p):void 0,x=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:x}])}}return e}function ZB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:vIt(t),fallbackPool:DIt(t),packageRegistryData:PIt(t)}}var DIe=$e(vIe());function PIe(t,e){return[t?`${t} +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=CQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function CQ(t,e,r,o){let{next:a}=CIe[r],n=a[t]||a["*"];return wIe(e,n,o)}function wIe(t,e,r){let{collapsed:o}=CIe[e];return Array.isArray(t)?o?IIt(t,e,r):BIt(t,e,r):typeof t=="object"&&t!==null?o?vIt(t,e,r):PIt(t,e,r):JSON.stringify(t)}function IIe(t){return wIe(t,"TOP_LEVEL","")}function ZB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function DIt(t){let e=new Map,r=ZB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function SIt(t){return ZB(t.fallbackPool||[],([e])=>e)}function bIt(t){let e=[];for(let[r,o]of ZB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of ZB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,F]of ZB(A.entries(),([N])=>N))I.push([C,F]);let v=p&&p.size>0?Array.from(p):void 0,x=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:x}])}}return e}function $B(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:DIt(t),fallbackPool:SIt(t),packageRegistryData:bIt(t)}}var PIe=Ze(vIe());function DIe(t,e){return[t?`${t} `:"",`/* eslint-disable */ `,`// @ts-nocheck `,`"use strict"; `,` `,e,` -`,(0,DIe.default)()].join("")}function SIt(t){return JSON.stringify(t,null,2)}function bIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function xIt(t){return[`const RAW_RUNTIME_STATE = -`,`${bIt(IIe(t))}; +`,(0,PIe.default)()].join("")}function xIt(t){return JSON.stringify(t,null,2)}function kIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function QIt(t){return[`const RAW_RUNTIME_STATE = +`,`${kIt(IIe(t))}; `,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { `,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); `,`} -`].join("")}function kIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { `,` const fs = require('fs'); `,` const path = require('path'); `,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); `,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); `,`} -`].join("")}function SIe(t){let e=ZB(t),r=xIt(e);return PIe(t.shebang,r)}function bIe(t){let e=ZB(t),r=kIt(),o=PIe(t.shebang,r);return{dataFile:SIt(e),loaderFile:o}}Pt();function Gq(t,{basePath:e}){let r=le.toPortablePath(e),o=z.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([x,C])=>{if(I===null!=(x===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let R=C.discardFromLookup??!1,N={name:I,reference:x},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&R,R||(U.locator=N)):n.set(C.packageLocation,{locator:N,discardFromLookup:R});let V=null;return[x,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:R,get packageLocation(){return V||(V=z.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var ip=ve("module"),dm=ve("url"),$q=ve("util");var Mo=ve("url");var FIe=$e(ve("assert"));var jq=Array.isArray,$B=JSON.stringify,ev=Object.getOwnPropertyNames,gm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yq=(t,e)=>RegExp.prototype.exec.call(t,e),Wq=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),P0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kq=(t,...e)=>String.prototype.includes.apply(t,e),zq=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),tv=(t,...e)=>String.prototype.indexOf.apply(t,e),xIe=(t,...e)=>String.prototype.replace.apply(t,e),S0=(t,...e)=>String.prototype.slice.apply(t,e),mA=(t,...e)=>String.prototype.startsWith.apply(t,e),kIe=Map,QIe=JSON.parse;function rv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var RIe=rv("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),Vq=rv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),TIe=rv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!mA(r,"./");return e==="."?((0,FIe.default)(o===!1),`Invalid "exports" main target ${$B(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${$B(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),nv=rv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),LIe=rv("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 wQ=ve("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}iv(r,t,o,u,a)}Yq(MIe,S0(t,2))!==null&&iv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(mA(h,E)||iv(r,t,o,u,a),e==="")return p;if(Yq(MIe,e)!==null){let I=n?xIe(r,"*",()=>e):r+e;RIt(I,o,u,a)}return n?new URL(Wq(UIe,p.href,()=>e)):new URL(e,p)}function LIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function jC(t,e,r,o,a,n,u,A){if(typeof e=="string")return TIt(e,r,o,t,a,n,u,A);if(jq(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function NIt(t,e,r){if(typeof t=="string"||jq(t))return!0;if(typeof t!="object"||t===null)return!1;let o=ev(t),a=!1,n=0;for(let u=0;u=h.length&&P0(e,I)&&HIe(n,h)===1&&zq(h,"*")===E&&(n=h,u=S0(e,E,e.length-I.length))}}if(n){let p=r[n],h=jC(t,p,u,n,o,!0,!1,a);return h==null&&Jq(e,t,o),h}Jq(e,t,o)}function GIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||mA(t,"#/")||P0(t,"/")){let u="is not a valid internal imports specifier name";throw new Vq(t,u,(0,Mo.fileURLToPath)(e))}let a,n=OIe(e,o);if(n.exists){a=(0,Mo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(gm(u,t)&&!Kq(t,"*")){let A=jC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=ev(u);for(let E=0;E=I.length&&P0(t,x)&&HIe(A,I)===1&&zq(I,"*")===v&&(A=I,p=S0(t,v,t.length-x.length))}}if(A){let E=u[A],I=jC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}FIt(t,a,e)}Pt();var MIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=MIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function lu(t){return le.normalize(le.fromPortablePath(t))}var KIe=$e(YIe());function zIe(t){return UIt(),Zq[t]}var Zq;function UIt(){Zq||(Zq={"--conditions":[],...WIe(_It()),...WIe(process.execArgv)})}function WIe(t){return(0,KIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function _It(){let t=[],e=HIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function HIt(t,e){let r=[],o=!1,a=!0;for(let n=0;n[I,new Map(v.map(([x,C])=>{if(I===null!=(x===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let F=C.discardFromLookup??!1,N={name:I,reference:x},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&F,F||(U.locator=N)):n.set(C.packageLocation,{locator:N,discardFromLookup:F});let V=null;return[x,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:F,get packageLocation(){return V||(V=z.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Dt();Dt();var ip=ve("module"),gm=ve("url"),$q=ve("util");var Oo=ve("url");var RIe=Ze(ve("assert"));var jq=Array.isArray,ev=JSON.stringify,tv=Object.getOwnPropertyNames,hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yq=(t,e)=>RegExp.prototype.exec.call(t,e),Wq=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),D0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kq=(t,...e)=>String.prototype.includes.apply(t,e),zq=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),rv=(t,...e)=>String.prototype.indexOf.apply(t,e),xIe=(t,...e)=>String.prototype.replace.apply(t,e),S0=(t,...e)=>String.prototype.slice.apply(t,e),mA=(t,...e)=>String.prototype.startsWith.apply(t,e),kIe=Map,QIe=JSON.parse;function nv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var FIe=nv("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),Vq=nv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),TIe=nv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!mA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ev(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ev(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),iv=nv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),LIe=nv("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 IQ=ve("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}sv(r,t,o,u,a)}Yq(MIe,S0(t,2))!==null&&sv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(mA(h,E)||sv(r,t,o,u,a),e==="")return p;if(Yq(MIe,e)!==null){let I=n?xIe(r,"*",()=>e):r+e;LIt(I,o,u,a)}return n?new URL(Wq(UIe,p.href,()=>e)):new URL(e,p)}function OIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return NIt(e,r,o,t,a,n,u,A);if(jq(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function MIt(t,e,r){if(typeof t=="string"||jq(t))return!0;if(typeof t!="object"||t===null)return!1;let o=tv(t),a=!1,n=0;for(let u=0;u=h.length&&D0(e,I)&&HIe(n,h)===1&&zq(h,"*")===E&&(n=h,u=S0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Jq(e,t,o),h}Jq(e,t,o)}function GIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||mA(t,"#/")||D0(t,"/")){let u="is not a valid internal imports specifier name";throw new Vq(t,u,(0,Oo.fileURLToPath)(e))}let a,n=OIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(hm(u,t)&&!Kq(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=tv(u);for(let E=0;E=I.length&&D0(t,x)&&HIe(A,I)===1&&zq(I,"*")===v&&(A=I,p=S0(t,v,t.length-x.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}TIt(t,a,e)}Dt();var _It=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function es(t,e,r={},o){o??=_It.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function lu(t){return ue.normalize(ue.fromPortablePath(t))}var KIe=Ze(YIe());function zIe(t){return HIt(),Zq[t]}var Zq;function HIt(){Zq||(Zq={"--conditions":[],...WIe(qIt()),...WIe(process.execArgv)})}function WIe(t){return(0,KIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function qIt(){let t=[],e=GIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function GIt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),VIe=Ma>19||Ma===19&&np>=2||Ma===18&&np>=13,vJt=Ma===20&&np<6||Ma===19&&np>=3,DJt=Ma>19||Ma===19&&np>=6,PJt=Ma>=21||Ma===20&&np>=10||Ma===18&&np>=19,SJt=Ma>=21||Ma===20&&np>=10||Ma===18&&np>=20,bJt=Ma>=22;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>le.fromPortablePath(mi.resolveVirtual(le.toPortablePath(e)))),VIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function eG(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let ke=t.packageRegistry.get(Re);if(ke)for(let xe of ke.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:x}=t;function C(Re,ke){return{fn:Re,args:ke,error:null,result:null}}function R(Re){let ke=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=(Ve,qe)=>`\x1B[${Ve}m${qe}\x1B[0m`,He=Re.error;console.error(He?xe("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Ve of Re.args)console.error(` ${xe("37;1","In \u2190")} ${(0,$q.inspect)(Ve,{colors:ke,compact:!0})}`);Re.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,$q.inspect)(Re.result,{colors:ke,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Ve of Te)console.error(` ${xe("38;5;244",Ve)}`)}console.error()}function N(Re,ke){if(e.allowDebug===!1)return ke;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let He=C(Re,xe);try{return He.result=ke(...xe)}catch(Te){throw He.error=Te}finally{R(He)}};if(o>=1)return(...xe)=>{try{return ke(...xe)}catch(He){let Te=C(Re,xe);throw Te.error=He,R(Te),He}}}return ke}function U(Re){let ke=g(Re);if(!ke)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return ke}function V(Re){if(Re.name===null)return!0;for(let ke of t.dependencyTreeRoots)if(ke.name===Re.name&&ke.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function ae(Re,ke=te,xe){let He=ce(z.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(He===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(He),Ve=z.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Ve))return null;let qe=JSON.parse(e.fakeFs.readFileSync(Ve,"utf8"));if(qe.exports==null)return null;let b=z.contains(Te,Re);if(b===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");b!=="."&&!A.test(b)&&(b=`./${b}`);try{let w=qIe({packageJSONUrl:(0,dm.pathToFileURL)(le.fromPortablePath(Ve)),packageSubpath:b,exports:qe.exports,base:xe?(0,dm.pathToFileURL)(le.fromPortablePath(xe)):null,conditions:ke});return le.toPortablePath((0,dm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:lu(Re),locator:He,pkgJson:qe,subpath:lu(b),conditions:ke},w.code)}}function fe(Re,ke,{extensions:xe}){let He;try{ke.push(Re),He=e.fakeFs.statSync(Re)}catch{}if(He&&!He.isDirectory())return e.fakeFs.realpathSync(Re);if(He&&He.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(z.join(Re,dr.manifest),"utf8"))}catch{}let Ve;if(Te&&Te.main&&(Ve=z.resolve(Re,Te.main)),Ve&&Ve!==Re){let qe=fe(Ve,ke,{extensions:xe});if(qe!==null)return qe}}for(let Te=0,Ve=xe.length;Te{let b=JSON.stringify(qe.name);if(He.has(b))return;He.add(b);let w=Ee(qe);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=xe.get(S.name);typeof F>"u"&&xe.set(S.name,F=new Set),F.add(S.reference)}};Te(ke);let Ve=[];for(let qe of[...xe.keys()].sort())for(let b of[...xe.get(qe)].sort())Ve.push({name:qe,reference:b});return Ve}function ce(Re,{resolveIgnored:ke=!1,includeDiscardFromLookup:xe=!1}={}){if(he(Re)&&!ke)return null;let He=z.relative(t.basePath,Re);He.match(n)||(He=`./${He}`),He.endsWith("/")||(He=`${He}/`);do{let Te=x.get(He);if(typeof Te>"u"||Te.discardFromLookup&&!xe){He=He.substring(0,He.lastIndexOf("/",He.length-2)+1);continue}return Te.locator}while(He!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(le.toPortablePath(Re),"utf8")}catch(ke){if(ke.code==="ENOENT")return;throw ke}}function ee(Re,ke,{considerBuiltins:xe=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return le.toPortablePath(e.pnpapiResolution);if(xe&&(0,ip.isBuiltin)(Re))return null;let He=lu(Re),Te=ke&&lu(ke);if(ke&&he(ke)&&(!z.isAbsolute(Re)||ce(Re)===null)){let b=me(Re,ke);if(b===!1)throw $i("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) +`),r}Dt();var[Ma,np]=process.versions.node.split(".").map(t=>parseInt(t,10)),VIe=Ma>19||Ma===19&&np>=2||Ma===18&&np>=13,DJt=Ma===20&&np<6||Ma===19&&np>=3,SJt=Ma>19||Ma===19&&np>=6,bJt=Ma>=21||Ma===20&&np>=10||Ma===18&&np>=19,xJt=Ma>=21||Ma===20&&np>=10||Ma===18&&np>=20,kJt=Ma>=22;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),VIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function eG(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let xe of Qe.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:x}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function F(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=($e,_e)=>`\x1B[${$e}m${_e}\x1B[0m`,je=Re.error;console.error(je?xe("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let $e of Re.args)console.error(` ${xe("37;1","In \u2190")} ${(0,$q.inspect)($e,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,$q.inspect)(Re.result,{colors:Qe,compact:!0})}`));let be=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(be.length>0){console.error();for(let $e of be)console.error(` ${xe("38;5;244",$e)}`)}console.error()}function N(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let je=C(Re,xe);try{return je.result=Qe(...xe)}catch(be){throw je.error=be}finally{F(je)}};if(o>=1)return(...xe)=>{try{return Qe(...xe)}catch(je){let be=C(Re,xe);throw be.error=je,F(be),je}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw es("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function V(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,xe){let je=he(z.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(je===null)throw es("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:be}=U(je),$e=z.join(be,dr.manifest);if(!e.fakeFs.existsSync($e))return null;let _e=JSON.parse(e.fakeFs.readFileSync($e,"utf8"));if(_e.exports==null)return null;let b=z.contains(be,Re);if(b===null)throw es("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");b!=="."&&!A.test(b)&&(b=`./${b}`);try{let w=qIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath($e)),packageSubpath:b,exports:_e.exports,base:xe?(0,gm.pathToFileURL)(ue.fromPortablePath(xe)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw es("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:lu(Re),locator:je,pkgJson:_e,subpath:lu(b),conditions:Qe},w.code)}}function ae(Re,Qe,{extensions:xe}){let je;try{Qe.push(Re),je=e.fakeFs.statSync(Re)}catch{}if(je&&!je.isDirectory())return e.fakeFs.realpathSync(Re);if(je&&je.isDirectory()){let be;try{be=JSON.parse(e.fakeFs.readFileSync(z.join(Re,dr.manifest),"utf8"))}catch{}let $e;if(be&&be.main&&($e=z.resolve(Re,be.main)),$e&&$e!==Re){let _e=ae($e,Qe,{extensions:xe});if(_e!==null)return _e}}for(let be=0,$e=xe.length;be<$e;be++){let _e=`${Re}${xe[be]}`;if(Qe.push(_e),e.fakeFs.existsSync(_e))return _e}if(je&&je.isDirectory())for(let be=0,$e=xe.length;be<$e;be++){let _e=z.format({dir:Re,name:"index",ext:xe[be]});if(Qe.push(_e),e.fakeFs.existsSync(_e))return _e}return null}function ce(Re){let Qe=new ip.Module(Re,null);return Qe.filename=Re,Qe.paths=ip.Module._nodeModulePaths(Re),Qe}function Ce(Re,Qe){return Qe.endsWith("/")&&(Qe=z.join(Qe,"internal.js")),ip.Module._resolveFilename(ue.fromPortablePath(Re),ce(ue.fromPortablePath(Qe)),!1,{plugnplay:!1})}function de(Re){if(I===null)return!1;let Qe=z.contains(t.basePath,Re);return Qe===null?!1:!!I.test(Qe.replace(/\/$/,""))}let Ie={std:3,resolveVirtual:1,getAllLocators:1},Ee=p;function g({name:Re,reference:Qe}){let xe=v.get(Re);if(!xe)return null;let je=xe.get(Qe);return je||null}function me({name:Re,reference:Qe}){let xe=[];for(let[je,be]of v)if(je!==null)for(let[$e,_e]of be)$e===null||_e.packageDependencies.get(Re)!==Qe||je===Re&&$e===Qe||xe.push({name:je,reference:$e});return xe}function De(Re,Qe){let xe=new Map,je=new Set,be=_e=>{let b=JSON.stringify(_e.name);if(je.has(b))return;je.add(b);let w=me(_e);for(let S of w)if(U(S).packagePeers.has(Re))be(S);else{let R=xe.get(S.name);typeof R>"u"&&xe.set(S.name,R=new Set),R.add(S.reference)}};be(Qe);let $e=[];for(let _e of[...xe.keys()].sort())for(let b of[...xe.get(_e)].sort())$e.push({name:_e,reference:b});return $e}function he(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:xe=!1}={}){if(de(Re)&&!Qe)return null;let je=z.relative(t.basePath,Re);je.match(n)||(je=`./${je}`),je.endsWith("/")||(je=`${je}/`);do{let be=x.get(je);if(typeof be>"u"||be.discardFromLookup&&!xe){je=je.substring(0,je.lastIndexOf("/",je.length-2)+1);continue}return be.locator}while(je!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:xe=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(xe&&(0,ip.isBuiltin)(Re))return null;let je=lu(Re),be=Qe&&lu(Qe);if(Qe&&de(Qe)&&(!z.isAbsolute(Re)||he(Re)===null)){let b=Ce(Re,Qe);if(b===!1)throw es("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: "${He}" -Required by: ${Te} -`,{request:He,issuer:Te});return le.toPortablePath(b)}let Ve,qe=Re.match(a);if(qe){if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let[,b,w]=qe,S=ce(ke);if(!S){let Le=me(Re,ke);if(Le===!1)throw $i("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 request: "${je}" +Required by: ${be} +`,{request:je,issuer:be});return ue.toPortablePath(b)}let $e,_e=Re.match(a);if(_e){if(!Qe)throw es("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:je,issuer:be});let[,b,w]=_e,S=he(Qe);if(!S){let Le=Ce(Re,Qe);if(Le===!1)throw es("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: "${He}" -Required by: ${Te} -`,{request:He,issuer:Te});return le.toPortablePath(Le)}let F=U(S).packageDependencies.get(b),J=null;if(F==null&&S.name!==null){let Le=t.fallbackExclusionList.get(S.name);if(!Le||!Le.has(S.reference)){for(let dt=0,Gt=h.length;dtV(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${b} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${be} +`,{request:je,issuer:be,dependencyName:b});else{let Le=De(b,S);Le.every(ot=>V(ot))?X=es("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${b} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${S.name}@${S.reference} (via ${be}) ${Le.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} `).join("")} -`,{request:He,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:b,brokenAncestors:Le}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${b} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. +`,{request:je,issuer:be,issuerLocator:Object.assign({},S),dependencyName:b,brokenAncestors:Le}):X=es("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${b} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${S.name}@${S.reference} (via ${be}) ${Le.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} `).join("")} -`,{request:He,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:b,brokenAncestors:Le})}else F===void 0&&(!xe&&(0,ip.isBuiltin)(Re)?V(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}. 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 ${b} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. +`,{request:je,issuer:be,issuerLocator:Object.assign({},S),dependencyName:b,brokenAncestors:Le})}else R===void 0&&(!xe&&(0,ip.isBuiltin)(Re)?V(S)?X=es("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}. 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 ${b} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${Te} -`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${b}. 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 ${b} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${be} +`,{request:je,issuer:be,dependencyName:b}):X=es("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${b}. 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 ${b} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${Te} -`,{request:He,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:b}):V(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${be} +`,{request:je,issuer:be,issuerLocator:Object.assign({},S),dependencyName:b}):V(S)?X=es("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${Te} -`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${b}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. +Required package: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${be} +`,{request:je,issuer:be,dependencyName:b}):X=es("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${b}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. -Required package: ${b}${b!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:He,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:b}));if(F==null){if(J===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=J;let Le=X.message.replace(/\n.*/g,"");X.message=Le,!E.has(Le)&&o!==0&&(E.add(Le),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:b,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("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: ${b}${b!==je?` (via "${je}")`:""} +Required by: ${S.name}@${S.reference} (via ${be}) +`,{request:je,issuer:be,issuerLocator:Object.assign({},S),dependencyName:b}));if(R==null){if(J===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");R=J;let Le=X.message.replace(/\n.*/g,"");X.message=Le,!E.has(Le)&&o!==0&&(E.add(Le),process.emitWarning(X))}let Z=Array.isArray(R)?{name:R[0],reference:R[1]}:{name:b,reference:R},ie=U(Z);if(!ie.packageLocation)throw es("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: ${Z.name}@${Z.reference}${Z.name!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:He,issuer:Te,dependencyLocator:Object.assign({},Z)});let be=ie.packageLocation;w?Ve=z.join(be,w):Ve=be}else if(z.isAbsolute(Re))Ve=z.normalize(Re);else{if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let b=z.resolve(ke);ke.match(u)?Ve=z.normalize(z.join(b,Re)):Ve=z.normalize(z.join(z.dirname(b),Re))}return z.normalize(Ve)}function Ie(Re,ke,xe=te,He){if(n.test(Re))return ke;let Te=ae(ke,xe,He);return Te?z.normalize(Te):ke}function Fe(Re,{extensions:ke=Object.keys(ip.Module._extensions)}={}){let xe=[],He=fe(Re,xe,{extensions:ke});if(He)return z.normalize(He);{JIe(xe.map(qe=>le.fromPortablePath(qe)));let Te=lu(Re),Ve=ce(Re);if(Ve){let{packageLocation:qe}=U(Ve),b=!0;try{e.fakeFs.accessSync(qe)}catch(w){if(w?.code==="ENOENT")b=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). +Required package: ${Z.name}@${Z.reference}${Z.name!==je?` (via "${je}")`:""} +Required by: ${S.name}@${S.reference} (via ${be}) +`,{request:je,issuer:be,dependencyLocator:Object.assign({},Z)});let ke=ie.packageLocation;w?$e=z.join(ke,w):$e=ke}else if(z.isAbsolute(Re))$e=z.normalize(Re);else{if(!Qe)throw es("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:je,issuer:be});let b=z.resolve(Qe);Qe.match(u)?$e=z.normalize(z.join(b,Re)):$e=z.normalize(z.join(z.dirname(b),Re))}return z.normalize($e)}function Be(Re,Qe,xe=te,je){if(n.test(Re))return Qe;let be=le(Qe,xe,je);return be?z.normalize(be):Qe}function Te(Re,{extensions:Qe=Object.keys(ip.Module._extensions)}={}){let xe=[],je=ae(Re,xe,{extensions:Qe});if(je)return z.normalize(je);{JIe(xe.map(_e=>ue.fromPortablePath(_e)));let be=lu(Re),$e=he(Re);if($e){let{packageLocation:_e}=U($e),b=!0;try{e.fakeFs.accessSync(_e)}catch(w){if(w?.code==="ENOENT")b=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw es("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). -Missing package: ${Ve.name}@${Ve.reference} -Expected package location: ${lu(qe)} -`,{unqualifiedPath:Te,extensions:ke})}}if(!b){let w=qe.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 $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} +Missing package: ${$e.name}@${$e.reference} +Expected package location: ${lu(_e)} +`,{unqualifiedPath:be,extensions:Qe})}}if(!b){let w=_e.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 es("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} -Missing package: ${Ve.name}@${Ve.reference} -Expected package location: ${lu(qe)} -`,{unqualifiedPath:Te,extensions:ke})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. +Missing package: ${$e.name}@${$e.reference} +Expected package location: ${lu(_e)} +`,{unqualifiedPath:be,extensions:Qe})}}throw es("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. -Source path: ${Te} -${xe.map(qe=>`Not found: ${lu(qe)} -`).join("")}`,{unqualifiedPath:Te,extensions:ke})}}function At(Re,ke,xe){if(!ke)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let He=GIe({name:Re,base:(0,dm.pathToFileURL)(le.fromPortablePath(ke)),conditions:xe.conditions??te,readFileSyncFn:ne});if(He instanceof URL)return Fe(le.toPortablePath((0,dm.fileURLToPath)(He)),{extensions:xe.extensions});if(He.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(He,ke,xe)}function H(Re,ke,xe={}){try{if(Re.startsWith("#"))return At(Re,ke,xe);let{considerBuiltins:He,extensions:Te,conditions:Ve}=xe,qe=ee(Re,ke,{considerBuiltins:He});if(Re==="pnpapi")return qe;if(qe===null)return null;let b=()=>ke!==null?he(ke):!1,w=(!He||!(0,ip.isBuiltin)(Re))&&!b()?Ie(Re,qe,Ve,ke):qe;return Fe(w,{extensions:Te})}catch(He){throw Object.hasOwn(He,"pnpCode")&&Object.assign(He.data,{request:lu(Re),issuer:ke&&lu(ke)}),He}}function at(Re){let ke=z.normalize(Re),xe=mi.resolveVirtual(ke);return xe!==ke?xe:null}return{VERSIONS:Be,topLevel:we,getLocator:(Re,ke)=>Array.isArray(ke)?{name:ke[0],reference:ke[1]}:{name:Re,reference:ke},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[ke,xe]of v)for(let He of xe.keys())ke!==null&&He!==null&&Re.push({name:ke,reference:He});return Re},getPackageInformation:Re=>{let ke=g(Re);if(ke===null)return null;let xe=le.fromPortablePath(ke.packageLocation);return{...ke,packageLocation:xe}},findPackageLocator:Re=>ce(le.toPortablePath(Re)),resolveToUnqualified:N("resolveToUnqualified",(Re,ke,xe)=>{let He=ke!==null?le.toPortablePath(ke):null,Te=ee(le.toPortablePath(Re),He,xe);return Te===null?null:le.fromPortablePath(Te)}),resolveUnqualified:N("resolveUnqualified",(Re,ke)=>le.fromPortablePath(Fe(le.toPortablePath(Re),ke))),resolveRequest:N("resolveRequest",(Re,ke,xe)=>{let He=ke!==null?le.toPortablePath(ke):null,Te=H(le.toPortablePath(Re),He,xe);return Te===null?null:le.fromPortablePath(Te)}),resolveVirtual:N("resolveVirtual",Re=>{let ke=at(le.toPortablePath(Re));return ke!==null?le.fromPortablePath(ke):null})}}Pt();var XIe=(t,e,r)=>{let o=ZB(t),a=Gq(o,{basePath:e}),n=le.join(e,dr.pnpCjs);return eG(a,{fakeFs:r,pnpapiResolution:n})};var rG=$e($Ie());qt();var yA={};zt(yA,{checkManifestCompatibility:()=>e1e,extractBuildRequest:()=>IQ,getExtractHint:()=>nG,hasBindingGyp:()=>iG});Ye();Pt();function e1e(t){return W.isPackageCompatible(t,Vi.getArchitectureSet())}function IQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:e1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Vi.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var GIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function nG(t){return t.packageFs.getExtractHint({relevantExtensions:GIt})}function iG(t){let e=z.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};zt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return z.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var jIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),b0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=x0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return le.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=x0(r.project).cjs;if(!oe.existsSync(o))return null;let n=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})).findPackageLocator(le.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new mm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},mm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new _e.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await YIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let x=h?IQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(z.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let R=z.resolve(C.getRealPath(),r.prefixPath),N=sG(this.opts.project.cwd,R),U=new Map,V=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),V.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:sG(this.opts.project.cwd,mi.resolveVirtual(R)),locator:te})}}return _e.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:V,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:R,buildRequest:x}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=x0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())_e.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=_e.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=x0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=bIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.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 oe.changeFilePromise(r.esmLoader,(0,rG.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=z.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=z.join(a.cwd,"node_modules");if(o&&o.test(z.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(z.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:jIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(IQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new _u(a,{baseFs:r.packageFs,pathUtils:z}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=z.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=_e.getMapWithDefault(this.packageRegistry,"@@disk"),o=sG(this.opts.project.cwd,e);return _e.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function sG(t,e){let r=z.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function YIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:nG(t),hasBindingGyp:iG(t)}}}Ye();Ye();qt();var t1e=$e(Zo());var k0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(x=>{let C=W.parseDescriptor(x),R=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(R.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,R)})`);return N=>{let U=W.stringifyIdent(N);return!t1e.default.isMatch(U,W.stringifyIdent(R))||N.version&&!kr.satisfiesWithPrereleases(N.version,R.range)?!1:(u.delete(x),!0)}}),p=()=>{let x=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(R=>R(C))&&x.push(C);return x},h=x=>{let C=new Set,R=[],N=(U,V)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(V>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(ae=>ae(U))&&R.push(U),!(V>0&&!this.recursive)))for(let ae of U.dependencies.values()){let fe=o.storedResolutions.get(ae.descriptorHash);if(!fe)throw new Error("Assertion failed: The resolution should have been registered");let ue=o.storedPackages.get(fe);if(!ue)throw new Error("Assertion failed: The package should have been registered");N(ue,V+1)}};for(let U of x)N(U.anchoredPackage,0);return R},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=_e.sortMap(E,x=>W.stringifyLocator(x));let v=await Lt.start({configuration:r,stdout:this.context.stdout,json:this.json},async x=>{for(let C of E){let R=C.version??"unknown",N=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,R));N.unplugged=!0,x.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),x.reportJson({locator:W.stringifyLocator(C),version:R})}await o.topLevelWorkspace.persistManifest(),this.json||x.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};k0.paths=[["unplug"]],k0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var x0=t=>({cjs:z.join(t.cwd,dr.pnpCjs),data:z.join(t.cwd,dr.pnpData),esmLoader:z.join(t.cwd,dr.pnpEsmLoader)}),n1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function WIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n||void 0;return}let u=x0(t),A=`--require ${n1e(le.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,r1e.pathToFileURL)(le.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function KIt(t,e){let r=x0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var zIt={hooks:{populateYarnPaths:KIt,setupScriptEnvironment:WIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[b0],commands:[k0]},VIt=zIt;var A1e=$e(l1e());qt();var pG=$e(ve("crypto")),f1e=$e(ve("fs")),p1e=1,Pi="node_modules",BQ=".bin",h1e=".yarn-state.yml",f1t=1e3,hG=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(hG||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(z.sep).length-h.split(z.sep).length),A=z.join(r.project.configuration.startingCwd,Pi);return u.find(p=>z.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=vQ(z.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new AG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},AG=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=z.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await p1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${le.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await fG(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmHoistingLimits");try{x=_e.validateEnum(VB,v.manifest.installConfig?.hoistingLimits??x)}catch{let R=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${R}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(VB).join(", ")}, using default: "${x}"`)}return[v.relativeCwd,x]})),n=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmSelfReferences");return x=v.manifest.installConfig?.selfReferences??x,[v.relativeCwd,x]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,x)=>Array.isArray(x)?{name:x[0],reference:x[1]}:{name:v,reference:x},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let x=v.anchoredLocator;return{name:W.stringifyIdent(x),reference:x.reference}}),getPackageInformation:v=>{let x=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let x=this.opts.project.tryWorkspaceByCwd(le.toPortablePath(v));if(x!==null){let C=x.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>le.fromPortablePath(mi.resolveVirtual(le.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:x}of p)this.opts.report.reportError(v,x);return}let E=Hq(A);await E1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let x=W.parseLocator(v),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,x]of E.entries()){if(y1e(v))continue;let C=W.parseLocator(v),R=this.localStore.get(C.locatorHash);if(typeof R>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(R.pkg))continue;let N=yA.extractBuildRequest(R.pkg,R.customPackageData,R.dependencyMeta,{configuration:this.opts.project.configuration});!N||I.push({buildLocations:x.locations,locator:C,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function p1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:yA.hasBindingGyp(e)}}}async function h1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +Source path: ${be} +${xe.map(_e=>`Not found: ${lu(_e)} +`).join("")}`,{unqualifiedPath:be,extensions:Qe})}}function ht(Re,Qe,xe){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let je=GIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:xe.conditions??te,readFileSyncFn:ne});if(je instanceof URL)return Te(ue.toPortablePath((0,gm.fileURLToPath)(je)),{extensions:xe.extensions});if(je.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(je,Qe,xe)}function H(Re,Qe,xe={}){try{if(Re.startsWith("#"))return ht(Re,Qe,xe);let{considerBuiltins:je,extensions:be,conditions:$e}=xe,_e=ee(Re,Qe,{considerBuiltins:je});if(Re==="pnpapi")return _e;if(_e===null)return null;let b=()=>Qe!==null?de(Qe):!1,w=(!je||!(0,ip.isBuiltin)(Re))&&!b()?Be(Re,_e,$e,Qe):_e;return Te(w,{extensions:be})}catch(je){throw Object.hasOwn(je,"pnpCode")&&Object.assign(je.data,{request:lu(Re),issuer:Qe&&lu(Qe)}),je}}function at(Re){let Qe=z.normalize(Re),xe=mi.resolveVirtual(Qe);return xe!==Qe?xe:null}return{VERSIONS:Ie,topLevel:Ee,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,xe]of v)for(let je of xe.keys())Qe!==null&&je!==null&&Re.push({name:Qe,reference:je});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let xe=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:xe}},findPackageLocator:Re=>he(ue.toPortablePath(Re)),resolveToUnqualified:N("resolveToUnqualified",(Re,Qe,xe)=>{let je=Qe!==null?ue.toPortablePath(Qe):null,be=ee(ue.toPortablePath(Re),je,xe);return be===null?null:ue.fromPortablePath(be)}),resolveUnqualified:N("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(Te(ue.toPortablePath(Re),Qe))),resolveRequest:N("resolveRequest",(Re,Qe,xe)=>{let je=Qe!==null?ue.toPortablePath(Qe):null,be=H(ue.toPortablePath(Re),je,xe);return be===null?null:ue.fromPortablePath(be)}),resolveVirtual:N("resolveVirtual",Re=>{let Qe=at(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Dt();var XIe=(t,e,r)=>{let o=$B(t),a=Gq(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return eG(a,{fakeFs:r,pnpapiResolution:n})};var rG=Ze($Ie());qt();var yA={};zt(yA,{checkManifestCompatibility:()=>e1e,extractBuildRequest:()=>BQ,getExtractHint:()=>nG,hasBindingGyp:()=>iG});Ye();Dt();function e1e(t){return j.isPackageCompatible(t,Ji.getArchitectureSet())}function BQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${j.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${j.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${j.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:e1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${j.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var YIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function nG(t){return t.packageFs.getExtractHint({relevantExtensions:YIt})}function iG(t){let e=z.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var lv={};zt(lv,{getUnpluggedPath:()=>av});Ye();Dt();function av(t,{configuration:e}){return z.resolve(e.get("pnpUnpluggedFolder"),j.slugifyLocator(t))}var WIt=new Set([j.makeIdent(null,"open").identHash,j.makeIdent(null,"opn").identHash]),b0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=x0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${fe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,fe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=He.getFactoryWithDefault(this.pnpCache,o,()=>He.dynamicRequire(o,{cachingStrategy:He.CachingStrategy.FsTime})),n={name:j.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${j.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=x0(r.project).cjs;if(!oe.existsSync(o))return null;let n=He.getFactoryWithDefault(this.pnpCache,o,()=>He.dynamicRequire(o,{cachingStrategy:He.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?j.makeLocator(j.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new He.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=j.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=j.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?j.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await KIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let x=h?BQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(z.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let F=z.resolve(C.getRealPath(),r.prefixPath),N=sG(this.opts.project.cwd,F),U=new Map,V=new Set;if(A){for(let te of e.peerDependencies.values())U.set(j.stringifyIdent(te),null),V.add(j.stringifyIdent(te));if(!u){let te=j.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:sG(this.opts.project.cwd,mi.resolveVirtual(F)),locator:te})}}return He.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:V,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:F,buildRequest:x}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=j.areIdentsEqual(a,n)?n.reference:[j.stringifyIdent(n),n.reference];o.packageDependencies.set(j.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(j.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=x0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())He.getMapWithDefault(this.packageRegistry,j.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:j.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=He.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:j.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=x0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=bIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.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 oe.changeFilePromise(r.esmLoader,(0,rG.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=z.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=z.join(a.cwd,"node_modules");if(o&&o.test(z.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(z.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:WIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(BQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=av(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new _u(a,{baseFs:r.packageFs,pathUtils:z}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=z.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=j.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${j.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${j.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=He.getMapWithDefault(this.packageRegistry,"@@disk"),o=sG(this.opts.project.cwd,e);return He.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function sG(t,e){let r=z.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function KIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:nG(t),hasBindingGyp:iG(t)}}}Ye();Ye();qt();var t1e=Ze(Xo());var k0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(x=>{let C=j.parseDescriptor(x),F=C.range!=="unknown"?C:j.makeDescriptor(C,"*");if(!Lr.validRange(F.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${j.prettyDescriptor(r,F)})`);return N=>{let U=j.stringifyIdent(N);return!t1e.default.isMatch(U,j.stringifyIdent(F))||N.version&&!Lr.satisfiesWithPrereleases(N.version,F.range)?!1:(u.delete(x),!0)}}),p=()=>{let x=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!j.isVirtualLocator(C)&&A.some(F=>F(C))&&x.push(C);return x},h=x=>{let C=new Set,F=[],N=(U,V)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(V>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&F.push(U),!(V>0&&!this.recursive)))for(let le of U.dependencies.values()){let ae=o.storedResolutions.get(le.descriptorHash);if(!ae)throw new Error("Assertion failed: The resolution should have been registered");let ce=o.storedPackages.get(ae);if(!ce)throw new Error("Assertion failed: The package should have been registered");N(ce,V+1)}};for(let U of x)N(U.anchoredPackage,0);return F},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${fe.prettyList(r,u,fe.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${fe.prettyList(r,u,fe.Type.CODE)} doesn't match any packages referenced by ${I}`);E=He.sortMap(E,x=>j.stringifyLocator(x));let v=await Ft.start({configuration:r,stdout:this.context.stdout,json:this.json},async x=>{for(let C of E){let F=C.version??"unknown",N=o.topLevelWorkspace.manifest.ensureDependencyMeta(j.makeDescriptor(C,F));N.unplugged=!0,x.reportInfo(0,`Will unpack ${j.prettyLocator(r,C)} to ${fe.pretty(r,av(C,{configuration:r}),fe.Type.PATH)}`),x.reportJson({locator:j.stringifyLocator(C),version:F})}await o.topLevelWorkspace.persistManifest(),this.json||x.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};k0.paths=[["unplug"]],k0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var x0=t=>({cjs:z.join(t.cwd,dr.pnpCjs),data:z.join(t.cwd,dr.pnpData),esmLoader:z.join(t.cwd,dr.pnpEsmLoader)}),n1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n||void 0;return}let u=x0(t),A=`--require ${n1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,r1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function VIt(t,e){let r=x0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var JIt={hooks:{populateYarnPaths:VIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[b0],commands:[k0]},XIt=JIt;var A1e=Ze(l1e());qt();var pG=Ze(ve("crypto")),f1e=Ze(ve("fs")),p1e=1,Di="node_modules",vQ=".bin",h1e=".yarn-state.yml",h1t=1e3,hG=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(hG||{}),cv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await He.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(j.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${j.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(z.sep).length-h.split(z.sep).length),A=z.join(r.project.configuration.startingCwd,Di);return u.find(p=>z.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await He.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(z.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return j.parseLocator(A)}makeInstaller(e){return new AG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},AG=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=z.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await g1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!j.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(j.stringifyIdent(e))||n.set(j.stringifyIdent(e),e.reference);let A=e;if(j.isVirtualLocator(e)){A=j.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(j.stringifyIdent(E),null),u.add(j.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=j.areIdentsEqual(a,n)?n.reference:[j.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(j.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await fG(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmHoistingLimits");try{x=He.validateEnum(JB,v.manifest.installConfig?.hoistingLimits??x)}catch{let F=j.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${F}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(JB).join(", ")}, using default: "${x}"`)}return[v.relativeCwd,x]})),n=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmSelfReferences");return x=v.manifest.installConfig?.selfReferences??x,[v.relativeCwd,x]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,x)=>Array.isArray(x)?{name:x[0],reference:x[1]}:{name:v,reference:x},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let x=v.anchoredLocator;return{name:j.stringifyIdent(x),reference:x.reference}}),getPackageInformation:v=>{let x=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:j.makeLocator(j.parseIdent(v.name),v.reference),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let x=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(x!==null){let C=x.anchoredLocator;return{name:j.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=XB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:x}of p)this.opts.report.reportError(v,x);return}let E=Hq(A);await w1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let x=j.parseLocator(v),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,x]of E.entries()){if(y1e(v))continue;let C=j.parseLocator(v),F=this.localStore.get(C.locatorHash);if(typeof F>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(F.pkg))continue;let N=yA.extractBuildRequest(F.pkg,F.customPackageData,F.dependencyMeta,{configuration:this.opts.project.configuration});!N||I.push({buildLocations:x.locations,locator:C,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${fe.pretty(this.opts.project.configuration,"--preserve-symlinks",fe.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function g1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:yA.hasBindingGyp(e)}}}async function d1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will `,n+=`# cause your node_modules installation to become invalidated. `,n+=` `,n+=`__metadata: `,n+=` version: ${p1e} `,n+=` nmMode: ${o.value} -`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`;let u=Array.from(e.keys()).sort(),A=j.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` `,n+=`${JSON.stringify(E)}: `,n+=` locations: `;for(let v of I.locations){let x=z.contains(t.cwd,v);if(x===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(x)} @@ -673,16 +673,16 @@ ${xe.map(qe=>`Not found: ${lu(qe)} `;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} `}if(E===A&&r.size>0){n+=` bin: `;for(let[v,x]of r){let C=z.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: -`;for(let[R,N]of x){let U=z.relative(z.join(v,Pi),N);n+=` ${JSON.stringify(R)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=z.join(p,Pi,h1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function fG(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=z.join(r,Pi,h1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>p1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(x=>z.join(r,x)),v=E.bin;if(v)for(let[x,C]of Object.entries(v)){let R=z.join(r,le.toPortablePath(x)),N=_e.getMapWithDefault(p,R);for(let[U,V]of Object.entries(C))N.set(U,le.toPortablePath([R,Pi,V].join(z.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let x of E.aliases){let{scope:C,name:R}=W.parseLocator(h),N=W.makeLocator(W.makeIdent(C,R),x),U=W.stringifyLocator(N);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:g1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var WC=async(t,e)=>{if(t.split(z.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=z.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await WC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},c1e=4,vQ=(t,{skipPrefix:e})=>{let r=z.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(z.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(z.sep),u=z.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},g1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&z.contains(e,n.target)!==null){let A=_e.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=vQ(u,{skipPrefix:e}),h=_e.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(z.relative(z.dirname(e),t),e)};async function d1e(t,e,r){let o=z.join(t,`${pG.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function g1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===m1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=z.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(m1e||{}),d1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=z.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),x=new Map;for(let C of v){let R=z.join(E,C.name),N,U=z.join(I,C.name);if(C.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let V=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=V}}else if(C.isDirectory())N={kind:"directory"};else if(C.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(x.set(R,N),C.isDirectory()&&R!==Pi){let V=await A(R);for(let[te,ae]of V)x.set(te,ae)}}return x},p;if(a.value==="hardlinks-global"&&o&&u){let E=z.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=z.join(e,E),x=z.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(x,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await g1t({srcPath:v,dstPath:x,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await gG(z.resolve(z.dirname(x),I.symlinkTo),x,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=z.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await d1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function m1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,x)=>{let C=!0,R=z.join(h,E),N=new Set;if(E===Pi||E.startsWith("@")){let V;try{V=oe.statSync(R)}catch{}C=!!V,V?V.mtimeMs>r?(A=!0,N=new Set(oe.readdirSync(R))):N=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let ae=z.join(h,Pi,BQ),fe;try{fe=oe.statSync(ae)}catch{}if(!fe)A=!0;else if(fe.mtimeMs>r){A=!0;let ue=new Set(oe.readdirSync(ae)),me=new Map;n.set(h,me);for(let[he,Be]of te)ue.has(he)&&me.set(he,Be)}else n.set(h,te)}}else C=x.has(E);let U=I.children.get(E);if(C){let{linkType:V,locator:te}=U,ae={children:new Map,linkType:V,locator:te};if(v.children.set(E,ae),te){let fe=_e.getSetWithDefault(u,te);fe.add(R),u.set(te,fe)}for(let fe of U.children.keys())p(R,fe,U,ae,N)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,x={children:new Map,linkType:I,locator:v};if(a.set(h,x),v){let C=_e.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,x,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function y1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function y1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=y1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let x=z.join(p[0],v);v!==""&&oe.existsSync(x)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=z.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[x,C]of v){let R=z.join(A,le.toPortablePath(C));E.set(x,R)}for(let[x,C]of h.children){let R=z.join(A,x),N=u(R,R,C);N.size>0&&n.set(A,new Map([...n.get(A)||new Map,...N]))}}else for(let[v,x]of h.children){let C=u(z.join(A,v),p,x);for(let[R,N]of C)E.set(R,N)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var u1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function dG(t){return z.join(t.get("globalFolder"),"store")}async function E1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=z.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=m1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=g1e(e,{skipPrefix:o.cwd}),x=[],C=async({srcDir:Be,dstDir:we,linkType:g,globalHardlinksStore:Ee,nmMode:Pe,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(z.dirname(we),{recursive:!0}),await gG(z.resolve(Be),we,ce)):await d1t(we,Be,{baseFs:r,globalHardlinksStore:Ee,nmMode:Pe,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${Be} -> ${we} ${Ie.message}`,Ie}finally{ae.tick()}})().then(()=>x.splice(x.indexOf(ee),1));x.push(ee),x.length>c1e&&await Promise.race(x)},R=async(Be,we,g)=>{let Ee=(async()=>{let Pe=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let Fe of Ie){if(!ee.innerLoop&&Fe.name===BQ)continue;let At=z.join(ce,Fe.name),H=z.join(ne,Fe.name);Fe.isDirectory()?(Fe.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await Pe(At,H,{...ee,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await oe.linkPromise(At,H):await oe.copyFilePromise(At,H,f1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||ae.tick()}};await Pe(Be,we,g)})().then(()=>x.splice(x.indexOf(Ee),1));x.push(Ee),x.length>c1e&&await Promise.race(x)},N=async(Be,we,g)=>{if(g)for(let[Ee,Pe]of we.children){let ce=g.children.get(Ee);await N(z.join(Be,Ee),Pe,ce)}else{we.children.has(Pi)&&await WC(z.join(Be,Pi),{contentsOnly:!1});let Ee=z.basename(Be)===Pi&&v.has(z.join(z.dirname(Be),z.sep));await WC(Be,{contentsOnly:Be===A,allowSymlink:Ee})}};for(let[Be,we]of p){let g=v.get(Be);for(let[Ee,Pe]of we.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=z.join(Be,Ee);await N(ne,Pe,ce)}}let U=async(Be,we,g)=>{if(g){u1e(we.locator,g.locator)||await WC(Be,{contentsOnly:we.linkType==="HARD"});for(let[Ee,Pe]of we.children){let ce=g.children.get(Ee);await U(z.join(Be,Ee),Pe,ce)}}else{we.children.has(Pi)&&await WC(z.join(Be,Pi),{contentsOnly:!0});let Ee=z.basename(Be)===Pi&&v.has(z.join(z.dirname(Be),z.sep));await WC(Be,{contentsOnly:we.linkType==="HARD",allowSymlink:Ee})}};for(let[Be,we]of v){let g=p.get(Be);for(let[Ee,Pe]of we.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(z.join(Be,Ee),Pe,ce)}}let V=new Map,te=[];for(let[Be,we]of E)for(let g of we){let{locationRoot:Ee,segments:Pe}=vQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of Pe)if(ne=z.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=u1e(ce.locator,Be),Ie=e.get(ce.locator),Fe=Ie.target,At=ne,H=Ie.linkType;if(ee)V.has(Fe)||V.set(Fe,At);else if(Fe!==At){let at=W.parseLocator(ce.locator);W.isVirtualLocator(at)&&(at=W.devirtualizeLocator(at)),te.push({srcDir:Fe,dstDir:At,linkType:H,realLocatorHash:at.locatorHash})}}}}for(let[Be,{locations:we}]of e.entries())for(let g of we){let{locationRoot:Ee,segments:Pe}=vQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(Be),Fe=W.parseLocator(Be);W.isVirtualLocator(Fe)&&(Fe=W.devirtualizeLocator(Fe));let At=Fe.locatorHash,H=Ie.target,at=g;if(H===at)continue;let Re=Ie.linkType;for(let ke of Pe)ne=ne.children.get(ke);if(!ce)te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});else for(let ke of Pe)if(ee=z.join(ee,ke),ce=ce.children.get(ke),!ce){te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});break}}let ae=Xs.progressViaCounter(te.length),fe=a.reportProgress(ae),ue=o.configuration.get("nmMode"),me={value:ue},he=o.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${dG(o.configuration)}/v1`:null;if(Be&&!await oe.existsPromise(Be)){await oe.mkdirpPromise(Be);for(let g=0;g<256;g++)await oe.mkdirPromise(z.join(Be,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!V.has(g.srcDir))&&(V.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:he,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(x),x.length=0;for(let g of te){let Ee=V.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await R(Ee,g.dstDir,{nmMode:me})}await Promise.all(x),await oe.mkdirPromise(A,{recursive:!0});let we=await y1t(e,v,o.cwd,{loadManifest:n});await C1t(h,we,o.cwd,he),await h1t(o,e,we,me,{installChangedByUser:I}),ue=="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{fe.stop()}}async function C1t(t,e,r,o){for(let a of t.keys()){if(z.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=z.join(a,Pi,BQ);await oe.removePromise(n)}}for(let[a,n]of e){if(z.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=z.join(a,Pi,BQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(z.join(u,p)),process.platform==="win32"&&await oe.removePromise(z.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=z.join(u,p);E!==h&&(process.platform==="win32"?await(0,A1e.default)(le.fromPortablePath(h),le.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await gG(h,I,o),z.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();iA();var cv=class extends b0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new mG(r)}},mG=class extends mm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=XIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let x=W.parseLocator(v.locator),C=W.stringifyIdent(x);C===I?A.set(I,x.reference):A.set(I,[C,x.reference])},h=z.join(this.opts.project.cwd,dr.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 I of E.dirList){let v=z.join(h,I),x=n.get(v);if(typeof x>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in x)p(I,x);else for(let C of x.dirList){let R=z.join(v,C),N=n.get(R);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${I}/${C}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var w1t={hooks:{cleanGlobalArtifacts:async t=>{let e=dG(t);await oe.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:[lv,cv]},I1t=w1t;var dj={};zt(dj,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>ml,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>$n,npmHttpUtils:()=>Zr,npmPublishUtils:()=>ow});Ye();var P1e=$e(Jn());var Wn="npm:";var Zr={};zt(Zr,{AuthType:()=>B1e,customPackageError:()=>ym,del:()=>T1t,get:()=>Em,getIdentUrl:()=>DQ,getPackageMetadata:()=>VC,handleInvalidAuthenticationError:()=>Q0,post:()=>F1t,put:()=>R1t});Ye();Ye();Pt();var wG=$e(f2()),w1e=$e(D_()),I1e=$e(Jn());var $n={};zt($n,{RegistryType:()=>E1e,getAuditRegistry:()=>B1t,getAuthConfiguration:()=>CG,getDefaultRegistry:()=>uv,getPublishRegistry:()=>v1t,getRegistryConfiguration:()=>C1e,getScopeConfiguration:()=>EG,getScopeRegistry:()=>KC,normalizeRegistry:()=>ac});var E1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(E1e||{});function ac(t){return t.replace(/\/$/,"")}function B1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function v1t(t,{configuration:e}){return t.publishConfig?.registry?ac(t.publishConfig.registry):t.name?KC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function KC(t,{configuration:e,type:r="npmRegistryServer"}){let o=EG(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):ac(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return ac(r!==null?r:t.get("npmRegistryServer"))}function C1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=ac(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function EG(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function CG(t,{configuration:e,ident:r}){let o=r&&EG(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:C1e(t,{configuration:e})||e}var B1e=(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))(B1e||{});async function Q0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(SQ(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 N1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function ym(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 ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var v1e=new Map,D1t=new Map;async function P1t(t){return await _e.getFactoryWithDefault(v1e,t,async()=>{let e=null;try{e=await oe.readJsonPromise(t)}catch{}return e})}async function S1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await _e.getFactoryWithDefault(D1t,t,async()=>await Em(DQ(e),{...A,customErrorMessage:ym,configuration:r,registry:a,ident:e,headers:{...n,["If-None-Match"]:o?.etag,["If-Modified-Since"]:o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=b1t(JSON.parse(h.body.toString())),I={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return v1e.set(t,Promise.resolve(I)),Promise.resolve().then(async()=>{let v=`${t}-${process.pid}.tmp`;await oe.mkdirPromise(z.dirname(v),{recursive:!0}),await oe.writeJsonPromise(v,I,{compact:!0}),await oe.renamePromise(v,t)}).catch(()=>{}),{...h,body:E}}}))}async function VC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=k1t(A,o),h=z.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await P1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let R=W.makeLocator(t,`npm:${C}`),N=e.getLocatorMirrorPath(R);(!N||!oe.existsSync(N))&&(delete I.versions[C],v.add(C))}let x=I["dist-tags"].latest;if(v.has(x)){let C=Object.keys(E.metadata.versions).sort(I1e.default.compare),R=C.indexOf(x);for(;v.has(C[R])&&R>=0;)R-=1;R>=0?I["dist-tags"].latest=C[R]:delete I["dist-tags"].latest}}return I}}return await S1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var D1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,w1e.default)(r,D1e)]))}}var x1t=wn.makeHash(...D1e).slice(0,6);function k1t(t,e){let r=Q1t(t),o=new URL(e);return z.join(r,x1t,o.hostname)}function Q1t(t){return z.join(t.get("globalFolder"),"metadata/npm")}async function Em(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await PQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await nn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await Q0(p,{registry:n,configuration:e,headers:r}),p}}async function F1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await PQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...zC(p)});try{return await nn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!SQ(I)||p)throw await Q0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...zC(p)};try{return await nn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await Q0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await PQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...zC(p)});try{return await nn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!SQ(I))throw await Q0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...zC(p)};try{return await nn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await Q0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function T1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await PQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...zC(A)});try{return await nn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!SQ(E)||A)throw await Q0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await IG(E,{configuration:r});let I={...o,...zC(A)};try{return await nn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await Q0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return KC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return ac(r)}async function PQ(t,{authType:e=2,configuration:r,ident:o}){let a=CG(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new Jt(33,"No authentication configured for request");return null}function L1t(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 N1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function IG(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Lt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Vi.openUrl){let{openNow:u}=await(0,wG.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Vi.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(` +`;for(let[F,N]of x){let U=z.relative(z.join(v,Di),N);n+=` ${JSON.stringify(F)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=z.join(p,Di,h1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function fG(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=z.join(r,Di,h1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>p1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(x=>z.join(r,x)),v=E.bin;if(v)for(let[x,C]of Object.entries(v)){let F=z.join(r,ue.toPortablePath(x)),N=He.getMapWithDefault(p,F);for(let[U,V]of Object.entries(C))N.set(U,ue.toPortablePath([F,Di,V].join(z.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let x of E.aliases){let{scope:C,name:F}=j.parseLocator(h),N=j.makeLocator(j.makeIdent(C,F),x),U=j.stringifyLocator(N);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:g1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var jC=async(t,e)=>{if(t.split(z.sep).indexOf(Di)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=z.join(t,o.name);o.isDirectory()?(o.name!==Di||e&&e.innerLoop)&&await jC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},c1e=4,PQ=(t,{skipPrefix:e})=>{let r=z.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(z.sep).filter(p=>p!==""),a=o.indexOf(Di),n=o.slice(0,a).join(z.sep),u=z.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},g1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&z.contains(e,n.target)!==null){let A=He.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=He.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(z.relative(z.dirname(e),t),e)};async function d1e(t,e,r){let o=z.join(t,`${pG.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function m1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===m1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=z.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(m1e||{}),y1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=z.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),x=new Map;for(let C of v){let F=z.join(E,C.name),N,U=z.join(I,C.name);if(C.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let V=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=V}}else if(C.isDirectory())N={kind:"directory"};else if(C.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(x.set(F,N),C.isDirectory()&&F!==Di){let V=await A(F);for(let[te,le]of V)x.set(te,le)}}return x},p;if(a.value==="hardlinks-global"&&o&&u){let E=z.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=z.join(e,E),x=z.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(x,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await m1t({srcPath:v,dstPath:x,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await gG(z.resolve(z.dirname(x),I.symlinkTo),x,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=z.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await d1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function E1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,x)=>{let C=!0,F=z.join(h,E),N=new Set;if(E===Di||E.startsWith("@")){let V;try{V=oe.statSync(F)}catch{}C=!!V,V?V.mtimeMs>r?(A=!0,N=new Set(oe.readdirSync(F))):N=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=z.join(h,Di,vQ),ae;try{ae=oe.statSync(le)}catch{}if(!ae)A=!0;else if(ae.mtimeMs>r){A=!0;let ce=new Set(oe.readdirSync(le)),Ce=new Map;n.set(h,Ce);for(let[de,Ie]of te)ce.has(de)&&Ce.set(de,Ie)}else n.set(h,te)}}else C=x.has(E);let U=I.children.get(E);if(C){let{linkType:V,locator:te}=U,le={children:new Map,linkType:V,locator:te};if(v.children.set(E,le),te){let ae=He.getSetWithDefault(u,te);ae.add(F),u.set(te,ae)}for(let ae of U.children.keys())p(F,ae,U,le,N)}else U.locator&&o.storedBuildState.delete(j.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,x={children:new Map,linkType:I,locator:v};if(a.set(h,x),v){let C=He.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Di)&&p(h,Di,E,x,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function y1e(t){let e=j.parseDescriptor(t);return j.isVirtualDescriptor(e)&&(e=j.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function C1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=y1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let x=z.join(p[0],v);v!==""&&oe.existsSync(x)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=z.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[x,C]of v){let F=z.join(A,ue.toPortablePath(C));E.set(x,F)}for(let[x,C]of h.children){let F=z.join(A,x),N=u(F,F,C);N.size>0&&n.set(A,new Map([...n.get(A)||new Map,...N]))}}else for(let[v,x]of h.children){let C=u(z.join(A,v),p,x);for(let[F,N]of C)E.set(F,N)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var u1e=(t,e)=>{if(!t||!e)return t===e;let r=j.parseLocator(t);j.isVirtualLocator(r)&&(r=j.devirtualizeLocator(r));let o=j.parseLocator(e);return j.isVirtualLocator(o)&&(o=j.devirtualizeLocator(o)),j.areLocatorsEqual(r,o)};function dG(t){return z.join(t.get("globalFolder"),"store")}async function w1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=z.join(o.cwd,Di),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=E1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=g1e(e,{skipPrefix:o.cwd}),x=[],C=async({srcDir:Ie,dstDir:Ee,linkType:g,globalHardlinksStore:me,nmMode:De,windowsLinkType:he,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(z.dirname(Ee),{recursive:!0}),await gG(z.resolve(Ie),Ee,he)):await y1t(Ee,Ie,{baseFs:r,globalHardlinksStore:me,nmMode:De,windowsLinkType:he,packageChecksum:ne})}catch(Be){throw Be.message=`While persisting ${Ie} -> ${Ee} ${Be.message}`,Be}finally{le.tick()}})().then(()=>x.splice(x.indexOf(ee),1));x.push(ee),x.length>c1e&&await Promise.race(x)},F=async(Ie,Ee,g)=>{let me=(async()=>{let De=async(he,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Be=await oe.readdirPromise(he,{withFileTypes:!0});for(let Te of Be){if(!ee.innerLoop&&Te.name===vQ)continue;let ht=z.join(he,Te.name),H=z.join(ne,Te.name);Te.isDirectory()?(Te.name!==Di||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):Ce.value==="hardlinks-local"||Ce.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,f1e.default.constants.COPYFILE_FICLONE)}}catch(Be){throw ee.innerLoop||(Be.message=`While cloning ${he} -> ${ne} ${Be.message}`),Be}finally{ee.innerLoop||le.tick()}};await De(Ie,Ee,g)})().then(()=>x.splice(x.indexOf(me),1));x.push(me),x.length>c1e&&await Promise.race(x)},N=async(Ie,Ee,g)=>{if(g)for(let[me,De]of Ee.children){let he=g.children.get(me);await N(z.join(Ie,me),De,he)}else{Ee.children.has(Di)&&await jC(z.join(Ie,Di),{contentsOnly:!1});let me=z.basename(Ie)===Di&&v.has(z.join(z.dirname(Ie),z.sep));await jC(Ie,{contentsOnly:Ie===A,allowSymlink:me})}};for(let[Ie,Ee]of p){let g=v.get(Ie);for(let[me,De]of Ee.children){if(me===".")continue;let he=g&&g.children.get(me),ne=z.join(Ie,me);await N(ne,De,he)}}let U=async(Ie,Ee,g)=>{if(g){u1e(Ee.locator,g.locator)||await jC(Ie,{contentsOnly:Ee.linkType==="HARD"});for(let[me,De]of Ee.children){let he=g.children.get(me);await U(z.join(Ie,me),De,he)}}else{Ee.children.has(Di)&&await jC(z.join(Ie,Di),{contentsOnly:!0});let me=z.basename(Ie)===Di&&v.has(z.join(z.dirname(Ie),z.sep));await jC(Ie,{contentsOnly:Ee.linkType==="HARD",allowSymlink:me})}};for(let[Ie,Ee]of v){let g=p.get(Ie);for(let[me,De]of Ee.children){if(me===".")continue;let he=g&&g.children.get(me);await U(z.join(Ie,me),De,he)}}let V=new Map,te=[];for(let[Ie,Ee]of E)for(let g of Ee){let{locationRoot:me,segments:De}=PQ(g,{skipPrefix:o.cwd}),he=v.get(me),ne=me;if(he){for(let ee of De)if(ne=z.join(ne,ee),he=he.children.get(ee),!he)break;if(he){let ee=u1e(he.locator,Ie),Be=e.get(he.locator),Te=Be.target,ht=ne,H=Be.linkType;if(ee)V.has(Te)||V.set(Te,ht);else if(Te!==ht){let at=j.parseLocator(he.locator);j.isVirtualLocator(at)&&(at=j.devirtualizeLocator(at)),te.push({srcDir:Te,dstDir:ht,linkType:H,realLocatorHash:at.locatorHash})}}}}for(let[Ie,{locations:Ee}]of e.entries())for(let g of Ee){let{locationRoot:me,segments:De}=PQ(g,{skipPrefix:o.cwd}),he=p.get(me),ne=v.get(me),ee=me,Be=e.get(Ie),Te=j.parseLocator(Ie);j.isVirtualLocator(Te)&&(Te=j.devirtualizeLocator(Te));let ht=Te.locatorHash,H=Be.target,at=g;if(H===at)continue;let Re=Be.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!he)te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=z.join(ee,Qe),he=he.children.get(Qe),!he){te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),ae=a.reportProgress(le),ce=o.configuration.get("nmMode"),Ce={value:ce},de=o.configuration.get("winLinkType");try{let Ie=Ce.value==="hardlinks-global"?`${dG(o.configuration)}/v1`:null;if(Ie&&!await oe.existsPromise(Ie)){await oe.mkdirpPromise(Ie);for(let g=0;g<256;g++)await oe.mkdirPromise(z.join(Ie,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!V.has(g.srcDir))&&(V.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:Ie,nmMode:Ce,windowsLinkType:de,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(x),x.length=0;for(let g of te){let me=V.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==me&&await F(me,g.dstDir,{nmMode:Ce})}await Promise.all(x),await oe.mkdirPromise(A,{recursive:!0});let Ee=await C1t(e,v,o.cwd,{loadManifest:n});await I1t(h,Ee,o.cwd,de),await d1t(o,e,Ee,Ce,{installChangedByUser:I}),ce=="hardlinks-global"&&Ce.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{ae.stop()}}async function I1t(t,e,r,o){for(let a of t.keys()){if(z.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=z.join(a,Di,vQ);await oe.removePromise(n)}}for(let[a,n]of e){if(z.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=z.join(a,Di,vQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(z.join(u,p)),process.platform==="win32"&&await oe.removePromise(z.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=z.join(u,p);E!==h&&(process.platform==="win32"?await(0,A1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await gG(h,I,o),z.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Dt();iA();var uv=class extends b0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new mG(r)}},mG=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=XIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=XB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let x=j.parseLocator(v.locator),C=j.stringifyIdent(x);C===I?A.set(I,x.reference):A.set(I,[C,x.reference])},h=z.join(this.opts.project.cwd,dr.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 I of E.dirList){let v=z.join(h,I),x=n.get(v);if(typeof x>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in x)p(I,x);else for(let C of x.dirList){let F=z.join(v,C),N=n.get(F);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${I}/${C}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var B1t={hooks:{cleanGlobalArtifacts:async t=>{let e=dG(t);await oe.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:[cv,uv]},v1t=B1t;var dj={};zt(dj,{NpmHttpFetcher:()=>pv,NpmRemapResolver:()=>hv,NpmSemverFetcher:()=>ml,NpmSemverResolver:()=>gv,NpmTagResolver:()=>dv,default:()=>Uvt,npmConfigUtils:()=>$n,npmHttpUtils:()=>Zr,npmPublishUtils:()=>iw});Ye();var D1e=Ze(Jn());var Wn="npm:";var Zr={};zt(Zr,{AuthType:()=>B1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>DQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>Q0,post:()=>T1t,put:()=>L1t});Ye();Ye();Dt();var wG=Ze(p2()),w1e=Ze(P_()),I1e=Ze(Jn());var $n={};zt($n,{RegistryType:()=>E1e,getAuditRegistry:()=>P1t,getAuthConfiguration:()=>CG,getDefaultRegistry:()=>Av,getPublishRegistry:()=>D1t,getRegistryConfiguration:()=>C1e,getScopeConfiguration:()=>EG,getScopeRegistry:()=>YC,normalizeRegistry:()=>ac});var E1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(E1e||{});function ac(t){return t.replace(/\/$/,"")}function P1t({configuration:t}){return Av({configuration:t,type:"npmAuditRegistry"})}function D1t(t,{configuration:e}){return t.publishConfig?.registry?ac(t.publishConfig.registry):t.name?YC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):Av({configuration:e,type:"npmPublishRegistry"})}function YC(t,{configuration:e,type:r="npmRegistryServer"}){let o=EG(t,{configuration:e});if(o===null)return Av({configuration:e,type:r});let a=o.get(r);return a===null?Av({configuration:e,type:r}):ac(a)}function Av({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return ac(r!==null?r:t.get("npmRegistryServer"))}function C1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=ac(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function EG(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function CG(t,{configuration:e,ident:r}){let o=r&&EG(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:C1e(t,{configuration:e})||e}var B1e=(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))(B1e||{});async function Q0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new Jt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new Jt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(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 ${fe.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var v1e=new Map,S1t=new Map;async function b1t(t){return await He.getFactoryWithDefault(v1e,t,async()=>{let e=null;try{e=await oe.readJsonPromise(t)}catch{}return e})}async function x1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await He.getFactoryWithDefault(S1t,t,async()=>await ym(DQ(e),{...A,customErrorMessage:mm,configuration:r,registry:a,ident:e,headers:{...n,["If-None-Match"]:o?.etag,["If-Modified-Since"]:o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=k1t(JSON.parse(h.body.toString())),I={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return v1e.set(t,Promise.resolve(I)),Promise.resolve().then(async()=>{let v=`${t}-${process.pid}.tmp`;await oe.mkdirPromise(z.dirname(v),{recursive:!0}),await oe.writeJsonPromise(v,I,{compact:!0}),await oe.renamePromise(v,t)}).catch(()=>{}),{...h,body:E}}}))}async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=fv(A,{ident:t,registry:o});let p=R1t(A,o),h=z.join(p,`${j.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await b1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let F=j.makeLocator(t,`npm:${C}`),N=e.getLocatorMirrorPath(F);(!N||!oe.existsSync(N))&&(delete I.versions[C],v.add(C))}let x=I["dist-tags"].latest;if(v.has(x)){let C=Object.keys(E.metadata.versions).sort(I1e.default.compare),F=C.indexOf(x);for(;v.has(C[F])&&F>=0;)F-=1;F>=0?I["dist-tags"].latest=C[F]:delete I["dist-tags"].latest}}return I}}return await x1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var P1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function k1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,w1e.default)(r,P1e)]))}}var Q1t=wn.makeHash(...P1e).slice(0,6);function R1t(t,e){let r=F1t(t),o=new URL(e);return z.join(r,Q1t,o.hostname)}function F1t(t){return z.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=fv(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await SQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await sn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await Q0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=fv(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...WC(p)});try{return await sn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await Q0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...WC(p)};try{return await sn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await Q0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function L1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=fv(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...WC(p)});try{return await sn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await Q0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...WC(p)};try{return await sn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await Q0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=fv(r,{ident:a,registry:u});let h=await SQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...WC(A)});try{return await sn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await Q0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await IG(E,{configuration:r});let I={...o,...WC(A)};try{return await sn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await Q0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function fv(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return YC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return ac(r)}async function SQ(t,{authType:e=2,configuration:r,ident:o}){let a=CG(t,{configuration:r,ident:o}),n=O1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new Jt(33,"No authentication configured for request");return null}function O1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await sn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function IG(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Ft.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,fe.pretty(e,"$1",fe.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,wG.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` `)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,wG.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),o}function SQ(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 zC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!P1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Em(o.__archiveUrl,{customErrorMessage:ym,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=$e(Jn());var ml=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await Em(ml.getLocatorUrl(e),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}catch{o=await Em(ml.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=KC(e.scope,{configuration:o}),n=ml.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=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var BG=$e(Jn());var bQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!BG.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await VC(e,{cache:o.fetchOptions?.cache,project:o.project,version:BG.default.valid(a.raw)?a.raw:void 0}),u=_e.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return _e.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return ml.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:_e.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return _e.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return _e.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:_e.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await VC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new Jt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(bQ.identHash)&&!u.peerDependencies.has(bQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(bQ.identHash,W.makeDescriptor(bQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var b1e=$e(Jn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!FE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await VC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new Jt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new Jt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return ml.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!b1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var ow={};zt(ow,{getGitHead:()=>Lvt,getPublishAccess:()=>mBe,getReadmeContent:()=>yBe,makePublishBody:()=>Tvt});Ye();Ye();Pt();var Aj={};zt(Aj,{PackCommand:()=>_0,default:()=>dvt,packUtils:()=>wA});Ye();Ye();Ye();Pt();qt();var wA={};zt(wA,{genPackList:()=>XQ,genPackStream:()=>uj,genPackageManifest:()=>sBe,hasPackScripts:()=>lj,prepareForPack:()=>cj});Ye();Pt();var aj=$e(Zo()),nBe=$e($2e()),iBe=ve("zlib"),svt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],ovt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function lj(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function cj(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=z.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function uj(t,e){typeof e>"u"&&(e=await XQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(z.normalize(n));for(let n of t.manifest.bin.values())r.add(z.normalize(n));let o=nBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=z.normalize(n),A=z.resolve(t.cwd,u),p=z.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,x,C=new Promise((N,U)=>{v=N,x=U}),R=N=>{N?x(N):v()};if(h.isFile()){let N;u==="package.json"?N=Buffer.from(JSON.stringify(await sBe(t),null,2)):N=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},N,R)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},R):R(new Error(`Unsupported file type ${h.mode} for ${le.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,iBe.createGzip)();return o.pipe(a),a}async function sBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function XQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of ovt)o.reject.push(I);for(let I of svt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=z.relative(t.cwd,I),x=z.resolve(Bt.root,v);o.reject.push(x)};a(z.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=z.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(z.resolve(Bt.root,u)),A!=null&&n.accept.push(z.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(z.resolve(Bt.root,p));for(let I of h.values())n.accept.push(z.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(z.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(z.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)oBe(n.accept,I,{cwd:Bt.root})}return await avt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function avt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new Hu(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!tBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let R of E)I=I||R===".gitignore",v=v||R===".npmignore";let x=v?await eBe(n,A,".npmignore"):I?await eBe(n,A,".gitignore"):null,C=x!==null?[x].concat(p):p;tBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)u.push([z.resolve(A,R),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(z.relative(Bt.root,A))}return a.sort()}async function eBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(z.join(e,r),"utf8");for(let n of a.split(/\n/g))oBe(o.reject,n,{cwd:e});return o}function lvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=z.resolve(e,t)),r&&(t=`!${t}`),t}function oBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(lvt(o,{cwd:r}))}function tBe(t,{globalList:e,ignoreLists:r}){let o=JQ(t,e.accept);if(o!==0)return o===2;let a=JQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=JQ(t,n.accept);if(u!==0)return u===2;let A=JQ(t,n.reject);if(A!==0)return A===1}return!1}function JQ(t,e){let r=e,o=[];for(let a=0;a{await cj(a,{report:p},async()=>{p.reportJson({base:le.fromPortablePath(a.cwd)});let h=await XQ(a);for(let E of h)p.reportInfo(null,le.fromPortablePath(E)),p.reportJson({location:le.fromPortablePath(E)});if(!this.dryRun){let E=await uj(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:le.fromPortablePath(u)}))})).exitCode()}};_0.paths=[["pack"]],_0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function cvt(t,{workspace:e}){let r=t.replace("%s",uvt(e)).replace("%v",Avt(e));return le.toPortablePath(r)}function uvt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function Avt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var fvt=["dependencies","devDependencies","peerDependencies"],pvt="workspace:",hvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of fvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===pvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new Jt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},gvt={hooks:{beforeWorkspacePacking:hvt},commands:[_0]},dvt=gvt;var gBe=ve("crypto"),dBe=$e(hBe());async function Tvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,gBe.createHash)("sha1").update(e).digest("hex"),E=dBe.default.fromData(e).toString(),I=r??mBe(t,u),v=await yBe(t),x=await wA.genPackageManifest(t),C=`${p}-${A}.tgz`,R=new URL(`${ac(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...x,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:R.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function mBe(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 yBe(t){let e=le.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} -`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var gj={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}},EBe={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"}},Nvt={configuration:{...gj,...EBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...gj,...EBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:ac,valueDefinition:{description:"",type:"SHAPE",properties:{...gj}}}},fetchers:[fv,ml],resolvers:[pv,hv,gv]},Ovt=Nvt;var Dj={};zt(Dj,{NpmAuditCommand:()=>q0,NpmInfoCommand:()=>G0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>Y0,NpmPublishCommand:()=>W0,NpmTagAddCommand:()=>z0,NpmTagListCommand:()=>K0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>J0,default:()=>jvt,npmAuditTypes:()=>Rv,npmAuditUtils:()=>ZQ});Ye();Ye();qt();var wj=$e(Zo());$a();var Rv={};zt(Rv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var ZQ={};zt(ZQ,{allSeverities:()=>aw,getPackages:()=>Cj,getReportTree:()=>yj,getSeverityInclusions:()=>mj,getTopLevelDependencies:()=>Ej});Ye();var CBe=$e(Jn());var aw=["info","low","moderate","high","critical"];function mj(t){if(typeof t>"u")return new Set(aw);let e=aw.indexOf(t),r=aw.slice(e);return new Set(r)}function yj(t){let e={},r={children:e};for(let[o,a]of _e.sortMap(Object.entries(t),n=>n[0]))for(let n of _e.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(CBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:_e.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function Ej(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function Cj(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),x=_e.getMapWithDefault(o,v);_e.getArrayWithDefault(x,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var q0=class extends ut{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:Ks(Qv)});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:Ks(Fv)});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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=Ej(o,a,{all:this.all,environment:this.environment}),u=Cj(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of u)A.some(V=>wj.default.isMatch(N,V))||(p[N]=[...U.keys()]);let h=$n.getAuditRegistry({configuration:r}),E,I=await fA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=Zr.post("/-/npm/v1/security/advisories/bulk",p,{authType:Zr.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,ae])=>{let fe=await Zr.getPackageMetadata(W.parseIdent(te),{project:o});return _e.mapAndFilter(ae,ue=>{let{deprecated:me}=fe.versions[ue];return me?[te,ue,me]:_e.mapAndFilter.skip})})),V=await N;for(let[te,ae,fe]of U.flat(1))Object.hasOwn(V,te)&&V[te].some(ue=>kr.satisfiesWithPrereleases(ae,ue.vulnerable_versions))||(V[te]??=[],V[te].push({id:`${te} (deprecation)`,title:fe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ae}));E=V});if(I.hasErrors())return I.exitCode();let v=mj(this.severity),x=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[N,U]of Object.entries(E)){let V=U.filter(te=>!wj.default.isMatch(`${te.id}`,x)&&v.has(te.severity));V.length>0&&(C[N]=V.map(te=>{let ae=u.get(N);if(typeof ae>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let fe=[...ae.keys()].filter(me=>kr.satisfiesWithPrereleases(me,te.vulnerable_versions)),ue=new Map;for(let me of fe)for(let he of ae.get(me))ue.set(he.locatorHash,he);return{...te,versions:fe,dependents:[...ue.values()]}}))}let R=Object.keys(C).length>0;return R?($s.emitTree(yj(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportInfo(1,"No audit suggestions")}),R?1:0)}};q0.paths=[["npm","audit"]],q0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` +`),o}function bQ(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 WC(t){return{["npm-otp"]:t}}var pv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=j.parseRange(e.reference);return!(!D1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=j.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Zi.convertToZip(a,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1})}};Ye();var hv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!j.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(j.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(j.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(j.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=Ze(Jn());var ml=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(ml.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(ml.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Zi.convertToZip(o,{configuration:r.project.configuration,prefixPath:j.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=YC(e.scope,{configuration:o}),n=ml.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=Lr.clean(e.reference.slice(Wn.length));if(r===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var BG=Ze(Jn());var xQ=j.makeIdent(null,"node-gyp"),U1t=/\b(node-gyp|prebuild-install)\b/,gv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!Lr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=j.parseRange(e.reference);return!!BG.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=Lr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:BG.default.valid(a.raw)?a.raw:void 0}),u=He.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new Lr.SemVer(h);if(a.test(E))return E}catch{}return He.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=j.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return ml.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:j.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=Lr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:He.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return He.mapAndFilter.skip;let h=j.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return He.mapAndFilter.skip;let E=new Lr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:He.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=j.parseRange(e.reference),a=Lr.clean(o);if(a===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new Jt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(xQ.identHash)&&!u.peerDependencies.has(xQ.identHash)){for(let A of u.scripts.values())if(A.match(U1t)){u.dependencies.set(xQ.identHash,j.makeDescriptor(xQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var b1e=Ze(Jn());var dv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!kE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new Jt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new Jt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=j.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return ml.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[j.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=j.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!b1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=j.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(j.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var iw={};zt(iw,{getGitHead:()=>Ovt,getPublishAccess:()=>mBe,getReadmeContent:()=>yBe,makePublishBody:()=>Nvt});Ye();Ye();Dt();var Aj={};zt(Aj,{PackCommand:()=>_0,default:()=>yvt,packUtils:()=>wA});Ye();Ye();Ye();Dt();qt();var wA={};zt(wA,{genPackList:()=>ZQ,genPackStream:()=>uj,genPackageManifest:()=>sBe,hasPackScripts:()=>lj,prepareForPack:()=>cj});Ye();Dt();var aj=Ze(Xo()),nBe=Ze($2e()),iBe=ve("zlib"),avt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],lvt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function lj(t){return!!(An.hasWorkspaceScript(t,"prepack")||An.hasWorkspaceScript(t,"postpack"))}async function cj(t,{report:e},r){await An.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=z.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await An.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function uj(t,e){typeof e>"u"&&(e=await ZQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(z.normalize(n));for(let n of t.manifest.bin.values())r.add(z.normalize(n));let o=nBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=z.normalize(n),A=z.resolve(t.cwd,u),p=z.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,x,C=new Promise((N,U)=>{v=N,x=U}),F=N=>{N?x(N):v()};if(h.isFile()){let N;u==="package.json"?N=Buffer.from(JSON.stringify(await sBe(t),null,2)):N=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},N,F)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},F):F(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,iBe.createGzip)();return o.pipe(a),a}async function sBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function ZQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of lvt)o.reject.push(I);for(let I of avt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=z.relative(t.cwd,I),x=z.resolve(Bt.root,v);o.reject.push(x)};a(z.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=z.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(z.resolve(Bt.root,u)),A!=null&&n.accept.push(z.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(z.resolve(Bt.root,p));for(let I of h.values())n.accept.push(z.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(z.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(z.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)oBe(n.accept,I,{cwd:Bt.root})}return await cvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function cvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new Hu(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!tBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let F of E)I=I||F===".gitignore",v=v||F===".npmignore";let x=v?await eBe(n,A,".npmignore"):I?await eBe(n,A,".gitignore"):null,C=x!==null?[x].concat(p):p;tBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let F of E)u.push([z.resolve(A,F),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(z.relative(Bt.root,A))}return a.sort()}async function eBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(z.join(e,r),"utf8");for(let n of a.split(/\n/g))oBe(o.reject,n,{cwd:e});return o}function uvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=z.resolve(e,t)),r&&(t=`!${t}`),t}function oBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(uvt(o,{cwd:r}))}function tBe(t,{globalList:e,ignoreLists:r}){let o=XQ(t,e.accept);if(o!==0)return o===2;let a=XQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=XQ(t,n.accept);if(u!==0)return u===2;let A=XQ(t,n.reject);if(A!==0)return A===1}return!1}function XQ(t,e){let r=e,o=[];for(let a=0;a{await cj(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await ZQ(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await uj(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${fe.pretty(r,u,fe.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};_0.paths=[["pack"]],_0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function Avt(t,{workspace:e}){let r=t.replace("%s",fvt(e)).replace("%v",pvt(e));return ue.toPortablePath(r)}function fvt(t){return t.manifest.name!==null?j.slugifyIdent(t.manifest.name):"package"}function pvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var hvt=["dependencies","devDependencies","peerDependencies"],gvt="workspace:",dvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of hvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=j.parseRange(a.range);if(u.protocol===gvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new Jt(21,`${j.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;j.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?j.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][j.stringifyIdent(a)]=A}}},mvt={hooks:{beforeWorkspacePacking:dvt},commands:[_0]},yvt=mvt;var gBe=ve("crypto"),dBe=Ze(hBe());async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=j.stringifyIdent(u),h=(0,gBe.createHash)("sha1").update(e).digest("hex"),E=dBe.default.fromData(e).toString(),I=r??mBe(t,u),v=await yBe(t),x=await wA.genPackageManifest(t),C=`${p}-${A}.tgz`,F=new URL(`${ac(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...x,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:F.toString()}}},readme:v}}async function Ovt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function mBe(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 yBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${j.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var gj={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}},EBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...gj,...EBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...gj,...EBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:ac,valueDefinition:{description:"",type:"SHAPE",properties:{...gj}}}},fetchers:[pv,ml],resolvers:[hv,gv,dv]},Uvt=Mvt;var Pj={};zt(Pj,{NpmAuditCommand:()=>q0,NpmInfoCommand:()=>G0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>Y0,NpmPublishCommand:()=>W0,NpmTagAddCommand:()=>z0,NpmTagListCommand:()=>K0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>J0,default:()=>Wvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>$Q});Ye();Ye();qt();var wj=Ze(Xo());$a();var Tv={};zt(Tv,{Environment:()=>Rv,Severity:()=>Fv});var Rv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Rv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var $Q={};zt($Q,{allSeverities:()=>sw,getPackages:()=>Cj,getReportTree:()=>yj,getSeverityInclusions:()=>mj,getTopLevelDependencies:()=>Ej});Ye();var CBe=Ze(Jn());var sw=["info","low","moderate","high","critical"];function mj(t){if(typeof t>"u")return new Set(sw);let e=sw.indexOf(t),r=sw.slice(e);return new Set(r)}function yj(t){let e={},r={children:e};for(let[o,a]of He.sortMap(Object.entries(t),n=>n[0]))for(let n of He.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:fe.tuple(fe.Type.IDENT,j.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:fe.tuple(fe.Type.ID,n.id)},Issue:{label:"Issue",value:fe.tuple(fe.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:fe.tuple(fe.Type.URL,n.url)},Severity:{label:"Severity",value:fe.tuple(fe.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:fe.tuple(fe.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(CBe.default.compare).map(u=>({value:fe.tuple(fe.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:He.sortMap(n.dependents,u=>j.stringifyLocator(u)).map(u=>({value:fe.tuple(fe.Type.LOCATOR,u)}))}}};return r}function Ej(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function Cj(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(j.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=j.stringifyIdent(E),x=He.getMapWithDefault(o,v);He.getArrayWithDefault(x,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var q0=class extends ut{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:Vs(Rv)});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:Vs(Fv)});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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=Ej(o,a,{all:this.all,environment:this.environment}),u=Cj(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of u)A.some(V=>wj.default.isMatch(N,V))||(p[N]=[...U.keys()]);let h=$n.getAuditRegistry({configuration:r}),E,I=await fA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=Zr.post("/-/npm/v1/security/advisories/bulk",p,{authType:Zr.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let ae=await Zr.getPackageMetadata(j.parseIdent(te),{project:o});return He.mapAndFilter(le,ce=>{let{deprecated:Ce}=ae.versions[ce];return Ce?[te,ce,Ce]:He.mapAndFilter.skip})})),V=await N;for(let[te,le,ae]of U.flat(1))Object.hasOwn(V,te)&&V[te].some(ce=>Lr.satisfiesWithPrereleases(le,ce.vulnerable_versions))||(V[te]??=[],V[te].push({id:`${te} (deprecation)`,title:ae.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=V});if(I.hasErrors())return I.exitCode();let v=mj(this.severity),x=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[N,U]of Object.entries(E)){let V=U.filter(te=>!wj.default.isMatch(`${te.id}`,x)&&v.has(te.severity));V.length>0&&(C[N]=V.map(te=>{let le=u.get(N);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let ae=[...le.keys()].filter(Ce=>Lr.satisfiesWithPrereleases(Ce,te.vulnerable_versions)),ce=new Map;for(let Ce of ae)for(let de of le.get(Ce))ce.set(de.locatorHash,de);return{...te,versions:ae,dependents:[...ce.values()]}}))}let F=Object.keys(C).length>0;return F?(fs.emitTree(yj(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ft.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportInfo(1,"No audit suggestions")}),F?1:0)}};q0.paths=[["npm","audit"]],q0.usage=nt.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 ${aw.map(r=>`\`${r}\``).join(", ")}. + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${sw.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. @@ -691,32 +691,32 @@ ${xe.map(qe=>`Not found: ${lu(qe)} 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"]]});Ye();Ye();Pt();qt();var Ij=$e(Jn()),Bj=ve("util"),G0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let ae=o.topLevelWorkspace;if(!ae.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${le.fromPortablePath(z.join(ae.cwd,dr.manifest))}`);E=W.makeDescriptor(ae.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=Zr.getIdentUrl(E),v=vj(await Zr.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:Zr.customPackageError})),x=Object.keys(v.versions).sort(Ij.default.compareLoose),R=v["dist-tags"].latest||x[x.length-1],N=kr.validRange(E.range);if(N){let ae=Ij.default.maxSatisfying(x,N);ae!==null?R=ae:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?R=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[R],V={...v,...U,version:R,versions:x},te;if(a!==null){te={};for(let ae of a){let fe=V[ae];if(typeof fe<"u")te[ae]=fe;else{p.reportWarning(1,`The ${de.pretty(r,ae,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete V.dist,delete V.readme,delete V.users),te=V;p.reportJson(te),this.json||n.push(te)}});Bj.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` + `,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"]]});Ye();Ye();Dt();qt();var Ij=Ze(Jn()),Bj=ve("util"),G0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Ft.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${fe.pretty(r,"name",fe.Type.CODE)} field in ${ue.fromPortablePath(z.join(le.cwd,dr.manifest))}`);E=j.makeDescriptor(le.manifest.name,"unknown")}else E=j.parseDescriptor(h);let I=Zr.getIdentUrl(E),v=vj(await Zr.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:Zr.customPackageError})),x=Object.keys(v.versions).sort(Ij.default.compareLoose),F=v["dist-tags"].latest||x[x.length-1],N=Lr.validRange(E.range);if(N){let le=Ij.default.maxSatisfying(x,N);le!==null?F=le:(p.reportWarning(0,`Unmet range ${j.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?F=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${j.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[F],V={...v,...U,version:F,versions:x},te;if(a!==null){te={};for(let le of a){let ae=V[le];if(typeof ae<"u")te[le]=ae;else{p.reportWarning(1,`The ${fe.pretty(r,le,fe.Type.CODE)} field doesn't exist inside ${j.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete V.dist,delete V.readme,delete V.users),te=V;p.reportJson(te),this.json||n.push(te)}});Bj.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` `),this.context.stdout.write(`${(0,Bj.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return A.exitCode()}};G0.paths=[["npm","info"]],G0.usage=nt.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"]]});function vj(t){if(Array.isArray(t)){let e=[];for(let r of t)r=vj(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=vj(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var wBe=$e(f2()),j0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Lt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await Mvt(o,u,r);return await Uvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.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 function $Q({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?$n.getScopeRegistry(t,{configuration:r,type:$n.RegistryType.PUBLISH_REGISTRY}):t?$n.getScopeRegistry(t,{configuration:r}):e?$n.getPublishRegistry((await fC(r,o)).manifest,{configuration:r}):$n.getDefaultRegistry({configuration:r})}async function Mvt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:Zr.AuthType.NO_AUTH};try{return(await Zr.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:Zr.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await Zr.get(o,u);for(let[E,I]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=I);let p=`${o}/-rev/${a._rev}`;return(await Zr.put(p,a,u)).token}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=_e.isIndexableObject(A)?A:{},h=p[u],E=_e.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,wBe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ye();Ye();qt();var lw=new Set(["npmAuthIdent","npmAuthToken"]),Y0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!$n.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await qvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await IBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish});await IBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};Y0.paths=[["npm","logout"]],Y0.usage=nt.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"]]});function Hvt(t,e){let r=t[e];if(!_e.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...lw].every(n=>!o.has(n)))return!1;for(let n of lw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of lw)delete a[n];return t[e]=a,!0}async function qvt(){let t=e=>{let r=!1,o=_e.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function IBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=_e.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=_e.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...lw].every(p=>!u.has(p)))return r;for(let p of lw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of lw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var W0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=$n.getPublishRegistry(a.manifest,{configuration:r});return(await Lt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await Zr.get(Zr.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await wA.prepareForPack(a,{report:h},async()=>{let E=await wA.genPackList(a);for(let R of E)h.reportInfo(null,R);let I=await wA.genPackStream(a,E),v=await _e.bufferStream(I),x=await ow.getGitHead(a.cwd),C=await ow.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:x});await Zr.put(Zr.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};W0.paths=[["npm","publish"]],W0.usage=nt.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"]]});Ye();qt();var BBe=$e(Jn());Ye();Pt();qt();var K0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new nr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${le.fromPortablePath(z.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Tv(n,r),p={children:_e.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};K0.paths=[["npm","tag","list"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` +`);return A.exitCode()}};G0.paths=[["npm","info"]],G0.usage=nt.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"]]});function vj(t){if(Array.isArray(t)){let e=[];for(let r of t)r=vj(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=vj(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var wBe=Ze(p2()),j0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await eR({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ft.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await qvt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await _vt(o,u,r);return await Hvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.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 function eR({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?$n.getScopeRegistry(t,{configuration:r,type:$n.RegistryType.PUBLISH_REGISTRY}):t?$n.getScopeRegistry(t,{configuration:r}):e?$n.getPublishRegistry((await uC(r,o)).manifest,{configuration:r}):$n.getDefaultRegistry({configuration:r})}async function _vt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:Zr.AuthType.NO_AUTH};try{return(await Zr.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:Zr.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await Zr.get(o,u);for(let[E,I]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=I);let p=`${o}/-rev/${a._rev}`;return(await Zr.put(p,a,u)).token}async function Hvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=He.isIndexableObject(A)?A:{},h=p[u],E=He.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function qvt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${fe.pretty(t,e,fe.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,wBe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ye();Ye();qt();var ow=new Set(["npmAuthIdent","npmAuthToken"]),Y0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await eR({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=j.makeIdent(this.scope??null,"pkg");return!$n.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Ft.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await IBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await eR({configuration:r,cwd:this.context.cwd,publish:this.publish});await IBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};Y0.paths=[["npm","logout"]],Y0.usage=nt.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"]]});function Gvt(t,e){let r=t[e];if(!He.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...ow].every(n=>!o.has(n)))return!1;for(let n of ow)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of ow)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=He.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Gvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function IBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=He.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=He.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...ow].every(p=>!u.has(p)))return r;for(let p of ow)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of ow)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var W0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=$n.getPublishRegistry(a.manifest,{configuration:r});return(await Ft.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await Zr.get(Zr.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await An.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await wA.prepareForPack(a,{report:h},async()=>{let E=await wA.genPackList(a);for(let F of E)h.reportInfo(null,F);let I=await wA.genPackStream(a,E),v=await He.bufferStream(I),x=await iw.getGitHead(a.cwd),C=await iw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:x});await Zr.put(Zr.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};W0.paths=[["npm","publish"]],W0.usage=nt.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"]]});Ye();qt();var BBe=Ze(Jn());Ye();Dt();qt();var K0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=j.parseIdent(this.package);else{if(!a)throw new sr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(z.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Lv(n,r),p={children:He.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:fe.tuple(fe.Type.RESOLUTION,{descriptor:j.makeDescriptor(n,h),locator:j.makeLocator(n,E)})}))};return fs.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};K0.paths=[["npm","tag","list"]],K0.usage=nt.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 function Tv(t,e){let r=`/-/package${Zr.getIdentUrl(t)}/dist-tags`;return Zr.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Zr.customPackageError})}var z0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!BBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=$n.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Lt.start({configuration:r,stdout:this.context.stdout},async v=>{let x=await Tv(n,r);Object.hasOwn(x,this.tag)&&x[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};z0.paths=[["npm","tag","add"]],z0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Lv(t,e){let r=`/-/package${Zr.getIdentUrl(t)}/dist-tags`;return Zr.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Zr.customPackageError})}var z0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);let n=j.parseDescriptor(this.package,!0),u=n.range;if(!BBe.default.valid(u))throw new it(`The range ${fe.pretty(r,n.range,fe.Type.RANGE)} must be a valid semver version`);let A=$n.getPublishRegistry(a.manifest,{configuration:r}),p=fe.pretty(r,n,fe.Type.IDENT),h=fe.pretty(r,u,fe.Type.RANGE),E=fe.pretty(r,this.tag,fe.Type.CODE);return(await Ft.start({configuration:r,stdout:this.context.stdout},async v=>{let x=await Lv(n,r);Object.hasOwn(x,this.tag)&&x[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};z0.paths=[["npm","tag","add"]],z0.usage=nt.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"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=$n.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Tv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Lt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + `,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"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);let n=j.parseIdent(this.package),u=$n.getPublishRegistry(a.manifest,{configuration:r}),A=fe.pretty(r,this.tag,fe.Type.CODE),p=fe.pretty(r,n,fe.Type.IDENT),h=await Lv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Ft.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.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"]]});Ye();Ye();qt();var J0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=$n.getScopeRegistry(this.scope,{configuration:r,type:$n.RegistryType.PUBLISH_REGISTRY}):this.scope?o=$n.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=$n.getPublishRegistry((await fC(r,this.context.cwd)).manifest,{configuration:r}):o=$n.getDefaultRegistry({configuration:r}),(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await Zr.get("/-/whoami",{configuration:r,registry:o,authType:Zr.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};J0.paths=[["npm","whoami"]],J0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var Gvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[q0,G0,j0,Y0,W0,z0,K0,V0,J0]},jvt=Gvt;var Fj={};zt(Fj,{PatchCommand:()=>$0,PatchCommitCommand:()=>Z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Pm});Ye();Ye();Pt();iA();var Pm={};zt(Pm,{applyPatchFile:()=>tF,diffFolders:()=>kj,ensureUnpatchedDescriptor:()=>Pj,ensureUnpatchedLocator:()=>nF,extractPackageToDisk:()=>xj,extractPatchFlags:()=>kBe,isParentRequired:()=>bj,isPatchDescriptor:()=>rF,isPatchLocator:()=>X0,loadPatchFiles:()=>Mv,makeDescriptor:()=>iF,makeLocator:()=>Sj,makePatchHash:()=>Qj,parseDescriptor:()=>Nv,parseLocator:()=>Ov,parsePatchFile:()=>Lv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function cw(t){return z.relative(Bt.root,z.resolve(Bt.root,le.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);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 Kvt=420,zvt=493;var vBe=()=>({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}),Vvt=t=>({header:Wvt(t),parts:[]}),Jvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=vBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=vBe()}for(let p=0;p0?"patch":"mode change",V=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:cw(E),toPath:cw(I)}),V=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:N&&N[0]||null,path:cw(te),mode:eF(p),hash:v})}break;case"file creation":{let te=n||R;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:N&&N[0]||null,path:cw(te),mode:eF(h),hash:x})}break;case"patch":case"mode change":V=R||n;break;default:_e.assertNever(U);break}V&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:cw(V),oldMode:eF(u),newMode:eF(A)}),V&&N&&N.length&&e.push({type:"patch",semverExclusivity:o,path:cw(V),hunks:N,beforeHash:v,afterHash:x})}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 eF(t){let e=parseInt(t,8)&511;if(e!==Kvt&&e!==zvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Lv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:_e.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var uw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function Aw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function tF(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await Aw(e,z.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 Aw(e,z.dirname(a.fromPath),async()=>{await Aw(e,z.dirname(a.toPath),async()=>{await Aw(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(` + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var J0=class extends ut{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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=$n.getScopeRegistry(this.scope,{configuration:r,type:$n.RegistryType.PUBLISH_REGISTRY}):this.scope?o=$n.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=$n.getPublishRegistry((await uC(r,this.context.cwd)).manifest,{configuration:r}):o=$n.getDefaultRegistry({configuration:r}),(await Ft.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await Zr.get("/-/whoami",{configuration:r,registry:o,authType:Zr.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?j.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};J0.paths=[["npm","whoami"]],J0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var Yvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[q0,G0,j0,Y0,W0,z0,K0,V0,J0]},Wvt=Yvt;var Rj={};zt(Rj,{PatchCommand:()=>$0,PatchCommitCommand:()=>Z0,PatchFetcher:()=>_v,PatchResolver:()=>Hv,default:()=>uPt,patchUtils:()=>Pm});Ye();Ye();Dt();iA();var Pm={};zt(Pm,{applyPatchFile:()=>rR,diffFolders:()=>kj,ensureUnpatchedDescriptor:()=>Dj,ensureUnpatchedLocator:()=>iR,extractPackageToDisk:()=>xj,extractPatchFlags:()=>kBe,isParentRequired:()=>bj,isPatchDescriptor:()=>nR,isPatchLocator:()=>X0,loadPatchFiles:()=>Uv,makeDescriptor:()=>sR,makeLocator:()=>Sj,makePatchHash:()=>Qj,parseDescriptor:()=>Ov,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>aPt,unpatchLocator:()=>lPt});Ye();Dt();Ye();Dt();var Kvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function aw(t){return z.relative(Bt.root,z.resolve(Bt.root,ue.toPortablePath(t)))}function zvt(t){let e=t.trim().match(Kvt);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 Vvt=420,Jvt=493;var vBe=()=>({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}),Xvt=t=>({header:zvt(t),parts:[]}),Zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function $vt(t){let e=[],r=vBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=vBe()}for(let p=0;p0?"patch":"mode change",V=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:aw(E),toPath:aw(I)}),V=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:N&&N[0]||null,path:aw(te),mode:tR(p),hash:v})}break;case"file creation":{let te=n||F;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:N&&N[0]||null,path:aw(te),mode:tR(h),hash:x})}break;case"patch":case"mode change":V=F||n;break;default:He.assertNever(U);break}V&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:aw(V),oldMode:tR(u),newMode:tR(A)}),V&&N&&N.length&&e.push({type:"patch",semverExclusivity:o,path:aw(V),hunks:N,beforeHash:v,afterHash:x})}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 tR(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Jvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),ePt($vt(e))}function tPt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:He.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Dt();var lw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function cw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function rR(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!Lr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await cw(e,z.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 cw(e,z.dirname(a.fromPath),async()=>{await cw(e,z.dirname(a.toPath),async()=>{await cw(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(z.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await Aw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(DBe(a.newMode)!==DBe(u))continue;await Aw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:_e.assertNever(a);break}}function DBe(t){return(t&64)>0}function PBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return PBe(t)===PBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),x=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),R=Math.max(x,C),N=0,U=0,V=null;for(;N<=R;){if(N<=x&&(U=v-N,V=SBe(I,u,U),V!==null)){N=-N;break}if(N<=C&&(U=v+N,V=SBe(I,u,U),V!==null))break;N+=1}if(V===null)throw new uw(t.indexOf(I),I);A.push(V),p+=N,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let x=v.index+E;u.splice(x,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:_e.assertNever(v);break}await r.writeFilePromise(e,u.join(` -`),{mode:a})}function SBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:_e.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function fw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>le.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function rF(t){return t.range.startsWith("patch:")}function X0(t){return t.reference.startsWith("patch:")}function Nv(t){let{sourceItem:e,...r}=fw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Ov(t){let{sourceItem:e,...r}=fw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function Pj(t){if(!rF(t))return t;let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function nF(t){if(!X0(t))return t;let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function bBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function iF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,bBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function Sj(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,bBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function xBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):z.isAbsolute(a)?t(a):e(a)}function kBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function bj(t){return xBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Mv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await _e.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=kBe(u),p=await xBe({onAbsolute:async h=>await oe.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(z.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(z.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` -`));return n}async function xj(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=nF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=z.join(A,"source"),h=z.join(A,"user"),E=z.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let x,C;if(t.locatorHash===a.locatorHash){let R=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>R.releaseFs?.()),x=R,C=R}else x=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>x.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,x.prefixPath,{baseFs:x.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let x of v)x()}return oe.detachTemp(A),h}async function kj(t,e){let r=le.fromPortablePath(t).replace(/\\/g,"/"),o=le.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:le.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. +`):"";await e.mkdirpPromise(z.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await cw(e,a.path,async()=>{await iPt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(PBe(a.newMode)!==PBe(u))continue;await cw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:He.assertNever(a);break}}function PBe(t){return(t&64)>0}function DBe(t){return t.replace(/\s+$/,"")}function nPt(t,e){return DBe(t)===DBe(e)}async function iPt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),x=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),F=Math.max(x,C),N=0,U=0,V=null;for(;N<=F;){if(N<=x&&(U=v-N,V=SBe(I,u,U),V!==null)){N=-N;break}if(N<=C&&(U=v+N,V=SBe(I,u,U),V!==null))break;N+=1}if(V===null)throw new lw(t.indexOf(I),I);A.push(V),p+=N,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let x=v.index+E;u.splice(x,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:He.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function SBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!nPt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:He.assertNever(a.type);break}return o}var oPt=/^builtin<([^>]+)>$/;function uw(t,e){let{protocol:r,source:o,selector:a,params:n}=j.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?j.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function nR(t){return t.range.startsWith("patch:")}function X0(t){return t.reference.startsWith("patch:")}function Ov(t){let{sourceItem:e,...r}=uw(t.range,j.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=uw(t.reference,j.parseLocator);return{...r,sourceLocator:e}}function aPt(t){let{sourceItem:e}=uw(t.range,j.parseDescriptor);return e}function lPt(t){let{sourceItem:e}=uw(t.reference,j.parseLocator);return e}function Dj(t){if(!nR(t))return t;let{sourceItem:e}=uw(t.range,j.parseDescriptor);return e}function iR(t){if(!X0(t))return t;let{sourceItem:e}=uw(t.reference,j.parseLocator);return e}function bBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:j.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return j.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function sR(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return j.makeDescriptor(t,bBe({parentLocator:e,sourceItem:r,patchPaths:o},j.stringifyDescriptor))}function Sj(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return j.makeLocator(t,bBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},j.stringifyLocator))}function xBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(oPt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):z.isAbsolute(a)?t(a):e(a)}function kBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function bj(t){return xBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Uv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:z.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await He.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=kBe(u),p=await xBe({onAbsolute:async h=>await oe.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(z.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(z.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function xj(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=iR(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=z.join(A,"source"),h=z.join(A,"user"),E=z.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let x,C;if(t.locatorHash===a.locatorHash){let F=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>F.releaseFs?.()),x=F,C=F}else x=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>x.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,x.prefixPath,{baseFs:x.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:j.stringifyLocator(t),version:o.version})])}finally{for(let x of v)x()}return oe.detachTemp(A),h}async function kj(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. The following error was reported by 'git': -${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${_e.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${_e.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(_e.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(_e.escapeRegExp(`${o}/`),"g"),"")}function Qj(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Lv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function QBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:_e.assertNever(o.type)}}var Uv=class{supports(e,r){return!!X0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Ov(e),A=await Mv(o,u,r),p=await oe.mktempPromise(),h=z.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new Ji(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await _e.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:x,optional:C}of A){if(x===null)continue;let R=new Ji(h,{level:r.project.configuration.get("compressionLevel")}),N=new gn(z.resolve(Bt.root,I),{baseFs:R});try{await tF(Lv(x),{baseFs:N,version:n})}catch(U){if(!(U instanceof uw))throw U;let V=r.project.configuration.get("enableInlineHunks"),te=!V&&!C?" (set enableInlineHunks for details)":"",ae=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,fe=ue=>{!V||QBe(U.hunk,{configuration:r.project.configuration,report:ue})};if(R.discardAndClose(),C){r.report.reportWarningOnce(66,ae,{reportExtra:fe});continue}else throw new Jt(66,ae,fe)}R.saveAndClose()}return new Ji(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!rF(e)}supportsLocator(e,r){return!!X0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Nv(e);return a.every(n=>!bj(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Nv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Nv(e),u=await Mv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=Qj(u,A.version);return[Sj(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Ov(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var Z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=z.resolve(this.context.cwd,le.toPortablePath(this.patchFolder)),u=z.join(n,"../source"),A=z.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await kj(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=z.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let x=[],C=new Map;for(let R of o.storedPackages.values()){if(W.isVirtualLocator(R))continue;let N=R.dependencies.get(E.identHash);if(!N)continue;let U=W.ensureDevirtualizedDescriptor(N),V=Pj(U),te=o.storedResolutions.get(V.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let fe=o.tryWorkspaceByLocator(R);if(fe)x.push(fe);else{let ue=o.originalPackages.get(R.locatorHash);if(!ue)throw new Error("Assertion failed: Expected the original package to have been registered");let me=ue.dependencies.get(N.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(me.descriptorHash,me)}}for(let R of x)for(let N of Ot.hardDependencies){let U=R.manifest[N].get(E.identHash);if(!U)continue;let V=iF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[z.join(dr.home,z.relative(o.cwd,v))]});R.manifest[N].set(U.identHash,V)}for(let R of C.values()){let N=iF(R,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[z.join(dr.home,z.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(N),description:R.range}},reference:N.range})}await o.persist()}};Z0.paths=[["patch-commit"]],Z0.usage=nt.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 "});Ye();Pt();qt();var $0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=_e.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?_e.mapAndFilter.skip:W.isVirtualLocator(p)?_e.mapAndFilter.skip:X0(p)!==this.update?_e.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${He.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${He.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(He.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(He.escapeRegExp(`${o}/`),"g"),"")}function Qj(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!Lr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function QBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${fe.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${fe.pretty(e,a,fe.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${fe.pretty(e,a,fe.Type.ADDED)}`);break;default:He.assertNever(o.type)}}var _v=class{supports(e,r){return!!X0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${j.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:j.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Uv(o,u,r),p=await oe.mktempPromise(),h=z.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=j.getIdentVendorPath(e),v=new Xi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await He.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:x,optional:C}of A){if(x===null)continue;let F=new Xi(h,{level:r.project.configuration.get("compressionLevel")}),N=new gn(z.resolve(Bt.root,I),{baseFs:F});try{await rR(Nv(x),{baseFs:N,version:n})}catch(U){if(!(U instanceof lw))throw U;let V=r.project.configuration.get("enableInlineHunks"),te=!V&&!C?" (set enableInlineHunks for details)":"",le=`${j.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,ae=ce=>{!V||QBe(U.hunk,{configuration:r.project.configuration,report:ce})};if(F.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:ae});continue}else throw new Jt(66,le,ae)}F.saveAndClose()}return new Xi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var Hv=class{supportsDescriptor(e,r){return!!nR(e)}supportsLocator(e,r){return!!X0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Ov(e);return a.every(n=>!bj(n))?e:j.bindDescriptor(e,{locator:j.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Ov(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Ov(e),u=await Uv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=Qj(u,A.version);return[Sj(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Dt();qt();var Z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=z.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=z.join(n,"../source"),A=z.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await kj(u,n),h=await oe.readJsonPromise(A),E=j.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=z.join(I,`${j.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let x=[],C=new Map;for(let F of o.storedPackages.values()){if(j.isVirtualLocator(F))continue;let N=F.dependencies.get(E.identHash);if(!N)continue;let U=j.ensureDevirtualizedDescriptor(N),V=Dj(U),te=o.storedResolutions.get(V.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let ae=o.tryWorkspaceByLocator(F);if(ae)x.push(ae);else{let ce=o.originalPackages.get(F.locatorHash);if(!ce)throw new Error("Assertion failed: Expected the original package to have been registered");let Ce=ce.dependencies.get(N.identHash);if(!Ce)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(Ce.descriptorHash,Ce)}}for(let F of x)for(let N of Ot.hardDependencies){let U=F.manifest[N].get(E.identHash);if(!U)continue;let V=sR(U,{parentLocator:null,sourceDescriptor:j.convertLocatorToDescriptor(E),patchPaths:[z.join(dr.home,z.relative(o.cwd,v))]});F.manifest[N].set(U.identHash,V)}for(let F of C.values()){let N=sR(F,{parentLocator:null,sourceDescriptor:j.convertLocatorToDescriptor(E),patchPaths:[z.join(dr.home,z.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:j.stringifyIdent(N),description:F.range}},reference:N.range})}await o.persist()}};Z0.paths=[["patch-commit"]],Z0.usage=nt.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 "});Ye();Dt();qt();var $0=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=j.parseLocator(this.package);if(u.reference==="unknown"){let A=He.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?He.mapAndFilter.skip:j.isVirtualLocator(p)?He.mapAndFilter.skip:X0(p)!==this.update?He.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): ${A.map(p=>` -- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=nF(u),h=await xj(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:le.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,le.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${le.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};$0.paths=[["patch"]],$0.usage=nt.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 "});var aDt={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:[Z0,$0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var Lj={};zt(Lj,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=z.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new Rj(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},Rj=class{constructor(e){this.opts=e;this.asyncActions=new _e.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:z.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=z.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?z.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:yA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=yA.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"||!FBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let x=v;FBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),x=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(x.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let R=W.stringifyIdent(I),N=z.join(a,R),U=z.relative(z.dirname(N),C.packageLocation),V=A.get(R);A.delete(R),p.push(Promise.resolve().then(async()=>{if(V){if(V.isSymbolicLink()&&await oe.readlinkPromise(N)===U)return;await oe.removePromise(N)}await oe.mkdirpPromise(z.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,N,"junction"):await oe.symlinkPromise(U,N)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=TBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=z.contains(e,o);if(a===null)continue;let[n]=a.split(z.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(z.join(e,o))}))}return await this.asyncActions.wait(),await Tj(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await Tj(RBe(this.opts.project)),{customData:this.customData}}};function RBe(t){return z.join(t.cwd,dr.nodeModules)}function TBe(t){return z.join(RBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=TBe(e),a=z.join(o,r,"package"),n=z.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function FBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(z.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(z.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>Tj(z.join(t,a)))))}async function Tj(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var qj={};zt(qj,{StageCommand:()=>eg,default:()=>vDt,stageUtils:()=>oF});Ye();Pt();qt();Ye();Pt();var oF={};zt(oF,{ActionType:()=>Nj,checkConsensus:()=>sF,expandDirectory:()=>Uj,findConsensus:()=>_j,findVcsRoot:()=>Oj,genCommitMessage:()=>Hj,getCommitPrefix:()=>LBe,isYarnFile:()=>Mj});Pt();var Nj=(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))(Nj||{});async function Oj(t,{marker:e}){do if(!oe.existsSync(z.join(t,e)))t=z.dirname(t);else return t;while(t!=="/");return null}function Mj(t,{roots:e,names:r}){if(r.has(z.basename(t)))return!0;do if(!e.has(t))t=z.dirname(t);else return!0;while(t!=="/");return!1}function Uj(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=z.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function sF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function _j(t){let e=sF(t,/^(\w\(\w+\):\s*)?\w+s/),r=sF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=sF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function LBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function Hj(t,e){let r=LBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function NBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>z.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=z.relative(t,E);if(h===4){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x),R=await Ot.fromFile(E),N=new Map([...R.dependencies,...R.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[V,te]of U){let ae=W.stringifyIdent(te),fe=N.get(V);fe?fe.range!==te.range&&r.push([4,`${ae} to ${fe.range}`]):r.push([3,ae])}for(let[V,te]of N)U.has(V)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=_j(u);return Hj(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},OBe={async findRoot(t){return await Oj(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=z.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return Uj(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(x=>u[x].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>Mj(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>le.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>le.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} - -${gDt} -`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>le.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[OBe],eg=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} -`);else for(let I of h)this.context.stdout.write(`${le.fromPortablePath(I.path)} -`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}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))}};eg.paths=[["stage"]],eg.usage=nt.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 function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=z.resolve(z.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[eg]},vDt=BDt;var Gj={};zt(Gj,{default:()=>FDt});Ye();Ye();Pt();var _Be=$e(Jn());Ye();var MBe=$e(JH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",UBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,MBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await nn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var HBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,bDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??(oe.existsSync(z.join(t.cwd,"tsconfig.json"))||oe.existsSync(z.join(a.cwd,"tsconfig.json")))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await UBe(r,n))return;let E=HBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let N=n.normalizeDependency(r),U=await A.getCandidates(N,{},p);I=W.parseRange(U[0].reference).selector}let v=_Be.default.coerce(I);if(v===null)return;let x=`${Xc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),x),R=_e.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,V=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&V!==r.descriptorHash)return _e.mapAndFind.skip;let te=[];for(let ae of Ot.allDependencies){let fe=N.manifest[ae].get(C.identHash);typeof fe>"u"||te.push([ae,fe])}return te.length===0?_e.mapAndFind.skip:te});if(typeof R<"u")for(let[N,U]of R)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(C);if((await A.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[Xc.Target.DEVELOPMENT].set(C.identHash,C)}},xDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??(oe.existsSync(z.join(t.cwd,"tsconfig.json"))||oe.existsSync(z.join(o.cwd,"tsconfig.json")))))return;let u=HBe(r),A=W.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:bDt,afterWorkspaceDependencyRemoval:xDt,beforeWorkspacePacking:kDt}},FDt=QDt;var zj={};zt(zj,{VersionApplyCommand:()=>tg,VersionCheckCommand:()=>rg,VersionCommand:()=>ng,default:()=>XDt,versionUtils:()=>dw});Ye();Ye();qt();var dw={};zt(dw,{Decision:()=>hw,applyPrerelease:()=>KBe,applyReleases:()=>Kj,applyStrategy:()=>lF,clearVersionFiles:()=>jj,getUndecidedDependentWorkspaces:()=>Gv,getUndecidedWorkspaces:()=>aF,openVersionFile:()=>gw,requireMoreDecisions:()=>zDt,resolveVersionFiles:()=>qv,suggestStrategy:()=>Wj,updateVersionFiles:()=>Yj,validateReleaseDecision:()=>pw});Ye();Pt();Nl();qt();var WBe=$e(YBe()),vA=$e(Jn()),KDt=/^(>=|[~^]|)(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-]+)*)?$/,hw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(hw||{});function pw(t){let e=vA.default.valid(t);return e||_e.validateEnum((0,WBe.default)(hw,"UNDECIDED"),t)}async function qv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=z.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${z.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let x=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),R=lF(x,pw(E));if(R===null)throw new Error(`Assertion failed: Expected ${x} to support being bumped via strategy ${E}`);let N=typeof C<"u"?vA.default.gt(R,C)?R:C:R;r.set(v,N)}}return e&&(r=new Map([...r].map(([n,u])=>[n,KBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function jj(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function Yj(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=z.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function gw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(x=>z.contains(u,x)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: -- ${A.map(x=>le.fromPortablePath(x)).join(` -- `)}`);let p=new Set(_e.mapAndFilter(n,x=>{let C=t.tryWorkspaceByFilePath(x);return C===null?_e.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:z.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(E),v=new Map;for(let x of I.declined||[]){let C=W.parseIdent(x),R=t.getWorkspaceByIdent(C);v.set(R,"decline")}for(let[x,C]of Object.entries(I.releases||{})){let R=W.parseIdent(x),N=t.getWorkspaceByIdent(R);v.set(N,pw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(x=>x.manifest.version!==null)),releases:v,async saveAll(){let x={},C=[],R=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=W.stringifyIdent(N.anchoredLocator),V=v.get(N);V==="decline"?C.push(U):typeof V<"u"?x[U]=pw(V):p.has(N)&&R.push(U)}await oe.mkdirPromise(z.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(x).length>0?x:void 0,declined:C.length>0?C:void 0,undecided:R.length>0?R:void 0})))}}}function zDt(t){return aF(t).size>0||Gv(t).length>0}function aF(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 Gv(t,{include:e=new Set}={}){let r=[],o=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u==="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function Wj(t,e){let r=vA.default.clean(e);for(let o of Object.values(hw))if(o!=="undecided"&&o!=="decline"&&vA.default.inc(t,o)===r)return o;return null}function lF(t,e){if(vA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!vA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=vA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function Kj(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;_e.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,vA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:le.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let x=v.range,C=!1;if(x.startsWith(Xn.protocol)&&(x=x.slice(Xn.protocol.length),C=!0,x===a.relativeCwd))continue;let R=x.match(KDt);if(!R){r.reportWarning(0,`Couldn't auto-upgrade range ${x} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let N=`${R[1]}${n}`;C&&(N=`${Xn.protocol}${N}`);let U=W.makeDescriptor(v,N);h.manifest[E].set(I,U)}}}var VDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function KBe(t,{current:e,prerelease:r}){let o=new vA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=VDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var tg=class extends ut{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.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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await qv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let x=h.get(v);typeof x<"u"&&E.set(v,x)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}Kj(o,E,{report:A}),this.dryRun||(p||(this.all?await jj(o):await Yj(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};tg.paths=[["version","apply"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` +- ${j.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=iR(u),h=await xj(u,{cache:n,project:o});A.reportJson({locator:j.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${j.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${fe.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${fe.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};$0.paths=[["patch"]],$0.usage=nt.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 "});var cPt={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:[Z0,$0],fetchers:[_v],resolvers:[Hv]},uPt=cPt;var Lj={};zt(Lj,{PnpmLinker:()=>qv,default:()=>gPt});Ye();Dt();qt();var qv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${fe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,fe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${j.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${fe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,fe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=z.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new Fj(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},Fj=class{constructor(e){this.opts=e;this.asyncActions=new He.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=SP(oe,{indexPath:z.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=z.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?z.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=APt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,j.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=j.isVirtualLocator(e)?j.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:yA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=yA.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"||!RBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${j.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await fPt(a),A=new Map(u),p=[n],h=(I,v)=>{let x=v;RBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),x=j.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(x.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${j.stringifyLocator(v)})`);let F=j.stringifyIdent(I),N=z.join(a,F),U=z.relative(z.dirname(N),C.packageLocation),V=A.get(F);A.delete(F),p.push(Promise.resolve().then(async()=>{if(V){if(V.isSymbolicLink()&&await oe.readlinkPromise(N)===U)return;await oe.removePromise(N)}await oe.mkdirpPromise(z.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,N,"junction"):await oe.symlinkPromise(U,N)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(j.convertLocatorToDescriptor(e),e),p.push(pPt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=TBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=z.contains(e,o);if(a===null)continue;let[n]=a.split(z.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(z.join(e,o))}))}return await this.asyncActions.wait(),await Tj(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await Tj(FBe(this.opts.project)),{customData:this.customData}}};function FBe(t){return z.join(t.cwd,dr.nodeModules)}function TBe(t){return z.join(FBe(t),".store")}function APt(t,{project:e}){let r=j.slugifyLocator(t),o=TBe(e),a=z.join(o,r,"package"),n=z.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function RBe(t,{project:e}){return!j.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function fPt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(z.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function pPt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(z.join(t,a)));let n=j.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>Tj(z.join(t,a)))))}async function Tj(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var hPt={linkers:[qv]},gPt=hPt;var qj={};zt(qj,{StageCommand:()=>eg,default:()=>DPt,stageUtils:()=>aR});Ye();Dt();qt();Ye();Dt();var aR={};zt(aR,{ActionType:()=>Nj,checkConsensus:()=>oR,expandDirectory:()=>Uj,findConsensus:()=>_j,findVcsRoot:()=>Oj,genCommitMessage:()=>Hj,getCommitPrefix:()=>LBe,isYarnFile:()=>Mj});Dt();var Nj=(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))(Nj||{});async function Oj(t,{marker:e}){do if(!oe.existsSync(z.join(t,e)))t=z.dirname(t);else return t;while(t!=="/");return null}function Mj(t,{roots:e,names:r}){if(r.has(z.basename(t)))return!0;do if(!e.has(t))t=z.dirname(t);else return!0;while(t!=="/");return!1}function Uj(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=z.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function oR(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function _j(t){let e=oR(t,/^(\w\(\w+\):\s*)?\w+s/),r=oR(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=oR(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function LBe(t){return t.useComponent?"chore(yarn): ":""}var dPt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function Hj(t,e){let r=LBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=dPt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var mPt="Commit generated via `yarn stage`",yPt=11;async function NBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function EPt(t,e){let r=[],o=e.filter(h=>z.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=z.relative(t,E);if(h===4){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x),F=await Ot.fromFile(E),N=new Map([...F.dependencies,...F.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[V,te]of U){let le=j.stringifyIdent(te),ae=N.get(V);ae?ae.range!==te.range&&r.push([4,`${le} to ${ae.range}`]):r.push([3,le])}for(let[V,te]of N)U.has(V)||r.push([2,j.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(E);v.name?r.push([0,j.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x);C.name?r.push([1,j.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${yPt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=_j(u);return Hj(A,r)}var CPt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},wPt={[0]:["A "],[4]:["M "],[1]:["D "]},OBe={async findRoot(t){return await Oj(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?wPt:CPt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=z.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return Uj(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(x=>u[x].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>Mj(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await EPt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${mPt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var IPt=[OBe],eg=class extends ut{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})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await BPt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of vPt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}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))}};eg.paths=[["stage"]],eg.usage=nt.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 function BPt(t){let e=null,r=null;for(let o of IPt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function vPt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=z.resolve(z.dirname(e),oe.readlinkSync(e));else break}return r}var PPt={commands:[eg]},DPt=PPt;var Gj={};zt(Gj,{default:()=>TPt});Ye();Ye();Dt();var _Be=Ze(Jn());Ye();var MBe=Ze(JH()),SPt="e8e1bd300d860104bb8c58453ffa1eb4",bPt="OFCNCOG2CU",UBe=async(t,e)=>{let r=j.stringifyIdent(t),a=xPt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},xPt=t=>(0,MBe.default)(bPt,SPt,{requester:{async send(r){try{let o=await sn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var HBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,kPt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??(oe.existsSync(z.join(t.cwd,"tsconfig.json"))||oe.existsSync(z.join(a.cwd,"tsconfig.json")))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await UBe(r,n))return;let E=HBe(r),I=j.parseRange(r.range).selector;if(!Lr.validRange(I)){let N=n.normalizeDependency(r),U=await A.getCandidates(N,{},p);I=j.parseRange(U[0].reference).selector}let v=_Be.default.coerce(I);if(v===null)return;let x=`${Xc.Modifier.CARET}${v.major}`,C=j.makeDescriptor(j.makeIdent("types",E),x),F=He.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,V=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&V!==r.descriptorHash)return He.mapAndFind.skip;let te=[];for(let le of Ot.allDependencies){let ae=N.manifest[le].get(C.identHash);typeof ae>"u"||te.push([le,ae])}return te.length===0?He.mapAndFind.skip:te});if(typeof F<"u")for(let[N,U]of F)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(C);if((await A.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[Xc.Target.DEVELOPMENT].set(C.identHash,C)}},QPt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??(oe.existsSync(z.join(t.cwd,"tsconfig.json"))||oe.existsSync(z.join(o.cwd,"tsconfig.json")))))return;let u=HBe(r),A=j.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},RPt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},FPt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:kPt,afterWorkspaceDependencyRemoval:QPt,beforeWorkspacePacking:RPt}},TPt=FPt;var zj={};zt(zj,{VersionApplyCommand:()=>tg,VersionCheckCommand:()=>rg,VersionCommand:()=>ng,default:()=>$Pt,versionUtils:()=>hw});Ye();Ye();qt();var hw={};zt(hw,{Decision:()=>fw,applyPrerelease:()=>KBe,applyReleases:()=>Kj,applyStrategy:()=>cR,clearVersionFiles:()=>jj,getUndecidedDependentWorkspaces:()=>jv,getUndecidedWorkspaces:()=>lR,openVersionFile:()=>pw,requireMoreDecisions:()=>JPt,resolveVersionFiles:()=>Gv,suggestStrategy:()=>Wj,updateVersionFiles:()=>Yj,validateReleaseDecision:()=>Aw});Ye();Dt();Nl();qt();var WBe=Ze(YBe()),vA=Ze(Jn()),VPt=/^(>=|[~^]|)(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-]+)*)?$/,fw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(fw||{});function Aw(t){let e=vA.default.valid(t);return e||He.validateEnum((0,WBe.default)(fw,"UNDECIDED"),t)}async function Gv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=z.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=j.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${z.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${j.prettyLocator(t.configuration,v.anchoredLocator)})`);let x=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),F=cR(x,Aw(E));if(F===null)throw new Error(`Assertion failed: Expected ${x} to support being bumped via strategy ${E}`);let N=typeof C<"u"?vA.default.gt(F,C)?F:C:F;r.set(v,N)}}return e&&(r=new Map([...r].map(([n,u])=>[n,KBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function jj(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function Yj(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=z.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=j.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function pw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(x=>z.contains(u,x)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(x=>ue.fromPortablePath(x)).join(` +- `)}`);let p=new Set(He.mapAndFilter(n,x=>{let C=t.tryWorkspaceByFilePath(x);return C===null?He.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:z.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(E),v=new Map;for(let x of I.declined||[]){let C=j.parseIdent(x),F=t.getWorkspaceByIdent(C);v.set(F,"decline")}for(let[x,C]of Object.entries(I.releases||{})){let F=j.parseIdent(x),N=t.getWorkspaceByIdent(F);v.set(N,Aw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(x=>x.manifest.version!==null)),releases:v,async saveAll(){let x={},C=[],F=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=j.stringifyIdent(N.anchoredLocator),V=v.get(N);V==="decline"?C.push(U):typeof V<"u"?x[U]=Aw(V):p.has(N)&&F.push(U)}await oe.mkdirPromise(z.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(x).length>0?x:void 0,declined:C.length>0?C:void 0,undecided:F.length>0?F:void 0})))}}}function JPt(t){return lR(t).size>0||jv(t).length>0}function lR(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 jv(t,{include:e=new Set}={}){let r=[],o=new Map(He.mapAndFilter([...t.releases],([n,u])=>u==="decline"?He.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(He.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?He.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function Wj(t,e){let r=vA.default.clean(e);for(let o of Object.values(fw))if(o!=="undecided"&&o!=="decline"&&vA.default.inc(t,o)===r)return o;return null}function cR(t,e){if(vA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!vA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=vA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function Kj(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;He.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,vA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?j.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${j.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let x=v.range,C=!1;if(x.startsWith(Xn.protocol)&&(x=x.slice(Xn.protocol.length),C=!0,x===a.relativeCwd))continue;let F=x.match(VPt);if(!F){r.reportWarning(0,`Couldn't auto-upgrade range ${x} (in ${j.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let N=`${F[1]}${n}`;C&&(N=`${Xn.protocol}${N}`);let U=j.makeDescriptor(v,N);h.manifest[E].set(I,U)}}}var XPt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function KBe(t,{current:e,prerelease:r}){let o=new vA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=XPt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var tg=class extends ut{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.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"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Ft.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await Gv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let x=h.get(v);typeof x<"u"&&E.set(v,x)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}Kj(o,E,{report:A}),this.dryRun||(p||(this.all?await jj(o):await Yj(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};tg.paths=[["version","apply"]],tg.usage=nt.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. @@ -727,12 +727,12 @@ ${gDt} - \`--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"]]});Ye();Pt();qt();var cF=$e(Jn());var rg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){bC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Dq(),Vwe)),{useListInput:n}=await Promise.resolve().then(()=>(AQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(sc())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new nr(x.cwd,this.context.cwd);await x.restoreInstallState();let R=await gw(x);if(R===null||R.releaseRoots.size===0)return 0;if(R.root===null)throw new it("This command can only be run on Git repositories");let N=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:he,decision:Be,setDecision:we})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,me.anchoredLocator)})`);if(cF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(Be,Ee,{active:he,minus:"left",plus:"right",set:we});let Pe=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"},cF.default.valid(Be)?Be:cF.default.inc(g,Be)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,me.anchoredLocator)," - ",Pe)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===Be})," ",ce)))))},V=me=>{let he=new Set(R.releaseRoots),Be=new Map([...me].filter(([we])=>he.has(we)));for(;;){let we=Gv({project:R.project,releases:Be}),g=!1;if(we.length>0){for(let[Ee]of we)if(!he.has(Ee)){he.add(Ee),g=!0;let Pe=me.get(Ee);typeof Pe<"u"&&Be.set(Ee,Pe)}}if(!g)break}return{relevantWorkspaces:he,relevantReleases:Be}},te=()=>{let[me,he]=I(()=>new Map(R.releases)),Be=E((we,g)=>{let Ee=new Map(me);g!=="undecided"?Ee.set(we,g):Ee.delete(we);let{relevantReleases:Pe}=V(Ee);he(Pe)},[me,he]);return[me,Be]},ae=({workspaces:me,releases:he})=>{let Be=[];Be.push(`${me.size} total`);let we=0,g=0;for(let Ee of me){let Pe=he.get(Ee);typeof Pe>"u"?g+=1:Pe!=="decline"&&(we+=1)}return Be.push(`${we} release${we===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},ue=await u(({useSubmit:me})=>{let[he,Be]=te();me(he);let{relevantWorkspaces:we}=V(he),g=new Set([...we].filter(ne=>!R.releaseRoots.has(ne))),[Ee,Pe]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:Pe(Ee-1);break;case a.AFTER:Pe(Ee+1);break}},[Ee,Pe]);return h.createElement(A,{flexDirection:"column"},h.createElement(N,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...R.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},le.fromPortablePath(R.root)),le.sep,le.relative(le.fromPortablePath(R.root),le.fromPortablePath(ne)))))),R.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:R.releaseRoots,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...R.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:g,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))):null)},{versionFile:R},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ue>"u")return 1;R.releases.clear();for(let[me,he]of ue)R.releases.set(me,he);await R.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await gw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,le.fromPortablePath(A.root),"gray")}${le.sep}${le.relative(le.fromPortablePath(A.root),le.fromPortablePath(v))}`)}let p=!1,h=!1,E=aF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=Gv(A);for(let[v,x]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,x)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};rg.paths=[["version","check"]],rg.usage=nt.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"]]});Ye();qt();var uF=$e(Jn());var ng=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new nr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=uF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=Wj(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!uF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=pw(this.strategy)}if(!n){let I=(await qv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=lF(a.manifest.version,p);if(uF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await gw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};ng.paths=[["version"]],ng.usage=nt.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"]]});var JDt={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:[tg,rg,ng]},XDt=JDt;var Vj={};zt(Vj,{WorkspacesFocusCommand:()=>ig,WorkspacesForeachCommand:()=>lp,default:()=>ePt});Ye();Ye();qt();var ig=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new nr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};ig.paths=[["workspaces","focus"]],ig.usage=nt.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 "});Ye();Ye();Ye();qt();var mw=$e(Zo()),VBe=$e(sd());$a();var lp=class extends ut{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:TT([Ks(["unlimited"]),aI(RT(),[NT(),LT(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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new nr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=we=>{!this.dryRun||this.context.stdout.write(`${we} -`)},p=()=>{let we=this.from.map(g=>mw.default.matcher(g));return o.workspaces.filter(g=>{let Ee=W.stringifyIdent(g.anchoredLocator),Pe=g.relativeCwd;return we.some(ce=>ce(Ee)||ce(Pe))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let we of h)A(` -- ${we.relativeCwd} - ${W.prettyLocator(r,we.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let we of E)A(` -- ${we.relativeCwd} - ${W.prettyLocator(r,we.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let we of o.workspaces)if(we.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let we of h){if(u&&!we.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(we)).has(u)){A(`Excluding ${we.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&we.cwd===a.cwd)){if(this.include.length>0&&!mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.include)&&!mw.default.isMatch(we.relativeCwd,this.include)){A(`Excluding ${we.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.exclude)||mw.default.isMatch(we.relativeCwd,this.exclude))){A(`Excluding ${we.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&we.manifest.private===!0){A(`Excluding ${we.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(we)}}if(this.dryRun)return 0;let x=this.verbose??(this.context.stdout.isTTY?1/0:0),C=x>0,R=x>1,N=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Vi.availableParallelism()/2):1,U=N===1?!1:this.parallel,V=U?this.interlaced:!0,te=(0,VBe.default)(N),ae=new Map,fe=new Set,ue=0,me=null,he=!1,Be=await Lt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async we=>{let g=async(Ee,{commandIndex:Pe})=>{if(he)return-1;!U&&R&&Pe>1&&we.reportSeparator();let ce=ZDt(Ee,{configuration:r,label:C,commandIndex:Pe}),[ne,ee]=zBe(we,{prefix:ce,interlaced:V}),[Ie,Fe]=zBe(we,{prefix:ce,interlaced:V});try{R&&we.reportInfo(null,`${ce?`${ce} `:""}Process started`);let At=Date.now(),H=await this.cli.run([this.commandName,...this.args],{cwd:Ee.cwd,stdout:ne,stderr:Ie})||0;ne.end(),Ie.end(),await ee,await Fe;let at=Date.now();if(R){let Re=r.get("enableTimers")?`, completed in ${de.pretty(r,at-At,de.Type.DURATION)}`:"";we.reportInfo(null,`${ce?`${ce} `:""}Process exited (exit code ${H})${Re}`)}return H===130&&(he=!0,me=H),H}catch(At){throw ne.end(),Ie.end(),await ee,await Fe,At}};for(let Ee of I)ae.set(Ee.anchoredLocator.locatorHash,Ee);for(;ae.size>0&&!we.hasErrors();){let Ee=[];for(let[ne,ee]of ae){if(fe.has(ee.anchoredDescriptor.descriptorHash))continue;let Ie=!0;if(this.topological||this.topologicalDev){let Fe=this.topologicalDev?new Map([...ee.manifest.dependencies,...ee.manifest.devDependencies]):ee.manifest.dependencies;for(let At of Fe.values()){let H=o.tryWorkspaceByDescriptor(At);if(Ie=H===null||!ae.has(H.anchoredLocator.locatorHash),!Ie)break}}if(!!Ie&&(fe.add(ee.anchoredDescriptor.descriptorHash),Ee.push(te(async()=>{let Fe=await g(ee,{commandIndex:++ue});return ae.delete(ne),fe.delete(ee.anchoredDescriptor.descriptorHash),Fe})),!U))break}if(Ee.length===0){let ne=Array.from(ae.values()).map(ee=>W.prettyLocator(r,ee.anchoredLocator)).join(", ");we.reportError(3,`Dependency cycle detected (${ne})`);return}let ce=(await Promise.all(Ee)).find(ne=>ne!==0);me===null&&(me=typeof ce<"u"?1:me),(this.topological||this.topologicalDev)&&typeof ce<"u"&&we.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()}};lp.paths=[["workspaces","foreach"]],lp.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),lp.schema=[cI("all",Yu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),OT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function zBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new _e.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new _e.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[ig,lp]},ePt=$Dt;var pC=()=>({modules:new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",zw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",tPt],["typanion",zo],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",DH],["@yarnpkg/plugin-file",SH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",FH],["@yarnpkg/plugin-interactive-tools",Tq],["@yarnpkg/plugin-link",Lq],["@yarnpkg/plugin-nm",yG],["@yarnpkg/plugin-npm",dj],["@yarnpkg/plugin-npm-cli",Dj],["@yarnpkg/plugin-pack",Aj],["@yarnpkg/plugin-patch",Fj],["@yarnpkg/plugin-pnp",oG],["@yarnpkg/plugin-pnpm",Lj],["@yarnpkg/plugin-stage",qj],["@yarnpkg/plugin-typescript",Gj],["@yarnpkg/plugin-version",zj],["@yarnpkg/plugin-workspace-tools",Vj]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function ZBe({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:rn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(_e.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function $Be({selfPath:t,pluginConfiguration:e}){return await Ke.find(le.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,JBe.execFileSync)(process.execPath,[le.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=le.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=le.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=le.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?z.resolve(r):z.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||XBe.isCI||!process.stdout.isTTY)return;Ke.telemetry=new uC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())AC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function eve(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await $Be({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),eve(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function ehe({cwd:t=z.cwd(),pluginConfiguration:e=pC()}={}){let r=ZBe({cwd:t,pluginConfiguration:e}),o=await $Be({pluginConfiguration:e,selfPath:null});return eve(r,{configuration:o}),r}async function nk(t,{cwd:e=z.cwd(),selfPath:r,pluginConfiguration:o}){let a=ZBe({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}nk(process.argv.slice(2),{cwd:z.cwd(),selfPath:le.toPortablePath(le.resolve(process.argv[1])),pluginConfiguration:pC()});})(); + `,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"]]});Ye();Dt();qt();var uR=Ze(Jn());var rg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){DC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(uQ(),Bq)),{ScrollableItems:o}=await Promise.resolve().then(()=>(hQ(),pQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Pq(),Vwe)),{useListInput:n}=await Promise.resolve().then(()=>(fQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(yQ(),mQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>Ze(sc())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>Ze(an())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new sr(x.cwd,this.context.cwd);await x.restoreInstallState();let F=await pw(x);if(F===null||F.releaseRoots.size===0)return 0;if(F.root===null)throw new it("This command can only be run on Git repositories");let N=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:Ce,active:de,decision:Ie,setDecision:Ee})=>{let g=Ce.manifest.raw.stableVersion??Ce.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${j.prettyLocator(v,Ce.anchoredLocator)})`);if(uR.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let me=["undecided","decline","patch","minor","major"];n(Ie,me,{active:de,minus:"left",plus:"right",set:Ee});let De=Ie==="undecided"?h.createElement(p,{color:"yellow"},g):Ie==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},uR.default.valid(Ie)?Ie:uR.default.inc(g,Ie)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,j.prettyLocator(v,Ce.anchoredLocator)," - ",De)),h.createElement(A,null,me.map(he=>h.createElement(A,{key:he,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:he===Ie})," ",he)))))},V=Ce=>{let de=new Set(F.releaseRoots),Ie=new Map([...Ce].filter(([Ee])=>de.has(Ee)));for(;;){let Ee=jv({project:F.project,releases:Ie}),g=!1;if(Ee.length>0){for(let[me]of Ee)if(!de.has(me)){de.add(me),g=!0;let De=Ce.get(me);typeof De<"u"&&Ie.set(me,De)}}if(!g)break}return{relevantWorkspaces:de,relevantReleases:Ie}},te=()=>{let[Ce,de]=I(()=>new Map(F.releases)),Ie=E((Ee,g)=>{let me=new Map(Ce);g!=="undecided"?me.set(Ee,g):me.delete(Ee);let{relevantReleases:De}=V(me);de(De)},[Ce,de]);return[Ce,Ie]},le=({workspaces:Ce,releases:de})=>{let Ie=[];Ie.push(`${Ce.size} total`);let Ee=0,g=0;for(let me of Ce){let De=de.get(me);typeof De>"u"?g+=1:De!=="decline"&&(Ee+=1)}return Ie.push(`${Ee} release${Ee===1?"":"s"}`),Ie.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Ie.join(", "))},ce=await u(({useSubmit:Ce})=>{let[de,Ie]=te();Ce(de);let{relevantWorkspaces:Ee}=V(de),g=new Set([...Ee].filter(ne=>!F.releaseRoots.has(ne))),[me,De]=I(0),he=E(ne=>{switch(ne){case a.BEFORE:De(me-1);break;case a.AFTER:De(me+1);break}},[me,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(N,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...F.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(F.root)),ue.sep,ue.relative(ue.fromPortablePath(F.root),ue.fromPortablePath(ne)))))),F.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:F.releaseRoots,releases:de})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:me%2===0,radius:1,size:2,onFocusRequest:he},[...F.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:de.get(ne)||"undecided",setDecision:ee=>Ie(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:de})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:me%2===1,radius:2,size:2,onFocusRequest:he},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:de.get(ne)||"undecided",setDecision:ee=>Ie(ne,ee)}))))):null)},{versionFile:F},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ce>"u")return 1;F.releases.clear();for(let[Ce,de]of ce)F.releases.set(Ce,de);await F.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Ft.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await pw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${fe.pretty(r,A.baseHash.slice(0,7),"yellow")} ${fe.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${fe.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=lR(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${j.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=jv(A);for(let[v,x]of I)h||u.reportSeparator(),u.reportError(0,`${j.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${j.prettyWorkspace(r,x)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};rg.paths=[["version","check"]],rg.usage=nt.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"]]});Ye();qt();var AR=Ze(Jn());var ng=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new sr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=AR.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=Wj(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!AR.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=Aw(this.strategy)}if(!n){let I=(await Gv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=cR(a.manifest.version,p);if(AR.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await pw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};ng.paths=[["version"]],ng.usage=nt.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"]]});var ZPt={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:[tg,rg,ng]},$Pt=ZPt;var Vj={};zt(Vj,{WorkspacesFocusCommand:()=>ig,WorkspacesForeachCommand:()=>lp,default:()=>rDt});Ye();Ye();qt();var ig=class extends ut{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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new sr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(j.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};ig.paths=[["workspaces","focus"]],ig.usage=nt.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 "});Ye();Ye();Ye();qt();var gw=Ze(Xo()),VBe=Ze(sd());$a();var lp=class extends ut{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:LT([Vs(["unlimited"]),sI(TT(),[OT(),NT(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()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new sr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=Ee=>{!this.dryRun||this.context.stdout.write(`${Ee} +`)},p=()=>{let Ee=this.from.map(g=>gw.default.matcher(g));return o.workspaces.filter(g=>{let me=j.stringifyIdent(g.anchoredLocator),De=g.relativeCwd;return Ee.some(he=>he(me)||he(De))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let Ee of h)A(` +- ${Ee.relativeCwd} + ${j.prettyLocator(r,Ee.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let Ee of E)A(` +- ${Ee.relativeCwd} + ${j.prettyLocator(r,Ee.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let Ee of o.workspaces)if(Ee.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let Ee of h){if(u&&!Ee.manifest.scripts.has(u)&&!v&&!(await An.getWorkspaceAccessibleBinaries(Ee)).has(u)){A(`Excluding ${Ee.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&Ee.cwd===a.cwd)){if(this.include.length>0&&!gw.default.isMatch(j.stringifyIdent(Ee.anchoredLocator),this.include)&&!gw.default.isMatch(Ee.relativeCwd,this.include)){A(`Excluding ${Ee.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(gw.default.isMatch(j.stringifyIdent(Ee.anchoredLocator),this.exclude)||gw.default.isMatch(Ee.relativeCwd,this.exclude))){A(`Excluding ${Ee.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&Ee.manifest.private===!0){A(`Excluding ${Ee.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(Ee)}}if(this.dryRun)return 0;let x=this.verbose??(this.context.stdout.isTTY?1/0:0),C=x>0,F=x>1,N=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,U=N===1?!1:this.parallel,V=U?this.interlaced:!0,te=(0,VBe.default)(N),le=new Map,ae=new Set,ce=0,Ce=null,de=!1,Ie=await Ft.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async Ee=>{let g=async(me,{commandIndex:De})=>{if(de)return-1;!U&&F&&De>1&&Ee.reportSeparator();let he=eDt(me,{configuration:r,label:C,commandIndex:De}),[ne,ee]=zBe(Ee,{prefix:he,interlaced:V}),[Be,Te]=zBe(Ee,{prefix:he,interlaced:V});try{F&&Ee.reportInfo(null,`${he?`${he} `:""}Process started`);let ht=Date.now(),H=await this.cli.run([this.commandName,...this.args],{cwd:me.cwd,stdout:ne,stderr:Be})||0;ne.end(),Be.end(),await ee,await Te;let at=Date.now();if(F){let Re=r.get("enableTimers")?`, completed in ${fe.pretty(r,at-ht,fe.Type.DURATION)}`:"";Ee.reportInfo(null,`${he?`${he} `:""}Process exited (exit code ${H})${Re}`)}return H===130&&(de=!0,Ce=H),H}catch(ht){throw ne.end(),Be.end(),await ee,await Te,ht}};for(let me of I)le.set(me.anchoredLocator.locatorHash,me);for(;le.size>0&&!Ee.hasErrors();){let me=[];for(let[ne,ee]of le){if(ae.has(ee.anchoredDescriptor.descriptorHash))continue;let Be=!0;if(this.topological||this.topologicalDev){let Te=this.topologicalDev?new Map([...ee.manifest.dependencies,...ee.manifest.devDependencies]):ee.manifest.dependencies;for(let ht of Te.values()){let H=o.tryWorkspaceByDescriptor(ht);if(Be=H===null||!le.has(H.anchoredLocator.locatorHash),!Be)break}}if(!!Be&&(ae.add(ee.anchoredDescriptor.descriptorHash),me.push(te(async()=>{let Te=await g(ee,{commandIndex:++ce});return le.delete(ne),ae.delete(ee.anchoredDescriptor.descriptorHash),Te})),!U))break}if(me.length===0){let ne=Array.from(le.values()).map(ee=>j.prettyLocator(r,ee.anchoredLocator)).join(", ");Ee.reportError(3,`Dependency cycle detected (${ne})`);return}let he=(await Promise.all(me)).find(ne=>ne!==0);Ce===null&&(Ce=typeof he<"u"?1:Ce),(this.topological||this.topologicalDev)&&typeof he<"u"&&Ee.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return Ce!==null?Ce:Ie.exitCode()}};lp.paths=[["workspaces","foreach"]],lp.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),lp.schema=[aI("all",Yu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),MT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function zBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new He.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new He.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function eDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${j.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return fe.pretty(e,n,A)}var tDt={commands:[ig,lp]},rDt=tDt;var AC=()=>({modules:new Map([["@yarnpkg/cli",l2],["@yarnpkg/core",a2],["@yarnpkg/fslib",Ww],["@yarnpkg/libzip",k1],["@yarnpkg/parsers",eI],["@yarnpkg/shell",L1],["clipanion",fI],["semver",nDt],["typanion",Ko],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",PH],["@yarnpkg/plugin-file",SH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Tq],["@yarnpkg/plugin-link",Lq],["@yarnpkg/plugin-nm",yG],["@yarnpkg/plugin-npm",dj],["@yarnpkg/plugin-npm-cli",Pj],["@yarnpkg/plugin-pack",Aj],["@yarnpkg/plugin-patch",Rj],["@yarnpkg/plugin-pnp",oG],["@yarnpkg/plugin-pnpm",Lj],["@yarnpkg/plugin-stage",qj],["@yarnpkg/plugin-typescript",Gj],["@yarnpkg/plugin-version",zj],["@yarnpkg/plugin-workspace-tools",Vj]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function ZBe({cwd:t,pluginConfiguration:e}){let r=new ls({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:nn??""});return Object.assign(r,{defaultContext:{...ls.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function iDt(t){if(He.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(Lr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return ls.defaultContext.stdout.write(t.error(a)),!1}async function $Be({selfPath:t,pluginConfiguration:e}){return await Ke.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function sDt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,JBe.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function oDt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?z.resolve(r):z.cwd(),o}function aDt(t,{configuration:e}){if(!e.get("enableTelemetry")||XBe.isCI||!process.stdout.isTTY)return;Ke.telemetry=new lC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())cC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function eve(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function lDt(t,e,{selfPath:r,pluginConfiguration:o}){if(!iDt(t))return 1;let a=await $Be({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return sDt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=oDt(t,e);aDt(t,{configuration:a}),eve(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function ehe({cwd:t=z.cwd(),pluginConfiguration:e=AC()}={}){let r=ZBe({cwd:t,pluginConfiguration:e}),o=await $Be({pluginConfiguration:e,selfPath:null});return eve(r,{configuration:o}),r}async function ik(t,{cwd:e=z.cwd(),selfPath:r,pluginConfiguration:o}){let a=ZBe({cwd:e,pluginConfiguration:o});try{process.exitCode=await lDt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){ls.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}ik(process.argv.slice(2),{cwd:z.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:AC()});})(); /* object-assign (c) Sindre Sorhus diff --git a/.yarnrc.yml b/.yarnrc.yml index b353e243..0ee84b42 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -8,4 +8,4 @@ npmRegistries: preferInteractive: true -yarnPath: .yarn/releases/yarn-4.2.2.cjs +yarnPath: .yarn/releases/yarn-4.3.0.cjs diff --git a/package.json b/package.json index 52ab4ff3..dcf6920c 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "git-diff": "2.0.6", "shx": "0.3.4" }, - "packageManager": "yarn@4.2.2", + "packageManager": "yarn@4.3.0", "engines": { "node": ">=18.0.0" }, From 04c85c0e96b7071ca69a4b6d095248004e0872ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:14:45 +0000 Subject: [PATCH 015/138] chore(deps-dev): bump @biomejs/biome from 1.8.0 to 1.8.1 Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 1.8.0 to 1.8.1. - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/cli/v1.8.1/packages/@biomejs/biome) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 74 ++++++++++++++++++++++++++-------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index dcf6920c..c6d738cc 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "typescript": "5.4.5" }, "devDependencies": { - "@biomejs/biome": "1.8.0", + "@biomejs/biome": "1.8.1", "@types/lodash": "4.17.5", "@types/node": "20.14.2", "axios": "1.7.2", diff --git a/yarn.lock b/yarn.lock index 9a98c0fe..e7ed7061 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,18 +34,18 @@ __metadata: languageName: node linkType: hard -"@biomejs/biome@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/biome@npm:1.8.0" +"@biomejs/biome@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/biome@npm:1.8.1" dependencies: - "@biomejs/cli-darwin-arm64": "npm:1.8.0" - "@biomejs/cli-darwin-x64": "npm:1.8.0" - "@biomejs/cli-linux-arm64": "npm:1.8.0" - "@biomejs/cli-linux-arm64-musl": "npm:1.8.0" - "@biomejs/cli-linux-x64": "npm:1.8.0" - "@biomejs/cli-linux-x64-musl": "npm:1.8.0" - "@biomejs/cli-win32-arm64": "npm:1.8.0" - "@biomejs/cli-win32-x64": "npm:1.8.0" + "@biomejs/cli-darwin-arm64": "npm:1.8.1" + "@biomejs/cli-darwin-x64": "npm:1.8.1" + "@biomejs/cli-linux-arm64": "npm:1.8.1" + "@biomejs/cli-linux-arm64-musl": "npm:1.8.1" + "@biomejs/cli-linux-x64": "npm:1.8.1" + "@biomejs/cli-linux-x64-musl": "npm:1.8.1" + "@biomejs/cli-win32-arm64": "npm:1.8.1" + "@biomejs/cli-win32-x64": "npm:1.8.1" dependenciesMeta: "@biomejs/cli-darwin-arm64": optional: true @@ -65,62 +65,62 @@ __metadata: optional: true bin: biome: bin/biome - checksum: 10c0/0def7e1bef485cb60038d724dd3c11b9e6aaf2aa91593b76ab73f0d52ed319c56831fb5e7fa5a3618ee719b98a55198c88f2cabd8b32c7e17fac9b86f427a95b + checksum: 10c0/17990974c5a4f56104bc59e45d1aebc50ffa146c0d9f3da99f5c54770188939608d08f1edb70b69ea7715c4d9da6d10d4b2b1ed7cd9b54ec58fcd89cda2a1d38 languageName: node linkType: hard -"@biomejs/cli-darwin-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-darwin-arm64@npm:1.8.0" +"@biomejs/cli-darwin-arm64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-darwin-arm64@npm:1.8.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-darwin-x64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-darwin-x64@npm:1.8.0" +"@biomejs/cli-darwin-x64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-darwin-x64@npm:1.8.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@biomejs/cli-linux-arm64-musl@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-linux-arm64-musl@npm:1.8.0" +"@biomejs/cli-linux-arm64-musl@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-linux-arm64-musl@npm:1.8.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-linux-arm64@npm:1.8.0" +"@biomejs/cli-linux-arm64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-linux-arm64@npm:1.8.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-linux-x64-musl@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-linux-x64-musl@npm:1.8.0" +"@biomejs/cli-linux-x64-musl@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-linux-x64-musl@npm:1.8.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-x64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-linux-x64@npm:1.8.0" +"@biomejs/cli-linux-x64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-linux-x64@npm:1.8.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-win32-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-win32-arm64@npm:1.8.0" +"@biomejs/cli-win32-arm64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-win32-arm64@npm:1.8.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-win32-x64@npm:1.8.0": - version: 1.8.0 - resolution: "@biomejs/cli-win32-x64@npm:1.8.0" +"@biomejs/cli-win32-x64@npm:1.8.1": + version: 1.8.1 + resolution: "@biomejs/cli-win32-x64@npm:1.8.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1088,7 +1088,7 @@ __metadata: version: 0.0.0-use.local resolution: "swagger-typescript-api@workspace:." dependencies: - "@biomejs/biome": "npm:1.8.0" + "@biomejs/biome": "npm:1.8.1" "@types/lodash": "npm:4.17.5" "@types/node": "npm:20.14.2" "@types/swagger-schema-official": "npm:^2.0.25" From 333f650ede6d1ca4059f4e4b8ecbdcf0452e9d21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:37:47 +0000 Subject: [PATCH 016/138] chore(deps): bump prettier from 3.3.1 to 3.3.2 Bumps [prettier](https://github.com/prettier/prettier) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.3.1...3.3.2) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c6d738cc..29f1969d 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "lodash": "^4.17.21", "nanoid": "^3.3.7", "node-emoji": "^2.1.3", - "prettier": "3.3.1", + "prettier": "3.3.2", "swagger-schema-official": "2.0.0-bab6bed", "swagger2openapi": "^7.0.8", "typescript": "5.4.5" diff --git a/yarn.lock b/yarn.lock index e7ed7061..e8c3881e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -856,12 +856,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.3.1": - version: 3.3.1 - resolution: "prettier@npm:3.3.1" +"prettier@npm:3.3.2": + version: 3.3.2 + resolution: "prettier@npm:3.3.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/c25a709c9f0be670dc6bcb190b622347e1dbeb6c3e7df8b0711724cb64d8647c60b839937a4df4df18e9cfb556c2b08ca9d24d9645eb5488a7fc032a2c4d5cb3 + checksum: 10c0/39ed27d17f0238da6dd6571d63026566bd790d3d0edac57c285fbab525982060c8f1e01955fe38134ab10f0951a6076da37f015db8173c02f14bc7f0803a384c languageName: node linkType: hard @@ -1103,7 +1103,7 @@ __metadata: lodash: "npm:^4.17.21" nanoid: "npm:^3.3.7" node-emoji: "npm:^2.1.3" - prettier: "npm:3.3.1" + prettier: "npm:3.3.2" shx: "npm:0.3.4" swagger-schema-official: "npm:2.0.0-bab6bed" swagger2openapi: "npm:^7.0.8" From 08f89675e8e36137454d68f57cc351b81f0a3d39 Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Fri, 10 May 2024 03:04:21 +0900 Subject: [PATCH 017/138] Vitest Signed-off-by: Sora Morimoto --- .github/workflows/main.yml | 33 +- .github/workflows/publish.yml | 26 + biome.json | 10 +- package.json | 61 +- scripts_runner.js | 63 - tests/README.md | 14 - tests/__snapshots__/extended.test.ts.snap | 70846 ++++++++++++++++ .../simple.test.ts.snap} | 61314 ++++++++----- tests/allSchemas.js | 46 - tests/extended.test.ts | 48 + .../{ => fixtures}/schemas/v2.0/adafruit.yaml | 0 .../schemas/v2.0/another-example.json | 0 .../schemas/v2.0/another-schema.json | 0 .../schemas/v2.0/api-with-examples.yaml | 0 .../schemas/v2.0/authentiq.json | 0 tests/{ => fixtures}/schemas/v2.0/enums.json | 0 .../{ => fixtures}/schemas/v2.0/example1.json | 0 .../schemas/v2.0/file-formdata-example.json | 0 .../schemas/v2.0/furkot-example.yaml | 0 tests/{ => fixtures}/schemas/v2.0/giphy.yaml | 0 .../schemas/v2.0/path-args.yaml | 0 .../schemas/v2.0/petstore-expanded.json | 0 .../schemas/v2.0/petstore-minimal.json | 0 .../schemas/v2.0/petstore-simple.yaml | 0 .../schemas/v2.0/petstore-swagger-io.json | 0 .../v2.0/petstore-with-external-docs.yaml | 0 .../{ => fixtures}/schemas/v2.0/petstore.yaml | 0 .../schemas/v2.0/query-path-param.yaml | 0 tests/{ => fixtures}/schemas/v2.0/uber.yaml | 0 .../schemas/v3.0/additional-properties.yaml | 0 .../schemas/v3.0/additional-properties2.json | 0 .../schemas/v3.0/allof-example.yaml | 0 .../schemas/v3.0/anyof-example.yaml | 0 .../schemas/v3.0/api-with-examples.yaml | 0 .../schemas/v3.0/callback-example.yaml | 0 .../schemas/v3.0/components-responses.yaml | 0 .../schemas/v3.0/explode-param-3.yaml} | 0 .../schemas/v3.0/full-swagger-scheme.json | 0 .../schemas/v3.0/link-example.yaml | 0 .../schemas/v3.0/no-definitions-schema.yaml | 0 .../schemas/v3.0/oneof-example.yaml | 0 .../schemas/v3.0/personal-api-example.json | 0 .../schemas/v3.0/petstore-expanded.yaml | 0 .../{ => fixtures}/schemas/v3.0/petstore.yaml | 0 .../schemas/v3.0/recursive-schema.json | 0 .../schemas/v3.0/responses.yaml | 0 .../schemas/v3.0/swaggerhub-template.yaml | 0 .../schemas/v3.0/tsoa-odd-types-3.json} | 0 .../schemas/v3.0/up-banking.json | 0 tests/{ => fixtures}/schemas/v3.0/uspto.yaml | 0 .../schemas/v3.0/wrong-enum-subtypes.yaml | 0 .../schemas/v3.0/wrong-schema-names.yaml | 0 tests/generate-extended.js | 87 - tests/generate.js | 20 - tests/generated/v2.0/adafruit.ts | 2310 - tests/generated/v2.0/another-example.ts | 831 - tests/generated/v2.0/another-schema.ts | 301 - tests/generated/v2.0/api-with-examples.ts | 292 - tests/generated/v2.0/authentiq.ts | 643 - tests/generated/v2.0/enums.ts | 285 - tests/generated/v2.0/example1.ts | 295 - tests/generated/v2.0/file-formdata-example.ts | 256 - tests/generated/v2.0/furkot-example.ts | 340 - tests/generated/v2.0/giphy.ts | 875 - tests/generated/v2.0/github-swagger.ts | 6284 -- tests/generated/v2.0/path-args.ts | 259 - tests/generated/v2.0/petstore-expanded.ts | 353 - tests/generated/v2.0/petstore-minimal.ts | 256 - tests/generated/v2.0/petstore-simple.ts | 327 - tests/generated/v2.0/petstore-swagger-io.ts | 685 - .../v2.0/petstore-with-external-docs.ts | 320 - tests/generated/v2.0/petstore.ts | 302 - tests/generated/v2.0/query-path-param.ts | 257 - tests/generated/v2.0/uber.ts | 472 - tests/generated/v3.0/additional-properties.ts | 233 - .../generated/v3.0/additional-properties2.ts | 229 - tests/generated/v3.0/allof-example.ts | 257 - tests/generated/v3.0/anyof-example.ts | 253 - tests/generated/v3.0/api-with-examples.ts | 258 - tests/generated/v3.0/callback-example.ts | 263 - tests/generated/v3.0/components-responses.ts | 248 - tests/generated/v3.0/explode-param-3.0.1.ts | 294 - tests/generated/v3.0/link-example.ts | 336 - tests/generated/v3.0/no-definitions-schema.ts | 240 - tests/generated/v3.0/oneof-example.ts | 253 - tests/generated/v3.0/personal-api-example.ts | 606 - tests/generated/v3.0/petstore-expanded.ts | 319 - tests/generated/v3.0/petstore.ts | 304 - tests/generated/v3.0/recursive-schema.ts | 236 - tests/generated/v3.0/responses.ts | 249 - tests/generated/v3.0/swaggerhub-template.ts | 262 - tests/generated/v3.0/tsoa-odd-types-3.0.2.ts | 627 - tests/generated/v3.0/up-banking.ts | 1443 - tests/generated/v3.0/uspto.ts | 335 - tests/generated/v3.0/wrong-enum-subtypes.ts | 232 - tests/generated/v3.0/wrong-schema-names.ts | 343 - tests/helpers/assertGeneratedModule.js | 109 - tests/helpers/createGeneratedApiInfos.js | 7 - tests/helpers/createSchemaInfos.js | 70 - tests/helpers/generateApiForTest.js | 21 - tests/helpers/specGenerateOptions.js | 6 - tests/helpers/validateGeneratedModule.js | 87 - tests/schemas/v2.0/github-swagger.json | 23825 ------ tests/simple.test.ts | 41 + .../basic.test.ts.snap} | 7 +- .../additional-properties-2.0/basic.test.ts | 37 + .../additional-properties-2.0/expected.ts | 33 - tests/spec/additional-properties-2.0/test.js | 27 - .../basic.test.ts.snap} | 7 +- tests/spec/another-array-type/basic.test.ts | 37 + tests/spec/another-array-type/schema.ts | 14 - tests/spec/another-array-type/test.js | 27 - .../basic.test.ts.snap} | 19 +- tests/spec/another-query-params/basic.test.ts | 36 + tests/spec/another-query-params/schema.ts | 310 - tests/spec/another-query-params/test.js | 26 - .../basic.test.ts.snap} | 501 +- tests/spec/axios/basic.test.ts | 37 + tests/spec/axios/schema.ts | 6181 -- tests/spec/axios/test.js | 27 - .../basic.test.ts.snap} | 501 +- .../spec/axiosSingleHttpClient/basic.test.ts | 38 + tests/spec/axiosSingleHttpClient/expected.ts | 6187 -- tests/spec/axiosSingleHttpClient/test.js | 28 - tests/spec/cli/expected.ts | 618 - tests/spec/cli/schema.ts | 618 - .../basic.test.ts.snap} | 7 +- tests/spec/const-keyword/basic.test.ts | 37 + tests/spec/const-keyword/expected.ts | 91 - tests/spec/const-keyword/test.js | 27 - .../basic.test.ts.snap} | 25 +- tests/spec/custom-extensions/basic.test.ts | 35 + tests/spec/custom-extensions/expected.ts | 241 - tests/spec/custom-extensions/test.js | 25 - .../basic.test.ts.snap} | 51 +- tests/spec/defaultAsSuccess/basic.test.ts | 36 + tests/spec/defaultAsSuccess/schema.ts | 607 - tests/spec/defaultAsSuccess/test.js | 26 - .../basic.test.ts.snap} | 19 +- tests/spec/defaultResponse/basic.test.ts | 36 + tests/spec/defaultResponse/schema.ts | 259 - tests/spec/defaultResponse/test.js | 26 - .../basic.test.ts.snap} | 23 +- tests/spec/deprecated/basic.test.ts | 36 + tests/spec/deprecated/schema.ts | 296 - tests/spec/deprecated/test.js | 26 - .../basic.test.ts.snap} | 7 +- tests/spec/discriminator/basic.test.ts | 37 + tests/spec/discriminator/expected.ts | 224 - tests/spec/discriminator/test.js | 27 - .../basic.test.ts.snap} | 19 +- tests/spec/dot-path-params/basic.test.ts | 36 + tests/spec/dot-path-params/schema.ts | 251 - tests/spec/dot-path-params/test.js | 28 - .../basic.test.ts.snap} | 47 +- tests/spec/enumNamesAsValues/basic.test.ts | 36 + tests/spec/enumNamesAsValues/schema.ts | 613 - tests/spec/enumNamesAsValues/test.js | 26 - .../basic.test.ts.snap} | 7 +- tests/spec/enums-2.0/basic.test.ts | 40 + tests/spec/enums-2.0/expected.ts | 100 - tests/spec/enums-2.0/test.js | 30 - tests/spec/extra-templates/expected.ts | 21 - tests/spec/extract-enums/v2.0/expected.ts | 238 - tests/spec/extract-enums/v2.0/schema.ts | 238 - tests/spec/extract-enums/v3.0/expected.ts | 400 - tests/spec/extract-enums/v3.0/schema.ts | 400 - .../basic.test.ts.snap} | 65 +- tests/spec/extractRequestBody/basic.test.ts | 37 + tests/spec/extractRequestBody/expected.ts | 826 - tests/spec/extractRequestBody/test.js | 27 - .../basic.test.ts.snap} | 53 +- tests/spec/extractRequestParams/basic.test.ts | 36 + tests/spec/extractRequestParams/expected.ts | 627 - tests/spec/extractRequestParams/test.js | 26 - .../basic.test.ts.snap} | 65 +- tests/spec/extractResponseBody/basic.test.ts | 37 + tests/spec/extractResponseBody/expected.ts | 844 - tests/spec/extractResponseBody/test.js | 27 - .../basic.test.ts.snap} | 65 +- tests/spec/extractResponseError/basic.test.ts | 37 + tests/spec/extractResponseError/schema.ts | 866 - tests/spec/extractResponseError/test.js | 27 - .../__snapshots__/basic.test.ts.snap} | 497 +- tests/spec/js/basic.test.ts | 37 + tests/spec/js/schema.d.ts | 4699 - tests/spec/js/test.js | 19 - .../__snapshots__/basic.test.ts.snap} | 503 +- tests/spec/jsAxios/basic.test.ts | 36 + tests/spec/jsAxios/schema.d.ts | 4572 - tests/spec/jsAxios/test.js | 20 - .../expected/Key.d.ts | 157 - .../jsSingleHttpClientModular/expected/Key.js | 119 - .../expected/KeyRoute.d.ts | 153 - .../expected/KeyRoute.js | 12 - .../expected/Login.d.ts | 58 - .../expected/Login.js | 47 - .../expected/LoginRoute.d.ts | 51 - .../expected/LoginRoute.js | 12 - .../expected/Scope.d.ts | 130 - .../expected/Scope.js | 103 - .../expected/ScopeRoute.d.ts | 131 - .../expected/ScopeRoute.js | 12 - .../expected/data-contracts.d.ts | 47 - .../expected/data-contracts.js | 12 - .../expected/http-client.d.ts | 80 - .../expected/http-client.js | 153 - .../generated/Key.d.ts | 157 - .../generated/Key.js | 119 - .../generated/KeyRoute.d.ts | 153 - .../generated/KeyRoute.js | 12 - .../generated/Login.d.ts | 58 - .../generated/Login.js | 47 - .../generated/LoginRoute.d.ts | 51 - .../generated/LoginRoute.js | 12 - .../generated/Scope.d.ts | 130 - .../generated/Scope.js | 103 - .../generated/ScopeRoute.d.ts | 131 - .../generated/ScopeRoute.js | 12 - .../generated/data-contracts.d.ts | 47 - .../generated/data-contracts.js | 12 - .../generated/http-client.d.ts | 80 - .../generated/http-client.js | 153 - .../jsSingleHttpClientModular/schema.json | 814 - tests/spec/jsSingleHttpClientModular/test.js | 50 - tests/spec/modular/expected/Key.ts | 176 - tests/spec/modular/expected/KeyRoute.ts | 160 - tests/spec/modular/expected/Login.ts | 67 - tests/spec/modular/expected/LoginRoute.ts | 53 - tests/spec/modular/expected/Scope.ts | 144 - tests/spec/modular/expected/ScopeRoute.ts | 137 - tests/spec/modular/expected/data-contracts.ts | 50 - tests/spec/modular/expected/http-client.ts | 220 - tests/spec/modular/expected/route-types.ts | 216 - tests/spec/modular/generated/Key.ts | 176 - tests/spec/modular/generated/KeyRoute.ts | 160 - tests/spec/modular/generated/Login.ts | 67 - tests/spec/modular/generated/LoginRoute.ts | 53 - tests/spec/modular/generated/Scope.ts | 144 - tests/spec/modular/generated/ScopeRoute.ts | 137 - .../spec/modular/generated/data-contracts.ts | 50 - tests/spec/modular/generated/http-client.ts | 220 - tests/spec/modular/generated/route-types.ts | 216 - tests/spec/modular/schema.json | 814 - tests/spec/modular/test.js | 41 - .../basic.test.ts.snap} | 65 +- tests/spec/moduleNameFirstTag/basic.test.ts | 36 + tests/spec/moduleNameFirstTag/expected.ts | 803 - tests/spec/moduleNameFirstTag/test.js | 26 - .../basic.test.ts.snap} | 65 +- tests/spec/moduleNameIndex/basic.test.ts | 36 + tests/spec/moduleNameIndex/expected.ts | 798 - tests/spec/moduleNameIndex/test.js | 26 - .../basic.test.ts.snap} | 7 +- tests/spec/noClient/basic.test.ts | 36 + tests/spec/noClient/schema.ts | 1908 - tests/spec/noClient/test.js | 26 - .../basic.test.ts.snap} | 7 +- tests/spec/nullable-2.0/basic.test.ts | 37 + tests/spec/nullable-2.0/expected.ts | 29 - tests/spec/nullable-2.0/test.js | 27 - .../basic.test.ts.snap} | 7 +- tests/spec/nullable-3.0/basic.test.ts | 37 + tests/spec/nullable-3.0/schema.ts | 29 - tests/spec/nullable-3.0/test.js | 27 - .../basic.test.ts.snap} | 7 +- tests/spec/object-types/basic.test.ts | 37 + tests/spec/object-types/schema.ts | 89 - tests/spec/object-types/test.js | 27 - .../basic.test.ts.snap} | 21 +- tests/spec/on-insert-path-param/basic.test.ts | 40 + tests/spec/on-insert-path-param/expected.ts | 289 - tests/spec/on-insert-path-param/test.js | 29 - tests/spec/partialBaseTemplate/expected.ts | 260 - tests/spec/partialBaseTemplate/schema.json | 60 - tests/spec/partialBaseTemplate/schema.ts | 260 - .../spec_templates/data-contracts.eta | 27 - tests/spec/partialBaseTemplate/test.js | 37 - tests/spec/partialDefaultTemplate/expected.ts | 253 - tests/spec/partialDefaultTemplate/schema.json | 60 - tests/spec/partialDefaultTemplate/schema.ts | 253 - .../spec_templates/api.eta | 47 - tests/spec/partialDefaultTemplate/test.js | 37 - .../basic.test.ts.snap} | 507 +- tests/spec/patch/basic.test.ts | 36 + tests/spec/patch/expected.ts | 5930 -- tests/spec/patch/test.js | 26 - .../another-array-type/expected.ts | 21 - .../another-array-type/schema.ts | 21 - .../base/expected.ts | 21 - .../primitive-type-constructs/base/schema.ts | 21 - .../primitive-type-constructs/schema.json | 36 - tests/spec/primitive-type-constructs/test.js | 64 - .../basic.test.ts.snap} | 7 +- tests/spec/readonly/basic.test.ts | 37 + tests/spec/readonly/schema.ts | 18 - tests/spec/readonly/test.js | 27 - .../basic.test.ts.snap} | 213 +- tests/spec/responses/basic.test.ts | 36 + tests/spec/responses/expected.ts | 719 - tests/spec/responses/test.js | 30 - .../basic.test.ts.snap} | 7 +- tests/spec/routeTypes/basic.test.ts | 37 + tests/spec/routeTypes/schema.ts | 7161 -- tests/spec/routeTypes/test.js | 27 - .../basic.test.ts.snap} | 21 +- tests/spec/singleHttpClient/basic.test.ts | 36 + tests/spec/singleHttpClient/expected.ts | 264 - tests/spec/singleHttpClient/test.js | 26 - .../__snapshots__/basic.test.ts.snap} | 707 +- tests/spec/sortTypes-false/basic.test.ts | 37 + tests/spec/sortTypes-false/expected.ts | 5889 -- tests/spec/sortTypes-false/test.js | 27 - .../__snapshots__/basic.test.ts.snap} | 707 +- tests/spec/sortTypes/basic.test.ts | 37 + tests/spec/sortTypes/schema.ts | 5889 -- tests/spec/sortTypes/test.js | 27 - .../basic.test.ts.snap} | 7 +- tests/spec/specProperty/basic.test.ts | 37 + tests/spec/specProperty/schema.ts | 117 - tests/spec/specProperty/test.js | 27 - tests/spec/templates/expected.ts | 6710 -- tests/spec/templates/schema.json | 23683 ------ tests/spec/templates/schema.ts | 6710 -- tests/spec/templates/spec_templates/api.eta | 63 - .../spec_templates/data-contracts.eta | 30 - .../templates/spec_templates/http-client.eta | 5 - .../spec_templates/procedure-call.eta | 102 - .../templates/spec_templates/route-docs.eta | 31 - .../templates/spec_templates/route-name.eta | 44 - .../templates/spec_templates/route-type.eta | 26 - .../templates/spec_templates/route-types.eta | 23 - tests/spec/templates/test.js | 27 - .../basic.test.ts.snap} | 1511 +- tests/spec/typeSuffixPrefix/basic.test.ts | 39 + tests/spec/typeSuffixPrefix/schema.ts | 6646 -- tests/spec/typeSuffixPrefix/test.js | 31 - .../basic.test.ts.snap} | 17 +- tests/spec/unionEnums/basic.test.ts | 36 + tests/spec/unionEnums/schema.ts | 238 - tests/spec/unionEnums/test.js | 26 - tests/utils.ts | 20 + tests/validate.js | 9 - vitest.config.mts | 7 + yarn.lock | 1755 +- 345 files changed, 116845 insertions(+), 187000 deletions(-) create mode 100644 .github/workflows/publish.yml delete mode 100644 scripts_runner.js delete mode 100644 tests/README.md create mode 100644 tests/__snapshots__/extended.test.ts.snap rename tests/{generated/v3.0/full-swagger-scheme.ts => __snapshots__/simple.test.ts.snap} (52%) delete mode 100644 tests/allSchemas.js create mode 100644 tests/extended.test.ts rename tests/{ => fixtures}/schemas/v2.0/adafruit.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/another-example.json (100%) rename tests/{ => fixtures}/schemas/v2.0/another-schema.json (100%) rename tests/{ => fixtures}/schemas/v2.0/api-with-examples.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/authentiq.json (100%) rename tests/{ => fixtures}/schemas/v2.0/enums.json (100%) rename tests/{ => fixtures}/schemas/v2.0/example1.json (100%) rename tests/{ => fixtures}/schemas/v2.0/file-formdata-example.json (100%) rename tests/{ => fixtures}/schemas/v2.0/furkot-example.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/giphy.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/path-args.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore-expanded.json (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore-minimal.json (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore-simple.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore-swagger-io.json (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore-with-external-docs.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/petstore.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/query-path-param.yaml (100%) rename tests/{ => fixtures}/schemas/v2.0/uber.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/additional-properties.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/additional-properties2.json (100%) rename tests/{ => fixtures}/schemas/v3.0/allof-example.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/anyof-example.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/api-with-examples.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/callback-example.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/components-responses.yaml (100%) rename tests/{schemas/v3.0/explode-param-3.0.1.yaml => fixtures/schemas/v3.0/explode-param-3.yaml} (100%) rename tests/{ => fixtures}/schemas/v3.0/full-swagger-scheme.json (100%) rename tests/{ => fixtures}/schemas/v3.0/link-example.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/no-definitions-schema.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/oneof-example.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/personal-api-example.json (100%) rename tests/{ => fixtures}/schemas/v3.0/petstore-expanded.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/petstore.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/recursive-schema.json (100%) rename tests/{ => fixtures}/schemas/v3.0/responses.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/swaggerhub-template.yaml (100%) rename tests/{schemas/v3.0/tsoa-odd-types-3.0.2.json => fixtures/schemas/v3.0/tsoa-odd-types-3.json} (100%) rename tests/{ => fixtures}/schemas/v3.0/up-banking.json (100%) rename tests/{ => fixtures}/schemas/v3.0/uspto.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/wrong-enum-subtypes.yaml (100%) rename tests/{ => fixtures}/schemas/v3.0/wrong-schema-names.yaml (100%) delete mode 100644 tests/generate-extended.js delete mode 100644 tests/generate.js delete mode 100644 tests/generated/v2.0/adafruit.ts delete mode 100644 tests/generated/v2.0/another-example.ts delete mode 100644 tests/generated/v2.0/another-schema.ts delete mode 100644 tests/generated/v2.0/api-with-examples.ts delete mode 100644 tests/generated/v2.0/authentiq.ts delete mode 100644 tests/generated/v2.0/enums.ts delete mode 100644 tests/generated/v2.0/example1.ts delete mode 100644 tests/generated/v2.0/file-formdata-example.ts delete mode 100644 tests/generated/v2.0/furkot-example.ts delete mode 100644 tests/generated/v2.0/giphy.ts delete mode 100644 tests/generated/v2.0/github-swagger.ts delete mode 100644 tests/generated/v2.0/path-args.ts delete mode 100644 tests/generated/v2.0/petstore-expanded.ts delete mode 100644 tests/generated/v2.0/petstore-minimal.ts delete mode 100644 tests/generated/v2.0/petstore-simple.ts delete mode 100644 tests/generated/v2.0/petstore-swagger-io.ts delete mode 100644 tests/generated/v2.0/petstore-with-external-docs.ts delete mode 100644 tests/generated/v2.0/petstore.ts delete mode 100644 tests/generated/v2.0/query-path-param.ts delete mode 100644 tests/generated/v2.0/uber.ts delete mode 100644 tests/generated/v3.0/additional-properties.ts delete mode 100644 tests/generated/v3.0/additional-properties2.ts delete mode 100644 tests/generated/v3.0/allof-example.ts delete mode 100644 tests/generated/v3.0/anyof-example.ts delete mode 100644 tests/generated/v3.0/api-with-examples.ts delete mode 100644 tests/generated/v3.0/callback-example.ts delete mode 100644 tests/generated/v3.0/components-responses.ts delete mode 100644 tests/generated/v3.0/explode-param-3.0.1.ts delete mode 100644 tests/generated/v3.0/link-example.ts delete mode 100644 tests/generated/v3.0/no-definitions-schema.ts delete mode 100644 tests/generated/v3.0/oneof-example.ts delete mode 100644 tests/generated/v3.0/personal-api-example.ts delete mode 100644 tests/generated/v3.0/petstore-expanded.ts delete mode 100644 tests/generated/v3.0/petstore.ts delete mode 100644 tests/generated/v3.0/recursive-schema.ts delete mode 100644 tests/generated/v3.0/responses.ts delete mode 100644 tests/generated/v3.0/swaggerhub-template.ts delete mode 100644 tests/generated/v3.0/tsoa-odd-types-3.0.2.ts delete mode 100644 tests/generated/v3.0/up-banking.ts delete mode 100644 tests/generated/v3.0/uspto.ts delete mode 100644 tests/generated/v3.0/wrong-enum-subtypes.ts delete mode 100644 tests/generated/v3.0/wrong-schema-names.ts delete mode 100644 tests/helpers/assertGeneratedModule.js delete mode 100644 tests/helpers/createGeneratedApiInfos.js delete mode 100644 tests/helpers/createSchemaInfos.js delete mode 100644 tests/helpers/generateApiForTest.js delete mode 100644 tests/helpers/specGenerateOptions.js delete mode 100644 tests/helpers/validateGeneratedModule.js delete mode 100644 tests/schemas/v2.0/github-swagger.json create mode 100644 tests/simple.test.ts rename tests/spec/additional-properties-2.0/{schema.ts => __snapshots__/basic.test.ts.snap} (84%) create mode 100644 tests/spec/additional-properties-2.0/basic.test.ts delete mode 100644 tests/spec/additional-properties-2.0/expected.ts delete mode 100644 tests/spec/additional-properties-2.0/test.js rename tests/spec/another-array-type/{expected.ts => __snapshots__/basic.test.ts.snap} (79%) create mode 100644 tests/spec/another-array-type/basic.test.ts delete mode 100644 tests/spec/another-array-type/schema.ts delete mode 100644 tests/spec/another-array-type/test.js rename tests/spec/another-query-params/{expected.ts => __snapshots__/basic.test.ts.snap} (94%) create mode 100644 tests/spec/another-query-params/basic.test.ts delete mode 100644 tests/spec/another-query-params/schema.ts delete mode 100644 tests/spec/another-query-params/test.js rename tests/spec/axios/{expected.ts => __snapshots__/basic.test.ts.snap} (92%) create mode 100644 tests/spec/axios/basic.test.ts delete mode 100644 tests/spec/axios/schema.ts delete mode 100644 tests/spec/axios/test.js rename tests/spec/axiosSingleHttpClient/{schema.ts => __snapshots__/basic.test.ts.snap} (92%) create mode 100644 tests/spec/axiosSingleHttpClient/basic.test.ts delete mode 100644 tests/spec/axiosSingleHttpClient/expected.ts delete mode 100644 tests/spec/axiosSingleHttpClient/test.js delete mode 100644 tests/spec/cli/expected.ts delete mode 100644 tests/spec/cli/schema.ts rename tests/spec/const-keyword/{schema.ts => __snapshots__/basic.test.ts.snap} (91%) create mode 100644 tests/spec/const-keyword/basic.test.ts delete mode 100644 tests/spec/const-keyword/expected.ts delete mode 100644 tests/spec/const-keyword/test.js rename tests/spec/custom-extensions/{schema.ts => __snapshots__/basic.test.ts.snap} (90%) create mode 100644 tests/spec/custom-extensions/basic.test.ts delete mode 100644 tests/spec/custom-extensions/expected.ts delete mode 100644 tests/spec/custom-extensions/test.js rename tests/spec/defaultAsSuccess/{expected.ts => __snapshots__/basic.test.ts.snap} (91%) create mode 100644 tests/spec/defaultAsSuccess/basic.test.ts delete mode 100644 tests/spec/defaultAsSuccess/schema.ts delete mode 100644 tests/spec/defaultAsSuccess/test.js rename tests/spec/defaultResponse/{expected.ts => __snapshots__/basic.test.ts.snap} (94%) create mode 100644 tests/spec/defaultResponse/basic.test.ts delete mode 100644 tests/spec/defaultResponse/schema.ts delete mode 100644 tests/spec/defaultResponse/test.js rename tests/spec/deprecated/{expected.ts => __snapshots__/basic.test.ts.snap} (95%) create mode 100644 tests/spec/deprecated/basic.test.ts delete mode 100644 tests/spec/deprecated/schema.ts delete mode 100644 tests/spec/deprecated/test.js rename tests/spec/discriminator/{schema.ts => __snapshots__/basic.test.ts.snap} (97%) create mode 100644 tests/spec/discriminator/basic.test.ts delete mode 100644 tests/spec/discriminator/expected.ts delete mode 100644 tests/spec/discriminator/test.js rename tests/spec/dot-path-params/{expected.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/dot-path-params/basic.test.ts delete mode 100644 tests/spec/dot-path-params/schema.ts delete mode 100644 tests/spec/dot-path-params/test.js rename tests/spec/enumNamesAsValues/{expected.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/enumNamesAsValues/basic.test.ts delete mode 100644 tests/spec/enumNamesAsValues/schema.ts delete mode 100644 tests/spec/enumNamesAsValues/test.js rename tests/spec/enums-2.0/{schema.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/enums-2.0/basic.test.ts delete mode 100644 tests/spec/enums-2.0/expected.ts delete mode 100644 tests/spec/enums-2.0/test.js delete mode 100644 tests/spec/extra-templates/expected.ts delete mode 100644 tests/spec/extract-enums/v2.0/expected.ts delete mode 100644 tests/spec/extract-enums/v2.0/schema.ts delete mode 100644 tests/spec/extract-enums/v3.0/expected.ts delete mode 100644 tests/spec/extract-enums/v3.0/schema.ts rename tests/spec/extractRequestBody/{schema.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/extractRequestBody/basic.test.ts delete mode 100644 tests/spec/extractRequestBody/expected.ts delete mode 100644 tests/spec/extractRequestBody/test.js rename tests/spec/extractRequestParams/{schema.ts => __snapshots__/basic.test.ts.snap} (91%) create mode 100644 tests/spec/extractRequestParams/basic.test.ts delete mode 100644 tests/spec/extractRequestParams/expected.ts delete mode 100644 tests/spec/extractRequestParams/test.js rename tests/spec/extractResponseBody/{schema.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/extractResponseBody/basic.test.ts delete mode 100644 tests/spec/extractResponseBody/expected.ts delete mode 100644 tests/spec/extractResponseBody/test.js rename tests/spec/extractResponseError/{expected.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/extractResponseError/basic.test.ts delete mode 100644 tests/spec/extractResponseError/schema.ts delete mode 100644 tests/spec/extractResponseError/test.js rename tests/spec/{jsAxios/schema.js => js/__snapshots__/basic.test.ts.snap} (87%) create mode 100644 tests/spec/js/basic.test.ts delete mode 100644 tests/spec/js/schema.d.ts delete mode 100644 tests/spec/js/test.js rename tests/spec/{js/schema.js => jsAxios/__snapshots__/basic.test.ts.snap} (87%) create mode 100644 tests/spec/jsAxios/basic.test.ts delete mode 100644 tests/spec/jsAxios/schema.d.ts delete mode 100644 tests/spec/jsAxios/test.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Key.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Key.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/KeyRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/KeyRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Login.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Login.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/LoginRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/LoginRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Scope.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/Scope.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/data-contracts.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/data-contracts.js delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/http-client.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/expected/http-client.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Key.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Key.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/KeyRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/KeyRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Login.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Login.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/LoginRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/LoginRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Scope.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/Scope.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/data-contracts.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/data-contracts.js delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/http-client.d.ts delete mode 100644 tests/spec/jsSingleHttpClientModular/generated/http-client.js delete mode 100644 tests/spec/jsSingleHttpClientModular/schema.json delete mode 100644 tests/spec/jsSingleHttpClientModular/test.js delete mode 100644 tests/spec/modular/expected/Key.ts delete mode 100644 tests/spec/modular/expected/KeyRoute.ts delete mode 100644 tests/spec/modular/expected/Login.ts delete mode 100644 tests/spec/modular/expected/LoginRoute.ts delete mode 100644 tests/spec/modular/expected/Scope.ts delete mode 100644 tests/spec/modular/expected/ScopeRoute.ts delete mode 100644 tests/spec/modular/expected/data-contracts.ts delete mode 100644 tests/spec/modular/expected/http-client.ts delete mode 100644 tests/spec/modular/expected/route-types.ts delete mode 100644 tests/spec/modular/generated/Key.ts delete mode 100644 tests/spec/modular/generated/KeyRoute.ts delete mode 100644 tests/spec/modular/generated/Login.ts delete mode 100644 tests/spec/modular/generated/LoginRoute.ts delete mode 100644 tests/spec/modular/generated/Scope.ts delete mode 100644 tests/spec/modular/generated/ScopeRoute.ts delete mode 100644 tests/spec/modular/generated/data-contracts.ts delete mode 100644 tests/spec/modular/generated/http-client.ts delete mode 100644 tests/spec/modular/generated/route-types.ts delete mode 100644 tests/spec/modular/schema.json delete mode 100644 tests/spec/modular/test.js rename tests/spec/moduleNameFirstTag/{schema.ts => __snapshots__/basic.test.ts.snap} (92%) create mode 100644 tests/spec/moduleNameFirstTag/basic.test.ts delete mode 100644 tests/spec/moduleNameFirstTag/expected.ts delete mode 100644 tests/spec/moduleNameFirstTag/test.js rename tests/spec/moduleNameIndex/{schema.ts => __snapshots__/basic.test.ts.snap} (92%) create mode 100644 tests/spec/moduleNameIndex/basic.test.ts delete mode 100644 tests/spec/moduleNameIndex/expected.ts delete mode 100644 tests/spec/moduleNameIndex/test.js rename tests/spec/noClient/{expected.ts => __snapshots__/basic.test.ts.snap} (99%) create mode 100644 tests/spec/noClient/basic.test.ts delete mode 100644 tests/spec/noClient/schema.ts delete mode 100644 tests/spec/noClient/test.js rename tests/spec/nullable-2.0/{schema.ts => __snapshots__/basic.test.ts.snap} (87%) create mode 100644 tests/spec/nullable-2.0/basic.test.ts delete mode 100644 tests/spec/nullable-2.0/expected.ts delete mode 100644 tests/spec/nullable-2.0/test.js rename tests/spec/nullable-3.0/{expected.ts => __snapshots__/basic.test.ts.snap} (87%) create mode 100644 tests/spec/nullable-3.0/basic.test.ts delete mode 100644 tests/spec/nullable-3.0/schema.ts delete mode 100644 tests/spec/nullable-3.0/test.js rename tests/spec/object-types/{expected.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/object-types/basic.test.ts delete mode 100644 tests/spec/object-types/schema.ts delete mode 100644 tests/spec/object-types/test.js rename tests/spec/on-insert-path-param/{schema.ts => __snapshots__/basic.test.ts.snap} (92%) create mode 100644 tests/spec/on-insert-path-param/basic.test.ts delete mode 100644 tests/spec/on-insert-path-param/expected.ts delete mode 100644 tests/spec/on-insert-path-param/test.js delete mode 100644 tests/spec/partialBaseTemplate/expected.ts delete mode 100644 tests/spec/partialBaseTemplate/schema.json delete mode 100644 tests/spec/partialBaseTemplate/schema.ts delete mode 100644 tests/spec/partialBaseTemplate/spec_templates/data-contracts.eta delete mode 100644 tests/spec/partialBaseTemplate/test.js delete mode 100644 tests/spec/partialDefaultTemplate/expected.ts delete mode 100644 tests/spec/partialDefaultTemplate/schema.json delete mode 100644 tests/spec/partialDefaultTemplate/schema.ts delete mode 100644 tests/spec/partialDefaultTemplate/spec_templates/api.eta delete mode 100644 tests/spec/partialDefaultTemplate/test.js rename tests/spec/patch/{schema.ts => __snapshots__/basic.test.ts.snap} (90%) create mode 100644 tests/spec/patch/basic.test.ts delete mode 100644 tests/spec/patch/expected.ts delete mode 100644 tests/spec/patch/test.js delete mode 100644 tests/spec/primitive-type-constructs/another-array-type/expected.ts delete mode 100644 tests/spec/primitive-type-constructs/another-array-type/schema.ts delete mode 100644 tests/spec/primitive-type-constructs/base/expected.ts delete mode 100644 tests/spec/primitive-type-constructs/base/schema.ts delete mode 100644 tests/spec/primitive-type-constructs/schema.json delete mode 100644 tests/spec/primitive-type-constructs/test.js rename tests/spec/readonly/{expected.ts => __snapshots__/basic.test.ts.snap} (82%) create mode 100644 tests/spec/readonly/basic.test.ts delete mode 100644 tests/spec/readonly/schema.ts delete mode 100644 tests/spec/readonly/test.js rename tests/spec/responses/{schema.ts => __snapshots__/basic.test.ts.snap} (76%) create mode 100644 tests/spec/responses/basic.test.ts delete mode 100644 tests/spec/responses/expected.ts delete mode 100644 tests/spec/responses/test.js rename tests/spec/routeTypes/{expected.ts => __snapshots__/basic.test.ts.snap} (99%) create mode 100644 tests/spec/routeTypes/basic.test.ts delete mode 100644 tests/spec/routeTypes/schema.ts delete mode 100644 tests/spec/routeTypes/test.js rename tests/spec/singleHttpClient/{schema.ts => __snapshots__/basic.test.ts.snap} (91%) create mode 100644 tests/spec/singleHttpClient/basic.test.ts delete mode 100644 tests/spec/singleHttpClient/expected.ts delete mode 100644 tests/spec/singleHttpClient/test.js rename tests/spec/{sortTypes/expected.ts => sortTypes-false/__snapshots__/basic.test.ts.snap} (90%) create mode 100644 tests/spec/sortTypes-false/basic.test.ts delete mode 100644 tests/spec/sortTypes-false/expected.ts delete mode 100644 tests/spec/sortTypes-false/test.js rename tests/spec/{sortTypes-false/schema.ts => sortTypes/__snapshots__/basic.test.ts.snap} (90%) create mode 100644 tests/spec/sortTypes/basic.test.ts delete mode 100644 tests/spec/sortTypes/schema.ts delete mode 100644 tests/spec/sortTypes/test.js rename tests/spec/specProperty/{expected.ts => __snapshots__/basic.test.ts.snap} (97%) create mode 100644 tests/spec/specProperty/basic.test.ts delete mode 100644 tests/spec/specProperty/schema.ts delete mode 100644 tests/spec/specProperty/test.js delete mode 100644 tests/spec/templates/expected.ts delete mode 100644 tests/spec/templates/schema.json delete mode 100644 tests/spec/templates/schema.ts delete mode 100644 tests/spec/templates/spec_templates/api.eta delete mode 100644 tests/spec/templates/spec_templates/data-contracts.eta delete mode 100644 tests/spec/templates/spec_templates/http-client.eta delete mode 100644 tests/spec/templates/spec_templates/procedure-call.eta delete mode 100644 tests/spec/templates/spec_templates/route-docs.eta delete mode 100644 tests/spec/templates/spec_templates/route-name.eta delete mode 100644 tests/spec/templates/spec_templates/route-type.eta delete mode 100644 tests/spec/templates/spec_templates/route-types.eta delete mode 100644 tests/spec/templates/test.js rename tests/spec/typeSuffixPrefix/{expected.ts => __snapshots__/basic.test.ts.snap} (79%) create mode 100644 tests/spec/typeSuffixPrefix/basic.test.ts delete mode 100644 tests/spec/typeSuffixPrefix/schema.ts delete mode 100644 tests/spec/typeSuffixPrefix/test.js rename tests/spec/unionEnums/{expected.ts => __snapshots__/basic.test.ts.snap} (93%) create mode 100644 tests/spec/unionEnums/basic.test.ts delete mode 100644 tests/spec/unionEnums/schema.ts delete mode 100644 tests/spec/unionEnums/test.js create mode 100644 tests/utils.ts delete mode 100644 tests/validate.js create mode 100644 vitest.config.mts diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6be744a0..0b72cb7d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,18 +1,14 @@ name: Builds, tests & co on: - push: - pull_request: - release: - types: - - published + - push + - pull_request permissions: read-all jobs: build-and-test: runs-on: ubuntu-latest - steps: - name: Checkout tree uses: actions/checkout@v4 @@ -30,27 +26,4 @@ jobs: run: yarn format:check - name: Run the tests - run: yarn test-all - - publish: - if: github.event_name == 'release' - - needs: - - build-and-test - - runs-on: ubuntu-latest - - steps: - - name: Checkout tree - uses: actions/checkout@v4 - - - name: Set-up Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - check-latest: true - - - name: Publish - run: yarn npm publish --tolerate-republish - env: - NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} + run: yarn test diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..99fa4a56 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,26 @@ +name: Publish + +on: + release: + types: + - published + +permissions: read-all + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Checkout tree + uses: actions/checkout@v4 + + - name: Set-up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + check-latest: true + + - name: Publish + run: yarn npm publish --tolerate-republish + env: + NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} diff --git a/biome.json b/biome.json index 154aff13..c275b9ee 100644 --- a/biome.json +++ b/biome.json @@ -1,15 +1,7 @@ { "$schema": "node_modules/@biomejs/biome/configuration_schema.json", "files": { - "ignore": [ - "package.json", - "tests/**/expected.ts", - "tests/**/expected/**", - "tests/**/generated/**", - "tests/**/schema.d.ts", - "tests/**/schema.js", - "tests/**/schema.ts" - ], + "ignore": ["package.json"], "maxSize": 10000000 }, "formatter": { diff --git a/package.json b/package.json index 29f1969d..ae274d0e 100644 --- a/package.json +++ b/package.json @@ -30,61 +30,7 @@ "cli:yaml": "node index.js -r -d -p ./swagger-test-cli.yaml -n swagger-test-cli.ts", "format": "biome format --write .", "format:check": "biome format .", - "generate": "node tests/generate.js", - "generate-extended": "node tests/generate-extended.js", - "node": "node swagger-test-cli/generate.js", - "node:debug": "node --nolazy swagger-test-cli/generate.js", - "test-all": "yarn test-extended && yarn test-simple && yarn test-specific", - "test-all(update-snapshots)": "cross-env UPDATE_SNAPSHOTS=true yarn test-all", - "test-extended": "node --unhandled-rejections=strict scripts_runner.js generate-extended validate", - "test-simple": "node --unhandled-rejections=strict scripts_runner.js generate validate", - "test-specific": "node --unhandled-rejections=strict scripts_runner.js \"test:*\"", - "test-specific(update-snapshots)": "cross-env UPDATE_SNAPSHOTS=true node --unhandled-rejections=strict scripts_runner.js \"test:*\"", - "test:--add-readonly": "node tests/spec/readonly/test.js", - "test:--another-array-type": "node tests/spec/another-array-type/test.js", - "test:--axios": "node tests/spec/axios/test.js", - "test:--axios--single-http-client": "node tests/spec/axiosSingleHttpClient/test.js", - "test:--cli": "shx rm -rf tests/spec/cli/schema.ts && node index.js -p tests/spec/cli/schema.json -o tests/spec/cli -n schema.ts --extract-response-body --extract-response-error --api-class-name MySuperApi --type-prefix Prefix && node tests/spec/cli/test.js", - "test:--default-as-success": "node tests/spec/defaultAsSuccess/test.js", - "test:--default-response": "node tests/spec/defaultResponse/test.js", - "test:--dot-path-params": "node tests/spec/dot-path-params/test.js", - "test:--enum-names-as-values": "node tests/spec/enumNamesAsValues/test.js", - "test:--extract-request-body": "node tests/spec/extractRequestBody/test.js", - "test:--extract-request-params": "node tests/spec/extractRequestParams/test.js", - "test:--extract-response-body": "node tests/spec/extractResponseBody/test.js", - "test:--extract-response-error": "node tests/spec/extractResponseError/test.js", - "test:--js": "node tests/spec/js/test.js", - "test:--js--axios": "node tests/spec/jsAxios/test.js", - "test:--modular": "node tests/spec/modular/test.js", - "test:--module-name-first-tag": "node tests/spec/moduleNameFirstTag/test.js", - "test:--module-name-index": "node tests/spec/moduleNameIndex/test.js", - "test:--no-client": "node tests/spec/noClient/test.js", - "test:--object-types": "node tests/spec/object-types/test.js", - "test:--patch": "node tests/spec/patch/test.js", - "test:--primitive-type-constructs": "node tests/spec/primitive-type-constructs/test.js", - "test:--responses": "node tests/spec/responses/test.js", - "test:--route-types": "node tests/spec/routeTypes/test.js", - "test:--single-http-client": "node tests/spec/singleHttpClient/test.js", - "test:--templates": "node tests/spec/templates/test.js", - "test:--type-suffix--type-prefix": "node tests/spec/typeSuffixPrefix/test.js", - "test:--union-enums": "node tests/spec/unionEnums/test.js", - "test:additionalProperties2.0": "node tests/spec/additional-properties-2.0/test.js", - "test:another-query-params": "node tests/spec/another-query-params/test.js", - "test:const-keyword": "node tests/spec/const-keyword/test.js", - "test:deprecated": "node tests/spec/deprecated/test.js", - "test:discriminator": "node tests/spec/discriminator/test.js", - "test:enums2.0": "node tests/spec/enums-2.0/test.js", - "test:extra-templates": "node tests/spec/extra-templates/test.js", - "test:extract-enums": "node tests/spec/extract-enums/test.js", - "test:jsSingleHttpClientModular": "node tests/spec/jsSingleHttpClientModular/test.js", - "test:nullableRefTest2.0": "node tests/spec/nullable-2.0/test.js", - "test:nullableRefTest3.0": "node tests/spec/nullable-3.0/test.js", - "test:on-insert-path-param": "node tests/spec/on-insert-path-param/test.js", - "test:partialBaseTemplate": "node tests/spec/partialBaseTemplate/test.js", - "test:partialDefaultTemplate": "node tests/spec/partialDefaultTemplate/test.js", - "test:sort-types": "node tests/spec/sortTypes/test.js", - "test:sort-types-false": "node tests/spec/sortTypes-false/test.js", - "test:specProperty": "node tests/spec/specProperty/test.js", + "test": "vitest run", "validate": "node tests/validate.js", "validate:debug": "node --nolazy tests/validate.js" }, @@ -99,7 +45,7 @@ "node-emoji": "^2.1.3", "prettier": "3.3.2", "swagger-schema-official": "2.0.0-bab6bed", - "swagger2openapi": "^7.0.8", + "swagger2openapi": "7.0.8", "typescript": "5.4.5" }, "devDependencies": { @@ -110,7 +56,8 @@ "cross-env": "7.0.3", "dotenv": "16.4.5", "git-diff": "2.0.6", - "shx": "0.3.4" + "shx": "0.3.4", + "vitest": "1.6.0" }, "packageManager": "yarn@4.3.0", "engines": { diff --git a/scripts_runner.js b/scripts_runner.js deleted file mode 100644 index 22ec34e1..00000000 --- a/scripts_runner.js +++ /dev/null @@ -1,63 +0,0 @@ -const packageJson = require("./package.json"); -const { spawn } = require("node:child_process"); - -const commands = process.argv.slice(2); - -const packageScripts = Object.keys(packageJson.scripts); - -const execute = (scriptName) => - new Promise((resolve, reject) => { - console.log(`yarn ${scriptName}`); - const spawned = spawn("yarn", [scriptName]); - - spawned.stdout.on("data", (data) => { - process.stdout.write(data); - }); - - spawned.stderr.on("data", (data) => { - process.stderr.write(data); - }); - - spawned.on("error", (error) => { - console.error(error); - }); - - spawned.on("message", (message) => { - console.log(message); - }); - - spawned.on("close", (code) => { - if (code) { - reject(code); - } else { - resolve(code); - } - }); - }); - -const run = async () => { - for await (const command of commands) { - for await (const scriptName of packageScripts) { - try { - if (scriptName === command) { - await execute(scriptName); - } - - if (command.includes("*")) { - const commandPart = command.replace("*", ""); - // TODO: refactor - if ( - scriptName.startsWith(commandPart) || - scriptName.endsWith(commandPart) - ) { - await execute(scriptName); - } - } - } catch (e) { - process.exit(1); - } - } - } -}; - -run(); diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index 01b2f2d0..00000000 --- a/tests/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# swagger-typescript-api - -## 📃 EXAMPLES - -As you see above here is two folders: - -1. [**`schemas`**](./schemas) - - - [**`v2.0`**](./schemas/v2.0) - schemas with Swagger 2.0 - - [**`v3.0`**](./schemas/v3.0) - schemas with OA 3.0 -1. [**`generated`**](./generated) - - - [**`v2.0`**](./generated/v2.0) - generated api modules for Swagger 2.0 schemas from above folder - - [**`v3.0`**](./generated/v3.0) - generated api modules for OA 3.0 schemas from above folder - -Most schemas taken from [apis.guru](https://apis.guru/openapi-directory/), [swagger.io github repo](https://swagger.io/), [Github api description](https://github.com/github/rest-api-description) and [up-banking](https://github.com/up-banking/api) diff --git a/tests/__snapshots__/extended.test.ts.snap b/tests/__snapshots__/extended.test.ts.snap new file mode 100644 index 00000000..5671d9cf --- /dev/null +++ b/tests/__snapshots__/extended.test.ts.snap @@ -0,0 +1,70846 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`extended > 'adafruit' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Activity { + action?: string; + /** @format dateTime */ + created_at?: string; + data?: object; + id?: number; + model?: string; + /** @format dateTime */ + updated_at?: string; + user_id?: number; +} + +export type AddFeedToGroupData = Group; + +export interface AddFeedToGroupParams { + feed_key?: string; + groupKey: string; + /** a valid username string */ + username: string; +} + +export type AllActivitiesData = Activity[]; + +export interface AllActivitiesParams { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + /** a valid username string */ + username: string; +} + +export type AllBlocksData = Block[]; + +export type AllDashboardsData = Dashboard[]; + +export type AllDataData = DataResponse[]; + +export interface AllDataParams { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** a valid feed key */ + feedKey: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + /** a valid username string */ + username: string; +} + +export type AllFeedsData = Feed[]; + +export type AllGroupFeedDataData = DataResponse[]; + +export interface AllGroupFeedDataParams { + /** + * End time for filtering data. Returns data created before give time. + * @format date-time + */ + end_time?: string; + /** a valid feed key */ + feedKey: string; + groupKey: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering data. Returns data created after given time. + * @format date-time + */ + start_time?: string; + /** a valid username string */ + username: string; +} + +export type AllGroupFeedsData = Feed[]; + +export type AllGroupsData = Group[]; + +export type AllPermissionsData = Permission[]; + +export type AllTokensData = Token[]; + +export type AllTriggersData = Trigger[]; + +export type BatchCreateDataData = DataResponse[]; + +export type BatchCreateGroupFeedDataData = DataResponse[]; + +export interface Block { + block_feeds?: BlockFeed[]; + column?: number; + description?: string; + key?: string; + name?: string; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; +} + +export interface BlockFeed { + feed?: Feed; + group?: Group; + id?: string; +} + +export interface ChartDataData { + /** The names of the columns returned as data. */ + columns?: string[]; + /** The actual chart data. */ + data?: string[][]; + feed?: { + id?: number; + key?: string; + name?: string; + }; + parameters?: object; +} + +export interface ChartDataParams { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** a valid feed key */ + feedKey: string; + /** + * The number of hours the chart should cover. + * @format int32 + */ + hours?: number; + /** + * A resolution size in minutes. By giving a resolution value you will get back grouped data points aggregated over resolution-sized intervals. NOTE: time span is preferred over resolution, so if you request a span of time that includes more than max limit points you may get a larger resolution than you requested. Valid resolutions are 1, 5, 10, 30, 60, and 120. + * @format int32 + */ + resolution?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + /** a valid username string */ + username: string; +} + +export type CreateBlockData = Block; + +export type CreateDashboardData = Dashboard; + +export type CreateDataData = Data; + +export type CreateFeedData = Feed; + +export interface CreateFeedParams { + group_key?: string; + /** a valid username string */ + username: string; +} + +export type CreateGroupData = Group; + +export type CreateGroupDataData = DataResponse[]; + +export interface CreateGroupDataPayload { + /** Optional created_at timestamp which will be applied to all feed values created. */ + created_at?: string; + /** An array of feed data records with \`key\` and \`value\` properties. */ + feeds: { + key: string; + value: string; + }[]; + /** A location record with \`lat\`, \`lon\`, and [optional] \`ele\` properties. */ + location?: { + ele?: number; + lat: number; + lon: number; + }; +} + +export type CreateGroupFeedData = Feed; + +export type CreateGroupFeedDataData = DataResponse; + +export type CreatePermissionData = Permission; + +/** @default "r" */ +export enum CreatePermissionModeEnum { + R = "r", + W = "w", + Rw = "rw", +} + +/** @default "public" */ +export enum CreatePermissionScopeEnum { + Secret = "secret", + Public = "public", + User = "user", + Organization = "organization", +} + +export type CreateRawWebhookFeedDataData = Data; + +export type CreateTokenData = Token; + +export type CreateTriggerData = Trigger; + +export type CreateWebhookFeedDataData = Data; + +export interface CreateWebhookFeedDataPayload { + value?: string; +} + +export type CurrentUserData = User; + +export interface Dashboard { + blocks?: Block[]; + description?: string; + key?: string; + name?: string; +} + +export interface Data { + completed_at?: string; + created_at?: string; + created_epoch?: number; + ele?: number; + expiration?: string; + feed_id?: number; + group_id?: number; + id?: string; + lat?: number; + lon?: number; + updated_at?: string; + value?: string; +} + +export interface DataResponse { + completed_at?: string; + created_at?: string; + created_epoch?: number; + ele?: number; + expiration?: string; + feed_id?: number; + group_id?: number; + id?: string; + lat?: number; + lon?: number; + updated_at?: string; + value?: string; +} + +export type DestroyActivitiesData = any; + +export type DestroyBlockData = string; + +export type DestroyDashboardData = string; + +export type DestroyDataData = string; + +export type DestroyFeedData = any; + +export type DestroyGroupData = string; + +export type DestroyPermissionData = string; + +export type DestroyTokenData = string; + +export type DestroyTriggerData = string; + +export interface Error { + code?: string; + message?: string; +} + +export interface Feed { + created_at?: string; + description?: string; + /** Additional details about this feed. */ + details?: { + data?: { + /** Number of data points stored by this feed. */ + count?: number; + first?: Record; + last?: Record; + }; + /** Access control list for this feed */ + shared_with?: object[]; + }; + enabled?: boolean; + group?: Record; + groups?: ShallowGroup[]; + history?: boolean; + id?: number; + key?: string; + last_value?: string; + license?: string; + name?: string; + status?: string; + /** Is status notification active? */ + status_notify?: boolean; + /** Status notification timeout in minutes. */ + status_timeout?: number; + unit_symbol?: string; + unit_type?: string; + updated_at?: string; + /** @default "private" */ + visibility?: FeedVisibilityEnum; +} + +/** @default "private" */ +export enum FeedVisibilityEnum { + Private = "private", + Public = "public", + InProgress = "in progress", + OutOfAccess = "out of access", +} + +export type FirstDataData = DataResponse; + +export interface FirstDataParams { + /** a valid feed key */ + feedKey: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** a valid username string */ + username: string; +} + +export type GetActivityData = Activity[]; + +export interface GetActivityParams { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + type: string; + /** a valid username string */ + username: string; +} + +export type GetBlockData = Block; + +export interface GetCurrentUserThrottleData { + /** Actions taken inside the time window. */ + active_data_rate?: number; + /** Max possible actions inside the time window (usually 1 minute). */ + data_rate_limit?: number; +} + +export type GetDashboardData = Dashboard; + +export type GetDataData = DataResponse; + +export interface GetDataParams { + /** a valid feed key */ + feedKey: string; + id: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** a valid username string */ + username: string; +} + +export type GetFeedData = Feed; + +export type GetFeedDetailsData = Feed; + +export type GetGroupData = Group; + +export type GetPermissionData = Permission; + +export type GetTokenData = Token; + +export type GetTriggerData = Trigger; + +export interface Group { + created_at?: string; + description?: string; + feeds?: Feed[]; + id?: number; + name?: string; + updated_at?: string; +} + +export type LastDataData = DataResponse; + +export interface LastDataParams { + /** a valid feed key */ + feedKey: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** a valid username string */ + username: string; +} + +export type NextDataData = DataResponse; + +export interface NextDataParams { + /** a valid feed key */ + feedKey: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** a valid username string */ + username: string; +} + +export interface Permission { + created_at?: string; + id?: number; + /** @default "feed" */ + model?: PermissionModelEnum; + object_id?: number; + /** @default "public" */ + scope?: PermissionScopeEnum; + scope_value?: string; + updated_at?: string; + user_id?: number; +} + +/** @default "feed" */ +export enum PermissionModelEnum { + Feed = "feed", + Group = "group", + Dashboard = "dashboard", +} + +/** @default "public" */ +export enum PermissionScopeEnum { + Secret = "secret", + Public = "public", + User = "user", + Organization = "organization", +} + +export type PreviousDataData = DataResponse; + +export interface PreviousDataParams { + /** a valid feed key */ + feedKey: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** a valid username string */ + username: string; +} + +export type RemoveFeedFromGroupData = Group; + +export interface RemoveFeedFromGroupParams { + feed_key?: string; + groupKey: string; + /** a valid username string */ + username: string; +} + +export type ReplaceBlockData = Block; + +export type ReplaceDashboardData = Dashboard; + +export type ReplaceDataData = DataResponse; + +export type ReplaceFeedData = Feed; + +export type ReplaceGroupData = Group; + +export type ReplacePermissionData = Permission; + +export type ReplaceTokenData = Token; + +export type ReplaceTriggerData = Trigger; + +export type RetainDataData = string; + +export interface ShallowGroup { + created_at?: string; + description?: string; + id?: number; + name?: string; + updated_at?: string; +} + +export interface Token { + token?: string; +} + +export interface Trigger { + name?: string; +} + +export type UpdateBlockData = Block; + +export type UpdateDashboardData = Dashboard; + +export type UpdateDataData = DataResponse; + +export type UpdateFeedData = Feed; + +export type UpdateGroupData = Group; + +export type UpdatePermissionData = Permission; + +export type UpdateTokenData = Token; + +export type UpdateTriggerData = Trigger; + +export interface User { + color?: string; + /** @format dateTime */ + created_at?: string; + id?: number; + name?: string; + time_zone?: string; + /** @format dateTime */ + updated_at?: string; + username?: string; +} + +export namespace User { + /** + * No description + * @tags Users + * @name CurrentUser + * @summary Get information about the current user + * @request GET:/user + * @secure + */ + export namespace CurrentUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CurrentUserData; + } +} + +export namespace Webhooks { + /** + * @description The raw data webhook receiver accepts POST requests and stores the raw request body on your feed. This is useful when you don't have control of the webhook sender. If feed history is turned on, payloads will be truncated at 1024 bytes. If feed history is turned off, payloads will be truncated at 100KB. + * @tags Webhooks, Data + * @name CreateRawWebhookFeedData + * @summary Send arbitrary data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token/raw + * @secure + */ + export namespace CreateRawWebhookFeedData { + export type RequestParams = { + token: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CreateRawWebhookFeedDataData; + } + /** + * No description + * @tags Webhooks, Data + * @name CreateWebhookFeedData + * @summary Send data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token + * @secure + */ + export namespace CreateWebhookFeedData { + export type RequestParams = { + token: string; + }; + export type RequestQuery = {}; + export type RequestBody = CreateWebhookFeedDataPayload; + export type RequestHeaders = {}; + export type ResponseBody = CreateWebhookFeedDataData; + } +} + +export namespace Username { + /** + * No description + * @tags Groups, Feeds + * @name AddFeedToGroup + * @summary Add an existing Feed to a Group + * @request POST:/{username}/groups/{group_key}/add + * @secure + */ + export namespace AddFeedToGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + feed_key?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AddFeedToGroupData; + } + /** + * @description The Activities endpoint returns information about the user's activities. + * @tags Activities + * @name AllActivities + * @summary All activities for current user + * @request GET:/{username}/activities + * @secure + */ + export namespace AllActivities { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllActivitiesData; + } + /** + * @description The Blocks endpoint returns information about the user's blocks. + * @tags Blocks + * @name AllBlocks + * @summary All blocks for current user + * @request GET:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + export namespace AllBlocks { + export type RequestParams = { + dashboardId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllBlocksData; + } + /** + * @description The Dashboards endpoint returns information about the user's dashboards. + * @tags Dashboards + * @name AllDashboards + * @summary All dashboards for current user + * @request GET:/{username}/dashboards + * @secure + */ + export namespace AllDashboards { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllDashboardsData; + } + /** + * No description + * @tags Data + * @name AllData + * @summary Get all data for the given feed + * @request GET:/{username}/feeds/{feed_key}/data + * @secure + */ + export namespace AllData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllDataData; + } + /** + * @description The Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed. + * @tags Feeds + * @name AllFeeds + * @summary All feeds for current user + * @request GET:/{username}/feeds + * @secure + */ + export namespace AllFeeds { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllFeedsData; + } + /** + * No description + * @tags Data + * @name AllGroupFeedData + * @summary All data for current feed in a specific group + * @request GET:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + export namespace AllGroupFeedData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** + * End time for filtering data. Returns data created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering data. Returns data created after given time. + * @format date-time + */ + start_time?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllGroupFeedDataData; + } + /** + * @description The Group Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed, but only for feeds within the given group. + * @tags Groups, Feeds + * @name AllGroupFeeds + * @summary All feeds for current user in a given group + * @request GET:/{username}/groups/{group_key}/feeds + * @secure + */ + export namespace AllGroupFeeds { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllGroupFeedsData; + } + /** + * @description The Groups endpoint returns information about the user's groups. The response includes the latest value of each feed in the group, and other metadata about the group. + * @tags Groups + * @name AllGroups + * @summary All groups for current user + * @request GET:/{username}/groups + * @secure + */ + export namespace AllGroups { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllGroupsData; + } + /** + * @description The Permissions endpoint returns information about the user's permissions. + * @tags Permissions + * @name AllPermissions + * @summary All permissions for current user and type + * @request GET:/{username}/{type}/{type_id}/acl + * @secure + */ + export namespace AllPermissions { + export type RequestParams = { + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllPermissionsData; + } + /** + * @description The Tokens endpoint returns information about the user's tokens. + * @tags Tokens + * @name AllTokens + * @summary All tokens for current user + * @request GET:/{username}/tokens + * @secure + */ + export namespace AllTokens { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllTokensData; + } + /** + * @description The Triggers endpoint returns information about the user's triggers. + * @tags Triggers + * @name AllTriggers + * @summary All triggers for current user + * @request GET:/{username}/triggers + * @secure + */ + export namespace AllTriggers { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AllTriggersData; + } + /** + * No description + * @tags Data + * @name BatchCreateData + * @summary Create multiple new Data records + * @request POST:/{username}/feeds/{feed_key}/data/batch + * @secure + */ + export namespace BatchCreateData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }[]; + export type RequestHeaders = {}; + export type ResponseBody = BatchCreateDataData; + } + /** + * No description + * @tags Data + * @name BatchCreateGroupFeedData + * @summary Create multiple new Data records in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data/batch + * @secure + */ + export namespace BatchCreateGroupFeedData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }[]; + export type RequestHeaders = {}; + export type ResponseBody = BatchCreateGroupFeedDataData; + } + /** + * @description The Chart API is what we use on io.adafruit.com to populate charts over varying timespans with a consistent number of data points. The maximum number of points returned is 480. This API works by aggregating slices of time into a single value by averaging. All time-based parameters are optional, if none are given it will default to 1 hour at the finest-grained resolution possible. + * @tags Data + * @name ChartData + * @summary Chart data for current feed + * @request GET:/{username}/feeds/{feed_key}/data/chart + * @secure + */ + export namespace ChartData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** + * The number of hours the chart should cover. + * @format int32 + */ + hours?: number; + /** + * A resolution size in minutes. By giving a resolution value you will get back grouped data points aggregated over resolution-sized intervals. NOTE: time span is preferred over resolution, so if you request a span of time that includes more than max limit points you may get a larger resolution than you requested. Valid resolutions are 1, 5, 10, 30, 60, and 120. + * @format int32 + */ + resolution?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChartDataData; + } + /** + * No description + * @tags Blocks + * @name CreateBlock + * @summary Create a new Block + * @request POST:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + export namespace CreateBlock { + export type RequestParams = { + dashboardId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateBlockData; + } + /** + * No description + * @tags Dashboards + * @name CreateDashboard + * @summary Create a new Dashboard + * @request POST:/{username}/dashboards + * @secure + */ + export namespace CreateDashboard { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateDashboardData; + } + /** + * @description Create new data records on the given feed. **NOTE:** when feed history is on, data \`value\` size is limited to 1KB, when feed history is turned off data value size is limited to 100KB. + * @tags Data + * @name CreateData + * @summary Create new Data + * @request POST:/{username}/feeds/{feed_key}/data + * @secure + */ + export namespace CreateData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateDataData; + } + /** + * No description + * @tags Feeds + * @name CreateFeed + * @summary Create a new Feed + * @request POST:/{username}/feeds + * @secure + */ + export namespace CreateFeed { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + group_key?: string; + }; + export type RequestBody = { + description?: string; + key?: string; + license?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateFeedData; + } + /** + * No description + * @tags Groups + * @name CreateGroup + * @summary Create a new Group + * @request POST:/{username}/groups + * @secure + */ + export namespace CreateGroup { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateGroupData; + } + /** + * No description + * @tags Data + * @name CreateGroupData + * @summary Create new data for multiple feeds in a group + * @request POST:/{username}/groups/{group_key}/data + * @secure + */ + export namespace CreateGroupData { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = CreateGroupDataPayload; + export type RequestHeaders = {}; + export type ResponseBody = CreateGroupDataData; + } + /** + * No description + * @tags Feeds + * @name CreateGroupFeed + * @summary Create a new Feed in a Group + * @request POST:/{username}/groups/{group_key}/feeds + * @secure + */ + export namespace CreateGroupFeed { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + license?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateGroupFeedData; + } + /** + * No description + * @tags Data + * @name CreateGroupFeedData + * @summary Create new Data in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + export namespace CreateGroupFeedData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateGroupFeedDataData; + } + /** + * No description + * @tags Permissions + * @name CreatePermission + * @summary Create a new Permission + * @request POST:/{username}/{type}/{type_id}/acl + * @secure + */ + export namespace CreatePermission { + export type RequestParams = { + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreatePermissionData; + } + /** + * No description + * @tags Tokens + * @name CreateToken + * @summary Create a new Token + * @request POST:/{username}/tokens + * @secure + */ + export namespace CreateToken { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + token?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateTokenData; + } + /** + * No description + * @tags Triggers + * @name CreateTrigger + * @summary Create a new Trigger + * @request POST:/{username}/triggers + * @secure + */ + export namespace CreateTrigger { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = CreateTriggerData; + } + /** + * @description Delete all your activities. + * @tags Activities + * @name DestroyActivities + * @summary All activities for current user + * @request DELETE:/{username}/activities + * @secure + */ + export namespace DestroyActivities { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyActivitiesData; + } + /** + * No description + * @tags Blocks + * @name DestroyBlock + * @summary Delete an existing Block + * @request DELETE:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + export namespace DestroyBlock { + export type RequestParams = { + dashboardId: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyBlockData; + } + /** + * No description + * @tags Dashboards + * @name DestroyDashboard + * @summary Delete an existing Dashboard + * @request DELETE:/{username}/dashboards/{id} + * @secure + */ + export namespace DestroyDashboard { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyDashboardData; + } + /** + * No description + * @tags Data + * @name DestroyData + * @summary Delete existing Data + * @request DELETE:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + export namespace DestroyData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyDataData; + } + /** + * No description + * @tags Feeds + * @name DestroyFeed + * @summary Delete an existing Feed + * @request DELETE:/{username}/feeds/{feed_key} + * @secure + */ + export namespace DestroyFeed { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyFeedData; + } + /** + * No description + * @tags Groups + * @name DestroyGroup + * @summary Delete an existing Group + * @request DELETE:/{username}/groups/{group_key} + * @secure + */ + export namespace DestroyGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyGroupData; + } + /** + * No description + * @tags Permissions + * @name DestroyPermission + * @summary Delete an existing Permission + * @request DELETE:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + export namespace DestroyPermission { + export type RequestParams = { + id: string; + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyPermissionData; + } + /** + * No description + * @tags Tokens + * @name DestroyToken + * @summary Delete an existing Token + * @request DELETE:/{username}/tokens/{id} + * @secure + */ + export namespace DestroyToken { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyTokenData; + } + /** + * No description + * @tags Triggers + * @name DestroyTrigger + * @summary Delete an existing Trigger + * @request DELETE:/{username}/triggers/{id} + * @secure + */ + export namespace DestroyTrigger { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DestroyTriggerData; + } + /** + * @description Get the oldest data point in the feed. This request sets the queue pointer to the beginning of the feed. + * @tags Data + * @name FirstData + * @summary First Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/first + * @secure + */ + export namespace FirstData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FirstDataData; + } + /** + * @description The Activities endpoint returns information about the user's activities. + * @tags Activities + * @name GetActivity + * @summary Get activities by type for current user + * @request GET:/{username}/activities/{type} + * @secure + */ + export namespace GetActivity { + export type RequestParams = { + type: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetActivityData; + } + /** + * No description + * @tags Blocks + * @name GetBlock + * @summary Returns Block based on ID + * @request GET:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + export namespace GetBlock { + export type RequestParams = { + dashboardId: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetBlockData; + } + /** + * No description + * @tags Users + * @name GetCurrentUserThrottle + * @summary Get the user's data rate limit and current activity level. + * @request GET:/{username}/throttle + * @secure + */ + export namespace GetCurrentUserThrottle { + export type RequestParams = { + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetCurrentUserThrottleData; + } + /** + * No description + * @tags Dashboards + * @name GetDashboard + * @summary Returns Dashboard based on ID + * @request GET:/{username}/dashboards/{id} + * @secure + */ + export namespace GetDashboard { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetDashboardData; + } + /** + * No description + * @tags Data + * @name GetData + * @summary Returns data based on feed key + * @request GET:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + export namespace GetData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetDataData; + } + /** + * @description Returns feed based on the feed key + * @tags Feeds + * @name GetFeed + * @summary Get feed by feed key + * @request GET:/{username}/feeds/{feed_key} + * @secure + */ + export namespace GetFeed { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetFeedData; + } + /** + * @description Returns more detailed feed record based on the feed key + * @tags Feeds + * @name GetFeedDetails + * @summary Get detailed feed by feed key + * @request GET:/{username}/feeds/{feed_key}/details + * @secure + */ + export namespace GetFeedDetails { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetFeedDetailsData; + } + /** + * No description + * @tags Groups + * @name GetGroup + * @summary Returns Group based on ID + * @request GET:/{username}/groups/{group_key} + * @secure + */ + export namespace GetGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetGroupData; + } + /** + * No description + * @tags Permissions + * @name GetPermission + * @summary Returns Permission based on ID + * @request GET:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + export namespace GetPermission { + export type RequestParams = { + id: string; + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPermissionData; + } + /** + * No description + * @tags Tokens + * @name GetToken + * @summary Returns Token based on ID + * @request GET:/{username}/tokens/{id} + * @secure + */ + export namespace GetToken { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetTokenData; + } + /** + * No description + * @tags Triggers + * @name GetTrigger + * @summary Returns Trigger based on ID + * @request GET:/{username}/triggers/{id} + * @secure + */ + export namespace GetTrigger { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetTriggerData; + } + /** + * @description Get the most recent data point in the feed. This request sets the queue pointer to the end of the feed. + * @tags Data + * @name LastData + * @summary Last Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/last + * @secure + */ + export namespace LastData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LastDataData; + } + /** + * @description Get the next newest data point in the feed. If queue processing hasn't been started, the first data point in the feed will be returned. + * @tags Data + * @name NextData + * @summary Next Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/next + * @secure + */ + export namespace NextData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = NextDataData; + } + /** + * @description Get the previously processed data point in the feed. NOTE: this method doesn't move the processing queue pointer. + * @tags Data + * @name PreviousData + * @summary Previous Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/previous + * @secure + */ + export namespace PreviousData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PreviousDataData; + } + /** + * No description + * @tags Groups, Feeds + * @name RemoveFeedFromGroup + * @summary Remove a Feed from a Group + * @request POST:/{username}/groups/{group_key}/remove + * @secure + */ + export namespace RemoveFeedFromGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = { + feed_key?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = RemoveFeedFromGroupData; + } + /** + * No description + * @tags Blocks + * @name ReplaceBlock + * @summary Replace an existing Block + * @request PUT:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + export namespace ReplaceBlock { + export type RequestParams = { + dashboardId: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceBlockData; + } + /** + * No description + * @tags Dashboards + * @name ReplaceDashboard + * @summary Replace an existing Dashboard + * @request PUT:/{username}/dashboards/{id} + * @secure + */ + export namespace ReplaceDashboard { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceDashboardData; + } + /** + * No description + * @tags Data + * @name ReplaceData + * @summary Replace existing Data + * @request PUT:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + export namespace ReplaceData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceDataData; + } + /** + * No description + * @tags Feeds + * @name ReplaceFeed + * @summary Replace an existing Feed + * @request PUT:/{username}/feeds/{feed_key} + * @secure + */ + export namespace ReplaceFeed { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + license?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceFeedData; + } + /** + * No description + * @tags Groups + * @name ReplaceGroup + * @summary Replace an existing Group + * @request PUT:/{username}/groups/{group_key} + * @secure + */ + export namespace ReplaceGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceGroupData; + } + /** + * No description + * @tags Permissions + * @name ReplacePermission + * @summary Replace an existing Permission + * @request PUT:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + export namespace ReplacePermission { + export type RequestParams = { + id: string; + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplacePermissionData; + } + /** + * No description + * @tags Tokens + * @name ReplaceToken + * @summary Replace an existing Token + * @request PUT:/{username}/tokens/{id} + * @secure + */ + export namespace ReplaceToken { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + token?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceTokenData; + } + /** + * No description + * @tags Triggers + * @name ReplaceTrigger + * @summary Replace an existing Trigger + * @request PUT:/{username}/triggers/{id} + * @secure + */ + export namespace ReplaceTrigger { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = ReplaceTriggerData; + } + /** + * @description Get the most recent data point in the feed in an MQTT compatible CSV format: \`value,lat,lon,ele\` + * @tags Data + * @name RetainData + * @summary Last Data in MQTT CSV format + * @request GET:/{username}/feeds/{feed_key}/data/retain + * @secure + */ + export namespace RetainData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = RetainDataData; + } + /** + * No description + * @tags Blocks + * @name UpdateBlock + * @summary Update properties of an existing Block + * @request PATCH:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + export namespace UpdateBlock { + export type RequestParams = { + dashboardId: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateBlockData; + } + /** + * No description + * @tags Dashboards + * @name UpdateDashboard + * @summary Update properties of an existing Dashboard + * @request PATCH:/{username}/dashboards/{id} + * @secure + */ + export namespace UpdateDashboard { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateDashboardData; + } + /** + * No description + * @tags Data + * @name UpdateData + * @summary Update properties of existing Data + * @request PATCH:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + export namespace UpdateData { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateDataData; + } + /** + * No description + * @tags Feeds + * @name UpdateFeed + * @summary Update properties of an existing Feed + * @request PATCH:/{username}/feeds/{feed_key} + * @secure + */ + export namespace UpdateFeed { + export type RequestParams = { + /** a valid feed key */ + feedKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + license?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateFeedData; + } + /** + * No description + * @tags Groups + * @name UpdateGroup + * @summary Update properties of an existing Group + * @request PATCH:/{username}/groups/{group_key} + * @secure + */ + export namespace UpdateGroup { + export type RequestParams = { + groupKey: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + description?: string; + key?: string; + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateGroupData; + } + /** + * No description + * @tags Permissions + * @name UpdatePermission + * @summary Update properties of an existing Permission + * @request PATCH:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + export namespace UpdatePermission { + export type RequestParams = { + id: string; + type: string; + typeId: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdatePermissionData; + } + /** + * No description + * @tags Tokens + * @name UpdateToken + * @summary Update properties of an existing Token + * @request PATCH:/{username}/tokens/{id} + * @secure + */ + export namespace UpdateToken { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + token?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateTokenData; + } + /** + * No description + * @tags Triggers + * @name UpdateTrigger + * @summary Update properties of an existing Trigger + * @request PATCH:/{username}/triggers/{id} + * @secure + */ + export namespace UpdateTrigger { + export type RequestParams = { + id: string; + /** a valid username string */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = { + name?: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = UpdateTriggerData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://io.adafruit.com/api/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Adafruit IO + * @version 2.0.0 + * @baseUrl https://io.adafruit.com/api/v2 + * + * ### The Internet of Things for Everyone + * + * The Adafruit IO HTTP API provides access to your Adafruit IO data from any programming language or hardware environment that can speak HTTP. The easiest way to get started is with [an Adafruit IO learn guide](https://learn.adafruit.com/series/adafruit-io-basics) and [a simple Internet of Things capable device like the Feather Huzzah](https://www.adafruit.com/product/2821). + * + * This API documentation is hosted on GitHub Pages and is available at [https://github.com/adafruit/io-api](https://github.com/adafruit/io-api). For questions or comments visit the [Adafruit IO Forums](https://forums.adafruit.com/viewforum.php?f=56) or the [adafruit-io channel on the Adafruit Discord server](https://discord.gg/adafruit). + * + * #### Authentication + * + * Authentication for every API request happens through the \`X-AIO-Key\` header or query parameter and your IO API key. A simple cURL request to get all available feeds for a user with the username "io_username" and the key "io_key_12345" could look like this: + * + * $ curl -H "X-AIO-Key: io_key_12345" https://io.adafruit.com/api/v2/io_username/feeds + * + * Or like this: + * + * $ curl "https://io.adafruit.com/api/v2/io_username/feeds?X-AIO-Key=io_key_12345 + * + * Using the node.js [request](https://github.com/request/request) library, IO HTTP requests are as easy as: + * + * \`\`\`js + * var request = require('request'); + * + * var options = { + * url: 'https://io.adafruit.com/api/v2/io_username/feeds', + * headers: { + * 'X-AIO-Key': 'io_key_12345', + * 'Content-Type': 'application/json' + * } + * }; + * + * function callback(error, response, body) { + * if (!error && response.statusCode == 200) { + * var feeds = JSON.parse(body); + * console.log(feeds.length + " FEEDS AVAILABLE"); + * + * feeds.forEach(function (feed) { + * console.log(feed.name, feed.key); + * }) + * } + * } + * + * request(options, callback); + * \`\`\` + * + * Using the ESP8266 Arduino HTTPClient library, an HTTPS GET request would look like this (replacing \`---\` with your own values in the appropriate locations): + * + * \`\`\`arduino + * /// based on + * /// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/Authorization/Authorization.ino + * + * #include + * #include + * #include + * #include + * + * ESP8266WiFiMulti WiFiMulti; + * + * const char* ssid = "---"; + * const char* password = "---"; + * + * const char* host = "io.adafruit.com"; + * + * const char* io_key = "---"; + * const char* path_with_username = "/api/v2/---/dashboards"; + * + * // Use web browser to view and copy + * // SHA1 fingerprint of the certificate + * const char* fingerprint = "77 00 54 2D DA E7 D8 03 27 31 23 99 EB 27 DB CB A5 4C 57 18"; + * + * void setup() { + * Serial.begin(115200); + * + * for(uint8_t t = 4; t > 0; t--) { + * Serial.printf("[SETUP] WAIT %d...\\n", t); + * Serial.flush(); + * delay(1000); + * } + * + * WiFi.mode(WIFI_STA); + * WiFiMulti.addAP(ssid, password); + * + * // wait for WiFi connection + * while(WiFiMulti.run() != WL_CONNECTED) { + * Serial.print('.'); + * delay(1000); + * } + * + * Serial.println("[WIFI] connected!"); + * + * HTTPClient http; + * + * // start request with URL and TLS cert fingerprint for verification + * http.begin("https://" + String(host) + String(path_with_username), fingerprint); + * + * // IO API authentication + * http.addHeader("X-AIO-Key", io_key); + * + * // start connection and send HTTP header + * int httpCode = http.GET(); + * + * // httpCode will be negative on error + * if(httpCode > 0) { + * // HTTP header has been send and Server response header has been handled + * Serial.printf("[HTTP] GET response: %d\\n", httpCode); + * + * // HTTP 200 OK + * if(httpCode == HTTP_CODE_OK) { + * String payload = http.getString(); + * Serial.println(payload); + * } + * + * http.end(); + * } + * } + * + * void loop() {} + * \`\`\` + * + * #### Client Libraries + * + * We have client libraries to help you get started with your project: [Python](https://github.com/adafruit/io-client-python), [Ruby](https://github.com/adafruit/io-client-ruby), [Arduino C++](https://github.com/adafruit/Adafruit_IO_Arduino), [Javascript](https://github.com/adafruit/adafruit-io-node), and [Go](https://github.com/adafruit/io-client-go) are available. They're all open source, so if they don't already do what you want, you can fork and add any feature you'd like. + * + */ +export class Api extends HttpClient { + user = { + /** + * No description + * + * @tags Users + * @name CurrentUser + * @summary Get information about the current user + * @request GET:/user + * @secure + */ + currentUser: (params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "GET", + secure: true, + ...params, + }), + }; + webhooks = { + /** + * @description The raw data webhook receiver accepts POST requests and stores the raw request body on your feed. This is useful when you don't have control of the webhook sender. If feed history is turned on, payloads will be truncated at 1024 bytes. If feed history is turned off, payloads will be truncated at 100KB. + * + * @tags Webhooks, Data + * @name CreateRawWebhookFeedData + * @summary Send arbitrary data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token/raw + * @secure + */ + createRawWebhookFeedData: (token: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/feed/\${token}/raw\`, + method: "POST", + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Webhooks, Data + * @name CreateWebhookFeedData + * @summary Send data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token + * @secure + */ + createWebhookFeedData: (token: string, payload: CreateWebhookFeedDataPayload, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/feed/\${token}\`, + method: "POST", + body: payload, + secure: true, + type: ContentType.Json, + ...params, + }), + }; + username = { + /** + * No description + * + * @tags Groups, Feeds + * @name AddFeedToGroup + * @summary Add an existing Feed to a Group + * @request POST:/{username}/groups/{group_key}/add + * @secure + */ + addFeedToGroup: ({ groupKey, username, ...query }: AddFeedToGroupParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/add\`, + method: "POST", + query: query, + secure: true, + ...params, + }), + + /** + * @description The Activities endpoint returns information about the user's activities. + * + * @tags Activities + * @name AllActivities + * @summary All activities for current user + * @request GET:/{username}/activities + * @secure + */ + allActivities: ({ username, ...query }: AllActivitiesParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/activities\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description The Blocks endpoint returns information about the user's blocks. + * + * @tags Blocks + * @name AllBlocks + * @summary All blocks for current user + * @request GET:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + allBlocks: (username: string, dashboardId: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description The Dashboards endpoint returns information about the user's dashboards. + * + * @tags Dashboards + * @name AllDashboards + * @summary All dashboards for current user + * @request GET:/{username}/dashboards + * @secure + */ + allDashboards: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name AllData + * @summary Get all data for the given feed + * @request GET:/{username}/feeds/{feed_key}/data + * @secure + */ + allData: ({ username, feedKey, ...query }: AllDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description The Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed. + * + * @tags Feeds + * @name AllFeeds + * @summary All feeds for current user + * @request GET:/{username}/feeds + * @secure + */ + allFeeds: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name AllGroupFeedData + * @summary All data for current feed in a specific group + * @request GET:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + allGroupFeedData: ({ username, groupKey, feedKey, ...query }: AllGroupFeedDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description The Group Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed, but only for feeds within the given group. + * + * @tags Groups, Feeds + * @name AllGroupFeeds + * @summary All feeds for current user in a given group + * @request GET:/{username}/groups/{group_key}/feeds + * @secure + */ + allGroupFeeds: (groupKey: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description The Groups endpoint returns information about the user's groups. The response includes the latest value of each feed in the group, and other metadata about the group. + * + * @tags Groups + * @name AllGroups + * @summary All groups for current user + * @request GET:/{username}/groups + * @secure + */ + allGroups: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description The Permissions endpoint returns information about the user's permissions. + * + * @tags Permissions + * @name AllPermissions + * @summary All permissions for current user and type + * @request GET:/{username}/{type}/{type_id}/acl + * @secure + */ + allPermissions: (username: string, type: string, typeId: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description The Tokens endpoint returns information about the user's tokens. + * + * @tags Tokens + * @name AllTokens + * @summary All tokens for current user + * @request GET:/{username}/tokens + * @secure + */ + allTokens: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description The Triggers endpoint returns information about the user's triggers. + * + * @tags Triggers + * @name AllTriggers + * @summary All triggers for current user + * @request GET:/{username}/triggers + * @secure + */ + allTriggers: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name BatchCreateData + * @summary Create multiple new Data records + * @request POST:/{username}/feeds/{feed_key}/data/batch + * @secure + */ + batchCreateData: ( + username: string, + feedKey: string, + data: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }[], + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/batch\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name BatchCreateGroupFeedData + * @summary Create multiple new Data records in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data/batch + * @secure + */ + batchCreateGroupFeedData: ( + username: string, + groupKey: string, + feedKey: string, + data: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }[], + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data/batch\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description The Chart API is what we use on io.adafruit.com to populate charts over varying timespans with a consistent number of data points. The maximum number of points returned is 480. This API works by aggregating slices of time into a single value by averaging. All time-based parameters are optional, if none are given it will default to 1 hour at the finest-grained resolution possible. + * + * @tags Data + * @name ChartData + * @summary Chart data for current feed + * @request GET:/{username}/feeds/{feed_key}/data/chart + * @secure + */ + chartData: ({ username, feedKey, ...query }: ChartDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/chart\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Blocks + * @name CreateBlock + * @summary Create a new Block + * @request POST:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + createBlock: ( + username: string, + dashboardId: string, + block: { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks\`, + method: "POST", + body: block, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Dashboards + * @name CreateDashboard + * @summary Create a new Dashboard + * @request POST:/{username}/dashboards + * @secure + */ + createDashboard: ( + username: string, + dashboard: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards\`, + method: "POST", + body: dashboard, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create new data records on the given feed. **NOTE:** when feed history is on, data \`value\` size is limited to 1KB, when feed history is turned off data value size is limited to 100KB. + * + * @tags Data + * @name CreateData + * @summary Create new Data + * @request POST:/{username}/feeds/{feed_key}/data + * @secure + */ + createData: ( + username: string, + feedKey: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data\`, + method: "POST", + body: datum, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Feeds + * @name CreateFeed + * @summary Create a new Feed + * @request POST:/{username}/feeds + * @secure + */ + createFeed: ( + { username, ...query }: CreateFeedParams, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds\`, + method: "POST", + query: query, + body: feed, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Groups + * @name CreateGroup + * @summary Create a new Group + * @request POST:/{username}/groups + * @secure + */ + createGroup: ( + username: string, + group: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups\`, + method: "POST", + body: group, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name CreateGroupData + * @summary Create new data for multiple feeds in a group + * @request POST:/{username}/groups/{group_key}/data + * @secure + */ + createGroupData: ( + username: string, + groupKey: string, + group_feed_data: CreateGroupDataPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/data\`, + method: "POST", + body: group_feed_data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Feeds + * @name CreateGroupFeed + * @summary Create a new Feed in a Group + * @request POST:/{username}/groups/{group_key}/feeds + * @secure + */ + createGroupFeed: ( + username: string, + groupKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds\`, + method: "POST", + body: feed, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name CreateGroupFeedData + * @summary Create new Data in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + createGroupFeedData: ( + username: string, + groupKey: string, + feedKey: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data\`, + method: "POST", + body: datum, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name CreatePermission + * @summary Create a new Permission + * @request POST:/{username}/{type}/{type_id}/acl + * @secure + */ + createPermission: ( + username: string, + type: string, + typeId: string, + permission: { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl\`, + method: "POST", + body: permission, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name CreateToken + * @summary Create a new Token + * @request POST:/{username}/tokens + * @secure + */ + createToken: ( + username: string, + token: { + token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/tokens\`, + method: "POST", + body: token, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name CreateTrigger + * @summary Create a new Trigger + * @request POST:/{username}/triggers + * @secure + */ + createTrigger: ( + username: string, + trigger: { + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/triggers\`, + method: "POST", + body: trigger, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Delete all your activities. + * + * @tags Activities + * @name DestroyActivities + * @summary All activities for current user + * @request DELETE:/{username}/activities + * @secure + */ + destroyActivities: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/activities\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Blocks + * @name DestroyBlock + * @summary Delete an existing Block + * @request DELETE:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + destroyBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Dashboards + * @name DestroyDashboard + * @summary Delete an existing Dashboard + * @request DELETE:/{username}/dashboards/{id} + * @secure + */ + destroyDashboard: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name DestroyData + * @summary Delete existing Data + * @request DELETE:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + destroyData: (username: string, feedKey: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Feeds + * @name DestroyFeed + * @summary Delete an existing Feed + * @request DELETE:/{username}/feeds/{feed_key} + * @secure + */ + destroyFeed: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Groups + * @name DestroyGroup + * @summary Delete an existing Group + * @request DELETE:/{username}/groups/{group_key} + * @secure + */ + destroyGroup: (username: string, groupKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name DestroyPermission + * @summary Delete an existing Permission + * @request DELETE:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + destroyPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name DestroyToken + * @summary Delete an existing Token + * @request DELETE:/{username}/tokens/{id} + * @secure + */ + destroyToken: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name DestroyTrigger + * @summary Delete an existing Trigger + * @request DELETE:/{username}/triggers/{id} + * @secure + */ + destroyTrigger: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * @description Get the oldest data point in the feed. This request sets the queue pointer to the beginning of the feed. + * + * @tags Data + * @name FirstData + * @summary First Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/first + * @secure + */ + firstData: ({ username, feedKey, ...query }: FirstDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/first\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description The Activities endpoint returns information about the user's activities. + * + * @tags Activities + * @name GetActivity + * @summary Get activities by type for current user + * @request GET:/{username}/activities/{type} + * @secure + */ + getActivity: ({ username, type, ...query }: GetActivityParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/activities/\${type}\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Blocks + * @name GetBlock + * @summary Returns Block based on ID + * @request GET:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + getBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Users + * @name GetCurrentUserThrottle + * @summary Get the user's data rate limit and current activity level. + * @request GET:/{username}/throttle + * @secure + */ + getCurrentUserThrottle: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/throttle\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Dashboards + * @name GetDashboard + * @summary Returns Dashboard based on ID + * @request GET:/{username}/dashboards/{id} + * @secure + */ + getDashboard: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name GetData + * @summary Returns data based on feed key + * @request GET:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + getData: ({ username, feedKey, id, ...query }: GetDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Returns feed based on the feed key + * + * @tags Feeds + * @name GetFeed + * @summary Get feed by feed key + * @request GET:/{username}/feeds/{feed_key} + * @secure + */ + getFeed: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Returns more detailed feed record based on the feed key + * + * @tags Feeds + * @name GetFeedDetails + * @summary Get detailed feed by feed key + * @request GET:/{username}/feeds/{feed_key}/details + * @secure + */ + getFeedDetails: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/details\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Groups + * @name GetGroup + * @summary Returns Group based on ID + * @request GET:/{username}/groups/{group_key} + * @secure + */ + getGroup: (username: string, groupKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name GetPermission + * @summary Returns Permission based on ID + * @request GET:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + getPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name GetToken + * @summary Returns Token based on ID + * @request GET:/{username}/tokens/{id} + * @secure + */ + getToken: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name GetTrigger + * @summary Returns Trigger based on ID + * @request GET:/{username}/triggers/{id} + * @secure + */ + getTrigger: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Get the most recent data point in the feed. This request sets the queue pointer to the end of the feed. + * + * @tags Data + * @name LastData + * @summary Last Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/last + * @secure + */ + lastData: ({ username, feedKey, ...query }: LastDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/last\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Get the next newest data point in the feed. If queue processing hasn't been started, the first data point in the feed will be returned. + * + * @tags Data + * @name NextData + * @summary Next Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/next + * @secure + */ + nextData: ({ username, feedKey, ...query }: NextDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/next\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Get the previously processed data point in the feed. NOTE: this method doesn't move the processing queue pointer. + * + * @tags Data + * @name PreviousData + * @summary Previous Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/previous + * @secure + */ + previousData: ({ username, feedKey, ...query }: PreviousDataParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/previous\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Groups, Feeds + * @name RemoveFeedFromGroup + * @summary Remove a Feed from a Group + * @request POST:/{username}/groups/{group_key}/remove + * @secure + */ + removeFeedFromGroup: ({ groupKey, username, ...query }: RemoveFeedFromGroupParams, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/remove\`, + method: "POST", + query: query, + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Blocks + * @name ReplaceBlock + * @summary Replace an existing Block + * @request PUT:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + replaceBlock: ( + username: string, + dashboardId: string, + id: string, + block: { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "PUT", + body: block, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Dashboards + * @name ReplaceDashboard + * @summary Replace an existing Dashboard + * @request PUT:/{username}/dashboards/{id} + * @secure + */ + replaceDashboard: ( + username: string, + id: string, + dashboard: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "PUT", + body: dashboard, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name ReplaceData + * @summary Replace existing Data + * @request PUT:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + replaceData: ( + username: string, + feedKey: string, + id: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "PUT", + body: datum, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Feeds + * @name ReplaceFeed + * @summary Replace an existing Feed + * @request PUT:/{username}/feeds/{feed_key} + * @secure + */ + replaceFeed: ( + username: string, + feedKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "PUT", + body: feed, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Groups + * @name ReplaceGroup + * @summary Replace an existing Group + * @request PUT:/{username}/groups/{group_key} + * @secure + */ + replaceGroup: ( + username: string, + groupKey: string, + group: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "PUT", + body: group, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name ReplacePermission + * @summary Replace an existing Permission + * @request PUT:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + replacePermission: ( + username: string, + type: string, + typeId: string, + id: string, + permission: { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "PUT", + body: permission, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name ReplaceToken + * @summary Replace an existing Token + * @request PUT:/{username}/tokens/{id} + * @secure + */ + replaceToken: ( + username: string, + id: string, + token: { + token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "PUT", + body: token, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name ReplaceTrigger + * @summary Replace an existing Trigger + * @request PUT:/{username}/triggers/{id} + * @secure + */ + replaceTrigger: ( + username: string, + id: string, + trigger: { + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "PUT", + body: trigger, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Get the most recent data point in the feed in an MQTT compatible CSV format: \`value,lat,lon,ele\` + * + * @tags Data + * @name RetainData + * @summary Last Data in MQTT CSV format + * @request GET:/{username}/feeds/{feed_key}/data/retain + * @secure + */ + retainData: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/retain\`, + method: "GET", + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Blocks + * @name UpdateBlock + * @summary Update properties of an existing Block + * @request PATCH:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + updateBlock: ( + username: string, + dashboardId: string, + id: string, + block: { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "PATCH", + body: block, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Dashboards + * @name UpdateDashboard + * @summary Update properties of an existing Dashboard + * @request PATCH:/{username}/dashboards/{id} + * @secure + */ + updateDashboard: ( + username: string, + id: string, + dashboard: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "PATCH", + body: dashboard, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Data + * @name UpdateData + * @summary Update properties of existing Data + * @request PATCH:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + updateData: ( + username: string, + feedKey: string, + id: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "PATCH", + body: datum, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Feeds + * @name UpdateFeed + * @summary Update properties of an existing Feed + * @request PATCH:/{username}/feeds/{feed_key} + * @secure + */ + updateFeed: ( + username: string, + feedKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "PATCH", + body: feed, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Groups + * @name UpdateGroup + * @summary Update properties of an existing Group + * @request PATCH:/{username}/groups/{group_key} + * @secure + */ + updateGroup: ( + username: string, + groupKey: string, + group: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "PATCH", + body: group, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name UpdatePermission + * @summary Update properties of an existing Permission + * @request PATCH:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + updatePermission: ( + username: string, + type: string, + typeId: string, + id: string, + permission: { + /** @default "r" */ + mode?: CreatePermissionModeEnum; + /** @default "public" */ + scope?: CreatePermissionScopeEnum; + scope_value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "PATCH", + body: permission, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name UpdateToken + * @summary Update properties of an existing Token + * @request PATCH:/{username}/tokens/{id} + * @secure + */ + updateToken: ( + username: string, + id: string, + token: { + token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "PATCH", + body: token, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name UpdateTrigger + * @summary Update properties of an existing Trigger + * @request PATCH:/{username}/triggers/{id} + * @secure + */ + updateTrigger: ( + username: string, + id: string, + trigger: { + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "PATCH", + body: trigger, + secure: true, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'additional-properties' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Message { + code?: number; + text?: string; +} + +export type Messages = Record; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Additional properties Example + * @version 1.0.0 + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'additional-properties2' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Primitive = string | number | boolean | null; + +export type PrimitiveMap = Record; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'allof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Cat = Pet & { + age?: number; + hunts?: boolean; +}; + +export type Dog = Pet & { + bark?: boolean; + breed: DogBreedEnum; +}; + +export enum DogBreedEnum { + Dingo = "Dingo", + Husky = "Husky", + Retriever = "Retriever", + Shepherd = "Shepherd", +} + +export interface Pet { + pet_type: string; +} + +export type PetsPartialUpdateData = any; + +export type PetsPartialUpdatePayload = Cat | Dog; + +export namespace Pets { + /** + * No description + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + export namespace PetsPartialUpdate { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = PetsPartialUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = PetsPartialUpdateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Allof Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + petsPartialUpdate: (data: PetsPartialUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'another-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** some description */ +export interface Amount { + /** some description */ + currency: Currency; + /** + * some description + * @format double + * @min 0.01 + * @max 1000000000000000 + */ + value: number; +} + +/** + * An uploaded response + * Describes the result of uploading an image resource + * @example {"code":0,"type":"type","message":"message"} + */ +export interface ApiResponse { + /** @format int32 */ + code?: number; + message?: string; + type?: string; +} + +/** + * Pet category + * A category for a pet + * @example {"name":"name","id":6} + */ +export interface Category { + /** @format int64 */ + id?: number; + name?: string; +} + +/** + * some description + * @pattern ^[A-Z]{3,3}$ + */ +export type Currency = string; + +export type FindPetsByStatusData = Pet[]; + +export interface FindPetsByStatusParams { + /** Status values that need to be considered for filter */ + status: StatusEnum[]; +} + +/** @default "available" */ +export enum FindPetsByStatusParams1StatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +export type FindPetsByTagsData = Pet[]; + +export interface FindPetsByTagsParams { + /** Tags to filter by */ + tags: string[]; +} + +export type FormUrlEncodedRequest2Data = any; + +export type FormUrlEncodedRequestData = any; + +export type GetInventoryData = Record; + +export type GetOrderByIdData = Order; + +export type GetPetByIdData = Pet; + +export type GetUserByNameData = User; + +export type LoginUserData = string; + +export interface LoginUserParams { + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; +} + +/** + * Pet Order + * An order for a pets from the pet store + * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} + */ +export interface Order { + /** @default false */ + complete?: boolean; + /** @format int64 */ + id?: number; + /** @format int64 */ + petId?: number; + /** @format int32 */ + quantity?: number; + /** @format date-time */ + shipDate?: string; + /** Order Status */ + status?: OrderStatusEnum; +} + +/** Order Status */ +export enum OrderStatusEnum { + Placed = "placed", + Approved = "approved", + Delivered = "delivered", +} + +/** + * a Pet + * A pet for sale in the pet store + * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} + */ +export interface Pet { + /** A category for a pet */ + category?: Category; + /** @format int64 */ + id?: number; + /** @example "doggie" */ + name: string; + photoUrls: string[]; + /** pet status in the store */ + status?: PetStatusEnum; + tags?: Tag[]; +} + +export enum PetIds { + Value10 = 10, + Value20 = 20, + Value30 = 30, + Value40 = 40, +} + +export enum PetIdsWithWrongEnum { + Value10 = 10, + Value20 = 20, + Value30 = 30, + Value40 = 40, +} + +export enum PetNames { + FluffyHero = "Fluffy Hero", + PiggyPo = "Piggy Po", + SwaggerTypescriptApi = "Swagger Typescript Api", + UPPER_CASE = "UPPER_CASE", +} + +/** pet status in the store */ +export enum PetStatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +export type PlaceOrderData = Order; + +export type SingleFormUrlEncodedRequestData = any; + +export interface SingleFormUrlEncodedRequestPayload { + /** @format string */ + param1: string; + param2: string; +} + +/** @default "available" */ +export enum StatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +/** + * Pet Tag + * A tag for a pet + * @example {"name":"name","id":1} + */ +export interface Tag { + /** @format int64 */ + id?: number; + name?: string; +} + +export interface UpdatePetWithFormPayload { + /** Updated name of the pet */ + name?: string; + /** Updated status of the pet */ + status?: string; +} + +export type UploadFileData = ApiResponse; + +export interface UploadFilePayload { + /** Additional data to pass to server */ + additionalMetadata?: string; + /** file to upload */ + file?: File; +} + +/** + * a User + * A User who is purchasing from the pet store + * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} + */ +export interface User { + email?: string; + firstName?: string; + /** @format int64 */ + id?: number; + lastName?: string; + password?: string; + phone?: string; + /** + * User Status + * @format int32 + */ + userStatus?: number; + username?: string; +} + +export namespace Pet { + /** + * No description + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Pet; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure + */ + export namespace DeletePet { + export type RequestParams = { + /** + * Pet id to delete + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = { + api_key?: string; + }; + export type ResponseBody = any; + } + /** + * @description Multiple status values can be provided with comma separated strings + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure + */ + export namespace FindPetsByStatus { + export type RequestParams = {}; + export type RequestQuery = { + /** Status values that need to be considered for filter */ + status: FindPetsByStatusParams1StatusEnum[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsByStatusData; + } + /** + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure + */ + export namespace FindPetsByTags { + export type RequestParams = {}; + export type RequestQuery = { + /** Tags to filter by */ + tags: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsByTagsData; + } + /** + * No description + * @tags pet + * @name FormUrlEncodedRequest + * @summary summary + * @request POST:/pet/form-url-encoded + */ + export namespace FormUrlEncodedRequest { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = { + /** @format string */ + param1: string; + param2: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = FormUrlEncodedRequestData; + } + /** + * No description + * @tags pet + * @name FormUrlEncodedRequest2 + * @summary summary + * @request POST:/pet/end-form-url-encoded + * @originalName formUrlEncodedRequest + * @duplicate + */ + export namespace FormUrlEncodedRequest2 { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = { + /** @format string */ + param1: string; + param2: string; + }; + export type RequestHeaders = {}; + export type ResponseBody = FormUrlEncodedRequest2Data; + } + /** + * @description Returns a single pet + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure + */ + export namespace GetPetById { + export type RequestParams = { + /** + * ID of pet to return + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPetByIdData; + } + /** + * No description + * @tags pet + * @name SingleFormUrlEncodedRequest + * @summary summary + * @request POST:/pet/single-form-url-encoded + */ + export namespace SingleFormUrlEncodedRequest { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = SingleFormUrlEncodedRequestPayload; + export type RequestHeaders = {}; + export type ResponseBody = SingleFormUrlEncodedRequestData; + } + /** + * No description + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure + */ + export namespace UpdatePet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Pet; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure + */ + export namespace UpdatePetWithForm { + export type RequestParams = { + /** + * ID of pet that needs to be updated + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = UpdatePetWithFormPayload; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure + */ + export namespace UploadFile { + export type RequestParams = { + /** + * ID of pet to update + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = UploadFilePayload; + export type RequestHeaders = {}; + export type ResponseBody = UploadFileData; + } +} + +export namespace Store { + /** + * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} + */ + export namespace DeleteOrder { + export type RequestParams = { + /** ID of the order that needs to be deleted */ + orderId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Returns a map of status codes to quantities + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure + */ + export namespace GetInventory { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetInventoryData; + } + /** + * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} + */ + export namespace GetOrderById { + export type RequestParams = { + /** + * ID of pet that needs to be fetched + * @format int64 + * @min 1 + * @max 5 + */ + orderId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetOrderByIdData; + } + /** + * No description + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order + */ + export namespace PlaceOrder { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Order; + export type RequestHeaders = {}; + export type ResponseBody = PlaceOrderData; + } +} + +export namespace User { + /** + * @description This can only be done by the logged in user. + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + export namespace CreateUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + export namespace CreateUsersWithArrayInput { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User[]; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + export namespace CreateUsersWithListInput { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User[]; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description This can only be done by the logged in user. + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + export namespace DeleteUser { + export type RequestParams = { + /** The name that needs to be deleted */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + export namespace GetUserByName { + export type RequestParams = { + /** The name that needs to be fetched. Use user1 for testing. */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetUserByNameData; + } + /** + * No description + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + export namespace LoginUser { + export type RequestParams = {}; + export type RequestQuery = { + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LoginUserData; + } + /** + * No description + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout + */ + export namespace LogoutUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description This can only be done by the logged in user. + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} + */ + export namespace UpdateUser { + export type RequestParams = { + /** name that need to be deleted */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = User; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/v2 + * @externalDocs http://swagger.io + * @contact + * + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. + */ +export class Api extends HttpClient { + pet = { + /** + * No description + * + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure + */ + addPet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "POST", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure + */ + deletePet: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * @description Multiple status values can be provided with comma separated strings + * + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure + */ + findPetsByStatus: (query: FindPetsByStatusParams, params: RequestParams = {}) => + this.request({ + path: \`/pet/findByStatus\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure + */ + findPetsByTags: (query: FindPetsByTagsParams, params: RequestParams = {}) => + this.request({ + path: \`/pet/findByTags\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name FormUrlEncodedRequest + * @summary summary + * @request POST:/pet/form-url-encoded + */ + formUrlEncodedRequest: ( + data: { + /** @format string */ + param1: string; + param2: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name FormUrlEncodedRequest2 + * @summary summary + * @request POST:/pet/end-form-url-encoded + * @originalName formUrlEncodedRequest + * @duplicate + */ + formUrlEncodedRequest2: ( + data: { + /** @format string */ + param1: string; + param2: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/end-form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), + + /** + * @description Returns a single pet + * + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure + */ + getPetById: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name SingleFormUrlEncodedRequest + * @summary summary + * @request POST:/pet/single-form-url-encoded + */ + singleFormUrlEncodedRequest: (data: SingleFormUrlEncodedRequestPayload, params: RequestParams = {}) => + this.request({ + path: \`/pet/single-form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure + */ + updatePet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "PUT", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure + */ + updatePetWithForm: (petId: number, data: UpdatePetWithFormPayload, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure + */ + uploadFile: (petId: number, data: UploadFilePayload, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}/uploadImage\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + ...params, + }), + }; + store = { + /** + * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} + */ + deleteOrder: (orderId: string, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a map of status codes to quantities + * + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure + */ + getInventory: (params: RequestParams = {}) => + this.request({ + path: \`/store/inventory\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} + */ + getOrderById: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order + */ + placeOrder: (body: Order, params: RequestParams = {}) => + this.request({ + path: \`/store/order\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + }; + user = { + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + createUser: (body: User, params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithArray\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + createUsersWithListInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithList\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + deleteUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + loginUser: (query: LoginUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/login\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout + */ + logoutUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/logout\`, + method: "GET", + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} + */ + updateUser: (username: string, body: User, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "PUT", + body: body, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'another-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Bar { + A?: string; + /** @format int32 */ + B: number; + Baz?: Baz; + /** @format date-time */ + C: string; +} + +export interface Baz { + Color: Color; + /** @format decimal */ + D: number; +} + +export enum Color { + RED = 0, + GREEN = 1, + BLUE = 2, +} + +export type FooGetBarData = Bar; + +export type FooGetBarDescriptionsData = string[]; + +export interface FooGetBarParams { + /** @format int32 */ + id: number; +} + +export type FooSetBarData = any; + +export namespace Api { + /** + * No description + * @tags Foo + * @name FooGetBar + * @request GET:/api/Foo/GetBar + */ + export namespace FooGetBar { + export type RequestParams = {}; + export type RequestQuery = { + /** @format int32 */ + id: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FooGetBarData; + } + /** + * No description + * @tags Foo + * @name FooGetBarDescriptions + * @request GET:/api/Foo/GetBarDescriptions + */ + export namespace FooGetBarDescriptions { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FooGetBarDescriptionsData; + } + /** + * No description + * @tags Foo + * @name FooSetBar + * @request POST:/api/Foo/SetBar + */ + export namespace FooSetBar { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Bar | null; + export type RequestHeaders = {}; + export type ResponseBody = FooSetBarData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + */ +export class Api extends HttpClient { + api = { + /** + * No description + * + * @tags Foo + * @name FooGetBar + * @request GET:/api/Foo/GetBar + */ + fooGetBar: (query: FooGetBarParams, params: RequestParams = {}) => + this.request({ + path: \`/api/Foo/GetBar\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags Foo + * @name FooGetBarDescriptions + * @request GET:/api/Foo/GetBarDescriptions + */ + fooGetBarDescriptions: (params: RequestParams = {}) => + this.request({ + path: \`/api/Foo/GetBarDescriptions\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags Foo + * @name FooSetBar + * @request POST:/api/Foo/SetBar + */ + fooSetBar: (value: Bar | null, params: RequestParams = {}) => + this.request({ + path: \`/api/Foo/SetBar\`, + method: "POST", + body: value, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'anyof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface PetByAge { + age: number; + nickname?: string; +} + +export interface PetByType { + hunts?: boolean; + pet_type: PetByTypePetTypeEnum; +} + +export enum PetByTypePetTypeEnum { + Cat = "Cat", + Dog = "Dog", +} + +export type PetsPartialUpdateData = any; + +export type PetsPartialUpdatePayload = PetByAge | PetByType; + +export namespace Pets { + /** + * No description + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + export namespace PetsPartialUpdate { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = PetsPartialUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = PetsPartialUpdateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Anyof Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + petsPartialUpdate: (data: PetsPartialUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'api-with-examples' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type GetVersionDetailsv2Data = any; + +export type ListVersionsv2Data = any; + +export namespace V2 { + /** + * No description + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + export namespace GetVersionDetailsv2 { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetVersionDetailsv2Data; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Simple API overview + * @version 2.0.0 + */ +export class Api extends HttpClient { + /** + * No description + * + * @name ListVersionsv2 + * @summary List API versions + * @request GET:/ + */ + listVersionsv2 = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + ...params, + }); + + v2 = { + /** + * No description + * + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + getVersionDetailsv2: (params: RequestParams = {}) => + this.request({ + path: \`/v2\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'api-with-examples' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type ConsumesPlainTextPayload = string; + +export type GetVersionDetailsv2Data = any; + +export type ListVersionsv2Data = any; + +export type WithCharsetPayload = string; + +export namespace V2 { + /** + * No description + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + export namespace GetVersionDetailsv2 { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetVersionDetailsv2Data; + } +} + +export namespace WithCharset { + /** + * @description consumes contains charset + * @name WithCharset + * @summary consumes contains charset + * @request POST:/with-charset/ + */ + export namespace WithCharset { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = WithCharsetPayload; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export namespace ConsumesPlainText { + /** + * @description consumes plain text + * @name ConsumesPlainText + * @summary consumes plain text + * @request POST:/consumes-plain-text/ + */ + export namespace ConsumesPlainText { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ConsumesPlainTextPayload; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Simple API overview + * @version v2 + */ +export class Api extends HttpClient { + /** + * @description multiple line 1 multiple line 2 multiple line 3 + * + * @name ListVersionsv2 + * @summary List API versions + * @request GET:/ + */ + listVersionsv2 = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + ...params, + }); + + v2 = { + /** + * No description + * + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + getVersionDetailsv2: (params: RequestParams = {}) => + this.request({ + path: \`/v2\`, + method: "GET", + ...params, + }), + }; + withCharset = { + /** + * @description consumes contains charset + * + * @name WithCharset + * @summary consumes contains charset + * @request POST:/with-charset/ + */ + withCharset: (someParm: WithCharsetPayload, params: RequestParams = {}) => + this.request({ + path: \`/with-charset/\`, + method: "POST", + body: someParm, + type: ContentType.Json, + ...params, + }), + }; + consumesPlainText = { + /** + * @description consumes plain text + * + * @name ConsumesPlainText + * @summary consumes plain text + * @request POST:/consumes-plain-text/ + */ + consumesPlainText: (someParm: ConsumesPlainTextPayload, params: RequestParams = {}) => + this.request({ + path: \`/consumes-plain-text/\`, + method: "POST", + body: someParm, + type: ContentType.Text, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'authentiq' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** Authentiq ID in JWT format, self-signed. */ +export interface AuthentiqID { + /** device token for push messages */ + devtoken?: string; + /** UUID and public signing key */ + sub: string; +} + +/** Claim in JWT format, self- or issuer-signed. */ +export interface Claims { + email?: string; + phone?: string; + /** claim scope */ + scope: string; + /** UUID */ + sub: string; + type?: string; +} + +export interface Error { + detail?: string; + error: number; + title?: string; + /** unique uri for this error */ + type?: string; +} + +/** Error response */ +export type ErrorResponse = Error; + +/** JWT */ +export interface GetKeyData { + /** @format date-time */ + since?: string; + status?: string; + /** base64safe encoded public signing key */ + sub?: string; +} + +export type GetKeyError = Error; + +export type HeadKeyData = any; + +export type HeadKeyError = Error; + +export interface KeyBindData { + /** confirmed */ + status?: string; +} + +export type KeyBindError = Error; + +export interface KeyRegisterData { + /** revoke key */ + secret?: string; + /** registered */ + status?: string; +} + +export type KeyRegisterError = Error; + +export interface KeyRevokeData { + /** done */ + status?: string; +} + +export type KeyRevokeError = Error; + +export interface KeyRevokeNosecretData { + /** pending or done */ + status?: string; +} + +export type KeyRevokeNosecretError = Error; + +export interface KeyRevokeNosecretParams { + /** verification code sent by email */ + code?: string; + /** primary email associated to Key (ID) */ + email: string; + /** primary phone number, international representation */ + phone: string; +} + +export interface KeyRevokeParams { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + /** revokation secret */ + secret: string; +} + +export interface KeyUpdateData { + /** confirmed */ + status?: string; +} + +export type KeyUpdateError = Error; + +export interface PushLoginRequestData { + /** sent */ + status?: string; +} + +export type PushLoginRequestError = Error; + +export interface PushLoginRequestParams { + /** URI App will connect to */ + callback: string; +} + +/** PushToken in JWT format, self-signed. */ +export interface PushToken { + /** audience (URI) */ + aud: string; + exp?: number; + iat?: number; + /** issuer (URI) */ + iss: string; + nbf: number; + /** UUID and public signing key */ + sub: string; +} + +export interface SignConfirmData { + /** confirmed */ + status?: string; +} + +export type SignConfirmError = Error; + +export interface SignDeleteData { + /** done */ + status?: string; +} + +export type SignDeleteError = Error; + +export interface SignRequestData { + /** 20-character ID */ + job?: string; + /** waiting */ + status?: string; +} + +export type SignRequestError = Error; + +export interface SignRequestParams { + /** test only mode, using test issuer */ + test?: number; +} + +/** JWT */ +export interface SignRetrieveData { + exp?: number; + field?: string; + /** base64safe encoded public signing key */ + sub?: string; +} + +export type SignRetrieveError = Error; + +export type SignRetrieveHeadData = any; + +export type SignRetrieveHeadError = Error; + +export interface SignUpdateData { + /** result is JWT or JSON?? */ + jwt?: string; + /** ready */ + status?: string; +} + +export type SignUpdateError = Error; + +export type WrongPathParams1Data = any; + +export type WrongPathParams2Data = any; + +export namespace WrongPathParams1 { + /** + * @description DDD + * @tags key, delete + * @name WrongPathParams1 + * @request DELETE:/wrong-path-params1/{pathParam1}/{path_param2}/{path_param3}/:pathParam4 + */ + export namespace WrongPathParams1 { + export type RequestParams = { + pathParam1: string; + pathParam2: string; + pathParam3: string; + pathParam4: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = WrongPathParams1Data; + } +} + +export namespace WrongPathParams2 { + /** + * @description DDD + * @tags key, delete + * @name WrongPathParams2 + * @request DELETE:/wrong-path-params2 + */ + export namespace WrongPathParams2 { + export type RequestParams = { + /** DDD */ + pathParam1: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = WrongPathParams2Data; + } +} + +export namespace Key { + /** + * @description Get public details of an Authentiq ID. + * @tags key, get + * @name GetKey + * @request GET:/key/{PK} + */ + export namespace GetKey { + export type RequestParams = { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetKeyData; + } + /** + * @description HEAD info on Authentiq ID + * @tags key, head + * @name HeadKey + * @request HEAD:/key/{PK} + */ + export namespace HeadKey { + export type RequestParams = { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = HeadKeyData; + } + /** + * @description Update Authentiq ID by replacing the object. v4: \`JWT(sub,email,phone)\` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags key, put + * @name KeyBind + * @request PUT:/key/{PK} + */ + export namespace KeyBind { + export type RequestParams = { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + }; + export type RequestQuery = {}; + export type RequestBody = AuthentiqID; + export type RequestHeaders = {}; + export type ResponseBody = KeyBindData; + } + /** + * @description Register a new ID \`JWT(sub, devtoken)\` v5: \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags key, post + * @name KeyRegister + * @request POST:/key + */ + export namespace KeyRegister { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = AuthentiqID; + export type RequestHeaders = {}; + export type ResponseBody = KeyRegisterData; + } + /** + * @description Revoke an Identity (Key) with a revocation secret + * @tags key, delete + * @name KeyRevoke + * @request DELETE:/key/{PK} + */ + export namespace KeyRevoke { + export type RequestParams = { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + }; + export type RequestQuery = { + /** revokation secret */ + secret: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = KeyRevokeData; + } + /** + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. + * @tags key, delete + * @name KeyRevokeNosecret + * @request DELETE:/key + */ + export namespace KeyRevokeNosecret { + export type RequestParams = {}; + export type RequestQuery = { + /** verification code sent by email */ + code?: string; + /** primary email associated to Key (ID) */ + email: string; + /** primary phone number, international representation */ + phone: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = KeyRevokeNosecretData; + } + /** + * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags key, post + * @name KeyUpdate + * @request POST:/key/{PK} + */ + export namespace KeyUpdate { + export type RequestParams = { + /** Public Signing Key - Authentiq ID (43 chars) */ + pk: string; + }; + export type RequestQuery = {}; + export type RequestBody = AuthentiqID; + export type RequestHeaders = {}; + export type ResponseBody = KeyUpdateData; + } +} + +export namespace Login { + /** + * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags login, post + * @name PushLoginRequest + * @request POST:/login + */ + export namespace PushLoginRequest { + export type RequestParams = {}; + export type RequestQuery = { + /** URI App will connect to */ + callback: string; + }; + export type RequestBody = PushToken; + export type RequestHeaders = {}; + export type ResponseBody = PushLoginRequestData; + } +} + +export namespace Scope { + /** + * @description this is a scope confirmation + * @tags scope, post + * @name SignConfirm + * @request POST:/scope/{job} + */ + export namespace SignConfirm { + export type RequestParams = { + /** Job ID (20 chars) */ + job: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SignConfirmData; + } + /** + * @description delete a verification job + * @tags scope, delete + * @name SignDelete + * @request DELETE:/scope/{job} + */ + export namespace SignDelete { + export type RequestParams = { + /** Job ID (20 chars) */ + job: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SignDeleteData; + } + /** + * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags scope, post + * @name SignRequest + * @request POST:/scope + */ + export namespace SignRequest { + export type RequestParams = {}; + export type RequestQuery = { + /** test only mode, using test issuer */ + test?: number; + }; + export type RequestBody = Claims; + export type RequestHeaders = {}; + export type ResponseBody = SignRequestData; + } + /** + * @description get the status / current content of a verification job + * @tags scope, get + * @name SignRetrieve + * @request GET:/scope/{job} + */ + export namespace SignRetrieve { + export type RequestParams = { + /** Job ID (20 chars) */ + job: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SignRetrieveData; + } + /** + * @description HEAD to get the status of a verification job + * @tags scope, head + * @name SignRetrieveHead + * @request HEAD:/scope/{job} + */ + export namespace SignRetrieveHead { + export type RequestParams = { + /** Job ID (20 chars) */ + job: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SignRetrieveHeadData; + } + /** + * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @tags scope, put + * @name SignUpdate + * @request PUT:/scope/{job} + */ + export namespace SignUpdate { + export type RequestParams = { + /** Job ID (20 chars) */ + job: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SignUpdateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Authentiq + * @version 6 + * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://authentiq.com/terms/ + * @baseUrl https://6-dot-authentiqio.appspot.com + * @contact Authentiq team (http://authentiq.io/support) + * + * Strong authentication, without the passwords. + */ +export class Api extends HttpClient { + wrongPathParams1 = { + /** + * @description DDD + * + * @tags key, delete + * @name WrongPathParams1 + * @request DELETE:/wrong-path-params1/{pathParam1}/{path_param2}/{path_param3}/:pathParam4 + */ + wrongPathParams1: ( + pathParam1: string, + pathParam2: string, + pathParam3: string, + pathParam4: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/wrong-path-params1/\${pathParam1}/\${pathParam2}/\${pathParam3}/\${pathParam4}\`, + method: "DELETE", + ...params, + }), + }; + wrongPathParams2 = { + /** + * @description DDD + * + * @tags key, delete + * @name WrongPathParams2 + * @request DELETE:/wrong-path-params2 + */ + wrongPathParams2: (pathParam1: string, params: RequestParams = {}) => + this.request({ + path: \`/wrong-path-params2\`, + method: "DELETE", + ...params, + }), + }; + key = { + /** + * @description Get public details of an Authentiq ID. + * + * @tags key, get + * @name GetKey + * @request GET:/key/{PK} + */ + getKey: (pk: string, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "GET", + ...params, + }), + + /** + * @description HEAD info on Authentiq ID + * + * @tags key, head + * @name HeadKey + * @request HEAD:/key/{PK} + */ + headKey: (pk: string, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "HEAD", + ...params, + }), + + /** + * @description Update Authentiq ID by replacing the object. v4: \`JWT(sub,email,phone)\` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, put + * @name KeyBind + * @request PUT:/key/{PK} + */ + keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "PUT", + body: body, + ...params, + }), + + /** + * @description Register a new ID \`JWT(sub, devtoken)\` v5: \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, post + * @name KeyRegister + * @request POST:/key + */ + keyRegister: (body: AuthentiqID, params: RequestParams = {}) => + this.request({ + path: \`/key\`, + method: "POST", + body: body, + ...params, + }), + + /** + * @description Revoke an Identity (Key) with a revocation secret + * + * @tags key, delete + * @name KeyRevoke + * @request DELETE:/key/{PK} + */ + keyRevoke: ({ pk, ...query }: KeyRevokeParams, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "DELETE", + query: query, + ...params, + }), + + /** + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. + * + * @tags key, delete + * @name KeyRevokeNosecret + * @request DELETE:/key + */ + keyRevokeNosecret: (query: KeyRevokeNosecretParams, params: RequestParams = {}) => + this.request({ + path: \`/key\`, + method: "DELETE", + query: query, + ...params, + }), + + /** + * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, post + * @name KeyUpdate + * @request POST:/key/{PK} + */ + keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "POST", + body: body, + ...params, + }), + }; + login = { + /** + * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags login, post + * @name PushLoginRequest + * @request POST:/login + */ + pushLoginRequest: (query: PushLoginRequestParams, body: PushToken, params: RequestParams = {}) => + this.request({ + path: \`/login\`, + method: "POST", + query: query, + body: body, + ...params, + }), + }; + scope = { + /** + * @description this is a scope confirmation + * + * @tags scope, post + * @name SignConfirm + * @request POST:/scope/{job} + */ + signConfirm: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "POST", + type: ContentType.Json, + ...params, + }), + + /** + * @description delete a verification job + * + * @tags scope, delete + * @name SignDelete + * @request DELETE:/scope/{job} + */ + signDelete: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "DELETE", + ...params, + }), + + /** + * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags scope, post + * @name SignRequest + * @request POST:/scope + */ + signRequest: (query: SignRequestParams, body: Claims, params: RequestParams = {}) => + this.request({ + path: \`/scope\`, + method: "POST", + query: query, + body: body, + ...params, + }), + + /** + * @description get the status / current content of a verification job + * + * @tags scope, get + * @name SignRetrieve + * @request GET:/scope/{job} + */ + signRetrieve: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "GET", + ...params, + }), + + /** + * @description HEAD to get the status of a verification job + * + * @tags scope, head + * @name SignRetrieveHead + * @request HEAD:/scope/{job} + */ + signRetrieveHead: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "HEAD", + ...params, + }), + + /** + * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags scope, put + * @name SignUpdate + * @request PUT:/scope/{job} + */ + signUpdate: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "PUT", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'callback-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** subscription information */ +export interface StreamsCreateData { + /** + * this unique identifier allows management of the subscription + * @example "2531329f-fb09-4ef7-887e-84e648214436" + */ + subscriptionId: string; +} + +export interface StreamsCreateParams { + /** + * the location where data will be sent. Must be network accessible + * by the source server + * @format uri + * @example "https://tonys-server.com" + */ + callbackUrl: string; +} + +export namespace Streams { + /** + * @description subscribes a client to receive out-of-band data + * @name StreamsCreate + * @request POST:/streams + */ + export namespace StreamsCreate { + export type RequestParams = {}; + export type RequestQuery = { + /** + * the location where data will be sent. Must be network accessible + * by the source server + * @format uri + * @example "https://tonys-server.com" + */ + callbackUrl: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = StreamsCreateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Callback Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + streams = { + /** + * @description subscribes a client to receive out-of-band data + * + * @name StreamsCreate + * @request POST:/streams + */ + streamsCreate: (query: StreamsCreateParams, params: RequestParams = {}) => + this.request({ + path: \`/streams\`, + method: "POST", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'components-responses' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** OK */ +export interface Default { + data?: string; +} + +export namespace Api { + /** + * No description + * @name GetData + * @request GET:/api + */ + export namespace GetData { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = { + data?: string; + }; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Title + * @version latest + * + * Description + */ +export class Api extends HttpClient { + api = { + /** + * No description + * + * @name GetData + * @request GET:/api + */ + getData: (params: RequestParams = {}) => + this.request< + { + data?: string; + }, + any + >({ + path: \`/api\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'enums' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** @format int32 */ +export enum EmptyEnum { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", +} + +/** @format int32 */ +export enum EnumWithMoreNames { + Bla = 1, + Blabla = "Blabla", + Boiler = "Boiler", +} + +export enum OnlyEnumNames { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", +} + +/** @format int32 */ +export enum SomeInterestEnum { + Bla = 6, + Blabla = 2, + Boiler = 1, + Bbabab = 67, + Nowadays = 88, + FAIL = 122, + Vvvvv = 88, + ASdasAS = 0, + ASDsacZX = 213, + Zook = 12378, + EnumMm = 123125, + VCsa = 32452, + Yuuu = 1111, + ASddd = 66666, + ASdsdsa = "ASdsdsa", + ASDds = "ASDds", + HSDFDS = "HSDFDS", +} + +export enum StringCompleteEnums { + Bla = "foo", + Blabla = "bar", + Boiler = "baz", +} + +export enum StringEnums { + Bla = "foo", + Blabla = "bar", + Boiler = "Boiler", +} + +export enum StringOnlyEnumNames { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://ffff.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + * @baseUrl https://ffff.com + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'example1' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** + * some description + * @pattern ^[A-Z]{3,3}$ + */ +export type Currency = string; + +export type ManagedInstanceTdeCertificatesCreateData = any; + +export interface ManagedInstanceTdeCertificatesCreateParams { + /** The API version to use for the request. */ + "api-version": string; + /** The name of the managed instance. */ + managedInstanceName: string; + /** The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. */ + resourceGroupName: string; + /** The subscription ID that identifies an Azure subscription. */ + subscriptionId: string; +} + +/** A TDE certificate that can be uploaded into a server. */ +export type TdeCertificate = { + /** Resource ID. */ + id?: string; + /** Resource name. */ + name?: string; + /** Resource type. */ + type?: string; +} & { + /** Resource properties. */ + properties?: TdeCertificateProperties; +}; + +/** A TDE certificate that can be uploaded into a server. */ +export type TdeCertificate2 = { + /** Resource ID. */ + id?: string; + /** Resource name. */ + name?: string; + /** Resource type. */ + type?: string; +}; + +/** Properties of a TDE certificate. */ +export interface TdeCertificateProperties { + /** The certificate password. */ + certPassword?: string; + /** The base64 encoded certificate private blob. */ + privateBlob: string; +} + +export namespace Subscriptions { + /** + * @description Creates a TDE certificate for a given server. + * @tags ManagedInstanceTdeCertificates + * @name ManagedInstanceTdeCertificatesCreate + * @request POST:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/tdeCertificates + */ + export namespace ManagedInstanceTdeCertificatesCreate { + export type RequestParams = { + /** The name of the managed instance. */ + managedInstanceName: string; + /** The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. */ + resourceGroupName: string; + /** The subscription ID that identifies an Azure subscription. */ + subscriptionId: string; + }; + export type RequestQuery = { + /** The API version to use for the request. */ + "api-version": string; + }; + export type RequestBody = TdeCertificate; + export type RequestHeaders = {}; + export type ResponseBody = ManagedInstanceTdeCertificatesCreateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://management.azure.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title SqlManagementClient + * @version 2017-10-01-preview + * @baseUrl https://management.azure.com + * + * The Azure SQL Database management API provides a RESTful set of web APIs that interact with Azure SQL Database services to manage your databases. The API enables users to create, retrieve, update, and delete databases, servers, and other entities. + */ +export class Api extends HttpClient { + subscriptions = { + /** + * @description Creates a TDE certificate for a given server. + * + * @tags ManagedInstanceTdeCertificates + * @name ManagedInstanceTdeCertificatesCreate + * @request POST:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/tdeCertificates + */ + managedInstanceTdeCertificatesCreate: ( + { resourceGroupName, managedInstanceName, subscriptionId, ...query }: ManagedInstanceTdeCertificatesCreateParams, + parameters: TdeCertificate, + params: RequestParams = {}, + ) => + this.request({ + path: \`/subscriptions/\${subscriptionId}/resourceGroups/\${resourceGroupName}/providers/Microsoft.Sql/managedInstances/\${managedInstanceName}/tdeCertificates\`, + method: "POST", + query: query, + body: parameters, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'explode-param-3' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type CreateFileData = Floop; + +export interface CreateFilePayload { + /** @default "" */ + meme: string; + memeType?: string; +} + +export interface Floop { + info?: string; +} + +export interface GetsParams { + params?: QueryParams; +} + +export interface QueryParams { + /** + * Page size + * @format int32 + * @min 0 + */ + "page-size"?: number | null; + /** + * Page number + * @format int32 + * @min 0 + */ + page?: number | null; +} + +export namespace User { + /** + * No description + * @name CreateFile + * @summary Some summary + * @request POST:/{user}/foos + */ + export namespace CreateFile { + export type RequestParams = { + user: string; + }; + export type RequestQuery = {}; + export type RequestBody = CreateFilePayload; + export type RequestHeaders = {}; + export type ResponseBody = CreateFileData; + } +} + +export namespace Something { + /** + * No description + * @name Gets + * @request GET:/something/ + */ + export namespace Gets { + export type RequestParams = {}; + export type RequestQuery = { + params?: QueryParams; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title API + * @version 0.1 + * + * Documentation + */ +export class Api extends HttpClient { + user = { + /** + * No description + * + * @name CreateFile + * @summary Some summary + * @request POST:/{user}/foos + */ + createFile: (user: string, data: CreateFilePayload, params: RequestParams = {}) => + this.request({ + path: \`/\${user}/foos\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + }; + something = { + /** + * No description + * + * @name Gets + * @request GET:/something/ + */ + gets: (query: GetsParams, params: RequestParams = {}) => + this.request({ + path: \`/something/\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'file-formdata-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type UploadFileData = any; + +export interface UploadFilePayload { + /** + * File description + * @format binary + */ + file?: File; + /** Boolean flag */ + someFlag?: boolean; +} + +export namespace UploadFile { + /** + * No description + * @tags tag + * @name UploadFile + * @summary Upload file + * @request POST:/upload-file + */ + export namespace UploadFile { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UploadFilePayload; + export type RequestHeaders = {}; + export type ResponseBody = UploadFileData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Title + * @version v0.1 + */ +export class Api extends HttpClient { + uploadFile = { + /** + * No description + * + * @tags tag + * @name UploadFile + * @summary Upload file + * @request POST:/upload-file + */ + uploadFile: (data: UploadFilePayload, params: RequestParams = {}) => + this.request({ + path: \`/upload-file\`, + method: "POST", + body: data, + type: ContentType.FormData, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'full-swagger-scheme' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type ActionsAddRepoAccessToSelfHostedRunnerGroupInOrgData = any; + +export type ActionsAddSelectedRepoToOrgSecretData = any; + +export type ActionsAddSelfHostedRunnerToGroupForOrgData = any; + +export interface ActionsBillingUsage { + /** The amount of free GitHub Actions minutes available. */ + included_minutes: number; + minutes_used_breakdown: { + /** Total minutes used on macOS runner machines. */ + MACOS?: number; + /** Total minutes used on Ubuntu runner machines. */ + UBUNTU?: number; + /** Total minutes used on Windows runner machines. */ + WINDOWS?: number; + }; + /** The sum of the free and paid GitHub Actions minutes used. */ + total_minutes_used: number; + /** The total paid GitHub Actions minutes used. */ + total_paid_minutes_used: number; +} + +export type ActionsCancelWorkflowRunData = any; + +export type ActionsCreateOrUpdateOrgSecretData = any; + +export interface ActionsCreateOrUpdateOrgSecretPayload { + /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get an organization public key](https://docs.github.com/rest/reference/actions#get-an-organization-public-key) endpoint. */ + encrypted_value?: string; + /** ID of the key you used to encrypt the secret. */ + key_id?: string; + /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the \`visibility\` is set to \`selected\`. You can manage the list of selected repositories using the [List selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#list-selected-repositories-for-an-organization-secret), [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret), and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ + selected_repository_ids?: string[]; + /** + * Configures the access that repositories have to the organization secret. Can be one of: + * \\- \`all\` - All repositories in an organization can access the secret. + * \\- \`private\` - Private repositories in an organization can access the secret. + * \\- \`selected\` - Only specific repositories can access the secret. + */ + visibility?: ActionsCreateOrUpdateOrgSecretVisibilityEnum; +} + +/** + * Configures the access that repositories have to the organization secret. Can be one of: + * \\- \`all\` - All repositories in an organization can access the secret. + * \\- \`private\` - Private repositories in an organization can access the secret. + * \\- \`selected\` - Only specific repositories can access the secret. + */ +export enum ActionsCreateOrUpdateOrgSecretVisibilityEnum { + All = "all", + Private = "private", + Selected = "selected", +} + +export type ActionsCreateOrUpdateRepoSecretData = any; + +export interface ActionsCreateOrUpdateRepoSecretPayload { + /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get a repository public key](https://docs.github.com/rest/reference/actions#get-a-repository-public-key) endpoint. */ + encrypted_value?: string; + /** ID of the key you used to encrypt the secret. */ + key_id?: string; +} + +export type ActionsCreateRegistrationTokenForOrgData = AuthenticationToken; + +export type ActionsCreateRegistrationTokenForRepoData = AuthenticationToken; + +export type ActionsCreateRemoveTokenForOrgData = AuthenticationToken; + +export type ActionsCreateRemoveTokenForRepoData = AuthenticationToken; + +export type ActionsCreateSelfHostedRunnerGroupForOrgData = RunnerGroupsOrg; + +export interface ActionsCreateSelfHostedRunnerGroupForOrgPayload { + /** Name of the runner group. */ + name: string; + /** List of runner IDs to add to the runner group. */ + runners?: number[]; + /** List of repository IDs that can access the runner group. */ + selected_repository_ids?: number[]; + /** + * Visibility of a runner group. You can select all repositories, select individual repositories, or limit access to private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. + * @default "all" + */ + visibility?: ActionsCreateSelfHostedRunnerGroupForOrgVisibilityEnum; +} + +/** + * Visibility of a runner group. You can select all repositories, select individual repositories, or limit access to private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. + * @default "all" + */ +export enum ActionsCreateSelfHostedRunnerGroupForOrgVisibilityEnum { + Selected = "selected", + All = "all", + Private = "private", +} + +export type ActionsCreateWorkflowDispatchData = any; + +export interface ActionsCreateWorkflowDispatchPayload { + /** Input keys and values configured in the workflow file. The maximum number of properties is 10. Any default properties configured in the workflow file will be used when \`inputs\` are omitted. */ + inputs?: Record; + /** The git reference for the workflow. The reference can be a branch or tag name. */ + ref: string; +} + +export type ActionsDeleteArtifactData = any; + +export type ActionsDeleteOrgSecretData = any; + +export type ActionsDeleteRepoSecretData = any; + +export type ActionsDeleteSelfHostedRunnerFromOrgData = any; + +export type ActionsDeleteSelfHostedRunnerFromRepoData = any; + +export type ActionsDeleteSelfHostedRunnerGroupFromOrgData = any; + +export type ActionsDeleteWorkflowRunData = any; + +export type ActionsDeleteWorkflowRunLogsData = any; + +export type ActionsDisableSelectedRepositoryGithubActionsOrganizationData = any; + +export type ActionsDisableWorkflowData = any; + +export type ActionsEnableSelectedRepositoryGithubActionsOrganizationData = any; + +export type ActionsEnableWorkflowData = any; + +/** Whether GitHub Actions is enabled on the repository. */ +export type ActionsEnabled = boolean; + +export interface ActionsEnterprisePermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_organizations: EnabledOrganizations; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; + /** The API URL to use to get or set the selected organizations that are allowed to run GitHub Actions, when \`enabled_organizations\` is set to \`selected\`. */ + selected_organizations_url?: string; +} + +export type ActionsGetAllowedActionsOrganizationData = SelectedActions; + +export type ActionsGetAllowedActionsRepositoryData = SelectedActions; + +export type ActionsGetArtifactData = Artifact; + +export type ActionsGetGithubActionsPermissionsOrganizationData = ActionsOrganizationPermissions; + +export type ActionsGetGithubActionsPermissionsRepositoryData = ActionsRepositoryPermissions; + +export type ActionsGetJobForWorkflowRunData = Job; + +export type ActionsGetOrgPublicKeyData = ActionsPublicKey; + +export type ActionsGetOrgSecretData = OrganizationActionsSecret; + +export type ActionsGetRepoPublicKeyData = ActionsPublicKey; + +export type ActionsGetRepoSecretData = ActionsSecret; + +export type ActionsGetSelfHostedRunnerForOrgData = Runner; + +export type ActionsGetSelfHostedRunnerForRepoData = Runner; + +export type ActionsGetSelfHostedRunnerGroupForOrgData = RunnerGroupsOrg; + +export type ActionsGetWorkflowData = Workflow; + +export type ActionsGetWorkflowRunData = WorkflowRun; + +export type ActionsGetWorkflowRunUsageData = WorkflowRunUsage; + +export type ActionsGetWorkflowUsageData = WorkflowUsage; + +export interface ActionsListArtifactsForRepoData { + artifacts: Artifact[]; + total_count: number; +} + +export interface ActionsListArtifactsForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface ActionsListJobsForWorkflowRunData { + jobs: Job[]; + total_count: number; +} + +export interface ActionsListJobsForWorkflowRunParams { + /** + * Filters jobs by their \`completed_at\` timestamp. Can be one of: + * \\* \`latest\`: Returns jobs from the most recent execution of the workflow run. + * \\* \`all\`: Returns all jobs for a workflow run, including from old executions of the workflow run. + * @default "latest" + */ + filter?: FilterEnum4; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + runId: number; +} + +/** + * Filters jobs by their \`completed_at\` timestamp. Can be one of: + * \\* \`latest\`: Returns jobs from the most recent execution of the workflow run. + * \\* \`all\`: Returns all jobs for a workflow run, including from old executions of the workflow run. + * @default "latest" + */ +export enum ActionsListJobsForWorkflowRunParams1FilterEnum { + Latest = "latest", + All = "all", +} + +export interface ActionsListOrgSecretsData { + secrets: OrganizationActionsSecret[]; + total_count: number; +} + +export interface ActionsListOrgSecretsParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface ActionsListRepoAccessToSelfHostedRunnerGroupInOrgData { + repositories: Repository[]; + total_count: number; +} + +export interface ActionsListRepoSecretsData { + secrets: ActionsSecret[]; + total_count: number; +} + +export interface ActionsListRepoSecretsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface ActionsListRepoWorkflowsData { + total_count: number; + workflows: Workflow[]; +} + +export interface ActionsListRepoWorkflowsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ActionsListRunnerApplicationsForOrgData = RunnerApplication[]; + +export type ActionsListRunnerApplicationsForRepoData = RunnerApplication[]; + +export interface ActionsListSelectedReposForOrgSecretData { + repositories: MinimalRepository[]; + total_count: number; +} + +export interface ActionsListSelectedRepositoriesEnabledGithubActionsOrganizationData { + repositories: Repository[]; + total_count: number; +} + +export interface ActionsListSelectedRepositoriesEnabledGithubActionsOrganizationParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface ActionsListSelfHostedRunnerGroupsForOrgData { + runner_groups: RunnerGroupsOrg[]; + total_count: number; +} + +export interface ActionsListSelfHostedRunnerGroupsForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface ActionsListSelfHostedRunnersForOrgData { + runners: Runner[]; + total_count: number; +} + +export interface ActionsListSelfHostedRunnersForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface ActionsListSelfHostedRunnersForRepoData { + runners: Runner[]; + total_count: number; +} + +export interface ActionsListSelfHostedRunnersForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface ActionsListSelfHostedRunnersInGroupForOrgData { + runners: Runner[]; + total_count: number; +} + +export interface ActionsListSelfHostedRunnersInGroupForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; +} + +export interface ActionsListWorkflowRunArtifactsData { + artifacts: Artifact[]; + total_count: number; +} + +export interface ActionsListWorkflowRunArtifactsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + runId: number; +} + +export interface ActionsListWorkflowRunsData { + total_count: number; + workflow_runs: WorkflowRun[]; +} + +export interface ActionsListWorkflowRunsForRepoData { + total_count: number; + workflow_runs: WorkflowRun[]; +} + +export interface ActionsListWorkflowRunsForRepoParams { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ + status?: StatusEnum; +} + +/** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ +export enum ActionsListWorkflowRunsForRepoParams1StatusEnum { + Completed = "completed", + Status = "status", + Conclusion = "conclusion", +} + +export interface ActionsListWorkflowRunsParams { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ + status?: StatusEnum1; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; +} + +/** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ +export enum ActionsListWorkflowRunsParams1StatusEnum { + Completed = "completed", + Status = "status", + Conclusion = "conclusion", +} + +export interface ActionsOrganizationPermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_repositories: EnabledRepositories; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; + /** The API URL to use to get or set the selected repositories that are allowed to run GitHub Actions, when \`enabled_repositories\` is set to \`selected\`. */ + selected_repositories_url?: string; +} + +/** + * ActionsPublicKey + * The public key used for setting Actions Secrets. + */ +export interface ActionsPublicKey { + /** @example "2011-01-26T19:01:12Z" */ + created_at?: string; + /** @example 2 */ + id?: number; + /** + * The Base64 encoded public key. + * @example "hBT5WZEj8ZoOv6TYJsfWq7MxTEQopZO5/IT3ZCVQPzs=" + */ + key: string; + /** + * The identifier for the key. + * @example "1234567" + */ + key_id: string; + /** @example "ssh-rsa AAAAB3NzaC1yc2EAAA" */ + title?: string; + /** @example "https://api.github.com/user/keys/2" */ + url?: string; +} + +export type ActionsReRunWorkflowData = any; + +export type ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrgData = any; + +export type ActionsRemoveSelectedRepoFromOrgSecretData = any; + +export type ActionsRemoveSelfHostedRunnerFromGroupForOrgData = any; + +export interface ActionsRepositoryPermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** Whether GitHub Actions is enabled on the repository. */ + enabled: ActionsEnabled; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; +} + +/** + * Actions Secret + * Set secrets for GitHub Actions. + */ +export interface ActionsSecret { + /** @format date-time */ + created_at: string; + /** + * The name of the secret. + * @example "SECRET_TOKEN" + */ + name: string; + /** @format date-time */ + updated_at: string; +} + +export type ActionsSetAllowedActionsOrganizationData = any; + +export type ActionsSetAllowedActionsRepositoryData = any; + +export type ActionsSetGithubActionsPermissionsOrganizationData = any; + +export interface ActionsSetGithubActionsPermissionsOrganizationPayload { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_repositories: EnabledRepositories; +} + +export type ActionsSetGithubActionsPermissionsRepositoryData = any; + +export interface ActionsSetGithubActionsPermissionsRepositoryPayload { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** Whether GitHub Actions is enabled on the repository. */ + enabled: ActionsEnabled; +} + +export type ActionsSetRepoAccessToSelfHostedRunnerGroupInOrgData = any; + +export interface ActionsSetRepoAccessToSelfHostedRunnerGroupInOrgPayload { + /** List of repository IDs that can access the runner group. */ + selected_repository_ids: number[]; +} + +export type ActionsSetSelectedReposForOrgSecretData = any; + +export interface ActionsSetSelectedReposForOrgSecretPayload { + /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the \`visibility\` is set to \`selected\`. You can add and remove individual repositories using the [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret) and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ + selected_repository_ids?: number[]; +} + +export type ActionsSetSelectedRepositoriesEnabledGithubActionsOrganizationData = any; + +export interface ActionsSetSelectedRepositoriesEnabledGithubActionsOrganizationPayload { + /** List of repository IDs to enable for GitHub Actions. */ + selected_repository_ids: number[]; +} + +export type ActionsSetSelfHostedRunnersInGroupForOrgData = any; + +export interface ActionsSetSelfHostedRunnersInGroupForOrgPayload { + /** List of runner IDs to add to the runner group. */ + runners: number[]; +} + +export type ActionsUpdateSelfHostedRunnerGroupForOrgData = RunnerGroupsOrg; + +export interface ActionsUpdateSelfHostedRunnerGroupForOrgPayload { + /** Name of the runner group. */ + name?: string; + /** Visibility of a runner group. You can select all repositories, select individual repositories, or all private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. */ + visibility?: ActionsUpdateSelfHostedRunnerGroupForOrgVisibilityEnum; +} + +/** Visibility of a runner group. You can select all repositories, select individual repositories, or all private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. */ +export enum ActionsUpdateSelfHostedRunnerGroupForOrgVisibilityEnum { + Selected = "selected", + All = "all", + Private = "private", +} + +export type ActivityCheckRepoIsStarredByAuthenticatedUserData = any; + +export type ActivityCheckRepoIsStarredByAuthenticatedUserError = BasicError; + +export type ActivityDeleteRepoSubscriptionData = any; + +export type ActivityDeleteThreadSubscriptionData = any; + +export type ActivityGetFeedsData = Feed; + +export type ActivityGetRepoSubscriptionData = RepositorySubscription; + +export type ActivityGetThreadData = Thread; + +export type ActivityGetThreadSubscriptionForAuthenticatedUserData = ThreadSubscription; + +export type ActivityListEventsForAuthenticatedUserData = Event[]; + +export interface ActivityListEventsForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type ActivityListNotificationsForAuthenticatedUserData = Thread[]; + +export interface ActivityListNotificationsForAuthenticatedUserParams { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type ActivityListOrgEventsForAuthenticatedUserData = Event[]; + +export interface ActivityListOrgEventsForAuthenticatedUserParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type ActivityListPublicEventsData = Event[]; + +export type ActivityListPublicEventsForRepoNetworkData = Event[]; + +export interface ActivityListPublicEventsForRepoNetworkParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ActivityListPublicEventsForUserData = Event[]; + +export interface ActivityListPublicEventsForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export interface ActivityListPublicEventsParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type ActivityListPublicOrgEventsData = Event[]; + +export interface ActivityListPublicOrgEventsParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type ActivityListReceivedEventsForUserData = Event[]; + +export interface ActivityListReceivedEventsForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type ActivityListReceivedPublicEventsForUserData = Event[]; + +export interface ActivityListReceivedPublicEventsForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type ActivityListRepoEventsData = Event[]; + +export interface ActivityListRepoEventsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ActivityListRepoNotificationsForAuthenticatedUserData = Thread[]; + +export interface ActivityListRepoNotificationsForAuthenticatedUserParams { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type ActivityListReposStarredByAuthenticatedUserData = Repository[]; + +export interface ActivityListReposStarredByAuthenticatedUserParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum17; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum20; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum ActivityListReposStarredByAuthenticatedUserParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum ActivityListReposStarredByAuthenticatedUserParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export type ActivityListReposStarredByUserData = Repository[]; + +export interface ActivityListReposStarredByUserParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum19; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum22; + username: string; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum ActivityListReposStarredByUserParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum ActivityListReposStarredByUserParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export type ActivityListReposWatchedByUserData = MinimalRepository[]; + +export interface ActivityListReposWatchedByUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type ActivityListStargazersForRepoData = SimpleUser[]; + +export interface ActivityListStargazersForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ActivityListWatchedReposForAuthenticatedUserData = MinimalRepository[]; + +export interface ActivityListWatchedReposForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type ActivityListWatchersForRepoData = SimpleUser[]; + +export interface ActivityListWatchersForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface ActivityMarkNotificationsAsReadData { + message?: string; +} + +export interface ActivityMarkNotificationsAsReadPayload { + /** + * Describes the last point that notifications were checked. + * @format date-time + */ + last_read_at?: string; + /** Whether the notification has been read. */ + read?: boolean; +} + +export type ActivityMarkRepoNotificationsAsReadData = any; + +export interface ActivityMarkRepoNotificationsAsReadPayload { + /** Describes the last point that notifications were checked. Anything updated since this time will not be marked as read. If you omit this parameter, all notifications are marked as read. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. Default: The current timestamp. */ + last_read_at?: string; +} + +export type ActivityMarkThreadAsReadData = any; + +export type ActivitySetRepoSubscriptionData = RepositorySubscription; + +export interface ActivitySetRepoSubscriptionPayload { + /** Determines if all notifications should be blocked from this repository. */ + ignored?: boolean; + /** Determines if notifications should be received from this repository. */ + subscribed?: boolean; +} + +export type ActivitySetThreadSubscriptionData = ThreadSubscription; + +export interface ActivitySetThreadSubscriptionPayload { + /** + * Whether to block all notifications from a thread. + * @default false + */ + ignored?: boolean; +} + +export type ActivityStarRepoForAuthenticatedUserData = any; + +export type ActivityUnstarRepoForAuthenticatedUserData = any; + +/** + * Actor + * Actor + */ +export interface Actor { + /** @format uri */ + avatar_url: string; + display_login?: string; + gravatar_id: string | null; + id: number; + login: string; + /** @format uri */ + url: string; +} + +/** + * Filters the collaborators by their affiliation. Can be one of: + * \\* \`outside\`: Outside collaborators of a project that are not a member of the project's organization. + * \\* \`direct\`: Collaborators with permissions to a project, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ +export enum AffiliationEnum { + Outside = "outside", + Direct = "direct", + All = "all", +} + +/** + * Filter collaborators returned by their affiliation. Can be one of: + * \\* \`outside\`: All outside collaborators of an organization-owned repository. + * \\* \`direct\`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ +export enum AffiliationEnum1 { + Outside = "outside", + Direct = "direct", + All = "all", +} + +/** + * The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type AlertCreatedAt = string; + +/** + * The GitHub URL of the alert resource. + * @format uri + */ +export type AlertHtmlUrl = string; + +/** The security alert number. */ +export type AlertNumber = number; + +/** + * The REST API URL of the alert resource. + * @format uri + */ +export type AlertUrl = string; + +/** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ +export enum AllowedActions { + All = "all", + LocalOnly = "local_only", + Selected = "selected", +} + +/** + * Api Overview + * Api Overview + */ +export interface ApiOverview { + /** @example ["13.64.0.0/16","13.65.0.0/16"] */ + actions?: string[]; + /** @example ["127.0.0.1/32"] */ + api?: string[]; + /** @example ["127.0.0.1/32"] */ + git?: string[]; + /** @example ["127.0.0.1/32"] */ + hooks?: string[]; + /** @example ["54.158.161.132","54.226.70.38"] */ + importer?: string[]; + /** @example ["192.30.252.153/32","192.30.252.154/32"] */ + pages?: string[]; + ssh_key_fingerprints?: { + SHA256_DSA?: string; + SHA256_RSA?: string; + }; + /** @example true */ + verifiable_password_authentication: boolean; + /** @example ["127.0.0.1/32"] */ + web?: string[]; +} + +/** + * App Permissions + * The permissions granted to the user-to-server access token. + * @example {"contents":"read","issues":"read","deployments":"write","single_file":"read"} + */ +export interface AppPermissions { + /** The level of permission to grant the access token for GitHub Actions workflows, workflow runs, and artifacts. Can be one of: \`read\` or \`write\`. */ + actions?: AppPermissionsActionsEnum; + /** The level of permission to grant the access token for repository creation, deletion, settings, teams, and collaborators creation. Can be one of: \`read\` or \`write\`. */ + administration?: AppPermissionsAdministrationEnum; + /** The level of permission to grant the access token for checks on code. Can be one of: \`read\` or \`write\`. */ + checks?: AppPermissionsChecksEnum; + /** The level of permission to grant the access token for notification of content references and creation content attachments. Can be one of: \`read\` or \`write\`. */ + content_references?: AppPermissionsContentReferencesEnum; + /** The level of permission to grant the access token for repository contents, commits, branches, downloads, releases, and merges. Can be one of: \`read\` or \`write\`. */ + contents?: AppPermissionsContentsEnum; + /** The level of permission to grant the access token for deployments and deployment statuses. Can be one of: \`read\` or \`write\`. */ + deployments?: AppPermissionsDeploymentsEnum; + /** The level of permission to grant the access token for managing repository environments. Can be one of: \`read\` or \`write\`. */ + environments?: AppPermissionsEnvironmentsEnum; + /** The level of permission to grant the access token for issues and related comments, assignees, labels, and milestones. Can be one of: \`read\` or \`write\`. */ + issues?: AppPermissionsIssuesEnum; + /** The level of permission to grant the access token for organization teams and members. Can be one of: \`read\` or \`write\`. */ + members?: AppPermissionsMembersEnum; + /** The level of permission to grant the access token to search repositories, list collaborators, and access repository metadata. Can be one of: \`read\` or \`write\`. */ + metadata?: AppPermissionsMetadataEnum; + /** The level of permission to grant the access token to manage access to an organization. Can be one of: \`read\` or \`write\`. */ + organization_administration?: AppPermissionsOrganizationAdministrationEnum; + /** The level of permission to grant the access token to manage the post-receive hooks for an organization. Can be one of: \`read\` or \`write\`. */ + organization_hooks?: AppPermissionsOrganizationHooksEnum; + /** The level of permission to grant the access token for viewing an organization's plan. Can be one of: \`read\`. */ + organization_plan?: AppPermissionsOrganizationPlanEnum; + /** The level of permission to grant the access token to manage organization projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ + organization_projects?: AppPermissionsOrganizationProjectsEnum; + /** The level of permission to grant the access token to manage organization secrets. Can be one of: \`read\` or \`write\`. */ + organization_secrets?: AppPermissionsOrganizationSecretsEnum; + /** The level of permission to grant the access token to view and manage GitHub Actions self-hosted runners available to an organization. Can be one of: \`read\` or \`write\`. */ + organization_self_hosted_runners?: AppPermissionsOrganizationSelfHostedRunnersEnum; + /** The level of permission to grant the access token to view and manage users blocked by the organization. Can be one of: \`read\` or \`write\`. */ + organization_user_blocking?: AppPermissionsOrganizationUserBlockingEnum; + /** The level of permission to grant the access token for packages published to GitHub Packages. Can be one of: \`read\` or \`write\`. */ + packages?: AppPermissionsPackagesEnum; + /** The level of permission to grant the access token to retrieve Pages statuses, configuration, and builds, as well as create new builds. Can be one of: \`read\` or \`write\`. */ + pages?: AppPermissionsPagesEnum; + /** The level of permission to grant the access token for pull requests and related comments, assignees, labels, milestones, and merges. Can be one of: \`read\` or \`write\`. */ + pull_requests?: AppPermissionsPullRequestsEnum; + /** The level of permission to grant the access token to manage the post-receive hooks for a repository. Can be one of: \`read\` or \`write\`. */ + repository_hooks?: AppPermissionsRepositoryHooksEnum; + /** The level of permission to grant the access token to manage repository projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ + repository_projects?: AppPermissionsRepositoryProjectsEnum; + /** The level of permission to grant the access token to view and manage secret scanning alerts. Can be one of: \`read\` or \`write\`. */ + secret_scanning_alerts?: AppPermissionsSecretScanningAlertsEnum; + /** The level of permission to grant the access token to manage repository secrets. Can be one of: \`read\` or \`write\`. */ + secrets?: AppPermissionsSecretsEnum; + /** The level of permission to grant the access token to view and manage security events like code scanning alerts. Can be one of: \`read\` or \`write\`. */ + security_events?: AppPermissionsSecurityEventsEnum; + /** The level of permission to grant the access token to manage just a single file. Can be one of: \`read\` or \`write\`. */ + single_file?: AppPermissionsSingleFileEnum; + /** The level of permission to grant the access token for commit statuses. Can be one of: \`read\` or \`write\`. */ + statuses?: AppPermissionsStatusesEnum; + /** The level of permission to grant the access token to manage team discussions and related comments. Can be one of: \`read\` or \`write\`. */ + team_discussions?: AppPermissionsTeamDiscussionsEnum; + /** The level of permission to grant the access token to retrieve Dependabot alerts. Can be one of: \`read\`. */ + vulnerability_alerts?: AppPermissionsVulnerabilityAlertsEnum; + /** The level of permission to grant the access token to update GitHub Actions workflow files. Can be one of: \`write\`. */ + workflows?: AppPermissionsWorkflowsEnum; +} + +/** The level of permission to grant the access token for GitHub Actions workflows, workflow runs, and artifacts. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsActionsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for repository creation, deletion, settings, teams, and collaborators creation. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsAdministrationEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for checks on code. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsChecksEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for notification of content references and creation content attachments. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsContentReferencesEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for repository contents, commits, branches, downloads, releases, and merges. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsContentsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for deployments and deployment statuses. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsDeploymentsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for managing repository environments. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsEnvironmentsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for issues and related comments, assignees, labels, and milestones. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsIssuesEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for organization teams and members. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsMembersEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to search repositories, list collaborators, and access repository metadata. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsMetadataEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage access to an organization. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsOrganizationAdministrationEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage the post-receive hooks for an organization. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsOrganizationHooksEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for viewing an organization's plan. Can be one of: \`read\`. */ +export enum AppPermissionsOrganizationPlanEnum { + Read = "read", +} + +/** The level of permission to grant the access token to manage organization projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ +export enum AppPermissionsOrganizationProjectsEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +/** The level of permission to grant the access token to manage organization secrets. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsOrganizationSecretsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to view and manage GitHub Actions self-hosted runners available to an organization. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsOrganizationSelfHostedRunnersEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to view and manage users blocked by the organization. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsOrganizationUserBlockingEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for packages published to GitHub Packages. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsPackagesEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to retrieve Pages statuses, configuration, and builds, as well as create new builds. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsPagesEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for pull requests and related comments, assignees, labels, milestones, and merges. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsPullRequestsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage the post-receive hooks for a repository. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsRepositoryHooksEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage repository projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ +export enum AppPermissionsRepositoryProjectsEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +/** The level of permission to grant the access token to view and manage secret scanning alerts. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsSecretScanningAlertsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage repository secrets. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsSecretsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to view and manage security events like code scanning alerts. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsSecurityEventsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage just a single file. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsSingleFileEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token for commit statuses. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsStatusesEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to manage team discussions and related comments. Can be one of: \`read\` or \`write\`. */ +export enum AppPermissionsTeamDiscussionsEnum { + Read = "read", + Write = "write", +} + +/** The level of permission to grant the access token to retrieve Dependabot alerts. Can be one of: \`read\`. */ +export enum AppPermissionsVulnerabilityAlertsEnum { + Read = "read", +} + +/** The level of permission to grant the access token to update GitHub Actions workflow files. Can be one of: \`write\`. */ +export enum AppPermissionsWorkflowsEnum { + Write = "write", +} + +/** + * Application Grant + * The authorization associated with an OAuth Access. + */ +export interface ApplicationGrant { + app: { + client_id: string; + name: string; + /** @format uri */ + url: string; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example ["public_repo"] */ + scopes: string[]; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/applications/grants/1" + */ + url: string; + user?: SimpleUser | null; +} + +export type AppsAddRepoToInstallationData = any; + +export type AppsCheckAuthorizationData = Authorization | null; + +export type AppsCheckTokenData = Authorization; + +export interface AppsCheckTokenPayload { + /** The access_token of the OAuth application. */ + access_token: string; +} + +export type AppsCreateContentAttachmentData = ContentReferenceAttachment; + +export interface AppsCreateContentAttachmentPayload { + /** + * The body of the attachment + * @maxLength 262144 + * @example "Body of the attachment" + */ + body: string; + /** + * The title of the attachment + * @maxLength 1024 + * @example "Title of the attachment" + */ + title: string; +} + +export type AppsCreateFromManifestData = Integration & { + client_id: string; + client_secret: string; + pem: string; + webhook_secret: string; + [key: string]: any; +}; + +export type AppsCreateInstallationAccessTokenData = InstallationToken; + +export interface AppsCreateInstallationAccessTokenPayload { + /** The permissions granted to the user-to-server access token. */ + permissions?: AppPermissions; + /** List of repository names that the token should have access to */ + repositories?: string[]; + /** + * List of repository IDs that the token should have access to + * @example [1] + */ + repository_ids?: number[]; +} + +export type AppsDeleteAuthorizationData = any; + +export interface AppsDeleteAuthorizationPayload { + /** The OAuth access token used to authenticate to the GitHub API. */ + access_token?: string; +} + +export type AppsDeleteInstallationData = any; + +export type AppsDeleteTokenData = any; + +export interface AppsDeleteTokenPayload { + /** The OAuth access token used to authenticate to the GitHub API. */ + access_token?: string; +} + +export type AppsGetAuthenticatedData = Integration; + +export type AppsGetBySlugData = Integration; + +export type AppsGetInstallationData = Installation; + +export type AppsGetOrgInstallationData = Installation; + +export type AppsGetRepoInstallationData = Installation; + +export type AppsGetSubscriptionPlanForAccountData = MarketplacePurchase; + +export type AppsGetSubscriptionPlanForAccountError = BasicError; + +export type AppsGetSubscriptionPlanForAccountStubbedData = MarketplacePurchase; + +export type AppsGetUserInstallationData = Installation; + +export type AppsGetWebhookConfigForAppData = WebhookConfig; + +export type AppsListAccountsForPlanData = MarketplacePurchase[]; + +export interface AppsListAccountsForPlanParams { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: DirectionEnum1; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** plan_id parameter */ + planId: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum1; +} + +/** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum AppsListAccountsForPlanParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum AppsListAccountsForPlanParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export type AppsListAccountsForPlanStubbedData = MarketplacePurchase[]; + +export interface AppsListAccountsForPlanStubbedParams { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: DirectionEnum2; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** plan_id parameter */ + planId: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum2; +} + +/** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum AppsListAccountsForPlanStubbedParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum AppsListAccountsForPlanStubbedParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export interface AppsListInstallationReposForAuthenticatedUserData { + repositories: Repository[]; + repository_selection?: string; + total_count: number; +} + +export interface AppsListInstallationReposForAuthenticatedUserParams { + /** installation_id parameter */ + installationId: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type AppsListInstallationsData = Installation[]; + +export interface AppsListInstallationsForAuthenticatedUserData { + installations: Installation[]; + total_count: number; +} + +export interface AppsListInstallationsForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface AppsListInstallationsParams { + outdated?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type AppsListPlansData = MarketplaceListingPlan[]; + +export interface AppsListPlansParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type AppsListPlansStubbedData = MarketplaceListingPlan[]; + +export interface AppsListPlansStubbedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface AppsListReposAccessibleToInstallationData { + repositories: Repository[]; + /** @example "selected" */ + repository_selection?: string; + total_count: number; +} + +export interface AppsListReposAccessibleToInstallationParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type AppsListSubscriptionsForAuthenticatedUserData = UserMarketplacePurchase[]; + +export interface AppsListSubscriptionsForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type AppsListSubscriptionsForAuthenticatedUserStubbedData = UserMarketplacePurchase[]; + +export interface AppsListSubscriptionsForAuthenticatedUserStubbedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type AppsRemoveRepoFromInstallationData = any; + +export type AppsResetAuthorizationData = Authorization; + +export type AppsResetTokenData = Authorization; + +export interface AppsResetTokenPayload { + /** The access_token of the OAuth application. */ + access_token: string; +} + +export type AppsRevokeAuthorizationForApplicationData = any; + +export type AppsRevokeGrantForApplicationData = any; + +export type AppsRevokeInstallationAccessTokenData = any; + +export type AppsScopeTokenData = Authorization; + +export interface AppsScopeTokenPayload { + /** + * **Required.** The OAuth access token used to authenticate to the GitHub API. + * @example "e72e16c7e42f292c6912e7710c838347ae178b4a" + */ + access_token?: string; + /** The permissions granted to the user-to-server access token. */ + permissions?: AppPermissions; + /** The list of repository IDs to scope the user-to-server access token to. \`repositories\` may not be specified if \`repository_ids\` is specified. */ + repositories?: string[]; + /** + * The list of repository names to scope the user-to-server access token to. \`repository_ids\` may not be specified if \`repositories\` is specified. + * @example [1] + */ + repository_ids?: number[]; + /** + * The name of the user or organization to scope the user-to-server access token to. **Required** unless \`target_id\` is specified. + * @example "octocat" + */ + target?: string; + /** + * The ID of the user or organization to scope the user-to-server access token to. **Required** unless \`target\` is specified. + * @example 1 + */ + target_id?: number; +} + +export type AppsSuspendInstallationData = any; + +export type AppsUnsuspendInstallationData = any; + +export type AppsUpdateWebhookConfigForAppData = WebhookConfig; + +/** @example {"content_type":"json","insecure_ssl":"0","secret":"********","url":"https://example.com/webhook"} */ +export interface AppsUpdateWebhookConfigForAppPayload { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; +} + +/** + * Filters the project cards that are returned by the card's state. Can be one of \`all\`,\`archived\`, or \`not_archived\`. + * @default "not_archived" + */ +export enum ArchivedStateEnum { + All = "all", + Archived = "archived", + NotArchived = "not_archived", +} + +/** + * Artifact + * An artifact + */ +export interface Artifact { + /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5/zip" */ + archive_download_url: string; + /** @format date-time */ + created_at: string | null; + /** Whether or not the artifact has expired. */ + expired: boolean; + /** @format date-time */ + expires_at: string; + /** @example 5 */ + id: number; + /** + * The name of the artifact. + * @example "AdventureWorks.Framework" + */ + name: string; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + /** + * The size in bytes of the artifact. + * @example 12345 + */ + size_in_bytes: number; + /** @format date-time */ + updated_at: string | null; + /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5" */ + url: string; +} + +export interface AuditLogEvent { + /** The time the audit log event occurred, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ + "@timestamp"?: number; + /** The name of the action that was performed, for example \`user.login\` or \`repo.create\`. */ + action?: string; + active?: boolean; + active_was?: boolean; + /** The actor who performed the action. */ + actor?: string; + /** The username of the account being blocked. */ + blocked_user?: string; + business?: string; + config?: any[]; + config_was?: any[]; + content_type?: string; + /** The time the audit log event was recorded, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ + created_at?: number; + deploy_key_fingerprint?: string; + emoji?: string; + events?: any[]; + events_were?: any[]; + explanation?: string; + fingerprint?: string; + hook_id?: number; + limited_availability?: boolean; + message?: string; + name?: string; + old_user?: string; + openssh_public_key?: string; + org?: string; + previous_visibility?: string; + read_only?: boolean; + /** The name of the repository. */ + repo?: string; + /** The name of the repository. */ + repository?: string; + repository_public?: boolean; + target_login?: string; + team?: string; + /** The type of protocol (for example, HTTP or SSH) used to transfer Git data. */ + transport_protocol?: number; + /** A human readable name for the protocol (for example, HTTP or SSH) used to transfer Git data. */ + transport_protocol_name?: string; + /** The user that was affected by the action performed (if available). */ + user?: string; + /** The repository visibility, for example \`public\` or \`private\`. */ + visibility?: string; +} + +export type AuditLogGetAuditLogData = AuditLogEvent[]; + +export interface AuditLogGetAuditLogParams { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: IncludeEnum; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: OrderEnum; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; +} + +/** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ +export enum AuditLogGetAuditLogParams1IncludeEnum { + Web = "web", + Git = "git", + All = "all", +} + +/** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ +export enum AuditLogGetAuditLogParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** + * Authentication Token + * Authentication Token + */ +export interface AuthenticationToken { + /** + * The time this token expires + * @format date-time + * @example "2016-07-11T22:14:10Z" + */ + expires_at: string; + /** @example {"issues":"read","deployments":"write"} */ + permissions?: object; + /** The repositories this token has access to */ + repositories?: Repository[]; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection?: AuthenticationTokenRepositorySelectionEnum; + /** @example "config.yaml" */ + single_file?: string | null; + /** + * The token used for authentication + * @example "v1.1f699f1069f60xxx" + */ + token: string; +} + +/** Describe whether all repositories have been selected or there's a selection involved */ +export enum AuthenticationTokenRepositorySelectionEnum { + All = "all", + Selected = "selected", +} + +/** + * author_association + * How the author is associated with the repository. + * @example "OWNER" + */ +export enum AuthorAssociation { + COLLABORATOR = "COLLABORATOR", + CONTRIBUTOR = "CONTRIBUTOR", + FIRST_TIMER = "FIRST_TIMER", + FIRST_TIME_CONTRIBUTOR = "FIRST_TIME_CONTRIBUTOR", + MANNEQUIN = "MANNEQUIN", + MEMBER = "MEMBER", + NONE = "NONE", + OWNER = "OWNER", +} + +/** + * Authorization + * The authorization for an OAuth app, GitHub App, or a Personal Access Token. + */ +export interface Authorization { + app: { + client_id: string; + name: string; + /** @format uri */ + url: string; + }; + /** @format date-time */ + created_at: string; + fingerprint: string | null; + hashed_token: string | null; + id: number; + installation?: ScopedInstallation | null; + note: string | null; + /** @format uri */ + note_url: string | null; + /** A list of scopes that this authorization is in. */ + scopes: string[] | null; + token: string; + token_last_eight: string | null; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user?: SimpleUser | null; +} + +/** + * Auto merge + * The status of auto merging a pull request. + */ +export type AutoMerge = { + /** Commit message for the merge commit. */ + commit_message: string; + /** Title for the merge commit message. */ + commit_title: string; + /** Simple User */ + enabled_by: SimpleUser; + /** The merge method to use. */ + merge_method: AutoMergeMergeMethodEnum; +} | null; + +/** The merge method to use. */ +export enum AutoMergeMergeMethodEnum { + Merge = "merge", + Squash = "squash", + Rebase = "rebase", +} + +/** Bad Request */ +export type BadRequest = BasicError; + +/** + * Base Gist + * Base Gist + */ +export interface BaseGist { + comments: number; + /** @format uri */ + comments_url: string; + /** @format uri */ + commits_url: string; + /** @format date-time */ + created_at: string; + description: string | null; + files: Record< + string, + { + filename?: string; + language?: string; + raw_url?: string; + size?: number; + type?: string; + } + >; + forks?: any[]; + /** @format uri */ + forks_url: string; + /** @format uri */ + git_pull_url: string; + /** @format uri */ + git_push_url: string; + history?: any[]; + /** @format uri */ + html_url: string; + id: string; + node_id: string; + owner?: SimpleUser | null; + public: boolean; + truncated?: boolean; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Basic Error + * Basic Error + */ +export interface BasicError { + documentation_url?: string; + message?: string; +} + +export type BillingGetGithubActionsBillingGheData = ActionsBillingUsage; + +export type BillingGetGithubActionsBillingOrgData = ActionsBillingUsage; + +export type BillingGetGithubActionsBillingUserData = ActionsBillingUsage; + +export type BillingGetGithubPackagesBillingGheData = PackagesBillingUsage; + +export type BillingGetGithubPackagesBillingOrgData = PackagesBillingUsage; + +export type BillingGetGithubPackagesBillingUserData = PackagesBillingUsage; + +export type BillingGetSharedStorageBillingGheData = CombinedBillingUsage; + +export type BillingGetSharedStorageBillingOrgData = CombinedBillingUsage; + +export type BillingGetSharedStorageBillingUserData = CombinedBillingUsage; + +/** + * Blob + * Blob + */ +export interface Blob { + content: string; + encoding: string; + highlighted_content?: string; + node_id: string; + sha: string; + size: number | null; + /** @format uri */ + url: string; +} + +/** + * Branch Protection + * Branch Protection + */ +export interface BranchProtection { + allow_deletions?: { + enabled?: boolean; + }; + allow_force_pushes?: { + enabled?: boolean; + }; + enabled: boolean; + /** Protected Branch Admin Enforced */ + enforce_admins?: ProtectedBranchAdminEnforced; + /** @example ""branch/with/protection"" */ + name?: string; + /** @example ""https://api.github.com/repos/owner-79e94e2d36b3fd06a32bb213/AAA_Public_Repo/branches/branch/with/protection/protection"" */ + protection_url?: string; + required_linear_history?: { + enabled?: boolean; + }; + /** Protected Branch Pull Request Review */ + required_pull_request_reviews?: ProtectedBranchPullRequestReview; + required_status_checks: { + contexts: string[]; + contexts_url?: string; + enforcement_level: string; + url?: string; + }; + /** Branch Restriction Policy */ + restrictions?: BranchRestrictionPolicy; + url?: string; +} + +/** + * Branch Restriction Policy + * Branch Restriction Policy + */ +export interface BranchRestrictionPolicy { + apps: { + created_at?: string; + description?: string; + events?: string[]; + external_url?: string; + html_url?: string; + id?: number; + name?: string; + node_id?: string; + owner?: { + avatar_url?: string; + description?: string; + events_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/followers"" */ + followers_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/following{/other_user}"" */ + following_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/gists{/gist_id}"" */ + gists_url?: string; + /** @example """" */ + gravatar_id?: string; + hooks_url?: string; + /** @example ""https://github.com/testorg-ea8ec76d71c3af4b"" */ + html_url?: string; + id?: number; + issues_url?: string; + login?: string; + members_url?: string; + node_id?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/orgs"" */ + organizations_url?: string; + public_members_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/received_events"" */ + received_events_url?: string; + repos_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/starred{/owner}{/repo}"" */ + starred_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/subscriptions"" */ + subscriptions_url?: string; + /** @example ""Organization"" */ + type?: string; + url?: string; + }; + permissions?: { + contents?: string; + issues?: string; + metadata?: string; + single_file?: string; + }; + slug?: string; + updated_at?: string; + }[]; + /** @format uri */ + apps_url: string; + teams: { + description?: string | null; + html_url?: string; + id?: number; + members_url?: string; + name?: string; + node_id?: string; + parent?: string | null; + permission?: string; + privacy?: string; + repositories_url?: string; + slug?: string; + url?: string; + }[]; + /** @format uri */ + teams_url: string; + /** @format uri */ + url: string; + users: { + avatar_url?: string; + events_url?: string; + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string; + html_url?: string; + id?: number; + login?: string; + node_id?: string; + organizations_url?: string; + received_events_url?: string; + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + subscriptions_url?: string; + type?: string; + url?: string; + }[]; + /** @format uri */ + users_url: string; +} + +/** + * Branch Short + * Branch Short + */ +export interface BranchShort { + commit: { + sha: string; + url: string; + }; + name: string; + protected: boolean; +} + +/** + * Branch With Protection + * Branch With Protection + */ +export interface BranchWithProtection { + _links: { + html: string; + /** @format uri */ + self: string; + }; + /** Commit */ + commit: Commit; + name: string; + /** @example ""mas*"" */ + pattern?: string; + protected: boolean; + /** Branch Protection */ + protection: BranchProtection; + /** @format uri */ + protection_url: string; + /** @example 1 */ + required_approving_review_count?: number; +} + +/** + * Check Annotation + * Check Annotation + */ +export interface CheckAnnotation { + /** @example "warning" */ + annotation_level: string | null; + blob_href: string; + /** @example 10 */ + end_column: number | null; + /** @example 2 */ + end_line: number; + /** @example "Check your spelling for 'banaas'." */ + message: string | null; + /** @example "README.md" */ + path: string; + /** @example "Do you mean 'bananas' or 'banana'?" */ + raw_details: string | null; + /** @example 5 */ + start_column: number | null; + /** @example 2 */ + start_line: number; + /** @example "Spell Checker" */ + title: string | null; +} + +/** + * CheckRun + * A check performed on the code of a given code change + */ +export interface CheckRun { + app: Integration | null; + check_suite: { + id: number; + } | null; + /** + * @format date-time + * @example "2018-05-04T01:14:52Z" + */ + completed_at: string | null; + /** @example "neutral" */ + conclusion: CheckRunConclusionEnum; + /** @example "https://example.com" */ + details_url: string | null; + /** @example "42" */ + external_id: string | null; + /** + * The SHA of the commit that is being checked. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/runs/4" */ + html_url: string | null; + /** + * The id of the check. + * @example 21 + */ + id: number; + /** + * The name of the check. + * @example "test-coverage" + */ + name: string; + /** @example "MDg6Q2hlY2tSdW40" */ + node_id: string; + output: { + annotations_count: number; + /** @format uri */ + annotations_url: string; + summary: string | null; + text: string | null; + title: string | null; + }; + pull_requests: PullRequestMinimal[]; + /** + * @format date-time + * @example "2018-05-04T01:14:52Z" + */ + started_at: string | null; + /** + * The phase of the lifecycle that the check is currently in. + * @example "queued" + */ + status: CheckRunStatusEnum; + /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ + url: string; +} + +/** @example "neutral" */ +export enum CheckRunConclusionEnum { + Success = "success", + Failure = "failure", + Neutral = "neutral", + Cancelled = "cancelled", + Skipped = "skipped", + TimedOut = "timed_out", + ActionRequired = "action_required", +} + +/** + * The phase of the lifecycle that the check is currently in. + * @example "queued" + */ +export enum CheckRunStatusEnum { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** + * CheckSuite + * A suite of checks performed on the code of a given code change + */ +export interface CheckSuite { + /** @example "d6fde92930d4715a2b49857d24b940956b26d2d3" */ + after: string | null; + app: Integration | null; + /** @example "146e867f55c26428e5f9fade55a9bbf5e95a7912" */ + before: string | null; + check_runs_url: string; + /** @example "neutral" */ + conclusion: CheckSuiteConclusionEnum; + /** @format date-time */ + created_at: string | null; + /** @example "master" */ + head_branch: string | null; + /** Simple Commit */ + head_commit: SimpleCommit; + /** + * The SHA of the head commit that is being checked. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example 5 */ + id: number; + latest_check_runs_count: number; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + pull_requests: PullRequestMinimal[] | null; + /** Minimal Repository */ + repository: MinimalRepository; + /** @example "completed" */ + status: CheckSuiteStatusEnum; + /** @format date-time */ + updated_at: string | null; + /** @example "https://api.github.com/repos/github/hello-world/check-suites/5" */ + url: string | null; +} + +/** @example "neutral" */ +export enum CheckSuiteConclusionEnum { + Success = "success", + Failure = "failure", + Neutral = "neutral", + Cancelled = "cancelled", + Skipped = "skipped", + TimedOut = "timed_out", + ActionRequired = "action_required", +} + +/** + * Check Suite Preference + * Check suite configuration preferences for a repository. + */ +export interface CheckSuitePreference { + preferences: { + auto_trigger_checks?: { + app_id: number; + setting: boolean; + }[]; + }; + /** A git repository */ + repository: Repository; +} + +/** @example "completed" */ +export enum CheckSuiteStatusEnum { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ +export enum ChecksCreateAnnotationLevelEnum { + Notice = "notice", + Warning = "warning", + Failure = "failure", +} + +/** + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. When the conclusion is \`action_required\`, additional details should be provided on the site specified by \`details_url\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. + */ +export enum ChecksCreateConclusionEnum { + Success = "success", + Failure = "failure", + Neutral = "neutral", + Cancelled = "cancelled", + Skipped = "skipped", + TimedOut = "timed_out", + ActionRequired = "action_required", +} + +export type ChecksCreateData = CheckRun; + +export type ChecksCreatePayload = ( + | { + status?: ChecksCreateStatusEnum; + [key: string]: any; + } + | { + status?: ChecksCreateStatusEnum1; + [key: string]: any; + } +) & { + /** + * Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [\`check_run.requested_action\` webhook](https://docs.github.com/webhooks/event-payloads/#check_run) to your app. Each action includes a \`label\`, \`identifier\` and \`description\`. A maximum of three actions are accepted. See the [\`actions\` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." + * @maxItems 3 + */ + actions?: { + /** + * A short explanation of what this action would do. The maximum size is 40 characters. + * @maxLength 40 + */ + description: string; + /** + * A reference for the action on the integrator's system. The maximum size is 20 characters. + * @maxLength 20 + */ + identifier: string; + /** + * The text to be displayed on a button in the web UI. The maximum size is 20 characters. + * @maxLength 20 + */ + label: string; + }[]; + /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + completed_at?: string; + /** + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. When the conclusion is \`action_required\`, additional details should be provided on the site specified by \`details_url\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. + */ + conclusion?: ChecksCreateConclusionEnum; + /** The URL of the integrator's site that has the full details of the check. If the integrator does not provide this, then the homepage of the GitHub app is used. */ + details_url?: string; + /** A reference for the run on the integrator's system. */ + external_id?: string; + /** The SHA of the commit. */ + head_sha: string; + /** The name of the check. For example, "code-coverage". */ + name: string; + /** Check runs can accept a variety of data in the \`output\` object, including a \`title\` and \`summary\` and can optionally provide descriptive details about the run. See the [\`output\` object](https://docs.github.com/rest/reference/checks#output-object) description. */ + output?: { + /** + * Adds information from your analysis to specific lines of code. Annotations are visible on GitHub in the **Checks** and **Files changed** tab of the pull request. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about how you can view annotations on GitHub, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [\`annotations\` object](https://docs.github.com/rest/reference/checks#annotations-object) description for details about how to use this parameter. + * @maxItems 50 + */ + annotations?: { + /** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ + annotation_level: ChecksCreateAnnotationLevelEnum; + /** The end column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + end_column?: number; + /** The end line of the annotation. */ + end_line: number; + /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ + message: string; + /** The path of the file to add an annotation to. For example, \`assets/css/main.css\`. */ + path: string; + /** Details about this annotation. The maximum size is 64 KB. */ + raw_details?: string; + /** The start column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + start_column?: number; + /** The start line of the annotation. */ + start_line: number; + /** The title that represents the annotation. The maximum size is 255 characters. */ + title?: string; + }[]; + /** Adds images to the output displayed in the GitHub pull request UI. See the [\`images\` object](https://docs.github.com/rest/reference/checks#images-object) description for details. */ + images?: { + /** The alternative text for the image. */ + alt: string; + /** A short image description. */ + caption?: string; + /** The full URL of the image. */ + image_url: string; + }[]; + /** + * The summary of the check run. This parameter supports Markdown. + * @maxLength 65535 + */ + summary: string; + /** + * The details of the check run. This parameter supports Markdown. + * @maxLength 65535 + */ + text?: string; + /** The title of the check run. */ + title: string; + }; + /** The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + started_at?: string; + /** + * The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. + * @default "queued" + */ + status?: ChecksCreateStatusEnum2; +}; + +export enum ChecksCreateStatusEnum { + Completed = "completed", +} + +export enum ChecksCreateStatusEnum1 { + Queued = "queued", + InProgress = "in_progress", +} + +/** + * The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. + * @default "queued" + */ +export enum ChecksCreateStatusEnum2 { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +export type ChecksCreateSuiteData = CheckSuite; + +export interface ChecksCreateSuitePayload { + /** The sha of the head commit. */ + head_sha: string; +} + +export type ChecksGetData = CheckRun; + +export type ChecksGetSuiteData = CheckSuite; + +export type ChecksListAnnotationsData = CheckAnnotation[]; + +export interface ChecksListAnnotationsParams { + /** check_run_id parameter */ + checkRunId: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface ChecksListForRefData { + check_runs: CheckRun[]; + total_count: number; +} + +export interface ChecksListForRefParams { + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: FilterEnum6; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** ref+ parameter */ + ref: string; + repo: string; + /** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: StatusEnum3; +} + +/** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ +export enum ChecksListForRefParams1FilterEnum { + Latest = "latest", + All = "all", +} + +/** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ +export enum ChecksListForRefParams1StatusEnum { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +export interface ChecksListForSuiteData { + check_runs: CheckRun[]; + total_count: number; +} + +export interface ChecksListForSuiteParams { + /** check_suite_id parameter */ + checkSuiteId: number; + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: FilterEnum5; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: StatusEnum2; +} + +/** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ +export enum ChecksListForSuiteParams1FilterEnum { + Latest = "latest", + All = "all", +} + +/** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ +export enum ChecksListForSuiteParams1StatusEnum { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +export interface ChecksListSuitesForRefData { + check_suites: CheckSuite[]; + total_count: number; +} + +export interface ChecksListSuitesForRefParams { + /** + * Filters check suites by GitHub App \`id\`. + * @example 1 + */ + app_id?: number; + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** ref+ parameter */ + ref: string; + repo: string; +} + +export type ChecksRerequestSuiteData = any; + +export type ChecksSetSuitesPreferencesData = CheckSuitePreference; + +export interface ChecksSetSuitesPreferencesPayload { + /** Enables or disables automatic creation of CheckSuite events upon pushes to the repository. Enabled by default. See the [\`auto_trigger_checks\` object](https://docs.github.com/rest/reference/checks#auto_trigger_checks-object) description for details. */ + auto_trigger_checks?: { + /** The \`id\` of the GitHub App. */ + app_id: number; + /** + * Set to \`true\` to enable automatic creation of CheckSuite events upon pushes to the repository, or \`false\` to disable them. + * @default true + */ + setting: boolean; + }[]; +} + +/** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ +export enum ChecksUpdateAnnotationLevelEnum { + Notice = "notice", + Warning = "warning", + Failure = "failure", +} + +/** + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. + */ +export enum ChecksUpdateConclusionEnum { + Success = "success", + Failure = "failure", + Neutral = "neutral", + Cancelled = "cancelled", + Skipped = "skipped", + TimedOut = "timed_out", + ActionRequired = "action_required", +} + +export type ChecksUpdateData = CheckRun; + +export type ChecksUpdatePayload = ( + | { + status?: ChecksUpdateStatusEnum; + [key: string]: any; + } + | { + status?: ChecksUpdateStatusEnum1; + [key: string]: any; + } +) & { + /** + * Possible further actions the integrator can perform, which a user may trigger. Each action includes a \`label\`, \`identifier\` and \`description\`. A maximum of three actions are accepted. See the [\`actions\` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." + * @maxItems 3 + */ + actions?: { + /** + * A short explanation of what this action would do. The maximum size is 40 characters. + * @maxLength 40 + */ + description: string; + /** + * A reference for the action on the integrator's system. The maximum size is 20 characters. + * @maxLength 20 + */ + identifier: string; + /** + * The text to be displayed on a button in the web UI. The maximum size is 20 characters. + * @maxLength 20 + */ + label: string; + }[]; + /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + completed_at?: string; + /** + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. + */ + conclusion?: ChecksUpdateConclusionEnum; + /** The URL of the integrator's site that has the full details of the check. */ + details_url?: string; + /** A reference for the run on the integrator's system. */ + external_id?: string; + /** The name of the check. For example, "code-coverage". */ + name?: string; + /** Check runs can accept a variety of data in the \`output\` object, including a \`title\` and \`summary\` and can optionally provide descriptive details about the run. See the [\`output\` object](https://docs.github.com/rest/reference/checks#output-object-1) description. */ + output?: { + /** + * Adds information from your analysis to specific lines of code. Annotations are visible in GitHub's pull request UI. Annotations are visible in GitHub's pull request UI. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about annotations in the UI, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [\`annotations\` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. + * @maxItems 50 + */ + annotations?: { + /** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ + annotation_level: ChecksUpdateAnnotationLevelEnum; + /** The end column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + end_column?: number; + /** The end line of the annotation. */ + end_line: number; + /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ + message: string; + /** The path of the file to add an annotation to. For example, \`assets/css/main.css\`. */ + path: string; + /** Details about this annotation. The maximum size is 64 KB. */ + raw_details?: string; + /** The start column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + start_column?: number; + /** The start line of the annotation. */ + start_line: number; + /** The title that represents the annotation. The maximum size is 255 characters. */ + title?: string; + }[]; + /** Adds images to the output displayed in the GitHub pull request UI. See the [\`images\` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. */ + images?: { + /** The alternative text for the image. */ + alt: string; + /** A short image description. */ + caption?: string; + /** The full URL of the image. */ + image_url: string; + }[]; + /** + * Can contain Markdown. + * @maxLength 65535 + */ + summary: string; + /** + * Can contain Markdown. + * @maxLength 65535 + */ + text?: string; + /** **Required**. */ + title?: string; + }; + /** This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + started_at?: string; + /** The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: ChecksUpdateStatusEnum2; +}; + +export enum ChecksUpdateStatusEnum { + Completed = "completed", +} + +export enum ChecksUpdateStatusEnum1 { + Queued = "queued", + InProgress = "in_progress", +} + +/** The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ +export enum ChecksUpdateStatusEnum2 { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** + * Clone Traffic + * Clone Traffic + */ +export interface CloneTraffic { + clones: Traffic[]; + /** @example 173 */ + count: number; + /** @example 128 */ + uniques: number; +} + +/** + * Code Frequency Stat + * Code Frequency Stat + */ +export type CodeFrequencyStat = number[]; + +/** + * Code Of Conduct + * Code Of Conduct + */ +export interface CodeOfConduct { + /** + * @example "# Contributor Covenant Code of Conduct + * + * ## Our Pledge + * + * In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + * + * ## Our Standards + * + * Examples of behavior that contributes to creating a positive environment include: + * + * * Using welcoming and inclusive language + * * Being respectful of differing viewpoints and experiences + * * Gracefully accepting constructive criticism + * * Focusing on what is best for the community + * * Showing empathy towards other community members + * + * Examples of unacceptable behavior by participants include: + * + * * The use of sexualized language or imagery and unwelcome sexual attention or advances + * * Trolling, insulting/derogatory comments, and personal or political attacks + * * Public or private harassment + * * Publishing others' private information, such as a physical or electronic address, without explicit permission + * * Other conduct which could reasonably be considered inappropriate in a professional setting + * + * ## Our Responsibilities + * + * Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response + * to any instances of unacceptable behavior. + * + * Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + * + * ## Scope + * + * This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, + * posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + * + * ## Enforcement + * + * Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + * + * Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + * + * ## Attribution + * + * This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + * + * [homepage]: http://contributor-covenant.org + * [version]: http://contributor-covenant.org/version/1/4/ + * " + */ + body?: string; + /** @format uri */ + html_url: string | null; + /** @example "contributor_covenant" */ + key: string; + /** @example "Contributor Covenant" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/codes_of_conduct/contributor_covenant" + */ + url: string; +} + +/** + * Code Of Conduct Simple + * Code of Conduct Simple + */ +export interface CodeOfConductSimple { + /** @format uri */ + html_url: string | null; + /** @example "citizen_code_of_conduct" */ + key: string; + /** @example "Citizen Code of Conduct" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/codes_of_conduct/citizen_code_of_conduct" + */ + url: string; +} + +export interface CodeScanningAlertCodeScanningAlert { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: AlertCreatedAt; + /** The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + dismissed_at: CodeScanningAlertDismissedAt; + /** Simple User */ + dismissed_by: SimpleUser; + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason: CodeScanningAlertDismissedReason; + /** The GitHub URL of the alert resource. */ + html_url: AlertHtmlUrl; + instances: CodeScanningAlertInstances; + /** The security alert number. */ + number: AlertNumber; + rule: CodeScanningAlertRule; + /** State of a code scanning alert. */ + state: CodeScanningAlertState; + tool: CodeScanningAnalysisTool; + /** The REST API URL of the alert resource. */ + url: AlertUrl; +} + +export interface CodeScanningAlertCodeScanningAlertItems { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: AlertCreatedAt; + /** The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + dismissed_at: CodeScanningAlertDismissedAt; + /** Simple User */ + dismissed_by: SimpleUser; + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason: CodeScanningAlertDismissedReason; + /** The GitHub URL of the alert resource. */ + html_url: AlertHtmlUrl; + /** The security alert number. */ + number: AlertNumber; + rule: CodeScanningAlertRule; + /** State of a code scanning alert. */ + state: CodeScanningAlertState; + tool: CodeScanningAnalysisTool; + /** The REST API URL of the alert resource. */ + url: AlertUrl; +} + +/** + * The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type CodeScanningAlertDismissedAt = string | null; + +/** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ +export type CodeScanningAlertDismissedReason = CodeScanningAlertDismissedReasonEnum | null; + +export enum CodeScanningAlertDismissedReasonEnum { + FalsePositive = "false positive", + WontFix = "won't fix", + UsedInTests = "used in tests", +} + +/** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ +export type CodeScanningAlertEnvironment = string; + +export type CodeScanningAlertInstances = { + /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ + analysis_key?: CodeScanningAnalysisAnalysisKey; + /** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ + environment?: CodeScanningAlertEnvironment; + matrix_vars?: string | null; + /** The full Git reference, formatted as \`refs/heads/\`. */ + ref?: CodeScanningAlertRef; + /** State of a code scanning alert. */ + state?: CodeScanningAlertState; +}[]; + +/** The full Git reference, formatted as \`refs/heads/\`. */ +export type CodeScanningAlertRef = string; + +export interface CodeScanningAlertRule { + /** A short description of the rule used to detect the alert. */ + description?: string; + /** A unique identifier for the rule used to detect the alert. */ + id?: string | null; + /** The severity of the alert. */ + severity?: CodeScanningAlertRuleSeverityEnum; +} + +/** The severity of the alert. */ +export enum CodeScanningAlertRuleSeverityEnum { + None = "none", + Note = "note", + Warning = "warning", + Error = "error", +} + +/** Sets the state of the code scanning alert. Can be one of \`open\` or \`dismissed\`. You must provide \`dismissed_reason\` when you set the state to \`dismissed\`. */ +export enum CodeScanningAlertSetState { + Open = "open", + Dismissed = "dismissed", +} + +/** State of a code scanning alert. */ +export enum CodeScanningAlertState { + Open = "open", + Dismissed = "dismissed", + Fixed = "fixed", +} + +/** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ +export type CodeScanningAnalysisAnalysisKey = string; + +export interface CodeScanningAnalysisCodeScanningAnalysis { + /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ + analysis_key: CodeScanningAnalysisAnalysisKey; + /** The commit SHA of the code scanning analysis file. */ + commit_sha: CodeScanningAnalysisCommitSha; + /** The time that the analysis was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: CodeScanningAnalysisCreatedAt; + /** Identifies the variable values associated with the environment in which this analysis was performed. */ + environment: CodeScanningAnalysisEnvironment; + /** @example "error reading field xyz" */ + error: string; + /** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ + ref: CodeScanningAnalysisRef; + /** The name of the tool used to generate the code scanning analysis alert. */ + tool_name: CodeScanningAnalysisToolName; +} + +/** + * The commit SHA of the code scanning analysis file. + * @minLength 40 + * @maxLength 40 + * @pattern ^[0-9a-fA-F]+$ + */ +export type CodeScanningAnalysisCommitSha = string; + +/** + * The time that the analysis was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type CodeScanningAnalysisCreatedAt = string; + +/** Identifies the variable values associated with the environment in which this analysis was performed. */ +export type CodeScanningAnalysisEnvironment = string; + +/** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ +export type CodeScanningAnalysisRef = string; + +/** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [\`gzip\`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ +export type CodeScanningAnalysisSarifFile = string; + +export interface CodeScanningAnalysisTool { + /** The name of the tool used to generate the code scanning analysis alert. */ + name?: CodeScanningAnalysisToolName; + /** The version of the tool used to detect the alert. */ + version?: string | null; +} + +/** The name of the tool used to generate the code scanning analysis alert. */ +export type CodeScanningAnalysisToolName = string; + +export type CodeScanningGetAlertData = CodeScanningAlertCodeScanningAlert; + +export type CodeScanningListAlertsForRepoData = CodeScanningAlertCodeScanningAlertItems[]; + +export interface CodeScanningListAlertsForRepoParams { + owner: string; + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAlertRef; + repo: string; + /** Set to \`open\`, \`fixed\`, or \`dismissed\` to list code scanning alerts in a specific state. */ + state?: CodeScanningAlertState; +} + +export type CodeScanningListRecentAnalysesData = CodeScanningAnalysisCodeScanningAnalysis[]; + +export interface CodeScanningListRecentAnalysesParams { + owner: string; + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAnalysisRef; + repo: string; + /** Set a single code scanning tool name to filter alerts by tool. */ + tool_name?: CodeScanningAnalysisToolName; +} + +export type CodeScanningUpdateAlertData = CodeScanningAlertCodeScanningAlert; + +export interface CodeScanningUpdateAlertPayload { + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason?: CodeScanningAlertDismissedReason; + /** Sets the state of the code scanning alert. Can be one of \`open\` or \`dismissed\`. You must provide \`dismissed_reason\` when you set the state to \`dismissed\`. */ + state: CodeScanningAlertSetState; +} + +export type CodeScanningUploadSarifData = any; + +export interface CodeScanningUploadSarifPayload { + /** + * The base directory used in the analysis, as it appears in the SARIF file. + * This property is used to convert file paths from absolute to relative, so that alerts can be mapped to their correct location in the repository. + * @format uri + * @example "file:///github/workspace/" + */ + checkout_uri?: string; + /** The commit SHA of the code scanning analysis file. */ + commit_sha: CodeScanningAnalysisCommitSha; + /** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ + ref: CodeScanningAnalysisRef; + /** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [\`gzip\`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ + sarif: CodeScanningAnalysisSarifFile; + /** + * The time that the analysis run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date + */ + started_at?: string; + /** The name of the tool used to generate the code scanning analysis alert. */ + tool_name: CodeScanningAnalysisToolName; +} + +/** + * Code Search Result Item + * Code Search Result Item + */ +export interface CodeSearchResultItem { + file_size?: number; + /** @format uri */ + git_url: string; + /** @format uri */ + html_url: string; + language?: string | null; + /** @format date-time */ + last_modified_at?: string; + /** @example ["73..77","77..78"] */ + line_numbers?: string[]; + name: string; + path: string; + /** Minimal Repository */ + repository: MinimalRepository; + score: number; + sha: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +export type CodesOfConductGetAllCodesOfConductData = CodeOfConduct[]; + +export type CodesOfConductGetConductCodeData = CodeOfConduct; + +export type CodesOfConductGetForRepoData = CodeOfConduct; + +/** + * Collaborator + * Collaborator + */ +export interface Collaborator { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example "octocat" */ + login: string; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @example "User" */ + type: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +} + +export interface CombinedBillingUsage { + /** Numbers of days left in billing cycle. */ + days_left_in_billing_cycle: number; + /** Estimated storage space (GB) used in billing cycle. */ + estimated_paid_storage_for_month: number; + /** Estimated sum of free and paid storage space (GB) used in billing cycle. */ + estimated_storage_for_month: number; +} + +/** + * Combined Commit Status + * Combined Commit Status + */ +export interface CombinedCommitStatus { + /** @format uri */ + commit_url: string; + /** Minimal Repository */ + repository: MinimalRepository; + sha: string; + state: string; + statuses: SimpleCommitStatus[]; + total_count: number; + /** @format uri */ + url: string; +} + +/** + * Commit + * Commit + */ +export interface Commit { + author: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e/comments" + */ + comments_url: string; + commit: { + author: GitUser | null; + /** @example 0 */ + comment_count: number; + committer: GitUser | null; + /** @example "Fix all the bugs" */ + message: string; + tree: { + /** @example "827efc6d56897b048c772eb4087f854f46256132" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/tree/827efc6d56897b048c772eb4087f854f46256132" + */ + url: string; + }; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + url: string; + verification?: Verification; + }; + committer: SimpleUser | null; + files?: { + additions?: number; + blob_url?: string; + changes?: number; + /** @example ""https://api.github.com/repos/owner-3d68404b07d25daeb2d4a6bf/AAA_Public_Repo/contents/geometry.js?ref=c3956841a7cb7e8ba4a6fd923568d86958f01573"" */ + contents_url?: string; + deletions?: number; + filename?: string; + patch?: string; + /** @example ""subdir/before_name.txt"" */ + previous_filename?: string; + raw_url?: string; + /** @example ""1e8e60ce9733d5283f7836fa602b6365a66b2567"" */ + sha?: string; + status?: string; + }[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + html_url: string; + /** @example "MDY6Q29tbWl0NmRjYjA5YjViNTc4NzVmMzM0ZjYxYWViZWQ2OTVlMmU0MTkzZGI1ZQ==" */ + node_id: string; + parents: { + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd" + */ + html_url?: string; + /** @example "7638417db6d59f3c431d3e1f261cc637155684cd" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/7638417db6d59f3c431d3e1f261cc637155684cd" + */ + url: string; + }[]; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + sha: string; + stats?: { + additions?: number; + deletions?: number; + total?: number; + }; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + url: string; +} + +/** + * Commit Activity + * Commit Activity + */ +export interface CommitActivity { + /** @example [0,3,26,20,39,1,0] */ + days: number[]; + /** @example 89 */ + total: number; + /** @example 1336280400 */ + week: number; +} + +/** + * Commit Comment + * Commit Comment + */ +export interface CommitComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + body: string; + commit_id: string; + /** @format date-time */ + created_at: string; + /** @format uri */ + html_url: string; + id: number; + line: number | null; + node_id: string; + path: string | null; + position: number | null; + reactions?: ReactionRollup; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Commit Comparison + * Commit Comparison + */ +export interface CommitComparison { + /** @example 4 */ + ahead_by: number; + /** Commit */ + base_commit: Commit; + /** @example 5 */ + behind_by: number; + commits: Commit[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic.diff" + */ + diff_url: string; + files: DiffEntry[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic" + */ + html_url: string; + /** Commit */ + merge_base_commit: Commit; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic.patch" + */ + patch_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/octocat:bbcd538c8e72b8c175046e27cc8f907076331401...octocat:0328041d1152db8ae77652d1618a02e57f745f17" + */ + permalink_url: string; + /** @example "ahead" */ + status: CommitComparisonStatusEnum; + /** @example 6 */ + total_commits: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/compare/master...topic" + */ + url: string; +} + +/** @example "ahead" */ +export enum CommitComparisonStatusEnum { + Diverged = "diverged", + Ahead = "ahead", + Behind = "behind", + Identical = "identical", +} + +/** + * Commit Search Result Item + * Commit Search Result Item + */ +export interface CommitSearchResultItem { + author: SimpleUser | null; + /** @format uri */ + comments_url: string; + commit: { + author: { + /** @format date-time */ + date: string; + email: string; + name: string; + }; + comment_count: number; + committer: GitUser | null; + message: string; + tree: { + sha: string; + /** @format uri */ + url: string; + }; + /** @format uri */ + url: string; + verification?: Verification; + }; + committer: GitUser | null; + /** @format uri */ + html_url: string; + node_id: string; + parents: { + html_url?: string; + sha?: string; + url?: string; + }[]; + /** Minimal Repository */ + repository: MinimalRepository; + score: number; + sha: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +/** Community Health File */ +export interface CommunityHealthFile { + /** @format uri */ + html_url: string; + /** @format uri */ + url: string; +} + +/** + * Community Profile + * Community Profile + */ +export interface CommunityProfile { + /** @example true */ + content_reports_enabled?: boolean; + /** @example "My first repository on GitHub!" */ + description: string | null; + /** @example "example.com" */ + documentation: string | null; + files: { + code_of_conduct: CodeOfConductSimple | null; + contributing: CommunityHealthFile | null; + issue_template: CommunityHealthFile | null; + license: LicenseSimple | null; + pull_request_template: CommunityHealthFile | null; + readme: CommunityHealthFile | null; + }; + /** @example 100 */ + health_percentage: number; + /** + * @format date-time + * @example "2017-02-28T19:09:29Z" + */ + updated_at: string | null; +} + +/** Conflict */ +export type Conflict = BasicError; + +/** + * Content Directory + * A list of directory items + */ +export type ContentDirectory = { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content?: string; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +}[]; + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ +export enum ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ +export enum ContentEnum1 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ +export enum ContentEnum2 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ +export enum ContentEnum3 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ +export enum ContentEnum4 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ +export enum ContentEnum5 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ +export enum ContentEnum6 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ +export enum ContentEnum7 { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** + * Content File + * Content File + */ +export interface ContentFile { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content: string; + /** @format uri */ + download_url: string | null; + encoding: string; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + /** @example ""git://example.com/defunkt/dotjs.git"" */ + submodule_git_url?: string; + /** @example ""actual/actual.md"" */ + target?: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * ContentReferenceAttachment + * Content Reference attachments allow you to provide context around URLs posted in comments + */ +export interface ContentReferenceAttachment { + /** + * The body of the attachment + * @maxLength 262144 + * @example "Body of the attachment" + */ + body: string; + /** + * The ID of the attachment + * @example 21 + */ + id: number; + /** + * The node_id of the content attachment + * @example "MDE3OkNvbnRlbnRBdHRhY2htZW50MjE=" + */ + node_id?: string; + /** + * The title of the attachment + * @maxLength 1024 + * @example "Title of the attachment" + */ + title: string; +} + +/** + * Symlink Content + * An object describing a symlink + */ +export interface ContentSubmodule { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + /** @format uri */ + submodule_git_url: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * Symlink Content + * An object describing a symlink + */ +export interface ContentSymlink { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + target: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * Content Traffic + * Content Traffic + */ +export interface ContentTraffic { + /** @example 3542 */ + count: number; + /** @example "/github/hubot" */ + path: string; + /** @example "github/hubot: A customizable life embetterment robot." */ + title: string; + /** @example 2225 */ + uniques: number; +} + +/** + * Content Tree + * Content Tree + */ +export interface ContentTree { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + entries?: { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content?: string; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; + }[]; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +} + +/** + * Contributor + * Contributor + */ +export interface Contributor { + /** @format uri */ + avatar_url?: string; + contributions: number; + email?: string; + events_url?: string; + /** @format uri */ + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string | null; + /** @format uri */ + html_url?: string; + id?: number; + login?: string; + name?: string; + node_id?: string; + /** @format uri */ + organizations_url?: string; + /** @format uri */ + received_events_url?: string; + /** @format uri */ + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + /** @format uri */ + subscriptions_url?: string; + type: string; + /** @format uri */ + url?: string; +} + +/** + * Contributor Activity + * Contributor Activity + */ +export interface ContributorActivity { + author: SimpleUser | null; + /** @example 135 */ + total: number; + /** @example [{"w":"1367712000","a":6898,"d":77,"c":10}] */ + weeks: { + a?: number; + c?: number; + d?: number; + w?: string; + }[]; +} + +/** + * Credential Authorization + * Credential Authorization + */ +export interface CredentialAuthorization { + /** @example 12345678 */ + authorized_credential_id?: number | null; + /** + * The note given to the token. This will only be present when the credential is a token. + * @example "my token" + */ + authorized_credential_note?: string | null; + /** + * The title given to the ssh key. This will only be present when the credential is an ssh key. + * @example "my ssh key" + */ + authorized_credential_title?: string | null; + /** + * Date when the credential was last accessed. May be null if it was never accessed + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + credential_accessed_at?: string | null; + /** + * Date when the credential was authorized for use. + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + credential_authorized_at: string; + /** + * Unique identifier for the credential. + * @example 1 + */ + credential_id: number; + /** + * Human-readable description of the credential type. + * @example "SSH Key" + */ + credential_type: string; + /** + * Unique string to distinguish the credential. Only included in responses with credential_type of SSH Key. + * @example "jklmnop12345678" + */ + fingerprint?: string; + /** + * User login that owns the underlying credential. + * @example "monalisa" + */ + login: string; + /** + * List of oauth scopes the token has been granted. + * @example ["user","repo"] + */ + scopes?: string[]; + /** + * Last eight characters of the credential. Only included in responses with credential_type of personal access token. + * @example "12345678" + */ + token_last_eight?: string; +} + +/** + * Deploy Key + * An SSH key granting access to a single repository. + */ +export interface DeployKey { + created_at: string; + id: number; + key: string; + read_only: boolean; + title: string; + url: string; + verified: boolean; +} + +/** + * Deployment + * A request for a specific ref(branch,sha,tag) to be deployed + */ +export interface Deployment { + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + created_at: string; + creator: SimpleUser | null; + /** @example "Deploy request from hubot" */ + description: string | null; + /** + * Name for the target deployment environment. + * @example "production" + */ + environment: string; + /** + * Unique identifier of the deployment + * @example 42 + */ + id: number; + /** @example "MDEwOkRlcGxveW1lbnQx" */ + node_id: string; + /** @example "staging" */ + original_environment?: string; + payload: object; + performed_via_github_app?: Integration | null; + /** + * Specifies if the given environment is one that end-users directly interact with. Default: false. + * @example true + */ + production_environment?: boolean; + /** + * The ref to deploy. This can be a branch, tag, or sha. + * @example "topic-branch" + */ + ref: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** @example "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/1/statuses" + */ + statuses_url: string; + /** + * Parameter to specify a task to execute + * @example "deploy" + */ + task: string; + /** + * Specifies if the given environment is will no longer exist at some point in the future. Default: false. + * @example true + */ + transient_environment?: boolean; + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/1" + */ + url: string; +} + +/** + * Deployment Status + * The status of a deployment. + */ +export interface DeploymentStatus { + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/42" + */ + deployment_url: string; + /** + * A short description of the status. + * @maxLength 140 + * @default "" + * @example "Deployment finished successfully." + */ + description: string; + /** + * The environment of the deployment that the status is for. + * @default "" + * @example "production" + */ + environment?: string; + /** + * The URL for accessing your environment. + * @format uri + * @default "" + * @example "https://staging.example.com/" + */ + environment_url?: string; + /** @example 1 */ + id: number; + /** + * The URL to associate with this status. + * @format uri + * @default "" + * @example "https://example.com/deployment/42/output" + */ + log_url?: string; + /** @example "MDE2OkRlcGxveW1lbnRTdGF0dXMx" */ + node_id: string; + performed_via_github_app?: Integration | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** + * The state of the status. + * @example "success" + */ + state: DeploymentStatusStateEnum; + /** + * Deprecated: the URL to associate with this status. + * @format uri + * @default "" + * @example "https://example.com/deployment/42/output" + */ + target_url: string; + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/42/statuses/1" + */ + url: string; +} + +/** + * The state of the status. + * @example "success" + */ +export enum DeploymentStatusStateEnum { + Error = "error", + Failure = "failure", + Inactive = "inactive", + Pending = "pending", + Success = "success", + Queued = "queued", + InProgress = "in_progress", +} + +/** + * Diff Entry + * Diff Entry + */ +export interface DiffEntry { + /** @example 103 */ + additions: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" + */ + blob_url: string; + /** @example 124 */ + changes: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + contents_url: string; + /** @example 21 */ + deletions: number; + /** @example "file1.txt" */ + filename: string; + /** @example "@@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test" */ + patch?: string; + /** @example "file.txt" */ + previous_filename?: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" + */ + raw_url: string; + /** @example "bbcd538c8e72b8c175046e27cc8f907076331401" */ + sha: string; + /** @example "added" */ + status: string; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum DirectionEnum1 { + Asc = "asc", + Desc = "desc", +} + +/** The direction of the sort. Can be either \`asc\` or \`desc\`. Default: \`desc\` when sort is \`created\` or sort is not specified, otherwise \`asc\`. */ +export enum DirectionEnum10 { + Asc = "asc", + Desc = "desc", +} + +/** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ +export enum DirectionEnum11 { + Asc = "asc", + Desc = "desc", +} + +/** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ +export enum DirectionEnum12 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum13 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum14 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum15 { + Asc = "asc", + Desc = "desc", +} + +/** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ +export enum DirectionEnum16 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum17 { + Asc = "asc", + Desc = "desc", +} + +/** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ +export enum DirectionEnum18 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum19 { + Asc = "asc", + Desc = "desc", +} + +/** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum DirectionEnum2 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum3 { + Asc = "asc", + Desc = "desc", +} + +/** Can be one of \`asc\` or \`desc\`. Default: when using \`full_name\`: \`asc\`, otherwise \`desc\` */ +export enum DirectionEnum4 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum5 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum6 { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum DirectionEnum7 { + Asc = "asc", + Desc = "desc", +} + +/** Either \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum DirectionEnum8 { + Asc = "asc", + Desc = "desc", +} + +/** + * The direction of the sort. Either \`asc\` or \`desc\`. + * @default "asc" + */ +export enum DirectionEnum9 { + Asc = "asc", + Desc = "desc", +} + +/** + * Email + * Email + */ +export interface Email { + /** + * @format email + * @example "octocat@github.com" + */ + email: string; + /** @example true */ + primary: boolean; + /** @example true */ + verified: boolean; + /** @example "public" */ + visibility: string | null; +} + +export type EmojisGetData = Record; + +/** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ +export enum EnabledOrganizations { + All = "all", + None = "none", + Selected = "selected", +} + +/** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ +export enum EnabledRepositories { + All = "all", + None = "none", + Selected = "selected", +} + +/** + * Enterprise + * An enterprise account + */ +export interface Enterprise { + /** @format uri */ + avatar_url: string; + /** + * @format date-time + * @example "2019-01-26T19:01:12Z" + */ + created_at: string | null; + /** A short description of the enterprise. */ + description?: string | null; + /** + * @format uri + * @example "https://github.com/enterprises/octo-business" + */ + html_url: string; + /** + * Unique identifier of the enterprise + * @example 42 + */ + id: number; + /** + * The name of the enterprise. + * @example "Octo Business" + */ + name: string; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** + * The slug url identifier for the enterprise. + * @example "octo-business" + */ + slug: string; + /** + * @format date-time + * @example "2019-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * The enterprise's website URL. + * @format uri + */ + website_url?: string | null; +} + +export type EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterpriseData = any; + +export type EnterpriseAdminAddSelfHostedRunnerToGroupForEnterpriseData = any; + +export type EnterpriseAdminCreateRegistrationTokenForEnterpriseData = AuthenticationToken; + +export type EnterpriseAdminCreateRemoveTokenForEnterpriseData = AuthenticationToken; + +export type EnterpriseAdminCreateSelfHostedRunnerGroupForEnterpriseData = RunnerGroupsEnterprise; + +export interface EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprisePayload { + /** Name of the runner group. */ + name: string; + /** List of runner IDs to add to the runner group. */ + runners?: number[]; + /** List of organization IDs that can access the runner group. */ + selected_organization_ids?: number[]; + /** Visibility of a runner group. You can select all organizations or select individual organization. Can be one of: \`all\` or \`selected\` */ + visibility?: EnterpriseAdminCreateSelfHostedRunnerGroupForEnterpriseVisibilityEnum; +} + +/** Visibility of a runner group. You can select all organizations or select individual organization. Can be one of: \`all\` or \`selected\` */ +export enum EnterpriseAdminCreateSelfHostedRunnerGroupForEnterpriseVisibilityEnum { + Selected = "selected", + All = "all", +} + +export type EnterpriseAdminDeleteScimGroupFromEnterpriseData = any; + +export type EnterpriseAdminDeleteSelfHostedRunnerFromEnterpriseData = any; + +export type EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterpriseData = any; + +export type EnterpriseAdminDeleteUserFromEnterpriseData = any; + +export type EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterpriseData = any; + +export type EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterpriseData = any; + +export type EnterpriseAdminGetAllowedActionsEnterpriseData = SelectedActions; + +export type EnterpriseAdminGetGithubActionsPermissionsEnterpriseData = ActionsEnterprisePermissions; + +export type EnterpriseAdminGetProvisioningInformationForEnterpriseGroupData = ScimEnterpriseGroup; + +export type EnterpriseAdminGetProvisioningInformationForEnterpriseUserData = ScimEnterpriseUser; + +export type EnterpriseAdminGetSelfHostedRunnerForEnterpriseData = Runner; + +export type EnterpriseAdminGetSelfHostedRunnerGroupForEnterpriseData = RunnerGroupsEnterprise; + +export interface EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterpriseData { + organizations: OrganizationSimple[]; + total_count: number; +} + +export interface EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterpriseParams { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; +} + +export type EnterpriseAdminListProvisionedGroupsEnterpriseData = ScimGroupListEnterprise; + +export interface EnterpriseAdminListProvisionedGroupsEnterpriseParams { + /** Used for pagination: the number of results to return. */ + count?: number; + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; +} + +export type EnterpriseAdminListProvisionedIdentitiesEnterpriseData = ScimUserListEnterprise; + +export interface EnterpriseAdminListProvisionedIdentitiesEnterpriseParams { + /** Used for pagination: the number of results to return. */ + count?: number; + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; +} + +export type EnterpriseAdminListRunnerApplicationsForEnterpriseData = RunnerApplication[]; + +export interface EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterpriseData { + organizations: OrganizationSimple[]; + total_count: number; +} + +export interface EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterpriseParams { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface EnterpriseAdminListSelfHostedRunnerGroupsForEnterpriseData { + runner_groups: RunnerGroupsEnterprise[]; + total_count: number; +} + +export interface EnterpriseAdminListSelfHostedRunnerGroupsForEnterpriseParams { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface EnterpriseAdminListSelfHostedRunnersForEnterpriseData { + runners?: Runner[]; + total_count?: number; +} + +export interface EnterpriseAdminListSelfHostedRunnersForEnterpriseParams { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface EnterpriseAdminListSelfHostedRunnersInGroupForEnterpriseData { + runners: Runner[]; + total_count: number; +} + +export interface EnterpriseAdminListSelfHostedRunnersInGroupForEnterpriseParams { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; +} + +export type EnterpriseAdminProvisionAndInviteEnterpriseGroupData = ScimEnterpriseGroup; + +export interface EnterpriseAdminProvisionAndInviteEnterpriseGroupPayload { + /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ + displayName: string; + members?: { + /** The SCIM user ID for a user. */ + value: string; + }[]; + /** The SCIM schema URIs. */ + schemas: string[]; +} + +export type EnterpriseAdminProvisionAndInviteEnterpriseUserData = ScimEnterpriseUser; + +export interface EnterpriseAdminProvisionAndInviteEnterpriseUserPayload { + /** List of user emails. */ + emails: { + /** Whether this email address is the primary address. */ + primary: boolean; + /** The type of email address. */ + type: string; + /** The email address. */ + value: string; + }[]; + /** List of SCIM group IDs the user is a member of. */ + groups?: { + value?: string; + }[]; + name: { + /** The last name of the user. */ + familyName: string; + /** The first name of the user. */ + givenName: string; + }; + /** The SCIM schema URIs. */ + schemas: string[]; + /** The username for the user. */ + userName: string; +} + +export type EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterpriseData = any; + +export type EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterpriseData = any; + +export type EnterpriseAdminSetAllowedActionsEnterpriseData = any; + +export type EnterpriseAdminSetGithubActionsPermissionsEnterpriseData = any; + +export interface EnterpriseAdminSetGithubActionsPermissionsEnterprisePayload { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_organizations: EnabledOrganizations; +} + +export type EnterpriseAdminSetInformationForProvisionedEnterpriseGroupData = ScimEnterpriseGroup; + +export interface EnterpriseAdminSetInformationForProvisionedEnterpriseGroupPayload { + /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ + displayName: string; + members?: { + /** The SCIM user ID for a user. */ + value: string; + }[]; + /** The SCIM schema URIs. */ + schemas: string[]; +} + +export type EnterpriseAdminSetInformationForProvisionedEnterpriseUserData = ScimEnterpriseUser; + +export interface EnterpriseAdminSetInformationForProvisionedEnterpriseUserPayload { + /** List of user emails. */ + emails: { + /** Whether this email address is the primary address. */ + primary: boolean; + /** The type of email address. */ + type: string; + /** The email address. */ + value: string; + }[]; + /** List of SCIM group IDs the user is a member of. */ + groups?: { + value?: string; + }[]; + name: { + /** The last name of the user. */ + familyName: string; + /** The first name of the user. */ + givenName: string; + }; + /** The SCIM schema URIs. */ + schemas: string[]; + /** The username for the user. */ + userName: string; +} + +export type EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterpriseData = any; + +export interface EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprisePayload { + /** List of organization IDs that can access the runner group. */ + selected_organization_ids: number[]; +} + +export type EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterpriseData = any; + +export interface EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprisePayload { + /** List of organization IDs to enable for GitHub Actions. */ + selected_organization_ids: number[]; +} + +export type EnterpriseAdminSetSelfHostedRunnersInGroupForEnterpriseData = any; + +export interface EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprisePayload { + /** List of runner IDs to add to the runner group. */ + runners: number[]; +} + +export type EnterpriseAdminUpdateAttributeForEnterpriseGroupData = ScimEnterpriseGroup; + +export interface EnterpriseAdminUpdateAttributeForEnterpriseGroupPayload { + /** Array of [SCIM operations](https://tools.ietf.org/html/rfc7644#section-3.5.2). */ + Operations: object[]; + /** The SCIM schema URIs. */ + schemas: string[]; +} + +export type EnterpriseAdminUpdateAttributeForEnterpriseUserData = ScimEnterpriseUser; + +export interface EnterpriseAdminUpdateAttributeForEnterpriseUserPayload { + /** Array of [SCIM operations](https://tools.ietf.org/html/rfc7644#section-3.5.2). */ + Operations: object[]; + /** The SCIM schema URIs. */ + schemas: string[]; +} + +export type EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterpriseData = RunnerGroupsEnterprise; + +export interface EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprisePayload { + /** Name of the runner group. */ + name?: string; + /** + * Visibility of a runner group. You can select all organizations or select individual organizations. Can be one of: \`all\` or \`selected\` + * @default "all" + */ + visibility?: EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterpriseVisibilityEnum; +} + +/** + * Visibility of a runner group. You can select all organizations or select individual organizations. Can be one of: \`all\` or \`selected\` + * @default "all" + */ +export enum EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterpriseVisibilityEnum { + Selected = "selected", + All = "all", +} + +/** + * Event + * Event + */ +export interface Event { + /** Actor */ + actor: Actor; + /** @format date-time */ + created_at: string | null; + id: string; + /** Actor */ + org?: Actor; + payload: { + action: string; + /** Comments provide a way for people to collaborate on an issue. */ + comment?: IssueComment; + /** Issue Simple */ + issue?: IssueSimple; + pages?: { + action?: string; + html_url?: string; + page_name?: string; + sha?: string; + summary?: string | null; + title?: string; + }[]; + }; + public: boolean; + repo: { + id: number; + name: string; + /** @format uri */ + url: string; + }; + type: string | null; +} + +/** + * Feed + * Feed + */ +export interface Feed { + _links: { + /** Hypermedia Link with Type */ + current_user?: LinkWithType; + /** Hypermedia Link with Type */ + current_user_actor?: LinkWithType; + /** Hypermedia Link with Type */ + current_user_organization?: LinkWithType; + current_user_organizations?: LinkWithType[]; + /** Hypermedia Link with Type */ + current_user_public?: LinkWithType; + /** Hypermedia Link with Type */ + security_advisories?: LinkWithType; + /** Hypermedia Link with Type */ + timeline: LinkWithType; + /** Hypermedia Link with Type */ + user: LinkWithType; + }; + /** @example "https://github.com/octocat.private.actor?token=abc123" */ + current_user_actor_url?: string; + /** @example "https://github.com/octocat-org" */ + current_user_organization_url?: string; + /** @example ["https://github.com/organizations/github/octocat.private.atom?token=abc123"] */ + current_user_organization_urls?: string[]; + /** @example "https://github.com/octocat" */ + current_user_public_url?: string; + /** @example "https://github.com/octocat.private?token=abc123" */ + current_user_url?: string; + /** @example "https://github.com/security-advisories" */ + security_advisories_url?: string; + /** @example "https://github.com/timeline" */ + timeline_url: string; + /** @example "https://github.com/{user}" */ + user_url: string; +} + +/** + * File Commit + * File Commit + */ +export interface FileCommit { + commit: { + author?: { + date?: string; + email?: string; + name?: string; + }; + committer?: { + date?: string; + email?: string; + name?: string; + }; + html_url?: string; + message?: string; + node_id?: string; + parents?: { + html_url?: string; + sha?: string; + url?: string; + }[]; + sha?: string; + tree?: { + sha?: string; + url?: string; + }; + url?: string; + verification?: { + payload?: string | null; + reason?: string; + signature?: string | null; + verified?: boolean; + }; + }; + content: { + _links?: { + git?: string; + html?: string; + self?: string; + }; + download_url?: string; + git_url?: string; + html_url?: string; + name?: string; + path?: string; + sha?: string; + size?: number; + type?: string; + url?: string; + } | null; +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum FilterEnum { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum FilterEnum1 { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** + * Filter members returned in the list. Can be one of: + * \\* \`2fa_disabled\` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. + * \\* \`all\` - All members the authenticated user can see. + * @default "all" + */ +export enum FilterEnum2 { + Value2FaDisabled = "2fa_disabled", + All = "all", +} + +/** + * Filter the list of outside collaborators. Can be one of: + * \\* \`2fa_disabled\`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. + * \\* \`all\`: All outside collaborators. + * @default "all" + */ +export enum FilterEnum3 { + Value2FaDisabled = "2fa_disabled", + All = "all", +} + +/** + * Filters jobs by their \`completed_at\` timestamp. Can be one of: + * \\* \`latest\`: Returns jobs from the most recent execution of the workflow run. + * \\* \`all\`: Returns all jobs for a workflow run, including from old executions of the workflow run. + * @default "latest" + */ +export enum FilterEnum4 { + Latest = "latest", + All = "all", +} + +/** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ +export enum FilterEnum5 { + Latest = "latest", + All = "all", +} + +/** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ +export enum FilterEnum6 { + Latest = "latest", + All = "all", +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum FilterEnum7 { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** Forbidden */ +export type Forbidden = BasicError; + +/** Forbidden Gist */ +export interface ForbiddenGist { + block?: { + created_at?: string; + html_url?: string | null; + reason?: string; + }; + documentation_url?: string; + message?: string; +} + +/** Found */ +export type Found = any; + +/** + * Full Repository + * Full Repository + */ +export interface FullRepository { + /** @example true */ + allow_merge_commit?: boolean; + /** @example true */ + allow_rebase_merge?: boolean; + /** @example true */ + allow_squash_merge?: boolean; + /** + * Whether anonymous git access is allowed. + * @default true + */ + anonymous_access_enabled?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** @example "master" */ + default_branch: string; + /** @example false */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** @example true */ + has_downloads: boolean; + /** @example true */ + has_issues: boolean; + has_pages: boolean; + /** @example true */ + has_projects: boolean; + /** @example true */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** @example 1296269 */ + id: number; + /** @example true */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** @example "Hello-World" */ + name: string; + /** @example 0 */ + network_count: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + organization?: SimpleUser | null; + owner: SimpleUser | null; + /** A git repository */ + parent?: Repository; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** A git repository */ + source?: Repository; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + /** @example 42 */ + subscribers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string | null; + template_repository?: Repository | null; + /** @example ["octocat","atom","electron","API"] */ + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @example "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Gist Comment + * A comment made to a gist. + */ +export interface GistComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; + /** + * @format date-time + * @example "2011-04-18T23:23:56Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example "MDExOkdpc3RDb21tZW50MQ==" */ + node_id: string; + /** + * @format date-time + * @example "2011-04-18T23:23:56Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/gists/a6db0bec360bb87e9418/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Gist Commit + * Gist Commit + */ +export interface GistCommit { + change_status: { + additions?: number; + deletions?: number; + total?: number; + }; + /** + * @format date-time + * @example "2010-04-14T02:15:15Z" + */ + committed_at: string; + /** + * @format uri + * @example "https://api.github.com/gists/aa5a315d61ae9438b18d/57a7f021a713b1c5a6a199b54cc514735d2d462f" + */ + url: string; + user: SimpleUser | null; + /** @example "57a7f021a713b1c5a6a199b54cc514735d2d462f" */ + version: string; +} + +/** + * Gist Simple + * Gist Simple + */ +export interface GistSimple { + comments?: number; + comments_url?: string; + commits_url?: string; + created_at?: string; + description?: string | null; + files?: Record< + string, + { + content?: string; + filename?: string; + language?: string; + raw_url?: string; + size?: number; + truncated?: boolean; + type?: string; + } | null + >; + forks_url?: string; + git_pull_url?: string; + git_push_url?: string; + html_url?: string; + id?: string; + node_id?: string; + /** Simple User */ + owner?: SimpleUser; + public?: boolean; + truncated?: boolean; + updated_at?: string; + url?: string; + user?: string | null; +} + +export type GistsCheckIsStarredData = any; + +export type GistsCheckIsStarredError = object; + +export type GistsCreateCommentData = GistComment; + +export interface GistsCreateCommentPayload { + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; +} + +export type GistsCreateData = GistSimple; + +export interface GistsCreatePayload { + /** + * Description of the gist + * @example "Example Ruby script" + */ + description?: string; + /** + * Names and content for the files that make up the gist + * @example {"hello.rb":{"content":"puts \\"Hello, World!\\""}} + */ + files: Record< + string, + { + /** Content of the file */ + content: string; + } + >; + /** Flag indicating whether the gist is public */ + public?: boolean | GistsCreatePublicEnum; +} + +/** + * @default "false" + * @example "true" + */ +export enum GistsCreatePublicEnum { + True = "true", + False = "false", +} + +export type GistsDeleteCommentData = any; + +export type GistsDeleteData = any; + +export type GistsForkData = BaseGist; + +export type GistsGetCommentData = GistComment; + +export type GistsGetData = GistSimple; + +export type GistsGetRevisionData = GistSimple; + +export type GistsListCommentsData = GistComment[]; + +export interface GistsListCommentsParams { + /** gist_id parameter */ + gistId: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type GistsListCommitsData = GistCommit[]; + +export interface GistsListCommitsParams { + /** gist_id parameter */ + gistId: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type GistsListData = BaseGist[]; + +export type GistsListForUserData = BaseGist[]; + +export interface GistsListForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + username: string; +} + +export type GistsListForksData = GistSimple[]; + +export interface GistsListForksParams { + /** gist_id parameter */ + gistId: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface GistsListParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type GistsListPublicData = BaseGist[]; + +export interface GistsListPublicParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type GistsListStarredData = BaseGist[]; + +export interface GistsListStarredParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type GistsStarData = any; + +export type GistsUnstarData = any; + +export type GistsUpdateCommentData = GistComment; + +export interface GistsUpdateCommentPayload { + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; +} + +export type GistsUpdateData = GistSimple; + +export type GistsUpdatePayload = null & { + /** + * Description of the gist + * @example "Example Ruby script" + */ + description?: string; + /** + * Names of files to be updated + * @example {"hello.rb":{"content":"blah","filename":"goodbye.rb"}} + */ + files?: Record< + string, + (object | null) & { + /** The new content of the file */ + content?: string; + /** The new filename for the file */ + filename?: string | null; + } + >; +}; + +/** + * Git Commit + * Low-level Git commit operations within a repository + */ +export interface GitCommit { + /** Identifying information for the git-user */ + author: { + /** + * Timestamp of the commit + * @format date-time + * @example "2014-08-09T08:02:04+12:00" + */ + date: string; + /** + * Git email address of the user + * @example "monalisa.octocat@example.com" + */ + email: string; + /** + * Name of the git user + * @example "Monalisa Octocat" + */ + name: string; + }; + /** Identifying information for the git-user */ + committer: { + /** + * Timestamp of the commit + * @format date-time + * @example "2014-08-09T08:02:04+12:00" + */ + date: string; + /** + * Git email address of the user + * @example "monalisa.octocat@example.com" + */ + email: string; + /** + * Name of the git user + * @example "Monalisa Octocat" + */ + name: string; + }; + /** @format uri */ + html_url: string; + /** + * Message describing the purpose of the commit + * @example "Fix #42" + */ + message: string; + node_id: string; + parents: { + /** @format uri */ + html_url: string; + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + /** @format uri */ + url: string; + }[]; + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + tree: { + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + /** @format uri */ + url: string; + }; + /** @format uri */ + url: string; + verification: { + payload: string | null; + reason: string; + signature: string | null; + verified: boolean; + }; +} + +export type GitCreateBlobData = ShortBlob; + +export interface GitCreateBlobPayload { + /** The new blob's content. */ + content: string; + /** + * The encoding used for \`content\`. Currently, \`"utf-8"\` and \`"base64"\` are supported. + * @default "utf-8" + */ + encoding?: string; +} + +export type GitCreateCommitData = GitCommit; + +export interface GitCreateCommitPayload { + /** Information about the author of the commit. By default, the \`author\` will be the authenticated user and the current date. See the \`author\` and \`committer\` object below for details. */ + author?: { + /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** Information about the person who is making the commit. By default, \`committer\` will use the information set in \`author\`. See the \`author\` and \`committer\` object below for details. */ + committer?: { + /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The commit message */ + message: string; + /** The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided. */ + parents?: string[]; + /** The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the \`gpgsig\` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a \`signature\` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits. */ + signature?: string; + /** The SHA of the tree object this commit points to */ + tree: string; +} + +export type GitCreateRefData = GitRef; + +export interface GitCreateRefPayload { + /** @example ""refs/heads/newbranch"" */ + key?: string; + /** The name of the fully qualified reference (ie: \`refs/heads/master\`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected. */ + ref: string; + /** The SHA1 value for this reference. */ + sha: string; +} + +export type GitCreateTagData = GitTag; + +export interface GitCreateTagPayload { + /** The tag message. */ + message: string; + /** The SHA of the git object this is tagging. */ + object: string; + /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ + tag: string; + /** An object with information about the individual creating the tag. */ + tagger?: { + /** When this object was tagged. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author of the tag */ + email?: string; + /** The name of the author of the tag */ + name?: string; + }; + /** The type of the object we're tagging. Normally this is a \`commit\` but it can also be a \`tree\` or a \`blob\`. */ + type: GitCreateTagTypeEnum; +} + +/** The type of the object we're tagging. Normally this is a \`commit\` but it can also be a \`tree\` or a \`blob\`. */ +export enum GitCreateTagTypeEnum { + Commit = "commit", + Tree = "tree", + Blob = "blob", +} + +export type GitCreateTreeData = GitTree; + +/** The file mode; one of \`100644\` for file (blob), \`100755\` for executable (blob), \`040000\` for subdirectory (tree), \`160000\` for submodule (commit), or \`120000\` for a blob that specifies the path of a symlink. */ +export enum GitCreateTreeModeEnum { + Value100644 = "100644", + Value100755 = "100755", + Value040000 = "040000", + Value160000 = "160000", + Value120000 = "120000", +} + +export interface GitCreateTreePayload { + /** + * The SHA1 of an existing Git tree object which will be used as the base for the new tree. If provided, a new Git tree object will be created from entries in the Git tree object pointed to by \`base_tree\` and entries defined in the \`tree\` parameter. Entries defined in the \`tree\` parameter will overwrite items from \`base_tree\` with the same \`path\`. If you're creating new changes on a branch, then normally you'd set \`base_tree\` to the SHA1 of the Git tree object of the current latest commit on the branch you're working on. + * If not provided, GitHub will create a new Git tree object from only the entries defined in the \`tree\` parameter. If you create a new commit pointing to such a tree, then all files which were a part of the parent commit's tree and were not defined in the \`tree\` parameter will be listed as deleted by the new commit. + */ + base_tree?: string; + /** Objects (of \`path\`, \`mode\`, \`type\`, and \`sha\`) specifying a tree structure. */ + tree: { + /** + * The content you want this file to have. GitHub will write this blob out and use that SHA for this entry. Use either this, or \`tree.sha\`. + * + * **Note:** Use either \`tree.sha\` or \`content\` to specify the contents of the entry. Using both \`tree.sha\` and \`content\` will return an error. + */ + content?: string; + /** The file mode; one of \`100644\` for file (blob), \`100755\` for executable (blob), \`040000\` for subdirectory (tree), \`160000\` for submodule (commit), or \`120000\` for a blob that specifies the path of a symlink. */ + mode?: GitCreateTreeModeEnum; + /** The file referenced in the tree. */ + path?: string; + /** + * The SHA1 checksum ID of the object in the tree. Also called \`tree.sha\`. If the value is \`null\` then the file will be deleted. + * + * **Note:** Use either \`tree.sha\` or \`content\` to specify the contents of the entry. Using both \`tree.sha\` and \`content\` will return an error. + */ + sha?: string | null; + /** Either \`blob\`, \`tree\`, or \`commit\`. */ + type?: GitCreateTreeTypeEnum; + }[]; +} + +/** Either \`blob\`, \`tree\`, or \`commit\`. */ +export enum GitCreateTreeTypeEnum { + Blob = "blob", + Tree = "tree", + Commit = "commit", +} + +export type GitDeleteRefData = any; + +export type GitGetBlobData = Blob; + +export type GitGetCommitData = GitCommit; + +export type GitGetRefData = GitRef; + +export type GitGetTagData = GitTag; + +export type GitGetTreeData = GitTree; + +export interface GitGetTreeParams { + owner: string; + /** Setting this parameter to any value returns the objects or subtrees referenced by the tree specified in \`:tree_sha\`. For example, setting \`recursive\` to any of the following will enable returning objects or subtrees: \`0\`, \`1\`, \`"true"\`, and \`"false"\`. Omit this parameter to prevent recursively returning objects or subtrees. */ + recursive?: string; + repo: string; + treeSha: string; +} + +export type GitListMatchingRefsData = GitRef[]; + +export interface GitListMatchingRefsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** ref+ parameter */ + ref: string; + repo: string; +} + +/** + * Git Reference + * Git references within a repository + */ +export interface GitRef { + node_id: string; + object: { + /** + * SHA for the reference + * @minLength 40 + * @maxLength 40 + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + type: string; + /** @format uri */ + url: string; + }; + ref: string; + /** @format uri */ + url: string; +} + +/** + * Git Tag + * Metadata for a Git tag + */ +export interface GitTag { + /** + * Message describing the purpose of the tag + * @example "Initial public release" + */ + message: string; + /** @example "MDM6VGFnOTQwYmQzMzYyNDhlZmFlMGY5ZWU1YmM3YjJkNWM5ODU4ODdiMTZhYw==" */ + node_id: string; + object: { + sha: string; + type: string; + /** @format uri */ + url: string; + }; + /** @example "940bd336248efae0f9ee5bc7b2d5c985887b16ac" */ + sha: string; + /** + * Name of the tag + * @example "v0.0.1" + */ + tag: string; + tagger: { + date: string; + email: string; + name: string; + }; + /** + * URL for the tag + * @format uri + * @example "https://api.github.com/repositories/42/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac" + */ + url: string; + verification?: Verification; +} + +/** + * Git Tree + * The hierarchy between files in a Git repository. + */ +export interface GitTree { + sha: string; + /** + * Objects specifying a tree structure + * @example [{"path":"file.rb","mode":"100644","type":"blob","size":30,"sha":"44b4fc6d56897b048c772eb4087f854f46256132","url":"https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132","properties":{"path":{"type":"string"},"mode":{"type":"string"},"type":{"type":"string"},"size":{"type":"integer"},"sha":{"type":"string"},"url":{"type":"string"}},"required":["path","mode","type","sha","url","size"]}] + */ + tree: { + /** @example "040000" */ + mode?: string; + /** @example "test/file.rb" */ + path?: string; + /** @example "23f6827669e43831def8a7ad935069c8bd418261" */ + sha?: string; + /** @example 12 */ + size?: number; + /** @example "tree" */ + type?: string; + /** @example "https://api.github.com/repos/owner-482f3203ecf01f67e9deb18e/BBB_Private_Repo/git/blobs/23f6827669e43831def8a7ad935069c8bd418261" */ + url?: string; + }[]; + truncated: boolean; + /** @format uri */ + url: string; +} + +export type GitUpdateRefData = GitRef; + +export interface GitUpdateRefPayload { + /** + * Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to \`false\` will make sure you're not overwriting work. + * @default false + */ + force?: boolean; + /** The SHA1 value to set this reference to */ + sha: string; +} + +/** + * Git User + * Metaproperties for Git author/committer information. + */ +export interface GitUser { + /** @example ""2007-10-29T02:42:39.000-07:00"" */ + date?: string; + /** @example ""chris@ozmm.org"" */ + email?: string; + /** @example ""Chris Wanstrath"" */ + name?: string; +} + +export type GitignoreGetAllTemplatesData = string[]; + +export type GitignoreGetTemplateData = GitignoreTemplate; + +/** + * Gitignore Template + * Gitignore Template + */ +export interface GitignoreTemplate { + /** @example "C" */ + name: string; + /** + * @example "# Object files + * *.o + * + * # Libraries + * *.lib + * *.a + * + * # Shared objects (inc. Windows DLLs) + * *.dll + * *.so + * *.so.* + * *.dylib + * + * # Executables + * *.exe + * *.out + * *.app + * " + */ + source: string; +} + +/** Gone */ +export type Gone = BasicError; + +/** + * GPG Key + * A unique encryption key + */ +export interface GpgKey { + /** @example true */ + can_certify: boolean; + can_encrypt_comms: boolean; + can_encrypt_storage: boolean; + /** @example true */ + can_sign: boolean; + /** + * @format date-time + * @example "2016-03-24T11:31:04-06:00" + */ + created_at: string; + /** @example [{"email":"mastahyeti@users.noreply.github.com","verified":true}] */ + emails: { + email?: string; + verified?: boolean; + }[]; + /** @format date-time */ + expires_at: string | null; + /** @example 3 */ + id: number; + /** @example "3262EFF25BA0D270" */ + key_id: string; + primary_key_id: number | null; + /** @example "xsBNBFayYZ..." */ + public_key: string; + raw_key: string | null; + /** @example [{"id":4,"primary_key_id":3,"key_id":"4A595D4C72EE49C7","public_key":"zsBNBFayYZ...","emails":[],"subkeys":[],"can_sign":false,"can_encrypt_comms":true,"can_encrypt_storage":true,"can_certify":false,"created_at":"2016-03-24T11:31:04-06:00","expires_at":null}] */ + subkeys: { + can_certify?: boolean; + can_encrypt_comms?: boolean; + can_encrypt_storage?: boolean; + can_sign?: boolean; + created_at?: string; + emails?: any[]; + expires_at?: string | null; + id?: number; + key_id?: string; + primary_key_id?: number; + public_key?: string; + raw_key?: string | null; + subkeys?: any[]; + }[]; +} + +/** + * GroupMapping + * External Groups to be mapped to a team for membership + */ +export interface GroupMapping { + /** + * a description of the group + * @example "A group of Developers working on AzureAD SAML SSO" + */ + group_description?: string; + /** + * The ID of the group + * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" + */ + group_id?: string; + /** + * The name of the group + * @example "saml-azuread-test" + */ + group_name?: string; + /** + * Array of groups to be mapped to this team + * @example [{"group_id":"111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa","group_name":"saml-azuread-test","group_description":"A group of Developers working on AzureAD SAML SSO"},{"group_id":"2bb2bb2b-bb22-22bb-2bb2-bb2bbb2bb2b2","group_name":"saml-azuread-test2","group_description":"Another group of Developers working on AzureAD SAML SSO"}] + */ + groups?: { + /** + * a description of the group + * @example "A group of Developers working on AzureAD SAML SSO" + */ + group_description: string; + /** + * The ID of the group + * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" + */ + group_id: string; + /** + * The name of the group + * @example "saml-azuread-test" + */ + group_name: string; + }[]; + /** + * synchronization status for this group mapping + * @example "unsynced" + */ + status?: string; + /** + * the time of the last sync for this group-mapping + * @example "2019-06-03 22:27:15:000 -700" + */ + synced_at?: string; +} + +/** + * Webhook + * Webhooks for repositories. + */ +export interface Hook { + /** + * Determines whether the hook is actually triggered on pushes. + * @example true + */ + active: boolean; + config: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** @example ""sha256"" */ + digest?: string; + /** @example ""foo@bar.com"" */ + email?: string; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** @example ""foo"" */ + password?: string; + /** @example ""roomer"" */ + room?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** @example ""foo"" */ + subdomain?: string; + /** @example ""abc"" */ + token?: string; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** + * Determines what events the hook is triggered for. Default: ['push']. + * @example ["push","pull_request"] + */ + events: string[]; + /** + * Unique identifier of the webhook. + * @example 42 + */ + id: number; + last_response: HookResponse; + /** + * The name of a valid service, use 'web' for a webhook. + * @example "web" + */ + name: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/pings" + */ + ping_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/test" + */ + test_url: string; + type: string; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1" + */ + url: string; +} + +/** Hook Response */ +export interface HookResponse { + code: number | null; + message: string | null; + status: string | null; +} + +/** + * Hovercard + * Hovercard + */ +export interface Hovercard { + contexts: { + message: string; + octicon: string; + }[]; +} + +/** + * Import + * A repository import from an external source. + */ +export interface Import { + authors_count?: number | null; + /** @format uri */ + authors_url: string; + commit_count?: number | null; + error_message?: string | null; + failed_step?: string | null; + has_large_files?: boolean; + /** @format uri */ + html_url: string; + import_percent?: number | null; + large_files_count?: number; + large_files_size?: number; + message?: string; + project_choices?: { + human_name?: string; + tfvc_project?: string; + vcs?: string; + }[]; + push_percent?: number | null; + /** @format uri */ + repository_url: string; + status: ImportStatusEnum; + status_text?: string | null; + svc_root?: string; + svn_root?: string; + tfvc_project?: string; + /** @format uri */ + url: string; + use_lfs?: string; + vcs: string | null; + /** The URL of the originating repository. */ + vcs_url: string; +} + +export enum ImportStatusEnum { + Auth = "auth", + Error = "error", + None = "none", + Detecting = "detecting", + Choose = "choose", + AuthFailed = "auth_failed", + Importing = "importing", + Mapping = "mapping", + WaitingToPush = "waiting_to_push", + Pushing = "pushing", + Complete = "complete", + Setup = "setup", + Unknown = "unknown", + DetectionFoundMultiple = "detection_found_multiple", + DetectionFoundNothing = "detection_found_nothing", + DetectionNeedsAuth = "detection_needs_auth", +} + +/** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ +export enum IncludeEnum { + Web = "web", + Git = "git", + All = "all", +} + +/** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ +export enum IncludeEnum1 { + Web = "web", + Git = "git", + All = "all", +} + +/** + * Installation + * Installation + */ +export interface Installation { + /** + * @format uri + * @example "https://api.github.com/installations/1/access_tokens" + */ + access_tokens_url: string; + account: SimpleUser | Enterprise | null; + /** @example 1 */ + app_id: number; + /** @example "github-actions" */ + app_slug: string; + /** @example ""test_13f1e99741e3e004@d7e1eb0bc0a1ba12.com"" */ + contact_email?: string | null; + /** @format date-time */ + created_at: string; + events: string[]; + /** @example true */ + has_multiple_single_files?: boolean; + /** + * @format uri + * @example "https://github.com/organizations/github/settings/installations/1" + */ + html_url: string; + /** + * The ID of the installation. + * @example 1 + */ + id: number; + /** @example {"issues":"read","deployments":"write"} */ + permissions: { + checks?: string; + contents?: string; + deployments?: string; + /** @example ""read"" */ + issues?: string; + metadata?: string; + /** @example ""read"" */ + organization_administration?: string; + pull_requests?: string; + statuses?: string; + }; + /** + * @format uri + * @example "https://api.github.com/installation/repositories" + */ + repositories_url: string; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection: InstallationRepositorySelectionEnum; + /** @example "config.yaml" */ + single_file_name: string | null; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; + /** @format date-time */ + suspended_at?: string | null; + suspended_by?: SimpleUser | null; + /** The ID of the user or organization this token is being scoped to. */ + target_id: number; + /** @example "Organization" */ + target_type: string; + /** @format date-time */ + updated_at: string; +} + +/** Describe whether all repositories have been selected or there's a selection involved */ +export enum InstallationRepositorySelectionEnum { + All = "all", + Selected = "selected", +} + +/** + * Installation Token + * Authentication token for a GitHub App installed on a user or org. + */ +export interface InstallationToken { + expires_at: string; + /** @example true */ + has_multiple_single_files?: boolean; + permissions?: { + contents?: string; + issues?: string; + /** @example "read" */ + metadata?: string; + /** @example "read" */ + single_file?: string; + }; + repositories?: Repository[]; + repository_selection?: InstallationTokenRepositorySelectionEnum; + /** @example "README.md" */ + single_file?: string; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; + token: string; +} + +export enum InstallationTokenRepositorySelectionEnum { + All = "all", + Selected = "selected", +} + +/** + * GitHub app + * GitHub apps are a new way to extend GitHub. They can be installed directly on organizations and user accounts and granted access to specific repositories. They come with granular permissions and built-in webhooks. GitHub apps are first class actors within GitHub. + */ +export interface Integration { + /** @example ""Iv1.25b5d1e65ffc4022"" */ + client_id?: string; + /** @example ""1d4b2097ac622ba702d19de498f005747a8b21d3"" */ + client_secret?: string; + /** + * @format date-time + * @example "2017-07-08T16:18:44-04:00" + */ + created_at: string; + /** @example "The description of the app." */ + description: string | null; + /** + * The list of events for the GitHub app + * @example ["label","deployment"] + */ + events: string[]; + /** + * @format uri + * @example "https://example.com" + */ + external_url: string; + /** + * @format uri + * @example "https://github.com/apps/super-ci" + */ + html_url: string; + /** + * Unique identifier of the GitHub app + * @example 37 + */ + id: number; + /** + * The number of installations associated with the GitHub app + * @example 5 + */ + installations_count?: number; + /** + * The name of the GitHub app + * @example "Probot Owners" + */ + name: string; + /** @example "MDExOkludGVncmF0aW9uMQ==" */ + node_id: string; + owner: SimpleUser | null; + /** @example ""-----BEGIN RSA PRIVATE KEY-----\\nMIIEogIBAAKCAQEArYxrNYD/iT5CZVpRJu4rBKmmze3PVmT/gCo2ATUvDvZTPTey\\nxcGJ3vvrJXazKk06pN05TN29o98jrYz4cengG3YGsXPNEpKsIrEl8NhbnxapEnM9\\nJCMRe0P5JcPsfZlX6hmiT7136GRWiGOUba2X9+HKh8QJVLG5rM007TBER9/z9mWm\\nrJuNh+m5l320oBQY/Qq3A7wzdEfZw8qm/mIN0FCeoXH1L6B8xXWaAYBwhTEh6SSn\\nZHlO1Xu1JWDmAvBCi0RO5aRSKM8q9QEkvvHP4yweAtK3N8+aAbZ7ovaDhyGz8r6r\\nzhU1b8Uo0Z2ysf503WqzQgIajr7Fry7/kUwpgQIDAQABAoIBADwJp80Ko1xHPZDy\\nfcCKBDfIuPvkmSW6KumbsLMaQv1aGdHDwwTGv3t0ixSay8CGlxMRtRDyZPib6SvQ\\n6OH/lpfpbMdW2ErkksgtoIKBVrDilfrcAvrNZu7NxRNbhCSvN8q0s4ICecjbbVQh\\nnueSdlA6vGXbW58BHMq68uRbHkP+k+mM9U0mDJ1HMch67wlg5GbayVRt63H7R2+r\\nVxcna7B80J/lCEjIYZznawgiTvp3MSanTglqAYi+m1EcSsP14bJIB9vgaxS79kTu\\noiSo93leJbBvuGo8QEiUqTwMw4tDksmkLsoqNKQ1q9P7LZ9DGcujtPy4EZsamSJT\\ny8OJt0ECgYEA2lxOxJsQk2kI325JgKFjo92mQeUObIvPfSNWUIZQDTjniOI6Gv63\\nGLWVFrZcvQBWjMEQraJA9xjPbblV8PtfO87MiJGLWCHFxmPz2dzoedN+2Coxom8m\\nV95CLz8QUShuao6u/RYcvUaZEoYs5bHcTmy5sBK80JyEmafJPtCQVxMCgYEAy3ar\\nZr3yv4xRPEPMat4rseswmuMooSaK3SKub19WFI5IAtB/e7qR1Rj9JhOGcZz+OQrl\\nT78O2OFYlgOIkJPvRMrPpK5V9lslc7tz1FSh3BZMRGq5jSyD7ETSOQ0c8T2O/s7v\\nbeEPbVbDe4mwvM24XByH0GnWveVxaDl51ABD65sCgYB3ZAspUkOA5egVCh8kNpnd\\nSd6SnuQBE3ySRlT2WEnCwP9Ph6oPgn+oAfiPX4xbRqkL8q/k0BdHQ4h+zNwhk7+h\\nWtPYRAP1Xxnc/F+jGjb+DVaIaKGU18MWPg7f+FI6nampl3Q0KvfxwX0GdNhtio8T\\nTj1E+SnFwh56SRQuxSh2gwKBgHKjlIO5NtNSflsUYFM+hyQiPiqnHzddfhSG+/3o\\nm5nNaSmczJesUYreH5San7/YEy2UxAugvP7aSY2MxB+iGsiJ9WD2kZzTUlDZJ7RV\\nUzWsoqBR+eZfVJ2FUWWvy8TpSG6trh4dFxImNtKejCR1TREpSiTV3Zb1dmahK9GV\\nrK9NAoGAbBxRLoC01xfxCTgt5BDiBcFVh4fp5yYKwavJPLzHSpuDOrrI9jDn1oKN\\nonq5sDU1i391zfQvdrbX4Ova48BN+B7p63FocP/MK5tyyBoT8zQEk2+vWDOw7H/Z\\nu5dTCPxTIsoIwUw1I+7yIxqJzLPFgR2gVBwY1ra/8iAqCj+zeBw=\\n-----END RSA PRIVATE KEY-----\\n"" */ + pem?: string; + /** + * The set of permissions for the GitHub app + * @example {"issues":"read","deployments":"write"} + */ + permissions: { + checks?: string; + contents?: string; + deployments?: string; + issues?: string; + metadata?: string; + [key: string]: any; + }; + /** + * The slug name of the GitHub app + * @example "probot-owners" + */ + slug?: string; + /** + * @format date-time + * @example "2017-07-08T16:18:44-04:00" + */ + updated_at: string; + /** @example ""6fba8f2fc8a7e8f2cca5577eddd82ca7586b3b6b"" */ + webhook_secret?: string; + [key: string]: any; +} + +/** + * The duration of the interaction restriction. Can be one of: \`one_day\`, \`three_days\`, \`one_week\`, \`one_month\`, \`six_months\`. Default: \`one_day\`. + * @example "one_month" + */ +export enum InteractionExpiry { + OneDay = "one_day", + ThreeDays = "three_days", + OneWeek = "one_week", + OneMonth = "one_month", + SixMonths = "six_months", +} + +/** + * The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. + * @example "collaborators_only" + */ +export enum InteractionGroup { + ExistingUsers = "existing_users", + ContributorsOnly = "contributors_only", + CollaboratorsOnly = "collaborators_only", +} + +/** + * Interaction Restrictions + * Limit interactions to a specific type of user for a specified duration + */ +export interface InteractionLimit { + /** The duration of the interaction restriction. Can be one of: \`one_day\`, \`three_days\`, \`one_week\`, \`one_month\`, \`six_months\`. Default: \`one_day\`. */ + expiry?: InteractionExpiry; + /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. */ + limit: InteractionGroup; +} + +/** + * Interaction Limits + * Interaction limit settings. + */ +export interface InteractionLimitResponse { + /** + * @format date-time + * @example "2018-08-17T04:18:39Z" + */ + expires_at: string; + /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. */ + limit: InteractionGroup; + /** @example "repository" */ + origin: string; +} + +export type InteractionsGetRestrictionsForAuthenticatedUserData = InteractionLimitResponse; + +export type InteractionsGetRestrictionsForOrgData = InteractionLimitResponse; + +export type InteractionsGetRestrictionsForRepoData = InteractionLimitResponse; + +export type InteractionsRemoveRestrictionsForAuthenticatedUserData = any; + +export type InteractionsRemoveRestrictionsForOrgData = any; + +export type InteractionsRemoveRestrictionsForRepoData = any; + +export type InteractionsSetRestrictionsForAuthenticatedUserData = InteractionLimitResponse; + +export type InteractionsSetRestrictionsForOrgData = InteractionLimitResponse; + +export type InteractionsSetRestrictionsForRepoData = InteractionLimitResponse; + +/** Internal Error */ +export type InternalError = BasicError; + +/** + * Issue + * Issues are a great way to keep track of tasks, enhancements, and bugs for your projects. + */ +export interface Issue { + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * Contents of the issue + * @example "It looks like the new widget form is broken on Safari. When I try and create the widget, Safari crashes. This is reproducible on 10.8, but not 10.9. Maybe a browser bug?" + */ + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + closed_by?: SimpleUser | null; + comments: number; + /** @format uri */ + comments_url: string; + /** @format date-time */ + created_at: string; + /** @format uri */ + events_url: string; + /** @format uri */ + html_url: string; + id: number; + /** + * Labels to associate with this issue; pass one or more label names to replace the set of labels on this issue; send an empty array to clear all labels from the issue; note that the labels are silently dropped for users without push access to the repository + * @example ["bug","registration"] + */ + labels: ( + | string + | { + color?: string | null; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + /** @format uri */ + url?: string; + } + )[]; + labels_url: string; + locked: boolean; + milestone: Milestone | null; + node_id: string; + /** + * Number uniquely identifying the issue within its repository + * @example 42 + */ + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + reactions?: ReactionRollup; + /** A git repository */ + repository?: Repository; + /** @format uri */ + repository_url: string; + /** + * State of the issue; either 'open' or 'closed' + * @example "open" + */ + state: string; + /** @format uri */ + timeline_url?: string; + /** + * Title of the issue + * @example "Widget creation fails in Safari on OS X 10.8" + */ + title: string; + /** @format date-time */ + updated_at: string; + /** + * URL for the issue + * @format uri + * @example "https://api.github.com/repositories/42/issues/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Comment + * Comments provide a way for people to collaborate on an issue. + */ +export interface IssueComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * Contents of the issue comment + * @example "What version of Safari were you using when you observed this bug?" + */ + body?: string; + body_html?: string; + body_text?: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** @format uri */ + html_url: string; + /** + * Unique identifier of the issue comment + * @example 42 + */ + id: number; + /** @format uri */ + issue_url: string; + node_id: string; + performed_via_github_app?: Integration | null; + reactions?: ReactionRollup; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * URL for the issue comment + * @format uri + * @example "https://api.github.com/repositories/42/issues/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Event + * Issue Event + */ +export interface IssueEvent { + actor: SimpleUser | null; + assignee?: SimpleUser | null; + assigner?: SimpleUser | null; + /** How the author is associated with the repository. */ + author_association?: AuthorAssociation; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_id: string | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_url: string | null; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + dismissed_review?: IssueEventDismissedReview; + /** @example "closed" */ + event: string; + /** @example 1 */ + id: number; + /** Issue Simple */ + issue?: IssueSimple; + /** Issue Event Label */ + label?: IssueEventLabel; + lock_reason?: string | null; + /** Issue Event Milestone */ + milestone?: IssueEventMilestone; + /** @example "MDEwOklzc3VlRXZlbnQx" */ + node_id: string; + /** Issue Event Project Card */ + project_card?: IssueEventProjectCard; + /** Issue Event Rename */ + rename?: IssueEventRename; + requested_reviewer?: SimpleUser | null; + /** Groups of organization members that gives permissions on specified repositories. */ + requested_team?: Team; + review_requester?: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/events/1" + */ + url: string; +} + +/** Issue Event Dismissed Review */ +export interface IssueEventDismissedReview { + dismissal_commit_id?: string | null; + dismissal_message: string | null; + review_id: number; + state: string; +} + +/** + * Issue Event for Issue + * Issue Event for Issue + */ +export interface IssueEventForIssue { + /** Simple User */ + actor?: SimpleUser; + /** How the author is associated with the repository. */ + author_association?: AuthorAssociation; + /** @example "":+1:"" */ + body?: string; + /** @example ""

Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam.

"" */ + body_html?: string; + /** @example ""Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam."" */ + body_text?: string; + commit_id?: string | null; + commit_url?: string | null; + created_at?: string; + event?: string; + /** @example ""https://github.com/owner-3906e11a33a3d55ba449d63f/BBB_Private_Repo/commit/480d4f47447129f015cb327536c522ca683939a1"" */ + html_url?: string; + id?: number; + /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/issues/1"" */ + issue_url?: string; + /** @example ""off-topic"" */ + lock_reason?: string; + /** @example ""add a bunch of files"" */ + message?: string; + node_id?: string; + /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/pulls/2"" */ + pull_request_url?: string; + /** @example ""480d4f47447129f015cb327536c522ca683939a1"" */ + sha?: string; + /** @example ""commented"" */ + state?: string; + /** @example ""2020-07-09T00:17:51Z"" */ + submitted_at?: string; + /** @example ""2020-07-09T00:17:36Z"" */ + updated_at?: string; + url?: string; +} + +/** + * Issue Event Label + * Issue Event Label + */ +export interface IssueEventLabel { + color: string | null; + name: string | null; +} + +/** + * Issue Event Milestone + * Issue Event Milestone + */ +export interface IssueEventMilestone { + title: string; +} + +/** + * Issue Event Project Card + * Issue Event Project Card + */ +export interface IssueEventProjectCard { + column_name: string; + id: number; + previous_column_name?: string; + project_id: number; + /** @format uri */ + project_url: string; + /** @format uri */ + url: string; +} + +/** + * Issue Event Rename + * Issue Event Rename + */ +export interface IssueEventRename { + from: string; + to: string; +} + +/** + * Issue Search Result Item + * Issue Search Result Item + */ +export interface IssueSearchResultItem { + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + comments: number; + /** @format uri */ + comments_url: string; + /** @format date-time */ + created_at: string; + draft?: boolean; + /** @format uri */ + events_url: string; + /** @format uri */ + html_url: string; + id: number; + labels: { + color?: string; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + labels_url: string; + locked: boolean; + milestone: Milestone | null; + node_id: string; + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + /** A git repository */ + repository?: Repository; + /** @format uri */ + repository_url: string; + score: number; + state: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + timeline_url?: string; + title: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Simple + * Issue Simple + */ +export interface IssueSimple { + /** @example "too heated" */ + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** @example "I'm having a problem with this." */ + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + /** @example 0 */ + comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** + * @format date-time + * @example "2011-04-22T13:33:48Z" + */ + created_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/events" + */ + events_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/issues/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + labels: Label[]; + /** @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/labels{/name}" */ + labels_url: string; + /** @example true */ + locked: boolean; + milestone: Milestone | null; + /** @example "MDU6SXNzdWUx" */ + node_id: string; + /** @example 1347 */ + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + /** A git repository */ + repository?: Repository; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + repository_url: string; + /** @example "open" */ + state: string; + /** @format uri */ + timeline_url?: string; + /** @example "Found a bug" */ + title: string; + /** + * @format date-time + * @example "2011-04-22T13:33:48Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + url: string; + user: SimpleUser | null; +} + +export type IssuesAddAssigneesData = IssueSimple; + +export interface IssuesAddAssigneesPayload { + /** Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._ */ + assignees?: string[]; +} + +export type IssuesAddLabelsData = Label[]; + +export interface IssuesAddLabelsPayload { + /** The name of the label to add to the issue. Must contain at least one label. **Note:** Alternatively, you can pass a single label as a \`string\` or an \`array\` of labels directly, but GitHub recommends passing an object with the \`labels\` key. */ + labels: string[]; +} + +export type IssuesCheckUserCanBeAssignedData = any; + +export type IssuesCheckUserCanBeAssignedError = BasicError; + +export type IssuesCreateCommentData = IssueComment; + +export interface IssuesCreateCommentPayload { + /** The contents of the comment. */ + body: string; +} + +export type IssuesCreateData = Issue; + +export type IssuesCreateLabelData = Label; + +export interface IssuesCreateLabelPayload { + /** The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading \`#\`. */ + color?: string; + /** A short description of the label. */ + description?: string; + /** The name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing \`:strawberry:\` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/). */ + name: string; +} + +export type IssuesCreateMilestoneData = Milestone; + +export interface IssuesCreateMilestonePayload { + /** A description of the milestone. */ + description?: string; + /** The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + due_on?: string; + /** + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" + */ + state?: IssuesCreateMilestoneStateEnum; + /** The title of the milestone. */ + title: string; +} + +/** + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" + */ +export enum IssuesCreateMilestoneStateEnum { + Open = "open", + Closed = "closed", +} + +export interface IssuesCreatePayload { + /** Login for the user that this issue should be assigned to. _NOTE: Only users with push access can set the assignee for new issues. The assignee is silently dropped otherwise. **This field is deprecated.**_ */ + assignee?: string | null; + /** Logins for Users to assign to this issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._ */ + assignees?: string[]; + /** The contents of the issue. */ + body?: string; + /** Labels to associate with this issue. _NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise._ */ + labels?: ( + | string + | { + color?: string | null; + description?: string | null; + id?: number; + name?: string; + } + )[]; + /** The \`number\` of the milestone to associate this issue with. _NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise._ */ + milestone?: string | number | null; + /** The title of the issue. */ + title: string | number; +} + +export type IssuesDeleteCommentData = any; + +export type IssuesDeleteLabelData = any; + +export type IssuesDeleteMilestoneData = any; + +export type IssuesGetCommentData = IssueComment; + +export type IssuesGetData = Issue; + +export type IssuesGetEventData = IssueEvent; + +export type IssuesGetLabelData = Label; + +export type IssuesGetMilestoneData = Milestone; + +export type IssuesListAssigneesData = SimpleUser[]; + +export interface IssuesListAssigneesParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListCommentsData = IssueComment[]; + +export type IssuesListCommentsForRepoData = IssueComment[]; + +export interface IssuesListCommentsForRepoParams { + /** Either \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: DirectionEnum8; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum7; +} + +/** Either \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ +export enum IssuesListCommentsForRepoParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum IssuesListCommentsForRepoParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export interface IssuesListCommentsParams { + /** issue_number parameter */ + issueNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; +} + +export type IssuesListData = Issue[]; + +export type IssuesListEventsData = IssueEventForIssue[]; + +export type IssuesListEventsForRepoData = IssueEvent[]; + +export interface IssuesListEventsForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListEventsForTimelineData = IssueEventForIssue[]; + +export interface IssuesListEventsForTimelineParams { + /** issue_number parameter */ + issueNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export interface IssuesListEventsParams { + /** issue_number parameter */ + issueNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListForAuthenticatedUserData = Issue[]; + +export interface IssuesListForAuthenticatedUserParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum15; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: FilterEnum7; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: SortEnum18; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum8; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum IssuesListForAuthenticatedUserParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum IssuesListForAuthenticatedUserParams1FilterEnum { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum IssuesListForAuthenticatedUserParams1SortEnum { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum IssuesListForAuthenticatedUserParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type IssuesListForOrgData = Issue[]; + +export interface IssuesListForOrgParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum3; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: FilterEnum1; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: SortEnum3; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum1; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum IssuesListForOrgParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum IssuesListForOrgParams1FilterEnum { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum IssuesListForOrgParams1SortEnum { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum IssuesListForOrgParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type IssuesListForRepoData = IssueSimple[]; + +export interface IssuesListForRepoParams { + /** Can be the name of a user. Pass in \`none\` for issues with no assigned user, and \`*\` for issues assigned to any user. */ + assignee?: string; + /** The user that created the issue. */ + creator?: string; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum7; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** A user that's mentioned in the issue. */ + mentioned?: string; + /** If an \`integer\` is passed, it should refer to a milestone by its \`number\` field. If the string \`*\` is passed, issues with any milestone are accepted. If the string \`none\` is passed, issues without milestones are returned. */ + milestone?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: SortEnum6; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum3; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum IssuesListForRepoParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum IssuesListForRepoParams1SortEnum { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum IssuesListForRepoParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type IssuesListLabelsForMilestoneData = Label[]; + +export interface IssuesListLabelsForMilestoneParams { + /** milestone_number parameter */ + milestoneNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListLabelsForRepoData = Label[]; + +export interface IssuesListLabelsForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListLabelsOnIssueData = Label[]; + +export interface IssuesListLabelsOnIssueParams { + /** issue_number parameter */ + issueNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type IssuesListMilestonesData = Milestone[]; + +export interface IssuesListMilestonesParams { + /** + * The direction of the sort. Either \`asc\` or \`desc\`. + * @default "asc" + */ + direction?: DirectionEnum9; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** + * What to sort results by. Either \`due_on\` or \`completeness\`. + * @default "due_on" + */ + sort?: SortEnum8; + /** + * The state of the milestone. Either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum4; +} + +/** + * The direction of the sort. Either \`asc\` or \`desc\`. + * @default "asc" + */ +export enum IssuesListMilestonesParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * What to sort results by. Either \`due_on\` or \`completeness\`. + * @default "due_on" + */ +export enum IssuesListMilestonesParams1SortEnum { + DueOn = "due_on", + Completeness = "completeness", +} + +/** + * The state of the milestone. Either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum IssuesListMilestonesParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export interface IssuesListParams { + collab?: boolean; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: FilterEnum; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + orgs?: boolean; + owned?: boolean; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pulls?: boolean; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: SortEnum; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum IssuesListParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ +export enum IssuesListParams1FilterEnum { + Assigned = "assigned", + Created = "created", + Mentioned = "mentioned", + Subscribed = "subscribed", + All = "all", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum IssuesListParams1SortEnum { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum IssuesListParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type IssuesLockData = any; + +/** + * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons: + * \\* \`off-topic\` + * \\* \`too heated\` + * \\* \`resolved\` + * \\* \`spam\` + */ +export enum IssuesLockLockReasonEnum { + OffTopic = "off-topic", + TooHeated = "too heated", + Resolved = "resolved", + Spam = "spam", +} + +export type IssuesLockPayload = { + /** + * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons: + * \\* \`off-topic\` + * \\* \`too heated\` + * \\* \`resolved\` + * \\* \`spam\` + */ + lock_reason?: IssuesLockLockReasonEnum; +} | null; + +export type IssuesRemoveAllLabelsData = any; + +export type IssuesRemoveAssigneesData = IssueSimple; + +export interface IssuesRemoveAssigneesPayload { + /** Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._ */ + assignees?: string[]; +} + +export type IssuesRemoveLabelData = Label[]; + +export type IssuesSetLabelsData = Label[]; + +export interface IssuesSetLabelsPayload { + /** The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a \`string\` or an \`array\` of labels directly, but GitHub recommends passing an object with the \`labels\` key. */ + labels?: string[]; +} + +export type IssuesUnlockData = any; + +export type IssuesUpdateCommentData = IssueComment; + +export interface IssuesUpdateCommentPayload { + /** The contents of the comment. */ + body: string; +} + +export type IssuesUpdateData = Issue; + +export type IssuesUpdateLabelData = Label; + +export interface IssuesUpdateLabelPayload { + /** The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading \`#\`. */ + color?: string; + /** A short description of the label. */ + description?: string; + /** The new name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing \`:strawberry:\` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/). */ + new_name?: string; +} + +export type IssuesUpdateMilestoneData = Milestone; + +export interface IssuesUpdateMilestonePayload { + /** A description of the milestone. */ + description?: string; + /** The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + due_on?: string; + /** + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" + */ + state?: IssuesUpdateMilestoneStateEnum; + /** The title of the milestone. */ + title?: string; +} + +/** + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" + */ +export enum IssuesUpdateMilestoneStateEnum { + Open = "open", + Closed = "closed", +} + +export interface IssuesUpdatePayload { + /** Login for the user that this issue should be assigned to. **This field is deprecated.** */ + assignee?: string | null; + /** Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (\`[]\`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._ */ + assignees?: string[]; + /** The contents of the issue. */ + body?: string; + /** Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (\`[]\`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._ */ + labels?: ( + | string + | { + color?: string | null; + description?: string | null; + id?: number; + name?: string; + } + )[]; + /** The \`number\` of the milestone to associate this issue with or \`null\` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._ */ + milestone?: string | number | null; + /** State of the issue. Either \`open\` or \`closed\`. */ + state?: IssuesUpdateStateEnum; + /** The title of the issue. */ + title?: string | number; +} + +/** State of the issue. Either \`open\` or \`closed\`. */ +export enum IssuesUpdateStateEnum { + Open = "open", + Closed = "closed", +} + +/** + * Job + * Information of a job execution in a workflow run + */ +export interface Job { + /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ + check_run_url: string; + /** + * The time that the job finished, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + completed_at: string | null; + /** + * The outcome of the job. + * @example "success" + */ + conclusion: string | null; + /** + * The SHA of the commit that is being run. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/runs/4" */ + html_url: string | null; + /** + * The id of the job. + * @example 21 + */ + id: number; + /** + * The name of the job. + * @example "test-coverage" + */ + name: string; + /** @example "MDg6Q2hlY2tSdW40" */ + node_id: string; + /** + * The id of the associated workflow run. + * @example 5 + */ + run_id: number; + /** @example "https://api.github.com/repos/github/hello-world/actions/runs/5" */ + run_url: string; + /** + * The time that the job started, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + started_at: string; + /** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ + status: JobStatusEnum; + /** Steps in this job. */ + steps?: { + /** + * The time that the job finished, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + completed_at?: string | null; + /** + * The outcome of the job. + * @example "success" + */ + conclusion: string | null; + /** + * The name of the job. + * @example "test-coverage" + */ + name: string; + /** @example 1 */ + number: number; + /** + * The time that the step started, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + started_at?: string | null; + /** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ + status: JobStatusEnum1; + }[]; + /** @example "https://api.github.com/repos/github/hello-world/actions/jobs/21" */ + url: string; +} + +/** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ +export enum JobStatusEnum { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ +export enum JobStatusEnum1 { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** + * Key + * Key + */ +export interface Key { + /** @format date-time */ + created_at: string; + id: number; + key: string; + key_id: string; + read_only: boolean; + title: string; + url: string; + verified: boolean; +} + +/** + * Key Simple + * Key Simple + */ +export interface KeySimple { + id: number; + key: string; +} + +/** + * Label + * Color-coded labels help you categorize and filter your issues (just like labels in Gmail). + */ +export interface Label { + /** + * 6-character hex code, without the leading #, identifying the color + * @example "FFFFFF" + */ + color: string; + /** @example true */ + default: boolean; + /** @example "Something isn't working" */ + description: string | null; + /** @example 208045946 */ + id: number; + /** + * The name of the label. + * @example "bug" + */ + name: string; + /** @example "MDU6TGFiZWwyMDgwNDU5NDY=" */ + node_id: string; + /** + * URL for the label + * @format uri + * @example "https://api.github.com/repositories/42/labels/bug" + */ + url: string; +} + +/** + * Label Search Result Item + * Label Search Result Item + */ +export interface LabelSearchResultItem { + color: string; + default: boolean; + description: string | null; + id: number; + name: string; + node_id: string; + score: number; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +/** + * Language + * Language + */ +export type Language = Record; + +/** + * License + * License + */ +export interface License { + /** + * @example " + * + * The MIT License (MIT) + * + * Copyright (c) [year] [fullname] + * + * 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. + * " + */ + body: string; + /** @example ["include-copyright"] */ + conditions: string[]; + /** @example "A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty." */ + description: string; + /** @example true */ + featured: boolean; + /** + * @format uri + * @example "http://choosealicense.com/licenses/mit/" + */ + html_url: string; + /** @example "Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders." */ + implementation: string; + /** @example "mit" */ + key: string; + /** @example ["no-liability"] */ + limitations: string[]; + /** @example "MIT License" */ + name: string; + /** @example "MDc6TGljZW5zZW1pdA==" */ + node_id: string; + /** @example ["commercial-use","modifications","distribution","sublicense","private-use"] */ + permissions: string[]; + /** @example "MIT" */ + spdx_id: string | null; + /** + * @format uri + * @example "https://api.github.com/licenses/mit" + */ + url: string | null; +} + +/** + * License Content + * License Content + */ +export interface LicenseContent { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content: string; + /** @format uri */ + download_url: string | null; + encoding: string; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + license: LicenseSimple | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +} + +/** + * License Simple + * License Simple + */ +export interface LicenseSimple { + /** @format uri */ + html_url?: string; + /** @example "mit" */ + key: string; + /** @example "MIT License" */ + name: string; + /** @example "MDc6TGljZW5zZW1pdA==" */ + node_id: string; + /** @example "MIT" */ + spdx_id: string | null; + /** + * @format uri + * @example "https://api.github.com/licenses/mit" + */ + url: string | null; +} + +export type LicensesGetAllCommonlyUsedData = LicenseSimple[]; + +export interface LicensesGetAllCommonlyUsedParams { + featured?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type LicensesGetData = License; + +export type LicensesGetForRepoData = LicenseContent; + +/** + * Link + * Hypermedia Link + */ +export interface Link { + href: string; +} + +/** + * Link With Type + * Hypermedia Link with Type + */ +export interface LinkWithType { + href: string; + type: string; +} + +export type MarkdownRenderData = string; + +/** + * The rendering mode. + * @default "markdown" + * @example "markdown" + */ +export enum MarkdownRenderModeEnum { + Markdown = "markdown", + Gfm = "gfm", +} + +export interface MarkdownRenderPayload { + /** The repository context to use when creating references in \`gfm\` mode. */ + context?: string; + /** + * The rendering mode. + * @default "markdown" + * @example "markdown" + */ + mode?: MarkdownRenderModeEnum; + /** The Markdown text to render in HTML. */ + text: string; +} + +export type MarkdownRenderRawData = string; + +export type MarkdownRenderRawPayload = string; + +/** Marketplace Account */ +export interface MarketplaceAccount { + /** @format email */ + email?: string | null; + id: number; + login: string; + node_id?: string; + /** @format email */ + organization_billing_email?: string | null; + type: string; + /** @format uri */ + url: string; +} + +/** + * Marketplace Listing Plan + * Marketplace Listing Plan + */ +export interface MarketplaceListingPlan { + /** + * @format uri + * @example "https://api.github.com/marketplace_listing/plans/1313/accounts" + */ + accounts_url: string; + /** @example ["Up to 25 private repositories","11 concurrent builds"] */ + bullets: string[]; + /** @example "A professional-grade CI solution" */ + description: string; + /** @example true */ + has_free_trial: boolean; + /** @example 1313 */ + id: number; + /** @example 1099 */ + monthly_price_in_cents: number; + /** @example "Pro" */ + name: string; + /** @example 3 */ + number: number; + /** @example "flat-rate" */ + price_model: string; + /** @example "published" */ + state: string; + unit_name: string | null; + /** + * @format uri + * @example "https://api.github.com/marketplace_listing/plans/1313" + */ + url: string; + /** @example 11870 */ + yearly_price_in_cents: number; +} + +/** + * Marketplace Purchase + * Marketplace Purchase + */ +export interface MarketplacePurchase { + id: number; + login: string; + marketplace_pending_change?: { + effective_date?: string; + id?: number; + is_installed?: boolean; + /** Marketplace Listing Plan */ + plan?: MarketplaceListingPlan; + unit_count?: number | null; + }; + marketplace_purchase: { + billing_cycle?: string; + free_trial_ends_on?: string | null; + is_installed?: boolean; + next_billing_date?: string | null; + on_free_trial?: boolean; + /** Marketplace Listing Plan */ + plan?: MarketplaceListingPlan; + unit_count?: number | null; + updated_at?: string; + }; + organization_billing_email?: string; + type: string; + url: string; +} + +export type MetaGetData = ApiOverview; + +export type MetaGetOctocatData = string; + +export interface MetaGetOctocatParams { + /** The words to show in Octocat's speech bubble */ + s?: string; +} + +export type MetaGetZenData = string; + +export interface MetaRootData { + /** @format uri */ + authorizations_url: string; + /** @format uri */ + code_search_url: string; + /** @format uri */ + commit_search_url: string; + /** @format uri */ + current_user_authorizations_html_url: string; + /** @format uri */ + current_user_repositories_url: string; + /** @format uri */ + current_user_url: string; + /** @format uri */ + emails_url: string; + /** @format uri */ + emojis_url: string; + /** @format uri */ + events_url: string; + /** @format uri */ + feeds_url: string; + /** @format uri */ + followers_url: string; + /** @format uri */ + following_url: string; + /** @format uri */ + gists_url: string; + /** @format uri */ + hub_url: string; + /** @format uri */ + issue_search_url: string; + /** @format uri */ + issues_url: string; + /** @format uri */ + keys_url: string; + /** @format uri */ + label_search_url: string; + /** @format uri */ + notifications_url: string; + /** @format uri */ + organization_repositories_url: string; + /** @format uri */ + organization_teams_url: string; + /** @format uri */ + organization_url: string; + /** @format uri */ + public_gists_url: string; + /** @format uri */ + rate_limit_url: string; + /** @format uri */ + repository_search_url: string; + /** @format uri */ + repository_url: string; + /** @format uri */ + starred_gists_url: string; + /** @format uri */ + starred_url: string; + /** @format uri */ + topic_search_url?: string; + /** @format uri */ + user_organizations_url: string; + /** @format uri */ + user_repositories_url: string; + /** @format uri */ + user_search_url: string; + /** @format uri */ + user_url: string; +} + +/** + * Migration + * A migration. + */ +export interface Migration { + /** @format uri */ + archive_url?: string; + /** + * @format date-time + * @example "2015-07-06T15:33:38-07:00" + */ + created_at: string; + exclude?: any[]; + exclude_attachments: boolean; + /** @example "0b989ba4-242f-11e5-81e1-c7b6966d2516" */ + guid: string; + /** @example 79 */ + id: number; + /** @example true */ + lock_repositories: boolean; + node_id: string; + owner: SimpleUser | null; + repositories: Repository[]; + /** @example "pending" */ + state: string; + /** + * @format date-time + * @example "2015-07-06T15:33:38-07:00" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octo-org/migrations/79" + */ + url: string; +} + +export type MigrationsCancelImportData = any; + +export type MigrationsDeleteArchiveForAuthenticatedUserData = any; + +export type MigrationsDeleteArchiveForOrgData = any; + +export type MigrationsGetCommitAuthorsData = PorterAuthor[]; + +export interface MigrationsGetCommitAuthorsParams { + owner: string; + repo: string; + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; +} + +export type MigrationsGetImportStatusData = Import; + +export type MigrationsGetLargeFilesData = PorterLargeFile[]; + +export type MigrationsGetStatusForAuthenticatedUserData = Migration; + +export interface MigrationsGetStatusForAuthenticatedUserParams { + exclude?: string[]; + /** migration_id parameter */ + migrationId: number; +} + +export type MigrationsGetStatusForOrgData = Migration; + +export type MigrationsListForAuthenticatedUserData = Migration[]; + +export interface MigrationsListForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type MigrationsListForOrgData = Migration[]; + +export interface MigrationsListForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type MigrationsListReposForOrgData = MinimalRepository[]; + +export interface MigrationsListReposForOrgParams { + /** migration_id parameter */ + migrationId: number; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type MigrationsListReposForUserData = MinimalRepository[]; + +export interface MigrationsListReposForUserParams { + /** migration_id parameter */ + migrationId: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type MigrationsMapCommitAuthorData = PorterAuthor; + +export interface MigrationsMapCommitAuthorPayload { + /** The new Git author email. */ + email?: string; + /** The new Git author name. */ + name?: string; + /** @example ""can't touch this"" */ + remote_id?: string; +} + +export type MigrationsSetLfsPreferenceData = Import; + +export interface MigrationsSetLfsPreferencePayload { + /** Can be one of \`opt_in\` (large files will be stored using Git LFS) or \`opt_out\` (large files will be removed during the import). */ + use_lfs: MigrationsSetLfsPreferenceUseLfsEnum; +} + +/** Can be one of \`opt_in\` (large files will be stored using Git LFS) or \`opt_out\` (large files will be removed during the import). */ +export enum MigrationsSetLfsPreferenceUseLfsEnum { + OptIn = "opt_in", + OptOut = "opt_out", +} + +export type MigrationsStartForAuthenticatedUserData = Migration; + +/** + * Allowed values that can be passed to the exclude param. + * @example "repositories" + */ +export enum MigrationsStartForAuthenticatedUserExcludeEnum { + Repositories = "repositories", +} + +export interface MigrationsStartForAuthenticatedUserPayload { + /** + * Exclude attributes from the API response to improve performance + * @example ["repositories"] + */ + exclude?: MigrationsStartForAuthenticatedUserExcludeEnum[]; + /** + * Do not include attachments in the migration + * @example true + */ + exclude_attachments?: boolean; + /** + * Lock the repositories being migrated at the start of the migration + * @example true + */ + lock_repositories?: boolean; + repositories: string[]; +} + +export type MigrationsStartForOrgData = Migration; + +export interface MigrationsStartForOrgPayload { + exclude?: string[]; + /** + * Indicates whether attachments should be excluded from the migration (to reduce migration archive file size). + * @default false + */ + exclude_attachments?: boolean; + /** + * Indicates whether repositories should be locked (to prevent manipulation) while migrating data. + * @default false + */ + lock_repositories?: boolean; + /** A list of arrays indicating which repositories should be migrated. */ + repositories: string[]; +} + +export type MigrationsStartImportData = Import; + +export interface MigrationsStartImportPayload { + /** For a tfvc import, the name of the project that is being imported. */ + tfvc_project?: string; + /** The originating VCS type. Can be one of \`subversion\`, \`git\`, \`mercurial\`, or \`tfvc\`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response. */ + vcs?: MigrationsStartImportVcsEnum; + /** If authentication is required, the password to provide to \`vcs_url\`. */ + vcs_password?: string; + /** The URL of the originating repository. */ + vcs_url: string; + /** If authentication is required, the username to provide to \`vcs_url\`. */ + vcs_username?: string; +} + +/** The originating VCS type. Can be one of \`subversion\`, \`git\`, \`mercurial\`, or \`tfvc\`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response. */ +export enum MigrationsStartImportVcsEnum { + Subversion = "subversion", + Git = "git", + Mercurial = "mercurial", + Tfvc = "tfvc", +} + +export type MigrationsUnlockRepoForAuthenticatedUserData = any; + +export type MigrationsUnlockRepoForOrgData = any; + +export type MigrationsUpdateImportData = Import; + +export interface MigrationsUpdateImportPayload { + /** @example ""project1"" */ + tfvc_project?: string; + /** @example ""git"" */ + vcs?: string; + /** The password to provide to the originating repository. */ + vcs_password?: string; + /** The username to provide to the originating repository. */ + vcs_username?: string; +} + +/** + * Milestone + * A collection of related issues and pull requests. + */ +export interface Milestone { + /** + * @format date-time + * @example "2013-02-12T13:22:01Z" + */ + closed_at: string | null; + /** @example 8 */ + closed_issues: number; + /** + * @format date-time + * @example "2011-04-10T20:09:31Z" + */ + created_at: string; + creator: SimpleUser | null; + /** @example "Tracking milestone for version 1.0" */ + description: string | null; + /** + * @format date-time + * @example "2012-10-09T23:39:01Z" + */ + due_on: string | null; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/milestones/v1.0" + */ + html_url: string; + /** @example 1002604 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1/labels" + */ + labels_url: string; + /** @example "MDk6TWlsZXN0b25lMTAwMjYwNA==" */ + node_id: string; + /** + * The number of the milestone. + * @example 42 + */ + number: number; + /** @example 4 */ + open_issues: number; + /** + * The state of the milestone. + * @default "open" + * @example "open" + */ + state: MilestoneStateEnum; + /** + * The title of the milestone. + * @example "v1.0" + */ + title: string; + /** + * @format date-time + * @example "2014-03-03T18:58:10Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1" + */ + url: string; +} + +/** + * The state of the milestone. + * @default "open" + * @example "open" + */ +export enum MilestoneStateEnum { + Open = "open", + Closed = "closed", +} + +/** + * Minimal Repository + * Minimal Repository + */ +export interface MinimalRepository { + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + archived?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + clone_url?: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at?: string | null; + default_branch?: string; + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + disabled?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + /** @example 0 */ + forks?: number; + forks_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + git_url?: string; + has_downloads?: boolean; + has_issues?: boolean; + has_pages?: boolean; + has_projects?: boolean; + has_wiki?: boolean; + homepage?: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** @example 1296269 */ + id: number; + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language?: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license?: { + key?: string; + name?: string; + node_id?: string; + spdx_id?: string; + url?: string; + } | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + mirror_url?: string | null; + /** @example "Hello-World" */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + /** @example 0 */ + open_issues?: number; + open_issues_count?: number; + owner: SimpleUser | null; + permissions?: { + admin?: boolean; + pull?: boolean; + push?: boolean; + }; + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at?: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + size?: number; + ssh_url?: string; + stargazers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + svn_url?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: Repository | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at?: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + visibility?: string; + /** @example 0 */ + watchers?: number; + watchers_count?: number; +} + +/** Moved Permanently */ +export type MovedPermanently = any; + +/** Resource Not Found */ +export type NotFound = BasicError; + +/** Not Modified */ +export type NotModified = any; + +export type OauthAuthorizationsCreateAuthorizationData = Authorization; + +export interface OauthAuthorizationsCreateAuthorizationPayload { + /** + * The OAuth app client key for which to create the token. + * @maxLength 20 + */ + client_id?: string; + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret?: string; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; +} + +export type OauthAuthorizationsDeleteAuthorizationData = any; + +export type OauthAuthorizationsDeleteGrantData = any; + +export type OauthAuthorizationsGetAuthorizationData = Authorization; + +export type OauthAuthorizationsGetGrantData = ApplicationGrant; + +export type OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintData = Authorization; + +export interface OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintPayload { + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; +} + +export type OauthAuthorizationsGetOrCreateAuthorizationForAppData = Authorization; + +export interface OauthAuthorizationsGetOrCreateAuthorizationForAppPayload { + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret: string; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; +} + +export type OauthAuthorizationsListAuthorizationsData = Authorization[]; + +export interface OauthAuthorizationsListAuthorizationsParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OauthAuthorizationsListGrantsData = ApplicationGrant[]; + +export interface OauthAuthorizationsListGrantsParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OauthAuthorizationsUpdateAuthorizationData = Authorization; + +export interface OauthAuthorizationsUpdateAuthorizationPayload { + /** A list of scopes to add to this authorization. */ + add_scopes?: string[]; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** A list of scopes to remove from this authorization. */ + remove_scopes?: string[]; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; +} + +/** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ +export enum OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ +export enum OrderEnum1 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum2 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum3 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum4 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum5 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum6 { + Desc = "desc", + Asc = "asc", +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum OrderEnum7 { + Desc = "desc", + Asc = "asc", +} + +/** + * Org Hook + * Org Hook + */ +export interface OrgHook { + /** @example true */ + active: boolean; + config: { + /** @example ""form"" */ + content_type?: string; + /** @example ""0"" */ + insecure_ssl?: string; + /** @example ""********"" */ + secret?: string; + /** @example ""http://example.com/2"" */ + url?: string; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** @example ["push","pull_request"] */ + events: string[]; + /** @example 1 */ + id: number; + /** @example "web" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/hooks/1/pings" + */ + ping_url: string; + type: string; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/hooks/1" + */ + url: string; +} + +/** + * Org Membership + * Org Membership + */ +export interface OrgMembership { + /** Organization Simple */ + organization: OrganizationSimple; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat" + */ + organization_url: string; + permissions?: { + can_create_repository: boolean; + }; + /** @example "admin" */ + role: string; + /** @example "active" */ + state: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/memberships/defunkt" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Actions Secret for an Organization + * Secrets for GitHub Actions for an organization. + */ +export interface OrganizationActionsSecret { + /** @format date-time */ + created_at: string; + /** + * The name of the secret. + * @example "SECRET_TOKEN" + */ + name: string; + /** + * @format uri + * @example "https://api.github.com/organizations/org/secrets/my_secret/repositories" + */ + selected_repositories_url?: string; + /** @format date-time */ + updated_at: string; + /** Visibility of a secret */ + visibility: OrganizationActionsSecretVisibilityEnum; +} + +/** Visibility of a secret */ +export enum OrganizationActionsSecretVisibilityEnum { + All = "all", + Private = "private", + Selected = "selected", +} + +/** + * Organization Full + * Organization Full + */ +export interface OrganizationFull { + /** @example "https://github.com/images/error/octocat_happy.gif" */ + avatar_url: string; + /** + * @format email + * @example "org@example.com" + */ + billing_email?: string | null; + /** + * @format uri + * @example "https://github.com/blog" + */ + blog?: string; + /** @example 8 */ + collaborators?: number | null; + /** @example "GitHub" */ + company?: string; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + created_at: string; + default_repository_permission?: string | null; + /** @example "A great organization" */ + description: string | null; + /** @example 10000 */ + disk_usage?: number | null; + /** + * @format email + * @example "octocat@github.com" + */ + email?: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github/events" + */ + events_url: string; + /** @example 20 */ + followers: number; + /** @example 0 */ + following: number; + /** @example true */ + has_organization_projects: boolean; + /** @example true */ + has_repository_projects: boolean; + /** @example "https://api.github.com/orgs/github/hooks" */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example true */ + is_verified?: boolean; + /** @example "https://api.github.com/orgs/github/issues" */ + issues_url: string; + /** @example "San Francisco" */ + location?: string; + /** @example "github" */ + login: string; + /** @example "all" */ + members_allowed_repository_creation_type?: string; + /** @example true */ + members_can_create_internal_repositories?: boolean; + /** @example true */ + members_can_create_pages?: boolean; + /** @example true */ + members_can_create_private_repositories?: boolean; + /** @example true */ + members_can_create_public_repositories?: boolean; + /** @example true */ + members_can_create_repositories?: boolean | null; + /** @example "https://api.github.com/orgs/github/members{/member}" */ + members_url: string; + /** @example "github" */ + name?: string; + /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ + node_id: string; + /** @example 100 */ + owned_private_repos?: number; + plan?: { + filled_seats?: number; + name: string; + private_repos: number; + seats?: number; + space: number; + }; + /** @example 81 */ + private_gists?: number | null; + /** @example 1 */ + public_gists: number; + /** @example "https://api.github.com/orgs/github/public_members{/member}" */ + public_members_url: string; + /** @example 2 */ + public_repos: number; + /** + * @format uri + * @example "https://api.github.com/orgs/github/repos" + */ + repos_url: string; + /** @example 100 */ + total_private_repos?: number; + /** @example "github" */ + twitter_username?: string | null; + /** @example true */ + two_factor_requirement_enabled?: boolean | null; + /** @example "Organization" */ + type: string; + /** @format date-time */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github" + */ + url: string; +} + +/** + * Organization Invitation + * Organization Invitation + */ +export interface OrganizationInvitation { + created_at: string; + email: string | null; + failed_at?: string; + failed_reason?: string; + id: number; + invitation_team_url: string; + /** @example ""https://api.github.com/organizations/16/invitations/1/teams"" */ + invitation_teams_url?: string; + /** Simple User */ + inviter: SimpleUser; + login: string | null; + /** @example ""MDIyOk9yZ2FuaXphdGlvbkludml0YXRpb24x"" */ + node_id: string; + role: string; + team_count: number; +} + +/** + * Organization Simple + * Organization Simple + */ +export interface OrganizationSimple { + /** @example "https://github.com/images/error/octocat_happy.gif" */ + avatar_url: string; + /** @example "A great organization" */ + description: string | null; + /** + * @format uri + * @example "https://api.github.com/orgs/github/events" + */ + events_url: string; + /** @example "https://api.github.com/orgs/github/hooks" */ + hooks_url: string; + /** @example 1 */ + id: number; + /** @example "https://api.github.com/orgs/github/issues" */ + issues_url: string; + /** @example "github" */ + login: string; + /** @example "https://api.github.com/orgs/github/members{/member}" */ + members_url: string; + /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ + node_id: string; + /** @example "https://api.github.com/orgs/github/public_members{/member}" */ + public_members_url: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github/repos" + */ + repos_url: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github" + */ + url: string; +} + +export type OrgsBlockUserData = any; + +export type OrgsCancelInvitationData = any; + +export type OrgsCheckBlockedUserData = any; + +export type OrgsCheckBlockedUserError = BasicError; + +export type OrgsCheckMembershipForUserData = any; + +export type OrgsCheckPublicMembershipForUserData = any; + +export type OrgsConvertMemberToOutsideCollaboratorData = any; + +export type OrgsConvertMemberToOutsideCollaboratorError = { + documentation_url?: string; + message?: string; +}; + +export type OrgsCreateInvitationData = OrganizationInvitation; + +export interface OrgsCreateInvitationPayload { + /** **Required unless you provide \`invitee_id\`**. Email address of the person you are inviting, which can be an existing GitHub user. */ + email?: string; + /** **Required unless you provide \`email\`**. GitHub user ID for the person you are inviting. */ + invitee_id?: number; + /** + * Specify role for new member. Can be one of: + * \\* \`admin\` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams. + * \\* \`direct_member\` - Non-owner organization members with ability to see other members and join teams by invitation. + * \\* \`billing_manager\` - Non-owner organization members with ability to manage the billing settings of your organization. + * @default "direct_member" + */ + role?: OrgsCreateInvitationRoleEnum; + /** Specify IDs for the teams you want to invite new members to. */ + team_ids?: number[]; +} + +/** + * Specify role for new member. Can be one of: + * \\* \`admin\` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams. + * \\* \`direct_member\` - Non-owner organization members with ability to see other members and join teams by invitation. + * \\* \`billing_manager\` - Non-owner organization members with ability to manage the billing settings of your organization. + * @default "direct_member" + */ +export enum OrgsCreateInvitationRoleEnum { + Admin = "admin", + DirectMember = "direct_member", + BillingManager = "billing_manager", +} + +export type OrgsCreateWebhookData = OrgHook; + +export interface OrgsCreateWebhookPayload { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/orgs#create-hook-config-params). */ + config: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** @example ""password"" */ + password?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + /** @example ""kdaigle"" */ + username?: string; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * @default ["push"] + */ + events?: string[]; + /** Must be passed as "web". */ + name: string; +} + +export type OrgsDeleteWebhookData = any; + +export type OrgsGetAuditLogData = AuditLogEvent[]; + +export interface OrgsGetAuditLogParams { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: IncludeEnum1; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: OrderEnum1; + org: string; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; +} + +/** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ +export enum OrgsGetAuditLogParams1IncludeEnum { + Web = "web", + Git = "git", + All = "all", +} + +/** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ +export enum OrgsGetAuditLogParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +export type OrgsGetData = OrganizationFull; + +export type OrgsGetMembershipForAuthenticatedUserData = OrgMembership; + +export type OrgsGetMembershipForUserData = OrgMembership; + +export type OrgsGetWebhookConfigForOrgData = WebhookConfig; + +export type OrgsGetWebhookData = OrgHook; + +export interface OrgsListAppInstallationsData { + installations: Installation[]; + total_count: number; +} + +export interface OrgsListAppInstallationsParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListBlockedUsersData = SimpleUser[]; + +export type OrgsListData = OrganizationSimple[]; + +export type OrgsListFailedInvitationsData = OrganizationInvitation[]; + +export interface OrgsListFailedInvitationsParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListForAuthenticatedUserData = OrganizationSimple[]; + +export interface OrgsListForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListForUserData = OrganizationSimple[]; + +export interface OrgsListForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type OrgsListInvitationTeamsData = Team[]; + +export interface OrgsListInvitationTeamsParams { + /** invitation_id parameter */ + invitationId: number; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListMembersData = SimpleUser[]; + +export interface OrgsListMembersParams { + /** + * Filter members returned in the list. Can be one of: + * \\* \`2fa_disabled\` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. + * \\* \`all\` - All members the authenticated user can see. + * @default "all" + */ + filter?: FilterEnum2; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filter members returned by their role. Can be one of: + * \\* \`all\` - All members of the organization, regardless of role. + * \\* \`admin\` - Organization owners. + * \\* \`member\` - Non-owner organization members. + * @default "all" + */ + role?: RoleEnum; +} + +/** + * Filter members returned in the list. Can be one of: + * \\* \`2fa_disabled\` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. + * \\* \`all\` - All members the authenticated user can see. + * @default "all" + */ +export enum OrgsListMembersParams1FilterEnum { + Value2FaDisabled = "2fa_disabled", + All = "all", +} + +/** + * Filter members returned by their role. Can be one of: + * \\* \`all\` - All members of the organization, regardless of role. + * \\* \`admin\` - Organization owners. + * \\* \`member\` - Non-owner organization members. + * @default "all" + */ +export enum OrgsListMembersParams1RoleEnum { + All = "all", + Admin = "admin", + Member = "member", +} + +export type OrgsListMembershipsForAuthenticatedUserData = OrgMembership[]; + +export interface OrgsListMembershipsForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Indicates the state of the memberships to return. Can be either \`active\` or \`pending\`. If not specified, the API returns both active and pending memberships. */ + state?: StateEnum9; +} + +/** Indicates the state of the memberships to return. Can be either \`active\` or \`pending\`. If not specified, the API returns both active and pending memberships. */ +export enum OrgsListMembershipsForAuthenticatedUserParams1StateEnum { + Active = "active", + Pending = "pending", +} + +export type OrgsListOutsideCollaboratorsData = SimpleUser[]; + +export interface OrgsListOutsideCollaboratorsParams { + /** + * Filter the list of outside collaborators. Can be one of: + * \\* \`2fa_disabled\`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. + * \\* \`all\`: All outside collaborators. + * @default "all" + */ + filter?: FilterEnum3; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +/** + * Filter the list of outside collaborators. Can be one of: + * \\* \`2fa_disabled\`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. + * \\* \`all\`: All outside collaborators. + * @default "all" + */ +export enum OrgsListOutsideCollaboratorsParams1FilterEnum { + Value2FaDisabled = "2fa_disabled", + All = "all", +} + +export interface OrgsListParams { + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** An organization ID. Only return organizations with an ID greater than this ID. */ + since?: number; +} + +export type OrgsListPendingInvitationsData = OrganizationInvitation[]; + +export interface OrgsListPendingInvitationsParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListPublicMembersData = SimpleUser[]; + +export interface OrgsListPublicMembersParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsListSamlSsoAuthorizationsData = CredentialAuthorization[]; + +export type OrgsListWebhooksData = OrgHook[]; + +export interface OrgsListWebhooksParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type OrgsPingWebhookData = any; + +export type OrgsRemoveMemberData = any; + +export type OrgsRemoveMembershipForUserData = any; + +export type OrgsRemoveOutsideCollaboratorData = any; + +export type OrgsRemoveOutsideCollaboratorError = { + documentation_url?: string; + message?: string; +}; + +export type OrgsRemovePublicMembershipForAuthenticatedUserData = any; + +export type OrgsRemoveSamlSsoAuthorizationData = any; + +export type OrgsSetMembershipForUserData = OrgMembership; + +export interface OrgsSetMembershipForUserPayload { + /** + * The role to give the user in the organization. Can be one of: + * \\* \`admin\` - The user will become an owner of the organization. + * \\* \`member\` - The user will become a non-owner member of the organization. + * @default "member" + */ + role?: OrgsSetMembershipForUserRoleEnum; +} + +/** + * The role to give the user in the organization. Can be one of: + * \\* \`admin\` - The user will become an owner of the organization. + * \\* \`member\` - The user will become a non-owner member of the organization. + * @default "member" + */ +export enum OrgsSetMembershipForUserRoleEnum { + Admin = "admin", + Member = "member", +} + +export type OrgsSetPublicMembershipForAuthenticatedUserData = any; + +export type OrgsUnblockUserData = any; + +export type OrgsUpdateData = OrganizationFull; + +/** + * Default permission level members have for organization repositories: + * \\* \`read\` - can pull, but not push to or administer this repository. + * \\* \`write\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push, and administer this repository. + * \\* \`none\` - no permissions granted by default. + * @default "read" + */ +export enum OrgsUpdateDefaultRepositoryPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", + None = "none", +} + +export type OrgsUpdateError = ValidationError | ValidationErrorSimple; + +/** + * Specifies which types of repositories non-admin organization members can create. Can be one of: + * \\* \`all\` - all organization members can create public and private repositories. + * \\* \`private\` - members can create private repositories. This option is only available to repositories that are part of an organization on GitHub Enterprise Cloud. + * \\* \`none\` - only admin members can create repositories. + * **Note:** This parameter is deprecated and will be removed in the future. Its return value ignores internal repositories. Using this parameter overrides values set in \`members_can_create_repositories\`. See the parameter deprecation notice in the operation description for details. + */ +export enum OrgsUpdateMembersAllowedRepositoryCreationTypeEnum { + All = "all", + Private = "private", + None = "none", +} + +export type OrgsUpdateMembershipForAuthenticatedUserData = OrgMembership; + +export interface OrgsUpdateMembershipForAuthenticatedUserPayload { + /** The state that the membership should be in. Only \`"active"\` will be accepted. */ + state: OrgsUpdateMembershipForAuthenticatedUserStateEnum; +} + +/** The state that the membership should be in. Only \`"active"\` will be accepted. */ +export enum OrgsUpdateMembershipForAuthenticatedUserStateEnum { + Active = "active", +} + +export interface OrgsUpdatePayload { + /** Billing email address. This address is not publicized. */ + billing_email?: string; + /** @example ""http://github.blog"" */ + blog?: string; + /** The company name. */ + company?: string; + /** + * Default permission level members have for organization repositories: + * \\* \`read\` - can pull, but not push to or administer this repository. + * \\* \`write\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push, and administer this repository. + * \\* \`none\` - no permissions granted by default. + * @default "read" + */ + default_repository_permission?: OrgsUpdateDefaultRepositoryPermissionEnum; + /** The description of the company. */ + description?: string; + /** The publicly visible email address. */ + email?: string; + /** Toggles whether an organization can use organization projects. */ + has_organization_projects?: boolean; + /** Toggles whether repositories that belong to the organization can use repository projects. */ + has_repository_projects?: boolean; + /** The location. */ + location?: string; + /** + * Specifies which types of repositories non-admin organization members can create. Can be one of: + * \\* \`all\` - all organization members can create public and private repositories. + * \\* \`private\` - members can create private repositories. This option is only available to repositories that are part of an organization on GitHub Enterprise Cloud. + * \\* \`none\` - only admin members can create repositories. + * **Note:** This parameter is deprecated and will be removed in the future. Its return value ignores internal repositories. Using this parameter overrides values set in \`members_can_create_repositories\`. See the parameter deprecation notice in the operation description for details. + */ + members_allowed_repository_creation_type?: OrgsUpdateMembersAllowedRepositoryCreationTypeEnum; + /** + * Toggles whether organization members can create internal repositories, which are visible to all enterprise members. You can only allow members to create internal repositories if your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. Can be one of: + * \\* \`true\` - all organization members can create internal repositories. + * \\* \`false\` - only organization owners can create internal repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_internal_repositories?: boolean; + /** + * Toggles whether organization members can create GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create GitHub Pages sites. + * \\* \`false\` - no organization members can create GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_pages?: boolean; + /** + * Toggles whether organization members can create private GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create private GitHub Pages sites. + * \\* \`false\` - no organization members can create private GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_private_pages?: boolean; + /** + * Toggles whether organization members can create private repositories, which are visible to organization members with permission. Can be one of: + * \\* \`true\` - all organization members can create private repositories. + * \\* \`false\` - only organization owners can create private repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_private_repositories?: boolean; + /** + * Toggles whether organization members can create public GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create public GitHub Pages sites. + * \\* \`false\` - no organization members can create public GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_public_pages?: boolean; + /** + * Toggles whether organization members can create public repositories, which are visible to anyone. Can be one of: + * \\* \`true\` - all organization members can create public repositories. + * \\* \`false\` - only organization owners can create public repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_public_repositories?: boolean; + /** + * Toggles the ability of non-admin organization members to create repositories. Can be one of: + * \\* \`true\` - all organization members can create repositories. + * \\* \`false\` - only organization owners can create repositories. + * Default: \`true\` + * **Note:** A parameter can override this parameter. See \`members_allowed_repository_creation_type\` in this table for details. **Note:** A parameter can override this parameter. See \`members_allowed_repository_creation_type\` in this table for details. + * @default true + */ + members_can_create_repositories?: boolean; + /** The shorthand name of the company. */ + name?: string; + /** The Twitter username of the company. */ + twitter_username?: string; +} + +export type OrgsUpdateWebhookConfigForOrgData = WebhookConfig; + +/** @example {"content_type":"json","insecure_ssl":"0","secret":"********","url":"https://example.com/webhook"} */ +export interface OrgsUpdateWebhookConfigForOrgPayload { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; +} + +export type OrgsUpdateWebhookData = OrgHook; + +export interface OrgsUpdateWebhookPayload { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/orgs#update-hook-config-params). */ + config?: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * @default ["push"] + */ + events?: string[]; + /** @example ""web"" */ + name?: string; +} + +export interface PackagesBillingUsage { + /** Free storage space (GB) for GitHub Packages. */ + included_gigabytes_bandwidth: number; + /** Sum of the free and paid storage space (GB) for GitHuub Packages. */ + total_gigabytes_bandwidth_used: number; + /** Total paid storage space (GB) for GitHuub Packages. */ + total_paid_gigabytes_bandwidth_used: number; +} + +/** + * GitHub Pages + * The configuration for GitHub Pages for a repository. + */ +export interface Page { + /** + * Whether the Page has a custom 404 page. + * @default false + * @example false + */ + custom_404: boolean; + /** + * The Pages site's custom domain + * @example "example.com" + */ + cname: string | null; + /** + * The web address the Page can be accessed from. + * @format uri + * @example "https://example.com" + */ + html_url?: string; + /** + * Whether the GitHub Pages site is publicly visible. If set to \`true\`, the site is accessible to anyone on the internet. If set to \`false\`, the site will only be accessible to users who have at least \`read\` access to the repository that published the site. + * @example true + */ + public: boolean; + source?: PagesSourceHash; + /** + * The status of the most recent build of the Page. + * @example "built" + */ + status: PageStatusEnum; + /** + * The API address for accessing this Page resource. + * @format uri + * @example "https://api.github.com/repos/github/hello-world/pages" + */ + url: string; +} + +/** + * Page Build + * Page Build + */ +export interface PageBuild { + commit: string; + /** @format date-time */ + created_at: string; + duration: number; + error: { + message: string | null; + }; + pusher: SimpleUser | null; + status: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Page Build Status + * Page Build Status + */ +export interface PageBuildStatus { + /** @example "queued" */ + status: string; + /** + * @format uri + * @example "https://api.github.com/repos/github/hello-world/pages/builds/latest" + */ + url: string; +} + +/** + * The status of the most recent build of the Page. + * @example "built" + */ +export enum PageStatusEnum { + Built = "built", + Building = "building", + Errored = "errored", +} + +/** Pages Source Hash */ +export interface PagesSourceHash { + branch: string; + path: string; +} + +/** Participation Stats */ +export interface ParticipationStats { + all: number[]; + owner: number[]; +} + +/** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ +export enum PerEnum { + Day = "day", + Week = "week", +} + +/** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ +export enum PerEnum1 { + Day = "day", + Week = "week", +} + +/** + * Porter Author + * Porter Author + */ +export interface PorterAuthor { + email: string; + id: number; + /** @format uri */ + import_url: string; + name: string; + remote_id: string; + remote_name: string; + /** @format uri */ + url: string; +} + +/** + * Porter Large File + * Porter Large File + */ +export interface PorterLargeFile { + oid: string; + path: string; + ref_name: string; + size: number; +} + +/** Preview Header Missing */ +export interface PreviewHeaderMissing { + documentation_url: string; + message: string; +} + +/** + * Private User + * Private User + */ +export interface PrivateUser { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "There once was..." */ + bio: string | null; + /** @example "https://github.com/blog" */ + blog: string | null; + business_plus?: boolean; + /** @example 8 */ + collaborators: number; + /** @example "GitHub" */ + company: string | null; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + created_at: string; + /** @example 10000 */ + disk_usage: number; + /** + * @format email + * @example "octocat@github.com" + */ + email: string | null; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** @example 20 */ + followers: number; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example 0 */ + following: number; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + hireable: boolean | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + ldap_dn?: string; + /** @example "San Francisco" */ + location: string | null; + /** @example "octocat" */ + login: string; + /** @example "monalisa octocat" */ + name: string | null; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + /** @example 100 */ + owned_private_repos: number; + plan?: { + collaborators: number; + name: string; + private_repos: number; + space: number; + }; + /** @example 81 */ + private_gists: number; + /** @example 1 */ + public_gists: number; + /** @example 2 */ + public_repos: number; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + /** @example 100 */ + total_private_repos: number; + /** @example "monalisa" */ + twitter_username?: string | null; + /** @example true */ + two_factor_authentication: boolean; + /** @example "User" */ + type: string; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +} + +/** + * Project + * Projects are a way to organize columns and cards of work. + */ +export interface Project { + /** + * Body of the project + * @example "This project represents the sprint of the first week in January" + */ + body: string | null; + /** + * @format uri + * @example "https://api.github.com/projects/1002604/columns" + */ + columns_url: string; + /** + * @format date-time + * @example "2011-04-10T20:09:31Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * @format uri + * @example "https://github.com/api-playground/projects-test/projects/12" + */ + html_url: string; + /** @example 1002604 */ + id: number; + /** + * Name of the project + * @example "Week One Sprint" + */ + name: string; + /** @example "MDc6UHJvamVjdDEwMDI2MDQ=" */ + node_id: string; + /** @example 1 */ + number: number; + /** The baseline permission that all organization members have on this project. Only present if owner is an organization. */ + organization_permission?: ProjectOrganizationPermissionEnum; + /** + * @format uri + * @example "https://api.github.com/repos/api-playground/projects-test" + */ + owner_url: string; + /** Whether or not this project can be seen by everyone. Only present if owner is an organization. */ + private?: boolean; + /** + * State of the project; either 'open' or 'closed' + * @example "open" + */ + state: string; + /** + * @format date-time + * @example "2014-03-03T18:58:10Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/1002604" + */ + url: string; +} + +/** + * Project Card + * Project cards represent a scope of work. + */ +export interface ProjectCard { + /** + * Whether or not the card is archived + * @example false + */ + archived?: boolean; + /** + * @format uri + * @example "https://api.github.com/projects/columns/367" + */ + column_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/api-playground/projects-test/issues/3" + */ + content_url?: string; + /** + * @format date-time + * @example "2016-09-05T14:21:06Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * The project card's ID + * @example 42 + */ + id: number; + /** @example "MDExOlByb2plY3RDYXJkMTQ3OA==" */ + node_id: string; + /** @example "Add payload for delete Project column" */ + note: string | null; + /** + * @format uri + * @example "https://api.github.com/projects/120" + */ + project_url: string; + /** + * @format date-time + * @example "2016-09-05T14:20:22Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/columns/cards/1478" + */ + url: string; +} + +/** + * Project Column + * Project columns contain cards of work. + */ +export interface ProjectColumn { + /** + * @format uri + * @example "https://api.github.com/projects/columns/367/cards" + */ + cards_url: string; + /** + * @format date-time + * @example "2016-09-05T14:18:44Z" + */ + created_at: string; + /** + * The unique identifier of the project column + * @example 42 + */ + id: number; + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; + /** @example "MDEzOlByb2plY3RDb2x1bW4zNjc=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/projects/120" + */ + project_url: string; + /** + * @format date-time + * @example "2016-09-05T14:22:28Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/columns/367" + */ + url: string; +} + +/** The baseline permission that all organization members have on this project. Only present if owner is an organization. */ +export enum ProjectOrganizationPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", + None = "none", +} + +export type ProjectsAddCollaboratorData = any; + +export interface ProjectsAddCollaboratorPayload { + /** + * The permission to grant the collaborator. + * @default "write" + * @example "write" + */ + permission?: ProjectsAddCollaboratorPermissionEnum; +} + +/** + * The permission to grant the collaborator. + * @default "write" + * @example "write" + */ +export enum ProjectsAddCollaboratorPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +export type ProjectsCreateCardData = ProjectCard; + +export type ProjectsCreateCardError = + | (ValidationError | ValidationErrorSimple) + | { + code?: string; + documentation_url?: string; + errors?: { + code?: string; + message?: string; + }[]; + message?: string; + }; + +export type ProjectsCreateCardPayload = + | { + /** + * The project card's note + * @example "Update all gems" + */ + note: string | null; + } + | { + /** + * The unique identifier of the content associated with the card + * @example 42 + */ + content_id: number; + /** + * The piece of content associated with the card + * @example "PullRequest" + */ + content_type: string; + }; + +export type ProjectsCreateColumnData = ProjectColumn; + +export interface ProjectsCreateColumnPayload { + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; +} + +export type ProjectsCreateForAuthenticatedUserData = Project; + +export interface ProjectsCreateForAuthenticatedUserPayload { + /** + * Body of the project + * @example "This project represents the sprint of the first week in January" + */ + body?: string | null; + /** + * Name of the project + * @example "Week One Sprint" + */ + name: string; +} + +export type ProjectsCreateForOrgData = Project; + +export interface ProjectsCreateForOrgPayload { + /** The description of the project. */ + body?: string; + /** The name of the project. */ + name: string; +} + +export type ProjectsCreateForRepoData = Project; + +export interface ProjectsCreateForRepoPayload { + /** The description of the project. */ + body?: string; + /** The name of the project. */ + name: string; +} + +export type ProjectsDeleteCardData = any; + +export type ProjectsDeleteCardError = { + documentation_url?: string; + errors?: string[]; + message?: string; +}; + +export type ProjectsDeleteColumnData = any; + +export type ProjectsDeleteData = any; + +export type ProjectsDeleteError = { + documentation_url?: string; + errors?: string[]; + message?: string; +}; + +export type ProjectsGetCardData = ProjectCard; + +export type ProjectsGetColumnData = ProjectColumn; + +export type ProjectsGetData = Project; + +export type ProjectsGetPermissionForUserData = RepositoryCollaboratorPermission; + +export type ProjectsListCardsData = ProjectCard[]; + +export interface ProjectsListCardsParams { + /** + * Filters the project cards that are returned by the card's state. Can be one of \`all\`,\`archived\`, or \`not_archived\`. + * @default "not_archived" + */ + archived_state?: ArchivedStateEnum; + /** column_id parameter */ + columnId: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +/** + * Filters the project cards that are returned by the card's state. Can be one of \`all\`,\`archived\`, or \`not_archived\`. + * @default "not_archived" + */ +export enum ProjectsListCardsParams1ArchivedStateEnum { + All = "all", + Archived = "archived", + NotArchived = "not_archived", +} + +export type ProjectsListCollaboratorsData = SimpleUser[]; + +export interface ProjectsListCollaboratorsParams { + /** + * Filters the collaborators by their affiliation. Can be one of: + * \\* \`outside\`: Outside collaborators of a project that are not a member of the project's organization. + * \\* \`direct\`: Collaborators with permissions to a project, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ + affiliation?: AffiliationEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + projectId: number; +} + +/** + * Filters the collaborators by their affiliation. Can be one of: + * \\* \`outside\`: Outside collaborators of a project that are not a member of the project's organization. + * \\* \`direct\`: Collaborators with permissions to a project, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ +export enum ProjectsListCollaboratorsParams1AffiliationEnum { + Outside = "outside", + Direct = "direct", + All = "all", +} + +export type ProjectsListColumnsData = ProjectColumn[]; + +export interface ProjectsListColumnsParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + projectId: number; +} + +export type ProjectsListForOrgData = Project[]; + +export interface ProjectsListForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum2; +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum ProjectsListForOrgParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type ProjectsListForRepoData = Project[]; + +export interface ProjectsListForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum5; +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum ProjectsListForRepoParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type ProjectsListForUserData = Project[]; + +export interface ProjectsListForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: StateEnum10; + username: string; +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum ProjectsListForUserParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type ProjectsMoveCardData = object; + +export type ProjectsMoveCardError = + | { + documentation_url?: string; + errors?: { + code?: string; + field?: string; + message?: string; + resource?: string; + }[]; + message?: string; + } + | { + code?: string; + documentation_url?: string; + errors?: { + code?: string; + message?: string; + }[]; + message?: string; + }; + +export interface ProjectsMoveCardPayload { + /** + * The unique identifier of the column the card should be moved to + * @example 42 + */ + column_id?: number; + /** + * The position of the card in a column + * @pattern ^(?:top|bottom|after:\\d+)$ + * @example "bottom" + */ + position: string; +} + +export type ProjectsMoveColumnData = object; + +export interface ProjectsMoveColumnPayload { + /** + * The position of the column in a project + * @pattern ^(?:first|last|after:\\d+)$ + * @example "last" + */ + position: string; +} + +export type ProjectsRemoveCollaboratorData = any; + +export type ProjectsUpdateCardData = ProjectCard; + +export interface ProjectsUpdateCardPayload { + /** + * Whether or not the card is archived + * @example false + */ + archived?: boolean; + /** + * The project card's note + * @example "Update all gems" + */ + note?: string | null; +} + +export type ProjectsUpdateColumnData = ProjectColumn; + +export interface ProjectsUpdateColumnPayload { + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; +} + +export type ProjectsUpdateData = Project; + +export type ProjectsUpdateError = { + documentation_url?: string; + errors?: string[]; + message?: string; +}; + +/** The baseline permission that all organization members have on this project */ +export enum ProjectsUpdateOrganizationPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", + None = "none", +} + +export interface ProjectsUpdatePayload { + /** + * Body of the project + * @example "This project represents the sprint of the first week in January" + */ + body?: string | null; + /** + * Name of the project + * @example "Week One Sprint" + */ + name?: string; + /** The baseline permission that all organization members have on this project */ + organization_permission?: ProjectsUpdateOrganizationPermissionEnum; + /** Whether or not this project can be seen by everyone. */ + private?: boolean; + /** + * State of the project; either 'open' or 'closed' + * @example "open" + */ + state?: string; +} + +/** + * Protected Branch + * Branch protections protect branches + */ +export interface ProtectedBranch { + allow_deletions?: { + enabled: boolean; + }; + allow_force_pushes?: { + enabled: boolean; + }; + enforce_admins?: { + enabled: boolean; + /** @format uri */ + url: string; + }; + required_linear_history?: { + enabled: boolean; + }; + required_pull_request_reviews?: { + dismiss_stale_reviews?: boolean; + dismissal_restrictions?: { + teams: Team[]; + /** @format uri */ + teams_url: string; + /** @format uri */ + url: string; + users: SimpleUser[]; + /** @format uri */ + users_url: string; + }; + require_code_owner_reviews?: boolean; + required_approving_review_count?: number; + /** @format uri */ + url: string; + }; + required_signatures?: { + /** @example true */ + enabled: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_signatures" + */ + url: string; + }; + /** Status Check Policy */ + required_status_checks?: StatusCheckPolicy; + /** Branch Restriction Policy */ + restrictions?: BranchRestrictionPolicy; + /** @format uri */ + url: string; +} + +/** + * Protected Branch Admin Enforced + * Protected Branch Admin Enforced + */ +export interface ProtectedBranchAdminEnforced { + /** @example true */ + enabled: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/enforce_admins" + */ + url: string; +} + +/** + * Protected Branch Pull Request Review + * Protected Branch Pull Request Review + */ +export interface ProtectedBranchPullRequestReview { + /** @example true */ + dismiss_stale_reviews: boolean; + dismissal_restrictions?: { + /** The list of teams with review dismissal access. */ + teams?: Team[]; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/teams"" */ + teams_url?: string; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions"" */ + url?: string; + /** The list of users with review dismissal access. */ + users?: SimpleUser[]; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/users"" */ + users_url?: string; + }; + /** @example true */ + require_code_owner_reviews: boolean; + /** + * @min 1 + * @max 6 + * @example 2 + */ + required_approving_review_count?: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/dismissal_restrictions" + */ + url?: string; +} + +/** + * Public User + * Public User + */ +export interface PublicUser { + /** @format uri */ + avatar_url: string; + bio: string | null; + blog: string | null; + /** @example 3 */ + collaborators?: number; + company: string | null; + /** @format date-time */ + created_at: string; + /** @example 1 */ + disk_usage?: number; + /** @format email */ + email: string | null; + events_url: string; + followers: number; + /** @format uri */ + followers_url: string; + following: number; + following_url: string; + gists_url: string; + gravatar_id: string | null; + hireable: boolean | null; + /** @format uri */ + html_url: string; + id: number; + location: string | null; + login: string; + name: string | null; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @example 2 */ + owned_private_repos?: number; + plan?: { + collaborators: number; + name: string; + private_repos: number; + space: number; + }; + /** @example 1 */ + private_gists?: number; + public_gists: number; + public_repos: number; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + /** @example 2 */ + total_private_repos?: number; + twitter_username?: string | null; + type: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Pull Request + * Pull requests let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary. + */ +export interface PullRequest { + _links: { + /** Hypermedia Link */ + comments: Link; + /** Hypermedia Link */ + commits: Link; + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + issue: Link; + /** Hypermedia Link */ + review_comment: Link; + /** Hypermedia Link */ + review_comments: Link; + /** Hypermedia Link */ + self: Link; + /** Hypermedia Link */ + statuses: Link; + }; + /** @example "too heated" */ + active_lock_reason?: string | null; + /** @example 100 */ + additions: number; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** The status of auto merging a pull request. */ + auto_merge: AutoMerge; + base: { + label: string; + ref: string; + repo: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + /** @format uri */ + deployments_url: string; + description: string | null; + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; + }; + sha: string; + user: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + }; + /** @example "Please pull these awesome changes" */ + body: string | null; + /** @example 5 */ + changed_files: number; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + closed_at: string | null; + /** @example 10 */ + comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** @example 3 */ + commits: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" + */ + commits_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** @example 3 */ + deletions: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.diff" + */ + diff_url: string; + /** + * Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + head: { + label: string; + ref: string; + repo: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + /** @format uri */ + deployments_url: string; + description: string | null; + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: { + key: string; + name: string; + node_id: string; + spdx_id: string | null; + /** @format uri */ + url: string | null; + }; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; + }; + sha: string; + user: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + }; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + issue_url: string; + labels: { + color?: string; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + /** @example true */ + locked: boolean; + /** + * Indicates whether maintainers can modify the pull request. + * @example true + */ + maintainer_can_modify: boolean; + /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ + merge_commit_sha: string | null; + /** @example true */ + mergeable: boolean | null; + /** @example "clean" */ + mergeable_state: string; + merged: boolean; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + merged_at: string | null; + merged_by: SimpleUser | null; + milestone: Milestone | null; + /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ + node_id: string; + /** + * Number uniquely identifying the pull request within its repository. + * @example 42 + */ + number: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.patch" + */ + patch_url: string; + /** @example true */ + rebaseable?: boolean | null; + requested_reviewers?: SimpleUser[] | null; + requested_teams?: TeamSimple[] | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ + review_comment_url: string; + /** @example 0 */ + review_comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" + */ + review_comments_url: string; + /** + * State of this Pull Request. Either \`open\` or \`closed\`. + * @example "open" + */ + state: PullRequestStateEnum; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + statuses_url: string; + /** + * The title of the pull request. + * @example "Amazing new feature" + */ + title: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Pull Request Merge Result + * Pull Request Merge Result + */ +export interface PullRequestMergeResult { + merged: boolean; + message: string; + sha: string; +} + +/** Pull Request Minimal */ +export interface PullRequestMinimal { + base: { + ref: string; + repo: { + id: number; + name: string; + url: string; + }; + sha: string; + }; + head: { + ref: string; + repo: { + id: number; + name: string; + url: string; + }; + sha: string; + }; + id: number; + number: number; + url: string; +} + +/** + * Pull Request Review + * Pull Request Reviews are reviews on pull requests. + */ +export interface PullRequestReview { + _links: { + html: { + href: string; + }; + pull_request: { + href: string; + }; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The text of the review. + * @example "This looks great." + */ + body: string; + body_html?: string; + body_text?: string; + /** + * A commit SHA for the review. + * @example "54bb654c9e6025347f57900a4a5c2313a96b8035" + */ + commit_id: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/12#pullrequestreview-80" + */ + html_url: string; + /** + * Unique identifier of the review + * @example 42 + */ + id: number; + /** @example "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3ODA=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/12" + */ + pull_request_url: string; + /** @example "CHANGES_REQUESTED" */ + state: string; + /** @format date-time */ + submitted_at?: string; + user: SimpleUser | null; +} + +/** + * Pull Request Review Comment + * Pull Request Review Comments are comments on a portion of the Pull Request's diff. + */ +export interface PullRequestReviewComment { + _links: { + html: { + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + href: string; + }; + pull_request: { + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + href: string; + }; + self: { + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + href: string; + }; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The text of the comment. + * @example "We should probably include a check for null values here." + */ + body: string; + /** @example ""

comment body

"" */ + body_html?: string; + /** @example ""comment body"" */ + body_text?: string; + /** + * The SHA of the commit to which the comment applies. + * @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + commit_id: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** + * The diff of the line that the comment refers to. + * @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." + */ + diff_hunk: string; + /** + * HTML URL for the pull request review comment. + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + html_url: string; + /** + * The ID of the pull request review comment. + * @example 1 + */ + id: number; + /** + * The comment ID to reply to. + * @example 8 + */ + in_reply_to_id?: number; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** + * The node ID of the pull request review comment. + * @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" + */ + node_id: string; + /** + * The SHA of the original commit to which the comment applies. + * @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" + */ + original_commit_id: string; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** + * The index of the original line in the diff to which the comment applies. + * @example 4 + */ + original_position: number; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + /** + * The relative path of the file to which the comment applies. + * @example "config/database.yaml" + */ + path: string; + /** + * The line index in the diff to which the comment applies. + * @example 1 + */ + position: number; + /** + * The ID of the pull request review to which the comment belongs. + * @example 42 + */ + pull_request_review_id: number | null; + /** + * URL for the pull request that the review comment belongs to. + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + pull_request_url: string; + reactions?: ReactionRollup; + /** + * The side of the diff to which the comment applies. The side of the last line of the range for a multi-line comment + * @default "RIGHT" + */ + side?: PullRequestReviewCommentSideEnum; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + start_side?: PullRequestReviewCommentStartSideEnum; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * URL for the pull request review comment + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + url: string; + /** Simple User */ + user: SimpleUser; +} + +/** + * The side of the diff to which the comment applies. The side of the last line of the range for a multi-line comment + * @default "RIGHT" + */ +export enum PullRequestReviewCommentSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", +} + +/** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ +export enum PullRequestReviewCommentStartSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", +} + +/** + * Pull Request Review Request + * Pull Request Review Request + */ +export interface PullRequestReviewRequest { + teams: TeamSimple[]; + users: SimpleUser[]; +} + +/** + * Pull Request Simple + * Pull Request Simple + */ +export interface PullRequestSimple { + _links: { + /** Hypermedia Link */ + comments: Link; + /** Hypermedia Link */ + commits: Link; + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + issue: Link; + /** Hypermedia Link */ + review_comment: Link; + /** Hypermedia Link */ + review_comments: Link; + /** Hypermedia Link */ + self: Link; + /** Hypermedia Link */ + statuses: Link; + }; + /** @example "too heated" */ + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** The status of auto merging a pull request. */ + auto_merge: AutoMerge; + base: { + label: string; + ref: string; + /** A git repository */ + repo: Repository; + sha: string; + user: SimpleUser | null; + }; + /** @example "Please pull these awesome changes" */ + body: string | null; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + closed_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" + */ + commits_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.diff" + */ + diff_url: string; + /** + * Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + head: { + label: string; + ref: string; + /** A git repository */ + repo: Repository; + sha: string; + user: SimpleUser | null; + }; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + issue_url: string; + labels: { + color?: string; + default?: boolean; + description?: string; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + /** @example true */ + locked: boolean; + /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ + merge_commit_sha: string | null; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + merged_at: string | null; + milestone: Milestone | null; + /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ + node_id: string; + /** @example 1347 */ + number: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.patch" + */ + patch_url: string; + requested_reviewers?: SimpleUser[] | null; + requested_teams?: TeamSimple[] | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ + review_comment_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" + */ + review_comments_url: string; + /** @example "open" */ + state: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + statuses_url: string; + /** @example "new-feature" */ + title: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" + */ + url: string; + user: SimpleUser | null; +} + +/** + * State of this Pull Request. Either \`open\` or \`closed\`. + * @example "open" + */ +export enum PullRequestStateEnum { + Open = "open", + Closed = "closed", +} + +export type PullsCheckIfMergedData = any; + +export type PullsCreateData = PullRequest; + +export interface PullsCreatePayload { + /** The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository. */ + base: string; + /** The contents of the pull request. */ + body?: string; + /** Indicates whether the pull request is a draft. See "[Draft Pull Requests](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests)" in the GitHub Help documentation to learn more. */ + draft?: boolean; + /** The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace \`head\` with a user like this: \`username:branch\`. */ + head: string; + /** @example 1 */ + issue?: number; + /** Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ + maintainer_can_modify?: boolean; + /** The title of the new pull request. */ + title?: string; +} + +export type PullsCreateReplyForReviewCommentData = PullRequestReviewComment; + +export interface PullsCreateReplyForReviewCommentPayload { + /** The text of the review comment. */ + body: string; +} + +export type PullsCreateReviewCommentData = PullRequestReviewComment; + +export interface PullsCreateReviewCommentPayload { + /** The text of the review comment. */ + body: string; + /** The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the \`position\`. */ + commit_id?: string; + /** @example 2 */ + in_reply_to?: number; + /** **Required with \`comfort-fade\` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. */ + line?: number; + /** The relative path to the file that necessitates a comment. */ + path: string; + /** **Required without \`comfort-fade\` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above. */ + position?: number; + /** **Required with \`comfort-fade\` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be \`LEFT\` or \`RIGHT\`. Use \`LEFT\` for deletions that appear in red. Use \`RIGHT\` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation. */ + side?: PullsCreateReviewCommentSideEnum; + /** **Required when using multi-line comments**. To create multi-line comments, you must use the \`comfort-fade\` preview header. The \`start_line\` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. */ + start_line?: number; + /** **Required when using multi-line comments**. To create multi-line comments, you must use the \`comfort-fade\` preview header. The \`start_side\` is the starting side of the diff that the comment applies to. Can be \`LEFT\` or \`RIGHT\`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See \`side\` in this table for additional context. */ + start_side?: PullsCreateReviewCommentStartSideEnum; +} + +/** **Required with \`comfort-fade\` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be \`LEFT\` or \`RIGHT\`. Use \`LEFT\` for deletions that appear in red. Use \`RIGHT\` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation. */ +export enum PullsCreateReviewCommentSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", +} + +/** **Required when using multi-line comments**. To create multi-line comments, you must use the \`comfort-fade\` preview header. The \`start_side\` is the starting side of the diff that the comment applies to. Can be \`LEFT\` or \`RIGHT\`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See \`side\` in this table for additional context. */ +export enum PullsCreateReviewCommentStartSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", + Side = "side", +} + +export type PullsCreateReviewData = PullRequestReview; + +/** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. By leaving this blank, you set the review action state to \`PENDING\`, which means you will need to [submit the pull request review](https://docs.github.com/rest/reference/pulls#submit-a-review-for-a-pull-request) when you are ready. */ +export enum PullsCreateReviewEventEnum { + APPROVE = "APPROVE", + REQUEST_CHANGES = "REQUEST_CHANGES", + COMMENT = "COMMENT", +} + +export interface PullsCreateReviewPayload { + /** **Required** when using \`REQUEST_CHANGES\` or \`COMMENT\` for the \`event\` parameter. The body text of the pull request review. */ + body?: string; + /** Use the following table to specify the location, destination, and contents of the draft review comment. */ + comments?: { + /** Text of the review comment. */ + body: string; + /** @example 28 */ + line?: number; + /** The relative path to the file that necessitates a review comment. */ + path: string; + /** The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note below. */ + position?: number; + /** @example "RIGHT" */ + side?: string; + /** @example 26 */ + start_line?: number; + /** @example "LEFT" */ + start_side?: string; + }[]; + /** The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the \`position\`. Defaults to the most recent commit in the pull request when you do not specify a value. */ + commit_id?: string; + /** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. By leaving this blank, you set the review action state to \`PENDING\`, which means you will need to [submit the pull request review](https://docs.github.com/rest/reference/pulls#submit-a-review-for-a-pull-request) when you are ready. */ + event?: PullsCreateReviewEventEnum; +} + +export type PullsDeletePendingReviewData = PullRequestReview; + +export type PullsDeleteReviewCommentData = any; + +export type PullsDismissReviewData = PullRequestReview; + +export interface PullsDismissReviewPayload { + /** @example ""APPROVE"" */ + event?: string; + /** The message for the pull request review dismissal */ + message: string; +} + +export type PullsGetData = PullRequest; + +export type PullsGetReviewCommentData = PullRequestReviewComment; + +export type PullsGetReviewData = PullRequestReview; + +export type PullsListCommentsForReviewData = ReviewComment[]; + +export interface PullsListCommentsForReviewParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; +} + +export type PullsListCommitsData = Commit[]; + +export interface PullsListCommitsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; +} + +export type PullsListData = PullRequestSimple[]; + +export type PullsListFilesData = DiffEntry[]; + +export interface PullsListFilesParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; +} + +export interface PullsListParams { + /** Filter pulls by base branch name. Example: \`gh-pages\`. */ + base?: string; + /** The direction of the sort. Can be either \`asc\` or \`desc\`. Default: \`desc\` when sort is \`created\` or sort is not specified, otherwise \`asc\`. */ + direction?: DirectionEnum10; + /** Filter pulls by head user or head organization and branch name in the format of \`user:ref-name\` or \`organization:ref-name\`. For example: \`github:new-script-format\` or \`octocat:test-branch\`. */ + head?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`popularity\` (comment count) or \`long-running\` (age, filtering by pulls updated in the last month). + * @default "created" + */ + sort?: SortEnum9; + /** + * Either \`open\`, \`closed\`, or \`all\` to filter by state. + * @default "open" + */ + state?: StateEnum6; +} + +/** The direction of the sort. Can be either \`asc\` or \`desc\`. Default: \`desc\` when sort is \`created\` or sort is not specified, otherwise \`asc\`. */ +export enum PullsListParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`popularity\` (comment count) or \`long-running\` (age, filtering by pulls updated in the last month). + * @default "created" + */ +export enum PullsListParams1SortEnum { + Created = "created", + Updated = "updated", + Popularity = "popularity", + LongRunning = "long-running", +} + +/** + * Either \`open\`, \`closed\`, or \`all\` to filter by state. + * @default "open" + */ +export enum PullsListParams1StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +export type PullsListRequestedReviewersData = PullRequestReviewRequest; + +export interface PullsListRequestedReviewersParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; +} + +export type PullsListReviewCommentsData = PullRequestReviewComment[]; + +export type PullsListReviewCommentsForRepoData = PullRequestReviewComment[]; + +export interface PullsListReviewCommentsForRepoParams { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: DirectionEnum11; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum10; +} + +/** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ +export enum PullsListReviewCommentsForRepoParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum PullsListReviewCommentsForRepoParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export interface PullsListReviewCommentsParams { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: DirectionEnum12; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: SortEnum11; +} + +/** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ +export enum PullsListReviewCommentsParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum PullsListReviewCommentsParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export type PullsListReviewsData = PullRequestReview[]; + +export interface PullsListReviewsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pullNumber: number; + repo: string; +} + +export type PullsMergeData = PullRequestMergeResult; + +export type PullsMergeError = { + documentation_url?: string; + message?: string; +}; + +/** Merge method to use. Possible values are \`merge\`, \`squash\` or \`rebase\`. Default is \`merge\`. */ +export enum PullsMergeMergeMethodEnum { + Merge = "merge", + Squash = "squash", + Rebase = "rebase", +} + +export type PullsMergePayload = { + /** Extra detail to append to automatic commit message. */ + commit_message?: string; + /** Title for the automatic commit message. */ + commit_title?: string; + /** Merge method to use. Possible values are \`merge\`, \`squash\` or \`rebase\`. Default is \`merge\`. */ + merge_method?: PullsMergeMergeMethodEnum; + /** SHA that pull request head must match to allow merge. */ + sha?: string; +} | null; + +export type PullsRemoveRequestedReviewersData = any; + +export interface PullsRemoveRequestedReviewersPayload { + /** An array of user \`login\`s that will be removed. */ + reviewers?: string[]; + /** An array of team \`slug\`s that will be removed. */ + team_reviewers?: string[]; +} + +export type PullsRequestReviewersData = PullRequestSimple; + +export interface PullsRequestReviewersPayload { + /** An array of user \`login\`s that will be requested. */ + reviewers?: string[]; + /** An array of team \`slug\`s that will be requested. */ + team_reviewers?: string[]; +} + +export type PullsSubmitReviewData = PullRequestReview; + +/** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to \`PENDING\`, which means you will need to re-submit the pull request review using a review action. */ +export enum PullsSubmitReviewEventEnum { + APPROVE = "APPROVE", + REQUEST_CHANGES = "REQUEST_CHANGES", + COMMENT = "COMMENT", +} + +export interface PullsSubmitReviewPayload { + /** The body text of the pull request review */ + body?: string; + /** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to \`PENDING\`, which means you will need to re-submit the pull request review using a review action. */ + event: PullsSubmitReviewEventEnum; +} + +export interface PullsUpdateBranchData { + message?: string; + url?: string; +} + +export type PullsUpdateBranchPayload = { + /** The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a \`422 Unprocessable Entity\` status. You can use the "[List commits](https://docs.github.com/rest/reference/repos#list-commits)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref. */ + expected_head_sha?: string; +} | null; + +export type PullsUpdateData = PullRequest; + +export interface PullsUpdatePayload { + /** The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository. */ + base?: string; + /** The contents of the pull request. */ + body?: string; + /** Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ + maintainer_can_modify?: boolean; + /** State of this Pull Request. Either \`open\` or \`closed\`. */ + state?: PullsUpdateStateEnum; + /** The title of the pull request. */ + title?: string; +} + +export type PullsUpdateReviewCommentData = PullRequestReviewComment; + +export interface PullsUpdateReviewCommentPayload { + /** The text of the reply to the review comment. */ + body: string; +} + +export type PullsUpdateReviewData = PullRequestReview; + +export interface PullsUpdateReviewPayload { + /** The body text of the pull request review. */ + body: string; +} + +/** State of this Pull Request. Either \`open\` or \`closed\`. */ +export enum PullsUpdateStateEnum { + Open = "open", + Closed = "closed", +} + +/** Rate Limit */ +export interface RateLimit { + limit: number; + remaining: number; + reset: number; +} + +export type RateLimitGetData = RateLimitOverview; + +/** + * Rate Limit Overview + * Rate Limit Overview + */ +export interface RateLimitOverview { + rate: RateLimit; + resources: { + code_scanning_upload?: RateLimit; + core: RateLimit; + graphql?: RateLimit; + integration_manifest?: RateLimit; + search: RateLimit; + source_import?: RateLimit; + }; +} + +/** + * Reaction + * Reactions to conversations provide a way to help people express their feelings more simply and effectively. + */ +export interface Reaction { + /** + * The reaction to use + * @example "heart" + */ + content: ReactionContentEnum; + /** + * @format date-time + * @example "2016-05-20T20:09:31Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example "MDg6UmVhY3Rpb24x" */ + node_id: string; + user: SimpleUser | null; +} + +/** + * The reaction to use + * @example "heart" + */ +export enum ReactionContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** Reaction Rollup */ +export interface ReactionRollup { + "+1": number; + "-1": number; + confused: number; + eyes: number; + heart: number; + hooray: number; + laugh: number; + rocket: number; + total_count: number; + /** @format uri */ + url: string; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the commit comment. */ +export enum ReactionsCreateForCommitCommentContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForCommitCommentData = Reaction; + +export interface ReactionsCreateForCommitCommentPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the commit comment. */ + content: ReactionsCreateForCommitCommentContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the issue comment. */ +export enum ReactionsCreateForIssueCommentContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForIssueCommentData = Reaction; + +export interface ReactionsCreateForIssueCommentPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the issue comment. */ + content: ReactionsCreateForIssueCommentContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the issue. */ +export enum ReactionsCreateForIssueContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForIssueData = Reaction; + +export interface ReactionsCreateForIssuePayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the issue. */ + content: ReactionsCreateForIssueContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the pull request review comment. */ +export enum ReactionsCreateForPullRequestReviewCommentContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForPullRequestReviewCommentData = Reaction; + +export interface ReactionsCreateForPullRequestReviewCommentPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the pull request review comment. */ + content: ReactionsCreateForPullRequestReviewCommentContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ +export enum ReactionsCreateForTeamDiscussionCommentInOrgContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForTeamDiscussionCommentInOrgData = Reaction; + +export interface ReactionsCreateForTeamDiscussionCommentInOrgPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ + content: ReactionsCreateForTeamDiscussionCommentInOrgContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ +export enum ReactionsCreateForTeamDiscussionCommentLegacyContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForTeamDiscussionCommentLegacyData = Reaction; + +export interface ReactionsCreateForTeamDiscussionCommentLegacyPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ + content: ReactionsCreateForTeamDiscussionCommentLegacyContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ +export enum ReactionsCreateForTeamDiscussionInOrgContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForTeamDiscussionInOrgData = Reaction; + +export interface ReactionsCreateForTeamDiscussionInOrgPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ + content: ReactionsCreateForTeamDiscussionInOrgContentEnum; +} + +/** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ +export enum ReactionsCreateForTeamDiscussionLegacyContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsCreateForTeamDiscussionLegacyData = Reaction; + +export interface ReactionsCreateForTeamDiscussionLegacyPayload { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ + content: ReactionsCreateForTeamDiscussionLegacyContentEnum; +} + +export type ReactionsDeleteForCommitCommentData = any; + +export type ReactionsDeleteForIssueCommentData = any; + +export type ReactionsDeleteForIssueData = any; + +export type ReactionsDeleteForPullRequestCommentData = any; + +export type ReactionsDeleteForTeamDiscussionCommentData = any; + +export type ReactionsDeleteForTeamDiscussionData = any; + +export type ReactionsDeleteLegacyData = any; + +export type ReactionsListForCommitCommentData = Reaction[]; + +export interface ReactionsListForCommitCommentParams { + /** comment_id parameter */ + commentId: number; + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ + content?: ContentEnum2; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ +export enum ReactionsListForCommitCommentParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForIssueCommentData = Reaction[]; + +export interface ReactionsListForIssueCommentParams { + /** comment_id parameter */ + commentId: number; + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ + content?: ContentEnum3; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ +export enum ReactionsListForIssueCommentParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForIssueData = Reaction[]; + +export interface ReactionsListForIssueParams { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ + content?: ContentEnum4; + /** issue_number parameter */ + issueNumber: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ +export enum ReactionsListForIssueParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForPullRequestReviewCommentData = Reaction[]; + +export interface ReactionsListForPullRequestReviewCommentParams { + /** comment_id parameter */ + commentId: number; + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ + content?: ContentEnum5; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ +export enum ReactionsListForPullRequestReviewCommentParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForTeamDiscussionCommentInOrgData = Reaction[]; + +export interface ReactionsListForTeamDiscussionCommentInOrgParams { + commentNumber: number; + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: ContentEnum; + discussionNumber: number; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ +export enum ReactionsListForTeamDiscussionCommentInOrgParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForTeamDiscussionCommentLegacyData = Reaction[]; + +export interface ReactionsListForTeamDiscussionCommentLegacyParams { + commentNumber: number; + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: ContentEnum6; + discussionNumber: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ +export enum ReactionsListForTeamDiscussionCommentLegacyParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForTeamDiscussionInOrgData = Reaction[]; + +export interface ReactionsListForTeamDiscussionInOrgParams { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: ContentEnum1; + discussionNumber: number; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ +export enum ReactionsListForTeamDiscussionInOrgParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +export type ReactionsListForTeamDiscussionLegacyData = Reaction[]; + +export interface ReactionsListForTeamDiscussionLegacyParams { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: ContentEnum7; + discussionNumber: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +/** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ +export enum ReactionsListForTeamDiscussionLegacyParams1ContentEnum { + Value1 = "+1", + Value11 = "-1", + Laugh = "laugh", + Confused = "confused", + Heart = "heart", + Hooray = "hooray", + Rocket = "rocket", + Eyes = "eyes", +} + +/** + * Referrer Traffic + * Referrer Traffic + */ +export interface ReferrerTraffic { + /** @example 4 */ + count: number; + /** @example "Google" */ + referrer: string; + /** @example 3 */ + uniques: number; +} + +/** + * Release + * A release. + */ +export interface Release { + assets: ReleaseAsset[]; + /** @format uri */ + assets_url: string; + /** Simple User */ + author: SimpleUser; + body?: string | null; + body_html?: string; + body_text?: string; + /** @format date-time */ + created_at: string; + /** + * true to create a draft (unpublished) release, false to create a published one. + * @example false + */ + draft: boolean; + /** @format uri */ + html_url: string; + id: number; + name: string | null; + node_id: string; + /** + * Whether to identify the release as a prerelease or a full release. + * @example false + */ + prerelease: boolean; + /** @format date-time */ + published_at: string | null; + /** + * The name of the tag. + * @example "v1.0.0" + */ + tag_name: string; + /** @format uri */ + tarball_url: string | null; + /** + * Specifies the commitish value that determines where the Git tag is created from. + * @example "master" + */ + target_commitish: string; + upload_url: string; + /** @format uri */ + url: string; + /** @format uri */ + zipball_url: string | null; +} + +/** + * Release Asset + * Data related to a release. + */ +export interface ReleaseAsset { + /** @format uri */ + browser_download_url: string; + content_type: string; + /** @format date-time */ + created_at: string; + download_count: number; + id: number; + label: string | null; + /** + * The file name of the asset. + * @example "Team Environment" + */ + name: string; + node_id: string; + size: number; + /** State of the release asset. */ + state: ReleaseAssetStateEnum; + /** @format date-time */ + updated_at: string; + uploader: SimpleUser | null; + /** @format uri */ + url: string; +} + +/** State of the release asset. */ +export enum ReleaseAssetStateEnum { + Uploaded = "uploaded", + Open = "open", +} + +/** + * Repo Search Result Item + * Repo Search Result Item + */ +export interface RepoSearchResultItem { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + delete_branch_on_merge?: boolean; + /** @format uri */ + deployments_url: string; + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + score: number; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + text_matches?: SearchResultTextMatches; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; +} + +export type ReposAcceptInvitationData = any; + +export type ReposAddAppAccessRestrictionsData = Integration[]; + +/** @example {"apps":["my-app"]} */ +export interface ReposAddAppAccessRestrictionsPayload { + /** apps parameter */ + apps: string[]; +} + +export type ReposAddCollaboratorData = RepositoryInvitation; + +export interface ReposAddCollaboratorPayload { + /** + * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of: + * \\* \`pull\` - can pull, but not push to or administer this repository. + * \\* \`push\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push and administer this repository. + * \\* \`maintain\` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions. + * \\* \`triage\` - Recommended for contributors who need to proactively manage issues and pull requests without write access. + * @default "push" + */ + permission?: ReposAddCollaboratorPermissionEnum; + /** @example ""push"" */ + permissions?: string; +} + +/** + * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of: + * \\* \`pull\` - can pull, but not push to or administer this repository. + * \\* \`push\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push and administer this repository. + * \\* \`maintain\` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions. + * \\* \`triage\` - Recommended for contributors who need to proactively manage issues and pull requests without write access. + * @default "push" + */ +export enum ReposAddCollaboratorPermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", + Maintain = "maintain", + Triage = "triage", +} + +export type ReposAddStatusCheckContextsData = string[]; + +/** @example {"contexts":["contexts"]} */ +export interface ReposAddStatusCheckContextsPayload { + /** contexts parameter */ + contexts: string[]; +} + +export type ReposAddTeamAccessRestrictionsData = Team[]; + +/** @example {"teams":["my-team"]} */ +export interface ReposAddTeamAccessRestrictionsPayload { + /** teams parameter */ + teams: string[]; +} + +export type ReposAddUserAccessRestrictionsData = SimpleUser[]; + +/** @example {"users":["mona"]} */ +export interface ReposAddUserAccessRestrictionsPayload { + /** users parameter */ + users: string[]; +} + +export type ReposCheckCollaboratorData = any; + +export type ReposCheckVulnerabilityAlertsData = any; + +export type ReposCompareCommitsData = CommitComparison; + +export type ReposCreateCommitCommentData = CommitComment; + +export interface ReposCreateCommitCommentPayload { + /** The contents of the comment. */ + body: string; + /** **Deprecated**. Use **position** parameter instead. Line number in the file to comment on. */ + line?: number; + /** Relative path of the file to comment on. */ + path?: string; + /** Line index in the diff to comment on. */ + position?: number; +} + +export type ReposCreateCommitSignatureProtectionData = ProtectedBranchAdminEnforced; + +export type ReposCreateCommitStatusData = Status; + +export interface ReposCreateCommitStatusPayload { + /** + * A string label to differentiate this status from the status of other systems. This field is case-insensitive. + * @default "default" + */ + context?: string; + /** A short description of the status. */ + description?: string; + /** The state of the status. Can be one of \`error\`, \`failure\`, \`pending\`, or \`success\`. */ + state: ReposCreateCommitStatusStateEnum; + /** + * The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status. + * For example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA: + * \`http://ci.example.com/user/repo/build/sha\` + */ + target_url?: string; +} + +/** The state of the status. Can be one of \`error\`, \`failure\`, \`pending\`, or \`success\`. */ +export enum ReposCreateCommitStatusStateEnum { + Error = "error", + Failure = "failure", + Pending = "pending", + Success = "success", +} + +export type ReposCreateDeployKeyData = DeployKey; + +export interface ReposCreateDeployKeyPayload { + /** The contents of the key. */ + key: string; + /** + * If \`true\`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write. + * + * Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)" and "[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)." + */ + read_only?: boolean; + /** A name for the key. */ + title?: string; +} + +export type ReposCreateDeploymentData = Deployment; + +export type ReposCreateDeploymentError = { + /** @example ""https://docs.github.com/rest/reference/repos#create-a-deployment"" */ + documentation_url?: string; + message?: string; +}; + +export interface ReposCreateDeploymentPayload { + /** + * Attempts to automatically merge the default branch into the requested ref, if it's behind the default branch. + * @default true + */ + auto_merge?: boolean; + /** @example ""1776-07-04T00:00:00.000-07:52"" */ + created_at?: string; + /** + * Short description of the deployment. + * @default "" + */ + description?: string | null; + /** + * Name for the target deployment environment (e.g., \`production\`, \`staging\`, \`qa\`). + * @default "production" + */ + environment?: string; + /** JSON payload with extra information about the deployment. */ + payload?: Record | string; + /** + * Specifies if the given environment is one that end-users directly interact with. Default: \`true\` when \`environment\` is \`production\` and \`false\` otherwise. + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + */ + production_environment?: boolean; + /** The ref to deploy. This can be a branch, tag, or SHA. */ + ref: string; + /** The [status](https://docs.github.com/rest/reference/repos#statuses) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts. */ + required_contexts?: string[]; + /** + * Specifies a task to execute (e.g., \`deploy\` or \`deploy:migrations\`). + * @default "deploy" + */ + task?: string; + /** + * Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: \`false\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default false + */ + transient_environment?: boolean; +} + +export type ReposCreateDeploymentStatusData = DeploymentStatus; + +/** Name for the target deployment environment, which can be changed when setting a deploy status. For example, \`production\`, \`staging\`, or \`qa\`. **Note:** This parameter requires you to use the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. */ +export enum ReposCreateDeploymentStatusEnvironmentEnum { + Production = "production", + Staging = "staging", + Qa = "qa", +} + +export interface ReposCreateDeploymentStatusPayload { + /** + * Adds a new \`inactive\` status to all prior non-transient, non-production environment deployments with the same repository and \`environment\` name as the created status's deployment. An \`inactive\` status is only added to deployments that had a \`success\` state. Default: \`true\` + * **Note:** To add an \`inactive\` status to \`production\` environments, you must use the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + */ + auto_inactive?: boolean; + /** + * A short description of the status. The maximum description length is 140 characters. + * @default "" + */ + description?: string; + /** Name for the target deployment environment, which can be changed when setting a deploy status. For example, \`production\`, \`staging\`, or \`qa\`. **Note:** This parameter requires you to use the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. */ + environment?: ReposCreateDeploymentStatusEnvironmentEnum; + /** + * Sets the URL for accessing your environment. Default: \`""\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default "" + */ + environment_url?: string; + /** + * The full URL of the deployment's output. This parameter replaces \`target_url\`. We will continue to accept \`target_url\` to support legacy uses, but we recommend replacing \`target_url\` with \`log_url\`. Setting \`log_url\` will automatically set \`target_url\` to the same value. Default: \`""\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default "" + */ + log_url?: string; + /** The state of the status. Can be one of \`error\`, \`failure\`, \`inactive\`, \`in_progress\`, \`queued\` \`pending\`, or \`success\`. **Note:** To use the \`inactive\` state, you must provide the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. To use the \`in_progress\` and \`queued\` states, you must provide the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. When you set a transient deployment to \`inactive\`, the deployment will be shown as \`destroyed\` in GitHub. */ + state: ReposCreateDeploymentStatusStateEnum; + /** + * The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the \`log_url\` parameter, which replaces \`target_url\`. + * @default "" + */ + target_url?: string; +} + +/** The state of the status. Can be one of \`error\`, \`failure\`, \`inactive\`, \`in_progress\`, \`queued\` \`pending\`, or \`success\`. **Note:** To use the \`inactive\` state, you must provide the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. To use the \`in_progress\` and \`queued\` states, you must provide the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. When you set a transient deployment to \`inactive\`, the deployment will be shown as \`destroyed\` in GitHub. */ +export enum ReposCreateDeploymentStatusStateEnum { + Error = "error", + Failure = "failure", + Inactive = "inactive", + InProgress = "in_progress", + Queued = "queued", + Pending = "pending", + Success = "success", +} + +export type ReposCreateDispatchEventData = any; + +export interface ReposCreateDispatchEventPayload { + /** JSON payload with extra information about the webhook event that your action or worklow may use. */ + client_payload?: Record; + /** A custom webhook event name. */ + event_type: string; +} + +export type ReposCreateForAuthenticatedUserData = Repository; + +export interface ReposCreateForAuthenticatedUserPayload { + /** + * Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit?: boolean; + /** + * Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge?: boolean; + /** + * Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge?: boolean; + /** + * Whether the repository is initialized with a minimal README. + * @default false + */ + auto_init?: boolean; + /** + * Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge?: boolean; + /** A short description of the repository. */ + description?: string; + /** + * The desired language or platform to apply to the .gitignore. + * @example "Haskell" + */ + gitignore_template?: string; + /** + * Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads?: boolean; + /** + * Whether issues are enabled. + * @default true + * @example true + */ + has_issues?: boolean; + /** + * Whether projects are enabled. + * @default true + * @example true + */ + has_projects?: boolean; + /** + * Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki?: boolean; + /** A URL with more information about the repository. */ + homepage?: string; + /** + * Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template?: boolean; + /** + * The license keyword of the open source license for this repository. + * @example "mit" + */ + license_template?: string; + /** + * The name of the repository. + * @example "Team Environment" + */ + name: string; + /** + * Whether the repository is private or public. + * @default false + */ + private?: boolean; + /** The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization. */ + team_id?: number; +} + +export type ReposCreateForkData = Repository; + +export interface ReposCreateForkPayload { + /** Optional parameter to specify the organization name if forking into an organization. */ + organization?: string; +} + +export type ReposCreateInOrgData = Repository; + +export interface ReposCreateInOrgPayload { + /** + * Either \`true\` to allow merging pull requests with a merge commit, or \`false\` to prevent merging pull requests with merge commits. + * @default true + */ + allow_merge_commit?: boolean; + /** + * Either \`true\` to allow rebase-merging pull requests, or \`false\` to prevent rebase-merging. + * @default true + */ + allow_rebase_merge?: boolean; + /** + * Either \`true\` to allow squash-merging pull requests, or \`false\` to prevent squash-merging. + * @default true + */ + allow_squash_merge?: boolean; + /** + * Pass \`true\` to create an initial commit with empty README. + * @default false + */ + auto_init?: boolean; + /** + * Either \`true\` to allow automatically deleting head branches when pull requests are merged, or \`false\` to prevent automatic deletion. + * @default false + */ + delete_branch_on_merge?: boolean; + /** A short description of the repository. */ + description?: string; + /** Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell". */ + gitignore_template?: string; + /** + * Either \`true\` to enable issues for this repository or \`false\` to disable them. + * @default true + */ + has_issues?: boolean; + /** + * Either \`true\` to enable projects for this repository or \`false\` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is \`false\`, and if you pass \`true\`, the API returns an error. + * @default true + */ + has_projects?: boolean; + /** + * Either \`true\` to enable the wiki for this repository or \`false\` to disable it. + * @default true + */ + has_wiki?: boolean; + /** A URL with more information about the repository. */ + homepage?: string; + /** + * Either \`true\` to make this repo available as a template repository or \`false\` to prevent it. + * @default false + */ + is_template?: boolean; + /** Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the \`license_template\` string. For example, "mit" or "mpl-2.0". */ + license_template?: string; + /** The name of the repository. */ + name: string; + /** + * Either \`true\` to create a private repository or \`false\` to create a public one. + * @default false + */ + private?: boolean; + /** The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization. */ + team_id?: number; + /** + * Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. For more information, see "[Creating an internal repository](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-repository-visibility#about-internal-repositories)" in the GitHub Help documentation. + * The \`visibility\` parameter overrides the \`private\` parameter when you use both parameters with the \`nebula-preview\` preview header. + */ + visibility?: ReposCreateInOrgVisibilityEnum; +} + +/** + * Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. For more information, see "[Creating an internal repository](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-repository-visibility#about-internal-repositories)" in the GitHub Help documentation. + * The \`visibility\` parameter overrides the \`private\` parameter when you use both parameters with the \`nebula-preview\` preview header. + */ +export enum ReposCreateInOrgVisibilityEnum { + Public = "public", + Private = "private", + Visibility = "visibility", + Internal = "internal", +} + +export type ReposCreateOrUpdateFileContentsData = FileCommit; + +export interface ReposCreateOrUpdateFileContentsPayload { + /** The author of the file. Default: The \`committer\` or the authenticated user if you omit \`committer\`. */ + author?: { + /** @example ""2013-01-15T17:13:22+05:00"" */ + date?: string; + /** The email of the author or committer of the commit. You'll receive a \`422\` status code if \`email\` is omitted. */ + email: string; + /** The name of the author or committer of the commit. You'll receive a \`422\` status code if \`name\` is omitted. */ + name: string; + }; + /** The branch name. Default: the repository’s default branch (usually \`master\`) */ + branch?: string; + /** The person that committed the file. Default: the authenticated user. */ + committer?: { + /** @example ""2013-01-05T13:13:22+05:00"" */ + date?: string; + /** The email of the author or committer of the commit. You'll receive a \`422\` status code if \`email\` is omitted. */ + email: string; + /** The name of the author or committer of the commit. You'll receive a \`422\` status code if \`name\` is omitted. */ + name: string; + }; + /** The new file content, using Base64 encoding. */ + content: string; + /** The commit message. */ + message: string; + /** **Required if you are updating a file**. The blob SHA of the file being replaced. */ + sha?: string; +} + +export type ReposCreatePagesSiteData = Page; + +/** + * The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. Default: \`/\` + * @default "/" + */ +export enum ReposCreatePagesSitePathEnum { + Value = "/", + ValueDocs = "/docs", +} + +/** The source branch and directory used to publish your Pages site. */ +export interface ReposCreatePagesSitePayload { + /** The source branch and directory used to publish your Pages site. */ + source: { + /** The repository branch used to publish your site's source files. */ + branch: string; + /** + * The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. Default: \`/\` + * @default "/" + */ + path?: ReposCreatePagesSitePathEnum; + }; +} + +export type ReposCreateReleaseData = Release; + +export interface ReposCreateReleasePayload { + /** Text describing the contents of the tag. */ + body?: string; + /** + * \`true\` to create a draft (unpublished) release, \`false\` to create a published one. + * @default false + */ + draft?: boolean; + /** The name of the release. */ + name?: string; + /** + * \`true\` to identify the release as a prerelease. \`false\` to identify the release as a full release. + * @default false + */ + prerelease?: boolean; + /** The name of the tag. */ + tag_name: string; + /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually \`master\`). */ + target_commitish?: string; +} + +export type ReposCreateUsingTemplateData = Repository; + +export interface ReposCreateUsingTemplatePayload { + /** A short description of the new repository. */ + description?: string; + /** + * Set to \`true\` to include the directory structure and files from all branches in the template repository, and not just the default branch. Default: \`false\`. + * @default false + */ + include_all_branches?: boolean; + /** The name of the new repository. */ + name: string; + /** The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization. */ + owner?: string; + /** + * Either \`true\` to create a new private repository or \`false\` to create a new public one. + * @default false + */ + private?: boolean; +} + +export type ReposCreateWebhookData = Hook; + +export interface ReposCreateWebhookPayload { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/repos#create-hook-config-params). */ + config: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** @example ""sha256"" */ + digest?: string; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** @example ""abc"" */ + token?: string; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * @default ["push"] + */ + events?: string[]; + /** Use \`web\` to create a webhook. Default: \`web\`. This parameter only accepts the value \`web\`. */ + name?: string; +} + +export type ReposDeclineInvitationData = any; + +export type ReposDeleteAccessRestrictionsData = any; + +export type ReposDeleteAdminBranchProtectionData = any; + +export type ReposDeleteBranchProtectionData = any; + +export type ReposDeleteCommitCommentData = any; + +export type ReposDeleteCommitSignatureProtectionData = any; + +export type ReposDeleteData = any; + +export type ReposDeleteDeployKeyData = any; + +export type ReposDeleteDeploymentData = any; + +export type ReposDeleteError = { + documentation_url?: string; + message?: string; +}; + +export type ReposDeleteFileData = FileCommit; + +export interface ReposDeleteFilePayload { + /** object containing information about the author. */ + author?: { + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The branch name. Default: the repository’s default branch (usually \`master\`) */ + branch?: string; + /** object containing information about the committer. */ + committer?: { + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The commit message. */ + message: string; + /** The blob SHA of the file being replaced. */ + sha: string; +} + +export type ReposDeleteInvitationData = any; + +export type ReposDeletePagesSiteData = any; + +export type ReposDeletePullRequestReviewProtectionData = any; + +export type ReposDeleteReleaseAssetData = any; + +export type ReposDeleteReleaseData = any; + +export type ReposDeleteWebhookData = any; + +export type ReposDisableAutomatedSecurityFixesData = any; + +export type ReposDisableVulnerabilityAlertsData = any; + +export type ReposEnableAutomatedSecurityFixesData = any; + +export type ReposEnableVulnerabilityAlertsData = any; + +export type ReposGetAccessRestrictionsData = BranchRestrictionPolicy; + +export type ReposGetAdminBranchProtectionData = ProtectedBranchAdminEnforced; + +export type ReposGetAllStatusCheckContextsData = string[]; + +export type ReposGetAllTopicsData = Topic; + +export type ReposGetAppsWithAccessToProtectedBranchData = Integration[]; + +export type ReposGetBranchData = BranchWithProtection; + +export type ReposGetBranchProtectionData = BranchProtection; + +export type ReposGetClonesData = CloneTraffic; + +export interface ReposGetClonesParams { + owner: string; + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: PerEnum; + repo: string; +} + +/** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ +export enum ReposGetClonesParams1PerEnum { + Day = "day", + Week = "week", +} + +export type ReposGetCodeFrequencyStatsData = CodeFrequencyStat[]; + +export type ReposGetCollaboratorPermissionLevelData = RepositoryCollaboratorPermission; + +export type ReposGetCombinedStatusForRefData = CombinedCommitStatus; + +export type ReposGetCommitActivityStatsData = CommitActivity[]; + +export type ReposGetCommitCommentData = CommitComment; + +export type ReposGetCommitData = Commit; + +export type ReposGetCommitSignatureProtectionData = ProtectedBranchAdminEnforced; + +export type ReposGetCommunityProfileMetricsData = CommunityProfile; + +export type ReposGetContentData = ContentTree; + +export interface ReposGetContentParams { + owner: string; + /** path+ parameter */ + path: string; + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + repo: string; +} + +export type ReposGetContributorsStatsData = ContributorActivity[]; + +export type ReposGetData = FullRepository; + +export type ReposGetDeployKeyData = DeployKey; + +export type ReposGetDeploymentData = Deployment; + +export type ReposGetDeploymentStatusData = DeploymentStatus; + +export type ReposGetLatestPagesBuildData = PageBuild; + +export type ReposGetLatestReleaseData = Release; + +export type ReposGetPagesBuildData = PageBuild; + +export type ReposGetPagesData = Page; + +export type ReposGetParticipationStatsData = ParticipationStats; + +export type ReposGetPullRequestReviewProtectionData = ProtectedBranchPullRequestReview; + +export type ReposGetPunchCardStatsData = CodeFrequencyStat[]; + +export type ReposGetReadmeData = ContentFile; + +export interface ReposGetReadmeParams { + owner: string; + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + repo: string; +} + +export type ReposGetReleaseAssetData = ReleaseAsset; + +export type ReposGetReleaseByTagData = Release; + +export type ReposGetReleaseData = Release; + +export type ReposGetStatusChecksProtectionData = StatusCheckPolicy; + +export type ReposGetTeamsWithAccessToProtectedBranchData = Team[]; + +export type ReposGetTopPathsData = ContentTraffic[]; + +export type ReposGetTopReferrersData = ReferrerTraffic[]; + +export type ReposGetUsersWithAccessToProtectedBranchData = SimpleUser[]; + +export type ReposGetViewsData = ViewTraffic; + +export interface ReposGetViewsParams { + owner: string; + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: PerEnum1; + repo: string; +} + +/** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ +export enum ReposGetViewsParams1PerEnum { + Day = "day", + Week = "week", +} + +export type ReposGetWebhookConfigForRepoData = WebhookConfig; + +export type ReposGetWebhookData = Hook; + +export type ReposListBranchesData = ShortBranch[]; + +export type ReposListBranchesForHeadCommitData = BranchShort[]; + +export interface ReposListBranchesParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Setting to \`true\` returns only protected branches. When set to \`false\`, only unprotected branches are returned. Omitting this parameter returns all branches. */ + protected?: boolean; + repo: string; +} + +export type ReposListCollaboratorsData = Collaborator[]; + +export interface ReposListCollaboratorsParams { + /** + * Filter collaborators returned by their affiliation. Can be one of: + * \\* \`outside\`: All outside collaborators of an organization-owned repository. + * \\* \`direct\`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ + affiliation?: AffiliationEnum1; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +/** + * Filter collaborators returned by their affiliation. Can be one of: + * \\* \`outside\`: All outside collaborators of an organization-owned repository. + * \\* \`direct\`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ +export enum ReposListCollaboratorsParams1AffiliationEnum { + Outside = "outside", + Direct = "direct", + All = "all", +} + +export type ReposListCommentsForCommitData = CommitComment[]; + +export interface ReposListCommentsForCommitParams { + /** commit_sha parameter */ + commitSha: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListCommitCommentsForRepoData = CommitComment[]; + +export interface ReposListCommitCommentsForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListCommitStatusesForRefData = Status[]; + +export interface ReposListCommitStatusesForRefParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** ref+ parameter */ + ref: string; + repo: string; +} + +export type ReposListCommitsData = Commit[]; + +export interface ReposListCommitsParams { + /** GitHub login or email address by which to filter by commit author. */ + author?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** Only commits containing this file path will be returned. */ + path?: string; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** SHA or branch to start listing commits from. Default: the repository’s default branch (usually \`master\`). */ + sha?: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + until?: string; +} + +export type ReposListContributorsData = Contributor[]; + +export interface ReposListContributorsParams { + /** Set to \`1\` or \`true\` to include anonymous contributors in results. */ + anon?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListDeployKeysData = DeployKey[]; + +export interface ReposListDeployKeysParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListDeploymentStatusesData = DeploymentStatus[]; + +export interface ReposListDeploymentStatusesParams { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListDeploymentsData = Deployment[]; + +export interface ReposListDeploymentsParams { + /** + * The name of the environment that was deployed to (e.g., \`staging\` or \`production\`). + * @default "none" + */ + environment?: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * The name of the ref. This can be a branch, tag, or SHA. + * @default "none" + */ + ref?: string; + repo: string; + /** + * The SHA recorded at creation time. + * @default "none" + */ + sha?: string; + /** + * The name of the task for the deployment (e.g., \`deploy\` or \`deploy:migrations\`). + * @default "none" + */ + task?: string; +} + +export type ReposListForAuthenticatedUserData = Repository[]; + +export interface ReposListForAuthenticatedUserParams { + /** + * Comma-separated list of values. Can include: + * \\* \`owner\`: Repositories that are owned by the authenticated user. + * \\* \`collaborator\`: Repositories that the user has been added to as a collaborator. + * \\* \`organization_member\`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on. + * @default "owner,collaborator,organization_member" + */ + affiliation?: string; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ + direction?: DirectionEnum16; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ + sort?: SortEnum19; + /** + * Can be one of \`all\`, \`owner\`, \`public\`, \`private\`, \`member\`. Default: \`all\` + * + * Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. + * @default "all" + */ + type?: TypeEnum1; + /** + * Can be one of \`all\`, \`public\`, or \`private\`. + * @default "all" + */ + visibility?: VisibilityEnum; +} + +/** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ +export enum ReposListForAuthenticatedUserParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ +export enum ReposListForAuthenticatedUserParams1SortEnum { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** + * Can be one of \`all\`, \`owner\`, \`public\`, \`private\`, \`member\`. Default: \`all\` + * + * Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. + * @default "all" + */ +export enum ReposListForAuthenticatedUserParams1TypeEnum { + All = "all", + Owner = "owner", + Public = "public", + Private = "private", + Member = "member", +} + +/** + * Can be one of \`all\`, \`public\`, or \`private\`. + * @default "all" + */ +export enum ReposListForAuthenticatedUserParams1VisibilityEnum { + All = "all", + Public = "public", + Private = "private", +} + +export type ReposListForOrgData = MinimalRepository[]; + +export interface ReposListForOrgParams { + /** Can be one of \`asc\` or \`desc\`. Default: when using \`full_name\`: \`asc\`, otherwise \`desc\` */ + direction?: DirectionEnum4; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "created" + */ + sort?: SortEnum4; + /** Specifies the types of repositories you want returned. Can be one of \`all\`, \`public\`, \`private\`, \`forks\`, \`sources\`, \`member\`, \`internal\`. Default: \`all\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`type\` can also be \`internal\`. */ + type?: TypeEnum; +} + +/** Can be one of \`asc\` or \`desc\`. Default: when using \`full_name\`: \`asc\`, otherwise \`desc\` */ +export enum ReposListForOrgParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "created" + */ +export enum ReposListForOrgParams1SortEnum { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** Specifies the types of repositories you want returned. Can be one of \`all\`, \`public\`, \`private\`, \`forks\`, \`sources\`, \`member\`, \`internal\`. Default: \`all\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`type\` can also be \`internal\`. */ +export enum ReposListForOrgParams1TypeEnum { + All = "all", + Public = "public", + Private = "private", + Forks = "forks", + Sources = "sources", + Member = "member", + Internal = "internal", +} + +export type ReposListForUserData = MinimalRepository[]; + +export interface ReposListForUserParams { + /** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ + direction?: DirectionEnum18; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ + sort?: SortEnum21; + /** + * Can be one of \`all\`, \`owner\`, \`member\`. + * @default "owner" + */ + type?: TypeEnum2; + username: string; +} + +/** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ +export enum ReposListForUserParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ +export enum ReposListForUserParams1SortEnum { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** + * Can be one of \`all\`, \`owner\`, \`member\`. + * @default "owner" + */ +export enum ReposListForUserParams1TypeEnum { + All = "all", + Owner = "owner", + Member = "member", +} + +export type ReposListForksData = MinimalRepository[]; + +export interface ReposListForksParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** + * The sort order. Can be either \`newest\`, \`oldest\`, or \`stargazers\`. + * @default "newest" + */ + sort?: SortEnum5; +} + +/** + * The sort order. Can be either \`newest\`, \`oldest\`, or \`stargazers\`. + * @default "newest" + */ +export enum ReposListForksParams1SortEnum { + Newest = "newest", + Oldest = "oldest", + Stargazers = "stargazers", +} + +export type ReposListInvitationsData = RepositoryInvitation[]; + +export type ReposListInvitationsForAuthenticatedUserData = RepositoryInvitation[]; + +export interface ReposListInvitationsForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export interface ReposListInvitationsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListLanguagesData = Language; + +export type ReposListPagesBuildsData = PageBuild[]; + +export interface ReposListPagesBuildsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListPublicData = MinimalRepository[]; + +export interface ReposListPublicParams { + /** A repository ID. Only return repositories with an ID greater than this ID. */ + since?: number; +} + +export type ReposListPullRequestsAssociatedWithCommitData = PullRequestSimple[]; + +export interface ReposListPullRequestsAssociatedWithCommitParams { + /** commit_sha parameter */ + commitSha: string; + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListReleaseAssetsData = ReleaseAsset[]; + +export interface ReposListReleaseAssetsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** release_id parameter */ + releaseId: number; + repo: string; +} + +export type ReposListReleasesData = Release[]; + +export interface ReposListReleasesParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListTagsData = Tag[]; + +export interface ReposListTagsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListTeamsData = Team[]; + +export interface ReposListTeamsParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposListWebhooksData = Hook[]; + +export interface ReposListWebhooksParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; +} + +export type ReposMergeData = Commit; + +export type ReposMergeError = { + /** @example ""https://docs.github.com/rest/reference/repos#perform-a-merge"" */ + documentation_url?: string; + message?: string; +}; + +export interface ReposMergePayload { + /** The name of the base branch that the head will be merged into. */ + base: string; + /** Commit message to use for the merge commit. If omitted, a default message will be used. */ + commit_message?: string; + /** The head to merge. This can be a branch name or a commit SHA1. */ + head: string; +} + +export type ReposPingWebhookData = any; + +export type ReposRemoveAppAccessRestrictionsData = Integration[]; + +/** @example {"apps":["my-app"]} */ +export interface ReposRemoveAppAccessRestrictionsPayload { + /** apps parameter */ + apps: string[]; +} + +export type ReposRemoveCollaboratorData = any; + +export type ReposRemoveStatusCheckContextsData = string[]; + +/** @example {"contexts":["contexts"]} */ +export interface ReposRemoveStatusCheckContextsPayload { + /** contexts parameter */ + contexts: string[]; +} + +export type ReposRemoveStatusCheckProtectionData = any; + +export type ReposRemoveTeamAccessRestrictionsData = Team[]; + +/** @example {"teams":["my-team"]} */ +export interface ReposRemoveTeamAccessRestrictionsPayload { + /** teams parameter */ + teams: string[]; +} + +export type ReposRemoveUserAccessRestrictionsData = SimpleUser[]; + +/** @example {"users":["mona"]} */ +export interface ReposRemoveUserAccessRestrictionsPayload { + /** users parameter */ + users: string[]; +} + +export type ReposRenameBranchData = BranchWithProtection; + +export interface ReposRenameBranchPayload { + /** The new name of the branch. */ + new_name: string; +} + +export type ReposReplaceAllTopicsData = Topic; + +export interface ReposReplaceAllTopicsPayload { + /** An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (\`[]\`) to clear all topics from the repository. **Note:** Topic \`names\` cannot contain uppercase letters. */ + names: string[]; +} + +export type ReposRequestPagesBuildData = PageBuildStatus; + +export type ReposSetAdminBranchProtectionData = ProtectedBranchAdminEnforced; + +export type ReposSetAppAccessRestrictionsData = Integration[]; + +/** @example {"apps":["my-app"]} */ +export interface ReposSetAppAccessRestrictionsPayload { + /** apps parameter */ + apps: string[]; +} + +export type ReposSetStatusCheckContextsData = string[]; + +/** @example {"contexts":["contexts"]} */ +export interface ReposSetStatusCheckContextsPayload { + /** contexts parameter */ + contexts: string[]; +} + +export type ReposSetTeamAccessRestrictionsData = Team[]; + +/** @example {"teams":["my-team"]} */ +export interface ReposSetTeamAccessRestrictionsPayload { + /** teams parameter */ + teams: string[]; +} + +export type ReposSetUserAccessRestrictionsData = SimpleUser[]; + +/** @example {"users":["mona"]} */ +export interface ReposSetUserAccessRestrictionsPayload { + /** users parameter */ + users: string[]; +} + +export type ReposTestPushWebhookData = any; + +export type ReposTransferData = Repository; + +export interface ReposTransferPayload { + /** The username or organization name the repository will be transferred to. */ + new_owner: string; + /** ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories. */ + team_ids?: number[]; +} + +export type ReposUpdateBranchProtectionData = ProtectedBranch; + +export interface ReposUpdateBranchProtectionPayload { + /** Allows deletion of the protected branch by anyone with write access to the repository. Set to \`false\` to prevent deletion of the protected branch. Default: \`false\`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation. */ + allow_deletions?: boolean; + /** Permits force pushes to the protected branch by anyone with write access to the repository. Set to \`true\` to allow force pushes. Set to \`false\` or \`null\` to block force pushes. Default: \`false\`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation." */ + allow_force_pushes?: boolean | null; + /** Enforce all configured restrictions for administrators. Set to \`true\` to enforce required status checks for repository administrators. Set to \`null\` to disable. */ + enforce_admins: boolean | null; + /** Enforces a linear commit Git history, which prevents anyone from pushing merge commits to a branch. Set to \`true\` to enforce a linear commit history. Set to \`false\` to disable a linear commit Git history. Your repository must allow squash merging or rebase merging before you can enable a linear commit history. Default: \`false\`. For more information, see "[Requiring a linear commit history](https://help.github.com/github/administering-a-repository/requiring-a-linear-commit-history)" in the GitHub Help documentation. */ + required_linear_history?: boolean; + /** Require at least one approving review on a pull request, before merging. Set to \`null\` to disable. */ + required_pull_request_reviews: { + /** Set to \`true\` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ + dismiss_stale_reviews?: boolean; + /** Specify which users and teams can dismiss pull request reviews. Pass an empty \`dismissal_restrictions\` object to disable. User and team \`dismissal_restrictions\` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ + dismissal_restrictions?: { + /** The list of team \`slug\`s with dismissal access */ + teams?: string[]; + /** The list of user \`login\`s with dismissal access */ + users?: string[]; + }; + /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) review them. */ + require_code_owner_reviews?: boolean; + /** Specify the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ + required_approving_review_count?: number; + } | null; + /** Require status checks to pass before merging. Set to \`null\` to disable. */ + required_status_checks: { + /** The list of status checks to require in order to merge into this branch */ + contexts: string[]; + /** Require branches to be up to date before merging. */ + strict: boolean; + } | null; + /** Restrict who can push to the protected branch. User, app, and team \`restrictions\` are only available for organization-owned repositories. Set to \`null\` to disable. */ + restrictions: { + /** The list of app \`slug\`s with push access */ + apps?: string[]; + /** The list of team \`slug\`s with push access */ + teams: string[]; + /** The list of user \`login\`s with push access */ + users: string[]; + } | null; +} + +export type ReposUpdateCommitCommentData = CommitComment; + +export interface ReposUpdateCommitCommentPayload { + /** The contents of the comment */ + body: string; +} + +export type ReposUpdateData = FullRepository; + +export type ReposUpdateInformationAboutPagesSiteData = any; + +/** The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. */ +export enum ReposUpdateInformationAboutPagesSitePathEnum { + Value = "/", + ValueDocs = "/docs", +} + +export interface ReposUpdateInformationAboutPagesSitePayload { + /** Specify a custom domain for the repository. Sending a \`null\` value will remove the custom domain. For more about custom domains, see "[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/)." */ + cname?: string | null; + /** Configures access controls for the GitHub Pages site. If public is set to \`true\`, the site is accessible to anyone on the internet. If set to \`false\`, the site will only be accessible to users who have at least \`read\` access to the repository that published the site. This includes anyone in your Enterprise if the repository is set to \`internal\` visibility. This feature is only available to repositories in an organization on an Enterprise plan. */ + public?: boolean; + /** Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory \`/docs\`. Possible values are \`"gh-pages"\`, \`"master"\`, and \`"master /docs"\`. */ + source: + | ReposUpdateInformationAboutPagesSiteSourceEnum + | { + /** The repository branch used to publish your site's source files. */ + branch: string; + /** The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. */ + path: ReposUpdateInformationAboutPagesSitePathEnum; + }; +} + +/** Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory \`/docs\`. Possible values are \`"gh-pages"\`, \`"master"\`, and \`"master /docs"\`. */ +export enum ReposUpdateInformationAboutPagesSiteSourceEnum { + GhPages = "gh-pages", + Master = "master", + MasterDocs = "master /docs", +} + +export type ReposUpdateInvitationData = RepositoryInvitation; + +export interface ReposUpdateInvitationPayload { + /** The permissions that the associated user will have on the repository. Valid values are \`read\`, \`write\`, \`maintain\`, \`triage\`, and \`admin\`. */ + permissions?: ReposUpdateInvitationPermissionsEnum; +} + +/** The permissions that the associated user will have on the repository. Valid values are \`read\`, \`write\`, \`maintain\`, \`triage\`, and \`admin\`. */ +export enum ReposUpdateInvitationPermissionsEnum { + Read = "read", + Write = "write", + Maintain = "maintain", + Triage = "triage", + Admin = "admin", +} + +export interface ReposUpdatePayload { + /** + * Either \`true\` to allow merging pull requests with a merge commit, or \`false\` to prevent merging pull requests with merge commits. + * @default true + */ + allow_merge_commit?: boolean; + /** + * Either \`true\` to allow rebase-merging pull requests, or \`false\` to prevent rebase-merging. + * @default true + */ + allow_rebase_merge?: boolean; + /** + * Either \`true\` to allow squash-merging pull requests, or \`false\` to prevent squash-merging. + * @default true + */ + allow_squash_merge?: boolean; + /** + * \`true\` to archive this repository. **Note**: You cannot unarchive repositories through the API. + * @default false + */ + archived?: boolean; + /** Updates the default branch for this repository. */ + default_branch?: string; + /** + * Either \`true\` to allow automatically deleting head branches when pull requests are merged, or \`false\` to prevent automatic deletion. + * @default false + */ + delete_branch_on_merge?: boolean; + /** A short description of the repository. */ + description?: string; + /** + * Either \`true\` to enable issues for this repository or \`false\` to disable them. + * @default true + */ + has_issues?: boolean; + /** + * Either \`true\` to enable projects for this repository or \`false\` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is \`false\`, and if you pass \`true\`, the API returns an error. + * @default true + */ + has_projects?: boolean; + /** + * Either \`true\` to enable the wiki for this repository or \`false\` to disable it. + * @default true + */ + has_wiki?: boolean; + /** A URL with more information about the repository. */ + homepage?: string; + /** + * Either \`true\` to make this repo available as a template repository or \`false\` to prevent it. + * @default false + */ + is_template?: boolean; + /** The name of the repository. */ + name?: string; + /** + * Either \`true\` to make the repository private or \`false\` to make it public. Default: \`false\`. + * **Note**: You will get a \`422\` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a \`422\` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. + * @default false + */ + private?: boolean; + /** Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. The \`visibility\` parameter overrides the \`private\` parameter when you use both along with the \`nebula-preview\` preview header. */ + visibility?: ReposUpdateVisibilityEnum; +} + +export type ReposUpdatePullRequestReviewProtectionData = ProtectedBranchPullRequestReview; + +export interface ReposUpdatePullRequestReviewProtectionPayload { + /** Set to \`true\` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ + dismiss_stale_reviews?: boolean; + /** Specify which users and teams can dismiss pull request reviews. Pass an empty \`dismissal_restrictions\` object to disable. User and team \`dismissal_restrictions\` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ + dismissal_restrictions?: { + /** The list of team \`slug\`s with dismissal access */ + teams?: string[]; + /** The list of user \`login\`s with dismissal access */ + users?: string[]; + }; + /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed. */ + require_code_owner_reviews?: boolean; + /** Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ + required_approving_review_count?: number; +} + +export type ReposUpdateReleaseAssetData = ReleaseAsset; + +export interface ReposUpdateReleaseAssetPayload { + /** An alternate short description of the asset. Used in place of the filename. */ + label?: string; + /** The file name of the asset. */ + name?: string; + /** @example ""uploaded"" */ + state?: string; +} + +export type ReposUpdateReleaseData = Release; + +export interface ReposUpdateReleasePayload { + /** Text describing the contents of the tag. */ + body?: string; + /** \`true\` makes the release a draft, and \`false\` publishes the release. */ + draft?: boolean; + /** The name of the release. */ + name?: string; + /** \`true\` to identify the release as a prerelease, \`false\` to identify the release as a full release. */ + prerelease?: boolean; + /** The name of the tag. */ + tag_name?: string; + /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually \`master\`). */ + target_commitish?: string; +} + +export type ReposUpdateStatusCheckProtectionData = StatusCheckPolicy; + +export interface ReposUpdateStatusCheckProtectionPayload { + /** The list of status checks to require in order to merge into this branch */ + contexts?: string[]; + /** Require branches to be up to date before merging. */ + strict?: boolean; +} + +/** Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. The \`visibility\` parameter overrides the \`private\` parameter when you use both along with the \`nebula-preview\` preview header. */ +export enum ReposUpdateVisibilityEnum { + Public = "public", + Private = "private", + Visibility = "visibility", + Internal = "internal", +} + +export type ReposUpdateWebhookConfigForRepoData = WebhookConfig; + +/** @example {"content_type":"json","insecure_ssl":"0","secret":"********","url":"https://example.com/webhook"} */ +export interface ReposUpdateWebhookConfigForRepoPayload { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; +} + +export type ReposUpdateWebhookData = Hook; + +export interface ReposUpdateWebhookPayload { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Determines a list of events to be added to the list of events that the Hook triggers for. */ + add_events?: string[]; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/repos#create-hook-config-params). */ + config?: { + /** @example ""bar@example.com"" */ + address?: string; + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** @example ""The Serious Room"" */ + room?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. This replaces the entire array of events. + * @default ["push"] + */ + events?: string[]; + /** Determines a list of events to be removed from the list of events that the Hook triggers for. */ + remove_events?: string[]; +} + +export type ReposUploadReleaseAssetData = ReleaseAsset; + +export interface ReposUploadReleaseAssetParams { + label?: string; + name?: string; + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; +} + +/** The raw file data */ +export type ReposUploadReleaseAssetPayload = string; + +/** + * Repository + * A git repository + */ +export interface Repository { + /** + * Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit?: boolean; + /** + * Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge?: boolean; + /** + * Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + /** + * Whether the repository is archived. + * @default false + */ + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string | null; + /** + * The default branch of the repository. + * @example "master" + */ + default_branch: string; + /** + * Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** + * Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads: boolean; + /** + * Whether issues are enabled. + * @default true + * @example true + */ + has_issues: boolean; + has_pages: boolean; + /** + * Whether projects are enabled. + * @default true + * @example true + */ + has_projects: boolean; + /** + * Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** + * Unique identifier of the repository + * @example 42 + */ + id: number; + /** + * Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** + * The name of the repository. + * @example "Team Environment" + */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + maintain?: boolean; + pull: boolean; + push: boolean; + triage?: boolean; + }; + /** + * Whether the repository is private or public. + * @default false + */ + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example ""2020-07-09T00:17:42Z"" */ + starred_at?: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url?: string; + archived?: boolean; + assignees_url?: string; + blobs_url?: string; + branches_url?: string; + clone_url?: string; + collaborators_url?: string; + comments_url?: string; + commits_url?: string; + compare_url?: string; + contents_url?: string; + contributors_url?: string; + created_at?: string; + default_branch?: string; + delete_branch_on_merge?: boolean; + deployments_url?: string; + description?: string; + disabled?: boolean; + downloads_url?: string; + events_url?: string; + fork?: boolean; + forks_count?: number; + forks_url?: string; + full_name?: string; + git_commits_url?: string; + git_refs_url?: string; + git_tags_url?: string; + git_url?: string; + has_downloads?: boolean; + has_issues?: boolean; + has_pages?: boolean; + has_projects?: boolean; + has_wiki?: boolean; + homepage?: string; + hooks_url?: string; + html_url?: string; + id?: number; + is_template?: boolean; + issue_comment_url?: string; + issue_events_url?: string; + issues_url?: string; + keys_url?: string; + labels_url?: string; + language?: string; + languages_url?: string; + merges_url?: string; + milestones_url?: string; + mirror_url?: string; + name?: string; + network_count?: number; + node_id?: string; + notifications_url?: string; + open_issues_count?: number; + owner?: { + avatar_url?: string; + events_url?: string; + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string; + html_url?: string; + id?: number; + login?: string; + node_id?: string; + organizations_url?: string; + received_events_url?: string; + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + subscriptions_url?: string; + type?: string; + url?: string; + }; + permissions?: { + admin?: boolean; + pull?: boolean; + push?: boolean; + }; + private?: boolean; + pulls_url?: string; + pushed_at?: string; + releases_url?: string; + size?: number; + ssh_url?: string; + stargazers_count?: number; + stargazers_url?: string; + statuses_url?: string; + subscribers_count?: number; + subscribers_url?: string; + subscription_url?: string; + svn_url?: string; + tags_url?: string; + teams_url?: string; + temp_clone_token?: string; + topics?: string[]; + trees_url?: string; + updated_at?: string; + url?: string; + visibility?: string; + watchers_count?: number; + } | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @default "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Repository Collaborator Permission + * Repository Collaborator Permission + */ +export interface RepositoryCollaboratorPermission { + permission: string; + user: SimpleUser | null; +} + +/** + * Repository Invitation + * Repository invitations let you manage who you collaborate with. + */ +export interface RepositoryInvitation { + /** + * @format date-time + * @example "2016-06-13T14:52:50-05:00" + */ + created_at: string; + /** Whether or not the invitation has expired */ + expired?: boolean; + /** @example "https://github.com/octocat/Hello-World/invitations" */ + html_url: string; + /** + * Unique identifier of the repository invitation. + * @example 42 + */ + id: number; + invitee: SimpleUser | null; + inviter: SimpleUser | null; + node_id: string; + /** + * The permission associated with the invitation. + * @example "read" + */ + permissions: RepositoryInvitationPermissionsEnum; + /** Minimal Repository */ + repository: MinimalRepository; + /** + * URL for the repository invitation + * @example "https://api.github.com/user/repository-invitations/1" + */ + url: string; +} + +/** + * The permission associated with the invitation. + * @example "read" + */ +export enum RepositoryInvitationPermissionsEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +/** + * Repository Invitation + * Repository invitations let you manage who you collaborate with. + */ +export interface RepositorySubscription { + /** + * @format date-time + * @example "2012-10-06T21:34:12Z" + */ + created_at: string; + /** Determines if all notifications should be blocked from this repository. */ + ignored: boolean; + reason: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** + * Determines if notifications should be received from this repository. + * @example true + */ + subscribed: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/subscription" + */ + url: string; +} + +/** Requires Authentication */ +export type RequiresAuthentication = BasicError; + +/** + * Legacy Review Comment + * Legacy Review Comment + */ +export interface ReviewComment { + _links: { + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + pull_request: Link; + /** Hypermedia Link */ + self: Link; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** @example "Great stuff" */ + body: string; + body_html?: string; + body_text?: string; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_id: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." */ + diff_hunk: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + html_url: string; + /** @example 10 */ + id: number; + /** @example 8 */ + in_reply_to_id?: number; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" */ + node_id: string; + /** @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" */ + original_commit_id: string; + /** + * The original line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** @example 4 */ + original_position: number; + /** + * The original first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + /** @example "file1.txt" */ + path: string; + /** @example 1 */ + position: number | null; + /** @example 42 */ + pull_request_review_id: number | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + pull_request_url: string; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + side?: ReviewCommentSideEnum; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + start_side?: ReviewCommentStartSideEnum; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ +export enum ReviewCommentSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", +} + +/** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ +export enum ReviewCommentStartSideEnum { + LEFT = "LEFT", + RIGHT = "RIGHT", +} + +/** + * Filter members returned by their role. Can be one of: + * \\* \`all\` - All members of the organization, regardless of role. + * \\* \`admin\` - Organization owners. + * \\* \`member\` - Non-owner organization members. + * @default "all" + */ +export enum RoleEnum { + All = "all", + Admin = "admin", + Member = "member", +} + +/** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ +export enum RoleEnum1 { + Member = "member", + Maintainer = "maintainer", + All = "all", +} + +/** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ +export enum RoleEnum2 { + Member = "member", + Maintainer = "maintainer", + All = "all", +} + +/** + * Self hosted runners + * A self hosted runner + */ +export interface Runner { + busy: boolean; + /** + * The id of the runner. + * @example 5 + */ + id: number; + labels: { + /** Unique identifier of the label. */ + id?: number; + /** Name of the label. */ + name?: string; + /** The type of label. Read-only labels are applied automatically when the runner is configured. */ + type?: RunnerTypeEnum; + }[]; + /** + * The name of the runner. + * @example "iMac" + */ + name: string; + /** + * The Operating System of the runner. + * @example "macos" + */ + os: string; + /** + * The status of the runner. + * @example "online" + */ + status: string; +} + +/** + * Runner Application + * Runner Application + */ +export interface RunnerApplication { + architecture: string; + download_url: string; + filename: string; + os: string; +} + +export interface RunnerGroupsEnterprise { + allows_public_repositories: boolean; + default: boolean; + id: number; + name: string; + runners_url: string; + selected_organizations_url?: string; + visibility: string; +} + +export interface RunnerGroupsOrg { + allows_public_repositories: boolean; + default: boolean; + id: number; + inherited: boolean; + inherited_allows_public_repositories?: boolean; + name: string; + runners_url: string; + /** Link to the selected repositories resource for this runner group. Not present unless visibility was set to \`selected\` */ + selected_repositories_url?: string; + visibility: string; +} + +/** The type of label. Read-only labels are applied automatically when the runner is configured. */ +export enum RunnerTypeEnum { + ReadOnly = "read-only", + Custom = "custom", +} + +/** Bad Request */ +export type ScimBadRequest = ScimError; + +/** Conflict */ +export type ScimConflict = ScimError; + +export type ScimDeleteUserFromOrgData = any; + +export interface ScimEnterpriseGroup { + displayName?: string; + externalId?: string | null; + id: string; + members?: { + $ref?: string; + display?: string; + value?: string; + }[]; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + schemas: string[]; +} + +export interface ScimEnterpriseUser { + active?: boolean; + emails?: { + primary?: boolean; + type?: string; + value?: string; + }[]; + externalId?: string; + groups?: { + value?: string; + }[]; + id: string; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + name?: { + familyName?: string; + givenName?: string; + }; + schemas: string[]; + userName?: string; +} + +/** + * Scim Error + * Scim Error + */ +export interface ScimError { + detail?: string | null; + documentation_url?: string | null; + message?: string | null; + schemas?: string[]; + scimType?: string | null; + status?: number; +} + +/** Forbidden */ +export type ScimForbidden = ScimError; + +export type ScimGetProvisioningInformationForUserData = ScimUser; + +export interface ScimGroupListEnterprise { + Resources: { + displayName?: string; + externalId?: string | null; + id: string; + members?: { + $ref?: string; + display?: string; + value?: string; + }[]; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + schemas: string[]; + }[]; + itemsPerPage: number; + schemas: string[]; + startIndex: number; + totalResults: number; +} + +/** Internal Error */ +export type ScimInternalError = ScimError; + +export type ScimListProvisionedIdentitiesData = ScimUserList; + +export interface ScimListProvisionedIdentitiesParams { + /** Used for pagination: the number of results to return. */ + count?: number; + /** + * Filters results using the equals query parameter operator (\`eq\`). You can filter results that are equal to \`id\`, \`userName\`, \`emails\`, and \`external_id\`. For example, to search for an identity with the \`userName\` Octocat, you would use this query: + * + * \`?filter=userName%20eq%20\\"Octocat\\"\`. + * + * To filter results for the identity with the email \`octocat@github.com\`, you would use this query: + * + * \`?filter=emails%20eq%20\\"octocat@github.com\\"\`. + */ + filter?: string; + org: string; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; +} + +/** Resource Not Found */ +export type ScimNotFound = ScimError; + +export type ScimProvisionAndInviteUserData = ScimUser; + +export interface ScimProvisionAndInviteUserPayload { + active?: boolean; + /** + * The name of the user, suitable for display to end-users + * @example "Jon Doe" + */ + displayName?: string; + /** + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] + */ + emails: { + primary?: boolean; + type?: string; + value: string; + }[]; + externalId?: string; + groups?: string[]; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string; + formatted?: string; + givenName: string; + }; + schemas?: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string; +} + +export type ScimSetInformationForProvisionedUserData = ScimUser; + +export interface ScimSetInformationForProvisionedUserPayload { + active?: boolean; + /** + * The name of the user, suitable for display to end-users + * @example "Jon Doe" + */ + displayName?: string; + /** + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] + */ + emails: { + primary?: boolean; + type?: string; + value: string; + }[]; + externalId?: string; + groups?: string[]; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string; + formatted?: string; + givenName: string; + }; + schemas?: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string; +} + +export type ScimUpdateAttributeForUserData = ScimUser; + +export type ScimUpdateAttributeForUserError = BasicError; + +export enum ScimUpdateAttributeForUserOpEnum { + Add = "add", + Remove = "remove", + Replace = "replace", +} + +export interface ScimUpdateAttributeForUserPayload { + /** + * Set of operations to be performed + * @minItems 1 + * @example [{"op":"replace","value":{"active":false}}] + */ + Operations: { + op: ScimUpdateAttributeForUserOpEnum; + path?: string; + value?: + | { + active?: boolean | null; + externalId?: string | null; + familyName?: string | null; + givenName?: string | null; + userName?: string | null; + } + | { + primary?: boolean; + value?: string; + }[] + | string; + }[]; + schemas?: string[]; +} + +/** + * SCIM /Users + * SCIM /Users provisioning endpoints + */ +export interface ScimUser { + /** + * The active status of the User. + * @example true + */ + active: boolean; + /** + * The name of the user, suitable for display to end-users + * @example "Jon Doe" + */ + displayName?: string | null; + /** + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] + */ + emails: { + primary?: boolean; + value: string; + }[]; + /** + * The ID of the User. + * @example "a7b0f98395" + */ + externalId: string | null; + /** associated groups */ + groups?: { + display?: string; + value?: string; + }[]; + /** + * Unique identifier of an external identity + * @example "1b78eada-9baa-11e6-9eb6-a431576d590e" + */ + id: string; + meta: { + /** + * @format date-time + * @example "2019-01-24T22:45:36.000Z" + */ + created?: string; + /** + * @format date-time + * @example "2019-01-24T22:45:36.000Z" + */ + lastModified?: string; + /** + * @format uri + * @example "https://api.github.com/scim/v2/organizations/myorg-123abc55141bfd8f/Users/c42772b5-2029-11e9-8543-9264a97dec8d" + */ + location?: string; + /** @example "User" */ + resourceType?: string; + }; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string | null; + formatted?: string | null; + givenName: string | null; + }; + /** + * Set of operations to be performed + * @minItems 1 + * @example [{"op":"replace","value":{"active":false}}] + */ + operations?: { + op: ScimUserOpEnum; + path?: string; + value?: string | object | any[]; + }[]; + /** The ID of the organization. */ + organization_id?: number; + /** + * SCIM schema used. + * @minItems 1 + */ + schemas: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string | null; +} + +/** + * SCIM User List + * SCIM User List + */ +export interface ScimUserList { + Resources: ScimUser[]; + /** @example 10 */ + itemsPerPage: number; + /** + * SCIM schema used. + * @minItems 1 + */ + schemas: string[]; + /** @example 1 */ + startIndex: number; + /** @example 3 */ + totalResults: number; +} + +export interface ScimUserListEnterprise { + Resources: { + active?: boolean; + emails?: { + primary?: boolean; + type?: string; + value?: string; + }[]; + externalId?: string; + groups?: { + value?: string; + }[]; + id: string; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + name?: { + familyName?: string; + givenName?: string; + }; + schemas: string[]; + userName?: string; + }[]; + itemsPerPage: number; + schemas: string[]; + startIndex: number; + totalResults: number; +} + +export enum ScimUserOpEnum { + Add = "add", + Remove = "remove", + Replace = "replace", +} + +/** Scoped Installation */ +export interface ScopedInstallation { + /** Simple User */ + account: SimpleUser; + /** @example true */ + has_multiple_single_files?: boolean; + /** The permissions granted to the user-to-server access token. */ + permissions: AppPermissions; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repositories_url: string; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection: ScopedInstallationRepositorySelectionEnum; + /** @example "config.yaml" */ + single_file_name: string | null; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; +} + +/** Describe whether all repositories have been selected or there's a selection involved */ +export enum ScopedInstallationRepositorySelectionEnum { + All = "all", + Selected = "selected", +} + +export interface SearchCodeData { + incomplete_results: boolean; + items: CodeSearchResultItem[]; + total_count: number; +} + +export interface SearchCodeParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum2; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching code](https://help.github.com/articles/searching-code/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query. Can only be \`indexed\`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum12; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchCodeParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query. Can only be \`indexed\`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchCodeParams1SortEnum { + Indexed = "indexed", +} + +export interface SearchCommitsData { + incomplete_results: boolean; + items: CommitSearchResultItem[]; + total_count: number; +} + +export interface SearchCommitsParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum3; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by \`author-date\` or \`committer-date\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum13; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchCommitsParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query by \`author-date\` or \`committer-date\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchCommitsParams1SortEnum { + AuthorDate = "author-date", + CommitterDate = "committer-date", +} + +export interface SearchIssuesAndPullRequestsData { + incomplete_results: boolean; + items: IssueSearchResultItem[]; + total_count: number; +} + +export interface SearchIssuesAndPullRequestsParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum4; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by the number of \`comments\`, \`reactions\`, \`reactions-+1\`, \`reactions--1\`, \`reactions-smile\`, \`reactions-thinking_face\`, \`reactions-heart\`, \`reactions-tada\`, or \`interactions\`. You can also sort results by how recently the items were \`created\` or \`updated\`, Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum14; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchIssuesAndPullRequestsParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query by the number of \`comments\`, \`reactions\`, \`reactions-+1\`, \`reactions--1\`, \`reactions-smile\`, \`reactions-thinking_face\`, \`reactions-heart\`, \`reactions-tada\`, or \`interactions\`. You can also sort results by how recently the items were \`created\` or \`updated\`, Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchIssuesAndPullRequestsParams1SortEnum { + Comments = "comments", + Reactions = "reactions", + Reactions1 = "reactions-+1", + Reactions11 = "reactions--1", + ReactionsSmile = "reactions-smile", + ReactionsThinkingFace = "reactions-thinking_face", + ReactionsHeart = "reactions-heart", + ReactionsTada = "reactions-tada", + Interactions = "interactions", + Created = "created", + Updated = "updated", +} + +export interface SearchLabelsData { + incomplete_results: boolean; + items: LabelSearchResultItem[]; + total_count: number; +} + +export interface SearchLabelsParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum5; + /** The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; + /** The id of the repository. */ + repository_id: number; + /** Sorts the results of your query by when the label was \`created\` or \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum15; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchLabelsParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query by when the label was \`created\` or \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchLabelsParams1SortEnum { + Created = "created", + Updated = "updated", +} + +export interface SearchReposData { + incomplete_results: boolean; + items: RepoSearchResultItem[]; + total_count: number; +} + +export interface SearchReposParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum6; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by number of \`stars\`, \`forks\`, or \`help-wanted-issues\` or how recently the items were \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum16; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchReposParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query by number of \`stars\`, \`forks\`, or \`help-wanted-issues\` or how recently the items were \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchReposParams1SortEnum { + Stars = "stars", + Forks = "forks", + HelpWantedIssues = "help-wanted-issues", + Updated = "updated", +} + +/** Search Result Text Matches */ +export type SearchResultTextMatches = { + fragment?: string; + matches?: { + indices?: number[]; + text?: string; + }[]; + object_type?: string | null; + object_url?: string; + property?: string; +}[]; + +export interface SearchTopicsData { + incomplete_results: boolean; + items: TopicSearchResultItem[]; + total_count: number; +} + +export interface SearchTopicsParams { + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; +} + +export interface SearchUsersData { + incomplete_results: boolean; + items: UserSearchResultItem[]; + total_count: number; +} + +export interface SearchUsersParams { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: OrderEnum7; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching users](https://help.github.com/articles/searching-users/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by number of \`followers\` or \`repositories\`, or when the person \`joined\` GitHub. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SortEnum17; +} + +/** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ +export enum SearchUsersParams1OrderEnum { + Desc = "desc", + Asc = "asc", +} + +/** Sorts the results of your query by number of \`followers\` or \`repositories\`, or when the person \`joined\` GitHub. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SearchUsersParams1SortEnum { + Followers = "followers", + Repositories = "repositories", + Joined = "joined", +} + +export interface SecretScanningAlert { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at?: AlertCreatedAt; + /** The GitHub URL of the alert resource. */ + html_url?: AlertHtmlUrl; + /** The security alert number. */ + number?: AlertNumber; + /** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ + resolution?: SecretScanningAlertResolution; + /** + * The time that the alert was resolved in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ + resolved_at?: string | null; + /** Simple User */ + resolved_by?: SimpleUser; + /** The secret that was detected. */ + secret?: string; + /** The type of secret that secret scanning detected. */ + secret_type?: string; + /** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ + state?: SecretScanningAlertState; + /** The REST API URL of the alert resource. */ + url?: AlertUrl; +} + +/** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ +export type SecretScanningAlertResolution = SecretScanningAlertResolutionEnum | null; + +export enum SecretScanningAlertResolutionEnum { + FalsePositive = "false_positive", + WontFix = "wont_fix", + Revoked = "revoked", + UsedInTests = "used_in_tests", +} + +/** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ +export enum SecretScanningAlertState { + Open = "open", + Resolved = "resolved", +} + +export type SecretScanningGetAlertData = SecretScanningAlert; + +export type SecretScanningListAlertsForRepoData = SecretScanningAlert[]; + +export interface SecretScanningListAlertsForRepoParams { + owner: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + repo: string; + /** Set to \`open\` or \`resolved\` to only list secret scanning alerts in a specific state. */ + state?: StateEnum7; +} + +/** Set to \`open\` or \`resolved\` to only list secret scanning alerts in a specific state. */ +export enum SecretScanningListAlertsForRepoParams1StateEnum { + Open = "open", + Resolved = "resolved", +} + +export type SecretScanningUpdateAlertData = SecretScanningAlert; + +export interface SecretScanningUpdateAlertPayload { + /** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ + resolution?: SecretScanningAlertResolution; + /** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ + state: SecretScanningAlertState; +} + +export interface SelectedActions { + /** Whether GitHub-owned actions are allowed. For example, this includes the actions in the \`actions\` organization. */ + github_owned_allowed: boolean; + /** Specifies a list of string-matching patterns to allow specific action(s). Wildcards, tags, and SHAs are allowed. For example, \`monalisa/octocat@*\`, \`monalisa/octocat@v2\`, \`monalisa/*\`." */ + patterns_allowed: string[]; + /** Whether actions in GitHub Marketplace from verified creators are allowed. Set to \`true\` to allow all GitHub Marketplace actions by verified creators. */ + verified_allowed: boolean; +} + +/** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ +export type SelectedActionsUrl = string; + +/** Service Unavailable */ +export interface ServiceUnavailable { + code?: string; + documentation_url?: string; + message?: string; +} + +/** + * Short Blob + * Short Blob + */ +export interface ShortBlob { + sha: string; + url: string; +} + +/** + * Short Branch + * Short Branch + */ +export interface ShortBranch { + commit: { + sha: string; + /** @format uri */ + url: string; + }; + name: string; + protected: boolean; + /** Branch Protection */ + protection?: BranchProtection; + /** @format uri */ + protection_url?: string; +} + +/** + * Simple Commit + * Simple Commit + */ +export interface SimpleCommit { + author: { + email: string; + name: string; + } | null; + committer: { + email: string; + name: string; + } | null; + id: string; + message: string; + /** @format date-time */ + timestamp: string; + tree_id: string; +} + +/** Simple Commit Status */ +export interface SimpleCommitStatus { + /** @format uri */ + avatar_url: string | null; + context: string; + /** @format date-time */ + created_at: string; + description: string | null; + id: number; + node_id: string; + required?: boolean | null; + state: string; + /** @format uri */ + target_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Simple User + * Simple User + */ +export type SimpleUser = { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example "octocat" */ + login: string; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example ""2020-07-09T00:17:55Z"" */ + starred_at?: string; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @example "User" */ + type: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +}; + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum SortEnum { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum1 { + Created = "created", + Updated = "updated", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum10 { + Created = "created", + Updated = "updated", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum11 { + Created = "created", + Updated = "updated", +} + +/** Sorts the results of your query. Can only be \`indexed\`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum12 { + Indexed = "indexed", +} + +/** Sorts the results of your query by \`author-date\` or \`committer-date\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum13 { + AuthorDate = "author-date", + CommitterDate = "committer-date", +} + +/** Sorts the results of your query by the number of \`comments\`, \`reactions\`, \`reactions-+1\`, \`reactions--1\`, \`reactions-smile\`, \`reactions-thinking_face\`, \`reactions-heart\`, \`reactions-tada\`, or \`interactions\`. You can also sort results by how recently the items were \`created\` or \`updated\`, Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum14 { + Comments = "comments", + Reactions = "reactions", + Reactions1 = "reactions-+1", + Reactions11 = "reactions--1", + ReactionsSmile = "reactions-smile", + ReactionsThinkingFace = "reactions-thinking_face", + ReactionsHeart = "reactions-heart", + ReactionsTada = "reactions-tada", + Interactions = "interactions", + Created = "created", + Updated = "updated", +} + +/** Sorts the results of your query by when the label was \`created\` or \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum15 { + Created = "created", + Updated = "updated", +} + +/** Sorts the results of your query by number of \`stars\`, \`forks\`, or \`help-wanted-issues\` or how recently the items were \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum16 { + Stars = "stars", + Forks = "forks", + HelpWantedIssues = "help-wanted-issues", + Updated = "updated", +} + +/** Sorts the results of your query by number of \`followers\` or \`repositories\`, or when the person \`joined\` GitHub. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ +export enum SortEnum17 { + Followers = "followers", + Repositories = "repositories", + Joined = "joined", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum SortEnum18 { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ +export enum SortEnum19 { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum2 { + Created = "created", + Updated = "updated", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum20 { + Created = "created", + Updated = "updated", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ +export enum SortEnum21 { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum22 { + Created = "created", + Updated = "updated", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum SortEnum3 { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "created" + */ +export enum SortEnum4 { + Created = "created", + Updated = "updated", + Pushed = "pushed", + FullName = "full_name", +} + +/** + * The sort order. Can be either \`newest\`, \`oldest\`, or \`stargazers\`. + * @default "newest" + */ +export enum SortEnum5 { + Newest = "newest", + Oldest = "oldest", + Stargazers = "stargazers", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ +export enum SortEnum6 { + Created = "created", + Updated = "updated", + Comments = "comments", +} + +/** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ +export enum SortEnum7 { + Created = "created", + Updated = "updated", +} + +/** + * What to sort results by. Either \`due_on\` or \`completeness\`. + * @default "due_on" + */ +export enum SortEnum8 { + DueOn = "due_on", + Completeness = "completeness", +} + +/** + * What to sort results by. Can be either \`created\`, \`updated\`, \`popularity\` (comment count) or \`long-running\` (age, filtering by pulls updated in the last month). + * @default "created" + */ +export enum SortEnum9 { + Created = "created", + Updated = "updated", + Popularity = "popularity", + LongRunning = "long-running", +} + +/** + * Stargazer + * Stargazer + */ +export interface Stargazer { + /** @format date-time */ + starred_at: string; + user: SimpleUser | null; +} + +/** + * Starred Repository + * Starred Repository + */ +export interface StarredRepository { + /** A git repository */ + repo: Repository; + /** @format date-time */ + starred_at: string; +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum1 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum10 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum2 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum3 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * The state of the milestone. Either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum4 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum5 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** + * Either \`open\`, \`closed\`, or \`all\` to filter by state. + * @default "open" + */ +export enum StateEnum6 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** Set to \`open\` or \`resolved\` to only list secret scanning alerts in a specific state. */ +export enum StateEnum7 { + Open = "open", + Resolved = "resolved", +} + +/** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ +export enum StateEnum8 { + Open = "open", + Closed = "closed", + All = "all", +} + +/** Indicates the state of the memberships to return. Can be either \`active\` or \`pending\`. If not specified, the API returns both active and pending memberships. */ +export enum StateEnum9 { + Active = "active", + Pending = "pending", +} + +/** + * Status + * The status of a commit. + */ +export interface Status { + avatar_url: string | null; + context: string; + created_at: string; + /** Simple User */ + creator: SimpleUser; + description: string; + id: number; + node_id: string; + state: string; + target_url: string; + updated_at: string; + url: string; +} + +/** + * Status Check Policy + * Status Check Policy + */ +export interface StatusCheckPolicy { + /** @example ["continuous-integration/travis-ci"] */ + contexts: string[]; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks/contexts" + */ + contexts_url: string; + /** @example true */ + strict: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks" + */ + url: string; +} + +/** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ +export enum StatusEnum { + Completed = "completed", + Status = "status", + Conclusion = "conclusion", +} + +/** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ +export enum StatusEnum1 { + Completed = "completed", + Status = "status", + Conclusion = "conclusion", +} + +/** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ +export enum StatusEnum2 { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ +export enum StatusEnum3 { + Queued = "queued", + InProgress = "in_progress", + Completed = "completed", +} + +/** Identifies which additional information you'd like to receive about the person's hovercard. Can be \`organization\`, \`repository\`, \`issue\`, \`pull_request\`. **Required** when using \`subject_id\`. */ +export enum SubjectTypeEnum { + Organization = "organization", + Repository = "repository", + Issue = "issue", + PullRequest = "pull_request", +} + +/** + * Tag + * Tag + */ +export interface Tag { + commit: { + sha: string; + /** @format uri */ + url: string; + }; + /** @example "v0.1" */ + name: string; + node_id: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/tarball/v0.1" + */ + tarball_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/zipball/v0.1" + */ + zipball_url: string; +} + +/** + * Team + * Groups of organization members that gives permissions on specified repositories. + */ +export interface Team { + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + id: number; + members_url: string; + name: string; + node_id: string; + parent?: TeamSimple | null; + permission: string; + privacy?: string; + /** @format uri */ + repositories_url: string; + slug: string; + /** @format uri */ + url: string; +} + +/** + * Team Discussion + * A team discussion is a persistent record of a free-form conversation within a team. + */ +export interface TeamDiscussion { + author: SimpleUser | null; + /** + * The main text of the discussion. + * @example "Please suggest improvements to our workflow in comments." + */ + body: string; + /** @example "

Hi! This is an area for us to collaborate as a team

" */ + body_html: string; + /** + * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. + * @example "0307116bbf7ced493b8d8a346c650b71" + */ + body_version: string; + /** @example 0 */ + comments_count: number; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027/discussions/1/comments" + */ + comments_url: string; + /** + * @format date-time + * @example "2018-01-25T18:56:31Z" + */ + created_at: string; + /** + * @format uri + * @example "https://github.com/orgs/github/teams/justice-league/discussions/1" + */ + html_url: string; + /** @format date-time */ + last_edited_at: string | null; + /** @example "MDE0OlRlYW1EaXNjdXNzaW9uMQ==" */ + node_id: string; + /** + * The unique sequence number of a team discussion. + * @example 42 + */ + number: number; + /** + * Whether or not this discussion should be pinned for easy retrieval. + * @example true + */ + pinned: boolean; + /** + * Whether or not this discussion should be restricted to team members and organization administrators. + * @example true + */ + private: boolean; + reactions?: ReactionRollup; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027" + */ + team_url: string; + /** + * The title of the discussion. + * @example "How can we improve our workflow?" + */ + title: string; + /** + * @format date-time + * @example "2018-01-25T18:56:31Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027/discussions/1" + */ + url: string; +} + +/** + * Team Discussion Comment + * A reply to a discussion within a team. + */ +export interface TeamDiscussionComment { + author: SimpleUser | null; + /** + * The main text of the comment. + * @example "I agree with this suggestion." + */ + body: string; + /** @example "

Do you like apples?

" */ + body_html: string; + /** + * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. + * @example "0307116bbf7ced493b8d8a346c650b71" + */ + body_version: string; + /** + * @format date-time + * @example "2018-01-15T23:53:58Z" + */ + created_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2403582/discussions/1" + */ + discussion_url: string; + /** + * @format uri + * @example "https://github.com/orgs/github/teams/justice-league/discussions/1/comments/1" + */ + html_url: string; + /** @format date-time */ + last_edited_at: string | null; + /** @example "MDIxOlRlYW1EaXNjdXNzaW9uQ29tbWVudDE=" */ + node_id: string; + /** + * The unique sequence number of a team discussion comment. + * @example 42 + */ + number: number; + reactions?: ReactionRollup; + /** + * @format date-time + * @example "2018-01-15T23:53:58Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2403582/discussions/1/comments/1" + */ + url: string; +} + +/** + * Full Team + * Groups of organization members that gives permissions on specified repositories. + */ +export interface TeamFull { + /** + * @format date-time + * @example "2017-07-14T16:53:42Z" + */ + created_at: string; + /** @example "A great team." */ + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + /** + * Unique identifier of the team + * @example 42 + */ + id: number; + /** + * Distinguished Name (DN) that team maps to within LDAP environment + * @example "uid=example,ou=users,dc=github,dc=com" + */ + ldap_dn?: string; + /** @example 3 */ + members_count: number; + /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ + members_url: string; + /** + * Name of the team + * @example "Developers" + */ + name: string; + /** @example "MDQ6VGVhbTE=" */ + node_id: string; + /** Organization Full */ + organization: OrganizationFull; + parent?: TeamSimple | null; + /** + * Permission that the team will have for its repositories + * @example "push" + */ + permission: string; + /** + * The level of privacy this team should have + * @example "closed" + */ + privacy?: TeamFullPrivacyEnum; + /** @example 10 */ + repos_count: number; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/1/repos" + */ + repositories_url: string; + /** @example "justice-league" */ + slug: string; + /** + * @format date-time + * @example "2017-08-17T12:37:15Z" + */ + updated_at: string; + /** + * URL for the team + * @format uri + * @example "https://api.github.com/organizations/1/team/1" + */ + url: string; +} + +/** + * The level of privacy this team should have + * @example "closed" + */ +export enum TeamFullPrivacyEnum { + Closed = "closed", + Secret = "secret", +} + +/** + * Team Membership + * Team Membership + */ +export interface TeamMembership { + /** + * The role of the user in the team. + * @default "member" + * @example "member" + */ + role: TeamMembershipRoleEnum; + state: string; + /** @format uri */ + url: string; +} + +/** + * The role of the user in the team. + * @default "member" + * @example "member" + */ +export enum TeamMembershipRoleEnum { + Member = "member", + Maintainer = "maintainer", +} + +/** + * Team Project + * A team's access to a project. + */ +export interface TeamProject { + body: string | null; + columns_url: string; + created_at: string; + /** Simple User */ + creator: SimpleUser; + html_url: string; + id: number; + name: string; + node_id: string; + number: number; + /** The organization permission for this project. Only present when owner is an organization. */ + organization_permission?: string; + owner_url: string; + permissions: { + admin: boolean; + read: boolean; + write: boolean; + }; + /** Whether the project is private or not. Only present when owner is an organization. */ + private?: boolean; + state: string; + updated_at: string; + url: string; +} + +/** + * Team Repository + * A team's access to a repository. + */ +export interface TeamRepository { + /** + * Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit?: boolean; + /** + * Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge?: boolean; + /** + * Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + /** + * Whether the repository is archived. + * @default false + */ + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string | null; + /** + * The default branch of the repository. + * @example "master" + */ + default_branch: string; + /** + * Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** + * Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads: boolean; + /** + * Whether issues are enabled. + * @default true + * @example true + */ + has_issues: boolean; + has_pages: boolean; + /** + * Whether projects are enabled. + * @default true + * @example true + */ + has_projects: boolean; + /** + * Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** + * Unique identifier of the repository + * @example 42 + */ + id: number; + /** + * Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** + * The name of the repository. + * @example "Team Environment" + */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + maintain?: boolean; + pull: boolean; + push: boolean; + triage?: boolean; + }; + /** + * Whether the repository is private or public. + * @default false + */ + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: Repository | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @default "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Team Simple + * Groups of organization members that gives permissions on specified repositories. + */ +export type TeamSimple = { + /** + * Description of the team + * @example "A great team." + */ + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + /** + * Unique identifier of the team + * @example 1 + */ + id: number; + /** + * Distinguished Name (DN) that team maps to within LDAP environment + * @example "uid=example,ou=users,dc=github,dc=com" + */ + ldap_dn?: string; + /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ + members_url: string; + /** + * Name of the team + * @example "Justice League" + */ + name: string; + /** @example "MDQ6VGVhbTE=" */ + node_id: string; + /** + * Permission that the team will have for its repositories + * @example "admin" + */ + permission: string; + /** + * The level of privacy this team should have + * @example "closed" + */ + privacy?: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/1/repos" + */ + repositories_url: string; + /** @example "justice-league" */ + slug: string; + /** + * URL for the team + * @format uri + * @example "https://api.github.com/organizations/1/team/1" + */ + url: string; +}; + +export type TeamsAddMemberLegacyData = any; + +export type TeamsAddMemberLegacyError = { + /** @example ""https://docs.github.com/rest"" */ + documentation_url?: string; + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; +}; + +export type TeamsAddOrUpdateMembershipForUserInOrgData = TeamMembership; + +export type TeamsAddOrUpdateMembershipForUserInOrgError = { + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; +}; + +export interface TeamsAddOrUpdateMembershipForUserInOrgPayload { + /** + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" + */ + role?: TeamsAddOrUpdateMembershipForUserInOrgRoleEnum; +} + +/** + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" + */ +export enum TeamsAddOrUpdateMembershipForUserInOrgRoleEnum { + Member = "member", + Maintainer = "maintainer", +} + +export type TeamsAddOrUpdateMembershipForUserLegacyData = TeamMembership; + +export type TeamsAddOrUpdateMembershipForUserLegacyError = { + /** @example ""https://help.github.com/articles/github-and-trade-controls"" */ + documentation_url?: string; + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; +}; + +export interface TeamsAddOrUpdateMembershipForUserLegacyPayload { + /** + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" + */ + role?: TeamsAddOrUpdateMembershipForUserLegacyRoleEnum; +} + +/** + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" + */ +export enum TeamsAddOrUpdateMembershipForUserLegacyRoleEnum { + Member = "member", + Maintainer = "maintainer", +} + +export type TeamsAddOrUpdateProjectPermissionsInOrgData = any; + +export type TeamsAddOrUpdateProjectPermissionsInOrgError = { + documentation_url?: string; + message?: string; +}; + +export interface TeamsAddOrUpdateProjectPermissionsInOrgPayload { + /** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ + permission?: TeamsAddOrUpdateProjectPermissionsInOrgPermissionEnum; +} + +/** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ +export enum TeamsAddOrUpdateProjectPermissionsInOrgPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +export type TeamsAddOrUpdateProjectPermissionsLegacyData = any; + +export type TeamsAddOrUpdateProjectPermissionsLegacyError = { + documentation_url?: string; + message?: string; +}; + +export interface TeamsAddOrUpdateProjectPermissionsLegacyPayload { + /** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ + permission?: TeamsAddOrUpdateProjectPermissionsLegacyPermissionEnum; +} + +/** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ +export enum TeamsAddOrUpdateProjectPermissionsLegacyPermissionEnum { + Read = "read", + Write = "write", + Admin = "admin", +} + +export type TeamsAddOrUpdateRepoPermissionsInOrgData = any; + +export interface TeamsAddOrUpdateRepoPermissionsInOrgPayload { + /** + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * \\* \`maintain\` - team members can manage the repository without access to sensitive or destructive actions. Recommended for project managers. Only applies to repositories owned by organizations. + * \\* \`triage\` - team members can proactively manage issues and pull requests without write access. Recommended for contributors who triage a repository. Only applies to repositories owned by organizations. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. + */ + permission?: TeamsAddOrUpdateRepoPermissionsInOrgPermissionEnum; +} + +/** + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * \\* \`maintain\` - team members can manage the repository without access to sensitive or destructive actions. Recommended for project managers. Only applies to repositories owned by organizations. + * \\* \`triage\` - team members can proactively manage issues and pull requests without write access. Recommended for contributors who triage a repository. Only applies to repositories owned by organizations. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. + */ +export enum TeamsAddOrUpdateRepoPermissionsInOrgPermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", + Maintain = "maintain", + Triage = "triage", +} + +export type TeamsAddOrUpdateRepoPermissionsLegacyData = any; + +export interface TeamsAddOrUpdateRepoPermissionsLegacyPayload { + /** + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. + */ + permission?: TeamsAddOrUpdateRepoPermissionsLegacyPermissionEnum; +} + +/** + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. + */ +export enum TeamsAddOrUpdateRepoPermissionsLegacyPermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", +} + +export type TeamsCheckPermissionsForProjectInOrgData = TeamProject; + +export type TeamsCheckPermissionsForProjectLegacyData = TeamProject; + +export type TeamsCheckPermissionsForRepoInOrgData = TeamRepository; + +export type TeamsCheckPermissionsForRepoLegacyData = TeamRepository; + +export type TeamsCreateData = TeamFull; + +export type TeamsCreateDiscussionCommentInOrgData = TeamDiscussionComment; + +export interface TeamsCreateDiscussionCommentInOrgPayload { + /** The discussion comment's body text. */ + body: string; +} + +export type TeamsCreateDiscussionCommentLegacyData = TeamDiscussionComment; + +export interface TeamsCreateDiscussionCommentLegacyPayload { + /** The discussion comment's body text. */ + body: string; +} + +export type TeamsCreateDiscussionInOrgData = TeamDiscussion; + +export interface TeamsCreateDiscussionInOrgPayload { + /** The discussion post's body text. */ + body: string; + /** + * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to \`true\` to create a private post. + * @default false + */ + private?: boolean; + /** The discussion post's title. */ + title: string; +} + +export type TeamsCreateDiscussionLegacyData = TeamDiscussion; + +export interface TeamsCreateDiscussionLegacyPayload { + /** The discussion post's body text. */ + body: string; + /** + * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to \`true\` to create a private post. + * @default false + */ + private?: boolean; + /** The discussion post's title. */ + title: string; +} + +export type TeamsCreateOrUpdateIdpGroupConnectionsInOrgData = GroupMapping; + +export interface TeamsCreateOrUpdateIdpGroupConnectionsInOrgPayload { + /** The IdP groups you want to connect to a GitHub team. When updating, the new \`groups\` object will replace the original one. You must include any existing groups that you don't want to remove. */ + groups: { + /** Description of the IdP group. */ + group_description: string; + /** ID of the IdP group. */ + group_id: string; + /** Name of the IdP group. */ + group_name: string; + }[]; +} + +export type TeamsCreateOrUpdateIdpGroupConnectionsLegacyData = GroupMapping; + +export interface TeamsCreateOrUpdateIdpGroupConnectionsLegacyPayload { + /** The IdP groups you want to connect to a GitHub team. When updating, the new \`groups\` object will replace the original one. You must include any existing groups that you don't want to remove. */ + groups: { + /** @example ""moar cheese pleese"" */ + description?: string; + /** Description of the IdP group. */ + group_description: string; + /** ID of the IdP group. */ + group_id: string; + /** Name of the IdP group. */ + group_name: string; + /** @example ""caceab43fc9ffa20081c"" */ + id?: string; + /** @example ""external-team-6c13e7288ef7"" */ + name?: string; + }[]; + /** @example ""I am not a timestamp"" */ + synced_at?: string; +} + +export interface TeamsCreatePayload { + /** The description of the team. */ + description?: string; + /** List GitHub IDs for organization members who will become team maintainers. */ + maintainers?: string[]; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: TeamsCreatePermissionEnum; + /** + * The level of privacy this team should have. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * Default: \`secret\` + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + * Default for child team: \`closed\` + */ + privacy?: TeamsCreatePrivacyEnum; + /** The full name (e.g., "organization-name/repository-name") of repositories to add the team to. */ + repo_names?: string[]; +} + +/** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ +export enum TeamsCreatePermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", +} + +/** + * The level of privacy this team should have. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * Default: \`secret\` + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + * Default for child team: \`closed\` + */ +export enum TeamsCreatePrivacyEnum { + Secret = "secret", + Closed = "closed", +} + +export type TeamsDeleteDiscussionCommentInOrgData = any; + +export type TeamsDeleteDiscussionCommentLegacyData = any; + +export type TeamsDeleteDiscussionInOrgData = any; + +export type TeamsDeleteDiscussionLegacyData = any; + +export type TeamsDeleteInOrgData = any; + +export type TeamsDeleteLegacyData = any; + +export type TeamsGetByNameData = TeamFull; + +export type TeamsGetDiscussionCommentInOrgData = TeamDiscussionComment; + +export type TeamsGetDiscussionCommentLegacyData = TeamDiscussionComment; + +export type TeamsGetDiscussionInOrgData = TeamDiscussion; + +export type TeamsGetDiscussionLegacyData = TeamDiscussion; + +export type TeamsGetLegacyData = TeamFull; + +export type TeamsGetMemberLegacyData = any; + +export type TeamsGetMembershipForUserInOrgData = TeamMembership; + +export type TeamsGetMembershipForUserLegacyData = TeamMembership; + +export type TeamsListChildInOrgData = Team[]; + +export interface TeamsListChildInOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +export type TeamsListChildLegacyData = Team[]; + +export interface TeamsListChildLegacyParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +export type TeamsListData = Team[]; + +export type TeamsListDiscussionCommentsInOrgData = TeamDiscussionComment[]; + +export interface TeamsListDiscussionCommentsInOrgParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum6; + discussionNumber: number; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum TeamsListDiscussionCommentsInOrgParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +export type TeamsListDiscussionCommentsLegacyData = TeamDiscussionComment[]; + +export interface TeamsListDiscussionCommentsLegacyParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum14; + discussionNumber: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum TeamsListDiscussionCommentsLegacyParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +export type TeamsListDiscussionsInOrgData = TeamDiscussion[]; + +export interface TeamsListDiscussionsInOrgParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum5; + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum TeamsListDiscussionsInOrgParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +export type TeamsListDiscussionsLegacyData = TeamDiscussion[]; + +export interface TeamsListDiscussionsLegacyParams { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: DirectionEnum13; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +/** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ +export enum TeamsListDiscussionsLegacyParams1DirectionEnum { + Asc = "asc", + Desc = "desc", +} + +export type TeamsListForAuthenticatedUserData = TeamFull[]; + +export interface TeamsListForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type TeamsListIdpGroupsForLegacyData = GroupMapping; + +export type TeamsListIdpGroupsForOrgData = GroupMapping; + +export interface TeamsListIdpGroupsForOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type TeamsListIdpGroupsInOrgData = GroupMapping; + +export type TeamsListMembersInOrgData = SimpleUser[]; + +export interface TeamsListMembersInOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ + role?: RoleEnum1; + /** team_slug parameter */ + teamSlug: string; +} + +/** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ +export enum TeamsListMembersInOrgParams1RoleEnum { + Member = "member", + Maintainer = "maintainer", + All = "all", +} + +export type TeamsListMembersLegacyData = SimpleUser[]; + +export interface TeamsListMembersLegacyParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ + role?: RoleEnum2; + teamId: number; +} + +/** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ +export enum TeamsListMembersLegacyParams1RoleEnum { + Member = "member", + Maintainer = "maintainer", + All = "all", +} + +export interface TeamsListParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type TeamsListPendingInvitationsInOrgData = OrganizationInvitation[]; + +export interface TeamsListPendingInvitationsInOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +export type TeamsListPendingInvitationsLegacyData = OrganizationInvitation[]; + +export interface TeamsListPendingInvitationsLegacyParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +export type TeamsListProjectsInOrgData = TeamProject[]; + +export interface TeamsListProjectsInOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +export type TeamsListProjectsLegacyData = TeamProject[]; + +export interface TeamsListProjectsLegacyParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +export type TeamsListReposInOrgData = MinimalRepository[]; + +export interface TeamsListReposInOrgParams { + org: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** team_slug parameter */ + teamSlug: string; +} + +export type TeamsListReposLegacyData = MinimalRepository[]; + +export interface TeamsListReposLegacyParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + teamId: number; +} + +export type TeamsRemoveMemberLegacyData = any; + +export type TeamsRemoveMembershipForUserInOrgData = any; + +export type TeamsRemoveMembershipForUserLegacyData = any; + +export type TeamsRemoveProjectInOrgData = any; + +export type TeamsRemoveProjectLegacyData = any; + +export type TeamsRemoveRepoInOrgData = any; + +export type TeamsRemoveRepoLegacyData = any; + +export type TeamsUpdateDiscussionCommentInOrgData = TeamDiscussionComment; + +export interface TeamsUpdateDiscussionCommentInOrgPayload { + /** The discussion comment's body text. */ + body: string; +} + +export type TeamsUpdateDiscussionCommentLegacyData = TeamDiscussionComment; + +export interface TeamsUpdateDiscussionCommentLegacyPayload { + /** The discussion comment's body text. */ + body: string; +} + +export type TeamsUpdateDiscussionInOrgData = TeamDiscussion; + +export interface TeamsUpdateDiscussionInOrgPayload { + /** The discussion post's body text. */ + body?: string; + /** The discussion post's title. */ + title?: string; +} + +export type TeamsUpdateDiscussionLegacyData = TeamDiscussion; + +export interface TeamsUpdateDiscussionLegacyPayload { + /** The discussion post's body text. */ + body?: string; + /** The discussion post's title. */ + title?: string; +} + +export type TeamsUpdateInOrgData = TeamFull; + +export interface TeamsUpdateInOrgPayload { + /** The description of the team. */ + description?: string; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: TeamsUpdateInOrgPermissionEnum; + /** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. When a team is nested, the \`privacy\` for parent teams cannot be \`secret\`. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ + privacy?: TeamsUpdateInOrgPrivacyEnum; +} + +/** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ +export enum TeamsUpdateInOrgPermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", +} + +/** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. When a team is nested, the \`privacy\` for parent teams cannot be \`secret\`. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ +export enum TeamsUpdateInOrgPrivacyEnum { + Secret = "secret", + Closed = "closed", +} + +export type TeamsUpdateLegacyData = TeamFull; + +export interface TeamsUpdateLegacyPayload { + /** The description of the team. */ + description?: string; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number | null; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: TeamsUpdateLegacyPermissionEnum; + /** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ + privacy?: TeamsUpdateLegacyPrivacyEnum; +} + +/** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ +export enum TeamsUpdateLegacyPermissionEnum { + Pull = "pull", + Push = "push", + Admin = "admin", +} + +/** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ +export enum TeamsUpdateLegacyPrivacyEnum { + Secret = "secret", + Closed = "closed", +} + +/** + * Thread + * Thread + */ +export interface Thread { + id: string; + last_read_at: string | null; + reason: string; + /** Minimal Repository */ + repository: MinimalRepository; + subject: { + latest_comment_url: string; + title: string; + type: string; + url: string; + }; + /** @example "https://api.github.com/notifications/threads/2/subscription" */ + subscription_url: string; + unread: boolean; + updated_at: string; + url: string; +} + +/** + * Thread Subscription + * Thread Subscription + */ +export interface ThreadSubscription { + /** + * @format date-time + * @example "2012-10-06T21:34:12Z" + */ + created_at: string | null; + ignored: boolean; + reason: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/1" + */ + repository_url?: string; + /** @example true */ + subscribed: boolean; + /** + * @format uri + * @example "https://api.github.com/notifications/threads/1" + */ + thread_url?: string; + /** + * @format uri + * @example "https://api.github.com/notifications/threads/1/subscription" + */ + url: string; +} + +/** + * Topic + * A topic aggregates entities that are related to a subject. + */ +export interface Topic { + names: string[]; +} + +/** + * Topic Search Result Item + * Topic Search Result Item + */ +export interface TopicSearchResultItem { + aliases?: + | { + topic_relation?: { + id?: number; + name?: string; + relation_type?: string; + topic_id?: number; + }; + }[] + | null; + /** @format date-time */ + created_at: string; + created_by: string | null; + curated: boolean; + description: string | null; + display_name: string | null; + featured: boolean; + /** @format uri */ + logo_url?: string | null; + name: string; + related?: + | { + topic_relation?: { + id?: number; + name?: string; + relation_type?: string; + topic_id?: number; + }; + }[] + | null; + released: string | null; + repository_count?: number | null; + score: number; + short_description: string | null; + text_matches?: SearchResultTextMatches; + /** @format date-time */ + updated_at: string; +} + +/** Traffic */ +export interface Traffic { + count: number; + /** @format date-time */ + timestamp: string; + uniques: number; +} + +/** Specifies the types of repositories you want returned. Can be one of \`all\`, \`public\`, \`private\`, \`forks\`, \`sources\`, \`member\`, \`internal\`. Default: \`all\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`type\` can also be \`internal\`. */ +export enum TypeEnum { + All = "all", + Public = "public", + Private = "private", + Forks = "forks", + Sources = "sources", + Member = "member", + Internal = "internal", +} + +/** + * Can be one of \`all\`, \`owner\`, \`public\`, \`private\`, \`member\`. Default: \`all\` + * + * Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. + * @default "all" + */ +export enum TypeEnum1 { + All = "all", + Owner = "owner", + Public = "public", + Private = "private", + Member = "member", +} + +/** + * Can be one of \`all\`, \`owner\`, \`member\`. + * @default "owner" + */ +export enum TypeEnum2 { + All = "all", + Owner = "owner", + Member = "member", +} + +/** + * User Marketplace Purchase + * User Marketplace Purchase + */ +export interface UserMarketplacePurchase { + account: MarketplaceAccount; + /** @example "monthly" */ + billing_cycle: string; + /** + * @format date-time + * @example "2017-11-11T00:00:00Z" + */ + free_trial_ends_on: string | null; + /** + * @format date-time + * @example "2017-11-11T00:00:00Z" + */ + next_billing_date: string | null; + /** @example true */ + on_free_trial: boolean; + /** Marketplace Listing Plan */ + plan: MarketplaceListingPlan; + unit_count: number | null; + /** + * @format date-time + * @example "2017-11-02T01:12:12Z" + */ + updated_at: string | null; +} + +/** + * User Search Result Item + * User Search Result Item + */ +export interface UserSearchResultItem { + /** @format uri */ + avatar_url: string; + bio?: string | null; + blog?: string | null; + company?: string | null; + /** @format date-time */ + created_at?: string; + /** @format email */ + email?: string | null; + events_url: string; + followers?: number; + /** @format uri */ + followers_url: string; + following?: number; + following_url: string; + gists_url: string; + gravatar_id: string | null; + hireable?: boolean | null; + /** @format uri */ + html_url: string; + id: number; + location?: string | null; + login: string; + name?: string | null; + node_id: string; + /** @format uri */ + organizations_url: string; + public_gists?: number; + public_repos?: number; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + score: number; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + text_matches?: SearchResultTextMatches; + type: string; + /** @format date-time */ + updated_at?: string; + /** @format uri */ + url: string; +} + +export type UsersAddEmailForAuthenticatedData = Email[]; + +export type UsersAddEmailForAuthenticatedPayload = + | { + /** + * Adds one or more email addresses to your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an \`array\` of emails addresses directly, but we recommend that you pass an object using the \`emails\` key. + * @example [] + */ + emails: string[]; + } + | string[] + | string; + +export type UsersBlockData = any; + +export type UsersCheckBlockedData = any; + +export type UsersCheckBlockedError = BasicError; + +export type UsersCheckFollowingForUserData = any; + +export type UsersCheckPersonIsFollowedByAuthenticatedData = any; + +export type UsersCheckPersonIsFollowedByAuthenticatedError = BasicError; + +export type UsersCreateGpgKeyForAuthenticatedData = GpgKey; + +export interface UsersCreateGpgKeyForAuthenticatedPayload { + /** A GPG key in ASCII-armored format. */ + armored_public_key: string; +} + +export type UsersCreatePublicSshKeyForAuthenticatedData = Key; + +export interface UsersCreatePublicSshKeyForAuthenticatedPayload { + /** + * The public SSH key to add to your GitHub account. + * @pattern ^ssh-(rsa|dss|ed25519) |^ecdsa-sha2-nistp(256|384|521) + */ + key: string; + /** + * A descriptive name for the new key. + * @example "Personal MacBook Air" + */ + title?: string; +} + +export type UsersDeleteEmailForAuthenticatedData = any; + +/** Deletes one or more email addresses from your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an \`array\` of emails addresses directly, but we recommend that you pass an object using the \`emails\` key. */ +export type UsersDeleteEmailForAuthenticatedPayload = + | { + /** Email addresses associated with the GitHub user account. */ + emails: string[]; + } + | string[] + | string; + +export type UsersDeleteGpgKeyForAuthenticatedData = any; + +export type UsersDeletePublicSshKeyForAuthenticatedData = any; + +export type UsersFollowData = any; + +export type UsersGetAuthenticatedData = PrivateUser | PublicUser; + +export type UsersGetByUsernameData = PrivateUser | PublicUser; + +export type UsersGetContextForUserData = Hovercard; + +export interface UsersGetContextForUserParams { + /** Uses the ID for the \`subject_type\` you specified. **Required** when using \`subject_type\`. */ + subject_id?: string; + /** Identifies which additional information you'd like to receive about the person's hovercard. Can be \`organization\`, \`repository\`, \`issue\`, \`pull_request\`. **Required** when using \`subject_id\`. */ + subject_type?: SubjectTypeEnum; + username: string; +} + +/** Identifies which additional information you'd like to receive about the person's hovercard. Can be \`organization\`, \`repository\`, \`issue\`, \`pull_request\`. **Required** when using \`subject_id\`. */ +export enum UsersGetContextForUserParams1SubjectTypeEnum { + Organization = "organization", + Repository = "repository", + Issue = "issue", + PullRequest = "pull_request", +} + +export type UsersGetGpgKeyForAuthenticatedData = GpgKey; + +export type UsersGetPublicSshKeyForAuthenticatedData = Key; + +export type UsersListBlockedByAuthenticatedData = SimpleUser[]; + +export type UsersListData = SimpleUser[]; + +export type UsersListEmailsForAuthenticatedData = Email[]; + +export interface UsersListEmailsForAuthenticatedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersListFollowedByAuthenticatedData = SimpleUser[]; + +export interface UsersListFollowedByAuthenticatedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersListFollowersForAuthenticatedUserData = SimpleUser[]; + +export interface UsersListFollowersForAuthenticatedUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersListFollowersForUserData = SimpleUser[]; + +export interface UsersListFollowersForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type UsersListFollowingForUserData = SimpleUser[]; + +export interface UsersListFollowingForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type UsersListGpgKeysForAuthenticatedData = GpgKey[]; + +export interface UsersListGpgKeysForAuthenticatedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersListGpgKeysForUserData = GpgKey[]; + +export interface UsersListGpgKeysForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export interface UsersListParams { + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; +} + +export type UsersListPublicEmailsForAuthenticatedData = Email[]; + +export interface UsersListPublicEmailsForAuthenticatedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersListPublicKeysForUserData = KeySimple[]; + +export interface UsersListPublicKeysForUserParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + username: string; +} + +export type UsersListPublicSshKeysForAuthenticatedData = Key[]; + +export interface UsersListPublicSshKeysForAuthenticatedParams { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; +} + +export type UsersSetPrimaryEmailVisibilityForAuthenticatedData = Email[]; + +export interface UsersSetPrimaryEmailVisibilityForAuthenticatedPayload { + /** + * An email address associated with the GitHub user account to manage. + * @example "org@example.com" + */ + email: string; + /** Denotes whether an email is publically visible. */ + visibility: UsersSetPrimaryEmailVisibilityForAuthenticatedVisibilityEnum; +} + +/** Denotes whether an email is publically visible. */ +export enum UsersSetPrimaryEmailVisibilityForAuthenticatedVisibilityEnum { + Public = "public", + Private = "private", +} + +export type UsersUnblockData = any; + +export type UsersUnfollowData = any; + +export type UsersUpdateAuthenticatedData = PrivateUser; + +export interface UsersUpdateAuthenticatedPayload { + /** The new short biography of the user. */ + bio?: string; + /** + * The new blog URL of the user. + * @example "blog.example.com" + */ + blog?: string; + /** + * The new company of the user. + * @example "Acme corporation" + */ + company?: string; + /** + * The publicly visible email address of the user. + * @example "omar@example.com" + */ + email?: string; + /** The new hiring availability of the user. */ + hireable?: boolean; + /** + * The new location of the user. + * @example "Berlin, Germany" + */ + location?: string; + /** + * The new name of the user. + * @example "Omar Jahandar" + */ + name?: string; + /** + * The new Twitter username of the user. + * @example "therealomarj" + */ + twitter_username?: string | null; +} + +/** + * Validation Error + * Validation Error + */ +export interface ValidationError { + documentation_url: string; + errors?: { + code: string; + field?: string; + index?: number; + message?: string; + resource?: string; + value?: string | null | number | null | string[] | null; + }[]; + message: string; +} + +/** + * Validation Error Simple + * Validation Error Simple + */ +export interface ValidationErrorSimple { + documentation_url: string; + errors?: string[]; + message: string; +} + +/** Validation Failed */ +export type ValidationFailed = ValidationError; + +/** Validation Failed */ +export type ValidationFailedSimple = ValidationErrorSimple; + +/** Verification */ +export interface Verification { + payload: string | null; + reason: string; + signature: string | null; + verified: boolean; +} + +/** + * View Traffic + * View Traffic + */ +export interface ViewTraffic { + /** @example 14850 */ + count: number; + /** @example 3782 */ + uniques: number; + views: Traffic[]; +} + +/** + * Can be one of \`all\`, \`public\`, or \`private\`. + * @default "all" + */ +export enum VisibilityEnum { + All = "all", + Public = "public", + Private = "private", +} + +/** + * Webhook Configuration + * Configuration object of the webhook + */ +export interface WebhookConfig { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; +} + +/** + * The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. + * @example ""json"" + */ +export type WebhookConfigContentType = string; + +/** + * Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** + * @example ""0"" + */ +export type WebhookConfigInsecureSsl = string; + +/** + * If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). + * @example ""********"" + */ +export type WebhookConfigSecret = string; + +/** + * The URL to which the payloads will be delivered. + * @format uri + * @example "https://example.com/webhook" + */ +export type WebhookConfigUrl = string; + +/** + * Workflow + * A GitHub Actions workflow + */ +export interface Workflow { + /** @example "https://github.com/actions/setup-ruby/workflows/CI/badge.svg" */ + badge_url: string; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + created_at: string; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + deleted_at?: string; + /** @example "https://github.com/actions/setup-ruby/blob/master/.github/workflows/ruby.yaml" */ + html_url: string; + /** @example 5 */ + id: number; + /** @example "CI" */ + name: string; + /** @example "MDg6V29ya2Zsb3cxMg==" */ + node_id: string; + /** @example "ruby.yaml" */ + path: string; + /** @example "active" */ + state: WorkflowStateEnum; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + updated_at: string; + /** @example "https://api.github.com/repos/actions/setup-ruby/workflows/5" */ + url: string; +} + +/** + * Workflow Run + * An invocation of a workflow + */ +export interface WorkflowRun { + /** + * The URL to the artifacts for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun/artifacts" + */ + artifacts_url: string; + /** + * The URL to cancel the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/cancel" + */ + cancel_url: string; + /** + * The URL to the associated check suite. + * @example "https://api.github.com/repos/github/hello-world/check-suites/12" + */ + check_suite_url: string; + /** @example "neutral" */ + conclusion: string | null; + /** @format date-time */ + created_at: string; + /** @example "push" */ + event: string; + /** @example "master" */ + head_branch: string | null; + /** Simple Commit */ + head_commit: SimpleCommit; + /** Minimal Repository */ + head_repository: MinimalRepository; + /** @example 5 */ + head_repository_id?: number; + /** + * The SHA of the head commit that points to the version of the worflow being run. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/suites/4" */ + html_url: string; + /** + * The ID of the workflow run. + * @example 5 + */ + id: number; + /** + * The URL to the jobs for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/jobs" + */ + jobs_url: string; + /** + * The URL to download the logs for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/logs" + */ + logs_url: string; + /** + * The name of the workflow run. + * @example "Build" + */ + name?: string; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + pull_requests: PullRequestMinimal[] | null; + /** Minimal Repository */ + repository: MinimalRepository; + /** + * The URL to rerun the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun" + */ + rerun_url: string; + /** + * The auto incrementing run number for the workflow run. + * @example 106 + */ + run_number: number; + /** @example "completed" */ + status: string | null; + /** @format date-time */ + updated_at: string; + /** + * The URL to the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5" + */ + url: string; + /** + * The ID of the parent workflow. + * @example 5 + */ + workflow_id: number; + /** + * The URL to the workflow. + * @example "https://api.github.com/repos/github/hello-world/actions/workflows/main.yaml" + */ + workflow_url: string; +} + +/** + * Workflow Run Usage + * Workflow Run Usage + */ +export interface WorkflowRunUsage { + billable: { + MACOS?: { + jobs: number; + total_ms: number; + }; + UBUNTU?: { + jobs: number; + total_ms: number; + }; + WINDOWS?: { + jobs: number; + total_ms: number; + }; + }; + run_duration_ms: number; +} + +/** @example "active" */ +export enum WorkflowStateEnum { + Active = "active", + Deleted = "deleted", +} + +/** + * Workflow Usage + * Workflow Usage + */ +export interface WorkflowUsage { + billable: { + MACOS?: { + total_ms?: number; + }; + UBUNTU?: { + total_ms?: number; + }; + WINDOWS?: { + total_ms?: number; + }; + }; +} + +export namespace App { + /** + * @description Creates an installation access token that enables a GitHub App to make authenticated API requests for the app's installation on an organization or individual account. Installation tokens expire one hour from the time you create them. Using an expired token produces a status code of \`401 - Unauthorized\`, and requires creating a new installation token. By default the installation token has access to all repositories that the installation can access. To restrict the access to specific repositories, you can provide the \`repository_ids\` when creating the token. When you omit \`repository_ids\`, the response does not contain the \`repositories\` key. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsCreateInstallationAccessToken + * @summary Create an installation access token for an app + * @request POST:/app/installations/{installation_id}/access_tokens + */ + export namespace AppsCreateInstallationAccessToken { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = AppsCreateInstallationAccessTokenPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsCreateInstallationAccessTokenData; + } + /** + * @description Uninstalls a GitHub App on a user, organization, or business account. If you prefer to temporarily suspend an app's access to your account's resources, then we recommend the "[Suspend an app installation](https://docs.github.com/v3/apps/#suspend-an-app-installation)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsDeleteInstallation + * @summary Delete an installation for the authenticated app + * @request DELETE:/app/installations/{installation_id} + */ + export namespace AppsDeleteInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsDeleteInstallationData; + } + /** + * @description Returns the GitHub App associated with the authentication credentials used. To see how many app installations are associated with this GitHub App, see the \`installations_count\` in the response. For more details about your app's installations, see the "[List installations for the authenticated app](https://docs.github.com/rest/reference/apps#list-installations-for-the-authenticated-app)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetAuthenticated + * @summary Get the authenticated app + * @request GET:/app + */ + export namespace AppsGetAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetAuthenticatedData; + } + /** + * @description Enables an authenticated GitHub App to find an installation's information using the installation id. The installation's account type (\`target_type\`) will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetInstallation + * @summary Get an installation for the authenticated app + * @request GET:/app/installations/{installation_id} + */ + export namespace AppsGetInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetInstallationData; + } + /** + * @description Returns the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetWebhookConfigForApp + * @summary Get a webhook configuration for an app + * @request GET:/app/hook/config + */ + export namespace AppsGetWebhookConfigForApp { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetWebhookConfigForAppData; + } + /** + * @description You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. The permissions the installation has are included under the \`permissions\` key. + * @tags apps + * @name AppsListInstallations + * @summary List installations for the authenticated app + * @request GET:/app/installations + */ + export namespace AppsListInstallations { + export type RequestParams = {}; + export type RequestQuery = { + outdated?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListInstallationsData; + } + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsSuspendInstallation + * @summary Suspend an app installation + * @request PUT:/app/installations/{installation_id}/suspended + */ + export namespace AppsSuspendInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsSuspendInstallationData; + } + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Removes a GitHub App installation suspension. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsUnsuspendInstallation + * @summary Unsuspend an app installation + * @request DELETE:/app/installations/{installation_id}/suspended + */ + export namespace AppsUnsuspendInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsUnsuspendInstallationData; + } + /** + * @description Updates the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsUpdateWebhookConfigForApp + * @summary Update a webhook configuration for an app + * @request PATCH:/app/hook/config + */ + export namespace AppsUpdateWebhookConfigForApp { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = AppsUpdateWebhookConfigForAppPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsUpdateWebhookConfigForAppData; + } +} + +export namespace AppManifests { + /** + * @description Use this endpoint to complete the handshake necessary when implementing the [GitHub App Manifest flow](https://docs.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/). When you create a GitHub App with the manifest flow, you receive a temporary \`code\` used to retrieve the GitHub App's \`id\`, \`pem\` (private key), and \`webhook_secret\`. + * @tags apps + * @name AppsCreateFromManifest + * @summary Create a GitHub App from a manifest + * @request POST:/app-manifests/{code}/conversions + */ + export namespace AppsCreateFromManifest { + export type RequestParams = { + code: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsCreateFromManifestData; + } +} + +export namespace Applications { + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * @tags apps + * @name AppsCheckAuthorization + * @summary Check an authorization + * @request GET:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + export namespace AppsCheckAuthorization { + export type RequestParams = { + accessToken: string; + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsCheckAuthorizationData; + } + /** + * @description OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) to use this endpoint, where the username is the OAuth application \`client_id\` and the password is its \`client_secret\`. Invalid tokens will return \`404 NOT FOUND\`. + * @tags apps + * @name AppsCheckToken + * @summary Check a token + * @request POST:/applications/{client_id}/token + */ + export namespace AppsCheckToken { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = AppsCheckTokenPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsCheckTokenData; + } + /** + * @description OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid OAuth \`access_token\` as an input parameter and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * @tags apps + * @name AppsDeleteAuthorization + * @summary Delete an app authorization + * @request DELETE:/applications/{client_id}/grant + */ + export namespace AppsDeleteAuthorization { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = AppsDeleteAuthorizationPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsDeleteAuthorizationData; + } + /** + * @description OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * @tags apps + * @name AppsDeleteToken + * @summary Delete an app token + * @request DELETE:/applications/{client_id}/token + */ + export namespace AppsDeleteToken { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = AppsDeleteTokenPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsDeleteTokenData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * @tags apps + * @name AppsResetAuthorization + * @summary Reset an authorization + * @request POST:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + export namespace AppsResetAuthorization { + export type RequestParams = { + accessToken: string; + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsResetAuthorizationData; + } + /** + * @description OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * @tags apps + * @name AppsResetToken + * @summary Reset a token + * @request PATCH:/applications/{client_id}/token + */ + export namespace AppsResetToken { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = AppsResetTokenPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsResetTokenData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * @tags apps + * @name AppsRevokeAuthorizationForApplication + * @summary Revoke an authorization for an application + * @request DELETE:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + export namespace AppsRevokeAuthorizationForApplication { + export type RequestParams = { + accessToken: string; + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsRevokeAuthorizationForApplicationData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid token as \`:access_token\` and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized). + * @tags apps + * @name AppsRevokeGrantForApplication + * @summary Revoke a grant for an application + * @request DELETE:/applications/{client_id}/grants/{access_token} + * @deprecated + */ + export namespace AppsRevokeGrantForApplication { + export type RequestParams = { + accessToken: string; + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsRevokeGrantForApplicationData; + } + /** + * @description Exchanges a non-repository scoped user-to-server OAuth access token for a repository scoped user-to-server OAuth access token. You can specify which repositories the token can access and which permissions are granted to the token. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * @tags apps + * @name AppsScopeToken + * @summary Create a scoped access token + * @request POST:/applications/{client_id}/token/scoped + */ + export namespace AppsScopeToken { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = AppsScopeTokenPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsScopeTokenData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteGrant + * @summary Delete a grant + * @request DELETE:/applications/grants/{grant_id} + * @deprecated + */ + export namespace OauthAuthorizationsDeleteGrant { + export type RequestParams = { + /** grant_id parameter */ + grantId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsDeleteGrantData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @tags oauth-authorizations + * @name OauthAuthorizationsGetGrant + * @summary Get a single grant + * @request GET:/applications/grants/{grant_id} + * @deprecated + */ + export namespace OauthAuthorizationsGetGrant { + export type RequestParams = { + /** grant_id parameter */ + grantId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsGetGrantData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the [list your authorizations](https://docs.github.com/rest/reference/oauth-authorizations#list-your-authorizations) API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). The \`scopes\` returned are the union of scopes authorized for the application. For example, if an application has one token with \`repo\` scope and another token with \`user\` scope, the grant will return \`["repo", "user"]\`. + * @tags oauth-authorizations + * @name OauthAuthorizationsListGrants + * @summary List your grants + * @request GET:/applications/grants + * @deprecated + */ + export namespace OauthAuthorizationsListGrants { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsListGrantsData; + } +} + +export namespace Apps { + /** + * @description **Note**: The \`:app_slug\` is just the URL-friendly name of your GitHub App. You can find this on the settings page for your GitHub App (e.g., \`https://github.com/settings/apps/:app_slug\`). If the GitHub App you specify is public, you can access this endpoint without authenticating. If the GitHub App you specify is private, you must authenticate with a [personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @tags apps + * @name AppsGetBySlug + * @summary Get an app + * @request GET:/apps/{app_slug} + */ + export namespace AppsGetBySlug { + export type RequestParams = { + appSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetBySlugData; + } +} + +export namespace Authorizations { + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates OAuth tokens using [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use \`fingerprint\` to differentiate between them. You can also create tokens on GitHub from the [personal access tokens settings](https://github.com/settings/tokens) page. Read more about these tokens in [the GitHub Help documentation](https://help.github.com/articles/creating-an-access-token-for-command-line-use). Organizations that enforce SAML SSO require personal access tokens to be allowed. Read more about allowing tokens in [the GitHub Help documentation](https://help.github.com/articles/about-identity-and-access-management-with-saml-single-sign-on). + * @tags oauth-authorizations + * @name OauthAuthorizationsCreateAuthorization + * @summary Create a new authorization + * @request POST:/authorizations + * @deprecated + */ + export namespace OauthAuthorizationsCreateAuthorization { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = OauthAuthorizationsCreateAuthorizationPayload; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsCreateAuthorizationData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteAuthorization + * @summary Delete an authorization + * @request DELETE:/authorizations/{authorization_id} + * @deprecated + */ + export namespace OauthAuthorizationsDeleteAuthorization { + export type RequestParams = { + /** authorization_id parameter */ + authorizationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsDeleteAuthorizationData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @tags oauth-authorizations + * @name OauthAuthorizationsGetAuthorization + * @summary Get a single authorization + * @request GET:/authorizations/{authorization_id} + * @deprecated + */ + export namespace OauthAuthorizationsGetAuthorization { + export type RequestParams = { + /** authorization_id parameter */ + authorizationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsGetAuthorizationData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForApp + * @summary Get-or-create an authorization for a specific app + * @request PUT:/authorizations/clients/{client_id} + * @deprecated + */ + export namespace OauthAuthorizationsGetOrCreateAuthorizationForApp { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + }; + export type RequestQuery = {}; + export type RequestBody = OauthAuthorizationsGetOrCreateAuthorizationForAppPayload; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsGetOrCreateAuthorizationForAppData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. \`fingerprint\` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint + * @summary Get-or-create an authorization for a specific app and fingerprint + * @request PUT:/authorizations/clients/{client_id}/{fingerprint} + * @deprecated + */ + export namespace OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint { + export type RequestParams = { + /** The client ID of your GitHub app. */ + clientId: string; + fingerprint: string; + }; + export type RequestQuery = {}; + export type RequestBody = OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintPayload; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @tags oauth-authorizations + * @name OauthAuthorizationsListAuthorizations + * @summary List your authorizations + * @request GET:/authorizations + * @deprecated + */ + export namespace OauthAuthorizationsListAuthorizations { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsListAuthorizationsData; + } + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." You can only send one of these scope keys at a time. + * @tags oauth-authorizations + * @name OauthAuthorizationsUpdateAuthorization + * @summary Update an existing authorization + * @request PATCH:/authorizations/{authorization_id} + * @deprecated + */ + export namespace OauthAuthorizationsUpdateAuthorization { + export type RequestParams = { + /** authorization_id parameter */ + authorizationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = OauthAuthorizationsUpdateAuthorizationPayload; + export type RequestHeaders = {}; + export type ResponseBody = OauthAuthorizationsUpdateAuthorizationData; + } +} + +export namespace CodesOfConduct { + /** + * No description + * @tags codes-of-conduct + * @name CodesOfConductGetAllCodesOfConduct + * @summary Get all codes of conduct + * @request GET:/codes_of_conduct + */ + export namespace CodesOfConductGetAllCodesOfConduct { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodesOfConductGetAllCodesOfConductData; + } + /** + * No description + * @tags codes-of-conduct + * @name CodesOfConductGetConductCode + * @summary Get a code of conduct + * @request GET:/codes_of_conduct/{key} + */ + export namespace CodesOfConductGetConductCode { + export type RequestParams = { + key: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodesOfConductGetConductCodeData; + } +} + +export namespace ContentReferences { + /** + * @description Creates an attachment under a content reference URL in the body or comment of an issue or pull request. Use the \`id\` of the content reference from the [\`content_reference\` event](https://docs.github.com/webhooks/event-payloads/#content_reference) to create an attachment. The app must create a content attachment within six hours of the content reference URL being posted. See "[Using content attachments](https://docs.github.com/apps/using-content-attachments/)" for details about content attachments. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @tags apps + * @name AppsCreateContentAttachment + * @summary Create a content attachment + * @request POST:/content_references/{content_reference_id}/attachments + */ + export namespace AppsCreateContentAttachment { + export type RequestParams = { + contentReferenceId: number; + }; + export type RequestQuery = {}; + export type RequestBody = AppsCreateContentAttachmentPayload; + export type RequestHeaders = {}; + export type ResponseBody = AppsCreateContentAttachmentData; + } +} + +export namespace Emojis { + /** + * @description Lists all the emojis available to use on GitHub. + * @tags emojis + * @name EmojisGet + * @summary Get emojis + * @request GET:/emojis + */ + export namespace EmojisGet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EmojisGetData; + } +} + +export namespace Enterprises { + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an enterprise. To use this endpoint, you must be an enterprise admin, and you must use an access token with the \`admin:enterprise\` scope. + * @tags audit-log + * @name AuditLogGetAuditLog + * @summary Get the audit log for an enterprise + * @request GET:/enterprises/{enterprise}/audit-log + */ + export namespace AuditLogGetAuditLog { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: AuditLogGetAuditLogParams1IncludeEnum; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: AuditLogGetAuditLogParams1OrderEnum; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AuditLogGetAuditLogData; + } + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". The authenticated user must be an enterprise admin. + * @tags billing + * @name BillingGetGithubActionsBillingGhe + * @summary Get GitHub Actions billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/actions + */ + export namespace BillingGetGithubActionsBillingGhe { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubActionsBillingGheData; + } + /** + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * @tags billing + * @name BillingGetGithubPackagesBillingGhe + * @summary Get GitHub Packages billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/packages + */ + export namespace BillingGetGithubPackagesBillingGhe { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubPackagesBillingGheData; + } + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * @tags billing + * @name BillingGetSharedStorageBillingGhe + * @summary Get shared storage billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/shared-storage + */ + export namespace BillingGetSharedStorageBillingGhe { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetSharedStorageBillingGheData; + } + /** + * @description Adds an organization to the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Add organization access to a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + export namespace EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of an organization. */ + orgId: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterpriseData; + } + /** + * @description Adds a self-hosted runner to a runner group configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminAddSelfHostedRunnerToGroupForEnterprise + * @summary Add a self-hosted runner to a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + export namespace EnterpriseAdminAddSelfHostedRunnerToGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminAddSelfHostedRunnerToGroupForEnterpriseData; + } + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/enterprises/octo-enterprise --token TOKEN \`\`\` + * @tags enterprise-admin + * @name EnterpriseAdminCreateRegistrationTokenForEnterprise + * @summary Create a registration token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/registration-token + */ + export namespace EnterpriseAdminCreateRegistrationTokenForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminCreateRegistrationTokenForEnterpriseData; + } + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an enterprise. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an enterprise, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * @tags enterprise-admin + * @name EnterpriseAdminCreateRemoveTokenForEnterprise + * @summary Create a remove token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/remove-token + */ + export namespace EnterpriseAdminCreateRemoveTokenForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminCreateRemoveTokenForEnterpriseData; + } + /** + * @description Creates a new self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprise + * @summary Create a self-hosted runner group for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runner-groups + */ + export namespace EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminCreateSelfHostedRunnerGroupForEnterpriseData; + } + /** + * @description Forces the removal of a self-hosted runner from an enterprise. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerFromEnterprise + * @summary Delete a self-hosted runner from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + export namespace EnterpriseAdminDeleteSelfHostedRunnerFromEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminDeleteSelfHostedRunnerFromEnterpriseData; + } + /** + * @description Deletes a self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise + * @summary Delete a self-hosted runner group from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + export namespace EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterpriseData; + } + /** + * @description Removes an organization from the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise + * @summary Disable a selected organization for GitHub Actions in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + export namespace EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of an organization. */ + orgId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterpriseData; + } + /** + * @description Adds an organization to the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise + * @summary Enable a selected organization for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + export namespace EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of an organization. */ + orgId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterpriseData; + } + /** + * @description Gets the selected actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminGetAllowedActionsEnterprise + * @summary Get allowed actions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + export namespace EnterpriseAdminGetAllowedActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetAllowedActionsEnterpriseData; + } + /** + * @description Gets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminGetGithubActionsPermissionsEnterprise + * @summary Get GitHub Actions permissions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions + */ + export namespace EnterpriseAdminGetGithubActionsPermissionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetGithubActionsPermissionsEnterpriseData; + } + /** + * @description Gets a specific self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerForEnterprise + * @summary Get a self-hosted runner for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + export namespace EnterpriseAdminGetSelfHostedRunnerForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetSelfHostedRunnerForEnterpriseData; + } + /** + * @description Gets a specific self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerGroupForEnterprise + * @summary Get a self-hosted runner group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + export namespace EnterpriseAdminGetSelfHostedRunnerGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetSelfHostedRunnerGroupForEnterpriseData; + } + /** + * @description Lists the organizations with access to a self-hosted runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary List organization access to a self-hosted runner group in an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + export namespace EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterpriseData; + } + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListRunnerApplicationsForEnterprise + * @summary List runner applications for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/downloads + */ + export namespace EnterpriseAdminListRunnerApplicationsForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListRunnerApplicationsForEnterpriseData; + } + /** + * @description Lists the organizations that are selected to have GitHub Actions enabled in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary List selected organizations enabled for GitHub Actions in an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/organizations + */ + export namespace EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterpriseData; + } + /** + * @description Lists all self-hosted runner groups for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnerGroupsForEnterprise + * @summary List self-hosted runner groups for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups + */ + export namespace EnterpriseAdminListSelfHostedRunnerGroupsForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListSelfHostedRunnerGroupsForEnterpriseData; + } + /** + * @description Lists all self-hosted runners configured for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersForEnterprise + * @summary List self-hosted runners for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners + */ + export namespace EnterpriseAdminListSelfHostedRunnersForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListSelfHostedRunnersForEnterpriseData; + } + /** + * @description Lists the self-hosted runners that are in a specific enterprise group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersInGroupForEnterprise + * @summary List self-hosted runners in a group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + export namespace EnterpriseAdminListSelfHostedRunnersInGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListSelfHostedRunnersInGroupForEnterpriseData; + } + /** + * @description Removes an organization from the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Remove organization access to a self-hosted runner group in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + export namespace EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of an organization. */ + orgId: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterpriseData; + } + /** + * @description Removes a self-hosted runner from a group configured in an enterprise. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise + * @summary Remove a self-hosted runner from a group for an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + export namespace EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterpriseData; + } + /** + * @description Sets the actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminSetAllowedActionsEnterprise + * @summary Set allowed actions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + export namespace EnterpriseAdminSetAllowedActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = SelectedActions; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetAllowedActionsEnterpriseData; + } + /** + * @description Sets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminSetGithubActionsPermissionsEnterprise + * @summary Set GitHub Actions permissions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions + */ + export namespace EnterpriseAdminSetGithubActionsPermissionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetGithubActionsPermissionsEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetGithubActionsPermissionsEnterpriseData; + } + /** + * @description Replaces the list of organizations that have access to a self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Set organization access for a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + export namespace EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterpriseData; + } + /** + * @description Replaces the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary Set selected organizations enabled for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations + */ + export namespace EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterpriseData; + } + /** + * @description Replaces the list of self-hosted runners that are part of an enterprise runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprise + * @summary Set self-hosted runners in a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + export namespace EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetSelfHostedRunnersInGroupForEnterpriseData; + } + /** + * @description Updates the \`name\` and \`visibility\` of a self-hosted runner group in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * @tags enterprise-admin + * @name EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise + * @summary Update a self-hosted runner group for an enterprise + * @request PATCH:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + export namespace EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprisePayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterpriseData; + } +} + +export namespace Events { + /** + * @description We delay the public events feed by five minutes, which means the most recent event returned by the public events API actually occurred at least five minutes ago. + * @tags activity + * @name ActivityListPublicEvents + * @summary List public events + * @request GET:/events + */ + export namespace ActivityListPublicEvents { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListPublicEventsData; + } +} + +export namespace Feeds { + /** + * @description GitHub provides several timeline resources in [Atom](http://en.wikipedia.org/wiki/Atom_(standard)) format. The Feeds API lists all the feeds available to the authenticated user: * **Timeline**: The GitHub global public timeline * **User**: The public timeline for any user, using [URI template](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) * **Current user public**: The public timeline for the authenticated user * **Current user**: The private timeline for the authenticated user * **Current user actor**: The private timeline for activity created by the authenticated user * **Current user organizations**: The private timeline for the organizations the authenticated user is a member of. * **Security advisories**: A collection of public announcements that provide information about security-related vulnerabilities in software on GitHub. **Note**: Private feeds are only returned when [authenticating via Basic Auth](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) since current feed URIs use the older, non revocable auth tokens. + * @tags activity + * @name ActivityGetFeeds + * @summary Get feeds + * @request GET:/feeds + */ + export namespace ActivityGetFeeds { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityGetFeedsData; + } +} + +export namespace Gists { + /** + * No description + * @tags gists + * @name GistsCheckIsStarred + * @summary Check if a gist is starred + * @request GET:/gists/{gist_id}/star + */ + export namespace GistsCheckIsStarred { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsCheckIsStarredData; + } + /** + * @description Allows you to add a new gist with one or more files. **Note:** Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally. + * @tags gists + * @name GistsCreate + * @summary Create a gist + * @request POST:/gists + */ + export namespace GistsCreate { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = GistsCreatePayload; + export type RequestHeaders = {}; + export type ResponseBody = GistsCreateData; + } + /** + * No description + * @tags gists + * @name GistsCreateComment + * @summary Create a gist comment + * @request POST:/gists/{gist_id}/comments + */ + export namespace GistsCreateComment { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = GistsCreateCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = GistsCreateCommentData; + } + /** + * No description + * @tags gists + * @name GistsDelete + * @summary Delete a gist + * @request DELETE:/gists/{gist_id} + */ + export namespace GistsDelete { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsDeleteData; + } + /** + * No description + * @tags gists + * @name GistsDeleteComment + * @summary Delete a gist comment + * @request DELETE:/gists/{gist_id}/comments/{comment_id} + */ + export namespace GistsDeleteComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsDeleteCommentData; + } + /** + * @description **Note**: This was previously \`/gists/:gist_id/fork\`. + * @tags gists + * @name GistsFork + * @summary Fork a gist + * @request POST:/gists/{gist_id}/forks + */ + export namespace GistsFork { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsForkData; + } + /** + * No description + * @tags gists + * @name GistsGet + * @summary Get a gist + * @request GET:/gists/{gist_id} + */ + export namespace GistsGet { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsGetData; + } + /** + * No description + * @tags gists + * @name GistsGetComment + * @summary Get a gist comment + * @request GET:/gists/{gist_id}/comments/{comment_id} + */ + export namespace GistsGetComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsGetCommentData; + } + /** + * No description + * @tags gists + * @name GistsGetRevision + * @summary Get a gist revision + * @request GET:/gists/{gist_id}/{sha} + */ + export namespace GistsGetRevision { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + sha: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsGetRevisionData; + } + /** + * @description Lists the authenticated user's gists or if called anonymously, this endpoint returns all public gists: + * @tags gists + * @name GistsList + * @summary List gists for the authenticated user + * @request GET:/gists + */ + export namespace GistsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListData; + } + /** + * No description + * @tags gists + * @name GistsListComments + * @summary List gist comments + * @request GET:/gists/{gist_id}/comments + */ + export namespace GistsListComments { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListCommentsData; + } + /** + * No description + * @tags gists + * @name GistsListCommits + * @summary List gist commits + * @request GET:/gists/{gist_id}/commits + */ + export namespace GistsListCommits { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListCommitsData; + } + /** + * No description + * @tags gists + * @name GistsListForks + * @summary List gist forks + * @request GET:/gists/{gist_id}/forks + */ + export namespace GistsListForks { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListForksData; + } + /** + * @description List public gists sorted by most recently updated to least recently updated. Note: With [pagination](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination), you can fetch up to 3000 gists. For example, you can fetch 100 pages with 30 gists per page or 30 pages with 100 gists per page. + * @tags gists + * @name GistsListPublic + * @summary List public gists + * @request GET:/gists/public + */ + export namespace GistsListPublic { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListPublicData; + } + /** + * @description List the authenticated user's starred gists: + * @tags gists + * @name GistsListStarred + * @summary List starred gists + * @request GET:/gists/starred + */ + export namespace GistsListStarred { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListStarredData; + } + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags gists + * @name GistsStar + * @summary Star a gist + * @request PUT:/gists/{gist_id}/star + */ + export namespace GistsStar { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsStarData; + } + /** + * No description + * @tags gists + * @name GistsUnstar + * @summary Unstar a gist + * @request DELETE:/gists/{gist_id}/star + */ + export namespace GistsUnstar { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsUnstarData; + } + /** + * @description Allows you to update or delete a gist file and rename gist files. Files from the previous version of the gist that aren't explicitly changed during an edit are unchanged. + * @tags gists + * @name GistsUpdate + * @summary Update a gist + * @request PATCH:/gists/{gist_id} + */ + export namespace GistsUpdate { + export type RequestParams = { + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = GistsUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = GistsUpdateData; + } + /** + * No description + * @tags gists + * @name GistsUpdateComment + * @summary Update a gist comment + * @request PATCH:/gists/{gist_id}/comments/{comment_id} + */ + export namespace GistsUpdateComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + /** gist_id parameter */ + gistId: string; + }; + export type RequestQuery = {}; + export type RequestBody = GistsUpdateCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = GistsUpdateCommentData; + } +} + +export namespace Gitignore { + /** + * @description List all templates available to pass as an option when [creating a repository](https://docs.github.com/rest/reference/repos#create-a-repository-for-the-authenticated-user). + * @tags gitignore + * @name GitignoreGetAllTemplates + * @summary Get all gitignore templates + * @request GET:/gitignore/templates + */ + export namespace GitignoreGetAllTemplates { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitignoreGetAllTemplatesData; + } + /** + * @description The API also allows fetching the source of a single template. Use the raw [media type](https://docs.github.com/rest/overview/media-types/) to get the raw contents. + * @tags gitignore + * @name GitignoreGetTemplate + * @summary Get a gitignore template + * @request GET:/gitignore/templates/{name} + */ + export namespace GitignoreGetTemplate { + export type RequestParams = { + name: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitignoreGetTemplateData; + } +} + +export namespace Installation { + /** + * @description List repositories that an app installation can access. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @tags apps + * @name AppsListReposAccessibleToInstallation + * @summary List repositories accessible to the app installation + * @request GET:/installation/repositories + */ + export namespace AppsListReposAccessibleToInstallation { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListReposAccessibleToInstallationData; + } + /** + * @description Revokes the installation token you're using to authenticate as an installation and access this endpoint. Once an installation token is revoked, the token is invalidated and cannot be used. Other endpoints that require the revoked installation token must have a new installation token to work. You can create a new token using the "[Create an installation access token for an app](https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app)" endpoint. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @tags apps + * @name AppsRevokeInstallationAccessToken + * @summary Revoke an installation access token + * @request DELETE:/installation/token + */ + export namespace AppsRevokeInstallationAccessToken { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsRevokeInstallationAccessTokenData; + } +} + +export namespace Issues { + /** + * @description List issues assigned to the authenticated user across all visible repositories including owned repositories, member repositories, and organization repositories. You can use the \`filter\` query parameter to fetch issues that are not necessarily assigned to you. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags issues + * @name IssuesList + * @summary List issues assigned to the authenticated user + * @request GET:/issues + */ + export namespace IssuesList { + export type RequestParams = {}; + export type RequestQuery = { + collab?: boolean; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: IssuesListParams1DirectionEnum; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: IssuesListParams1FilterEnum; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + orgs?: boolean; + owned?: boolean; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pulls?: boolean; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: IssuesListParams1SortEnum; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: IssuesListParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListData; + } +} + +export namespace Licenses { + /** + * No description + * @tags licenses + * @name LicensesGet + * @summary Get a license + * @request GET:/licenses/{license} + */ + export namespace LicensesGet { + export type RequestParams = { + license: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LicensesGetData; + } + /** + * No description + * @tags licenses + * @name LicensesGetAllCommonlyUsed + * @summary Get all commonly used licenses + * @request GET:/licenses + */ + export namespace LicensesGetAllCommonlyUsed { + export type RequestParams = {}; + export type RequestQuery = { + featured?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LicensesGetAllCommonlyUsedData; + } +} + +export namespace Markdown { + /** + * No description + * @tags markdown + * @name MarkdownRender + * @summary Render a Markdown document + * @request POST:/markdown + */ + export namespace MarkdownRender { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = MarkdownRenderPayload; + export type RequestHeaders = {}; + export type ResponseBody = MarkdownRenderData; + } + /** + * @description You must send Markdown as plain text (using a \`Content-Type\` header of \`text/plain\` or \`text/x-markdown\`) to this endpoint, rather than using JSON format. In raw mode, [GitHub Flavored Markdown](https://github.github.com/gfm/) is not supported and Markdown will be rendered in plain format like a README.md file. Markdown content must be 400 KB or less. + * @tags markdown + * @name MarkdownRenderRaw + * @summary Render a Markdown document in raw mode + * @request POST:/markdown/raw + */ + export namespace MarkdownRenderRaw { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = MarkdownRenderRawPayload; + export type RequestHeaders = {}; + export type ResponseBody = MarkdownRenderRawData; + } +} + +export namespace MarketplaceListing { + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsGetSubscriptionPlanForAccount + * @summary Get a subscription plan for an account + * @request GET:/marketplace_listing/accounts/{account_id} + */ + export namespace AppsGetSubscriptionPlanForAccount { + export type RequestParams = { + /** account_id parameter */ + accountId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetSubscriptionPlanForAccountData; + } + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsGetSubscriptionPlanForAccountStubbed + * @summary Get a subscription plan for an account (stubbed) + * @request GET:/marketplace_listing/stubbed/accounts/{account_id} + */ + export namespace AppsGetSubscriptionPlanForAccountStubbed { + export type RequestParams = { + /** account_id parameter */ + accountId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetSubscriptionPlanForAccountStubbedData; + } + /** + * @description Returns user and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsListAccountsForPlan + * @summary List accounts for a plan + * @request GET:/marketplace_listing/plans/{plan_id}/accounts + */ + export namespace AppsListAccountsForPlan { + export type RequestParams = { + /** plan_id parameter */ + planId: number; + }; + export type RequestQuery = { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: AppsListAccountsForPlanParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: AppsListAccountsForPlanParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListAccountsForPlanData; + } + /** + * @description Returns repository and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsListAccountsForPlanStubbed + * @summary List accounts for a plan (stubbed) + * @request GET:/marketplace_listing/stubbed/plans/{plan_id}/accounts + */ + export namespace AppsListAccountsForPlanStubbed { + export type RequestParams = { + /** plan_id parameter */ + planId: number; + }; + export type RequestQuery = { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: AppsListAccountsForPlanStubbedParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: AppsListAccountsForPlanStubbedParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListAccountsForPlanStubbedData; + } + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsListPlans + * @summary List plans + * @request GET:/marketplace_listing/plans + */ + export namespace AppsListPlans { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListPlansData; + } + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @tags apps + * @name AppsListPlansStubbed + * @summary List plans (stubbed) + * @request GET:/marketplace_listing/stubbed/plans + */ + export namespace AppsListPlansStubbed { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListPlansStubbedData; + } +} + +export namespace Meta { + /** + * @description Returns meta information about GitHub, including a list of GitHub's IP addresses. For more information, see "[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/)." **Note:** The IP addresses shown in the documentation's response are only example values. You must always query the API directly to get the latest list of IP addresses. + * @tags meta + * @name MetaGet + * @summary Get GitHub meta information + * @request GET:/meta + */ + export namespace MetaGet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MetaGetData; + } +} + +export namespace Networks { + /** + * No description + * @tags activity + * @name ActivityListPublicEventsForRepoNetwork + * @summary List public events for a network of repositories + * @request GET:/networks/{owner}/{repo}/events + */ + export namespace ActivityListPublicEventsForRepoNetwork { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListPublicEventsForRepoNetworkData; + } +} + +export namespace Notifications { + /** + * @description Mutes all future notifications for a conversation until you comment on the thread or get an **@mention**. If you are watching the repository of the thread, you will still receive notifications. To ignore future notifications for a repository you are watching, use the [Set a thread subscription](https://docs.github.com/rest/reference/activity#set-a-thread-subscription) endpoint and set \`ignore\` to \`true\`. + * @tags activity + * @name ActivityDeleteThreadSubscription + * @summary Delete a thread subscription + * @request DELETE:/notifications/threads/{thread_id}/subscription + */ + export namespace ActivityDeleteThreadSubscription { + export type RequestParams = { + /** thread_id parameter */ + threadId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityDeleteThreadSubscriptionData; + } + /** + * No description + * @tags activity + * @name ActivityGetThread + * @summary Get a thread + * @request GET:/notifications/threads/{thread_id} + */ + export namespace ActivityGetThread { + export type RequestParams = { + /** thread_id parameter */ + threadId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityGetThreadData; + } + /** + * @description This checks to see if the current user is subscribed to a thread. You can also [get a repository subscription](https://docs.github.com/rest/reference/activity#get-a-repository-subscription). Note that subscriptions are only generated if a user is participating in a conversation--for example, they've replied to the thread, were **@mentioned**, or manually subscribe to a thread. + * @tags activity + * @name ActivityGetThreadSubscriptionForAuthenticatedUser + * @summary Get a thread subscription for the authenticated user + * @request GET:/notifications/threads/{thread_id}/subscription + */ + export namespace ActivityGetThreadSubscriptionForAuthenticatedUser { + export type RequestParams = { + /** thread_id parameter */ + threadId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityGetThreadSubscriptionForAuthenticatedUserData; + } + /** + * @description List all notifications for the current user, sorted by most recently updated. + * @tags activity + * @name ActivityListNotificationsForAuthenticatedUser + * @summary List notifications for the authenticated user + * @request GET:/notifications + */ + export namespace ActivityListNotificationsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListNotificationsForAuthenticatedUserData; + } + /** + * @description Marks all notifications as "read" removes it from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. + * @tags activity + * @name ActivityMarkNotificationsAsRead + * @summary Mark notifications as read + * @request PUT:/notifications + */ + export namespace ActivityMarkNotificationsAsRead { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ActivityMarkNotificationsAsReadPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActivityMarkNotificationsAsReadData; + } + /** + * No description + * @tags activity + * @name ActivityMarkThreadAsRead + * @summary Mark a thread as read + * @request PATCH:/notifications/threads/{thread_id} + */ + export namespace ActivityMarkThreadAsRead { + export type RequestParams = { + /** thread_id parameter */ + threadId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityMarkThreadAsReadData; + } + /** + * @description If you are watching a repository, you receive notifications for all threads by default. Use this endpoint to ignore future notifications for threads until you comment on the thread or get an **@mention**. You can also use this endpoint to subscribe to threads that you are currently not receiving notifications for or to subscribed to threads that you have previously ignored. Unsubscribing from a conversation in a repository that you are not watching is functionally equivalent to the [Delete a thread subscription](https://docs.github.com/rest/reference/activity#delete-a-thread-subscription) endpoint. + * @tags activity + * @name ActivitySetThreadSubscription + * @summary Set a thread subscription + * @request PUT:/notifications/threads/{thread_id}/subscription + */ + export namespace ActivitySetThreadSubscription { + export type RequestParams = { + /** thread_id parameter */ + threadId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ActivitySetThreadSubscriptionPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActivitySetThreadSubscriptionData; + } +} + +export namespace Octocat { + /** + * @description Get the octocat as ASCII art + * @tags meta + * @name MetaGetOctocat + * @summary Get Octocat + * @request GET:/octocat + */ + export namespace MetaGetOctocat { + export type RequestParams = {}; + export type RequestQuery = { + /** The words to show in Octocat's speech bubble */ + s?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MetaGetOctocatData; + } +} + +export namespace Organizations { + /** + * @description Lists all organizations, in the order that they were created on GitHub. **Note:** Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of organizations. + * @tags orgs + * @name OrgsList + * @summary List organizations + * @request GET:/organizations + */ + export namespace OrgsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** An organization ID. Only return organizations with an ID greater than this ID. */ + since?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListData; + } +} + +export namespace Orgs { + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a repository to the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsAddRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Add repository access to a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + export namespace ActionsAddRepoAccessToSelfHostedRunnerGroupInOrg { + export type RequestParams = { + org: string; + repositoryId: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsAddRepoAccessToSelfHostedRunnerGroupInOrgData; + } + /** + * @description Adds a repository to an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsAddSelectedRepoToOrgSecret + * @summary Add selected repository to an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + export namespace ActionsAddSelectedRepoToOrgSecret { + export type RequestParams = { + org: string; + repositoryId: number; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsAddSelectedRepoToOrgSecretData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a self-hosted runner to a runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsAddSelfHostedRunnerToGroupForOrg + * @summary Add a self-hosted runner to a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + export namespace ActionsAddSelfHostedRunnerToGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsAddSelfHostedRunnerToGroupForOrgData; + } + /** + * @description Creates or updates an organization secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` + * @tags actions + * @name ActionsCreateOrUpdateOrgSecret + * @summary Create or update an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name} + */ + export namespace ActionsCreateOrUpdateOrgSecret { + export type RequestParams = { + org: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsCreateOrUpdateOrgSecretPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateOrUpdateOrgSecretData; + } + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org --token TOKEN \`\`\` + * @tags actions + * @name ActionsCreateRegistrationTokenForOrg + * @summary Create a registration token for an organization + * @request POST:/orgs/{org}/actions/runners/registration-token + */ + export namespace ActionsCreateRegistrationTokenForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateRegistrationTokenForOrgData; + } + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an organization. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an organization, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * @tags actions + * @name ActionsCreateRemoveTokenForOrg + * @summary Create a remove token for an organization + * @request POST:/orgs/{org}/actions/runners/remove-token + */ + export namespace ActionsCreateRemoveTokenForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateRemoveTokenForOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Creates a new self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsCreateSelfHostedRunnerGroupForOrg + * @summary Create a self-hosted runner group for an organization + * @request POST:/orgs/{org}/actions/runner-groups + */ + export namespace ActionsCreateSelfHostedRunnerGroupForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsCreateSelfHostedRunnerGroupForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateSelfHostedRunnerGroupForOrgData; + } + /** + * @description Deletes a secret in an organization using the secret name. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsDeleteOrgSecret + * @summary Delete an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name} + */ + export namespace ActionsDeleteOrgSecret { + export type RequestParams = { + org: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteOrgSecretData; + } + /** + * @description Forces the removal of a self-hosted runner from an organization. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromOrg + * @summary Delete a self-hosted runner from an organization + * @request DELETE:/orgs/{org}/actions/runners/{runner_id} + */ + export namespace ActionsDeleteSelfHostedRunnerFromOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteSelfHostedRunnerFromOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Deletes a self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsDeleteSelfHostedRunnerGroupFromOrg + * @summary Delete a self-hosted runner group from an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + export namespace ActionsDeleteSelfHostedRunnerGroupFromOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteSelfHostedRunnerGroupFromOrgData; + } + /** + * @description Removes a repository from the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsDisableSelectedRepositoryGithubActionsOrganization + * @summary Disable a selected repository for GitHub Actions in an organization + * @request DELETE:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + export namespace ActionsDisableSelectedRepositoryGithubActionsOrganization { + export type RequestParams = { + org: string; + repositoryId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDisableSelectedRepositoryGithubActionsOrganizationData; + } + /** + * @description Adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsEnableSelectedRepositoryGithubActionsOrganization + * @summary Enable a selected repository for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + export namespace ActionsEnableSelectedRepositoryGithubActionsOrganization { + export type RequestParams = { + org: string; + repositoryId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsEnableSelectedRepositoryGithubActionsOrganizationData; + } + /** + * @description Gets the selected actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)."" You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsGetAllowedActionsOrganization + * @summary Get allowed actions for an organization + * @request GET:/orgs/{org}/actions/permissions/selected-actions + */ + export namespace ActionsGetAllowedActionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetAllowedActionsOrganizationData; + } + /** + * @description Gets the GitHub Actions permissions policy for repositories and allowed actions in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsGetGithubActionsPermissionsOrganization + * @summary Get GitHub Actions permissions for an organization + * @request GET:/orgs/{org}/actions/permissions + */ + export namespace ActionsGetGithubActionsPermissionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetGithubActionsPermissionsOrganizationData; + } + /** + * @description Gets your public key, which you need to encrypt secrets. You need to encrypt a secret before you can create or update secrets. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsGetOrgPublicKey + * @summary Get an organization public key + * @request GET:/orgs/{org}/actions/secrets/public-key + */ + export namespace ActionsGetOrgPublicKey { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetOrgPublicKeyData; + } + /** + * @description Gets a single organization secret without revealing its encrypted value. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsGetOrgSecret + * @summary Get an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name} + */ + export namespace ActionsGetOrgSecret { + export type RequestParams = { + org: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetOrgSecretData; + } + /** + * @description Gets a specific self-hosted runner configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsGetSelfHostedRunnerForOrg + * @summary Get a self-hosted runner for an organization + * @request GET:/orgs/{org}/actions/runners/{runner_id} + */ + export namespace ActionsGetSelfHostedRunnerForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetSelfHostedRunnerForOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Gets a specific self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsGetSelfHostedRunnerGroupForOrg + * @summary Get a self-hosted runner group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + export namespace ActionsGetSelfHostedRunnerGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetSelfHostedRunnerGroupForOrgData; + } + /** + * @description Lists all secrets available in an organization without revealing their encrypted values. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsListOrgSecrets + * @summary List organization secrets + * @request GET:/orgs/{org}/actions/secrets + */ + export namespace ActionsListOrgSecrets { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListOrgSecretsData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists the repositories with access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsListRepoAccessToSelfHostedRunnerGroupInOrg + * @summary List repository access to a self-hosted runner group in an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + export namespace ActionsListRepoAccessToSelfHostedRunnerGroupInOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListRepoAccessToSelfHostedRunnerGroupInOrgData; + } + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsListRunnerApplicationsForOrg + * @summary List runner applications for an organization + * @request GET:/orgs/{org}/actions/runners/downloads + */ + export namespace ActionsListRunnerApplicationsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListRunnerApplicationsForOrgData; + } + /** + * @description Lists all repositories that have been selected when the \`visibility\` for repository access to a secret is set to \`selected\`. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsListSelectedReposForOrgSecret + * @summary List selected repositories for an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + export namespace ActionsListSelectedReposForOrgSecret { + export type RequestParams = { + org: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelectedReposForOrgSecretData; + } + /** + * @description Lists the selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsListSelectedRepositoriesEnabledGithubActionsOrganization + * @summary List selected repositories enabled for GitHub Actions in an organization + * @request GET:/orgs/{org}/actions/permissions/repositories + */ + export namespace ActionsListSelectedRepositoriesEnabledGithubActionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelectedRepositoriesEnabledGithubActionsOrganizationData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists all self-hosted runner groups configured in an organization and inherited from an enterprise. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsListSelfHostedRunnerGroupsForOrg + * @summary List self-hosted runner groups for an organization + * @request GET:/orgs/{org}/actions/runner-groups + */ + export namespace ActionsListSelfHostedRunnerGroupsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelfHostedRunnerGroupsForOrgData; + } + /** + * @description Lists all self-hosted runners configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsListSelfHostedRunnersForOrg + * @summary List self-hosted runners for an organization + * @request GET:/orgs/{org}/actions/runners + */ + export namespace ActionsListSelfHostedRunnersForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelfHostedRunnersForOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists self-hosted runners that are in a specific organization group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsListSelfHostedRunnersInGroupForOrg + * @summary List self-hosted runners in a group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + export namespace ActionsListSelfHostedRunnersInGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelfHostedRunnersInGroupForOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a repository from the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Remove repository access to a self-hosted runner group in an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + export namespace ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg { + export type RequestParams = { + org: string; + repositoryId: number; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrgData; + } + /** + * @description Removes a repository from an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsRemoveSelectedRepoFromOrgSecret + * @summary Remove selected repository from an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + export namespace ActionsRemoveSelectedRepoFromOrgSecret { + export type RequestParams = { + org: string; + repositoryId: number; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsRemoveSelectedRepoFromOrgSecretData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a self-hosted runner from a group configured in an organization. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsRemoveSelfHostedRunnerFromGroupForOrg + * @summary Remove a self-hosted runner from a group for an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + export namespace ActionsRemoveSelfHostedRunnerFromGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsRemoveSelfHostedRunnerFromGroupForOrgData; + } + /** + * @description Sets the actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." If the organization belongs to an enterprise that has \`selected\` actions set at the enterprise level, then you cannot override any of the enterprise's allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the organization must belong to an enterprise. If the organization does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories in the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsSetAllowedActionsOrganization + * @summary Set allowed actions for an organization + * @request PUT:/orgs/{org}/actions/permissions/selected-actions + */ + export namespace ActionsSetAllowedActionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = SelectedActions; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetAllowedActionsOrganizationData; + } + /** + * @description Sets the GitHub Actions permissions policy for repositories and allowed actions in an organization. If the organization belongs to an enterprise that has set restrictive permissions at the enterprise level, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsSetGithubActionsPermissionsOrganization + * @summary Set GitHub Actions permissions for an organization + * @request PUT:/orgs/{org}/actions/permissions + */ + export namespace ActionsSetGithubActionsPermissionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetGithubActionsPermissionsOrganizationPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetGithubActionsPermissionsOrganizationData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of repositories that have access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsSetRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Set repository access for a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + export namespace ActionsSetRepoAccessToSelfHostedRunnerGroupInOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetRepoAccessToSelfHostedRunnerGroupInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetRepoAccessToSelfHostedRunnerGroupInOrgData; + } + /** + * @description Replaces all repositories for an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * @tags actions + * @name ActionsSetSelectedReposForOrgSecret + * @summary Set selected repositories for an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + export namespace ActionsSetSelectedReposForOrgSecret { + export type RequestParams = { + org: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetSelectedReposForOrgSecretPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetSelectedReposForOrgSecretData; + } + /** + * @description Replaces the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * @tags actions + * @name ActionsSetSelectedRepositoriesEnabledGithubActionsOrganization + * @summary Set selected repositories enabled for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories + */ + export namespace ActionsSetSelectedRepositoriesEnabledGithubActionsOrganization { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetSelectedRepositoriesEnabledGithubActionsOrganizationPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetSelectedRepositoriesEnabledGithubActionsOrganizationData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of self-hosted runners that are part of an organization runner group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsSetSelfHostedRunnersInGroupForOrg + * @summary Set self-hosted runners in a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + export namespace ActionsSetSelfHostedRunnersInGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetSelfHostedRunnersInGroupForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetSelfHostedRunnersInGroupForOrgData; + } + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Updates the \`name\` and \`visibility\` of a self-hosted runner group in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * @tags actions + * @name ActionsUpdateSelfHostedRunnerGroupForOrg + * @summary Update a self-hosted runner group for an organization + * @request PATCH:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + export namespace ActionsUpdateSelfHostedRunnerGroupForOrg { + export type RequestParams = { + org: string; + /** Unique identifier of the self-hosted runner group. */ + runnerGroupId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsUpdateSelfHostedRunnerGroupForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsUpdateSelfHostedRunnerGroupForOrgData; + } + /** + * No description + * @tags activity + * @name ActivityListPublicOrgEvents + * @summary List public organization events + * @request GET:/orgs/{org}/events + */ + export namespace ActivityListPublicOrgEvents { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListPublicOrgEventsData; + } + /** + * @description Enables an authenticated GitHub App to find the organization's installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetOrgInstallation + * @summary Get an organization installation for the authenticated app + * @request GET:/orgs/{org}/installation + */ + export namespace AppsGetOrgInstallation { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetOrgInstallationData; + } + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the \`repo\` or \`admin:org\` scope. + * @tags billing + * @name BillingGetGithubActionsBillingOrg + * @summary Get GitHub Actions billing for an organization + * @request GET:/orgs/{org}/settings/billing/actions + */ + export namespace BillingGetGithubActionsBillingOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubActionsBillingOrgData; + } + /** + * @description Gets the free and paid storage usued for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * @tags billing + * @name BillingGetGithubPackagesBillingOrg + * @summary Get GitHub Packages billing for an organization + * @request GET:/orgs/{org}/settings/billing/packages + */ + export namespace BillingGetGithubPackagesBillingOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubPackagesBillingOrgData; + } + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * @tags billing + * @name BillingGetSharedStorageBillingOrg + * @summary Get shared storage billing for an organization + * @request GET:/orgs/{org}/settings/billing/shared-storage + */ + export namespace BillingGetSharedStorageBillingOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetSharedStorageBillingOrgData; + } + /** + * @description Shows which type of GitHub user can interact with this organization and when the restriction expires. If there is no restrictions, you will see an empty response. + * @tags interactions + * @name InteractionsGetRestrictionsForOrg + * @summary Get interaction restrictions for an organization + * @request GET:/orgs/{org}/interaction-limits + */ + export namespace InteractionsGetRestrictionsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsGetRestrictionsForOrgData; + } + /** + * @description Removes all interaction restrictions from public repositories in the given organization. You must be an organization owner to remove restrictions. + * @tags interactions + * @name InteractionsRemoveRestrictionsForOrg + * @summary Remove interaction restrictions for an organization + * @request DELETE:/orgs/{org}/interaction-limits + */ + export namespace InteractionsRemoveRestrictionsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsRemoveRestrictionsForOrgData; + } + /** + * @description Temporarily restricts interactions to a certain type of GitHub user in any public repository in the given organization. You must be an organization owner to set these restrictions. Setting the interaction limit at the organization level will overwrite any interaction limits that are set for individual repositories owned by the organization. + * @tags interactions + * @name InteractionsSetRestrictionsForOrg + * @summary Set interaction restrictions for an organization + * @request PUT:/orgs/{org}/interaction-limits + */ + export namespace InteractionsSetRestrictionsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = InteractionLimit; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsSetRestrictionsForOrgData; + } + /** + * @description List issues in an organization assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags issues + * @name IssuesListForOrg + * @summary List organization issues assigned to the authenticated user + * @request GET:/orgs/{org}/issues + */ + export namespace IssuesListForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: IssuesListForOrgParams1DirectionEnum; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: IssuesListForOrgParams1FilterEnum; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: IssuesListForOrgParams1SortEnum; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: IssuesListForOrgParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListForOrgData; + } + /** + * @description Deletes a previous migration archive. Migration archives are automatically deleted after seven days. + * @tags migrations + * @name MigrationsDeleteArchiveForOrg + * @summary Delete an organization migration archive + * @request DELETE:/orgs/{org}/migrations/{migration_id}/archive + */ + export namespace MigrationsDeleteArchiveForOrg { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsDeleteArchiveForOrgData; + } + /** + * @description Fetches the URL to a migration archive. + * @tags migrations + * @name MigrationsDownloadArchiveForOrg + * @summary Download an organization migration archive + * @request GET:/orgs/{org}/migrations/{migration_id}/archive + */ + export namespace MigrationsDownloadArchiveForOrg { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Fetches the status of a migration. The \`state\` of a migration can be one of the following values: * \`pending\`, which means the migration hasn't started yet. * \`exporting\`, which means the migration is in progress. * \`exported\`, which means the migration finished successfully. * \`failed\`, which means the migration failed. + * @tags migrations + * @name MigrationsGetStatusForOrg + * @summary Get an organization migration status + * @request GET:/orgs/{org}/migrations/{migration_id} + */ + export namespace MigrationsGetStatusForOrg { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsGetStatusForOrgData; + } + /** + * @description Lists the most recent migrations. + * @tags migrations + * @name MigrationsListForOrg + * @summary List organization migrations + * @request GET:/orgs/{org}/migrations + */ + export namespace MigrationsListForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsListForOrgData; + } + /** + * @description List all the repositories for this organization migration. + * @tags migrations + * @name MigrationsListReposForOrg + * @summary List repositories in an organization migration + * @request GET:/orgs/{org}/migrations/{migration_id}/repositories + */ + export namespace MigrationsListReposForOrg { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsListReposForOrgData; + } + /** + * @description Initiates the generation of a migration archive. + * @tags migrations + * @name MigrationsStartForOrg + * @summary Start an organization migration + * @request POST:/orgs/{org}/migrations + */ + export namespace MigrationsStartForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = MigrationsStartForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsStartForOrgData; + } + /** + * @description Unlocks a repository that was locked for migration. You should unlock each migrated repository and [delete them](https://docs.github.com/rest/reference/repos#delete-a-repository) when the migration is complete and you no longer need the source data. + * @tags migrations + * @name MigrationsUnlockRepoForOrg + * @summary Unlock an organization repository + * @request DELETE:/orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock + */ + export namespace MigrationsUnlockRepoForOrg { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + org: string; + /** repo_name parameter */ + repoName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsUnlockRepoForOrgData; + } + /** + * No description + * @tags orgs + * @name OrgsBlockUser + * @summary Block a user from an organization + * @request PUT:/orgs/{org}/blocks/{username} + */ + export namespace OrgsBlockUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsBlockUserData; + } + /** + * @description Cancel an organization invitation. In order to cancel an organization invitation, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). + * @tags orgs + * @name OrgsCancelInvitation + * @summary Cancel an organization invitation + * @request DELETE:/orgs/{org}/invitations/{invitation_id} + */ + export namespace OrgsCancelInvitation { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCancelInvitationData; + } + /** + * No description + * @tags orgs + * @name OrgsCheckBlockedUser + * @summary Check if a user is blocked by an organization + * @request GET:/orgs/{org}/blocks/{username} + */ + export namespace OrgsCheckBlockedUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCheckBlockedUserData; + } + /** + * @description Check if a user is, publicly or privately, a member of the organization. + * @tags orgs + * @name OrgsCheckMembershipForUser + * @summary Check organization membership for a user + * @request GET:/orgs/{org}/members/{username} + */ + export namespace OrgsCheckMembershipForUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCheckMembershipForUserData; + } + /** + * No description + * @tags orgs + * @name OrgsCheckPublicMembershipForUser + * @summary Check public organization membership for a user + * @request GET:/orgs/{org}/public_members/{username} + */ + export namespace OrgsCheckPublicMembershipForUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCheckPublicMembershipForUserData; + } + /** + * @description When an organization member is converted to an outside collaborator, they'll only have access to the repositories that their current team membership allows. The user will no longer be a member of the organization. For more information, see "[Converting an organization member to an outside collaborator](https://help.github.com/articles/converting-an-organization-member-to-an-outside-collaborator/)". + * @tags orgs + * @name OrgsConvertMemberToOutsideCollaborator + * @summary Convert an organization member to outside collaborator + * @request PUT:/orgs/{org}/outside_collaborators/{username} + */ + export namespace OrgsConvertMemberToOutsideCollaborator { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsConvertMemberToOutsideCollaboratorData; + } + /** + * @description Invite people to an organization by using their GitHub user ID or their email address. In order to create invitations in an organization, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags orgs + * @name OrgsCreateInvitation + * @summary Create an organization invitation + * @request POST:/orgs/{org}/invitations + */ + export namespace OrgsCreateInvitation { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsCreateInvitationPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCreateInvitationData; + } + /** + * @description Here's how you can create a hook that posts payloads in JSON format: + * @tags orgs + * @name OrgsCreateWebhook + * @summary Create an organization webhook + * @request POST:/orgs/{org}/hooks + */ + export namespace OrgsCreateWebhook { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsCreateWebhookPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsCreateWebhookData; + } + /** + * No description + * @tags orgs + * @name OrgsDeleteWebhook + * @summary Delete an organization webhook + * @request DELETE:/orgs/{org}/hooks/{hook_id} + */ + export namespace OrgsDeleteWebhook { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsDeleteWebhookData; + } + /** + * @description To see many of the organization response values, you need to be an authenticated organization owner with the \`admin:org\` scope. When the value of \`two_factor_requirement_enabled\` is \`true\`, the organization requires all members, billing managers, and outside collaborators to enable [two-factor authentication](https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/). GitHub Apps with the \`Organization plan\` permission can use this endpoint to retrieve information about an organization's GitHub plan. See "[Authenticating with GitHub Apps](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/)" for details. For an example response, see 'Response with GitHub plan information' below." + * @tags orgs + * @name OrgsGet + * @summary Get an organization + * @request GET:/orgs/{org} + */ + export namespace OrgsGet { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetData; + } + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an organization. For more information, see "[Reviewing the audit log for your organization](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization)." To use this endpoint, you must be an organization owner, and you must use an access token with the \`admin:org\` scope. GitHub Apps must have the \`organization_administration\` read permission to use this endpoint. + * @tags orgs + * @name OrgsGetAuditLog + * @summary Get the audit log for an organization + * @request GET:/orgs/{org}/audit-log + */ + export namespace OrgsGetAuditLog { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: OrgsGetAuditLogParams1IncludeEnum; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: OrgsGetAuditLogParams1OrderEnum; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetAuditLogData; + } + /** + * @description In order to get a user's membership with an organization, the authenticated user must be an organization member. + * @tags orgs + * @name OrgsGetMembershipForUser + * @summary Get organization membership for a user + * @request GET:/orgs/{org}/memberships/{username} + */ + export namespace OrgsGetMembershipForUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetMembershipForUserData; + } + /** + * @description Returns a webhook configured in an organization. To get only the webhook \`config\` properties, see "[Get a webhook configuration for an organization](/rest/reference/orgs#get-a-webhook-configuration-for-an-organization)." + * @tags orgs + * @name OrgsGetWebhook + * @summary Get an organization webhook + * @request GET:/orgs/{org}/hooks/{hook_id} + */ + export namespace OrgsGetWebhook { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetWebhookData; + } + /** + * @description Returns the webhook configuration for an organization. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get an organization webhook ](/rest/reference/orgs#get-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:read\` permission. + * @tags orgs + * @name OrgsGetWebhookConfigForOrg + * @summary Get a webhook configuration for an organization + * @request GET:/orgs/{org}/hooks/{hook_id}/config + */ + export namespace OrgsGetWebhookConfigForOrg { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetWebhookConfigForOrgData; + } + /** + * @description Lists all GitHub Apps in an organization. The installation count includes all GitHub Apps installed on repositories in the organization. You must be an organization owner with \`admin:read\` scope to use this endpoint. + * @tags orgs + * @name OrgsListAppInstallations + * @summary List app installations for an organization + * @request GET:/orgs/{org}/installations + */ + export namespace OrgsListAppInstallations { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListAppInstallationsData; + } + /** + * @description List the users blocked by an organization. + * @tags orgs + * @name OrgsListBlockedUsers + * @summary List users blocked by an organization + * @request GET:/orgs/{org}/blocks + */ + export namespace OrgsListBlockedUsers { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListBlockedUsersData; + } + /** + * @description The return hash contains \`failed_at\` and \`failed_reason\` fields which represent the time at which the invitation failed and the reason for the failure. + * @tags orgs + * @name OrgsListFailedInvitations + * @summary List failed organization invitations + * @request GET:/orgs/{org}/failed_invitations + */ + export namespace OrgsListFailedInvitations { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListFailedInvitationsData; + } + /** + * @description List all teams associated with an invitation. In order to see invitations in an organization, the authenticated user must be an organization owner. + * @tags orgs + * @name OrgsListInvitationTeams + * @summary List organization invitation teams + * @request GET:/orgs/{org}/invitations/{invitation_id}/teams + */ + export namespace OrgsListInvitationTeams { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListInvitationTeamsData; + } + /** + * @description List all users who are members of an organization. If the authenticated user is also a member of this organization then both concealed and public members will be returned. + * @tags orgs + * @name OrgsListMembers + * @summary List organization members + * @request GET:/orgs/{org}/members + */ + export namespace OrgsListMembers { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Filter members returned in the list. Can be one of: + * \\* \`2fa_disabled\` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. + * \\* \`all\` - All members the authenticated user can see. + * @default "all" + */ + filter?: OrgsListMembersParams1FilterEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filter members returned by their role. Can be one of: + * \\* \`all\` - All members of the organization, regardless of role. + * \\* \`admin\` - Organization owners. + * \\* \`member\` - Non-owner organization members. + * @default "all" + */ + role?: OrgsListMembersParams1RoleEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListMembersData; + } + /** + * @description List all users who are outside collaborators of an organization. + * @tags orgs + * @name OrgsListOutsideCollaborators + * @summary List outside collaborators for an organization + * @request GET:/orgs/{org}/outside_collaborators + */ + export namespace OrgsListOutsideCollaborators { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Filter the list of outside collaborators. Can be one of: + * \\* \`2fa_disabled\`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. + * \\* \`all\`: All outside collaborators. + * @default "all" + */ + filter?: OrgsListOutsideCollaboratorsParams1FilterEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListOutsideCollaboratorsData; + } + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. + * @tags orgs + * @name OrgsListPendingInvitations + * @summary List pending organization invitations + * @request GET:/orgs/{org}/invitations + */ + export namespace OrgsListPendingInvitations { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListPendingInvitationsData; + } + /** + * @description Members of an organization can choose to have their membership publicized or not. + * @tags orgs + * @name OrgsListPublicMembers + * @summary List public organization members + * @request GET:/orgs/{org}/public_members + */ + export namespace OrgsListPublicMembers { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListPublicMembersData; + } + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`read:org\` scope can list all credential authorizations for an organization that uses SAML single sign-on (SSO). The credentials are either personal access tokens or SSH keys that organization members have authorized for the organization. For more information, see [About authentication with SAML single sign-on](https://help.github.com/en/articles/about-authentication-with-saml-single-sign-on). + * @tags orgs + * @name OrgsListSamlSsoAuthorizations + * @summary List SAML SSO authorizations for an organization + * @request GET:/orgs/{org}/credential-authorizations + */ + export namespace OrgsListSamlSsoAuthorizations { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListSamlSsoAuthorizationsData; + } + /** + * No description + * @tags orgs + * @name OrgsListWebhooks + * @summary List organization webhooks + * @request GET:/orgs/{org}/hooks + */ + export namespace OrgsListWebhooks { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListWebhooksData; + } + /** + * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * @tags orgs + * @name OrgsPingWebhook + * @summary Ping an organization webhook + * @request POST:/orgs/{org}/hooks/{hook_id}/pings + */ + export namespace OrgsPingWebhook { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsPingWebhookData; + } + /** + * @description Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. + * @tags orgs + * @name OrgsRemoveMember + * @summary Remove an organization member + * @request DELETE:/orgs/{org}/members/{username} + */ + export namespace OrgsRemoveMember { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsRemoveMemberData; + } + /** + * @description In order to remove a user's membership with an organization, the authenticated user must be an organization owner. If the specified user is an active member of the organization, this will remove them from the organization. If the specified user has been invited to the organization, this will cancel their invitation. The specified user will receive an email notification in both cases. + * @tags orgs + * @name OrgsRemoveMembershipForUser + * @summary Remove organization membership for a user + * @request DELETE:/orgs/{org}/memberships/{username} + */ + export namespace OrgsRemoveMembershipForUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsRemoveMembershipForUserData; + } + /** + * @description Removing a user from this list will remove them from all the organization's repositories. + * @tags orgs + * @name OrgsRemoveOutsideCollaborator + * @summary Remove outside collaborator from an organization + * @request DELETE:/orgs/{org}/outside_collaborators/{username} + */ + export namespace OrgsRemoveOutsideCollaborator { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsRemoveOutsideCollaboratorData; + } + /** + * No description + * @tags orgs + * @name OrgsRemovePublicMembershipForAuthenticatedUser + * @summary Remove public organization membership for the authenticated user + * @request DELETE:/orgs/{org}/public_members/{username} + */ + export namespace OrgsRemovePublicMembershipForAuthenticatedUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsRemovePublicMembershipForAuthenticatedUserData; + } + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`admin:org\` scope can remove a credential authorization for an organization that uses SAML SSO. Once you remove someone's credential authorization, they will need to create a new personal access token or SSH key and authorize it for the organization they want to access. + * @tags orgs + * @name OrgsRemoveSamlSsoAuthorization + * @summary Remove a SAML SSO authorization for an organization + * @request DELETE:/orgs/{org}/credential-authorizations/{credential_id} + */ + export namespace OrgsRemoveSamlSsoAuthorization { + export type RequestParams = { + credentialId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsRemoveSamlSsoAuthorizationData; + } + /** + * @description Only authenticated organization owners can add a member to the organization or update the member's role. * If the authenticated user is _adding_ a member to the organization, the invited user will receive an email inviting them to the organization. The user's [membership status](https://docs.github.com/rest/reference/orgs#get-organization-membership-for-a-user) will be \`pending\` until they accept the invitation. * Authenticated users can _update_ a user's membership by passing the \`role\` parameter. If the authenticated user changes a member's role to \`admin\`, the affected user will receive an email notifying them that they've been made an organization owner. If the authenticated user changes an owner's role to \`member\`, no email will be sent. **Rate limits** To prevent abuse, the authenticated user is limited to 50 organization invitations per 24 hour period. If the organization is more than one month old or on a paid plan, the limit is 500 invitations per 24 hour period. + * @tags orgs + * @name OrgsSetMembershipForUser + * @summary Set organization membership for a user + * @request PUT:/orgs/{org}/memberships/{username} + */ + export namespace OrgsSetMembershipForUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsSetMembershipForUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsSetMembershipForUserData; + } + /** + * @description The user can publicize their own membership. (A user cannot publicize the membership for another user.) Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags orgs + * @name OrgsSetPublicMembershipForAuthenticatedUser + * @summary Set public organization membership for the authenticated user + * @request PUT:/orgs/{org}/public_members/{username} + */ + export namespace OrgsSetPublicMembershipForAuthenticatedUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsSetPublicMembershipForAuthenticatedUserData; + } + /** + * No description + * @tags orgs + * @name OrgsUnblockUser + * @summary Unblock a user from an organization + * @request DELETE:/orgs/{org}/blocks/{username} + */ + export namespace OrgsUnblockUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsUnblockUserData; + } + /** + * @description **Parameter Deprecation Notice:** GitHub will replace and discontinue \`members_allowed_repository_creation_type\` in favor of more granular permissions. The new input parameters are \`members_can_create_public_repositories\`, \`members_can_create_private_repositories\` for all organizations and \`members_can_create_internal_repositories\` for organizations associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. For more information, see the [blog post](https://developer.github.com/changes/2019-12-03-internal-visibility-changes). Enables an authenticated organization owner with the \`admin:org\` scope to update the organization's profile and member privileges. + * @tags orgs + * @name OrgsUpdate + * @summary Update an organization + * @request PATCH:/orgs/{org} + */ + export namespace OrgsUpdate { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsUpdateData; + } + /** + * @description Updates a webhook configured in an organization. When you update a webhook, the \`secret\` will be overwritten. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for an organization](/rest/reference/orgs#update-a-webhook-configuration-for-an-organization)." + * @tags orgs + * @name OrgsUpdateWebhook + * @summary Update an organization webhook + * @request PATCH:/orgs/{org}/hooks/{hook_id} + */ + export namespace OrgsUpdateWebhook { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsUpdateWebhookPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsUpdateWebhookData; + } + /** + * @description Updates the webhook configuration for an organization. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update an organization webhook ](/rest/reference/orgs#update-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:write\` permission. + * @tags orgs + * @name OrgsUpdateWebhookConfigForOrg + * @summary Update a webhook configuration for an organization + * @request PATCH:/orgs/{org}/hooks/{hook_id}/config + */ + export namespace OrgsUpdateWebhookConfigForOrg { + export type RequestParams = { + hookId: number; + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsUpdateWebhookConfigForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsUpdateWebhookConfigForOrgData; + } + /** + * @description Creates an organization project board. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsCreateForOrg + * @summary Create an organization project + * @request POST:/orgs/{org}/projects + */ + export namespace ProjectsCreateForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsCreateForOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsCreateForOrgData; + } + /** + * @description Lists the projects in an organization. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsListForOrg + * @summary List organization projects + * @request GET:/orgs/{org}/projects + */ + export namespace ProjectsListForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: ProjectsListForOrgParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListForOrgData; + } + /** + * @description Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentInOrg + * @summary Create reaction for a team discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + export namespace ReactionsCreateForTeamDiscussionCommentInOrg { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForTeamDiscussionCommentInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForTeamDiscussionCommentInOrgData; + } + /** + * @description Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * @tags reactions + * @name ReactionsCreateForTeamDiscussionInOrg + * @summary Create reaction for a team discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + export namespace ReactionsCreateForTeamDiscussionInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForTeamDiscussionInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForTeamDiscussionInOrgData; + } + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags reactions + * @name ReactionsDeleteForTeamDiscussion + * @summary Delete team discussion reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForTeamDiscussion { + export type RequestParams = { + discussionNumber: number; + org: string; + reactionId: number; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForTeamDiscussionData; + } + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags reactions + * @name ReactionsDeleteForTeamDiscussionComment + * @summary Delete team discussion comment reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForTeamDiscussionComment { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + reactionId: number; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForTeamDiscussionCommentData; + } + /** + * @description List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments/). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentInOrg + * @summary List reactions for a team discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + export namespace ReactionsListForTeamDiscussionCommentInOrg { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: ReactionsListForTeamDiscussionCommentInOrgParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForTeamDiscussionCommentInOrgData; + } + /** + * @description List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * @tags reactions + * @name ReactionsListForTeamDiscussionInOrg + * @summary List reactions for a team discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + export namespace ReactionsListForTeamDiscussionInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: ReactionsListForTeamDiscussionInOrgParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForTeamDiscussionInOrgData; + } + /** + * @description Creates a new repository in the specified organization. The authenticated user must be a member of the organization. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * @tags repos + * @name ReposCreateInOrg + * @summary Create an organization repository + * @request POST:/orgs/{org}/repos + */ + export namespace ReposCreateInOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateInOrgData; + } + /** + * @description Lists repositories for the specified organization. + * @tags repos + * @name ReposListForOrg + * @summary List organization repositories + * @request GET:/orgs/{org}/repos + */ + export namespace ReposListForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** Can be one of \`asc\` or \`desc\`. Default: when using \`full_name\`: \`asc\`, otherwise \`desc\` */ + direction?: ReposListForOrgParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "created" + */ + sort?: ReposListForOrgParams1SortEnum; + /** Specifies the types of repositories you want returned. Can be one of \`all\`, \`public\`, \`private\`, \`forks\`, \`sources\`, \`member\`, \`internal\`. Default: \`all\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`type\` can also be \`internal\`. */ + type?: ReposListForOrgParams1TypeEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListForOrgData; + } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adds an organization member to a team. An authenticated organization owner or team maintainer can add organization members to a team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." An organization owner can add someone who is not part of the team's organization to a team. When an organization owner adds someone to a team who is not an organization member, this endpoint will send an invitation to the person via email. This newly-created membership will be in the "pending" state until the person accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserInOrg + * @summary Add or update team membership for a user + * @request PUT:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + export namespace TeamsAddOrUpdateMembershipForUserInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateMembershipForUserInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateMembershipForUserInOrgData; + } + /** + * @description Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsInOrg + * @summary Add or update team project permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + export namespace TeamsAddOrUpdateProjectPermissionsInOrg { + export type RequestParams = { + org: string; + projectId: number; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateProjectPermissionsInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateProjectPermissionsInOrgData; + } + /** + * @description To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. For more information about the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsInOrg + * @summary Add or update team repository permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + export namespace TeamsAddOrUpdateRepoPermissionsInOrg { + export type RequestParams = { + org: string; + owner: string; + repo: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateRepoPermissionsInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateRepoPermissionsInOrgData; + } + /** + * @description Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * @tags teams + * @name TeamsCheckPermissionsForProjectInOrg + * @summary Check team permissions for a project + * @request GET:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + export namespace TeamsCheckPermissionsForProjectInOrg { + export type RequestParams = { + org: string; + projectId: number; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCheckPermissionsForProjectInOrgData; + } + /** + * @description Checks whether a team has \`admin\`, \`push\`, \`maintain\`, \`triage\`, or \`pull\` permission for a repository. Repositories inherited through a parent team will also be checked. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`application/vnd.github.v3.repository+json\` accept header. If a team doesn't have permission for the repository, you will receive a \`404 Not Found\` response status. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * @tags teams + * @name TeamsCheckPermissionsForRepoInOrg + * @summary Check team permissions for a repository + * @request GET:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + export namespace TeamsCheckPermissionsForRepoInOrg { + export type RequestParams = { + org: string; + owner: string; + repo: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCheckPermissionsForRepoInOrgData; + } + /** + * @description To create a team, the authenticated user must be a member or owner of \`{org}\`. By default, organization members can create teams. Organization owners can limit team creation to organization owners. For more information, see "[Setting team creation permissions](https://help.github.com/en/articles/setting-team-creation-permissions-in-your-organization)." When you create a new team, you automatically become a team maintainer without explicitly adding yourself to the optional array of \`maintainers\`. For more information, see "[About teams](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/about-teams)". + * @tags teams + * @name TeamsCreate + * @summary Create a team + * @request POST:/orgs/{org}/teams + */ + export namespace TeamsCreate { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreatePayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateData; + } + /** + * @description Creates a new comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * @tags teams + * @name TeamsCreateDiscussionCommentInOrg + * @summary Create a discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + export namespace TeamsCreateDiscussionCommentInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateDiscussionCommentInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateDiscussionCommentInOrgData; + } + /** + * @description Creates a new discussion post on a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions\`. + * @tags teams + * @name TeamsCreateDiscussionInOrg + * @summary Create a discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions + */ + export namespace TeamsCreateDiscussionInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateDiscussionInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateDiscussionInOrgData; + } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsInOrg + * @summary Create or update IdP group connections + * @request PATCH:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + export namespace TeamsCreateOrUpdateIdpGroupConnectionsInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateOrUpdateIdpGroupConnectionsInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateOrUpdateIdpGroupConnectionsInOrgData; + } + /** + * @description Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * @tags teams + * @name TeamsDeleteDiscussionCommentInOrg + * @summary Delete a discussion comment + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + export namespace TeamsDeleteDiscussionCommentInOrg { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteDiscussionCommentInOrgData; + } + /** + * @description Delete a discussion from a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * @tags teams + * @name TeamsDeleteDiscussionInOrg + * @summary Delete a discussion + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + export namespace TeamsDeleteDiscussionInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteDiscussionInOrgData; + } + /** + * @description To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}\`. + * @tags teams + * @name TeamsDeleteInOrg + * @summary Delete a team + * @request DELETE:/orgs/{org}/teams/{team_slug} + */ + export namespace TeamsDeleteInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteInOrgData; + } + /** + * @description Gets a team using the team's \`slug\`. GitHub generates the \`slug\` from the team \`name\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}\`. + * @tags teams + * @name TeamsGetByName + * @summary Get a team by name + * @request GET:/orgs/{org}/teams/{team_slug} + */ + export namespace TeamsGetByName { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetByNameData; + } + /** + * @description Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * @tags teams + * @name TeamsGetDiscussionCommentInOrg + * @summary Get a discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + export namespace TeamsGetDiscussionCommentInOrg { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetDiscussionCommentInOrgData; + } + /** + * @description Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * @tags teams + * @name TeamsGetDiscussionInOrg + * @summary Get a discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + export namespace TeamsGetDiscussionInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetDiscussionInOrgData; + } + /** + * @description Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/memberships/{username}\`. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). + * @tags teams + * @name TeamsGetMembershipForUserInOrg + * @summary Get team membership for a user + * @request GET:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + export namespace TeamsGetMembershipForUserInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetMembershipForUserInOrgData; + } + /** + * @description Lists all teams in an organization that are visible to the authenticated user. + * @tags teams + * @name TeamsList + * @summary List teams + * @request GET:/orgs/{org}/teams + */ + export namespace TeamsList { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListData; + } + /** + * @description Lists the child teams of the team specified by \`{team_slug}\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/teams\`. + * @tags teams + * @name TeamsListChildInOrg + * @summary List child teams + * @request GET:/orgs/{org}/teams/{team_slug}/teams + */ + export namespace TeamsListChildInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListChildInOrgData; + } + /** + * @description List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * @tags teams + * @name TeamsListDiscussionCommentsInOrg + * @summary List discussion comments + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + export namespace TeamsListDiscussionCommentsInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: TeamsListDiscussionCommentsInOrgParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListDiscussionCommentsInOrgData; + } + /** + * @description List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions\`. + * @tags teams + * @name TeamsListDiscussionsInOrg + * @summary List discussions + * @request GET:/orgs/{org}/teams/{team_slug}/discussions + */ + export namespace TeamsListDiscussionsInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: TeamsListDiscussionsInOrgParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListDiscussionsInOrgData; + } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups available in an organization. You can limit your page results using the \`per_page\` parameter. GitHub generates a url-encoded \`page\` token using a cursor value for where the next page begins. For more information on cursor pagination, see "[Offset and Cursor Pagination explained](https://dev.to/jackmarchant/offset-and-cursor-pagination-explained-b89)." The \`per_page\` parameter provides pagination for a list of IdP groups the authenticated user can access in an organization. For example, if the user \`octocat\` wants to see two groups per page in \`octo-org\` via cURL, it would look like this: + * @tags teams + * @name TeamsListIdpGroupsForOrg + * @summary List IdP groups for an organization + * @request GET:/orgs/{org}/team-sync/groups + */ + export namespace TeamsListIdpGroupsForOrg { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListIdpGroupsForOrgData; + } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * @tags teams + * @name TeamsListIdpGroupsInOrg + * @summary List IdP groups for a team + * @request GET:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + export namespace TeamsListIdpGroupsInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListIdpGroupsInOrgData; + } + /** + * @description Team members will include the members of child teams. To list members in a team, the team must be visible to the authenticated user. + * @tags teams + * @name TeamsListMembersInOrg + * @summary List team members + * @request GET:/orgs/{org}/teams/{team_slug}/members + */ + export namespace TeamsListMembersInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ + role?: TeamsListMembersInOrgParams1RoleEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListMembersInOrgData; + } + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/invitations\`. + * @tags teams + * @name TeamsListPendingInvitationsInOrg + * @summary List pending team invitations + * @request GET:/orgs/{org}/teams/{team_slug}/invitations + */ + export namespace TeamsListPendingInvitationsInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListPendingInvitationsInOrgData; + } + /** + * @description Lists the organization projects for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects\`. + * @tags teams + * @name TeamsListProjectsInOrg + * @summary List team projects + * @request GET:/orgs/{org}/teams/{team_slug}/projects + */ + export namespace TeamsListProjectsInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListProjectsInOrgData; + } + /** + * @description Lists a team's repositories visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos\`. + * @tags teams + * @name TeamsListReposInOrg + * @summary List team repositories + * @request GET:/orgs/{org}/teams/{team_slug}/repos + */ + export namespace TeamsListReposInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListReposInOrgData; + } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * @tags teams + * @name TeamsRemoveMembershipForUserInOrg + * @summary Remove team membership for a user + * @request DELETE:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + export namespace TeamsRemoveMembershipForUserInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveMembershipForUserInOrgData; + } + /** + * @description Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. This endpoint removes the project from the team, but does not delete the project. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * @tags teams + * @name TeamsRemoveProjectInOrg + * @summary Remove a project from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + export namespace TeamsRemoveProjectInOrg { + export type RequestParams = { + org: string; + projectId: number; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveProjectInOrgData; + } + /** + * @description If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. This does not delete the repository, it just removes it from the team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * @tags teams + * @name TeamsRemoveRepoInOrg + * @summary Remove a repository from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + export namespace TeamsRemoveRepoInOrg { + export type RequestParams = { + org: string; + owner: string; + repo: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveRepoInOrgData; + } + /** + * @description Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * @tags teams + * @name TeamsUpdateDiscussionCommentInOrg + * @summary Update a discussion comment + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + export namespace TeamsUpdateDiscussionCommentInOrg { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateDiscussionCommentInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateDiscussionCommentInOrgData; + } + /** + * @description Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * @tags teams + * @name TeamsUpdateDiscussionInOrg + * @summary Update a discussion + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + export namespace TeamsUpdateDiscussionInOrg { + export type RequestParams = { + discussionNumber: number; + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateDiscussionInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateDiscussionInOrgData; + } + /** + * @description To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}\`. + * @tags teams + * @name TeamsUpdateInOrg + * @summary Update a team + * @request PATCH:/orgs/{org}/teams/{team_slug} + */ + export namespace TeamsUpdateInOrg { + export type RequestParams = { + org: string; + /** team_slug parameter */ + teamSlug: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateInOrgPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateInOrgData; + } +} + +export namespace Projects { + /** + * @description Adds a collaborator to an organization project and sets their permission level. You must be an organization owner or a project \`admin\` to add a collaborator. + * @tags projects + * @name ProjectsAddCollaborator + * @summary Add project collaborator + * @request PUT:/projects/{project_id}/collaborators/{username} + */ + export namespace ProjectsAddCollaborator { + export type RequestParams = { + projectId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsAddCollaboratorPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsAddCollaboratorData; + } + /** + * @description **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags projects + * @name ProjectsCreateCard + * @summary Create a project card + * @request POST:/projects/columns/{column_id}/cards + */ + export namespace ProjectsCreateCard { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsCreateCardPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsCreateCardData; + } + /** + * No description + * @tags projects + * @name ProjectsCreateColumn + * @summary Create a project column + * @request POST:/projects/{project_id}/columns + */ + export namespace ProjectsCreateColumn { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsCreateColumnPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsCreateColumnData; + } + /** + * @description Deletes a project board. Returns a \`404 Not Found\` status if projects are disabled. + * @tags projects + * @name ProjectsDelete + * @summary Delete a project + * @request DELETE:/projects/{project_id} + */ + export namespace ProjectsDelete { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsDeleteData; + } + /** + * No description + * @tags projects + * @name ProjectsDeleteCard + * @summary Delete a project card + * @request DELETE:/projects/columns/cards/{card_id} + */ + export namespace ProjectsDeleteCard { + export type RequestParams = { + /** card_id parameter */ + cardId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsDeleteCardData; + } + /** + * No description + * @tags projects + * @name ProjectsDeleteColumn + * @summary Delete a project column + * @request DELETE:/projects/columns/{column_id} + */ + export namespace ProjectsDeleteColumn { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsDeleteColumnData; + } + /** + * @description Gets a project by its \`id\`. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsGet + * @summary Get a project + * @request GET:/projects/{project_id} + */ + export namespace ProjectsGet { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsGetData; + } + /** + * No description + * @tags projects + * @name ProjectsGetCard + * @summary Get a project card + * @request GET:/projects/columns/cards/{card_id} + */ + export namespace ProjectsGetCard { + export type RequestParams = { + /** card_id parameter */ + cardId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsGetCardData; + } + /** + * No description + * @tags projects + * @name ProjectsGetColumn + * @summary Get a project column + * @request GET:/projects/columns/{column_id} + */ + export namespace ProjectsGetColumn { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsGetColumnData; + } + /** + * @description Returns the collaborator's permission level for an organization project. Possible values for the \`permission\` key: \`admin\`, \`write\`, \`read\`, \`none\`. You must be an organization owner or a project \`admin\` to review a user's permission level. + * @tags projects + * @name ProjectsGetPermissionForUser + * @summary Get project permission for a user + * @request GET:/projects/{project_id}/collaborators/{username}/permission + */ + export namespace ProjectsGetPermissionForUser { + export type RequestParams = { + projectId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsGetPermissionForUserData; + } + /** + * No description + * @tags projects + * @name ProjectsListCards + * @summary List project cards + * @request GET:/projects/columns/{column_id}/cards + */ + export namespace ProjectsListCards { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = { + /** + * Filters the project cards that are returned by the card's state. Can be one of \`all\`,\`archived\`, or \`not_archived\`. + * @default "not_archived" + */ + archived_state?: ProjectsListCardsParams1ArchivedStateEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListCardsData; + } + /** + * @description Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project \`admin\` to list collaborators. + * @tags projects + * @name ProjectsListCollaborators + * @summary List project collaborators + * @request GET:/projects/{project_id}/collaborators + */ + export namespace ProjectsListCollaborators { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = { + /** + * Filters the collaborators by their affiliation. Can be one of: + * \\* \`outside\`: Outside collaborators of a project that are not a member of the project's organization. + * \\* \`direct\`: Collaborators with permissions to a project, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ + affiliation?: ProjectsListCollaboratorsParams1AffiliationEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListCollaboratorsData; + } + /** + * No description + * @tags projects + * @name ProjectsListColumns + * @summary List project columns + * @request GET:/projects/{project_id}/columns + */ + export namespace ProjectsListColumns { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListColumnsData; + } + /** + * No description + * @tags projects + * @name ProjectsMoveCard + * @summary Move a project card + * @request POST:/projects/columns/cards/{card_id}/moves + */ + export namespace ProjectsMoveCard { + export type RequestParams = { + /** card_id parameter */ + cardId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsMoveCardPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsMoveCardData; + } + /** + * No description + * @tags projects + * @name ProjectsMoveColumn + * @summary Move a project column + * @request POST:/projects/columns/{column_id}/moves + */ + export namespace ProjectsMoveColumn { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsMoveColumnPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsMoveColumnData; + } + /** + * @description Removes a collaborator from an organization project. You must be an organization owner or a project \`admin\` to remove a collaborator. + * @tags projects + * @name ProjectsRemoveCollaborator + * @summary Remove user as a collaborator + * @request DELETE:/projects/{project_id}/collaborators/{username} + */ + export namespace ProjectsRemoveCollaborator { + export type RequestParams = { + projectId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsRemoveCollaboratorData; + } + /** + * @description Updates a project board's information. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsUpdate + * @summary Update a project + * @request PATCH:/projects/{project_id} + */ + export namespace ProjectsUpdate { + export type RequestParams = { + projectId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsUpdateData; + } + /** + * No description + * @tags projects + * @name ProjectsUpdateCard + * @summary Update an existing project card + * @request PATCH:/projects/columns/cards/{card_id} + */ + export namespace ProjectsUpdateCard { + export type RequestParams = { + /** card_id parameter */ + cardId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsUpdateCardPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsUpdateCardData; + } + /** + * No description + * @tags projects + * @name ProjectsUpdateColumn + * @summary Update an existing project column + * @request PATCH:/projects/columns/{column_id} + */ + export namespace ProjectsUpdateColumn { + export type RequestParams = { + /** column_id parameter */ + columnId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsUpdateColumnPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsUpdateColumnData; + } +} + +export namespace RateLimit { + /** + * @description **Note:** Accessing this endpoint does not count against your REST API rate limit. **Note:** The \`rate\` object is deprecated. If you're writing new API client code or updating existing code, you should use the \`core\` object instead of the \`rate\` object. The \`core\` object contains the same information that is present in the \`rate\` object. + * @tags rate-limit + * @name RateLimitGet + * @summary Get rate limit status for the authenticated user + * @request GET:/rate_limit + */ + export namespace RateLimitGet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = RateLimitGetData; + } +} + +export namespace Reactions { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Reactions API. We recommend migrating your existing code to use the new delete reactions endpoints. For more information, see this [blog post](https://developer.github.com/changes/2020-02-26-new-delete-reactions-endpoints/). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), when deleting a [team discussion](https://docs.github.com/rest/reference/teams#discussions) or [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). + * @tags reactions + * @name ReactionsDeleteLegacy + * @summary Delete a reaction (Legacy) + * @request DELETE:/reactions/{reaction_id} + * @deprecated + */ + export namespace ReactionsDeleteLegacy { + export type RequestParams = { + reactionId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteLegacyData; + } +} + +export namespace Repos { + /** + * @description Cancels a workflow run using its \`id\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsCancelWorkflowRun + * @summary Cancel a workflow run + * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/cancel + */ + export namespace ActionsCancelWorkflowRun { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCancelWorkflowRunData; + } + /** + * @description Creates or updates a repository secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` + * @tags actions + * @name ActionsCreateOrUpdateRepoSecret + * @summary Create or update a repository secret + * @request PUT:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + export namespace ActionsCreateOrUpdateRepoSecret { + export type RequestParams = { + owner: string; + repo: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsCreateOrUpdateRepoSecretPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateOrUpdateRepoSecretData; + } + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org/octo-repo-artifacts --token TOKEN \`\`\` + * @tags actions + * @name ActionsCreateRegistrationTokenForRepo + * @summary Create a registration token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/registration-token + */ + export namespace ActionsCreateRegistrationTokenForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateRegistrationTokenForRepoData; + } + /** + * @description Returns a token that you can pass to remove a self-hosted runner from a repository. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from a repository, replace TOKEN with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * @tags actions + * @name ActionsCreateRemoveTokenForRepo + * @summary Create a remove token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/remove-token + */ + export namespace ActionsCreateRemoveTokenForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateRemoveTokenForRepoData; + } + /** + * @description You can use this endpoint to manually trigger a GitHub Actions workflow run. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must configure your GitHub Actions workflow to run when the [\`workflow_dispatch\` webhook](/developers/webhooks-and-events/webhook-events-and-payloads#workflow_dispatch) event occurs. The \`inputs\` are configured in the workflow file. For more information about how to configure the \`workflow_dispatch\` event in the workflow file, see "[Events that trigger workflows](/actions/reference/events-that-trigger-workflows#workflow_dispatch)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)." + * @tags actions + * @name ActionsCreateWorkflowDispatch + * @summary Create a workflow dispatch event + * @request POST:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches + */ + export namespace ActionsCreateWorkflowDispatch { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsCreateWorkflowDispatchPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsCreateWorkflowDispatchData; + } + /** + * @description Deletes an artifact for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsDeleteArtifact + * @summary Delete an artifact + * @request DELETE:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} + */ + export namespace ActionsDeleteArtifact { + export type RequestParams = { + /** artifact_id parameter */ + artifactId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteArtifactData; + } + /** + * @description Deletes a secret in a repository using the secret name. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * @tags actions + * @name ActionsDeleteRepoSecret + * @summary Delete a repository secret + * @request DELETE:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + export namespace ActionsDeleteRepoSecret { + export type RequestParams = { + owner: string; + repo: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteRepoSecretData; + } + /** + * @description Forces the removal of a self-hosted runner from a repository. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromRepo + * @summary Delete a self-hosted runner from a repository + * @request DELETE:/repos/{owner}/{repo}/actions/runners/{runner_id} + */ + export namespace ActionsDeleteSelfHostedRunnerFromRepo { + export type RequestParams = { + owner: string; + repo: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteSelfHostedRunnerFromRepoData; + } + /** + * @description Delete a specific workflow run. Anyone with write access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsDeleteWorkflowRun + * @summary Delete a workflow run + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id} + */ + export namespace ActionsDeleteWorkflowRun { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteWorkflowRunData; + } + /** + * @description Deletes all logs for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsDeleteWorkflowRunLogs + * @summary Delete workflow run logs + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + */ + export namespace ActionsDeleteWorkflowRunLogs { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDeleteWorkflowRunLogsData; + } + /** + * @description Disables a workflow and sets the \`state\` of the workflow to \`disabled_manually\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsDisableWorkflow + * @summary Disable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable + */ + export namespace ActionsDisableWorkflow { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsDisableWorkflowData; + } + /** + * @description Gets a redirect URL to download an archive for a repository. This URL expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. The \`:archive_format\` must be \`zip\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsDownloadArtifact + * @summary Download an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format} + */ + export namespace ActionsDownloadArtifact { + export type RequestParams = { + archiveFormat: string; + /** artifact_id parameter */ + artifactId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Gets a redirect URL to download a plain text file of logs for a workflow job. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsDownloadJobLogsForWorkflowRun + * @summary Download job logs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id}/logs + */ + export namespace ActionsDownloadJobLogsForWorkflowRun { + export type RequestParams = { + /** job_id parameter */ + jobId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Gets a redirect URL to download an archive of log files for a workflow run. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsDownloadWorkflowRunLogs + * @summary Download workflow run logs + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + */ + export namespace ActionsDownloadWorkflowRunLogs { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Enables a workflow and sets the \`state\` of the workflow to \`active\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsEnableWorkflow + * @summary Enable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable + */ + export namespace ActionsEnableWorkflow { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsEnableWorkflowData; + } + /** + * @description Gets the settings for selected actions that are allowed in a repository. To use this endpoint, the repository policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * @tags actions + * @name ActionsGetAllowedActionsRepository + * @summary Get allowed actions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions/selected-actions + */ + export namespace ActionsGetAllowedActionsRepository { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetAllowedActionsRepositoryData; + } + /** + * @description Gets a specific artifact for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetArtifact + * @summary Get an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} + */ + export namespace ActionsGetArtifact { + export type RequestParams = { + /** artifact_id parameter */ + artifactId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetArtifactData; + } + /** + * @description Gets the GitHub Actions permissions policy for a repository, including whether GitHub Actions is enabled and the actions allowed to run in the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * @tags actions + * @name ActionsGetGithubActionsPermissionsRepository + * @summary Get GitHub Actions permissions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions + */ + export namespace ActionsGetGithubActionsPermissionsRepository { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetGithubActionsPermissionsRepositoryData; + } + /** + * @description Gets a specific job in a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetJobForWorkflowRun + * @summary Get a job for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id} + */ + export namespace ActionsGetJobForWorkflowRun { + export type RequestParams = { + /** job_id parameter */ + jobId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetJobForWorkflowRunData; + } + /** + * @description Gets your public key, which you need to encrypt secrets. You need to encrypt a secret before you can create or update secrets. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * @tags actions + * @name ActionsGetRepoPublicKey + * @summary Get a repository public key + * @request GET:/repos/{owner}/{repo}/actions/secrets/public-key + */ + export namespace ActionsGetRepoPublicKey { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetRepoPublicKeyData; + } + /** + * @description Gets a single repository secret without revealing its encrypted value. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * @tags actions + * @name ActionsGetRepoSecret + * @summary Get a repository secret + * @request GET:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + export namespace ActionsGetRepoSecret { + export type RequestParams = { + owner: string; + repo: string; + /** secret_name parameter */ + secretName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetRepoSecretData; + } + /** + * @description Gets a specific self-hosted runner configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * @tags actions + * @name ActionsGetSelfHostedRunnerForRepo + * @summary Get a self-hosted runner for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/{runner_id} + */ + export namespace ActionsGetSelfHostedRunnerForRepo { + export type RequestParams = { + owner: string; + repo: string; + /** Unique identifier of the self-hosted runner. */ + runnerId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetSelfHostedRunnerForRepoData; + } + /** + * @description Gets a specific workflow. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetWorkflow + * @summary Get a workflow + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id} + */ + export namespace ActionsGetWorkflow { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetWorkflowData; + } + /** + * @description Gets a specific workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetWorkflowRun + * @summary Get a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id} + */ + export namespace ActionsGetWorkflowRun { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetWorkflowRunData; + } + /** + * @description Gets the number of billable minutes and total run time for a specific workflow run. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetWorkflowRunUsage + * @summary Get workflow run usage + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/timing + */ + export namespace ActionsGetWorkflowRunUsage { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetWorkflowRunUsageData; + } + /** + * @description Gets the number of billable minutes used by a specific workflow during the current billing cycle. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsGetWorkflowUsage + * @summary Get workflow usage + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing + */ + export namespace ActionsGetWorkflowUsage { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsGetWorkflowUsageData; + } + /** + * @description Lists all artifacts for a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsListArtifactsForRepo + * @summary List artifacts for a repository + * @request GET:/repos/{owner}/{repo}/actions/artifacts + */ + export namespace ActionsListArtifactsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListArtifactsForRepoData; + } + /** + * @description Lists jobs for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). + * @tags actions + * @name ActionsListJobsForWorkflowRun + * @summary List jobs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/jobs + */ + export namespace ActionsListJobsForWorkflowRun { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = { + /** + * Filters jobs by their \`completed_at\` timestamp. Can be one of: + * \\* \`latest\`: Returns jobs from the most recent execution of the workflow run. + * \\* \`all\`: Returns all jobs for a workflow run, including from old executions of the workflow run. + * @default "latest" + */ + filter?: ActionsListJobsForWorkflowRunParams1FilterEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListJobsForWorkflowRunData; + } + /** + * @description Lists all secrets available in a repository without revealing their encrypted values. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * @tags actions + * @name ActionsListRepoSecrets + * @summary List repository secrets + * @request GET:/repos/{owner}/{repo}/actions/secrets + */ + export namespace ActionsListRepoSecrets { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListRepoSecretsData; + } + /** + * @description Lists the workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsListRepoWorkflows + * @summary List repository workflows + * @request GET:/repos/{owner}/{repo}/actions/workflows + */ + export namespace ActionsListRepoWorkflows { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListRepoWorkflowsData; + } + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * @tags actions + * @name ActionsListRunnerApplicationsForRepo + * @summary List runner applications for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/downloads + */ + export namespace ActionsListRunnerApplicationsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListRunnerApplicationsForRepoData; + } + /** + * @description Lists all self-hosted runners configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * @tags actions + * @name ActionsListSelfHostedRunnersForRepo + * @summary List self-hosted runners for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners + */ + export namespace ActionsListSelfHostedRunnersForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListSelfHostedRunnersForRepoData; + } + /** + * @description Lists artifacts for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsListWorkflowRunArtifacts + * @summary List workflow run artifacts + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/artifacts + */ + export namespace ActionsListWorkflowRunArtifacts { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListWorkflowRunArtifactsData; + } + /** + * @description List all workflow runs for a workflow. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. + * @tags actions + * @name ActionsListWorkflowRuns + * @summary List workflow runs + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs + */ + export namespace ActionsListWorkflowRuns { + export type RequestParams = { + owner: string; + repo: string; + /** The ID of the workflow. You can also pass the workflow file name as a string. */ + workflowId: number | string; + }; + export type RequestQuery = { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ + status?: ActionsListWorkflowRunsParams1StatusEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListWorkflowRunsData; + } + /** + * @description Lists all workflow runs for a repository. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * @tags actions + * @name ActionsListWorkflowRunsForRepo + * @summary List workflow runs for a repository + * @request GET:/repos/{owner}/{repo}/actions/runs + */ + export namespace ActionsListWorkflowRunsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ + status?: ActionsListWorkflowRunsForRepoParams1StatusEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsListWorkflowRunsForRepoData; + } + /** + * @description Re-runs your workflow run using its \`id\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * @tags actions + * @name ActionsReRunWorkflow + * @summary Re-run a workflow + * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/rerun + */ + export namespace ActionsReRunWorkflow { + export type RequestParams = { + owner: string; + repo: string; + runId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActionsReRunWorkflowData; + } + /** + * @description Sets the actions that are allowed in a repository. To use this endpoint, the repository permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." If the repository belongs to an organization or enterprise that has \`selected\` actions set at the organization or enterprise levels, then you cannot override any of the allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the repository must belong to an enterprise. If the repository does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * @tags actions + * @name ActionsSetAllowedActionsRepository + * @summary Set allowed actions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions/selected-actions + */ + export namespace ActionsSetAllowedActionsRepository { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = SelectedActions; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetAllowedActionsRepositoryData; + } + /** + * @description Sets the GitHub Actions permissions policy for enabling GitHub Actions and allowed actions in the repository. If the repository belongs to an organization or enterprise that has set restrictive permissions at the organization or enterprise levels, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * @tags actions + * @name ActionsSetGithubActionsPermissionsRepository + * @summary Set GitHub Actions permissions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions + */ + export namespace ActionsSetGithubActionsPermissionsRepository { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActionsSetGithubActionsPermissionsRepositoryPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActionsSetGithubActionsPermissionsRepositoryData; + } + /** + * @description This endpoint should only be used to stop watching a repository. To control whether or not you wish to receive notifications from a repository, [set the repository's subscription manually](https://docs.github.com/rest/reference/activity#set-a-repository-subscription). + * @tags activity + * @name ActivityDeleteRepoSubscription + * @summary Delete a repository subscription + * @request DELETE:/repos/{owner}/{repo}/subscription + */ + export namespace ActivityDeleteRepoSubscription { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityDeleteRepoSubscriptionData; + } + /** + * No description + * @tags activity + * @name ActivityGetRepoSubscription + * @summary Get a repository subscription + * @request GET:/repos/{owner}/{repo}/subscription + */ + export namespace ActivityGetRepoSubscription { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityGetRepoSubscriptionData; + } + /** + * No description + * @tags activity + * @name ActivityListRepoEvents + * @summary List repository events + * @request GET:/repos/{owner}/{repo}/events + */ + export namespace ActivityListRepoEvents { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListRepoEventsData; + } + /** + * @description List all notifications for the current user. + * @tags activity + * @name ActivityListRepoNotificationsForAuthenticatedUser + * @summary List repository notifications for the authenticated user + * @request GET:/repos/{owner}/{repo}/notifications + */ + export namespace ActivityListRepoNotificationsForAuthenticatedUser { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListRepoNotificationsForAuthenticatedUserData; + } + /** + * @description Lists the people that have starred the repository. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * @tags activity + * @name ActivityListStargazersForRepo + * @summary List stargazers + * @request GET:/repos/{owner}/{repo}/stargazers + */ + export namespace ActivityListStargazersForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListStargazersForRepoData; + } + /** + * @description Lists the people watching the specified repository. + * @tags activity + * @name ActivityListWatchersForRepo + * @summary List watchers + * @request GET:/repos/{owner}/{repo}/subscribers + */ + export namespace ActivityListWatchersForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListWatchersForRepoData; + } + /** + * @description Marks all notifications in a repository as "read" removes them from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List repository notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-repository-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. + * @tags activity + * @name ActivityMarkRepoNotificationsAsRead + * @summary Mark repository notifications as read + * @request PUT:/repos/{owner}/{repo}/notifications + */ + export namespace ActivityMarkRepoNotificationsAsRead { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActivityMarkRepoNotificationsAsReadPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActivityMarkRepoNotificationsAsReadData; + } + /** + * @description If you would like to watch a repository, set \`subscribed\` to \`true\`. If you would like to ignore notifications made within a repository, set \`ignored\` to \`true\`. If you would like to stop watching a repository, [delete the repository's subscription](https://docs.github.com/rest/reference/activity#delete-a-repository-subscription) completely. + * @tags activity + * @name ActivitySetRepoSubscription + * @summary Set a repository subscription + * @request PUT:/repos/{owner}/{repo}/subscription + */ + export namespace ActivitySetRepoSubscription { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ActivitySetRepoSubscriptionPayload; + export type RequestHeaders = {}; + export type ResponseBody = ActivitySetRepoSubscriptionData; + } + /** + * @description Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetRepoInstallation + * @summary Get a repository installation for the authenticated app + * @request GET:/repos/{owner}/{repo}/installation + */ + export namespace AppsGetRepoInstallation { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetRepoInstallationData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Creates a new check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to create check runs. In a check suite, GitHub limits the number of check runs with the same name to 1000. Once these check runs exceed 1000, GitHub will start to automatically delete older check runs. + * @tags checks + * @name ChecksCreate + * @summary Create a check run + * @request POST:/repos/{owner}/{repo}/check-runs + */ + export namespace ChecksCreate { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ChecksCreatePayload; + export type RequestHeaders = {}; + export type ResponseBody = ChecksCreateData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. By default, check suites are automatically created when you create a [check run](https://docs.github.com/rest/reference/checks#check-runs). You only need to use this endpoint for manually creating check suites when you've disabled automatic creation using "[Update repository preferences for check suites](https://docs.github.com/rest/reference/checks#update-repository-preferences-for-check-suites)". Your GitHub App must have the \`checks:write\` permission to create check suites. + * @tags checks + * @name ChecksCreateSuite + * @summary Create a check suite + * @request POST:/repos/{owner}/{repo}/check-suites + */ + export namespace ChecksCreateSuite { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ChecksCreateSuitePayload; + export type RequestHeaders = {}; + export type ResponseBody = ChecksCreateSuiteData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Gets a single check run using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * @tags checks + * @name ChecksGet + * @summary Get a check run + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id} + */ + export namespace ChecksGet { + export type RequestParams = { + /** check_run_id parameter */ + checkRunId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksGetData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Gets a single check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. + * @tags checks + * @name ChecksGetSuite + * @summary Get a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id} + */ + export namespace ChecksGetSuite { + export type RequestParams = { + /** check_suite_id parameter */ + checkSuiteId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksGetSuiteData; + } + /** + * @description Lists annotations for a check run using the annotation \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get annotations for a check run. OAuth Apps and authenticated users must have the \`repo\` scope to get annotations for a check run in a private repository. + * @tags checks + * @name ChecksListAnnotations + * @summary List check run annotations + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations + */ + export namespace ChecksListAnnotations { + export type RequestParams = { + /** check_run_id parameter */ + checkRunId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksListAnnotationsData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a commit ref. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * @tags checks + * @name ChecksListForRef + * @summary List check runs for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-runs + */ + export namespace ChecksListForRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = { + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: ChecksListForRefParams1FilterEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: ChecksListForRefParams1StatusEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksListForRefData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * @tags checks + * @name ChecksListForSuite + * @summary List check runs in a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs + */ + export namespace ChecksListForSuite { + export type RequestParams = { + /** check_suite_id parameter */ + checkSuiteId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: ChecksListForSuiteParams1FilterEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: ChecksListForSuiteParams1StatusEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksListForSuiteData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Lists check suites for a commit \`ref\`. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to list check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. + * @tags checks + * @name ChecksListSuitesForRef + * @summary List check suites for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-suites + */ + export namespace ChecksListSuitesForRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = { + /** + * Filters check suites by GitHub App \`id\`. + * @example 1 + */ + app_id?: number; + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksListSuitesForRefData; + } + /** + * @description Triggers GitHub to rerequest an existing check suite, without pushing new code to a repository. This endpoint will trigger the [\`check_suite\` webhook](https://docs.github.com/webhooks/event-payloads/#check_suite) event with the action \`rerequested\`. When a check suite is \`rerequested\`, its \`status\` is reset to \`queued\` and the \`conclusion\` is cleared. To rerequest a check suite, your GitHub App must have the \`checks:read\` permission on a private repository or pull access to a public repository. + * @tags checks + * @name ChecksRerequestSuite + * @summary Rerequest a check suite + * @request POST:/repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest + */ + export namespace ChecksRerequestSuite { + export type RequestParams = { + /** check_suite_id parameter */ + checkSuiteId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ChecksRerequestSuiteData; + } + /** + * @description Changes the default automatic flow when creating check suites. By default, a check suite is automatically created each time code is pushed to a repository. When you disable the automatic creation of check suites, you can manually [Create a check suite](https://docs.github.com/rest/reference/checks#create-a-check-suite). You must have admin permissions in the repository to set preferences for check suites. + * @tags checks + * @name ChecksSetSuitesPreferences + * @summary Update repository preferences for check suites + * @request PATCH:/repos/{owner}/{repo}/check-suites/preferences + */ + export namespace ChecksSetSuitesPreferences { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ChecksSetSuitesPreferencesPayload; + export type RequestHeaders = {}; + export type ResponseBody = ChecksSetSuitesPreferencesData; + } + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Updates a check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to edit check runs. + * @tags checks + * @name ChecksUpdate + * @summary Update a check run + * @request PATCH:/repos/{owner}/{repo}/check-runs/{check_run_id} + */ + export namespace ChecksUpdate { + export type RequestParams = { + /** check_run_id parameter */ + checkRunId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ChecksUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = ChecksUpdateData; + } + /** + * @description Gets a single code scanning alert. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. The security \`alert_number\` is found at the end of the security alert's URL. For example, the security alert ID for \`https://github.com/Octo-org/octo-repo/security/code-scanning/88\` is \`88\`. + * @tags code-scanning + * @name CodeScanningGetAlert + * @summary Get a code scanning alert + * @request GET:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} + */ + export namespace CodeScanningGetAlert { + export type RequestParams = { + alertNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodeScanningGetAlertData; + } + /** + * @description Lists all open code scanning alerts for the default branch (usually \`main\` or \`master\`). You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. + * @tags code-scanning + * @name CodeScanningListAlertsForRepo + * @summary List code scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/alerts + */ + export namespace CodeScanningListAlertsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAlertRef; + /** Set to \`open\`, \`fixed\`, or \`dismissed\` to list code scanning alerts in a specific state. */ + state?: CodeScanningAlertState; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodeScanningListAlertsForRepoData; + } + /** + * @description List the details of recent code scanning analyses for a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. + * @tags code-scanning + * @name CodeScanningListRecentAnalyses + * @summary List recent code scanning analyses for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/analyses + */ + export namespace CodeScanningListRecentAnalyses { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAnalysisRef; + /** Set a single code scanning tool name to filter alerts by tool. */ + tool_name?: CodeScanningAnalysisToolName; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodeScanningListRecentAnalysesData; + } + /** + * @description Updates the status of a single code scanning alert. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. + * @tags code-scanning + * @name CodeScanningUpdateAlert + * @summary Update a code scanning alert + * @request PATCH:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} + */ + export namespace CodeScanningUpdateAlert { + export type RequestParams = { + /** The security alert number, found at the end of the security alert's URL. */ + alertNumber: AlertNumber; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = CodeScanningUpdateAlertPayload; + export type RequestHeaders = {}; + export type ResponseBody = CodeScanningUpdateAlertData; + } + /** + * @description Upload a SARIF file containing the results of a code scanning analysis to make the results available in a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. + * @tags code-scanning + * @name CodeScanningUploadSarif + * @summary Upload a SARIF file + * @request POST:/repos/{owner}/{repo}/code-scanning/sarifs + */ + export namespace CodeScanningUploadSarif { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = CodeScanningUploadSarifPayload; + export type RequestHeaders = {}; + export type ResponseBody = CodeScanningUploadSarifData; + } + /** + * @description Returns the contents of the repository's code of conduct file, if one is detected. A code of conduct is detected if there is a file named \`CODE_OF_CONDUCT\` in the root directory of the repository. GitHub detects which code of conduct it is using fuzzy matching. + * @tags codes-of-conduct + * @name CodesOfConductGetForRepo + * @summary Get the code of conduct for a repository + * @request GET:/repos/{owner}/{repo}/community/code_of_conduct + */ + export namespace CodesOfConductGetForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CodesOfConductGetForRepoData; + } + /** + * No description + * @tags git + * @name GitCreateBlob + * @summary Create a blob + * @request POST:/repos/{owner}/{repo}/git/blobs + */ + export namespace GitCreateBlob { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitCreateBlobPayload; + export type RequestHeaders = {}; + export type ResponseBody = GitCreateBlobData; + } + /** + * @description Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags git + * @name GitCreateCommit + * @summary Create a commit + * @request POST:/repos/{owner}/{repo}/git/commits + */ + export namespace GitCreateCommit { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitCreateCommitPayload; + export type RequestHeaders = {}; + export type ResponseBody = GitCreateCommitData; + } + /** + * @description Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches. + * @tags git + * @name GitCreateRef + * @summary Create a reference + * @request POST:/repos/{owner}/{repo}/git/refs + */ + export namespace GitCreateRef { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitCreateRefPayload; + export type RequestHeaders = {}; + export type ResponseBody = GitCreateRefData; + } + /** + * @description Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then [create](https://docs.github.com/rest/reference/git#create-a-reference) the \`refs/tags/[tag]\` reference. If you want to create a lightweight tag, you only have to [create](https://docs.github.com/rest/reference/git#create-a-reference) the tag reference - this call would be unnecessary. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags git + * @name GitCreateTag + * @summary Create a tag object + * @request POST:/repos/{owner}/{repo}/git/tags + */ + export namespace GitCreateTag { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitCreateTagPayload; + export type RequestHeaders = {}; + export type ResponseBody = GitCreateTagData; + } + /** + * @description The tree creation API accepts nested entries. If you specify both a tree and a nested path modifying that tree, this endpoint will overwrite the contents of the tree with the new path contents, and create a new tree structure. If you use this endpoint to add, delete, or modify the file contents in a tree, you will need to commit the tree and then update a branch to point to the commit. For more information see "[Create a commit](https://docs.github.com/rest/reference/git#create-a-commit)" and "[Update a reference](https://docs.github.com/rest/reference/git#update-a-reference)." + * @tags git + * @name GitCreateTree + * @summary Create a tree + * @request POST:/repos/{owner}/{repo}/git/trees + */ + export namespace GitCreateTree { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitCreateTreePayload; + export type RequestHeaders = {}; + export type ResponseBody = GitCreateTreeData; + } + /** + * No description + * @tags git + * @name GitDeleteRef + * @summary Delete a reference + * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} + */ + export namespace GitDeleteRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitDeleteRefData; + } + /** + * @description The \`content\` in the response will always be Base64 encoded. _Note_: This API supports blobs up to 100 megabytes in size. + * @tags git + * @name GitGetBlob + * @summary Get a blob + * @request GET:/repos/{owner}/{repo}/git/blobs/{file_sha} + */ + export namespace GitGetBlob { + export type RequestParams = { + fileSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitGetBlobData; + } + /** + * @description Gets a Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags git + * @name GitGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/git/commits/{commit_sha} + */ + export namespace GitGetCommit { + export type RequestParams = { + /** commit_sha parameter */ + commitSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitGetCommitData; + } + /** + * @description Returns a single reference from your Git database. The \`:ref\` in the URL must be formatted as \`heads/\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't match an existing ref, a \`404\` is returned. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". + * @tags git + * @name GitGetRef + * @summary Get a reference + * @request GET:/repos/{owner}/{repo}/git/ref/{ref} + */ + export namespace GitGetRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitGetRefData; + } + /** + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags git + * @name GitGetTag + * @summary Get a tag + * @request GET:/repos/{owner}/{repo}/git/tags/{tag_sha} + */ + export namespace GitGetTag { + export type RequestParams = { + owner: string; + repo: string; + tagSha: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitGetTagData; + } + /** + * @description Returns a single tree using the SHA1 value for that tree. If \`truncated\` is \`true\` in the response then the number of items in the \`tree\` array exceeded our maximum limit. If you need to fetch more items, use the non-recursive method of fetching trees, and fetch one sub-tree at a time. + * @tags git + * @name GitGetTree + * @summary Get a tree + * @request GET:/repos/{owner}/{repo}/git/trees/{tree_sha} + */ + export namespace GitGetTree { + export type RequestParams = { + owner: string; + repo: string; + treeSha: string; + }; + export type RequestQuery = { + /** Setting this parameter to any value returns the objects or subtrees referenced by the tree specified in \`:tree_sha\`. For example, setting \`recursive\` to any of the following will enable returning objects or subtrees: \`0\`, \`1\`, \`"true"\`, and \`"false"\`. Omit this parameter to prevent recursively returning objects or subtrees. */ + recursive?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitGetTreeData; + } + /** + * @description Returns an array of references from your Git database that match the supplied name. The \`:ref\` in the URL must be formatted as \`heads/\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't exist in the repository, but existing refs start with \`:ref\`, they will be returned as an array. When you use this endpoint without providing a \`:ref\`, it will return an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just \`heads\` and \`tags\`. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". If you request matching references for a branch named \`feature\` but the branch \`feature\` doesn't exist, the response can still include other matching head refs that start with the word \`feature\`, such as \`featureA\` and \`featureB\`. + * @tags git + * @name GitListMatchingRefs + * @summary List matching references + * @request GET:/repos/{owner}/{repo}/git/matching-refs/{ref} + */ + export namespace GitListMatchingRefs { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GitListMatchingRefsData; + } + /** + * No description + * @tags git + * @name GitUpdateRef + * @summary Update a reference + * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} + */ + export namespace GitUpdateRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = GitUpdateRefPayload; + export type RequestHeaders = {}; + export type ResponseBody = GitUpdateRefData; + } + /** + * @description Shows which type of GitHub user can interact with this repository and when the restriction expires. If there are no restrictions, you will see an empty response. + * @tags interactions + * @name InteractionsGetRestrictionsForRepo + * @summary Get interaction restrictions for a repository + * @request GET:/repos/{owner}/{repo}/interaction-limits + */ + export namespace InteractionsGetRestrictionsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsGetRestrictionsForRepoData; + } + /** + * @description Removes all interaction restrictions from the given repository. You must have owner or admin access to remove restrictions. If the interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. + * @tags interactions + * @name InteractionsRemoveRestrictionsForRepo + * @summary Remove interaction restrictions for a repository + * @request DELETE:/repos/{owner}/{repo}/interaction-limits + */ + export namespace InteractionsRemoveRestrictionsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsRemoveRestrictionsForRepoData; + } + /** + * @description Temporarily restricts interactions to a certain type of GitHub user within the given repository. You must have owner or admin access to set these restrictions. If an interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. + * @tags interactions + * @name InteractionsSetRestrictionsForRepo + * @summary Set interaction restrictions for a repository + * @request PUT:/repos/{owner}/{repo}/interaction-limits + */ + export namespace InteractionsSetRestrictionsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = InteractionLimit; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsSetRestrictionsForRepoData; + } + /** + * @description Adds up to 10 assignees to an issue. Users already assigned to an issue are not replaced. + * @tags issues + * @name IssuesAddAssignees + * @summary Add assignees to an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/assignees + */ + export namespace IssuesAddAssignees { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesAddAssigneesPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesAddAssigneesData; + } + /** + * No description + * @tags issues + * @name IssuesAddLabels + * @summary Add labels to an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + export namespace IssuesAddLabels { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesAddLabelsPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesAddLabelsData; + } + /** + * @description Checks if a user has permission to be assigned to an issue in this repository. If the \`assignee\` can be assigned to issues in the repository, a \`204\` header with no content is returned. Otherwise a \`404\` status code is returned. + * @tags issues + * @name IssuesCheckUserCanBeAssigned + * @summary Check if a user can be assigned + * @request GET:/repos/{owner}/{repo}/assignees/{assignee} + */ + export namespace IssuesCheckUserCanBeAssigned { + export type RequestParams = { + assignee: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesCheckUserCanBeAssignedData; + } + /** + * @description Any user with pull access to a repository can create an issue. If [issues are disabled in the repository](https://help.github.com/articles/disabling-issues/), the API returns a \`410 Gone\` status. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * @tags issues + * @name IssuesCreate + * @summary Create an issue + * @request POST:/repos/{owner}/{repo}/issues + */ + export namespace IssuesCreate { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesCreatePayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesCreateData; + } + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * @tags issues + * @name IssuesCreateComment + * @summary Create an issue comment + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/comments + */ + export namespace IssuesCreateComment { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesCreateCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesCreateCommentData; + } + /** + * No description + * @tags issues + * @name IssuesCreateLabel + * @summary Create a label + * @request POST:/repos/{owner}/{repo}/labels + */ + export namespace IssuesCreateLabel { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesCreateLabelPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesCreateLabelData; + } + /** + * No description + * @tags issues + * @name IssuesCreateMilestone + * @summary Create a milestone + * @request POST:/repos/{owner}/{repo}/milestones + */ + export namespace IssuesCreateMilestone { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesCreateMilestonePayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesCreateMilestoneData; + } + /** + * No description + * @tags issues + * @name IssuesDeleteComment + * @summary Delete an issue comment + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + export namespace IssuesDeleteComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesDeleteCommentData; + } + /** + * No description + * @tags issues + * @name IssuesDeleteLabel + * @summary Delete a label + * @request DELETE:/repos/{owner}/{repo}/labels/{name} + */ + export namespace IssuesDeleteLabel { + export type RequestParams = { + name: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesDeleteLabelData; + } + /** + * No description + * @tags issues + * @name IssuesDeleteMilestone + * @summary Delete a milestone + * @request DELETE:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + export namespace IssuesDeleteMilestone { + export type RequestParams = { + /** milestone_number parameter */ + milestoneNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesDeleteMilestoneData; + } + /** + * @description The API returns a [\`301 Moved Permanently\` status](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-redirects-redirects) if the issue was [transferred](https://help.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API returns a \`404 Not Found\` status. If the issue was deleted from a repository where the authenticated user has read access, the API returns a \`410 Gone\` status. To receive webhook events for transferred and deleted issues, subscribe to the [\`issues\`](https://docs.github.com/webhooks/event-payloads/#issues) webhook. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags issues + * @name IssuesGet + * @summary Get an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number} + */ + export namespace IssuesGet { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesGetData; + } + /** + * No description + * @tags issues + * @name IssuesGetComment + * @summary Get an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + export namespace IssuesGetComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesGetCommentData; + } + /** + * No description + * @tags issues + * @name IssuesGetEvent + * @summary Get an issue event + * @request GET:/repos/{owner}/{repo}/issues/events/{event_id} + */ + export namespace IssuesGetEvent { + export type RequestParams = { + eventId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesGetEventData; + } + /** + * No description + * @tags issues + * @name IssuesGetLabel + * @summary Get a label + * @request GET:/repos/{owner}/{repo}/labels/{name} + */ + export namespace IssuesGetLabel { + export type RequestParams = { + name: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesGetLabelData; + } + /** + * No description + * @tags issues + * @name IssuesGetMilestone + * @summary Get a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + export namespace IssuesGetMilestone { + export type RequestParams = { + /** milestone_number parameter */ + milestoneNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesGetMilestoneData; + } + /** + * @description Lists the [available assignees](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/) for issues in a repository. + * @tags issues + * @name IssuesListAssignees + * @summary List assignees + * @request GET:/repos/{owner}/{repo}/assignees + */ + export namespace IssuesListAssignees { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListAssigneesData; + } + /** + * @description Issue Comments are ordered by ascending ID. + * @tags issues + * @name IssuesListComments + * @summary List issue comments + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/comments + */ + export namespace IssuesListComments { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListCommentsData; + } + /** + * @description By default, Issue Comments are ordered by ascending ID. + * @tags issues + * @name IssuesListCommentsForRepo + * @summary List issue comments for a repository + * @request GET:/repos/{owner}/{repo}/issues/comments + */ + export namespace IssuesListCommentsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Either \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: IssuesListCommentsForRepoParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: IssuesListCommentsForRepoParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListCommentsForRepoData; + } + /** + * No description + * @tags issues + * @name IssuesListEvents + * @summary List issue events + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/events + */ + export namespace IssuesListEvents { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListEventsData; + } + /** + * No description + * @tags issues + * @name IssuesListEventsForRepo + * @summary List issue events for a repository + * @request GET:/repos/{owner}/{repo}/issues/events + */ + export namespace IssuesListEventsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListEventsForRepoData; + } + /** + * No description + * @tags issues + * @name IssuesListEventsForTimeline + * @summary List timeline events for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/timeline + */ + export namespace IssuesListEventsForTimeline { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListEventsForTimelineData; + } + /** + * @description List issues in a repository. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags issues + * @name IssuesListForRepo + * @summary List repository issues + * @request GET:/repos/{owner}/{repo}/issues + */ + export namespace IssuesListForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Can be the name of a user. Pass in \`none\` for issues with no assigned user, and \`*\` for issues assigned to any user. */ + assignee?: string; + /** The user that created the issue. */ + creator?: string; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: IssuesListForRepoParams1DirectionEnum; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** A user that's mentioned in the issue. */ + mentioned?: string; + /** If an \`integer\` is passed, it should refer to a milestone by its \`number\` field. If the string \`*\` is passed, issues with any milestone are accepted. If the string \`none\` is passed, issues without milestones are returned. */ + milestone?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: IssuesListForRepoParams1SortEnum; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: IssuesListForRepoParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListForRepoData; + } + /** + * No description + * @tags issues + * @name IssuesListLabelsForMilestone + * @summary List labels for issues in a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number}/labels + */ + export namespace IssuesListLabelsForMilestone { + export type RequestParams = { + /** milestone_number parameter */ + milestoneNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListLabelsForMilestoneData; + } + /** + * No description + * @tags issues + * @name IssuesListLabelsForRepo + * @summary List labels for a repository + * @request GET:/repos/{owner}/{repo}/labels + */ + export namespace IssuesListLabelsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListLabelsForRepoData; + } + /** + * No description + * @tags issues + * @name IssuesListLabelsOnIssue + * @summary List labels for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + export namespace IssuesListLabelsOnIssue { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListLabelsOnIssueData; + } + /** + * No description + * @tags issues + * @name IssuesListMilestones + * @summary List milestones + * @request GET:/repos/{owner}/{repo}/milestones + */ + export namespace IssuesListMilestones { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * The direction of the sort. Either \`asc\` or \`desc\`. + * @default "asc" + */ + direction?: IssuesListMilestonesParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * What to sort results by. Either \`due_on\` or \`completeness\`. + * @default "due_on" + */ + sort?: IssuesListMilestonesParams1SortEnum; + /** + * The state of the milestone. Either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: IssuesListMilestonesParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListMilestonesData; + } + /** + * @description Users with push access can lock an issue or pull request's conversation. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags issues + * @name IssuesLock + * @summary Lock an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/lock + */ + export namespace IssuesLock { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesLockPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesLockData; + } + /** + * No description + * @tags issues + * @name IssuesRemoveAllLabels + * @summary Remove all labels from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + export namespace IssuesRemoveAllLabels { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesRemoveAllLabelsData; + } + /** + * @description Removes one or more assignees from an issue. + * @tags issues + * @name IssuesRemoveAssignees + * @summary Remove assignees from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/assignees + */ + export namespace IssuesRemoveAssignees { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesRemoveAssigneesPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesRemoveAssigneesData; + } + /** + * @description Removes the specified label from the issue, and returns the remaining labels on the issue. This endpoint returns a \`404 Not Found\` status if the label does not exist. + * @tags issues + * @name IssuesRemoveLabel + * @summary Remove a label from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels/{name} + */ + export namespace IssuesRemoveLabel { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + name: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesRemoveLabelData; + } + /** + * @description Removes any previous labels and sets the new labels for an issue. + * @tags issues + * @name IssuesSetLabels + * @summary Set labels for an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + export namespace IssuesSetLabels { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesSetLabelsPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesSetLabelsData; + } + /** + * @description Users with push access can unlock an issue's conversation. + * @tags issues + * @name IssuesUnlock + * @summary Unlock an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/lock + */ + export namespace IssuesUnlock { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesUnlockData; + } + /** + * @description Issue owners and users with push access can edit an issue. + * @tags issues + * @name IssuesUpdate + * @summary Update an issue + * @request PATCH:/repos/{owner}/{repo}/issues/{issue_number} + */ + export namespace IssuesUpdate { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesUpdateData; + } + /** + * No description + * @tags issues + * @name IssuesUpdateComment + * @summary Update an issue comment + * @request PATCH:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + export namespace IssuesUpdateComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesUpdateCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesUpdateCommentData; + } + /** + * No description + * @tags issues + * @name IssuesUpdateLabel + * @summary Update a label + * @request PATCH:/repos/{owner}/{repo}/labels/{name} + */ + export namespace IssuesUpdateLabel { + export type RequestParams = { + name: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesUpdateLabelPayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesUpdateLabelData; + } + /** + * No description + * @tags issues + * @name IssuesUpdateMilestone + * @summary Update a milestone + * @request PATCH:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + export namespace IssuesUpdateMilestone { + export type RequestParams = { + /** milestone_number parameter */ + milestoneNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = IssuesUpdateMilestonePayload; + export type RequestHeaders = {}; + export type ResponseBody = IssuesUpdateMilestoneData; + } + /** + * @description This method returns the contents of the repository's license file, if one is detected. Similar to [Get repository content](https://docs.github.com/rest/reference/repos#get-repository-content), this method also supports [custom media types](https://docs.github.com/rest/overview/media-types) for retrieving the raw license content or rendered license HTML. + * @tags licenses + * @name LicensesGetForRepo + * @summary Get the license for a repository + * @request GET:/repos/{owner}/{repo}/license + */ + export namespace LicensesGetForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LicensesGetForRepoData; + } + /** + * @description Stop an import for a repository. + * @tags migrations + * @name MigrationsCancelImport + * @summary Cancel an import + * @request DELETE:/repos/{owner}/{repo}/import + */ + export namespace MigrationsCancelImport { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsCancelImportData; + } + /** + * @description Each type of source control system represents authors in a different way. For example, a Git commit author has a display name and an email address, but a Subversion commit author just has a username. The GitHub Importer will make the author information valid, but the author might not be correct. For example, it will change the bare Subversion username \`hubot\` into something like \`hubot \`. This endpoint and the [Map a commit author](https://docs.github.com/rest/reference/migrations#map-a-commit-author) endpoint allow you to provide correct Git author information. + * @tags migrations + * @name MigrationsGetCommitAuthors + * @summary Get commit authors + * @request GET:/repos/{owner}/{repo}/import/authors + */ + export namespace MigrationsGetCommitAuthors { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsGetCommitAuthorsData; + } + /** + * @description View the progress of an import. **Import status** This section includes details about the possible values of the \`status\` field of the Import Progress response. An import that does not have errors will progress through these steps: * \`detecting\` - the "detection" step of the import is in progress because the request did not include a \`vcs\` parameter. The import is identifying the type of source control present at the URL. * \`importing\` - the "raw" step of the import is in progress. This is where commit data is fetched from the original repository. The import progress response will include \`commit_count\` (the total number of raw commits that will be imported) and \`percent\` (0 - 100, the current progress through the import). * \`mapping\` - the "rewrite" step of the import is in progress. This is where SVN branches are converted to Git branches, and where author updates are applied. The import progress response does not include progress information. * \`pushing\` - the "push" step of the import is in progress. This is where the importer updates the repository on GitHub. The import progress response will include \`push_percent\`, which is the percent value reported by \`git push\` when it is "Writing objects". * \`complete\` - the import is complete, and the repository is ready on GitHub. If there are problems, you will see one of these in the \`status\` field: * \`auth_failed\` - the import requires authentication in order to connect to the original repository. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`error\` - the import encountered an error. The import progress response will include the \`failed_step\` and an error message. Contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com) for more information. * \`detection_needs_auth\` - the importer requires authentication for the originating repository to continue detection. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`detection_found_nothing\` - the importer didn't recognize any source control at the URL. To resolve, [Cancel the import](https://docs.github.com/rest/reference/migrations#cancel-an-import) and [retry](https://docs.github.com/rest/reference/migrations#start-an-import) with the correct URL. * \`detection_found_multiple\` - the importer found several projects or repositories at the provided URL. When this is the case, the Import Progress response will also include a \`project_choices\` field with the possible project choices as values. To update project choice, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. **The project_choices field** When multiple projects are found at the provided URL, the response hash will include a \`project_choices\` field, the value of which is an array of hashes each representing a project choice. The exact key/value pairs of the project hashes will differ depending on the version control type. **Git LFS related fields** This section includes details about Git LFS related fields that may be present in the Import Progress response. * \`use_lfs\` - describes whether the import has been opted in or out of using Git LFS. The value can be \`opt_in\`, \`opt_out\`, or \`undecided\` if no action has been taken. * \`has_large_files\` - the boolean value describing whether files larger than 100MB were found during the \`importing\` step. * \`large_files_size\` - the total size in gigabytes of files larger than 100MB found in the originating repository. * \`large_files_count\` - the total number of files larger than 100MB found in the originating repository. To see a list of these files, make a "Get Large Files" request. + * @tags migrations + * @name MigrationsGetImportStatus + * @summary Get an import status + * @request GET:/repos/{owner}/{repo}/import + */ + export namespace MigrationsGetImportStatus { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsGetImportStatusData; + } + /** + * @description List files larger than 100MB found during the import + * @tags migrations + * @name MigrationsGetLargeFiles + * @summary Get large files + * @request GET:/repos/{owner}/{repo}/import/large_files + */ + export namespace MigrationsGetLargeFiles { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsGetLargeFilesData; + } + /** + * @description Update an author's identity for the import. Your application can continue updating authors any time before you push new commits to the repository. + * @tags migrations + * @name MigrationsMapCommitAuthor + * @summary Map a commit author + * @request PATCH:/repos/{owner}/{repo}/import/authors/{author_id} + */ + export namespace MigrationsMapCommitAuthor { + export type RequestParams = { + authorId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = MigrationsMapCommitAuthorPayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsMapCommitAuthorData; + } + /** + * @description You can import repositories from Subversion, Mercurial, and TFS that include files larger than 100MB. This ability is powered by [Git LFS](https://git-lfs.github.com). You can learn more about our LFS feature and working with large files [on our help site](https://help.github.com/articles/versioning-large-files/). + * @tags migrations + * @name MigrationsSetLfsPreference + * @summary Update Git LFS preference + * @request PATCH:/repos/{owner}/{repo}/import/lfs + */ + export namespace MigrationsSetLfsPreference { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = MigrationsSetLfsPreferencePayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsSetLfsPreferenceData; + } + /** + * @description Start a source import to a GitHub repository using GitHub Importer. + * @tags migrations + * @name MigrationsStartImport + * @summary Start an import + * @request PUT:/repos/{owner}/{repo}/import + */ + export namespace MigrationsStartImport { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = MigrationsStartImportPayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsStartImportData; + } + /** + * @description An import can be updated with credentials or a project choice by passing in the appropriate parameters in this API request. If no parameters are provided, the import will be restarted. + * @tags migrations + * @name MigrationsUpdateImport + * @summary Update an import + * @request PATCH:/repos/{owner}/{repo}/import + */ + export namespace MigrationsUpdateImport { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = MigrationsUpdateImportPayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsUpdateImportData; + } + /** + * @description Creates a repository project board. Returns a \`404 Not Found\` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsCreateForRepo + * @summary Create a repository project + * @request POST:/repos/{owner}/{repo}/projects + */ + export namespace ProjectsCreateForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectsCreateForRepoPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsCreateForRepoData; + } + /** + * @description Lists the projects in a repository. Returns a \`404 Not Found\` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * @tags projects + * @name ProjectsListForRepo + * @summary List repository projects + * @request GET:/repos/{owner}/{repo}/projects + */ + export namespace ProjectsListForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: ProjectsListForRepoParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListForRepoData; + } + /** + * No description + * @tags pulls + * @name PullsCheckIfMerged + * @summary Check if a pull request has been merged + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/merge + */ + export namespace PullsCheckIfMerged { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsCheckIfMergedData; + } + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. You can create a new pull request. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags pulls + * @name PullsCreate + * @summary Create a pull request + * @request POST:/repos/{owner}/{repo}/pulls + */ + export namespace PullsCreate { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsCreatePayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsCreateData; + } + /** + * @description Creates a reply to a review comment for a pull request. For the \`comment_id\`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags pulls + * @name PullsCreateReplyForReviewComment + * @summary Create a reply for a review comment + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies + */ + export namespace PullsCreateReplyForReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsCreateReplyForReviewCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsCreateReplyForReviewCommentData; + } + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. Pull request reviews created in the \`PENDING\` state do not include the \`submitted_at\` property in the response. **Note:** To comment on a specific line in a file, you need to first determine the _position_ of that line in the diff. The GitHub REST API v3 offers the \`application/vnd.github.v3.diff\` [media type](https://docs.github.com/rest/overview/media-types#commits-commit-comparison-and-pull-requests). To see a pull request diff, add this media type to the \`Accept\` header of a call to the [single pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) endpoint. The \`position\` value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. + * @tags pulls + * @name PullsCreateReview + * @summary Create a review for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews + */ + export namespace PullsCreateReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsCreateReviewPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsCreateReviewData; + } + /** + * @description Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Create an issue comment](https://docs.github.com/rest/reference/issues#create-an-issue-comment)." We recommend creating a review comment using \`line\`, \`side\`, and optionally \`start_line\` and \`start_side\` if your comment applies to more than one line in the pull request diff. You can still create a review comment using the \`position\` parameter. When you use \`position\`, the \`line\`, \`side\`, \`start_line\`, and \`start_side\` parameters are not required. For more information, see the [\`comfort-fade\` preview notice](https://docs.github.com/rest/reference/pulls#create-a-review-comment-for-a-pull-request-preview-notices). **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags pulls + * @name PullsCreateReviewComment + * @summary Create a review comment for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments + */ + export namespace PullsCreateReviewComment { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsCreateReviewCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsCreateReviewCommentData; + } + /** + * No description + * @tags pulls + * @name PullsDeletePendingReview + * @summary Delete a pending review for a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + export namespace PullsDeletePendingReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsDeletePendingReviewData; + } + /** + * @description Deletes a review comment. + * @tags pulls + * @name PullsDeleteReviewComment + * @summary Delete a review comment for a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + export namespace PullsDeleteReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsDeleteReviewCommentData; + } + /** + * @description **Note:** To dismiss a pull request review on a [protected branch](https://docs.github.com/rest/reference/repos#branches), you must be a repository administrator or be included in the list of people or teams who can dismiss pull request reviews. + * @tags pulls + * @name PullsDismissReview + * @summary Dismiss a review for a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals + */ + export namespace PullsDismissReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = {}; + export type RequestBody = PullsDismissReviewPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsDismissReviewData; + } + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists details of a pull request by providing its number. When you get, [create](https://docs.github.com/rest/reference/pulls/#create-a-pull-request), or [edit](https://docs.github.com/rest/reference/pulls#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the \`mergeable\` key. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". The value of the \`mergeable\` attribute can be \`true\`, \`false\`, or \`null\`. If the value is \`null\`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-\`null\` value for the \`mergeable\` attribute in the response. If \`mergeable\` is \`true\`, then \`merge_commit_sha\` will be the SHA of the _test_ merge commit. The value of the \`merge_commit_sha\` attribute changes depending on the state of the pull request. Before merging a pull request, the \`merge_commit_sha\` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the \`merge_commit_sha\` attribute changes depending on how you merged the pull request: * If merged as a [merge commit](https://help.github.com/articles/about-merge-methods-on-github/), \`merge_commit_sha\` represents the SHA of the merge commit. * If merged via a [squash](https://help.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), \`merge_commit_sha\` represents the SHA of the squashed commit on the base branch. * If [rebased](https://help.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), \`merge_commit_sha\` represents the commit that the base branch was updated to. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. + * @tags pulls + * @name PullsGet + * @summary Get a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number} + */ + export namespace PullsGet { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsGetData; + } + /** + * No description + * @tags pulls + * @name PullsGetReview + * @summary Get a review for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + export namespace PullsGetReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsGetReviewData; + } + /** + * @description Provides details for a review comment. + * @tags pulls + * @name PullsGetReviewComment + * @summary Get a review comment for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + export namespace PullsGetReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsGetReviewCommentData; + } + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags pulls + * @name PullsList + * @summary List pull requests + * @request GET:/repos/{owner}/{repo}/pulls + */ + export namespace PullsList { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Filter pulls by base branch name. Example: \`gh-pages\`. */ + base?: string; + /** The direction of the sort. Can be either \`asc\` or \`desc\`. Default: \`desc\` when sort is \`created\` or sort is not specified, otherwise \`asc\`. */ + direction?: PullsListParams1DirectionEnum; + /** Filter pulls by head user or head organization and branch name in the format of \`user:ref-name\` or \`organization:ref-name\`. For example: \`github:new-script-format\` or \`octocat:test-branch\`. */ + head?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`popularity\` (comment count) or \`long-running\` (age, filtering by pulls updated in the last month). + * @default "created" + */ + sort?: PullsListParams1SortEnum; + /** + * Either \`open\`, \`closed\`, or \`all\` to filter by state. + * @default "open" + */ + state?: PullsListParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListData; + } + /** + * @description List comments for a specific pull request review. + * @tags pulls + * @name PullsListCommentsForReview + * @summary List comments for a pull request review + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments + */ + export namespace PullsListCommentsForReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListCommentsForReviewData; + } + /** + * @description Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) endpoint. + * @tags pulls + * @name PullsListCommits + * @summary List commits on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/commits + */ + export namespace PullsListCommits { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListCommitsData; + } + /** + * @description **Note:** Responses include a maximum of 3000 files. The paginated response returns 30 files per page by default. + * @tags pulls + * @name PullsListFiles + * @summary List pull requests files + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/files + */ + export namespace PullsListFiles { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListFilesData; + } + /** + * No description + * @tags pulls + * @name PullsListRequestedReviewers + * @summary List requested reviewers for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + export namespace PullsListRequestedReviewers { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListRequestedReviewersData; + } + /** + * @description Lists all review comments for a pull request. By default, review comments are in ascending order by ID. + * @tags pulls + * @name PullsListReviewComments + * @summary List review comments on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/comments + */ + export namespace PullsListReviewComments { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: PullsListReviewCommentsParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: PullsListReviewCommentsParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListReviewCommentsData; + } + /** + * @description Lists review comments for all pull requests in a repository. By default, review comments are in ascending order by ID. + * @tags pulls + * @name PullsListReviewCommentsForRepo + * @summary List review comments in a repository + * @request GET:/repos/{owner}/{repo}/pulls/comments + */ + export namespace PullsListReviewCommentsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: PullsListReviewCommentsForRepoParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: PullsListReviewCommentsForRepoParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListReviewCommentsForRepoData; + } + /** + * @description The list of reviews returns in chronological order. + * @tags pulls + * @name PullsListReviews + * @summary List reviews for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews + */ + export namespace PullsListReviews { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PullsListReviewsData; + } + /** + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * @tags pulls + * @name PullsMerge + * @summary Merge a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/merge + */ + export namespace PullsMerge { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsMergePayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsMergeData; + } + /** + * No description + * @tags pulls + * @name PullsRemoveRequestedReviewers + * @summary Remove requested reviewers from a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + export namespace PullsRemoveRequestedReviewers { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsRemoveRequestedReviewersPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsRemoveRequestedReviewersData; + } + /** + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * @tags pulls + * @name PullsRequestReviewers + * @summary Request reviewers for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + export namespace PullsRequestReviewers { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsRequestReviewersPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsRequestReviewersData; + } + /** + * No description + * @tags pulls + * @name PullsSubmitReview + * @summary Submit a review for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events + */ + export namespace PullsSubmitReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = {}; + export type RequestBody = PullsSubmitReviewPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsSubmitReviewData; + } + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. + * @tags pulls + * @name PullsUpdate + * @summary Update a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/{pull_number} + */ + export namespace PullsUpdate { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsUpdateData; + } + /** + * @description Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch. + * @tags pulls + * @name PullsUpdateBranch + * @summary Update a pull request branch + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/update-branch + */ + export namespace PullsUpdateBranch { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsUpdateBranchPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsUpdateBranchData; + } + /** + * @description Update the review summary comment with new text. + * @tags pulls + * @name PullsUpdateReview + * @summary Update a review for a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + export namespace PullsUpdateReview { + export type RequestParams = { + owner: string; + pullNumber: number; + repo: string; + /** review_id parameter */ + reviewId: number; + }; + export type RequestQuery = {}; + export type RequestBody = PullsUpdateReviewPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsUpdateReviewData; + } + /** + * @description Enables you to edit a review comment. + * @tags pulls + * @name PullsUpdateReviewComment + * @summary Update a review comment for a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + export namespace PullsUpdateReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = PullsUpdateReviewCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = PullsUpdateReviewCommentData; + } + /** + * @description Create a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this commit comment. + * @tags reactions + * @name ReactionsCreateForCommitComment + * @summary Create reaction for a commit comment + * @request POST:/repos/{owner}/{repo}/comments/{comment_id}/reactions + */ + export namespace ReactionsCreateForCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForCommitCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForCommitCommentData; + } + /** + * @description Create a reaction to an [issue](https://docs.github.com/rest/reference/issues/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this issue. + * @tags reactions + * @name ReactionsCreateForIssue + * @summary Create reaction for an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/reactions + */ + export namespace ReactionsCreateForIssue { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForIssuePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForIssueData; + } + /** + * @description Create a reaction to an [issue comment](https://docs.github.com/rest/reference/issues#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this issue comment. + * @tags reactions + * @name ReactionsCreateForIssueComment + * @summary Create reaction for an issue comment + * @request POST:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions + */ + export namespace ReactionsCreateForIssueComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForIssueCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForIssueCommentData; + } + /** + * @description Create a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this pull request review comment. + * @tags reactions + * @name ReactionsCreateForPullRequestReviewComment + * @summary Create reaction for a pull request review comment + * @request POST:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions + */ + export namespace ReactionsCreateForPullRequestReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForPullRequestReviewCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForPullRequestReviewCommentData; + } + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * @tags reactions + * @name ReactionsDeleteForCommitComment + * @summary Delete a commit comment reaction + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + reactionId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForCommitCommentData; + } + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/issues/:issue_number/reactions/:reaction_id\`. Delete a reaction to an [issue](https://docs.github.com/rest/reference/issues/). + * @tags reactions + * @name ReactionsDeleteForIssue + * @summary Delete an issue reaction + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForIssue { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + reactionId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForIssueData; + } + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE delete /repositories/:repository_id/issues/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * @tags reactions + * @name ReactionsDeleteForIssueComment + * @summary Delete an issue comment reaction + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForIssueComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + reactionId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForIssueCommentData; + } + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.\` Delete a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). + * @tags reactions + * @name ReactionsDeleteForPullRequestComment + * @summary Delete a pull request comment reaction + * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id} + */ + export namespace ReactionsDeleteForPullRequestComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + reactionId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsDeleteForPullRequestCommentData; + } + /** + * @description List the reactions to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * @tags reactions + * @name ReactionsListForCommitComment + * @summary List reactions for a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id}/reactions + */ + export namespace ReactionsListForCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ + content?: ReactionsListForCommitCommentParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForCommitCommentData; + } + /** + * @description List the reactions to an [issue](https://docs.github.com/rest/reference/issues). + * @tags reactions + * @name ReactionsListForIssue + * @summary List reactions for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/reactions + */ + export namespace ReactionsListForIssue { + export type RequestParams = { + /** issue_number parameter */ + issueNumber: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ + content?: ReactionsListForIssueParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForIssueData; + } + /** + * @description List the reactions to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * @tags reactions + * @name ReactionsListForIssueComment + * @summary List reactions for an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions + */ + export namespace ReactionsListForIssueComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ + content?: ReactionsListForIssueCommentParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForIssueCommentData; + } + /** + * @description List the reactions to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). + * @tags reactions + * @name ReactionsListForPullRequestReviewComment + * @summary List reactions for a pull request review comment + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions + */ + export namespace ReactionsListForPullRequestReviewComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ + content?: ReactionsListForPullRequestReviewCommentParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForPullRequestReviewCommentData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified apps push access for this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposAddAppAccessRestrictions + * @summary Add app access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + export namespace ReposAddAppAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposAddAppAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposAddAppAccessRestrictionsData; + } + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. For more information the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." The invitee will receive a notification that they have been invited to the repository, which they must accept or decline. They may do this via the notifications page, the email they receive, or by using the [repository invitations API endpoints](https://docs.github.com/rest/reference/repos#invitations). **Rate limits** To prevent abuse, you are limited to sending 50 invitations to a repository per 24 hour period. Note there is no limit if you are inviting organization members to an organization repository. + * @tags repos + * @name ReposAddCollaborator + * @summary Add a repository collaborator + * @request PUT:/repos/{owner}/{repo}/collaborators/{username} + */ + export namespace ReposAddCollaborator { + export type RequestParams = { + owner: string; + repo: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposAddCollaboratorPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposAddCollaboratorData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposAddStatusCheckContexts + * @summary Add status check contexts + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + export namespace ReposAddStatusCheckContexts { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposAddStatusCheckContextsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposAddStatusCheckContextsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified teams push access for this branch. You can also give push access to child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | \`array\` | The teams that can have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposAddTeamAccessRestrictions + * @summary Add team access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + export namespace ReposAddTeamAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposAddTeamAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposAddTeamAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified people push access for this branch. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposAddUserAccessRestrictions + * @summary Add user access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + export namespace ReposAddUserAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposAddUserAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposAddUserAccessRestrictionsData; + } + /** + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. + * @tags repos + * @name ReposCheckCollaborator + * @summary Check if a user is a repository collaborator + * @request GET:/repos/{owner}/{repo}/collaborators/{username} + */ + export namespace ReposCheckCollaborator { + export type RequestParams = { + owner: string; + repo: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposCheckCollaboratorData; + } + /** + * @description Shows whether dependency alerts are enabled or disabled for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * @tags repos + * @name ReposCheckVulnerabilityAlerts + * @summary Check if vulnerability alerts are enabled for a repository + * @request GET:/repos/{owner}/{repo}/vulnerability-alerts + */ + export namespace ReposCheckVulnerabilityAlerts { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposCheckVulnerabilityAlertsData; + } + /** + * @description Both \`:base\` and \`:head\` must be branch names in \`:repo\`. To compare branches across other repositories in the same network as \`:repo\`, use the format \`:branch\`. The response from the API is equivalent to running the \`git log base..head\` command; however, commits are returned in chronological order. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. The response also includes details on the files that were changed between the two commits. This includes the status of the change (for example, if a file was added, removed, modified, or renamed), and details of the change itself. For example, files with a \`renamed\` status have a \`previous_filename\` field showing the previous filename of the file, and files with a \`modified\` status have a \`patch\` field showing the changes made to the file. **Working with large comparisons** The response will include a comparison of up to 250 commits. If you are working with a larger commit range, you can use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) to enumerate all commits in the range. For comparisons with extremely large diffs, you may receive an error response indicating that the diff took too long to generate. You can typically resolve this error by using a smaller commit range. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags repos + * @name ReposCompareCommits + * @summary Compare two commits + * @request GET:/repos/{owner}/{repo}/compare/{base}...{head} + */ + export namespace ReposCompareCommits { + export type RequestParams = { + base: string; + head: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposCompareCommitsData; + } + /** + * @description Create a comment for a commit using its \`:commit_sha\`. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags repos + * @name ReposCreateCommitComment + * @summary Create a commit comment + * @request POST:/repos/{owner}/{repo}/commits/{commit_sha}/comments + */ + export namespace ReposCreateCommitComment { + export type RequestParams = { + /** commit_sha parameter */ + commitSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateCommitCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateCommitCommentData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to require signed commits on a branch. You must enable branch protection to require signed commits. + * @tags repos + * @name ReposCreateCommitSignatureProtection + * @summary Create commit signature protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + export namespace ReposCreateCommitSignatureProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateCommitSignatureProtectionData; + } + /** + * @description Users with push access in a repository can create commit statuses for a given SHA. Note: there is a limit of 1000 statuses per \`sha\` and \`context\` within a repository. Attempts to create more than 1000 statuses will result in a validation error. + * @tags repos + * @name ReposCreateCommitStatus + * @summary Create a commit status + * @request POST:/repos/{owner}/{repo}/statuses/{sha} + */ + export namespace ReposCreateCommitStatus { + export type RequestParams = { + owner: string; + repo: string; + sha: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateCommitStatusPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateCommitStatusData; + } + /** + * @description You can create a read-only deploy key. + * @tags repos + * @name ReposCreateDeployKey + * @summary Create a deploy key + * @request POST:/repos/{owner}/{repo}/keys + */ + export namespace ReposCreateDeployKey { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateDeployKeyPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateDeployKeyData; + } + /** + * @description Deployments offer a few configurable parameters with certain defaults. The \`ref\` parameter can be any named branch, tag, or SHA. At GitHub we often deploy branches and verify them before we merge a pull request. The \`environment\` parameter allows deployments to be issued to different runtime environments. Teams often have multiple environments for verifying their applications, such as \`production\`, \`staging\`, and \`qa\`. This parameter makes it easier to track which environments have requested deployments. The default environment is \`production\`. The \`auto_merge\` parameter is used to ensure that the requested ref is not behind the repository's default branch. If the ref _is_ behind the default branch for the repository, we will attempt to merge it for you. If the merge succeeds, the API will return a successful merge commit. If merge conflicts prevent the merge from succeeding, the API will return a failure response. By default, [commit statuses](https://docs.github.com/rest/reference/repos#statuses) for every submitted context must be in a \`success\` state. The \`required_contexts\` parameter allows you to specify a subset of contexts that must be \`success\`, or to specify contexts that have not yet been submitted. You are not required to use commit statuses to deploy. If you do not require any contexts or create any commit statuses, the deployment will always succeed. The \`payload\` parameter is available for any extra information that a deployment system might need. It is a JSON text field that will be passed on when a deployment event is dispatched. The \`task\` parameter is used by the deployment system to allow different execution paths. In the web world this might be \`deploy:migrations\` to run schema changes on the system. In the compiled world this could be a flag to compile an application with debugging enabled. Users with \`repo\` or \`repo_deployment\` scopes can create a deployment for a given ref. #### Merged branch response You will see this response when GitHub automatically merges the base branch into the topic branch instead of creating a deployment. This auto-merge happens when: * Auto-merge option is enabled in the repository * Topic branch does not include the latest changes on the base branch, which is \`master\` in the response example * There are no merge conflicts If there are no new commits in the base branch, a new request to create a deployment should give a successful response. #### Merge conflict response This error happens when the \`auto_merge\` option is enabled and when the default branch (in this case \`master\`), can't be merged into the branch that's being deployed (in this case \`topic-branch\`), due to merge conflicts. #### Failed commit status checks This error happens when the \`required_contexts\` parameter indicates that one or more contexts need to have a \`success\` status for the commit to be deployed, but one or more of the required contexts do not have a state of \`success\`. + * @tags repos + * @name ReposCreateDeployment + * @summary Create a deployment + * @request POST:/repos/{owner}/{repo}/deployments + */ + export namespace ReposCreateDeployment { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateDeploymentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateDeploymentData; + } + /** + * @description Users with \`push\` access can create deployment statuses for a given deployment. GitHub Apps require \`read & write\` access to "Deployments" and \`read-only\` access to "Repo contents" (for private repos). OAuth Apps require the \`repo_deployment\` scope. + * @tags repos + * @name ReposCreateDeploymentStatus + * @summary Create a deployment status + * @request POST:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + */ + export namespace ReposCreateDeploymentStatus { + export type RequestParams = { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateDeploymentStatusPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateDeploymentStatusData; + } + /** + * @description You can use this endpoint to trigger a webhook event called \`repository_dispatch\` when you want activity that happens outside of GitHub to trigger a GitHub Actions workflow or GitHub App webhook. You must configure your GitHub Actions workflow or GitHub App to run when the \`repository_dispatch\` event occurs. For an example \`repository_dispatch\` webhook payload, see "[RepositoryDispatchEvent](https://docs.github.com/webhooks/event-payloads/#repository_dispatch)." The \`client_payload\` parameter is available for any extra information that your workflow might need. This parameter is a JSON payload that will be passed on when the webhook event is dispatched. For example, the \`client_payload\` can include a message that a user would like to send using a GitHub Actions workflow. Or the \`client_payload\` can be used as a test to debug your workflow. This endpoint requires write access to the repository by providing either: - Personal access tokens with \`repo\` scope. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)" in the GitHub Help documentation. - GitHub Apps with both \`metadata:read\` and \`contents:read&write\` permissions. This input example shows how you can use the \`client_payload\` as a test to debug your workflow. + * @tags repos + * @name ReposCreateDispatchEvent + * @summary Create a repository dispatch event + * @request POST:/repos/{owner}/{repo}/dispatches + */ + export namespace ReposCreateDispatchEvent { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateDispatchEventPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateDispatchEventData; + } + /** + * @description Create a fork for the authenticated user. **Note**: Forking a Repository happens asynchronously. You may have to wait a short period of time before you can access the git objects. If this takes longer than 5 minutes, be sure to contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com). + * @tags repos + * @name ReposCreateFork + * @summary Create a fork + * @request POST:/repos/{owner}/{repo}/forks + */ + export namespace ReposCreateFork { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateForkPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateForkData; + } + /** + * @description Creates a new file or replaces an existing file in a repository. + * @tags repos + * @name ReposCreateOrUpdateFileContents + * @summary Create or update file contents + * @request PUT:/repos/{owner}/{repo}/contents/{path} + */ + export namespace ReposCreateOrUpdateFileContents { + export type RequestParams = { + owner: string; + /** path+ parameter */ + path: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateOrUpdateFileContentsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateOrUpdateFileContentsData; + } + /** + * @description Configures a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages)." + * @tags repos + * @name ReposCreatePagesSite + * @summary Create a GitHub Pages site + * @request POST:/repos/{owner}/{repo}/pages + */ + export namespace ReposCreatePagesSite { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreatePagesSitePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreatePagesSiteData; + } + /** + * @description Users with push access to the repository can create a release. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags repos + * @name ReposCreateRelease + * @summary Create a release + * @request POST:/repos/{owner}/{repo}/releases + */ + export namespace ReposCreateRelease { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateReleasePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateReleaseData; + } + /** + * @description Creates a new repository using a repository template. Use the \`template_owner\` and \`template_repo\` route parameters to specify the repository to use as the template. The authenticated user must own or be a member of an organization that owns the repository. To check if a repository is available to use as a template, get the repository's information using the [Get a repository](https://docs.github.com/rest/reference/repos#get-a-repository) endpoint and check that the \`is_template\` key is \`true\`. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * @tags repos + * @name ReposCreateUsingTemplate + * @summary Create a repository using a template + * @request POST:/repos/{template_owner}/{template_repo}/generate + */ + export namespace ReposCreateUsingTemplate { + export type RequestParams = { + templateOwner: string; + templateRepo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateUsingTemplatePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateUsingTemplateData; + } + /** + * @description Repositories can have multiple webhooks installed. Each webhook should have a unique \`config\`. Multiple webhooks can share the same \`config\` as long as those webhooks do not have any \`events\` that overlap. + * @tags repos + * @name ReposCreateWebhook + * @summary Create a repository webhook + * @request POST:/repos/{owner}/{repo}/hooks + */ + export namespace ReposCreateWebhook { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposCreateWebhookPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateWebhookData; + } + /** + * @description Deleting a repository requires admin access. If OAuth is used, the \`delete_repo\` scope is required. If an organization owner has configured the organization to prevent members from deleting organization-owned repositories, you will get a \`403 Forbidden\` response. + * @tags repos + * @name ReposDelete + * @summary Delete a repository + * @request DELETE:/repos/{owner}/{repo} + */ + export namespace ReposDelete { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Disables the ability to restrict who can push to this branch. + * @tags repos + * @name ReposDeleteAccessRestrictions + * @summary Delete access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions + */ + export namespace ReposDeleteAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removing admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * @tags repos + * @name ReposDeleteAdminBranchProtection + * @summary Delete admin branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + export namespace ReposDeleteAdminBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteAdminBranchProtectionData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposDeleteBranchProtection + * @summary Delete branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection + */ + export namespace ReposDeleteBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteBranchProtectionData; + } + /** + * No description + * @tags repos + * @name ReposDeleteCommitComment + * @summary Delete a commit comment + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id} + */ + export namespace ReposDeleteCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteCommitCommentData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to disable required signed commits on a branch. You must enable branch protection to require signed commits. + * @tags repos + * @name ReposDeleteCommitSignatureProtection + * @summary Delete commit signature protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + export namespace ReposDeleteCommitSignatureProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteCommitSignatureProtectionData; + } + /** + * @description Deploy keys are immutable. If you need to update a key, remove the key and create a new one instead. + * @tags repos + * @name ReposDeleteDeployKey + * @summary Delete a deploy key + * @request DELETE:/repos/{owner}/{repo}/keys/{key_id} + */ + export namespace ReposDeleteDeployKey { + export type RequestParams = { + /** key_id parameter */ + keyId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteDeployKeyData; + } + /** + * @description To ensure there can always be an active deployment, you can only delete an _inactive_ deployment. Anyone with \`repo\` or \`repo_deployment\` scopes can delete an inactive deployment. To set a deployment as inactive, you must: * Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment. * Mark the active deployment as inactive by adding any non-successful deployment status. For more information, see "[Create a deployment](https://docs.github.com/rest/reference/repos/#create-a-deployment)" and "[Create a deployment status](https://docs.github.com/rest/reference/repos#create-a-deployment-status)." + * @tags repos + * @name ReposDeleteDeployment + * @summary Delete a deployment + * @request DELETE:/repos/{owner}/{repo}/deployments/{deployment_id} + */ + export namespace ReposDeleteDeployment { + export type RequestParams = { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteDeploymentData; + } + /** + * @description Deletes a file in a repository. You can provide an additional \`committer\` parameter, which is an object containing information about the committer. Or, you can provide an \`author\` parameter, which is an object containing information about the author. The \`author\` section is optional and is filled in with the \`committer\` information if omitted. If the \`committer\` information is omitted, the authenticated user's information is used. You must provide values for both \`name\` and \`email\`, whether you choose to use \`author\` or \`committer\`. Otherwise, you'll receive a \`422\` status code. + * @tags repos + * @name ReposDeleteFile + * @summary Delete a file + * @request DELETE:/repos/{owner}/{repo}/contents/{path} + */ + export namespace ReposDeleteFile { + export type RequestParams = { + owner: string; + /** path+ parameter */ + path: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposDeleteFilePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteFileData; + } + /** + * No description + * @tags repos + * @name ReposDeleteInvitation + * @summary Delete a repository invitation + * @request DELETE:/repos/{owner}/{repo}/invitations/{invitation_id} + */ + export namespace ReposDeleteInvitation { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteInvitationData; + } + /** + * No description + * @tags repos + * @name ReposDeletePagesSite + * @summary Delete a GitHub Pages site + * @request DELETE:/repos/{owner}/{repo}/pages + */ + export namespace ReposDeletePagesSite { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeletePagesSiteData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposDeletePullRequestReviewProtection + * @summary Delete pull request review protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + export namespace ReposDeletePullRequestReviewProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeletePullRequestReviewProtectionData; + } + /** + * @description Users with push access to the repository can delete a release. + * @tags repos + * @name ReposDeleteRelease + * @summary Delete a release + * @request DELETE:/repos/{owner}/{repo}/releases/{release_id} + */ + export namespace ReposDeleteRelease { + export type RequestParams = { + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteReleaseData; + } + /** + * No description + * @tags repos + * @name ReposDeleteReleaseAsset + * @summary Delete a release asset + * @request DELETE:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + export namespace ReposDeleteReleaseAsset { + export type RequestParams = { + /** asset_id parameter */ + assetId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteReleaseAssetData; + } + /** + * No description + * @tags repos + * @name ReposDeleteWebhook + * @summary Delete a repository webhook + * @request DELETE:/repos/{owner}/{repo}/hooks/{hook_id} + */ + export namespace ReposDeleteWebhook { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeleteWebhookData; + } + /** + * @description Disables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * @tags repos + * @name ReposDisableAutomatedSecurityFixes + * @summary Disable automated security fixes + * @request DELETE:/repos/{owner}/{repo}/automated-security-fixes + */ + export namespace ReposDisableAutomatedSecurityFixes { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDisableAutomatedSecurityFixesData; + } + /** + * @description Disables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * @tags repos + * @name ReposDisableVulnerabilityAlerts + * @summary Disable vulnerability alerts + * @request DELETE:/repos/{owner}/{repo}/vulnerability-alerts + */ + export namespace ReposDisableVulnerabilityAlerts { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDisableVulnerabilityAlertsData; + } + /** + * @description Gets a redirect URL to download a tar archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. + * @tags repos + * @name ReposDownloadTarballArchive + * @summary Download a repository archive (tar) + * @request GET:/repos/{owner}/{repo}/tarball/{ref} + */ + export namespace ReposDownloadTarballArchive { + export type RequestParams = { + owner: string; + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Gets a redirect URL to download a zip archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. + * @tags repos + * @name ReposDownloadZipballArchive + * @summary Download a repository archive (zip) + * @request GET:/repos/{owner}/{repo}/zipball/{ref} + */ + export namespace ReposDownloadZipballArchive { + export type RequestParams = { + owner: string; + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Enables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * @tags repos + * @name ReposEnableAutomatedSecurityFixes + * @summary Enable automated security fixes + * @request PUT:/repos/{owner}/{repo}/automated-security-fixes + */ + export namespace ReposEnableAutomatedSecurityFixes { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposEnableAutomatedSecurityFixesData; + } + /** + * @description Enables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * @tags repos + * @name ReposEnableVulnerabilityAlerts + * @summary Enable vulnerability alerts + * @request PUT:/repos/{owner}/{repo}/vulnerability-alerts + */ + export namespace ReposEnableVulnerabilityAlerts { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposEnableVulnerabilityAlertsData; + } + /** + * @description When you pass the \`scarlet-witch-preview\` media type, requests to get a repository will also return the repository's code of conduct if it can be detected from the repository's code of conduct file. The \`parent\` and \`source\` objects are present when the repository is a fork. \`parent\` is the repository this repository was forked from, \`source\` is the ultimate source for the network. + * @tags repos + * @name ReposGet + * @summary Get a repository + * @request GET:/repos/{owner}/{repo} + */ + export namespace ReposGet { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists who has access to this protected branch. **Note**: Users, apps, and teams \`restrictions\` are only available for organization-owned repositories. + * @tags repos + * @name ReposGetAccessRestrictions + * @summary Get access restrictions + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions + */ + export namespace ReposGetAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposGetAdminBranchProtection + * @summary Get admin branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + export namespace ReposGetAdminBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetAdminBranchProtectionData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposGetAllStatusCheckContexts + * @summary Get all status check contexts + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + export namespace ReposGetAllStatusCheckContexts { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetAllStatusCheckContextsData; + } + /** + * No description + * @tags repos + * @name ReposGetAllTopics + * @summary Get all repository topics + * @request GET:/repos/{owner}/{repo}/topics + */ + export namespace ReposGetAllTopics { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetAllTopicsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. + * @tags repos + * @name ReposGetAppsWithAccessToProtectedBranch + * @summary Get apps with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + export namespace ReposGetAppsWithAccessToProtectedBranch { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetAppsWithAccessToProtectedBranchData; + } + /** + * No description + * @tags repos + * @name ReposGetBranch + * @summary Get a branch + * @request GET:/repos/{owner}/{repo}/branches/{branch} + */ + export namespace ReposGetBranch { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetBranchData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposGetBranchProtection + * @summary Get branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection + */ + export namespace ReposGetBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetBranchProtectionData; + } + /** + * @description Get the total number of clones and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. + * @tags repos + * @name ReposGetClones + * @summary Get repository clones + * @request GET:/repos/{owner}/{repo}/traffic/clones + */ + export namespace ReposGetClones { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: ReposGetClonesParams1PerEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetClonesData; + } + /** + * @description Returns a weekly aggregate of the number of additions and deletions pushed to a repository. + * @tags repos + * @name ReposGetCodeFrequencyStats + * @summary Get the weekly commit activity + * @request GET:/repos/{owner}/{repo}/stats/code_frequency + */ + export namespace ReposGetCodeFrequencyStats { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCodeFrequencyStatsData; + } + /** + * @description Checks the repository permission of a collaborator. The possible repository permissions are \`admin\`, \`write\`, \`read\`, and \`none\`. + * @tags repos + * @name ReposGetCollaboratorPermissionLevel + * @summary Get repository permissions for a user + * @request GET:/repos/{owner}/{repo}/collaborators/{username}/permission + */ + export namespace ReposGetCollaboratorPermissionLevel { + export type RequestParams = { + owner: string; + repo: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCollaboratorPermissionLevelData; + } + /** + * @description Users with pull access in a repository can access a combined view of commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. The most recent status for each context is returned, up to 100. This field [paginates](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination) if there are over 100 contexts. Additionally, a combined \`state\` is returned. The \`state\` is one of: * **failure** if any of the contexts report as \`error\` or \`failure\` * **pending** if there are no statuses or a context is \`pending\` * **success** if the latest status for all contexts is \`success\` + * @tags repos + * @name ReposGetCombinedStatusForRef + * @summary Get the combined status for a specific reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/status + */ + export namespace ReposGetCombinedStatusForRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCombinedStatusForRefData; + } + /** + * @description Returns the contents of a single commit reference. You must have \`read\` access for the repository to use this endpoint. **Note:** If there are more than 300 files in the commit diff, the response will include pagination link headers for the remaining files, up to a limit of 3000 files. Each page contains the static commit information, and the only changes are to the file listing. You can pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch \`diff\` and \`patch\` formats. Diffs with binary data will have no \`patch\` property. To return only the SHA-1 hash of the commit reference, you can provide the \`sha\` custom [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) in the \`Accept\` header. You can use this endpoint to check if a remote reference's SHA-1 hash is the same as your local reference's SHA-1 hash by providing the local SHA-1 reference as the ETag. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags repos + * @name ReposGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/commits/{ref} + */ + export namespace ReposGetCommit { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCommitData; + } + /** + * @description Returns the last year of commit activity grouped by week. The \`days\` array is a group of commits per day, starting on \`Sunday\`. + * @tags repos + * @name ReposGetCommitActivityStats + * @summary Get the last year of commit activity + * @request GET:/repos/{owner}/{repo}/stats/commit_activity + */ + export namespace ReposGetCommitActivityStats { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCommitActivityStatsData; + } + /** + * No description + * @tags repos + * @name ReposGetCommitComment + * @summary Get a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id} + */ + export namespace ReposGetCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCommitCommentData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to check whether a branch requires signed commits. An enabled status of \`true\` indicates you must sign commits on this branch. For more information, see [Signing commits with GPG](https://help.github.com/articles/signing-commits-with-gpg) in GitHub Help. **Note**: You must enable branch protection to require signed commits. + * @tags repos + * @name ReposGetCommitSignatureProtection + * @summary Get commit signature protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + export namespace ReposGetCommitSignatureProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCommitSignatureProtectionData; + } + /** + * @description This endpoint will return all community profile metrics, including an overall health score, repository description, the presence of documentation, detected code of conduct, detected license, and the presence of ISSUE\\_TEMPLATE, PULL\\_REQUEST\\_TEMPLATE, README, and CONTRIBUTING files. The \`health_percentage\` score is defined as a percentage of how many of these four documents are present: README, CONTRIBUTING, LICENSE, and CODE_OF_CONDUCT. For example, if all four documents are present, then the \`health_percentage\` is \`100\`. If only one is present, then the \`health_percentage\` is \`25\`. \`content_reports_enabled\` is only returned for organization-owned repositories. + * @tags repos + * @name ReposGetCommunityProfileMetrics + * @summary Get community profile metrics + * @request GET:/repos/{owner}/{repo}/community/profile + */ + export namespace ReposGetCommunityProfileMetrics { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetCommunityProfileMetricsData; + } + /** + * @description Gets the contents of a file or directory in a repository. Specify the file path or directory in \`:path\`. If you omit \`:path\`, you will receive the contents of the repository's root directory. See the description below regarding what the API response includes for directories. Files and symlinks support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML (when supported). All content types support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) to ensure the content is returned in a consistent object format. **Note**: * To get a repository's contents recursively, you can [recursively get the tree](https://docs.github.com/rest/reference/git#trees). * This API has an upper limit of 1,000 files for a directory. If you need to retrieve more files, use the [Git Trees API](https://docs.github.com/rest/reference/git#get-a-tree). * This API supports files up to 1 megabyte in size. #### If the content is a directory The response will be an array of objects, one object for each item in the directory. When listing the contents of a directory, submodules have their "type" specified as "file". Logically, the value _should_ be "submodule". This behavior exists in API v3 [for backwards compatibility purposes](https://git.io/v1YCW). In the next major version of the API, the type will be returned as "submodule". #### If the content is a symlink If the requested \`:path\` points to a symlink, and the symlink's target is a normal file in the repository, then the API responds with the content of the file (in the format shown in the example. Otherwise, the API responds with an object describing the symlink itself. #### If the content is a submodule The \`submodule_git_url\` identifies the location of the submodule repository, and the \`sha\` identifies a specific commit within the submodule repository. Git uses the given URL when cloning the submodule repository, and checks out the submodule at that specific commit. If the submodule repository is not hosted on github.com, the Git URLs (\`git_url\` and \`_links["git"]\`) and the github.com URLs (\`html_url\` and \`_links["html"]\`) will have null values. + * @tags repos + * @name ReposGetContent + * @summary Get repository content + * @request GET:/repos/{owner}/{repo}/contents/{path} + */ + export namespace ReposGetContent { + export type RequestParams = { + owner: string; + /** path+ parameter */ + path: string; + repo: string; + }; + export type RequestQuery = { + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetContentData; + } + /** + * @description Returns the \`total\` number of commits authored by the contributor. In addition, the response includes a Weekly Hash (\`weeks\` array) with the following information: * \`w\` - Start of the week, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). * \`a\` - Number of additions * \`d\` - Number of deletions * \`c\` - Number of commits + * @tags repos + * @name ReposGetContributorsStats + * @summary Get all contributor commit activity + * @request GET:/repos/{owner}/{repo}/stats/contributors + */ + export namespace ReposGetContributorsStats { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetContributorsStatsData; + } + /** + * No description + * @tags repos + * @name ReposGetDeployKey + * @summary Get a deploy key + * @request GET:/repos/{owner}/{repo}/keys/{key_id} + */ + export namespace ReposGetDeployKey { + export type RequestParams = { + /** key_id parameter */ + keyId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetDeployKeyData; + } + /** + * No description + * @tags repos + * @name ReposGetDeployment + * @summary Get a deployment + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id} + */ + export namespace ReposGetDeployment { + export type RequestParams = { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetDeploymentData; + } + /** + * @description Users with pull access can view a deployment status for a deployment: + * @tags repos + * @name ReposGetDeploymentStatus + * @summary Get a deployment status + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id} + */ + export namespace ReposGetDeploymentStatus { + export type RequestParams = { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + repo: string; + statusId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetDeploymentStatusData; + } + /** + * No description + * @tags repos + * @name ReposGetLatestPagesBuild + * @summary Get latest Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/latest + */ + export namespace ReposGetLatestPagesBuild { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetLatestPagesBuildData; + } + /** + * @description View the latest published full release for the repository. The latest release is the most recent non-prerelease, non-draft release, sorted by the \`created_at\` attribute. The \`created_at\` attribute is the date of the commit used for the release, and not the date when the release was drafted or published. + * @tags repos + * @name ReposGetLatestRelease + * @summary Get the latest release + * @request GET:/repos/{owner}/{repo}/releases/latest + */ + export namespace ReposGetLatestRelease { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetLatestReleaseData; + } + /** + * No description + * @tags repos + * @name ReposGetPages + * @summary Get a GitHub Pages site + * @request GET:/repos/{owner}/{repo}/pages + */ + export namespace ReposGetPages { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetPagesData; + } + /** + * No description + * @tags repos + * @name ReposGetPagesBuild + * @summary Get GitHub Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/{build_id} + */ + export namespace ReposGetPagesBuild { + export type RequestParams = { + buildId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetPagesBuildData; + } + /** + * @description Returns the total commit counts for the \`owner\` and total commit counts in \`all\`. \`all\` is everyone combined, including the \`owner\` in the last 52 weeks. If you'd like to get the commit counts for non-owners, you can subtract \`owner\` from \`all\`. The array order is oldest week (index 0) to most recent week. + * @tags repos + * @name ReposGetParticipationStats + * @summary Get the weekly commit count + * @request GET:/repos/{owner}/{repo}/stats/participation + */ + export namespace ReposGetParticipationStats { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetParticipationStatsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposGetPullRequestReviewProtection + * @summary Get pull request review protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + export namespace ReposGetPullRequestReviewProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetPullRequestReviewProtectionData; + } + /** + * @description Each array contains the day number, hour number, and number of commits: * \`0-6\`: Sunday - Saturday * \`0-23\`: Hour of day * Number of commits For example, \`[2, 14, 25]\` indicates that there were 25 total commits, during the 2:00pm hour on Tuesdays. All times are based on the time zone of individual commits. + * @tags repos + * @name ReposGetPunchCardStats + * @summary Get the hourly commit count for each day + * @request GET:/repos/{owner}/{repo}/stats/punch_card + */ + export namespace ReposGetPunchCardStats { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetPunchCardStatsData; + } + /** + * @description Gets the preferred README for a repository. READMEs support [custom media types](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML. + * @tags repos + * @name ReposGetReadme + * @summary Get a repository README + * @request GET:/repos/{owner}/{repo}/readme + */ + export namespace ReposGetReadme { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetReadmeData; + } + /** + * @description **Note:** This returns an \`upload_url\` key corresponding to the endpoint for uploading release assets. This key is a [hypermedia resource](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia). + * @tags repos + * @name ReposGetRelease + * @summary Get a release + * @request GET:/repos/{owner}/{repo}/releases/{release_id} + */ + export namespace ReposGetRelease { + export type RequestParams = { + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetReleaseData; + } + /** + * @description To download the asset's binary content, set the \`Accept\` header of the request to [\`application/octet-stream\`](https://docs.github.com/rest/overview/media-types). The API will either redirect the client to the location, or stream it directly if possible. API clients should handle both a \`200\` or \`302\` response. + * @tags repos + * @name ReposGetReleaseAsset + * @summary Get a release asset + * @request GET:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + export namespace ReposGetReleaseAsset { + export type RequestParams = { + /** asset_id parameter */ + assetId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetReleaseAssetData; + } + /** + * @description Get a published release with the specified tag. + * @tags repos + * @name ReposGetReleaseByTag + * @summary Get a release by tag name + * @request GET:/repos/{owner}/{repo}/releases/tags/{tag} + */ + export namespace ReposGetReleaseByTag { + export type RequestParams = { + owner: string; + repo: string; + /** tag+ parameter */ + tag: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetReleaseByTagData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposGetStatusChecksProtection + * @summary Get status checks protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + export namespace ReposGetStatusChecksProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetStatusChecksProtectionData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the teams who have push access to this branch. The list includes child teams. + * @tags repos + * @name ReposGetTeamsWithAccessToProtectedBranch + * @summary Get teams with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + export namespace ReposGetTeamsWithAccessToProtectedBranch { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetTeamsWithAccessToProtectedBranchData; + } + /** + * @description Get the top 10 popular contents over the last 14 days. + * @tags repos + * @name ReposGetTopPaths + * @summary Get top referral paths + * @request GET:/repos/{owner}/{repo}/traffic/popular/paths + */ + export namespace ReposGetTopPaths { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetTopPathsData; + } + /** + * @description Get the top 10 referrers over the last 14 days. + * @tags repos + * @name ReposGetTopReferrers + * @summary Get top referral sources + * @request GET:/repos/{owner}/{repo}/traffic/popular/referrers + */ + export namespace ReposGetTopReferrers { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetTopReferrersData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the people who have push access to this branch. + * @tags repos + * @name ReposGetUsersWithAccessToProtectedBranch + * @summary Get users with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + export namespace ReposGetUsersWithAccessToProtectedBranch { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetUsersWithAccessToProtectedBranchData; + } + /** + * @description Get the total number of views and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. + * @tags repos + * @name ReposGetViews + * @summary Get page views + * @request GET:/repos/{owner}/{repo}/traffic/views + */ + export namespace ReposGetViews { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: ReposGetViewsParams1PerEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetViewsData; + } + /** + * @description Returns a webhook configured in a repository. To get only the webhook \`config\` properties, see "[Get a webhook configuration for a repository](/rest/reference/repos#get-a-webhook-configuration-for-a-repository)." + * @tags repos + * @name ReposGetWebhook + * @summary Get a repository webhook + * @request GET:/repos/{owner}/{repo}/hooks/{hook_id} + */ + export namespace ReposGetWebhook { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetWebhookData; + } + /** + * @description Returns the webhook configuration for a repository. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get a repository webhook](/rest/reference/orgs#get-a-repository-webhook)." Access tokens must have the \`read:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:read\` permission. + * @tags repos + * @name ReposGetWebhookConfigForRepo + * @summary Get a webhook configuration for a repository + * @request GET:/repos/{owner}/{repo}/hooks/{hook_id}/config + */ + export namespace ReposGetWebhookConfigForRepo { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposGetWebhookConfigForRepoData; + } + /** + * No description + * @tags repos + * @name ReposListBranches + * @summary List branches + * @request GET:/repos/{owner}/{repo}/branches + */ + export namespace ReposListBranches { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Setting to \`true\` returns only protected branches. When set to \`false\`, only unprotected branches are returned. Omitting this parameter returns all branches. */ + protected?: boolean; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListBranchesData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Returns all branches where the given commit SHA is the HEAD, or latest commit for the branch. + * @tags repos + * @name ReposListBranchesForHeadCommit + * @summary List branches for HEAD commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head + */ + export namespace ReposListBranchesForHeadCommit { + export type RequestParams = { + /** commit_sha parameter */ + commitSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListBranchesForHeadCommitData; + } + /** + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. + * @tags repos + * @name ReposListCollaborators + * @summary List repository collaborators + * @request GET:/repos/{owner}/{repo}/collaborators + */ + export namespace ReposListCollaborators { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Filter collaborators returned by their affiliation. Can be one of: + * \\* \`outside\`: All outside collaborators of an organization-owned repository. + * \\* \`direct\`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ + affiliation?: ReposListCollaboratorsParams1AffiliationEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListCollaboratorsData; + } + /** + * @description Use the \`:commit_sha\` to specify the commit that will have its comments listed. + * @tags repos + * @name ReposListCommentsForCommit + * @summary List commit comments + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/comments + */ + export namespace ReposListCommentsForCommit { + export type RequestParams = { + /** commit_sha parameter */ + commitSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListCommentsForCommitData; + } + /** + * @description Commit Comments use [these custom media types](https://docs.github.com/rest/reference/repos#custom-media-types). You can read more about the use of media types in the API [here](https://docs.github.com/rest/overview/media-types/). Comments are ordered by ascending ID. + * @tags repos + * @name ReposListCommitCommentsForRepo + * @summary List commit comments for a repository + * @request GET:/repos/{owner}/{repo}/comments + */ + export namespace ReposListCommitCommentsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListCommitCommentsForRepoData; + } + /** + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * @tags repos + * @name ReposListCommits + * @summary List commits + * @request GET:/repos/{owner}/{repo}/commits + */ + export namespace ReposListCommits { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** GitHub login or email address by which to filter by commit author. */ + author?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** Only commits containing this file path will be returned. */ + path?: string; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** SHA or branch to start listing commits from. Default: the repository’s default branch (usually \`master\`). */ + sha?: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + until?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListCommitsData; + } + /** + * @description Users with pull access in a repository can view commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. Statuses are returned in reverse chronological order. The first status in the list will be the latest one. This resource is also available via a legacy route: \`GET /repos/:owner/:repo/statuses/:ref\`. + * @tags repos + * @name ReposListCommitStatusesForRef + * @summary List commit statuses for a reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/statuses + */ + export namespace ReposListCommitStatusesForRef { + export type RequestParams = { + owner: string; + /** ref+ parameter */ + ref: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListCommitStatusesForRefData; + } + /** + * @description Lists contributors to the specified repository and sorts them by the number of commits per contributor in descending order. This endpoint may return information that is a few hours old because the GitHub REST API v3 caches contributor data to improve performance. GitHub identifies contributors by author email address. This endpoint groups contribution counts by GitHub user, which includes all associated email addresses. To improve performance, only the first 500 author email addresses in the repository link to GitHub users. The rest will appear as anonymous contributors without associated GitHub user information. + * @tags repos + * @name ReposListContributors + * @summary List repository contributors + * @request GET:/repos/{owner}/{repo}/contributors + */ + export namespace ReposListContributors { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** Set to \`1\` or \`true\` to include anonymous contributors in results. */ + anon?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListContributorsData; + } + /** + * No description + * @tags repos + * @name ReposListDeployKeys + * @summary List deploy keys + * @request GET:/repos/{owner}/{repo}/keys + */ + export namespace ReposListDeployKeys { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListDeployKeysData; + } + /** + * @description Simple filtering of deployments is available via query parameters: + * @tags repos + * @name ReposListDeployments + * @summary List deployments + * @request GET:/repos/{owner}/{repo}/deployments + */ + export namespace ReposListDeployments { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * The name of the environment that was deployed to (e.g., \`staging\` or \`production\`). + * @default "none" + */ + environment?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * The name of the ref. This can be a branch, tag, or SHA. + * @default "none" + */ + ref?: string; + /** + * The SHA recorded at creation time. + * @default "none" + */ + sha?: string; + /** + * The name of the task for the deployment (e.g., \`deploy\` or \`deploy:migrations\`). + * @default "none" + */ + task?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListDeploymentsData; + } + /** + * @description Users with pull access can view deployment statuses for a deployment: + * @tags repos + * @name ReposListDeploymentStatuses + * @summary List deployment statuses + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + */ + export namespace ReposListDeploymentStatuses { + export type RequestParams = { + /** deployment_id parameter */ + deploymentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListDeploymentStatusesData; + } + /** + * No description + * @tags repos + * @name ReposListForks + * @summary List forks + * @request GET:/repos/{owner}/{repo}/forks + */ + export namespace ReposListForks { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * The sort order. Can be either \`newest\`, \`oldest\`, or \`stargazers\`. + * @default "newest" + */ + sort?: ReposListForksParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListForksData; + } + /** + * @description When authenticating as a user with admin rights to a repository, this endpoint will list all currently open repository invitations. + * @tags repos + * @name ReposListInvitations + * @summary List repository invitations + * @request GET:/repos/{owner}/{repo}/invitations + */ + export namespace ReposListInvitations { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListInvitationsData; + } + /** + * @description Lists languages for the specified repository. The value shown for each language is the number of bytes of code written in that language. + * @tags repos + * @name ReposListLanguages + * @summary List repository languages + * @request GET:/repos/{owner}/{repo}/languages + */ + export namespace ReposListLanguages { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListLanguagesData; + } + /** + * No description + * @tags repos + * @name ReposListPagesBuilds + * @summary List GitHub Pages builds + * @request GET:/repos/{owner}/{repo}/pages/builds + */ + export namespace ReposListPagesBuilds { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListPagesBuildsData; + } + /** + * @description Lists all pull requests containing the provided commit SHA, which can be from any point in the commit history. The results will include open and closed pull requests. Additional preview headers may be required to see certain details for associated pull requests, such as whether a pull request is in a draft state. For more information about previews that might affect this endpoint, see the [List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests) endpoint. + * @tags repos + * @name ReposListPullRequestsAssociatedWithCommit + * @summary List pull requests associated with a commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/pulls + */ + export namespace ReposListPullRequestsAssociatedWithCommit { + export type RequestParams = { + /** commit_sha parameter */ + commitSha: string; + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListPullRequestsAssociatedWithCommitData; + } + /** + * No description + * @tags repos + * @name ReposListReleaseAssets + * @summary List release assets + * @request GET:/repos/{owner}/{repo}/releases/{release_id}/assets + */ + export namespace ReposListReleaseAssets { + export type RequestParams = { + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListReleaseAssetsData; + } + /** + * @description This returns a list of releases, which does not include regular Git tags that have not been associated with a release. To get a list of Git tags, use the [Repository Tags API](https://docs.github.com/rest/reference/repos#list-repository-tags). Information about published releases are available to everyone. Only users with push access will receive listings for draft releases. + * @tags repos + * @name ReposListReleases + * @summary List releases + * @request GET:/repos/{owner}/{repo}/releases + */ + export namespace ReposListReleases { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListReleasesData; + } + /** + * No description + * @tags repos + * @name ReposListTags + * @summary List repository tags + * @request GET:/repos/{owner}/{repo}/tags + */ + export namespace ReposListTags { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListTagsData; + } + /** + * No description + * @tags repos + * @name ReposListTeams + * @summary List repository teams + * @request GET:/repos/{owner}/{repo}/teams + */ + export namespace ReposListTeams { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListTeamsData; + } + /** + * No description + * @tags repos + * @name ReposListWebhooks + * @summary List repository webhooks + * @request GET:/repos/{owner}/{repo}/hooks + */ + export namespace ReposListWebhooks { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListWebhooksData; + } + /** + * No description + * @tags repos + * @name ReposMerge + * @summary Merge a branch + * @request POST:/repos/{owner}/{repo}/merges + */ + export namespace ReposMerge { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposMergePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposMergeData; + } + /** + * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * @tags repos + * @name ReposPingWebhook + * @summary Ping a repository webhook + * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/pings + */ + export namespace ReposPingWebhook { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposPingWebhookData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of an app to push to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposRemoveAppAccessRestrictions + * @summary Remove app access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + export namespace ReposRemoveAppAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposRemoveAppAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveAppAccessRestrictionsData; + } + /** + * No description + * @tags repos + * @name ReposRemoveCollaborator + * @summary Remove a repository collaborator + * @request DELETE:/repos/{owner}/{repo}/collaborators/{username} + */ + export namespace ReposRemoveCollaborator { + export type RequestParams = { + owner: string; + repo: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveCollaboratorData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposRemoveStatusCheckContexts + * @summary Remove status check contexts + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + export namespace ReposRemoveStatusCheckContexts { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposRemoveStatusCheckContextsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveStatusCheckContextsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposRemoveStatusCheckProtection + * @summary Remove status check protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + export namespace ReposRemoveStatusCheckProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveStatusCheckProtectionData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a team to push to this branch. You can also remove push access for child teams. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Teams that should no longer have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposRemoveTeamAccessRestrictions + * @summary Remove team access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + export namespace ReposRemoveTeamAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposRemoveTeamAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveTeamAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a user to push to this branch. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames of the people who should no longer have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposRemoveUserAccessRestrictions + * @summary Remove user access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + export namespace ReposRemoveUserAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposRemoveUserAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposRemoveUserAccessRestrictionsData; + } + /** + * @description Renames a branch in a repository. **Note:** Although the API responds immediately, the branch rename process might take some extra time to complete in the background. You won't be able to push to the old branch name while the rename process is in progress. For more information, see "[Renaming a branch](https://docs.github.com/github/administering-a-repository/renaming-a-branch)". The permissions required to use this endpoint depends on whether you are renaming the default branch. To rename a non-default branch: * Users must have push access. * GitHub Apps must have the \`contents:write\` repository permission. To rename the default branch: * Users must have admin or owner permissions. * GitHub Apps must have the \`administration:write\` repository permission. + * @tags repos + * @name ReposRenameBranch + * @summary Rename a branch + * @request POST:/repos/{owner}/{repo}/branches/{branch}/rename + */ + export namespace ReposRenameBranch { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposRenameBranchPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposRenameBranchData; + } + /** + * No description + * @tags repos + * @name ReposReplaceAllTopics + * @summary Replace all repository topics + * @request PUT:/repos/{owner}/{repo}/topics + */ + export namespace ReposReplaceAllTopics { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposReplaceAllTopicsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposReplaceAllTopicsData; + } + /** + * @description You can request that your site be built from the latest revision on the default branch. This has the same effect as pushing a commit to your default branch, but does not require an additional commit. Manually triggering page builds can be helpful when diagnosing build warnings and failures. Build requests are limited to one concurrent build per repository and one concurrent build per requester. If you request a build while another is still in progress, the second request will be queued until the first completes. + * @tags repos + * @name ReposRequestPagesBuild + * @summary Request a GitHub Pages build + * @request POST:/repos/{owner}/{repo}/pages/builds + */ + export namespace ReposRequestPagesBuild { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposRequestPagesBuildData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adding admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * @tags repos + * @name ReposSetAdminBranchProtection + * @summary Set admin branch protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + export namespace ReposSetAdminBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposSetAdminBranchProtectionData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of apps that have push access to this branch. This removes all apps that previously had push access and grants push access to the new list of apps. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposSetAppAccessRestrictions + * @summary Set app access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + export namespace ReposSetAppAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposSetAppAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposSetAppAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @tags repos + * @name ReposSetStatusCheckContexts + * @summary Set status check contexts + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + export namespace ReposSetStatusCheckContexts { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposSetStatusCheckContextsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposSetStatusCheckContextsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of teams that have push access to this branch. This removes all teams that previously had push access and grants push access to the new list of teams. Team restrictions include child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | \`array\` | The teams that can have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposSetTeamAccessRestrictions + * @summary Set team access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + export namespace ReposSetTeamAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposSetTeamAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposSetTeamAccessRestrictionsData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of people that have push access to this branch. This removes all people that previously had push access and grants push access to the new list of people. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @tags repos + * @name ReposSetUserAccessRestrictions + * @summary Set user access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + export namespace ReposSetUserAccessRestrictions { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposSetUserAccessRestrictionsPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposSetUserAccessRestrictionsData; + } + /** + * @description This will trigger the hook with the latest push to the current repository if the hook is subscribed to \`push\` events. If the hook is not subscribed to \`push\` events, the server will respond with 204 but no test POST will be generated. **Note**: Previously \`/repos/:owner/:repo/hooks/:hook_id/test\` + * @tags repos + * @name ReposTestPushWebhook + * @summary Test the push repository webhook + * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/tests + */ + export namespace ReposTestPushWebhook { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposTestPushWebhookData; + } + /** + * @description A transfer request will need to be accepted by the new owner when transferring a personal repository to another user. The response will contain the original \`owner\`, and the transfer will continue asynchronously. For more details on the requirements to transfer personal and organization-owned repositories, see [about repository transfers](https://help.github.com/articles/about-repository-transfers/). + * @tags repos + * @name ReposTransfer + * @summary Transfer a repository + * @request POST:/repos/{owner}/{repo}/transfer + */ + export namespace ReposTransfer { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposTransferPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposTransferData; + } + /** + * @description **Note**: To edit a repository's topics, use the [Replace all repository topics](https://docs.github.com/rest/reference/repos#replace-all-repository-topics) endpoint. + * @tags repos + * @name ReposUpdate + * @summary Update a repository + * @request PATCH:/repos/{owner}/{repo} + */ + export namespace ReposUpdate { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Protecting a branch requires admin or owner permissions to the repository. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. **Note**: The list of users, apps, and teams in total is limited to 100 items. + * @tags repos + * @name ReposUpdateBranchProtection + * @summary Update branch protection + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection + */ + export namespace ReposUpdateBranchProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateBranchProtectionPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateBranchProtectionData; + } + /** + * No description + * @tags repos + * @name ReposUpdateCommitComment + * @summary Update a commit comment + * @request PATCH:/repos/{owner}/{repo}/comments/{comment_id} + */ + export namespace ReposUpdateCommitComment { + export type RequestParams = { + /** comment_id parameter */ + commentId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateCommitCommentPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateCommitCommentData; + } + /** + * @description Updates information for a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages). + * @tags repos + * @name ReposUpdateInformationAboutPagesSite + * @summary Update information about a GitHub Pages site + * @request PUT:/repos/{owner}/{repo}/pages + */ + export namespace ReposUpdateInformationAboutPagesSite { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateInformationAboutPagesSitePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateInformationAboutPagesSiteData; + } + /** + * No description + * @tags repos + * @name ReposUpdateInvitation + * @summary Update a repository invitation + * @request PATCH:/repos/{owner}/{repo}/invitations/{invitation_id} + */ + export namespace ReposUpdateInvitation { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateInvitationPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateInvitationData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating pull request review enforcement requires admin or owner permissions to the repository and branch protection to be enabled. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. + * @tags repos + * @name ReposUpdatePullRequestReviewProtection + * @summary Update pull request review protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + export namespace ReposUpdatePullRequestReviewProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdatePullRequestReviewProtectionPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdatePullRequestReviewProtectionData; + } + /** + * @description Users with push access to the repository can edit a release. + * @tags repos + * @name ReposUpdateRelease + * @summary Update a release + * @request PATCH:/repos/{owner}/{repo}/releases/{release_id} + */ + export namespace ReposUpdateRelease { + export type RequestParams = { + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateReleasePayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateReleaseData; + } + /** + * @description Users with push access to the repository can edit a release asset. + * @tags repos + * @name ReposUpdateReleaseAsset + * @summary Update a release asset + * @request PATCH:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + export namespace ReposUpdateReleaseAsset { + export type RequestParams = { + /** asset_id parameter */ + assetId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateReleaseAssetPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateReleaseAssetData; + } + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating required status checks requires admin or owner permissions to the repository and branch protection to be enabled. + * @tags repos + * @name ReposUpdateStatusCheckProtection + * @summary Update status check protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + export namespace ReposUpdateStatusCheckProtection { + export type RequestParams = { + /** The name of the branch. */ + branch: string; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateStatusCheckProtectionPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateStatusCheckProtectionData; + } + /** + * @description Updates a webhook configured in a repository. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for a repository](/rest/reference/repos#update-a-webhook-configuration-for-a-repository)." + * @tags repos + * @name ReposUpdateWebhook + * @summary Update a repository webhook + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id} + */ + export namespace ReposUpdateWebhook { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateWebhookPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateWebhookData; + } + /** + * @description Updates the webhook configuration for a repository. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update a repository webhook](/rest/reference/orgs#update-a-repository-webhook)." Access tokens must have the \`write:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:write\` permission. + * @tags repos + * @name ReposUpdateWebhookConfigForRepo + * @summary Update a webhook configuration for a repository + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id}/config + */ + export namespace ReposUpdateWebhookConfigForRepo { + export type RequestParams = { + hookId: number; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = ReposUpdateWebhookConfigForRepoPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUpdateWebhookConfigForRepoData; + } + /** + * @description This endpoint makes use of [a Hypermedia relation](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) to determine which URL to access. The endpoint you call to upload release assets is specific to your release. Use the \`upload_url\` returned in the response of the [Create a release endpoint](https://docs.github.com/rest/reference/repos#create-a-release) to upload a release asset. You need to use an HTTP client which supports [SNI](http://en.wikipedia.org/wiki/Server_Name_Indication) to make calls to this endpoint. Most libraries will set the required \`Content-Length\` header automatically. Use the required \`Content-Type\` header to provide the media type of the asset. For a list of media types, see [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). For example: \`application/zip\` GitHub expects the asset data in its raw binary form, rather than JSON. You will send the raw binary content of the asset as the request body. Everything else about the endpoint is the same as the rest of the API. For example, you'll still need to pass your authentication to be able to upload an asset. When an upstream failure occurs, you will receive a \`502 Bad Gateway\` status. This may leave an empty asset with a state of \`starter\`. It can be safely deleted. **Notes:** * GitHub renames asset filenames that have special characters, non-alphanumeric characters, and leading or trailing periods. The "[List assets for a release](https://docs.github.com/rest/reference/repos#list-assets-for-a-release)" endpoint lists the renamed filenames. For more information and help, contact [GitHub Support](https://support.github.com/contact). * If you upload an asset with the same filename as another uploaded asset, you'll receive an error and must delete the old file before you can re-upload the new asset. + * @tags repos + * @name ReposUploadReleaseAsset + * @summary Upload a release asset + * @request POST:/repos/{owner}/{repo}/releases/{release_id}/assets + */ + export namespace ReposUploadReleaseAsset { + export type RequestParams = { + owner: string; + /** release_id parameter */ + releaseId: number; + repo: string; + }; + export type RequestQuery = { + label?: string; + name?: string; + }; + export type RequestBody = ReposUploadReleaseAssetPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposUploadReleaseAssetData; + } + /** + * @description Gets a single secret scanning alert detected in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` read permission to use this endpoint. + * @tags secret-scanning + * @name SecretScanningGetAlert + * @summary Get a secret scanning alert + * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + */ + export namespace SecretScanningGetAlert { + export type RequestParams = { + /** The security alert number, found at the end of the security alert's URL. */ + alertNumber: AlertNumber; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SecretScanningGetAlertData; + } + /** + * @description Lists all secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` read permission to use this endpoint. + * @tags secret-scanning + * @name SecretScanningListAlertsForRepo + * @summary List secret scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts + */ + export namespace SecretScanningListAlertsForRepo { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Set to \`open\` or \`resolved\` to only list secret scanning alerts in a specific state. */ + state?: SecretScanningListAlertsForRepoParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SecretScanningListAlertsForRepoData; + } + /** + * @description Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` write permission to use this endpoint. + * @tags secret-scanning + * @name SecretScanningUpdateAlert + * @summary Update a secret scanning alert + * @request PATCH:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + */ + export namespace SecretScanningUpdateAlert { + export type RequestParams = { + /** The security alert number, found at the end of the security alert's URL. */ + alertNumber: AlertNumber; + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = SecretScanningUpdateAlertPayload; + export type RequestHeaders = {}; + export type ResponseBody = SecretScanningUpdateAlertData; + } +} + +export namespace Repositories { + /** + * @description Lists all public repositories in the order that they were created. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of repositories. + * @tags repos + * @name ReposListPublic + * @summary List public repositories + * @request GET:/repositories + */ + export namespace ReposListPublic { + export type RequestParams = {}; + export type RequestQuery = { + /** A repository ID. Only return repositories with an ID greater than this ID. */ + since?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListPublicData; + } +} + +export namespace Scim { + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @tags enterprise-admin + * @name EnterpriseAdminDeleteScimGroupFromEnterprise + * @summary Delete a SCIM group from an enterprise + * @request DELETE:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + export namespace EnterpriseAdminDeleteScimGroupFromEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Identifier generated by the GitHub SCIM endpoint. */ + scimGroupId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminDeleteScimGroupFromEnterpriseData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @tags enterprise-admin + * @name EnterpriseAdminDeleteUserFromEnterprise + * @summary Delete a SCIM user from an enterprise + * @request DELETE:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + export namespace EnterpriseAdminDeleteUserFromEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminDeleteUserFromEnterpriseData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @tags enterprise-admin + * @name EnterpriseAdminGetProvisioningInformationForEnterpriseGroup + * @summary Get SCIM provisioning information for an enterprise group + * @request GET:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + export namespace EnterpriseAdminGetProvisioningInformationForEnterpriseGroup { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Identifier generated by the GitHub SCIM endpoint. */ + scimGroupId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetProvisioningInformationForEnterpriseGroupData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @tags enterprise-admin + * @name EnterpriseAdminGetProvisioningInformationForEnterpriseUser + * @summary Get SCIM provisioning information for an enterprise user + * @request GET:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + export namespace EnterpriseAdminGetProvisioningInformationForEnterpriseUser { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminGetProvisioningInformationForEnterpriseUserData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedGroupsEnterprise + * @summary List provisioned SCIM groups for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Groups + */ + export namespace EnterpriseAdminListProvisionedGroupsEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** Used for pagination: the number of results to return. */ + count?: number; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListProvisionedGroupsEnterpriseData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Retrieves a paginated list of all provisioned enterprise members, including pending invitations. When a user with a SAML-provisioned external identity leaves (or is removed from) an enterprise, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an enterprise, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub enterprise. 1. The user attempts to access the GitHub enterprise and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub enterprise, and the external identity \`null\` entry remains in place. + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedIdentitiesEnterprise + * @summary List SCIM provisioned identities for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Users + */ + export namespace EnterpriseAdminListProvisionedIdentitiesEnterprise { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = { + /** Used for pagination: the number of results to return. */ + count?: number; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminListProvisionedIdentitiesEnterpriseData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision an enterprise group, and invite users to the group. This sends invitation emails to the email address of the invited users to join the GitHub organization that the SCIM group corresponds to. + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseGroup + * @summary Provision a SCIM enterprise group and invite users + * @request POST:/scim/v2/enterprises/{enterprise}/Groups + */ + export namespace EnterpriseAdminProvisionAndInviteEnterpriseGroup { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminProvisionAndInviteEnterpriseGroupPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminProvisionAndInviteEnterpriseGroupData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision enterprise membership for a user, and send organization invitation emails to the email address. You can optionally include the groups a user will be invited to join. If you do not provide a list of \`groups\`, the user is provisioned for the enterprise, but no organization invitation emails will be sent. + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseUser + * @summary Provision and invite a SCIM enterprise user + * @request POST:/scim/v2/enterprises/{enterprise}/Users + */ + export namespace EnterpriseAdminProvisionAndInviteEnterpriseUser { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminProvisionAndInviteEnterpriseUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminProvisionAndInviteEnterpriseUserData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned group’s information. You must provide all the information required for the group as if you were provisioning it for the first time. Any existing group information that you don't provide will be removed, including group membership. If you want to only update a specific attribute, use the [Update an attribute for a SCIM enterprise group](#update-an-attribute-for-a-scim-enterprise-group) endpoint instead. + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseGroup + * @summary Set SCIM information for a provisioned enterprise group + * @request PUT:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + export namespace EnterpriseAdminSetInformationForProvisionedEnterpriseGroup { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Identifier generated by the GitHub SCIM endpoint. */ + scimGroupId: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetInformationForProvisionedEnterpriseGroupPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetInformationForProvisionedEnterpriseGroupData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](#update-an-attribute-for-an-enterprise-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the enterprise, deletes the external identity, and deletes the associated \`{scim_user_id}\`. + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseUser + * @summary Set SCIM information for a provisioned enterprise user + * @request PUT:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + export namespace EnterpriseAdminSetInformationForProvisionedEnterpriseUser { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminSetInformationForProvisionedEnterpriseUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminSetInformationForProvisionedEnterpriseUserData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned group’s individual attributes. To change a group’s values, you must provide a specific Operations JSON format that contains at least one of the add, remove, or replace operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). + * @tags enterprise-admin + * @name EnterpriseAdminUpdateAttributeForEnterpriseGroup + * @summary Update an attribute for a SCIM enterprise group + * @request PATCH:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + export namespace EnterpriseAdminUpdateAttributeForEnterpriseGroup { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** Identifier generated by the GitHub SCIM endpoint. */ + scimGroupId: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminUpdateAttributeForEnterpriseGroupPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminUpdateAttributeForEnterpriseGroupData; + } + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific \`Operations\` JSON format that contains at least one of the \`add\`, \`remove\`, or \`replace\` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM \`path\` selectors that include filters are not supported. For example, a \`path\` selector defined as \`"path": "emails[type eq \\"work\\"]"\` will not work. **Warning:** If you set \`active:false\` using the \`replace\` operation (as shown in the JSON example below), it removes the user from the enterprise, deletes the external identity, and deletes the associated \`:scim_user_id\`. \`\`\` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } \`\`\` + * @tags enterprise-admin + * @name EnterpriseAdminUpdateAttributeForEnterpriseUser + * @summary Update an attribute for a SCIM enterprise user + * @request PATCH:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + export namespace EnterpriseAdminUpdateAttributeForEnterpriseUser { + export type RequestParams = { + /** The slug version of the enterprise name. You can also substitute this value with the enterprise id. */ + enterprise: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = EnterpriseAdminUpdateAttributeForEnterpriseUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = EnterpriseAdminUpdateAttributeForEnterpriseUserData; + } + /** + * No description + * @tags scim + * @name ScimDeleteUserFromOrg + * @summary Delete a SCIM user from an organization + * @request DELETE:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + export namespace ScimDeleteUserFromOrg { + export type RequestParams = { + org: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ScimDeleteUserFromOrgData; + } + /** + * No description + * @tags scim + * @name ScimGetProvisioningInformationForUser + * @summary Get SCIM provisioning information for a user + * @request GET:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + export namespace ScimGetProvisioningInformationForUser { + export type RequestParams = { + org: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ScimGetProvisioningInformationForUserData; + } + /** + * @description Retrieves a paginated list of all provisioned organization members, including pending invitations. If you provide the \`filter\` parameter, the resources for all matching provisions members are returned. When a user with a SAML-provisioned external identity leaves (or is removed from) an organization, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an organization, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub organization. 1. The user attempts to access the GitHub organization and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub organization, and the external identity \`null\` entry remains in place. + * @tags scim + * @name ScimListProvisionedIdentities + * @summary List SCIM provisioned identities + * @request GET:/scim/v2/organizations/{org}/Users + */ + export namespace ScimListProvisionedIdentities { + export type RequestParams = { + org: string; + }; + export type RequestQuery = { + /** Used for pagination: the number of results to return. */ + count?: number; + /** + * Filters results using the equals query parameter operator (\`eq\`). You can filter results that are equal to \`id\`, \`userName\`, \`emails\`, and \`external_id\`. For example, to search for an identity with the \`userName\` Octocat, you would use this query: + * + * \`?filter=userName%20eq%20\\"Octocat\\"\`. + * + * To filter results for the identity with the email \`octocat@github.com\`, you would use this query: + * + * \`?filter=emails%20eq%20\\"octocat@github.com\\"\`. + */ + filter?: string; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ScimListProvisionedIdentitiesData; + } + /** + * @description Provision organization membership for a user, and send an activation email to the email address. + * @tags scim + * @name ScimProvisionAndInviteUser + * @summary Provision and invite a SCIM user + * @request POST:/scim/v2/organizations/{org}/Users + */ + export namespace ScimProvisionAndInviteUser { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = ScimProvisionAndInviteUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = ScimProvisionAndInviteUserData; + } + /** + * @description Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](https://docs.github.com/rest/reference/scim#update-an-attribute-for-a-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the organization, deletes the external identity, and deletes the associated \`{scim_user_id}\`. + * @tags scim + * @name ScimSetInformationForProvisionedUser + * @summary Update a provisioned organization membership + * @request PUT:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + export namespace ScimSetInformationForProvisionedUser { + export type RequestParams = { + org: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = ScimSetInformationForProvisionedUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = ScimSetInformationForProvisionedUserData; + } + /** + * @description Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific \`Operations\` JSON format that contains at least one of the \`add\`, \`remove\`, or \`replace\` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM \`path\` selectors that include filters are not supported. For example, a \`path\` selector defined as \`"path": "emails[type eq \\"work\\"]"\` will not work. **Warning:** If you set \`active:false\` using the \`replace\` operation (as shown in the JSON example below), it removes the user from the organization, deletes the external identity, and deletes the associated \`:scim_user_id\`. \`\`\` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } \`\`\` + * @tags scim + * @name ScimUpdateAttributeForUser + * @summary Update an attribute for a SCIM user + * @request PATCH:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + export namespace ScimUpdateAttributeForUser { + export type RequestParams = { + org: string; + /** scim_user_id parameter */ + scimUserId: string; + }; + export type RequestQuery = {}; + export type RequestBody = ScimUpdateAttributeForUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = ScimUpdateAttributeForUserData; + } +} + +export namespace Search { + /** + * @description Searches for query terms inside of a file. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for code, you can get text match metadata for the file **content** and file **path** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the definition of the \`addClass\` function inside [jQuery](https://github.com/jquery/jquery) repository, your query would look something like this: \`q=addClass+in:file+language:js+repo:jquery/jquery\` This query searches for the keyword \`addClass\` within a file's contents. The query limits the search to files where the language is JavaScript in the \`jquery/jquery\` repository. #### Considerations for code search Due to the complexity of searching code, there are a few restrictions on how searches are performed: * Only the _default branch_ is considered. In most cases, this will be the \`master\` branch. * Only files smaller than 384 KB are searchable. * You must always include at least one search term when searching source code. For example, searching for [\`language:go\`](https://github.com/search?utf8=%E2%9C%93&q=language%3Ago&type=Code) is not valid, while [\`amazing language:go\`](https://github.com/search?utf8=%E2%9C%93&q=amazing+language%3Ago&type=Code) is. + * @tags search + * @name SearchCode + * @summary Search code + * @request GET:/search/code + */ + export namespace SearchCode { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchCodeParams1OrderEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching code](https://help.github.com/articles/searching-code/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query. Can only be \`indexed\`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchCodeParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchCodeData; + } + /** + * @description Find commits via various criteria on the default branch (usually \`master\`). This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for commits, you can get text match metadata for the **message** field when you provide the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find commits related to CSS in the [octocat/Spoon-Knife](https://github.com/octocat/Spoon-Knife) repository. Your query would look something like this: \`q=repo:octocat/Spoon-Knife+css\` + * @tags search + * @name SearchCommits + * @summary Search commits + * @request GET:/search/commits + */ + export namespace SearchCommits { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchCommitsParams1OrderEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by \`author-date\` or \`committer-date\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchCommitsParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchCommitsData; + } + /** + * @description Find issues by state and keyword. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this. \`q=windows+label:bug+language:python+state:open&sort=created&order=asc\` This query searches for the keyword \`windows\`, within any open issue that is labeled as \`bug\`. The search runs across repositories whose primary language is Python. The results are sorted by creation date in ascending order, which means the oldest issues appear first in the search results. **Note:** For [user-to-server](https://docs.github.com/developers/apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) GitHub App requests, you can't retrieve a combination of issues and pull requests in a single query. Requests that don't include the \`is:issue\` or \`is:pull-request\` qualifier will receive an HTTP \`422 Unprocessable Entity\` response. To get results for both issues and pull requests, you must send separate queries for issues and pull requests. For more information about the \`is\` qualifier, see "[Searching only issues or pull requests](https://docs.github.com/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-only-issues-or-pull-requests)." + * @tags search + * @name SearchIssuesAndPullRequests + * @summary Search issues and pull requests + * @request GET:/search/issues + */ + export namespace SearchIssuesAndPullRequests { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchIssuesAndPullRequestsParams1OrderEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by the number of \`comments\`, \`reactions\`, \`reactions-+1\`, \`reactions--1\`, \`reactions-smile\`, \`reactions-thinking_face\`, \`reactions-heart\`, \`reactions-tada\`, or \`interactions\`. You can also sort results by how recently the items were \`created\` or \`updated\`, Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchIssuesAndPullRequestsParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchIssuesAndPullRequestsData; + } + /** + * @description Find labels in a repository with names or descriptions that match search keywords. Returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for labels, you can get text match metadata for the label **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find labels in the \`linguist\` repository that match \`bug\`, \`defect\`, or \`enhancement\`. Your query might look like this: \`q=bug+defect+enhancement&repository_id=64778136\` The labels that best match the query appear first in the search results. + * @tags search + * @name SearchLabels + * @summary Search labels + * @request GET:/search/labels + */ + export namespace SearchLabels { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchLabelsParams1OrderEnum; + /** The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; + /** The id of the repository. */ + repository_id: number; + /** Sorts the results of your query by when the label was \`created\` or \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchLabelsParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchLabelsData; + } + /** + * @description Find repositories via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for repositories, you can get text match metadata for the **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for popular Tetris repositories written in assembly code, your query might look like this: \`q=tetris+language:assembly&sort=stars&order=desc\` This query searches for repositories with the word \`tetris\` in the name, the description, or the README. The results are limited to repositories where the primary language is assembly. The results are sorted by stars in descending order, so that the most popular repositories appear first in the search results. When you include the \`mercy\` preview header, you can also search for multiple topics by adding more \`topic:\` instances. For example, your query might look like this: \`q=topic:ruby+topic:rails\` + * @tags search + * @name SearchRepos + * @summary Search repositories + * @request GET:/search/repositories + */ + export namespace SearchRepos { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchReposParams1OrderEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by number of \`stars\`, \`forks\`, or \`help-wanted-issues\` or how recently the items were \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchReposParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchReposData; + } + /** + * @description Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). See "[Searching topics](https://help.github.com/articles/searching-topics/)" for a detailed list of qualifiers. When searching for topics, you can get text match metadata for the topic's **short\\_description**, **description**, **name**, or **display\\_name** field when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for topics related to Ruby that are featured on https://github.com/topics. Your query might look like this: \`q=ruby+is:featured\` This query searches for topics with the keyword \`ruby\` and limits the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results. + * @tags search + * @name SearchTopics + * @summary Search topics + * @request GET:/search/topics + */ + export namespace SearchTopics { + export type RequestParams = {}; + export type RequestQuery = { + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchTopicsData; + } + /** + * @description Find users via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for users, you can get text match metadata for the issue **login**, **email**, and **name** fields when you pass the \`text-match\` media type. For more details about highlighting search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you're looking for a list of popular users, you might try this query: \`q=tom+repos:%3E42+followers:%3E1000\` This query searches for users with the name \`tom\`. The results are restricted to users with more than 42 repositories and over 1,000 followers. + * @tags search + * @name SearchUsers + * @summary Search users + * @request GET:/search/users + */ + export namespace SearchUsers { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: SearchUsersParams1OrderEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching users](https://help.github.com/articles/searching-users/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by number of \`followers\` or \`repositories\`, or when the person \`joined\` GitHub. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: SearchUsersParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchUsersData; + } +} + +export namespace Teams { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Create reaction for a team discussion comment](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion-comment)" endpoint. Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentLegacy + * @summary Create reaction for a team discussion comment (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated + */ + export namespace ReactionsCreateForTeamDiscussionCommentLegacy { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForTeamDiscussionCommentLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForTeamDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create reaction for a team discussion\`](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion) endpoint. Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. + * @tags reactions + * @name ReactionsCreateForTeamDiscussionLegacy + * @summary Create reaction for a team discussion (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated + */ + export namespace ReactionsCreateForTeamDiscussionLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = ReactionsCreateForTeamDiscussionLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsCreateForTeamDiscussionLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion comment\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion-comment) endpoint. List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentLegacy + * @summary List reactions for a team discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated + */ + export namespace ReactionsListForTeamDiscussionCommentLegacy { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: ReactionsListForTeamDiscussionCommentLegacyParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForTeamDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion) endpoint. List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags reactions + * @name ReactionsListForTeamDiscussionLegacy + * @summary List reactions for a team discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated + */ + export namespace ReactionsListForTeamDiscussionLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: ReactionsListForTeamDiscussionLegacyParams1ContentEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReactionsListForTeamDiscussionLegacyData; + } + /** + * @description The "Add team member" endpoint (described below) is deprecated. We recommend using the [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint instead. It allows you to invite new organization members to your teams. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To add someone to a team, the authenticated user must be an organization owner or a team maintainer in the team they're changing. The person being added to the team must be a member of the team's organization. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags teams + * @name TeamsAddMemberLegacy + * @summary Add team member (Legacy) + * @request PUT:/teams/{team_id}/members/{username} + * @deprecated + */ + export namespace TeamsAddMemberLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddMemberLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. If the user is already a member of the team's organization, this endpoint will add the user to the team. To add a membership between an organization member and a team, the authenticated user must be an organization owner or a team maintainer. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." If the user is unaffiliated with the team's organization, this endpoint will send an invitation to the user via email. This newly-created membership will be in the "pending" state until the user accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. To add a membership between an unaffiliated user and a team, the authenticated user must be an organization owner. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserLegacy + * @summary Add or update team membership for a user (Legacy) + * @request PUT:/teams/{team_id}/memberships/{username} + * @deprecated + */ + export namespace TeamsAddOrUpdateMembershipForUserLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateMembershipForUserLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateMembershipForUserLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team project permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-project-permissions) endpoint. Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsLegacy + * @summary Add or update team project permissions (Legacy) + * @request PUT:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + export namespace TeamsAddOrUpdateProjectPermissionsLegacy { + export type RequestParams = { + projectId: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateProjectPermissionsLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateProjectPermissionsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Add or update team repository permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-repository-permissions)" endpoint. To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsLegacy + * @summary Add or update team repository permissions (Legacy) + * @request PUT:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + export namespace TeamsAddOrUpdateRepoPermissionsLegacy { + export type RequestParams = { + owner: string; + repo: string; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsAddOrUpdateRepoPermissionsLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsAddOrUpdateRepoPermissionsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a project](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-project) endpoint. Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. + * @tags teams + * @name TeamsCheckPermissionsForProjectLegacy + * @summary Check team permissions for a project (Legacy) + * @request GET:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + export namespace TeamsCheckPermissionsForProjectLegacy { + export type RequestParams = { + projectId: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCheckPermissionsForProjectLegacyData; + } + /** + * @description **Note**: Repositories inherited through a parent team will also be checked. **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a repository](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-repository) endpoint. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * @tags teams + * @name TeamsCheckPermissionsForRepoLegacy + * @summary Check team permissions for a repository (Legacy) + * @request GET:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + export namespace TeamsCheckPermissionsForRepoLegacy { + export type RequestParams = { + owner: string; + repo: string; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCheckPermissionsForRepoLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Create a discussion comment](https://docs.github.com/rest/reference/teams#create-a-discussion-comment) endpoint. Creates a new comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags teams + * @name TeamsCreateDiscussionCommentLegacy + * @summary Create a discussion comment (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments + * @deprecated + */ + export namespace TeamsCreateDiscussionCommentLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateDiscussionCommentLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create a discussion\`](https://docs.github.com/rest/reference/teams#create-a-discussion) endpoint. Creates a new discussion post on a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @tags teams + * @name TeamsCreateDiscussionLegacy + * @summary Create a discussion (Legacy) + * @request POST:/teams/{team_id}/discussions + * @deprecated + */ + export namespace TeamsCreateDiscussionLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateDiscussionLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateDiscussionLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create or update IdP group connections\`](https://docs.github.com/rest/reference/teams#create-or-update-idp-group-connections) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsLegacy + * @summary Create or update IdP group connections (Legacy) + * @request PATCH:/teams/{team_id}/team-sync/group-mappings + * @deprecated + */ + export namespace TeamsCreateOrUpdateIdpGroupConnectionsLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsCreateOrUpdateIdpGroupConnectionsLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsCreateOrUpdateIdpGroupConnectionsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a discussion comment](https://docs.github.com/rest/reference/teams#delete-a-discussion-comment) endpoint. Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsDeleteDiscussionCommentLegacy + * @summary Delete a discussion comment (Legacy) + * @request DELETE:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + export namespace TeamsDeleteDiscussionCommentLegacy { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Delete a discussion\`](https://docs.github.com/rest/reference/teams#delete-a-discussion) endpoint. Delete a discussion from a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsDeleteDiscussionLegacy + * @summary Delete a discussion (Legacy) + * @request DELETE:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + export namespace TeamsDeleteDiscussionLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteDiscussionLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a team](https://docs.github.com/rest/reference/teams#delete-a-team) endpoint. To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. + * @tags teams + * @name TeamsDeleteLegacy + * @summary Delete a team (Legacy) + * @request DELETE:/teams/{team_id} + * @deprecated + */ + export namespace TeamsDeleteLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsDeleteLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion comment](https://docs.github.com/rest/reference/teams#get-a-discussion-comment) endpoint. Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsGetDiscussionCommentLegacy + * @summary Get a discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + export namespace TeamsGetDiscussionCommentLegacy { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion](https://docs.github.com/rest/reference/teams#get-a-discussion) endpoint. Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsGetDiscussionLegacy + * @summary Get a discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + export namespace TeamsGetDiscussionLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetDiscussionLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the [Get a team by name](https://docs.github.com/rest/reference/teams#get-a-team-by-name) endpoint. + * @tags teams + * @name TeamsGetLegacy + * @summary Get a team (Legacy) + * @request GET:/teams/{team_id} + * @deprecated + */ + export namespace TeamsGetLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetLegacyData; + } + /** + * @description The "Get team member" endpoint (described below) is deprecated. We recommend using the [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint instead. It allows you to get both active and pending memberships. To list members in a team, the team must be visible to the authenticated user. + * @tags teams + * @name TeamsGetMemberLegacy + * @summary Get team member (Legacy) + * @request GET:/teams/{team_id}/members/{username} + * @deprecated + */ + export namespace TeamsGetMemberLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetMemberLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint. Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). + * @tags teams + * @name TeamsGetMembershipForUserLegacy + * @summary Get team membership for a user (Legacy) + * @request GET:/teams/{team_id}/memberships/{username} + * @deprecated + */ + export namespace TeamsGetMembershipForUserLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsGetMembershipForUserLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List child teams\`](https://docs.github.com/rest/reference/teams#list-child-teams) endpoint. + * @tags teams + * @name TeamsListChildLegacy + * @summary List child teams (Legacy) + * @request GET:/teams/{team_id}/teams + * @deprecated + */ + export namespace TeamsListChildLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListChildLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List discussion comments](https://docs.github.com/rest/reference/teams#list-discussion-comments) endpoint. List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsListDiscussionCommentsLegacy + * @summary List discussion comments (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments + * @deprecated + */ + export namespace TeamsListDiscussionCommentsLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: TeamsListDiscussionCommentsLegacyParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListDiscussionCommentsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List discussions\`](https://docs.github.com/rest/reference/teams#list-discussions) endpoint. List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsListDiscussionsLegacy + * @summary List discussions (Legacy) + * @request GET:/teams/{team_id}/discussions + * @deprecated + */ + export namespace TeamsListDiscussionsLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: TeamsListDiscussionsLegacyParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListDiscussionsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List IdP groups for a team\`](https://docs.github.com/rest/reference/teams#list-idp-groups-for-a-team) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. + * @tags teams + * @name TeamsListIdpGroupsForLegacy + * @summary List IdP groups for a team (Legacy) + * @request GET:/teams/{team_id}/team-sync/group-mappings + * @deprecated + */ + export namespace TeamsListIdpGroupsForLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListIdpGroupsForLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List team members\`](https://docs.github.com/rest/reference/teams#list-team-members) endpoint. Team members will include the members of child teams. + * @tags teams + * @name TeamsListMembersLegacy + * @summary List team members (Legacy) + * @request GET:/teams/{team_id}/members + * @deprecated + */ + export namespace TeamsListMembersLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ + role?: TeamsListMembersLegacyParams1RoleEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListMembersLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List pending team invitations\`](https://docs.github.com/rest/reference/teams#list-pending-team-invitations) endpoint. The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. + * @tags teams + * @name TeamsListPendingInvitationsLegacy + * @summary List pending team invitations (Legacy) + * @request GET:/teams/{team_id}/invitations + * @deprecated + */ + export namespace TeamsListPendingInvitationsLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListPendingInvitationsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List team projects\`](https://docs.github.com/rest/reference/teams#list-team-projects) endpoint. Lists the organization projects for a team. + * @tags teams + * @name TeamsListProjectsLegacy + * @summary List team projects (Legacy) + * @request GET:/teams/{team_id}/projects + * @deprecated + */ + export namespace TeamsListProjectsLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListProjectsLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List team repositories](https://docs.github.com/rest/reference/teams#list-team-repositories) endpoint. + * @tags teams + * @name TeamsListReposLegacy + * @summary List team repositories (Legacy) + * @request GET:/teams/{team_id}/repos + * @deprecated + */ + export namespace TeamsListReposLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListReposLegacyData; + } + /** + * @description The "Remove team member" endpoint (described below) is deprecated. We recommend using the [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint instead. It allows you to remove both active and pending memberships. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a team member, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. Removing a team member does not delete the user, it just removes them from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." + * @tags teams + * @name TeamsRemoveMemberLegacy + * @summary Remove team member (Legacy) + * @request DELETE:/teams/{team_id}/members/{username} + * @deprecated + */ + export namespace TeamsRemoveMemberLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveMemberLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." + * @tags teams + * @name TeamsRemoveMembershipForUserLegacy + * @summary Remove team membership for a user (Legacy) + * @request DELETE:/teams/{team_id}/memberships/{username} + * @deprecated + */ + export namespace TeamsRemoveMembershipForUserLegacy { + export type RequestParams = { + teamId: number; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveMembershipForUserLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a project from a team](https://docs.github.com/rest/reference/teams#remove-a-project-from-a-team) endpoint. Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. **Note:** This endpoint removes the project from the team, but does not delete it. + * @tags teams + * @name TeamsRemoveProjectLegacy + * @summary Remove a project from a team (Legacy) + * @request DELETE:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + export namespace TeamsRemoveProjectLegacy { + export type RequestParams = { + projectId: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveProjectLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a repository from a team](https://docs.github.com/rest/reference/teams#remove-a-repository-from-a-team) endpoint. If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. NOTE: This does not delete the repository, it just removes it from the team. + * @tags teams + * @name TeamsRemoveRepoLegacy + * @summary Remove a repository from a team (Legacy) + * @request DELETE:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + export namespace TeamsRemoveRepoLegacy { + export type RequestParams = { + owner: string; + repo: string; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsRemoveRepoLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion comment](https://docs.github.com/rest/reference/teams#update-a-discussion-comment) endpoint. Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsUpdateDiscussionCommentLegacy + * @summary Update a discussion comment (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + export namespace TeamsUpdateDiscussionCommentLegacy { + export type RequestParams = { + commentNumber: number; + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateDiscussionCommentLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateDiscussionCommentLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion](https://docs.github.com/rest/reference/teams#update-a-discussion) endpoint. Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags teams + * @name TeamsUpdateDiscussionLegacy + * @summary Update a discussion (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + export namespace TeamsUpdateDiscussionLegacy { + export type RequestParams = { + discussionNumber: number; + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateDiscussionLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateDiscussionLegacyData; + } + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a team](https://docs.github.com/rest/reference/teams#update-a-team) endpoint. To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** With nested teams, the \`privacy\` for parent teams cannot be \`secret\`. + * @tags teams + * @name TeamsUpdateLegacy + * @summary Update a team (Legacy) + * @request PATCH:/teams/{team_id} + * @deprecated + */ + export namespace TeamsUpdateLegacy { + export type RequestParams = { + teamId: number; + }; + export type RequestQuery = {}; + export type RequestBody = TeamsUpdateLegacyPayload; + export type RequestHeaders = {}; + export type ResponseBody = TeamsUpdateLegacyData; + } +} + +export namespace User { + /** + * No description + * @tags activity + * @name ActivityCheckRepoIsStarredByAuthenticatedUser + * @summary Check if a repository is starred by the authenticated user + * @request GET:/user/starred/{owner}/{repo} + */ + export namespace ActivityCheckRepoIsStarredByAuthenticatedUser { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityCheckRepoIsStarredByAuthenticatedUserData; + } + /** + * @description Lists repositories the authenticated user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * @tags activity + * @name ActivityListReposStarredByAuthenticatedUser + * @summary List repositories starred by the authenticated user + * @request GET:/user/starred + */ + export namespace ActivityListReposStarredByAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: ActivityListReposStarredByAuthenticatedUserParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: ActivityListReposStarredByAuthenticatedUserParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListReposStarredByAuthenticatedUserData; + } + /** + * @description Lists repositories the authenticated user is watching. + * @tags activity + * @name ActivityListWatchedReposForAuthenticatedUser + * @summary List repositories watched by the authenticated user + * @request GET:/user/subscriptions + */ + export namespace ActivityListWatchedReposForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListWatchedReposForAuthenticatedUserData; + } + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @tags activity + * @name ActivityStarRepoForAuthenticatedUser + * @summary Star a repository for the authenticated user + * @request PUT:/user/starred/{owner}/{repo} + */ + export namespace ActivityStarRepoForAuthenticatedUser { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityStarRepoForAuthenticatedUserData; + } + /** + * No description + * @tags activity + * @name ActivityUnstarRepoForAuthenticatedUser + * @summary Unstar a repository for the authenticated user + * @request DELETE:/user/starred/{owner}/{repo} + */ + export namespace ActivityUnstarRepoForAuthenticatedUser { + export type RequestParams = { + owner: string; + repo: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityUnstarRepoForAuthenticatedUserData; + } + /** + * @description Add a single repository to an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. + * @tags apps + * @name AppsAddRepoToInstallation + * @summary Add a repository to an app installation + * @request PUT:/user/installations/{installation_id}/repositories/{repository_id} + */ + export namespace AppsAddRepoToInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + repositoryId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsAddRepoToInstallationData; + } + /** + * @description List repositories that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access for an installation. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The access the user has to each repository is included in the hash under the \`permissions\` key. + * @tags apps + * @name AppsListInstallationReposForAuthenticatedUser + * @summary List repositories accessible to the user access token + * @request GET:/user/installations/{installation_id}/repositories + */ + export namespace AppsListInstallationReposForAuthenticatedUser { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListInstallationReposForAuthenticatedUserData; + } + /** + * @description Lists installations of your GitHub App that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You can find the permissions for the installation under the \`permissions\` key. + * @tags apps + * @name AppsListInstallationsForAuthenticatedUser + * @summary List app installations accessible to the user access token + * @request GET:/user/installations + */ + export namespace AppsListInstallationsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListInstallationsForAuthenticatedUserData; + } + /** + * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). + * @tags apps + * @name AppsListSubscriptionsForAuthenticatedUser + * @summary List subscriptions for the authenticated user + * @request GET:/user/marketplace_purchases + */ + export namespace AppsListSubscriptionsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListSubscriptionsForAuthenticatedUserData; + } + /** + * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). + * @tags apps + * @name AppsListSubscriptionsForAuthenticatedUserStubbed + * @summary List subscriptions for the authenticated user (stubbed) + * @request GET:/user/marketplace_purchases/stubbed + */ + export namespace AppsListSubscriptionsForAuthenticatedUserStubbed { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsListSubscriptionsForAuthenticatedUserStubbedData; + } + /** + * @description Remove a single repository from an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. + * @tags apps + * @name AppsRemoveRepoFromInstallation + * @summary Remove a repository from an app installation + * @request DELETE:/user/installations/{installation_id}/repositories/{repository_id} + */ + export namespace AppsRemoveRepoFromInstallation { + export type RequestParams = { + /** installation_id parameter */ + installationId: number; + repositoryId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsRemoveRepoFromInstallationData; + } + /** + * @description Shows which type of GitHub user can interact with your public repositories and when the restriction expires. If there are no restrictions, you will see an empty response. + * @tags interactions + * @name InteractionsGetRestrictionsForAuthenticatedUser + * @summary Get interaction restrictions for your public repositories + * @request GET:/user/interaction-limits + */ + export namespace InteractionsGetRestrictionsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsGetRestrictionsForAuthenticatedUserData; + } + /** + * @description Removes any interaction restrictions from your public repositories. + * @tags interactions + * @name InteractionsRemoveRestrictionsForAuthenticatedUser + * @summary Remove interaction restrictions from your public repositories + * @request DELETE:/user/interaction-limits + */ + export namespace InteractionsRemoveRestrictionsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsRemoveRestrictionsForAuthenticatedUserData; + } + /** + * @description Temporarily restricts which type of GitHub user can interact with your public repositories. Setting the interaction limit at the user level will overwrite any interaction limits that are set for individual repositories owned by the user. + * @tags interactions + * @name InteractionsSetRestrictionsForAuthenticatedUser + * @summary Set interaction restrictions for your public repositories + * @request PUT:/user/interaction-limits + */ + export namespace InteractionsSetRestrictionsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = InteractionLimit; + export type RequestHeaders = {}; + export type ResponseBody = InteractionsSetRestrictionsForAuthenticatedUserData; + } + /** + * @description List issues across owned and member repositories assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @tags issues + * @name IssuesListForAuthenticatedUser + * @summary List user account issues assigned to the authenticated user + * @request GET:/user/issues + */ + export namespace IssuesListForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: IssuesListForAuthenticatedUserParams1DirectionEnum; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: IssuesListForAuthenticatedUserParams1FilterEnum; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: IssuesListForAuthenticatedUserParams1SortEnum; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: IssuesListForAuthenticatedUserParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = IssuesListForAuthenticatedUserData; + } + /** + * @description Deletes a previous migration archive. Downloadable migration archives are automatically deleted after seven days. Migration metadata, which is returned in the [List user migrations](https://docs.github.com/rest/reference/migrations#list-user-migrations) and [Get a user migration status](https://docs.github.com/rest/reference/migrations#get-a-user-migration-status) endpoints, will continue to be available even after an archive is deleted. + * @tags migrations + * @name MigrationsDeleteArchiveForAuthenticatedUser + * @summary Delete a user migration archive + * @request DELETE:/user/migrations/{migration_id}/archive + */ + export namespace MigrationsDeleteArchiveForAuthenticatedUser { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsDeleteArchiveForAuthenticatedUserData; + } + /** + * @description Fetches the URL to download the migration archive as a \`tar.gz\` file. Depending on the resources your repository uses, the migration archive can contain JSON files with data for these objects: * attachments * bases * commit\\_comments * issue\\_comments * issue\\_events * issues * milestones * organizations * projects * protected\\_branches * pull\\_request\\_reviews * pull\\_requests * releases * repositories * review\\_comments * schema * users The archive will also contain an \`attachments\` directory that includes all attachment files uploaded to GitHub.com and a \`repositories\` directory that contains the repository's Git data. + * @tags migrations + * @name MigrationsGetArchiveForAuthenticatedUser + * @summary Download a user migration archive + * @request GET:/user/migrations/{migration_id}/archive + */ + export namespace MigrationsGetArchiveForAuthenticatedUser { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Fetches a single user migration. The response includes the \`state\` of the migration, which can be one of the following values: * \`pending\` - the migration hasn't started yet. * \`exporting\` - the migration is in progress. * \`exported\` - the migration finished successfully. * \`failed\` - the migration failed. Once the migration has been \`exported\` you can [download the migration archive](https://docs.github.com/rest/reference/migrations#download-a-user-migration-archive). + * @tags migrations + * @name MigrationsGetStatusForAuthenticatedUser + * @summary Get a user migration status + * @request GET:/user/migrations/{migration_id} + */ + export namespace MigrationsGetStatusForAuthenticatedUser { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + }; + export type RequestQuery = { + exclude?: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsGetStatusForAuthenticatedUserData; + } + /** + * @description Lists all migrations a user has started. + * @tags migrations + * @name MigrationsListForAuthenticatedUser + * @summary List user migrations + * @request GET:/user/migrations + */ + export namespace MigrationsListForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsListForAuthenticatedUserData; + } + /** + * @description Lists all the repositories for this user migration. + * @tags migrations + * @name MigrationsListReposForUser + * @summary List repositories for a user migration + * @request GET:/user/migrations/{migration_id}/repositories + */ + export namespace MigrationsListReposForUser { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsListReposForUserData; + } + /** + * @description Initiates the generation of a user migration archive. + * @tags migrations + * @name MigrationsStartForAuthenticatedUser + * @summary Start a user migration + * @request POST:/user/migrations + */ + export namespace MigrationsStartForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = MigrationsStartForAuthenticatedUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsStartForAuthenticatedUserData; + } + /** + * @description Unlocks a repository. You can lock repositories when you [start a user migration](https://docs.github.com/rest/reference/migrations#start-a-user-migration). Once the migration is complete you can unlock each repository to begin using it again or [delete the repository](https://docs.github.com/rest/reference/repos#delete-a-repository) if you no longer need the source data. Returns a status of \`404 Not Found\` if the repository is not locked. + * @tags migrations + * @name MigrationsUnlockRepoForAuthenticatedUser + * @summary Unlock a user repository + * @request DELETE:/user/migrations/{migration_id}/repos/{repo_name}/lock + */ + export namespace MigrationsUnlockRepoForAuthenticatedUser { + export type RequestParams = { + /** migration_id parameter */ + migrationId: number; + /** repo_name parameter */ + repoName: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MigrationsUnlockRepoForAuthenticatedUserData; + } + /** + * No description + * @tags orgs + * @name OrgsGetMembershipForAuthenticatedUser + * @summary Get an organization membership for the authenticated user + * @request GET:/user/memberships/orgs/{org} + */ + export namespace OrgsGetMembershipForAuthenticatedUser { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsGetMembershipForAuthenticatedUserData; + } + /** + * @description List organizations for the authenticated user. **OAuth scope requirements** This only lists organizations that your authorization allows you to operate on in some way (e.g., you can list teams with \`read:org\` scope, you can publicize your organization membership with \`user\` scope, etc.). Therefore, this API requires at least \`user\` or \`read:org\` scope. OAuth requests with insufficient scope receive a \`403 Forbidden\` response. + * @tags orgs + * @name OrgsListForAuthenticatedUser + * @summary List organizations for the authenticated user + * @request GET:/user/orgs + */ + export namespace OrgsListForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListForAuthenticatedUserData; + } + /** + * No description + * @tags orgs + * @name OrgsListMembershipsForAuthenticatedUser + * @summary List organization memberships for the authenticated user + * @request GET:/user/memberships/orgs + */ + export namespace OrgsListMembershipsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Indicates the state of the memberships to return. Can be either \`active\` or \`pending\`. If not specified, the API returns both active and pending memberships. */ + state?: OrgsListMembershipsForAuthenticatedUserParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListMembershipsForAuthenticatedUserData; + } + /** + * No description + * @tags orgs + * @name OrgsUpdateMembershipForAuthenticatedUser + * @summary Update an organization membership for the authenticated user + * @request PATCH:/user/memberships/orgs/{org} + */ + export namespace OrgsUpdateMembershipForAuthenticatedUser { + export type RequestParams = { + org: string; + }; + export type RequestQuery = {}; + export type RequestBody = OrgsUpdateMembershipForAuthenticatedUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = OrgsUpdateMembershipForAuthenticatedUserData; + } + /** + * No description + * @tags projects + * @name ProjectsCreateForAuthenticatedUser + * @summary Create a user project + * @request POST:/user/projects + */ + export namespace ProjectsCreateForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ProjectsCreateForAuthenticatedUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsCreateForAuthenticatedUserData; + } + /** + * No description + * @tags repos + * @name ReposAcceptInvitation + * @summary Accept a repository invitation + * @request PATCH:/user/repository_invitations/{invitation_id} + */ + export namespace ReposAcceptInvitation { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposAcceptInvitationData; + } + /** + * @description Creates a new repository for the authenticated user. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * @tags repos + * @name ReposCreateForAuthenticatedUser + * @summary Create a repository for the authenticated user + * @request POST:/user/repos + */ + export namespace ReposCreateForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ReposCreateForAuthenticatedUserPayload; + export type RequestHeaders = {}; + export type ResponseBody = ReposCreateForAuthenticatedUserData; + } + /** + * No description + * @tags repos + * @name ReposDeclineInvitation + * @summary Decline a repository invitation + * @request DELETE:/user/repository_invitations/{invitation_id} + */ + export namespace ReposDeclineInvitation { + export type RequestParams = { + /** invitation_id parameter */ + invitationId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposDeclineInvitationData; + } + /** + * @description Lists repositories that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. + * @tags repos + * @name ReposListForAuthenticatedUser + * @summary List repositories for the authenticated user + * @request GET:/user/repos + */ + export namespace ReposListForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Comma-separated list of values. Can include: + * \\* \`owner\`: Repositories that are owned by the authenticated user. + * \\* \`collaborator\`: Repositories that the user has been added to as a collaborator. + * \\* \`organization_member\`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on. + * @default "owner,collaborator,organization_member" + */ + affiliation?: string; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ + direction?: ReposListForAuthenticatedUserParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ + sort?: ReposListForAuthenticatedUserParams1SortEnum; + /** + * Can be one of \`all\`, \`owner\`, \`public\`, \`private\`, \`member\`. Default: \`all\` + * + * Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. Will cause a \`422\` error if used in the same request as **visibility** or **affiliation**. + * @default "all" + */ + type?: ReposListForAuthenticatedUserParams1TypeEnum; + /** + * Can be one of \`all\`, \`public\`, or \`private\`. + * @default "all" + */ + visibility?: ReposListForAuthenticatedUserParams1VisibilityEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListForAuthenticatedUserData; + } + /** + * @description When authenticating as a user, this endpoint will list all currently open repository invitations for that user. + * @tags repos + * @name ReposListInvitationsForAuthenticatedUser + * @summary List repository invitations for the authenticated user + * @request GET:/user/repository_invitations + */ + export namespace ReposListInvitationsForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListInvitationsForAuthenticatedUserData; + } + /** + * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires \`user\`, \`repo\`, or \`read:org\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/) when authenticating via [OAuth](https://docs.github.com/apps/building-oauth-apps/). + * @tags teams + * @name TeamsListForAuthenticatedUser + * @summary List teams for the authenticated user + * @request GET:/user/teams + */ + export namespace TeamsListForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TeamsListForAuthenticatedUserData; + } + /** + * @description This endpoint is accessible with the \`user\` scope. + * @tags users + * @name UsersAddEmailForAuthenticated + * @summary Add an email address for the authenticated user + * @request POST:/user/emails + */ + export namespace UsersAddEmailForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersAddEmailForAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersAddEmailForAuthenticatedData; + } + /** + * No description + * @tags users + * @name UsersBlock + * @summary Block a user + * @request PUT:/user/blocks/{username} + */ + export namespace UsersBlock { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersBlockData; + } + /** + * No description + * @tags users + * @name UsersCheckBlocked + * @summary Check if a user is blocked by the authenticated user + * @request GET:/user/blocks/{username} + */ + export namespace UsersCheckBlocked { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersCheckBlockedData; + } + /** + * No description + * @tags users + * @name UsersCheckPersonIsFollowedByAuthenticated + * @summary Check if a person is followed by the authenticated user + * @request GET:/user/following/{username} + */ + export namespace UsersCheckPersonIsFollowedByAuthenticated { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersCheckPersonIsFollowedByAuthenticatedData; + } + /** + * @description Adds a GPG key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least \`write:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersCreateGpgKeyForAuthenticated + * @summary Create a GPG key for the authenticated user + * @request POST:/user/gpg_keys + */ + export namespace UsersCreateGpgKeyForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersCreateGpgKeyForAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersCreateGpgKeyForAuthenticatedData; + } + /** + * @description Adds a public SSH key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least \`write:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersCreatePublicSshKeyForAuthenticated + * @summary Create a public SSH key for the authenticated user + * @request POST:/user/keys + */ + export namespace UsersCreatePublicSshKeyForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersCreatePublicSshKeyForAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersCreatePublicSshKeyForAuthenticatedData; + } + /** + * @description This endpoint is accessible with the \`user\` scope. + * @tags users + * @name UsersDeleteEmailForAuthenticated + * @summary Delete an email address for the authenticated user + * @request DELETE:/user/emails + */ + export namespace UsersDeleteEmailForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersDeleteEmailForAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersDeleteEmailForAuthenticatedData; + } + /** + * @description Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersDeleteGpgKeyForAuthenticated + * @summary Delete a GPG key for the authenticated user + * @request DELETE:/user/gpg_keys/{gpg_key_id} + */ + export namespace UsersDeleteGpgKeyForAuthenticated { + export type RequestParams = { + /** gpg_key_id parameter */ + gpgKeyId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersDeleteGpgKeyForAuthenticatedData; + } + /** + * @description Removes a public SSH key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersDeletePublicSshKeyForAuthenticated + * @summary Delete a public SSH key for the authenticated user + * @request DELETE:/user/keys/{key_id} + */ + export namespace UsersDeletePublicSshKeyForAuthenticated { + export type RequestParams = { + /** key_id parameter */ + keyId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersDeletePublicSshKeyForAuthenticatedData; + } + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. + * @tags users + * @name UsersFollow + * @summary Follow a user + * @request PUT:/user/following/{username} + */ + export namespace UsersFollow { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersFollowData; + } + /** + * @description If the authenticated user is authenticated through basic authentication or OAuth with the \`user\` scope, then the response lists public and private profile information. If the authenticated user is authenticated through OAuth without the \`user\` scope, then the response lists only public profile information. + * @tags users + * @name UsersGetAuthenticated + * @summary Get the authenticated user + * @request GET:/user + */ + export namespace UsersGetAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersGetAuthenticatedData; + } + /** + * @description View extended details for a single GPG key. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersGetGpgKeyForAuthenticated + * @summary Get a GPG key for the authenticated user + * @request GET:/user/gpg_keys/{gpg_key_id} + */ + export namespace UsersGetGpgKeyForAuthenticated { + export type RequestParams = { + /** gpg_key_id parameter */ + gpgKeyId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersGetGpgKeyForAuthenticatedData; + } + /** + * @description View extended details for a single public SSH key. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersGetPublicSshKeyForAuthenticated + * @summary Get a public SSH key for the authenticated user + * @request GET:/user/keys/{key_id} + */ + export namespace UsersGetPublicSshKeyForAuthenticated { + export type RequestParams = { + /** key_id parameter */ + keyId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersGetPublicSshKeyForAuthenticatedData; + } + /** + * @description List the users you've blocked on your personal account. + * @tags users + * @name UsersListBlockedByAuthenticated + * @summary List users blocked by the authenticated user + * @request GET:/user/blocks + */ + export namespace UsersListBlockedByAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListBlockedByAuthenticatedData; + } + /** + * @description Lists all of your email addresses, and specifies which one is visible to the public. This endpoint is accessible with the \`user:email\` scope. + * @tags users + * @name UsersListEmailsForAuthenticated + * @summary List email addresses for the authenticated user + * @request GET:/user/emails + */ + export namespace UsersListEmailsForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListEmailsForAuthenticatedData; + } + /** + * @description Lists the people who the authenticated user follows. + * @tags users + * @name UsersListFollowedByAuthenticated + * @summary List the people the authenticated user follows + * @request GET:/user/following + */ + export namespace UsersListFollowedByAuthenticated { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListFollowedByAuthenticatedData; + } + /** + * @description Lists the people following the authenticated user. + * @tags users + * @name UsersListFollowersForAuthenticatedUser + * @summary List followers of the authenticated user + * @request GET:/user/followers + */ + export namespace UsersListFollowersForAuthenticatedUser { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListFollowersForAuthenticatedUserData; + } + /** + * @description Lists the current user's GPG keys. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersListGpgKeysForAuthenticated + * @summary List GPG keys for the authenticated user + * @request GET:/user/gpg_keys + */ + export namespace UsersListGpgKeysForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListGpgKeysForAuthenticatedData; + } + /** + * @description Lists your publicly visible email address, which you can set with the [Set primary email visibility for the authenticated user](https://docs.github.com/rest/reference/users#set-primary-email-visibility-for-the-authenticated-user) endpoint. This endpoint is accessible with the \`user:email\` scope. + * @tags users + * @name UsersListPublicEmailsForAuthenticated + * @summary List public email addresses for the authenticated user + * @request GET:/user/public_emails + */ + export namespace UsersListPublicEmailsForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListPublicEmailsForAuthenticatedData; + } + /** + * @description Lists the public SSH keys for the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @tags users + * @name UsersListPublicSshKeysForAuthenticated + * @summary List public SSH keys for the authenticated user + * @request GET:/user/keys + */ + export namespace UsersListPublicSshKeysForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListPublicSshKeysForAuthenticatedData; + } + /** + * @description Sets the visibility for your primary email addresses. + * @tags users + * @name UsersSetPrimaryEmailVisibilityForAuthenticated + * @summary Set primary email visibility for the authenticated user + * @request PATCH:/user/email/visibility + */ + export namespace UsersSetPrimaryEmailVisibilityForAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersSetPrimaryEmailVisibilityForAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersSetPrimaryEmailVisibilityForAuthenticatedData; + } + /** + * No description + * @tags users + * @name UsersUnblock + * @summary Unblock a user + * @request DELETE:/user/blocks/{username} + */ + export namespace UsersUnblock { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersUnblockData; + } + /** + * @description Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. + * @tags users + * @name UsersUnfollow + * @summary Unfollow a user + * @request DELETE:/user/following/{username} + */ + export namespace UsersUnfollow { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersUnfollowData; + } + /** + * @description **Note:** If your email is set to private and you send an \`email\` parameter as part of this request to update your profile, your privacy settings are still enforced: the email address will not be displayed on your public profile or via the API. + * @tags users + * @name UsersUpdateAuthenticated + * @summary Update the authenticated user + * @request PATCH:/user + */ + export namespace UsersUpdateAuthenticated { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = UsersUpdateAuthenticatedPayload; + export type RequestHeaders = {}; + export type ResponseBody = UsersUpdateAuthenticatedData; + } +} + +export namespace Users { + /** + * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. + * @tags activity + * @name ActivityListEventsForAuthenticatedUser + * @summary List events for the authenticated user + * @request GET:/users/{username}/events + */ + export namespace ActivityListEventsForAuthenticatedUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListEventsForAuthenticatedUserData; + } + /** + * @description This is the user's organization dashboard. You must be authenticated as the user to view this. + * @tags activity + * @name ActivityListOrgEventsForAuthenticatedUser + * @summary List organization events for the authenticated user + * @request GET:/users/{username}/events/orgs/{org} + */ + export namespace ActivityListOrgEventsForAuthenticatedUser { + export type RequestParams = { + org: string; + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListOrgEventsForAuthenticatedUserData; + } + /** + * No description + * @tags activity + * @name ActivityListPublicEventsForUser + * @summary List public events for a user + * @request GET:/users/{username}/events/public + */ + export namespace ActivityListPublicEventsForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListPublicEventsForUserData; + } + /** + * @description These are events that you've received by watching repos and following users. If you are authenticated as the given user, you will see private events. Otherwise, you'll only see public events. + * @tags activity + * @name ActivityListReceivedEventsForUser + * @summary List events received by the authenticated user + * @request GET:/users/{username}/received_events + */ + export namespace ActivityListReceivedEventsForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListReceivedEventsForUserData; + } + /** + * No description + * @tags activity + * @name ActivityListReceivedPublicEventsForUser + * @summary List public events received by a user + * @request GET:/users/{username}/received_events/public + */ + export namespace ActivityListReceivedPublicEventsForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListReceivedPublicEventsForUserData; + } + /** + * @description Lists repositories a user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * @tags activity + * @name ActivityListReposStarredByUser + * @summary List repositories starred by a user + * @request GET:/users/{username}/starred + */ + export namespace ActivityListReposStarredByUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: ActivityListReposStarredByUserParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: ActivityListReposStarredByUserParams1SortEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListReposStarredByUserData; + } + /** + * @description Lists repositories a user is watching. + * @tags activity + * @name ActivityListReposWatchedByUser + * @summary List repositories watched by a user + * @request GET:/users/{username}/subscriptions + */ + export namespace ActivityListReposWatchedByUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ActivityListReposWatchedByUserData; + } + /** + * @description Enables an authenticated GitHub App to find the user’s installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @tags apps + * @name AppsGetUserInstallation + * @summary Get a user installation for the authenticated app + * @request GET:/users/{username}/installation + */ + export namespace AppsGetUserInstallation { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AppsGetUserInstallationData; + } + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the \`user\` scope. + * @tags billing + * @name BillingGetGithubActionsBillingUser + * @summary Get GitHub Actions billing for a user + * @request GET:/users/{username}/settings/billing/actions + */ + export namespace BillingGetGithubActionsBillingUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubActionsBillingUserData; + } + /** + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. + * @tags billing + * @name BillingGetGithubPackagesBillingUser + * @summary Get GitHub Packages billing for a user + * @request GET:/users/{username}/settings/billing/packages + */ + export namespace BillingGetGithubPackagesBillingUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetGithubPackagesBillingUserData; + } + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. + * @tags billing + * @name BillingGetSharedStorageBillingUser + * @summary Get shared storage billing for a user + * @request GET:/users/{username}/settings/billing/shared-storage + */ + export namespace BillingGetSharedStorageBillingUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = BillingGetSharedStorageBillingUserData; + } + /** + * @description Lists public gists for the specified user: + * @tags gists + * @name GistsListForUser + * @summary List gists for a user + * @request GET:/users/{username}/gists + */ + export namespace GistsListForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GistsListForUserData; + } + /** + * @description List [public organization memberships](https://help.github.com/articles/publicizing-or-concealing-organization-membership) for the specified user. This method only lists _public_ memberships, regardless of authentication. If you need to fetch all of the organization memberships (public and private) for the authenticated user, use the [List organizations for the authenticated user](https://docs.github.com/rest/reference/orgs#list-organizations-for-the-authenticated-user) API instead. + * @tags orgs + * @name OrgsListForUser + * @summary List organizations for a user + * @request GET:/users/{username}/orgs + */ + export namespace OrgsListForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = OrgsListForUserData; + } + /** + * No description + * @tags projects + * @name ProjectsListForUser + * @summary List user projects + * @request GET:/users/{username}/projects + */ + export namespace ProjectsListForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: ProjectsListForUserParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProjectsListForUserData; + } + /** + * @description Lists public repositories for the specified user. + * @tags repos + * @name ReposListForUser + * @summary List repositories for a user + * @request GET:/users/{username}/repos + */ + export namespace ReposListForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ + direction?: ReposListForUserParams1DirectionEnum; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "full_name" + */ + sort?: ReposListForUserParams1SortEnum; + /** + * Can be one of \`all\`, \`owner\`, \`member\`. + * @default "owner" + */ + type?: ReposListForUserParams1TypeEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ReposListForUserData; + } + /** + * No description + * @tags users + * @name UsersCheckFollowingForUser + * @summary Check if a user follows another user + * @request GET:/users/{username}/following/{target_user} + */ + export namespace UsersCheckFollowingForUser { + export type RequestParams = { + targetUser: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersCheckFollowingForUserData; + } + /** + * @description Provides publicly available information about someone with a GitHub account. GitHub Apps with the \`Plan\` user permission can use this endpoint to retrieve information about a user's GitHub plan. The GitHub App must be authenticated as a user. See "[Identifying and authorizing users for GitHub Apps](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)" for details about authentication. For an example response, see 'Response with GitHub plan information' below" The \`email\` key in the following response is the publicly visible email address from your GitHub [profile page](https://github.com/settings/profile). When setting up your profile, you can select a primary email address to be “public” which provides an email entry for this endpoint. If you do not set a public email address for \`email\`, then it will have a value of \`null\`. You only see publicly visible email addresses when authenticated with GitHub. For more information, see [Authentication](https://docs.github.com/rest/overview/resources-in-the-rest-api#authentication). The Emails API enables you to list all of your email addresses, and toggle a primary email to be visible publicly. For more information, see "[Emails API](https://docs.github.com/rest/reference/users#emails)". + * @tags users + * @name UsersGetByUsername + * @summary Get a user + * @request GET:/users/{username} + */ + export namespace UsersGetByUsername { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersGetByUsernameData; + } + /** + * @description Provides hovercard information when authenticated through basic auth or OAuth with the \`repo\` scope. You can find out more about someone in relation to their pull requests, issues, repositories, and organizations. The \`subject_type\` and \`subject_id\` parameters provide context for the person's hovercard, which returns more information than without the parameters. For example, if you wanted to find out more about \`octocat\` who owns the \`Spoon-Knife\` repository via cURL, it would look like this: \`\`\`shell curl -u username:token https://api.github.com/users/octocat/hovercard?subject_type=repository&subject_id=1300192 \`\`\` + * @tags users + * @name UsersGetContextForUser + * @summary Get contextual information for a user + * @request GET:/users/{username}/hovercard + */ + export namespace UsersGetContextForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** Uses the ID for the \`subject_type\` you specified. **Required** when using \`subject_type\`. */ + subject_id?: string; + /** Identifies which additional information you'd like to receive about the person's hovercard. Can be \`organization\`, \`repository\`, \`issue\`, \`pull_request\`. **Required** when using \`subject_id\`. */ + subject_type?: UsersGetContextForUserParams1SubjectTypeEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersGetContextForUserData; + } + /** + * @description Lists all users, in the order that they signed up on GitHub. This list includes personal user accounts and organization accounts. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of users. + * @tags users + * @name UsersList + * @summary List users + * @request GET:/users + */ + export namespace UsersList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListData; + } + /** + * @description Lists the people following the specified user. + * @tags users + * @name UsersListFollowersForUser + * @summary List followers of a user + * @request GET:/users/{username}/followers + */ + export namespace UsersListFollowersForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListFollowersForUserData; + } + /** + * @description Lists the people who the specified user follows. + * @tags users + * @name UsersListFollowingForUser + * @summary List the people a user follows + * @request GET:/users/{username}/following + */ + export namespace UsersListFollowingForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListFollowingForUserData; + } + /** + * @description Lists the GPG keys for a user. This information is accessible by anyone. + * @tags users + * @name UsersListGpgKeysForUser + * @summary List GPG keys for a user + * @request GET:/users/{username}/gpg_keys + */ + export namespace UsersListGpgKeysForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListGpgKeysForUserData; + } + /** + * @description Lists the _verified_ public SSH keys for a user. This is accessible by anyone. + * @tags users + * @name UsersListPublicKeysForUser + * @summary List public keys for a user + * @request GET:/users/{username}/keys + */ + export namespace UsersListPublicKeysForUser { + export type RequestParams = { + username: string; + }; + export type RequestQuery = { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = UsersListPublicKeysForUserData; + } +} + +export namespace Zen { + /** + * @description Get a random sentence from the Zen of GitHub + * @tags meta + * @name MetaGetZen + * @summary Get the Zen of GitHub + * @request GET:/zen + */ + export namespace MetaGetZen { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MetaGetZenData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.github.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title GitHub v3 REST API + * @version 1.1.4 + * @license MIT (https://spdx.org/licenses/MIT) + * @termsOfService https://docs.github.com/articles/github-terms-of-service + * @baseUrl https://api.github.com + * @externalDocs https://docs.github.com/rest/ + * @contact Support (https://support.github.com/contact) + * + * GitHub's v3 REST API. + */ +export class Api extends HttpClient { + /** + * @description Get Hypermedia links to resources accessible in GitHub's REST API + * + * @tags meta + * @name MetaRoot + * @summary GitHub API Root + * @request GET:/ + */ + metaRoot = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + ...params, + }); + + app = { + /** + * @description Creates an installation access token that enables a GitHub App to make authenticated API requests for the app's installation on an organization or individual account. Installation tokens expire one hour from the time you create them. Using an expired token produces a status code of \`401 - Unauthorized\`, and requires creating a new installation token. By default the installation token has access to all repositories that the installation can access. To restrict the access to specific repositories, you can provide the \`repository_ids\` when creating the token. When you omit \`repository_ids\`, the response does not contain the \`repositories\` key. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsCreateInstallationAccessToken + * @summary Create an installation access token for an app + * @request POST:/app/installations/{installation_id}/access_tokens + */ + appsCreateInstallationAccessToken: ( + installationId: number, + data: AppsCreateInstallationAccessTokenPayload, + params: RequestParams = {}, + ) => + this.request< + AppsCreateInstallationAccessTokenData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/app/installations/\${installationId}/access_tokens\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Uninstalls a GitHub App on a user, organization, or business account. If you prefer to temporarily suspend an app's access to your account's resources, then we recommend the "[Suspend an app installation](https://docs.github.com/v3/apps/#suspend-an-app-installation)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsDeleteInstallation + * @summary Delete an installation for the authenticated app + * @request DELETE:/app/installations/{installation_id} + */ + appsDeleteInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns the GitHub App associated with the authentication credentials used. To see how many app installations are associated with this GitHub App, see the \`installations_count\` in the response. For more details about your app's installations, see the "[List installations for the authenticated app](https://docs.github.com/rest/reference/apps#list-installations-for-the-authenticated-app)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetAuthenticated + * @summary Get the authenticated app + * @request GET:/app + */ + appsGetAuthenticated: (params: RequestParams = {}) => + this.request({ + path: \`/app\`, + method: "GET", + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find an installation's information using the installation id. The installation's account type (\`target_type\`) will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetInstallation + * @summary Get an installation for the authenticated app + * @request GET:/app/installations/{installation_id} + */ + appsGetInstallation: (installationId: number, params: RequestParams = {}) => + this.request< + AppsGetInstallationData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/app/installations/\${installationId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetWebhookConfigForApp + * @summary Get a webhook configuration for an app + * @request GET:/app/hook/config + */ + appsGetWebhookConfigForApp: (params: RequestParams = {}) => + this.request({ + path: \`/app/hook/config\`, + method: "GET", + ...params, + }), + + /** + * @description You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. The permissions the installation has are included under the \`permissions\` key. + * + * @tags apps + * @name AppsListInstallations + * @summary List installations for the authenticated app + * @request GET:/app/installations + */ + appsListInstallations: (query: AppsListInstallationsParams, params: RequestParams = {}) => + this.request({ + path: \`/app/installations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsSuspendInstallation + * @summary Suspend an app installation + * @request PUT:/app/installations/{installation_id}/suspended + */ + appsSuspendInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}/suspended\`, + method: "PUT", + ...params, + }), + + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Removes a GitHub App installation suspension. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsUnsuspendInstallation + * @summary Unsuspend an app installation + * @request DELETE:/app/installations/{installation_id}/suspended + */ + appsUnsuspendInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}/suspended\`, + method: "DELETE", + ...params, + }), + + /** + * @description Updates the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsUpdateWebhookConfigForApp + * @summary Update a webhook configuration for an app + * @request PATCH:/app/hook/config + */ + appsUpdateWebhookConfigForApp: (data: AppsUpdateWebhookConfigForAppPayload, params: RequestParams = {}) => + this.request({ + path: \`/app/hook/config\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + appManifests = { + /** + * @description Use this endpoint to complete the handshake necessary when implementing the [GitHub App Manifest flow](https://docs.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/). When you create a GitHub App with the manifest flow, you receive a temporary \`code\` used to retrieve the GitHub App's \`id\`, \`pem\` (private key), and \`webhook_secret\`. + * + * @tags apps + * @name AppsCreateFromManifest + * @summary Create a GitHub App from a manifest + * @request POST:/app-manifests/{code}/conversions + */ + appsCreateFromManifest: (code: string, params: RequestParams = {}) => + this.request({ + path: \`/app-manifests/\${code}/conversions\`, + method: "POST", + ...params, + }), + }; + applications = { + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsCheckAuthorization + * @summary Check an authorization + * @request GET:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsCheckAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "GET", + ...params, + }), + + /** + * @description OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) to use this endpoint, where the username is the OAuth application \`client_id\` and the password is its \`client_secret\`. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsCheckToken + * @summary Check a token + * @request POST:/applications/{client_id}/token + */ + appsCheckToken: (clientId: string, data: AppsCheckTokenPayload, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid OAuth \`access_token\` as an input parameter and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * + * @tags apps + * @name AppsDeleteAuthorization + * @summary Delete an app authorization + * @request DELETE:/applications/{client_id}/grant + */ + appsDeleteAuthorization: (clientId: string, data: AppsDeleteAuthorizationPayload, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/grant\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * + * @tags apps + * @name AppsDeleteToken + * @summary Delete an app token + * @request DELETE:/applications/{client_id}/token + */ + appsDeleteToken: (clientId: string, data: AppsDeleteTokenPayload, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsResetAuthorization + * @summary Reset an authorization + * @request POST:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsResetAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "POST", + ...params, + }), + + /** + * @description OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsResetToken + * @summary Reset a token + * @request PATCH:/applications/{client_id}/token + */ + appsResetToken: (clientId: string, data: AppsResetTokenPayload, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * + * @tags apps + * @name AppsRevokeAuthorizationForApplication + * @summary Revoke an authorization for an application + * @request DELETE:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsRevokeAuthorizationForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid token as \`:access_token\` and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized). + * + * @tags apps + * @name AppsRevokeGrantForApplication + * @summary Revoke a grant for an application + * @request DELETE:/applications/{client_id}/grants/{access_token} + * @deprecated + */ + appsRevokeGrantForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/grants/\${accessToken}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Exchanges a non-repository scoped user-to-server OAuth access token for a repository scoped user-to-server OAuth access token. You can specify which repositories the token can access and which permissions are granted to the token. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsScopeToken + * @summary Create a scoped access token + * @request POST:/applications/{client_id}/token/scoped + */ + appsScopeToken: (clientId: string, data: AppsScopeTokenPayload, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/token/scoped\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteGrant + * @summary Delete a grant + * @request DELETE:/applications/grants/{grant_id} + * @deprecated + */ + oauthAuthorizationsDeleteGrant: (grantId: number, params: RequestParams = {}) => + this.request({ + path: \`/applications/grants/\${grantId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetGrant + * @summary Get a single grant + * @request GET:/applications/grants/{grant_id} + * @deprecated + */ + oauthAuthorizationsGetGrant: (grantId: number, params: RequestParams = {}) => + this.request({ + path: \`/applications/grants/\${grantId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the [list your authorizations](https://docs.github.com/rest/reference/oauth-authorizations#list-your-authorizations) API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). The \`scopes\` returned are the union of scopes authorized for the application. For example, if an application has one token with \`repo\` scope and another token with \`user\` scope, the grant will return \`["repo", "user"]\`. + * + * @tags oauth-authorizations + * @name OauthAuthorizationsListGrants + * @summary List your grants + * @request GET:/applications/grants + * @deprecated + */ + oauthAuthorizationsListGrants: (query: OauthAuthorizationsListGrantsParams, params: RequestParams = {}) => + this.request({ + path: \`/applications/grants\`, + method: "GET", + query: query, + ...params, + }), + }; + apps = { + /** + * @description **Note**: The \`:app_slug\` is just the URL-friendly name of your GitHub App. You can find this on the settings page for your GitHub App (e.g., \`https://github.com/settings/apps/:app_slug\`). If the GitHub App you specify is public, you can access this endpoint without authenticating. If the GitHub App you specify is private, you must authenticate with a [personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsGetBySlug + * @summary Get an app + * @request GET:/apps/{app_slug} + */ + appsGetBySlug: (appSlug: string, params: RequestParams = {}) => + this.request< + AppsGetBySlugData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/apps/\${appSlug}\`, + method: "GET", + ...params, + }), + }; + authorizations = { + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates OAuth tokens using [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use \`fingerprint\` to differentiate between them. You can also create tokens on GitHub from the [personal access tokens settings](https://github.com/settings/tokens) page. Read more about these tokens in [the GitHub Help documentation](https://help.github.com/articles/creating-an-access-token-for-command-line-use). Organizations that enforce SAML SSO require personal access tokens to be allowed. Read more about allowing tokens in [the GitHub Help documentation](https://help.github.com/articles/about-identity-and-access-management-with-saml-single-sign-on). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsCreateAuthorization + * @summary Create a new authorization + * @request POST:/authorizations + * @deprecated + */ + oauthAuthorizationsCreateAuthorization: ( + data: OauthAuthorizationsCreateAuthorizationPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteAuthorization + * @summary Delete an authorization + * @request DELETE:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsDeleteAuthorization: (authorizationId: number, params: RequestParams = {}) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetAuthorization + * @summary Get a single authorization + * @request GET:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsGetAuthorization: (authorizationId: number, params: RequestParams = {}) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForApp + * @summary Get-or-create an authorization for a specific app + * @request PUT:/authorizations/clients/{client_id} + * @deprecated + */ + oauthAuthorizationsGetOrCreateAuthorizationForApp: ( + clientId: string, + data: OauthAuthorizationsGetOrCreateAuthorizationForAppPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/clients/\${clientId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. \`fingerprint\` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint + * @summary Get-or-create an authorization for a specific app and fingerprint + * @request PUT:/authorizations/clients/{client_id}/{fingerprint} + * @deprecated + */ + oauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint: ( + clientId: string, + fingerprint: string, + data: OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprintPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/clients/\${clientId}/\${fingerprint}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsListAuthorizations + * @summary List your authorizations + * @request GET:/authorizations + * @deprecated + */ + oauthAuthorizationsListAuthorizations: ( + query: OauthAuthorizationsListAuthorizationsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." You can only send one of these scope keys at a time. + * + * @tags oauth-authorizations + * @name OauthAuthorizationsUpdateAuthorization + * @summary Update an existing authorization + * @request PATCH:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsUpdateAuthorization: ( + authorizationId: number, + data: OauthAuthorizationsUpdateAuthorizationPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + codesOfConduct = { + /** + * No description + * + * @tags codes-of-conduct + * @name CodesOfConductGetAllCodesOfConduct + * @summary Get all codes of conduct + * @request GET:/codes_of_conduct + */ + codesOfConductGetAllCodesOfConduct: (params: RequestParams = {}) => + this.request< + CodesOfConductGetAllCodesOfConductData, + { + documentation_url: string; + message: string; + } + >({ + path: \`/codes_of_conduct\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags codes-of-conduct + * @name CodesOfConductGetConductCode + * @summary Get a code of conduct + * @request GET:/codes_of_conduct/{key} + */ + codesOfConductGetConductCode: (key: string, params: RequestParams = {}) => + this.request< + CodesOfConductGetConductCodeData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/codes_of_conduct/\${key}\`, + method: "GET", + ...params, + }), + }; + contentReferences = { + /** + * @description Creates an attachment under a content reference URL in the body or comment of an issue or pull request. Use the \`id\` of the content reference from the [\`content_reference\` event](https://docs.github.com/webhooks/event-payloads/#content_reference) to create an attachment. The app must create a content attachment within six hours of the content reference URL being posted. See "[Using content attachments](https://docs.github.com/apps/using-content-attachments/)" for details about content attachments. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsCreateContentAttachment + * @summary Create a content attachment + * @request POST:/content_references/{content_reference_id}/attachments + */ + appsCreateContentAttachment: ( + contentReferenceId: number, + data: AppsCreateContentAttachmentPayload, + params: RequestParams = {}, + ) => + this.request< + AppsCreateContentAttachmentData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/content_references/\${contentReferenceId}/attachments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + }; + emojis = { + /** + * @description Lists all the emojis available to use on GitHub. + * + * @tags emojis + * @name EmojisGet + * @summary Get emojis + * @request GET:/emojis + */ + emojisGet: (params: RequestParams = {}) => + this.request({ + path: \`/emojis\`, + method: "GET", + ...params, + }), + }; + enterprises = { + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an enterprise. To use this endpoint, you must be an enterprise admin, and you must use an access token with the \`admin:enterprise\` scope. + * + * @tags audit-log + * @name AuditLogGetAuditLog + * @summary Get the audit log for an enterprise + * @request GET:/enterprises/{enterprise}/audit-log + */ + auditLogGetAuditLog: ({ enterprise, ...query }: AuditLogGetAuditLogParams, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/audit-log\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetGithubActionsBillingGhe + * @summary Get GitHub Actions billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/actions + */ + billingGetGithubActionsBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetGithubPackagesBillingGhe + * @summary Get GitHub Packages billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/packages + */ + billingGetGithubPackagesBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/packages\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetSharedStorageBillingGhe + * @summary Get shared storage billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/shared-storage + */ + billingGetSharedStorageBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/shared-storage\`, + method: "GET", + ...params, + }), + + /** + * @description Adds an organization to the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Add organization access to a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + enterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations/\${orgId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Adds a self-hosted runner to a runner group configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminAddSelfHostedRunnerToGroupForEnterprise + * @summary Add a self-hosted runner to a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + enterpriseAdminAddSelfHostedRunnerToGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/enterprises/octo-enterprise --token TOKEN \`\`\` + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateRegistrationTokenForEnterprise + * @summary Create a registration token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/registration-token + */ + enterpriseAdminCreateRegistrationTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/registration-token\`, + method: "POST", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an enterprise. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an enterprise, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateRemoveTokenForEnterprise + * @summary Create a remove token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/remove-token + */ + enterpriseAdminCreateRemoveTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/remove-token\`, + method: "POST", + ...params, + }), + + /** + * @description Creates a new self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprise + * @summary Create a self-hosted runner group for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runner-groups + */ + enterpriseAdminCreateSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + data: EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Forces the removal of a self-hosted runner from an enterprise. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerFromEnterprise + * @summary Delete a self-hosted runner from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + enterpriseAdminDeleteSelfHostedRunnerFromEnterprise: ( + enterprise: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deletes a self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise + * @summary Delete a self-hosted runner group from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise: ( + enterprise: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes an organization from the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise + * @summary Disable a selected organization for GitHub Actions in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + enterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise: ( + enterprise: string, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations/\${orgId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Adds an organization to the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise + * @summary Enable a selected organization for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + enterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise: ( + enterprise: string, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations/\${orgId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Gets the selected actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetAllowedActionsEnterprise + * @summary Get allowed actions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + enterpriseAdminGetAllowedActionsEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/selected-actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetGithubActionsPermissionsEnterprise + * @summary Get GitHub Actions permissions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions + */ + enterpriseAdminGetGithubActionsPermissionsEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerForEnterprise + * @summary Get a self-hosted runner for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + enterpriseAdminGetSelfHostedRunnerForEnterprise: ( + enterprise: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/\${runnerId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerGroupForEnterprise + * @summary Get a self-hosted runner group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminGetSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the organizations with access to a self-hosted runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary List organization access to a self-hosted runner group in an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + enterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + { enterprise, runnerGroupId, ...query }: EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListRunnerApplicationsForEnterprise + * @summary List runner applications for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/downloads + */ + enterpriseAdminListRunnerApplicationsForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/downloads\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the organizations that are selected to have GitHub Actions enabled in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary List selected organizations enabled for GitHub Actions in an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/organizations + */ + enterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise: ( + { enterprise, ...query }: EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all self-hosted runner groups for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnerGroupsForEnterprise + * @summary List self-hosted runner groups for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups + */ + enterpriseAdminListSelfHostedRunnerGroupsForEnterprise: ( + { enterprise, ...query }: EnterpriseAdminListSelfHostedRunnerGroupsForEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all self-hosted runners configured for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersForEnterprise + * @summary List self-hosted runners for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners + */ + enterpriseAdminListSelfHostedRunnersForEnterprise: ( + { enterprise, ...query }: EnterpriseAdminListSelfHostedRunnersForEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the self-hosted runners that are in a specific enterprise group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersInGroupForEnterprise + * @summary List self-hosted runners in a group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + enterpriseAdminListSelfHostedRunnersInGroupForEnterprise: ( + { enterprise, runnerGroupId, ...query }: EnterpriseAdminListSelfHostedRunnersInGroupForEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Removes an organization from the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Remove organization access to a self-hosted runner group in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + enterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations/\${orgId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes a self-hosted runner from a group configured in an enterprise. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise + * @summary Remove a self-hosted runner from a group for an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + enterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Sets the actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetAllowedActionsEnterprise + * @summary Set allowed actions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + enterpriseAdminSetAllowedActionsEnterprise: ( + enterprise: string, + data: SelectedActions, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/selected-actions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Sets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetGithubActionsPermissionsEnterprise + * @summary Set GitHub Actions permissions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions + */ + enterpriseAdminSetGithubActionsPermissionsEnterprise: ( + enterprise: string, + data: EnterpriseAdminSetGithubActionsPermissionsEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces the list of organizations that have access to a self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Set organization access for a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + enterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary Set selected organizations enabled for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations + */ + enterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise: ( + enterprise: string, + data: EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces the list of self-hosted runners that are part of an enterprise runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprise + * @summary Set self-hosted runners in a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + enterpriseAdminSetSelfHostedRunnersInGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates the \`name\` and \`visibility\` of a self-hosted runner group in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise + * @summary Update a self-hosted runner group for an enterprise + * @request PATCH:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprisePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + events = { + /** + * @description We delay the public events feed by five minutes, which means the most recent event returned by the public events API actually occurred at least five minutes ago. + * + * @tags activity + * @name ActivityListPublicEvents + * @summary List public events + * @request GET:/events + */ + activityListPublicEvents: (query: ActivityListPublicEventsParams, params: RequestParams = {}) => + this.request< + ActivityListPublicEventsData, + | BasicError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/events\`, + method: "GET", + query: query, + ...params, + }), + }; + feeds = { + /** + * @description GitHub provides several timeline resources in [Atom](http://en.wikipedia.org/wiki/Atom_(standard)) format. The Feeds API lists all the feeds available to the authenticated user: * **Timeline**: The GitHub global public timeline * **User**: The public timeline for any user, using [URI template](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) * **Current user public**: The public timeline for the authenticated user * **Current user**: The private timeline for the authenticated user * **Current user actor**: The private timeline for activity created by the authenticated user * **Current user organizations**: The private timeline for the organizations the authenticated user is a member of. * **Security advisories**: A collection of public announcements that provide information about security-related vulnerabilities in software on GitHub. **Note**: Private feeds are only returned when [authenticating via Basic Auth](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) since current feed URIs use the older, non revocable auth tokens. + * + * @tags activity + * @name ActivityGetFeeds + * @summary Get feeds + * @request GET:/feeds + */ + activityGetFeeds: (params: RequestParams = {}) => + this.request({ + path: \`/feeds\`, + method: "GET", + ...params, + }), + }; + gists = { + /** + * No description + * + * @tags gists + * @name GistsCheckIsStarred + * @summary Check if a gist is starred + * @request GET:/gists/{gist_id}/star + */ + gistsCheckIsStarred: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "GET", + ...params, + }), + + /** + * @description Allows you to add a new gist with one or more files. **Note:** Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally. + * + * @tags gists + * @name GistsCreate + * @summary Create a gist + * @request POST:/gists + */ + gistsCreate: (data: GistsCreatePayload, params: RequestParams = {}) => + this.request({ + path: \`/gists\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsCreateComment + * @summary Create a gist comment + * @request POST:/gists/{gist_id}/comments + */ + gistsCreateComment: (gistId: string, data: GistsCreateCommentPayload, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsDelete + * @summary Delete a gist + * @request DELETE:/gists/{gist_id} + */ + gistsDelete: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsDeleteComment + * @summary Delete a gist comment + * @request DELETE:/gists/{gist_id}/comments/{comment_id} + */ + gistsDeleteComment: (gistId: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note**: This was previously \`/gists/:gist_id/fork\`. + * + * @tags gists + * @name GistsFork + * @summary Fork a gist + * @request POST:/gists/{gist_id}/forks + */ + gistsFork: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/forks\`, + method: "POST", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGet + * @summary Get a gist + * @request GET:/gists/{gist_id} + */ + gistsGet: (gistId: string, params: RequestParams = {}) => + this.request< + GistsGetData, + | { + block?: { + created_at?: string; + html_url?: string | null; + reason?: string; + }; + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/gists/\${gistId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGetComment + * @summary Get a gist comment + * @request GET:/gists/{gist_id}/comments/{comment_id} + */ + gistsGetComment: (gistId: string, commentId: number, params: RequestParams = {}) => + this.request< + GistsGetCommentData, + | { + block?: { + created_at?: string; + html_url?: string | null; + reason?: string; + }; + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGetRevision + * @summary Get a gist revision + * @request GET:/gists/{gist_id}/{sha} + */ + gistsGetRevision: (gistId: string, sha: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/\${sha}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the authenticated user's gists or if called anonymously, this endpoint returns all public gists: + * + * @tags gists + * @name GistsList + * @summary List gists for the authenticated user + * @request GET:/gists + */ + gistsList: (query: GistsListParams, params: RequestParams = {}) => + this.request({ + path: \`/gists\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListComments + * @summary List gist comments + * @request GET:/gists/{gist_id}/comments + */ + gistsListComments: ({ gistId, ...query }: GistsListCommentsParams, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListCommits + * @summary List gist commits + * @request GET:/gists/{gist_id}/commits + */ + gistsListCommits: ({ gistId, ...query }: GistsListCommitsParams, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/commits\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListForks + * @summary List gist forks + * @request GET:/gists/{gist_id}/forks + */ + gistsListForks: ({ gistId, ...query }: GistsListForksParams, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/forks\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List public gists sorted by most recently updated to least recently updated. Note: With [pagination](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination), you can fetch up to 3000 gists. For example, you can fetch 100 pages with 30 gists per page or 30 pages with 100 gists per page. + * + * @tags gists + * @name GistsListPublic + * @summary List public gists + * @request GET:/gists/public + */ + gistsListPublic: (query: GistsListPublicParams, params: RequestParams = {}) => + this.request({ + path: \`/gists/public\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the authenticated user's starred gists: + * + * @tags gists + * @name GistsListStarred + * @summary List starred gists + * @request GET:/gists/starred + */ + gistsListStarred: (query: GistsListStarredParams, params: RequestParams = {}) => + this.request({ + path: \`/gists/starred\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags gists + * @name GistsStar + * @summary Star a gist + * @request PUT:/gists/{gist_id}/star + */ + gistsStar: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsUnstar + * @summary Unstar a gist + * @request DELETE:/gists/{gist_id}/star + */ + gistsUnstar: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "DELETE", + ...params, + }), + + /** + * @description Allows you to update or delete a gist file and rename gist files. Files from the previous version of the gist that aren't explicitly changed during an edit are unchanged. + * + * @tags gists + * @name GistsUpdate + * @summary Update a gist + * @request PATCH:/gists/{gist_id} + */ + gistsUpdate: (gistId: string, data: GistsUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsUpdateComment + * @summary Update a gist comment + * @request PATCH:/gists/{gist_id}/comments/{comment_id} + */ + gistsUpdateComment: ( + gistId: string, + commentId: number, + data: GistsUpdateCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + gitignore = { + /** + * @description List all templates available to pass as an option when [creating a repository](https://docs.github.com/rest/reference/repos#create-a-repository-for-the-authenticated-user). + * + * @tags gitignore + * @name GitignoreGetAllTemplates + * @summary Get all gitignore templates + * @request GET:/gitignore/templates + */ + gitignoreGetAllTemplates: (params: RequestParams = {}) => + this.request({ + path: \`/gitignore/templates\`, + method: "GET", + ...params, + }), + + /** + * @description The API also allows fetching the source of a single template. Use the raw [media type](https://docs.github.com/rest/overview/media-types/) to get the raw contents. + * + * @tags gitignore + * @name GitignoreGetTemplate + * @summary Get a gitignore template + * @request GET:/gitignore/templates/{name} + */ + gitignoreGetTemplate: (name: string, params: RequestParams = {}) => + this.request({ + path: \`/gitignore/templates/\${name}\`, + method: "GET", + ...params, + }), + }; + installation = { + /** + * @description List repositories that an app installation can access. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsListReposAccessibleToInstallation + * @summary List repositories accessible to the app installation + * @request GET:/installation/repositories + */ + appsListReposAccessibleToInstallation: ( + query: AppsListReposAccessibleToInstallationParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/installation/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Revokes the installation token you're using to authenticate as an installation and access this endpoint. Once an installation token is revoked, the token is invalidated and cannot be used. Other endpoints that require the revoked installation token must have a new installation token to work. You can create a new token using the "[Create an installation access token for an app](https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app)" endpoint. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsRevokeInstallationAccessToken + * @summary Revoke an installation access token + * @request DELETE:/installation/token + */ + appsRevokeInstallationAccessToken: (params: RequestParams = {}) => + this.request({ + path: \`/installation/token\`, + method: "DELETE", + ...params, + }), + }; + issues = { + /** + * @description List issues assigned to the authenticated user across all visible repositories including owned repositories, member repositories, and organization repositories. You can use the \`filter\` query parameter to fetch issues that are not necessarily assigned to you. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesList + * @summary List issues assigned to the authenticated user + * @request GET:/issues + */ + issuesList: (query: IssuesListParams, params: RequestParams = {}) => + this.request({ + path: \`/issues\`, + method: "GET", + query: query, + ...params, + }), + }; + licenses = { + /** + * No description + * + * @tags licenses + * @name LicensesGet + * @summary Get a license + * @request GET:/licenses/{license} + */ + licensesGet: (license: string, params: RequestParams = {}) => + this.request({ + path: \`/licenses/\${license}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags licenses + * @name LicensesGetAllCommonlyUsed + * @summary Get all commonly used licenses + * @request GET:/licenses + */ + licensesGetAllCommonlyUsed: (query: LicensesGetAllCommonlyUsedParams, params: RequestParams = {}) => + this.request({ + path: \`/licenses\`, + method: "GET", + query: query, + ...params, + }), + }; + markdown = { + /** + * No description + * + * @tags markdown + * @name MarkdownRender + * @summary Render a Markdown document + * @request POST:/markdown + */ + markdownRender: (data: MarkdownRenderPayload, params: RequestParams = {}) => + this.request({ + path: \`/markdown\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You must send Markdown as plain text (using a \`Content-Type\` header of \`text/plain\` or \`text/x-markdown\`) to this endpoint, rather than using JSON format. In raw mode, [GitHub Flavored Markdown](https://github.github.com/gfm/) is not supported and Markdown will be rendered in plain format like a README.md file. Markdown content must be 400 KB or less. + * + * @tags markdown + * @name MarkdownRenderRaw + * @summary Render a Markdown document in raw mode + * @request POST:/markdown/raw + */ + markdownRenderRaw: (data: MarkdownRenderRawPayload, params: RequestParams = {}) => + this.request({ + path: \`/markdown/raw\`, + method: "POST", + body: data, + type: ContentType.Text, + ...params, + }), + }; + marketplaceListing = { + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsGetSubscriptionPlanForAccount + * @summary Get a subscription plan for an account + * @request GET:/marketplace_listing/accounts/{account_id} + */ + appsGetSubscriptionPlanForAccount: (accountId: number, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/accounts/\${accountId}\`, + method: "GET", + ...params, + }), + + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsGetSubscriptionPlanForAccountStubbed + * @summary Get a subscription plan for an account (stubbed) + * @request GET:/marketplace_listing/stubbed/accounts/{account_id} + */ + appsGetSubscriptionPlanForAccountStubbed: (accountId: number, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/stubbed/accounts/\${accountId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns user and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListAccountsForPlan + * @summary List accounts for a plan + * @request GET:/marketplace_listing/plans/{plan_id}/accounts + */ + appsListAccountsForPlan: ({ planId, ...query }: AppsListAccountsForPlanParams, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/plans/\${planId}/accounts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Returns repository and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListAccountsForPlanStubbed + * @summary List accounts for a plan (stubbed) + * @request GET:/marketplace_listing/stubbed/plans/{plan_id}/accounts + */ + appsListAccountsForPlanStubbed: ( + { planId, ...query }: AppsListAccountsForPlanStubbedParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/marketplace_listing/stubbed/plans/\${planId}/accounts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListPlans + * @summary List plans + * @request GET:/marketplace_listing/plans + */ + appsListPlans: (query: AppsListPlansParams, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/plans\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListPlansStubbed + * @summary List plans (stubbed) + * @request GET:/marketplace_listing/stubbed/plans + */ + appsListPlansStubbed: (query: AppsListPlansStubbedParams, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/stubbed/plans\`, + method: "GET", + query: query, + ...params, + }), + }; + meta = { + /** + * @description Returns meta information about GitHub, including a list of GitHub's IP addresses. For more information, see "[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/)." **Note:** The IP addresses shown in the documentation's response are only example values. You must always query the API directly to get the latest list of IP addresses. + * + * @tags meta + * @name MetaGet + * @summary Get GitHub meta information + * @request GET:/meta + */ + metaGet: (params: RequestParams = {}) => + this.request({ + path: \`/meta\`, + method: "GET", + ...params, + }), + }; + networks = { + /** + * No description + * + * @tags activity + * @name ActivityListPublicEventsForRepoNetwork + * @summary List public events for a network of repositories + * @request GET:/networks/{owner}/{repo}/events + */ + activityListPublicEventsForRepoNetwork: ( + { owner, repo, ...query }: ActivityListPublicEventsForRepoNetworkParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/networks/\${owner}/\${repo}/events\`, + method: "GET", + query: query, + ...params, + }), + }; + notifications = { + /** + * @description Mutes all future notifications for a conversation until you comment on the thread or get an **@mention**. If you are watching the repository of the thread, you will still receive notifications. To ignore future notifications for a repository you are watching, use the [Set a thread subscription](https://docs.github.com/rest/reference/activity#set-a-thread-subscription) endpoint and set \`ignore\` to \`true\`. + * + * @tags activity + * @name ActivityDeleteThreadSubscription + * @summary Delete a thread subscription + * @request DELETE:/notifications/threads/{thread_id}/subscription + */ + activityDeleteThreadSubscription: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityGetThread + * @summary Get a thread + * @request GET:/notifications/threads/{thread_id} + */ + activityGetThread: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}\`, + method: "GET", + ...params, + }), + + /** + * @description This checks to see if the current user is subscribed to a thread. You can also [get a repository subscription](https://docs.github.com/rest/reference/activity#get-a-repository-subscription). Note that subscriptions are only generated if a user is participating in a conversation--for example, they've replied to the thread, were **@mentioned**, or manually subscribe to a thread. + * + * @tags activity + * @name ActivityGetThreadSubscriptionForAuthenticatedUser + * @summary Get a thread subscription for the authenticated user + * @request GET:/notifications/threads/{thread_id}/subscription + */ + activityGetThreadSubscriptionForAuthenticatedUser: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "GET", + ...params, + }), + + /** + * @description List all notifications for the current user, sorted by most recently updated. + * + * @tags activity + * @name ActivityListNotificationsForAuthenticatedUser + * @summary List notifications for the authenticated user + * @request GET:/notifications + */ + activityListNotificationsForAuthenticatedUser: ( + query: ActivityListNotificationsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/notifications\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Marks all notifications as "read" removes it from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. + * + * @tags activity + * @name ActivityMarkNotificationsAsRead + * @summary Mark notifications as read + * @request PUT:/notifications + */ + activityMarkNotificationsAsRead: (data: ActivityMarkNotificationsAsReadPayload, params: RequestParams = {}) => + this.request({ + path: \`/notifications\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityMarkThreadAsRead + * @summary Mark a thread as read + * @request PATCH:/notifications/threads/{thread_id} + */ + activityMarkThreadAsRead: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}\`, + method: "PATCH", + ...params, + }), + + /** + * @description If you are watching a repository, you receive notifications for all threads by default. Use this endpoint to ignore future notifications for threads until you comment on the thread or get an **@mention**. You can also use this endpoint to subscribe to threads that you are currently not receiving notifications for or to subscribed to threads that you have previously ignored. Unsubscribing from a conversation in a repository that you are not watching is functionally equivalent to the [Delete a thread subscription](https://docs.github.com/rest/reference/activity#delete-a-thread-subscription) endpoint. + * + * @tags activity + * @name ActivitySetThreadSubscription + * @summary Set a thread subscription + * @request PUT:/notifications/threads/{thread_id}/subscription + */ + activitySetThreadSubscription: ( + threadId: number, + data: ActivitySetThreadSubscriptionPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + }; + octocat = { + /** + * @description Get the octocat as ASCII art + * + * @tags meta + * @name MetaGetOctocat + * @summary Get Octocat + * @request GET:/octocat + */ + metaGetOctocat: (query: MetaGetOctocatParams, params: RequestParams = {}) => + this.request({ + path: \`/octocat\`, + method: "GET", + query: query, + ...params, + }), + }; + organizations = { + /** + * @description Lists all organizations, in the order that they were created on GitHub. **Note:** Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of organizations. + * + * @tags orgs + * @name OrgsList + * @summary List organizations + * @request GET:/organizations + */ + orgsList: (query: OrgsListParams, params: RequestParams = {}) => + this.request({ + path: \`/organizations\`, + method: "GET", + query: query, + ...params, + }), + }; + orgs = { + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a repository to the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsAddRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Add repository access to a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + actionsAddRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Adds a repository to an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsAddSelectedRepoToOrgSecret + * @summary Add selected repository to an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + actionsAddSelectedRepoToOrgSecret: ( + org: string, + secretName: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a self-hosted runner to a runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsAddSelfHostedRunnerToGroupForOrg + * @summary Add a self-hosted runner to a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + actionsAddSelfHostedRunnerToGroupForOrg: ( + org: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Creates or updates an organization secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` + * + * @tags actions + * @name ActionsCreateOrUpdateOrgSecret + * @summary Create or update an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsCreateOrUpdateOrgSecret: ( + org: string, + secretName: string, + data: ActionsCreateOrUpdateOrgSecretPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRegistrationTokenForOrg + * @summary Create a registration token for an organization + * @request POST:/orgs/{org}/actions/runners/registration-token + */ + actionsCreateRegistrationTokenForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/registration-token\`, + method: "POST", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an organization. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an organization, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRemoveTokenForOrg + * @summary Create a remove token for an organization + * @request POST:/orgs/{org}/actions/runners/remove-token + */ + actionsCreateRemoveTokenForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/remove-token\`, + method: "POST", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Creates a new self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsCreateSelfHostedRunnerGroupForOrg + * @summary Create a self-hosted runner group for an organization + * @request POST:/orgs/{org}/actions/runner-groups + */ + actionsCreateSelfHostedRunnerGroupForOrg: ( + org: string, + data: ActionsCreateSelfHostedRunnerGroupForOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deletes a secret in an organization using the secret name. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteOrgSecret + * @summary Delete an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsDeleteOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Forces the removal of a self-hosted runner from an organization. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromOrg + * @summary Delete a self-hosted runner from an organization + * @request DELETE:/orgs/{org}/actions/runners/{runner_id} + */ + actionsDeleteSelfHostedRunnerFromOrg: (org: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Deletes a self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsDeleteSelfHostedRunnerGroupFromOrg + * @summary Delete a self-hosted runner group from an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsDeleteSelfHostedRunnerGroupFromOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes a repository from the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsDisableSelectedRepositoryGithubActionsOrganization + * @summary Disable a selected repository for GitHub Actions in an organization + * @request DELETE:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + actionsDisableSelectedRepositoryGithubActionsOrganization: ( + org: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsEnableSelectedRepositoryGithubActionsOrganization + * @summary Enable a selected repository for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + actionsEnableSelectedRepositoryGithubActionsOrganization: ( + org: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Gets the selected actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)."" You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsGetAllowedActionsOrganization + * @summary Get allowed actions for an organization + * @request GET:/orgs/{org}/actions/permissions/selected-actions + */ + actionsGetAllowedActionsOrganization: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/selected-actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the GitHub Actions permissions policy for repositories and allowed actions in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsGetGithubActionsPermissionsOrganization + * @summary Get GitHub Actions permissions for an organization + * @request GET:/orgs/{org}/actions/permissions + */ + actionsGetGithubActionsPermissionsOrganization: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets your public key, which you need to encrypt secrets. You need to encrypt a secret before you can create or update secrets. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsGetOrgPublicKey + * @summary Get an organization public key + * @request GET:/orgs/{org}/actions/secrets/public-key + */ + actionsGetOrgPublicKey: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/public-key\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a single organization secret without revealing its encrypted value. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsGetOrgSecret + * @summary Get an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsGetOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsGetSelfHostedRunnerForOrg + * @summary Get a self-hosted runner for an organization + * @request GET:/orgs/{org}/actions/runners/{runner_id} + */ + actionsGetSelfHostedRunnerForOrg: (org: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/\${runnerId}\`, + method: "GET", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Gets a specific self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsGetSelfHostedRunnerGroupForOrg + * @summary Get a self-hosted runner group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsGetSelfHostedRunnerGroupForOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all secrets available in an organization without revealing their encrypted values. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsListOrgSecrets + * @summary List organization secrets + * @request GET:/orgs/{org}/actions/secrets + */ + actionsListOrgSecrets: ({ org, ...query }: ActionsListOrgSecretsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists the repositories with access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListRepoAccessToSelfHostedRunnerGroupInOrg + * @summary List repository access to a self-hosted runner group in an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + actionsListRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories\`, + method: "GET", + ...params, + }), + + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListRunnerApplicationsForOrg + * @summary List runner applications for an organization + * @request GET:/orgs/{org}/actions/runners/downloads + */ + actionsListRunnerApplicationsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/downloads\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all repositories that have been selected when the \`visibility\` for repository access to a secret is set to \`selected\`. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsListSelectedReposForOrgSecret + * @summary List selected repositories for an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + actionsListSelectedReposForOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsListSelectedRepositoriesEnabledGithubActionsOrganization + * @summary List selected repositories enabled for GitHub Actions in an organization + * @request GET:/orgs/{org}/actions/permissions/repositories + */ + actionsListSelectedRepositoriesEnabledGithubActionsOrganization: ( + { org, ...query }: ActionsListSelectedRepositoriesEnabledGithubActionsOrganizationParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists all self-hosted runner groups configured in an organization and inherited from an enterprise. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnerGroupsForOrg + * @summary List self-hosted runner groups for an organization + * @request GET:/orgs/{org}/actions/runner-groups + */ + actionsListSelfHostedRunnerGroupsForOrg: ( + { org, ...query }: ActionsListSelfHostedRunnerGroupsForOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all self-hosted runners configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnersForOrg + * @summary List self-hosted runners for an organization + * @request GET:/orgs/{org}/actions/runners + */ + actionsListSelfHostedRunnersForOrg: ( + { org, ...query }: ActionsListSelfHostedRunnersForOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runners\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists self-hosted runners that are in a specific organization group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnersInGroupForOrg + * @summary List self-hosted runners in a group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + actionsListSelfHostedRunnersInGroupForOrg: ( + { org, runnerGroupId, ...query }: ActionsListSelfHostedRunnersInGroupForOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a repository from the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Remove repository access to a self-hosted runner group in an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + actionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes a repository from an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsRemoveSelectedRepoFromOrgSecret + * @summary Remove selected repository from an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + actionsRemoveSelectedRepoFromOrgSecret: ( + org: string, + secretName: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a self-hosted runner from a group configured in an organization. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsRemoveSelfHostedRunnerFromGroupForOrg + * @summary Remove a self-hosted runner from a group for an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + actionsRemoveSelfHostedRunnerFromGroupForOrg: ( + org: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Sets the actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." If the organization belongs to an enterprise that has \`selected\` actions set at the enterprise level, then you cannot override any of the enterprise's allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the organization must belong to an enterprise. If the organization does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories in the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetAllowedActionsOrganization + * @summary Set allowed actions for an organization + * @request PUT:/orgs/{org}/actions/permissions/selected-actions + */ + actionsSetAllowedActionsOrganization: (org: string, data: SelectedActions, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/selected-actions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Sets the GitHub Actions permissions policy for repositories and allowed actions in an organization. If the organization belongs to an enterprise that has set restrictive permissions at the enterprise level, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetGithubActionsPermissionsOrganization + * @summary Set GitHub Actions permissions for an organization + * @request PUT:/orgs/{org}/actions/permissions + */ + actionsSetGithubActionsPermissionsOrganization: ( + org: string, + data: ActionsSetGithubActionsPermissionsOrganizationPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of repositories that have access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsSetRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Set repository access for a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + actionsSetRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + data: ActionsSetRepoAccessToSelfHostedRunnerGroupInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces all repositories for an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsSetSelectedReposForOrgSecret + * @summary Set selected repositories for an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + actionsSetSelectedReposForOrgSecret: ( + org: string, + secretName: string, + data: ActionsSetSelectedReposForOrgSecretPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetSelectedRepositoriesEnabledGithubActionsOrganization + * @summary Set selected repositories enabled for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories + */ + actionsSetSelectedRepositoriesEnabledGithubActionsOrganization: ( + org: string, + data: ActionsSetSelectedRepositoriesEnabledGithubActionsOrganizationPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of self-hosted runners that are part of an organization runner group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsSetSelfHostedRunnersInGroupForOrg + * @summary Set self-hosted runners in a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + actionsSetSelfHostedRunnersInGroupForOrg: ( + org: string, + runnerGroupId: number, + data: ActionsSetSelfHostedRunnersInGroupForOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Updates the \`name\` and \`visibility\` of a self-hosted runner group in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsUpdateSelfHostedRunnerGroupForOrg + * @summary Update a self-hosted runner group for an organization + * @request PATCH:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsUpdateSelfHostedRunnerGroupForOrg: ( + org: string, + runnerGroupId: number, + data: ActionsUpdateSelfHostedRunnerGroupForOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityListPublicOrgEvents + * @summary List public organization events + * @request GET:/orgs/{org}/events + */ + activityListPublicOrgEvents: ({ org, ...query }: ActivityListPublicOrgEventsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find the organization's installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetOrgInstallation + * @summary Get an organization installation for the authenticated app + * @request GET:/orgs/{org}/installation + */ + appsGetOrgInstallation: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/installation\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetGithubActionsBillingOrg + * @summary Get GitHub Actions billing for an organization + * @request GET:/orgs/{org}/settings/billing/actions + */ + billingGetGithubActionsBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the free and paid storage usued for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetGithubPackagesBillingOrg + * @summary Get GitHub Packages billing for an organization + * @request GET:/orgs/{org}/settings/billing/packages + */ + billingGetGithubPackagesBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/packages\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetSharedStorageBillingOrg + * @summary Get shared storage billing for an organization + * @request GET:/orgs/{org}/settings/billing/shared-storage + */ + billingGetSharedStorageBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/shared-storage\`, + method: "GET", + ...params, + }), + + /** + * @description Shows which type of GitHub user can interact with this organization and when the restriction expires. If there is no restrictions, you will see an empty response. + * + * @tags interactions + * @name InteractionsGetRestrictionsForOrg + * @summary Get interaction restrictions for an organization + * @request GET:/orgs/{org}/interaction-limits + */ + interactionsGetRestrictionsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "GET", + ...params, + }), + + /** + * @description Removes all interaction restrictions from public repositories in the given organization. You must be an organization owner to remove restrictions. + * + * @tags interactions + * @name InteractionsRemoveRestrictionsForOrg + * @summary Remove interaction restrictions for an organization + * @request DELETE:/orgs/{org}/interaction-limits + */ + interactionsRemoveRestrictionsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "DELETE", + ...params, + }), + + /** + * @description Temporarily restricts interactions to a certain type of GitHub user in any public repository in the given organization. You must be an organization owner to set these restrictions. Setting the interaction limit at the organization level will overwrite any interaction limits that are set for individual repositories owned by the organization. + * + * @tags interactions + * @name InteractionsSetRestrictionsForOrg + * @summary Set interaction restrictions for an organization + * @request PUT:/orgs/{org}/interaction-limits + */ + interactionsSetRestrictionsForOrg: (org: string, data: InteractionLimit, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description List issues in an organization assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesListForOrg + * @summary List organization issues assigned to the authenticated user + * @request GET:/orgs/{org}/issues + */ + issuesListForOrg: ({ org, ...query }: IssuesListForOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/issues\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Deletes a previous migration archive. Migration archives are automatically deleted after seven days. + * + * @tags migrations + * @name MigrationsDeleteArchiveForOrg + * @summary Delete an organization migration archive + * @request DELETE:/orgs/{org}/migrations/{migration_id}/archive + */ + migrationsDeleteArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/archive\`, + method: "DELETE", + ...params, + }), + + /** + * @description Fetches the URL to a migration archive. + * + * @tags migrations + * @name MigrationsDownloadArchiveForOrg + * @summary Download an organization migration archive + * @request GET:/orgs/{org}/migrations/{migration_id}/archive + */ + migrationsDownloadArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/archive\`, + method: "GET", + ...params, + }), + + /** + * @description Fetches the status of a migration. The \`state\` of a migration can be one of the following values: * \`pending\`, which means the migration hasn't started yet. * \`exporting\`, which means the migration is in progress. * \`exported\`, which means the migration finished successfully. * \`failed\`, which means the migration failed. + * + * @tags migrations + * @name MigrationsGetStatusForOrg + * @summary Get an organization migration status + * @request GET:/orgs/{org}/migrations/{migration_id} + */ + migrationsGetStatusForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the most recent migrations. + * + * @tags migrations + * @name MigrationsListForOrg + * @summary List organization migrations + * @request GET:/orgs/{org}/migrations + */ + migrationsListForOrg: ({ org, ...query }: MigrationsListForOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all the repositories for this organization migration. + * + * @tags migrations + * @name MigrationsListReposForOrg + * @summary List repositories in an organization migration + * @request GET:/orgs/{org}/migrations/{migration_id}/repositories + */ + migrationsListReposForOrg: ( + { org, migrationId, ...query }: MigrationsListReposForOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Initiates the generation of a migration archive. + * + * @tags migrations + * @name MigrationsStartForOrg + * @summary Start an organization migration + * @request POST:/orgs/{org}/migrations + */ + migrationsStartForOrg: (org: string, data: MigrationsStartForOrgPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Unlocks a repository that was locked for migration. You should unlock each migrated repository and [delete them](https://docs.github.com/rest/reference/repos#delete-a-repository) when the migration is complete and you no longer need the source data. + * + * @tags migrations + * @name MigrationsUnlockRepoForOrg + * @summary Unlock an organization repository + * @request DELETE:/orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock + */ + migrationsUnlockRepoForOrg: (org: string, migrationId: number, repoName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/repos/\${repoName}/lock\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsBlockUser + * @summary Block a user from an organization + * @request PUT:/orgs/{org}/blocks/{username} + */ + orgsBlockUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * @description Cancel an organization invitation. In order to cancel an organization invitation, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). + * + * @tags orgs + * @name OrgsCancelInvitation + * @summary Cancel an organization invitation + * @request DELETE:/orgs/{org}/invitations/{invitation_id} + */ + orgsCancelInvitation: (org: string, invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/invitations/\${invitationId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsCheckBlockedUser + * @summary Check if a user is blocked by an organization + * @request GET:/orgs/{org}/blocks/{username} + */ + orgsCheckBlockedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Check if a user is, publicly or privately, a member of the organization. + * + * @tags orgs + * @name OrgsCheckMembershipForUser + * @summary Check organization membership for a user + * @request GET:/orgs/{org}/members/{username} + */ + orgsCheckMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/members/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsCheckPublicMembershipForUser + * @summary Check public organization membership for a user + * @request GET:/orgs/{org}/public_members/{username} + */ + orgsCheckPublicMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description When an organization member is converted to an outside collaborator, they'll only have access to the repositories that their current team membership allows. The user will no longer be a member of the organization. For more information, see "[Converting an organization member to an outside collaborator](https://help.github.com/articles/converting-an-organization-member-to-an-outside-collaborator/)". + * + * @tags orgs + * @name OrgsConvertMemberToOutsideCollaborator + * @summary Convert an organization member to outside collaborator + * @request PUT:/orgs/{org}/outside_collaborators/{username} + */ + orgsConvertMemberToOutsideCollaborator: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/outside_collaborators/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * @description Invite people to an organization by using their GitHub user ID or their email address. In order to create invitations in an organization, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags orgs + * @name OrgsCreateInvitation + * @summary Create an organization invitation + * @request POST:/orgs/{org}/invitations + */ + orgsCreateInvitation: (org: string, data: OrgsCreateInvitationPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/invitations\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Here's how you can create a hook that posts payloads in JSON format: + * + * @tags orgs + * @name OrgsCreateWebhook + * @summary Create an organization webhook + * @request POST:/orgs/{org}/hooks + */ + orgsCreateWebhook: (org: string, data: OrgsCreateWebhookPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsDeleteWebhook + * @summary Delete an organization webhook + * @request DELETE:/orgs/{org}/hooks/{hook_id} + */ + orgsDeleteWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description To see many of the organization response values, you need to be an authenticated organization owner with the \`admin:org\` scope. When the value of \`two_factor_requirement_enabled\` is \`true\`, the organization requires all members, billing managers, and outside collaborators to enable [two-factor authentication](https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/). GitHub Apps with the \`Organization plan\` permission can use this endpoint to retrieve information about an organization's GitHub plan. See "[Authenticating with GitHub Apps](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/)" for details. For an example response, see 'Response with GitHub plan information' below." + * + * @tags orgs + * @name OrgsGet + * @summary Get an organization + * @request GET:/orgs/{org} + */ + orgsGet: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}\`, + method: "GET", + ...params, + }), + + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an organization. For more information, see "[Reviewing the audit log for your organization](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization)." To use this endpoint, you must be an organization owner, and you must use an access token with the \`admin:org\` scope. GitHub Apps must have the \`organization_administration\` read permission to use this endpoint. + * + * @tags orgs + * @name OrgsGetAuditLog + * @summary Get the audit log for an organization + * @request GET:/orgs/{org}/audit-log + */ + orgsGetAuditLog: ({ org, ...query }: OrgsGetAuditLogParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/audit-log\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description In order to get a user's membership with an organization, the authenticated user must be an organization member. + * + * @tags orgs + * @name OrgsGetMembershipForUser + * @summary Get organization membership for a user + * @request GET:/orgs/{org}/memberships/{username} + */ + orgsGetMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns a webhook configured in an organization. To get only the webhook \`config\` properties, see "[Get a webhook configuration for an organization](/rest/reference/orgs#get-a-webhook-configuration-for-an-organization)." + * + * @tags orgs + * @name OrgsGetWebhook + * @summary Get an organization webhook + * @request GET:/orgs/{org}/hooks/{hook_id} + */ + orgsGetWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the webhook configuration for an organization. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get an organization webhook ](/rest/reference/orgs#get-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:read\` permission. + * + * @tags orgs + * @name OrgsGetWebhookConfigForOrg + * @summary Get a webhook configuration for an organization + * @request GET:/orgs/{org}/hooks/{hook_id}/config + */ + orgsGetWebhookConfigForOrg: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/config\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all GitHub Apps in an organization. The installation count includes all GitHub Apps installed on repositories in the organization. You must be an organization owner with \`admin:read\` scope to use this endpoint. + * + * @tags orgs + * @name OrgsListAppInstallations + * @summary List app installations for an organization + * @request GET:/orgs/{org}/installations + */ + orgsListAppInstallations: ({ org, ...query }: OrgsListAppInstallationsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/installations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the users blocked by an organization. + * + * @tags orgs + * @name OrgsListBlockedUsers + * @summary List users blocked by an organization + * @request GET:/orgs/{org}/blocks + */ + orgsListBlockedUsers: (org: string, params: RequestParams = {}) => + this.request< + OrgsListBlockedUsersData, + { + documentation_url: string; + message: string; + } + >({ + path: \`/orgs/\${org}/blocks\`, + method: "GET", + ...params, + }), + + /** + * @description The return hash contains \`failed_at\` and \`failed_reason\` fields which represent the time at which the invitation failed and the reason for the failure. + * + * @tags orgs + * @name OrgsListFailedInvitations + * @summary List failed organization invitations + * @request GET:/orgs/{org}/failed_invitations + */ + orgsListFailedInvitations: ({ org, ...query }: OrgsListFailedInvitationsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/failed_invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all teams associated with an invitation. In order to see invitations in an organization, the authenticated user must be an organization owner. + * + * @tags orgs + * @name OrgsListInvitationTeams + * @summary List organization invitation teams + * @request GET:/orgs/{org}/invitations/{invitation_id}/teams + */ + orgsListInvitationTeams: ( + { org, invitationId, ...query }: OrgsListInvitationTeamsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/invitations/\${invitationId}/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all users who are members of an organization. If the authenticated user is also a member of this organization then both concealed and public members will be returned. + * + * @tags orgs + * @name OrgsListMembers + * @summary List organization members + * @request GET:/orgs/{org}/members + */ + orgsListMembers: ({ org, ...query }: OrgsListMembersParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/members\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all users who are outside collaborators of an organization. + * + * @tags orgs + * @name OrgsListOutsideCollaborators + * @summary List outside collaborators for an organization + * @request GET:/orgs/{org}/outside_collaborators + */ + orgsListOutsideCollaborators: ({ org, ...query }: OrgsListOutsideCollaboratorsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/outside_collaborators\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. + * + * @tags orgs + * @name OrgsListPendingInvitations + * @summary List pending organization invitations + * @request GET:/orgs/{org}/invitations + */ + orgsListPendingInvitations: ({ org, ...query }: OrgsListPendingInvitationsParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Members of an organization can choose to have their membership publicized or not. + * + * @tags orgs + * @name OrgsListPublicMembers + * @summary List public organization members + * @request GET:/orgs/{org}/public_members + */ + orgsListPublicMembers: ({ org, ...query }: OrgsListPublicMembersParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`read:org\` scope can list all credential authorizations for an organization that uses SAML single sign-on (SSO). The credentials are either personal access tokens or SSH keys that organization members have authorized for the organization. For more information, see [About authentication with SAML single sign-on](https://help.github.com/en/articles/about-authentication-with-saml-single-sign-on). + * + * @tags orgs + * @name OrgsListSamlSsoAuthorizations + * @summary List SAML SSO authorizations for an organization + * @request GET:/orgs/{org}/credential-authorizations + */ + orgsListSamlSsoAuthorizations: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/credential-authorizations\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsListWebhooks + * @summary List organization webhooks + * @request GET:/orgs/{org}/hooks + */ + orgsListWebhooks: ({ org, ...query }: OrgsListWebhooksParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * + * @tags orgs + * @name OrgsPingWebhook + * @summary Ping an organization webhook + * @request POST:/orgs/{org}/hooks/{hook_id}/pings + */ + orgsPingWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/pings\`, + method: "POST", + ...params, + }), + + /** + * @description Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. + * + * @tags orgs + * @name OrgsRemoveMember + * @summary Remove an organization member + * @request DELETE:/orgs/{org}/members/{username} + */ + orgsRemoveMember: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/members/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description In order to remove a user's membership with an organization, the authenticated user must be an organization owner. If the specified user is an active member of the organization, this will remove them from the organization. If the specified user has been invited to the organization, this will cancel their invitation. The specified user will receive an email notification in both cases. + * + * @tags orgs + * @name OrgsRemoveMembershipForUser + * @summary Remove organization membership for a user + * @request DELETE:/orgs/{org}/memberships/{username} + */ + orgsRemoveMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removing a user from this list will remove them from all the organization's repositories. + * + * @tags orgs + * @name OrgsRemoveOutsideCollaborator + * @summary Remove outside collaborator from an organization + * @request DELETE:/orgs/{org}/outside_collaborators/{username} + */ + orgsRemoveOutsideCollaborator: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/outside_collaborators/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsRemovePublicMembershipForAuthenticatedUser + * @summary Remove public organization membership for the authenticated user + * @request DELETE:/orgs/{org}/public_members/{username} + */ + orgsRemovePublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`admin:org\` scope can remove a credential authorization for an organization that uses SAML SSO. Once you remove someone's credential authorization, they will need to create a new personal access token or SSH key and authorize it for the organization they want to access. + * + * @tags orgs + * @name OrgsRemoveSamlSsoAuthorization + * @summary Remove a SAML SSO authorization for an organization + * @request DELETE:/orgs/{org}/credential-authorizations/{credential_id} + */ + orgsRemoveSamlSsoAuthorization: (org: string, credentialId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/credential-authorizations/\${credentialId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Only authenticated organization owners can add a member to the organization or update the member's role. * If the authenticated user is _adding_ a member to the organization, the invited user will receive an email inviting them to the organization. The user's [membership status](https://docs.github.com/rest/reference/orgs#get-organization-membership-for-a-user) will be \`pending\` until they accept the invitation. * Authenticated users can _update_ a user's membership by passing the \`role\` parameter. If the authenticated user changes a member's role to \`admin\`, the affected user will receive an email notifying them that they've been made an organization owner. If the authenticated user changes an owner's role to \`member\`, no email will be sent. **Rate limits** To prevent abuse, the authenticated user is limited to 50 organization invitations per 24 hour period. If the organization is more than one month old or on a paid plan, the limit is 500 invitations per 24 hour period. + * + * @tags orgs + * @name OrgsSetMembershipForUser + * @summary Set organization membership for a user + * @request PUT:/orgs/{org}/memberships/{username} + */ + orgsSetMembershipForUser: ( + org: string, + username: string, + data: OrgsSetMembershipForUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The user can publicize their own membership. (A user cannot publicize the membership for another user.) Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags orgs + * @name OrgsSetPublicMembershipForAuthenticatedUser + * @summary Set public organization membership for the authenticated user + * @request PUT:/orgs/{org}/public_members/{username} + */ + orgsSetPublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsUnblockUser + * @summary Unblock a user from an organization + * @request DELETE:/orgs/{org}/blocks/{username} + */ + orgsUnblockUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Parameter Deprecation Notice:** GitHub will replace and discontinue \`members_allowed_repository_creation_type\` in favor of more granular permissions. The new input parameters are \`members_can_create_public_repositories\`, \`members_can_create_private_repositories\` for all organizations and \`members_can_create_internal_repositories\` for organizations associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. For more information, see the [blog post](https://developer.github.com/changes/2019-12-03-internal-visibility-changes). Enables an authenticated organization owner with the \`admin:org\` scope to update the organization's profile and member privileges. + * + * @tags orgs + * @name OrgsUpdate + * @summary Update an organization + * @request PATCH:/orgs/{org} + */ + orgsUpdate: (org: string, data: OrgsUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates a webhook configured in an organization. When you update a webhook, the \`secret\` will be overwritten. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for an organization](/rest/reference/orgs#update-a-webhook-configuration-for-an-organization)." + * + * @tags orgs + * @name OrgsUpdateWebhook + * @summary Update an organization webhook + * @request PATCH:/orgs/{org}/hooks/{hook_id} + */ + orgsUpdateWebhook: (org: string, hookId: number, data: OrgsUpdateWebhookPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates the webhook configuration for an organization. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update an organization webhook ](/rest/reference/orgs#update-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:write\` permission. + * + * @tags orgs + * @name OrgsUpdateWebhookConfigForOrg + * @summary Update a webhook configuration for an organization + * @request PATCH:/orgs/{org}/hooks/{hook_id}/config + */ + orgsUpdateWebhookConfigForOrg: ( + org: string, + hookId: number, + data: OrgsUpdateWebhookConfigForOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/config\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates an organization project board. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsCreateForOrg + * @summary Create an organization project + * @request POST:/orgs/{org}/projects + */ + projectsCreateForOrg: (org: string, data: ProjectsCreateForOrgPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/projects\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists the projects in an organization. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsListForOrg + * @summary List organization projects + * @request GET:/orgs/{org}/projects + */ + projectsListForOrg: ({ org, ...query }: ProjectsListForOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/projects\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentInOrg + * @summary Create reaction for a team discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + reactionsCreateForTeamDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + data: ReactionsCreateForTeamDiscussionCommentInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionInOrg + * @summary Create reaction for a team discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + reactionsCreateForTeamDiscussionInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: ReactionsCreateForTeamDiscussionInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsDeleteForTeamDiscussion + * @summary Delete team discussion reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id} + */ + reactionsDeleteForTeamDiscussion: ( + org: string, + teamSlug: string, + discussionNumber: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsDeleteForTeamDiscussionComment + * @summary Delete team discussion comment reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id} + */ + reactionsDeleteForTeamDiscussionComment: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments/). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentInOrg + * @summary List reactions for a team discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + reactionsListForTeamDiscussionCommentInOrg: ( + { org, teamSlug, discussionNumber, commentNumber, ...query }: ReactionsListForTeamDiscussionCommentInOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * + * @tags reactions + * @name ReactionsListForTeamDiscussionInOrg + * @summary List reactions for a team discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + reactionsListForTeamDiscussionInOrg: ( + { org, teamSlug, discussionNumber, ...query }: ReactionsListForTeamDiscussionInOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Creates a new repository in the specified organization. The authenticated user must be a member of the organization. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * + * @tags repos + * @name ReposCreateInOrg + * @summary Create an organization repository + * @request POST:/orgs/{org}/repos + */ + reposCreateInOrg: (org: string, data: ReposCreateInOrgPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/repos\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists repositories for the specified organization. + * + * @tags repos + * @name ReposListForOrg + * @summary List organization repositories + * @request GET:/orgs/{org}/repos + */ + reposListForOrg: ({ org, ...query }: ReposListForOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/repos\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adds an organization member to a team. An authenticated organization owner or team maintainer can add organization members to a team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." An organization owner can add someone who is not part of the team's organization to a team. When an organization owner adds someone to a team who is not an organization member, this endpoint will send an invitation to the person via email. This newly-created membership will be in the "pending" state until the person accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserInOrg + * @summary Add or update team membership for a user + * @request PUT:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsAddOrUpdateMembershipForUserInOrg: ( + org: string, + teamSlug: string, + username: string, + data: TeamsAddOrUpdateMembershipForUserInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsInOrg + * @summary Add or update team project permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsAddOrUpdateProjectPermissionsInOrg: ( + org: string, + teamSlug: string, + projectId: number, + data: TeamsAddOrUpdateProjectPermissionsInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. For more information about the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". + * + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsInOrg + * @summary Add or update team repository permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsAddOrUpdateRepoPermissionsInOrg: ( + org: string, + teamSlug: string, + owner: string, + repo: string, + data: TeamsAddOrUpdateRepoPermissionsInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsCheckPermissionsForProjectInOrg + * @summary Check team permissions for a project + * @request GET:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsCheckPermissionsForProjectInOrg: ( + org: string, + teamSlug: string, + projectId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "GET", + ...params, + }), + + /** + * @description Checks whether a team has \`admin\`, \`push\`, \`maintain\`, \`triage\`, or \`pull\` permission for a repository. Repositories inherited through a parent team will also be checked. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`application/vnd.github.v3.repository+json\` accept header. If a team doesn't have permission for the repository, you will receive a \`404 Not Found\` response status. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * + * @tags teams + * @name TeamsCheckPermissionsForRepoInOrg + * @summary Check team permissions for a repository + * @request GET:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsCheckPermissionsForRepoInOrg: ( + org: string, + teamSlug: string, + owner: string, + repo: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "GET", + ...params, + }), + + /** + * @description To create a team, the authenticated user must be a member or owner of \`{org}\`. By default, organization members can create teams. Organization owners can limit team creation to organization owners. For more information, see "[Setting team creation permissions](https://help.github.com/en/articles/setting-team-creation-permissions-in-your-organization)." When you create a new team, you automatically become a team maintainer without explicitly adding yourself to the optional array of \`maintainers\`. For more information, see "[About teams](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/about-teams)". + * + * @tags teams + * @name TeamsCreate + * @summary Create a team + * @request POST:/orgs/{org}/teams + */ + teamsCreate: (org: string, data: TeamsCreatePayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a new comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * + * @tags teams + * @name TeamsCreateDiscussionCommentInOrg + * @summary Create a discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + teamsCreateDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: TeamsCreateDiscussionCommentInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a new discussion post on a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions\`. + * + * @tags teams + * @name TeamsCreateDiscussionInOrg + * @summary Create a discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions + */ + teamsCreateDiscussionInOrg: ( + org: string, + teamSlug: string, + data: TeamsCreateDiscussionInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsInOrg + * @summary Create or update IdP group connections + * @request PATCH:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + teamsCreateOrUpdateIdpGroupConnectionsInOrg: ( + org: string, + teamSlug: string, + data: TeamsCreateOrUpdateIdpGroupConnectionsInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/team-sync/group-mappings\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsDeleteDiscussionCommentInOrg + * @summary Delete a discussion comment + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsDeleteDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Delete a discussion from a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsDeleteDiscussionInOrg + * @summary Delete a discussion + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsDeleteDiscussionInOrg: (org: string, teamSlug: string, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsDeleteInOrg + * @summary Delete a team + * @request DELETE:/orgs/{org}/teams/{team_slug} + */ + teamsDeleteInOrg: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Gets a team using the team's \`slug\`. GitHub generates the \`slug\` from the team \`name\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsGetByName + * @summary Get a team by name + * @request GET:/orgs/{org}/teams/{team_slug} + */ + teamsGetByName: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "GET", + ...params, + }), + + /** + * @description Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsGetDiscussionCommentInOrg + * @summary Get a discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsGetDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsGetDiscussionInOrg + * @summary Get a discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsGetDiscussionInOrg: (org: string, teamSlug: string, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/memberships/{username}\`. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). + * + * @tags teams + * @name TeamsGetMembershipForUserInOrg + * @summary Get team membership for a user + * @request GET:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsGetMembershipForUserInOrg: (org: string, teamSlug: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all teams in an organization that are visible to the authenticated user. + * + * @tags teams + * @name TeamsList + * @summary List teams + * @request GET:/orgs/{org}/teams + */ + teamsList: ({ org, ...query }: TeamsListParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the child teams of the team specified by \`{team_slug}\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/teams\`. + * + * @tags teams + * @name TeamsListChildInOrg + * @summary List child teams + * @request GET:/orgs/{org}/teams/{team_slug}/teams + */ + teamsListChildInOrg: ({ org, teamSlug, ...query }: TeamsListChildInOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * + * @tags teams + * @name TeamsListDiscussionCommentsInOrg + * @summary List discussion comments + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + teamsListDiscussionCommentsInOrg: ( + { org, teamSlug, discussionNumber, ...query }: TeamsListDiscussionCommentsInOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions\`. + * + * @tags teams + * @name TeamsListDiscussionsInOrg + * @summary List discussions + * @request GET:/orgs/{org}/teams/{team_slug}/discussions + */ + teamsListDiscussionsInOrg: ( + { org, teamSlug, ...query }: TeamsListDiscussionsInOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups available in an organization. You can limit your page results using the \`per_page\` parameter. GitHub generates a url-encoded \`page\` token using a cursor value for where the next page begins. For more information on cursor pagination, see "[Offset and Cursor Pagination explained](https://dev.to/jackmarchant/offset-and-cursor-pagination-explained-b89)." The \`per_page\` parameter provides pagination for a list of IdP groups the authenticated user can access in an organization. For example, if the user \`octocat\` wants to see two groups per page in \`octo-org\` via cURL, it would look like this: + * + * @tags teams + * @name TeamsListIdpGroupsForOrg + * @summary List IdP groups for an organization + * @request GET:/orgs/{org}/team-sync/groups + */ + teamsListIdpGroupsForOrg: ({ org, ...query }: TeamsListIdpGroupsForOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/team-sync/groups\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * + * @tags teams + * @name TeamsListIdpGroupsInOrg + * @summary List IdP groups for a team + * @request GET:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + teamsListIdpGroupsInOrg: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/team-sync/group-mappings\`, + method: "GET", + ...params, + }), + + /** + * @description Team members will include the members of child teams. To list members in a team, the team must be visible to the authenticated user. + * + * @tags teams + * @name TeamsListMembersInOrg + * @summary List team members + * @request GET:/orgs/{org}/teams/{team_slug}/members + */ + teamsListMembersInOrg: ({ org, teamSlug, ...query }: TeamsListMembersInOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/members\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/invitations\`. + * + * @tags teams + * @name TeamsListPendingInvitationsInOrg + * @summary List pending team invitations + * @request GET:/orgs/{org}/teams/{team_slug}/invitations + */ + teamsListPendingInvitationsInOrg: ( + { org, teamSlug, ...query }: TeamsListPendingInvitationsInOrgParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the organization projects for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects\`. + * + * @tags teams + * @name TeamsListProjectsInOrg + * @summary List team projects + * @request GET:/orgs/{org}/teams/{team_slug}/projects + */ + teamsListProjectsInOrg: ({ org, teamSlug, ...query }: TeamsListProjectsInOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists a team's repositories visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos\`. + * + * @tags teams + * @name TeamsListReposInOrg + * @summary List team repositories + * @request GET:/orgs/{org}/teams/{team_slug}/repos + */ + teamsListReposInOrg: ({ org, teamSlug, ...query }: TeamsListReposInOrgParams, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * + * @tags teams + * @name TeamsRemoveMembershipForUserInOrg + * @summary Remove team membership for a user + * @request DELETE:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsRemoveMembershipForUserInOrg: (org: string, teamSlug: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. This endpoint removes the project from the team, but does not delete the project. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsRemoveProjectInOrg + * @summary Remove a project from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsRemoveProjectInOrg: (org: string, teamSlug: string, projectId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. This does not delete the repository, it just removes it from the team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * + * @tags teams + * @name TeamsRemoveRepoInOrg + * @summary Remove a repository from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsRemoveRepoInOrg: (org: string, teamSlug: string, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsUpdateDiscussionCommentInOrg + * @summary Update a discussion comment + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsUpdateDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + data: TeamsUpdateDiscussionCommentInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsUpdateDiscussionInOrg + * @summary Update a discussion + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsUpdateDiscussionInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: TeamsUpdateDiscussionInOrgPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsUpdateInOrg + * @summary Update a team + * @request PATCH:/orgs/{org}/teams/{team_slug} + */ + teamsUpdateInOrg: (org: string, teamSlug: string, data: TeamsUpdateInOrgPayload, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + projects = { + /** + * @description Adds a collaborator to an organization project and sets their permission level. You must be an organization owner or a project \`admin\` to add a collaborator. + * + * @tags projects + * @name ProjectsAddCollaborator + * @summary Add project collaborator + * @request PUT:/projects/{project_id}/collaborators/{username} + */ + projectsAddCollaborator: ( + projectId: number, + username: string, + data: ProjectsAddCollaboratorPayload, + params: RequestParams = {}, + ) => + this.request< + ProjectsAddCollaboratorData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/projects/\${projectId}/collaborators/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags projects + * @name ProjectsCreateCard + * @summary Create a project card + * @request POST:/projects/columns/{column_id}/cards + */ + projectsCreateCard: (columnId: number, data: ProjectsCreateCardPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}/cards\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsCreateColumn + * @summary Create a project column + * @request POST:/projects/{project_id}/columns + */ + projectsCreateColumn: (projectId: number, data: ProjectsCreateColumnPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}/columns\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deletes a project board. Returns a \`404 Not Found\` status if projects are disabled. + * + * @tags projects + * @name ProjectsDelete + * @summary Delete a project + * @request DELETE:/projects/{project_id} + */ + projectsDelete: (projectId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsDeleteCard + * @summary Delete a project card + * @request DELETE:/projects/columns/cards/{card_id} + */ + projectsDeleteCard: (cardId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsDeleteColumn + * @summary Delete a project column + * @request DELETE:/projects/columns/{column_id} + */ + projectsDeleteColumn: (columnId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Gets a project by its \`id\`. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsGet + * @summary Get a project + * @request GET:/projects/{project_id} + */ + projectsGet: (projectId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsGetCard + * @summary Get a project card + * @request GET:/projects/columns/cards/{card_id} + */ + projectsGetCard: (cardId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsGetColumn + * @summary Get a project column + * @request GET:/projects/columns/{column_id} + */ + projectsGetColumn: (columnId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the collaborator's permission level for an organization project. Possible values for the \`permission\` key: \`admin\`, \`write\`, \`read\`, \`none\`. You must be an organization owner or a project \`admin\` to review a user's permission level. + * + * @tags projects + * @name ProjectsGetPermissionForUser + * @summary Get project permission for a user + * @request GET:/projects/{project_id}/collaborators/{username}/permission + */ + projectsGetPermissionForUser: (projectId: number, username: string, params: RequestParams = {}) => + this.request< + ProjectsGetPermissionForUserData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/projects/\${projectId}/collaborators/\${username}/permission\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsListCards + * @summary List project cards + * @request GET:/projects/columns/{column_id}/cards + */ + projectsListCards: ({ columnId, ...query }: ProjectsListCardsParams, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}/cards\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project \`admin\` to list collaborators. + * + * @tags projects + * @name ProjectsListCollaborators + * @summary List project collaborators + * @request GET:/projects/{project_id}/collaborators + */ + projectsListCollaborators: ({ projectId, ...query }: ProjectsListCollaboratorsParams, params: RequestParams = {}) => + this.request< + ProjectsListCollaboratorsData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/projects/\${projectId}/collaborators\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsListColumns + * @summary List project columns + * @request GET:/projects/{project_id}/columns + */ + projectsListColumns: ({ projectId, ...query }: ProjectsListColumnsParams, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}/columns\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsMoveCard + * @summary Move a project card + * @request POST:/projects/columns/cards/{card_id}/moves + */ + projectsMoveCard: (cardId: number, data: ProjectsMoveCardPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/cards/\${cardId}/moves\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsMoveColumn + * @summary Move a project column + * @request POST:/projects/columns/{column_id}/moves + */ + projectsMoveColumn: (columnId: number, data: ProjectsMoveColumnPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}/moves\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Removes a collaborator from an organization project. You must be an organization owner or a project \`admin\` to remove a collaborator. + * + * @tags projects + * @name ProjectsRemoveCollaborator + * @summary Remove user as a collaborator + * @request DELETE:/projects/{project_id}/collaborators/{username} + */ + projectsRemoveCollaborator: (projectId: number, username: string, params: RequestParams = {}) => + this.request< + ProjectsRemoveCollaboratorData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/projects/\${projectId}/collaborators/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Updates a project board's information. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsUpdate + * @summary Update a project + * @request PATCH:/projects/{project_id} + */ + projectsUpdate: (projectId: number, data: ProjectsUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsUpdateCard + * @summary Update an existing project card + * @request PATCH:/projects/columns/cards/{card_id} + */ + projectsUpdateCard: (cardId: number, data: ProjectsUpdateCardPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsUpdateColumn + * @summary Update an existing project column + * @request PATCH:/projects/columns/{column_id} + */ + projectsUpdateColumn: (columnId: number, data: ProjectsUpdateColumnPayload, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + rateLimit = { + /** + * @description **Note:** Accessing this endpoint does not count against your REST API rate limit. **Note:** The \`rate\` object is deprecated. If you're writing new API client code or updating existing code, you should use the \`core\` object instead of the \`rate\` object. The \`core\` object contains the same information that is present in the \`rate\` object. + * + * @tags rate-limit + * @name RateLimitGet + * @summary Get rate limit status for the authenticated user + * @request GET:/rate_limit + */ + rateLimitGet: (params: RequestParams = {}) => + this.request({ + path: \`/rate_limit\`, + method: "GET", + ...params, + }), + }; + reactions = { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Reactions API. We recommend migrating your existing code to use the new delete reactions endpoints. For more information, see this [blog post](https://developer.github.com/changes/2020-02-26-new-delete-reactions-endpoints/). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), when deleting a [team discussion](https://docs.github.com/rest/reference/teams#discussions) or [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). + * + * @tags reactions + * @name ReactionsDeleteLegacy + * @summary Delete a reaction (Legacy) + * @request DELETE:/reactions/{reaction_id} + * @deprecated + */ + reactionsDeleteLegacy: (reactionId: number, params: RequestParams = {}) => + this.request< + ReactionsDeleteLegacyData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + }; + repos = { + /** + * @description Cancels a workflow run using its \`id\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsCancelWorkflowRun + * @summary Cancel a workflow run + * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/cancel + */ + actionsCancelWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/cancel\`, + method: "POST", + ...params, + }), + + /** + * @description Creates or updates a repository secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` + * + * @tags actions + * @name ActionsCreateOrUpdateRepoSecret + * @summary Create or update a repository secret + * @request PUT:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + actionsCreateOrUpdateRepoSecret: ( + owner: string, + repo: string, + secretName: string, + data: ActionsCreateOrUpdateRepoSecretPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org/octo-repo-artifacts --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRegistrationTokenForRepo + * @summary Create a registration token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/registration-token + */ + actionsCreateRegistrationTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/registration-token\`, + method: "POST", + ...params, + }), + + /** + * @description Returns a token that you can pass to remove a self-hosted runner from a repository. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from a repository, replace TOKEN with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRemoveTokenForRepo + * @summary Create a remove token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/remove-token + */ + actionsCreateRemoveTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/remove-token\`, + method: "POST", + ...params, + }), + + /** + * @description You can use this endpoint to manually trigger a GitHub Actions workflow run. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must configure your GitHub Actions workflow to run when the [\`workflow_dispatch\` webhook](/developers/webhooks-and-events/webhook-events-and-payloads#workflow_dispatch) event occurs. The \`inputs\` are configured in the workflow file. For more information about how to configure the \`workflow_dispatch\` event in the workflow file, see "[Events that trigger workflows](/actions/reference/events-that-trigger-workflows#workflow_dispatch)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)." + * + * @tags actions + * @name ActionsCreateWorkflowDispatch + * @summary Create a workflow dispatch event + * @request POST:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches + */ + actionsCreateWorkflowDispatch: ( + owner: string, + repo: string, + workflowId: number | string, + data: ActionsCreateWorkflowDispatchPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/dispatches\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deletes an artifact for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteArtifact + * @summary Delete an artifact + * @request DELETE:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} + */ + actionsDeleteArtifact: (owner: string, repo: string, artifactId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deletes a secret in a repository using the secret name. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteRepoSecret + * @summary Delete a repository secret + * @request DELETE:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + actionsDeleteRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Forces the removal of a self-hosted runner from a repository. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromRepo + * @summary Delete a self-hosted runner from a repository + * @request DELETE:/repos/{owner}/{repo}/actions/runners/{runner_id} + */ + actionsDeleteSelfHostedRunnerFromRepo: ( + owner: string, + repo: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Delete a specific workflow run. Anyone with write access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteWorkflowRun + * @summary Delete a workflow run + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id} + */ + actionsDeleteWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deletes all logs for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteWorkflowRunLogs + * @summary Delete workflow run logs + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + */ + actionsDeleteWorkflowRunLogs: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/logs\`, + method: "DELETE", + ...params, + }), + + /** + * @description Disables a workflow and sets the \`state\` of the workflow to \`disabled_manually\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDisableWorkflow + * @summary Disable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable + */ + actionsDisableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/disable\`, + method: "PUT", + ...params, + }), + + /** + * @description Gets a redirect URL to download an archive for a repository. This URL expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. The \`:archive_format\` must be \`zip\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDownloadArtifact + * @summary Download an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format} + */ + actionsDownloadArtifact: ( + owner: string, + repo: string, + artifactId: number, + archiveFormat: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}/\${archiveFormat}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a redirect URL to download a plain text file of logs for a workflow job. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDownloadJobLogsForWorkflowRun + * @summary Download job logs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id}/logs + */ + actionsDownloadJobLogsForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/jobs/\${jobId}/logs\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a redirect URL to download an archive of log files for a workflow run. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDownloadWorkflowRunLogs + * @summary Download workflow run logs + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + */ + actionsDownloadWorkflowRunLogs: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/logs\`, + method: "GET", + ...params, + }), + + /** + * @description Enables a workflow and sets the \`state\` of the workflow to \`active\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsEnableWorkflow + * @summary Enable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable + */ + actionsEnableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/enable\`, + method: "PUT", + ...params, + }), + + /** + * @description Gets the settings for selected actions that are allowed in a repository. To use this endpoint, the repository policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsGetAllowedActionsRepository + * @summary Get allowed actions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions/selected-actions + */ + actionsGetAllowedActionsRepository: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions/selected-actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific artifact for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetArtifact + * @summary Get an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} + */ + actionsGetArtifact: (owner: string, repo: string, artifactId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the GitHub Actions permissions policy for a repository, including whether GitHub Actions is enabled and the actions allowed to run in the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsGetGithubActionsPermissionsRepository + * @summary Get GitHub Actions permissions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions + */ + actionsGetGithubActionsPermissionsRepository: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific job in a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetJobForWorkflowRun + * @summary Get a job for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id} + */ + actionsGetJobForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/jobs/\${jobId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets your public key, which you need to encrypt secrets. You need to encrypt a secret before you can create or update secrets. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * + * @tags actions + * @name ActionsGetRepoPublicKey + * @summary Get a repository public key + * @request GET:/repos/{owner}/{repo}/actions/secrets/public-key + */ + actionsGetRepoPublicKey: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/public-key\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a single repository secret without revealing its encrypted value. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * + * @tags actions + * @name ActionsGetRepoSecret + * @summary Get a repository secret + * @request GET:/repos/{owner}/{repo}/actions/secrets/{secret_name} + */ + actionsGetRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * + * @tags actions + * @name ActionsGetSelfHostedRunnerForRepo + * @summary Get a self-hosted runner for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/{runner_id} + */ + actionsGetSelfHostedRunnerForRepo: (owner: string, repo: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/\${runnerId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific workflow. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetWorkflow + * @summary Get a workflow + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id} + */ + actionsGetWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a specific workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetWorkflowRun + * @summary Get a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id} + */ + actionsGetWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the number of billable minutes and total run time for a specific workflow run. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetWorkflowRunUsage + * @summary Get workflow run usage + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/timing + */ + actionsGetWorkflowRunUsage: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/timing\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the number of billable minutes used by a specific workflow during the current billing cycle. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsGetWorkflowUsage + * @summary Get workflow usage + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing + */ + actionsGetWorkflowUsage: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/timing\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all artifacts for a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsListArtifactsForRepo + * @summary List artifacts for a repository + * @request GET:/repos/{owner}/{repo}/actions/artifacts + */ + actionsListArtifactsForRepo: ( + { owner, repo, ...query }: ActionsListArtifactsForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists jobs for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). + * + * @tags actions + * @name ActionsListJobsForWorkflowRun + * @summary List jobs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/jobs + */ + actionsListJobsForWorkflowRun: ( + { owner, repo, runId, ...query }: ActionsListJobsForWorkflowRunParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/jobs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all secrets available in a repository without revealing their encrypted values. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. + * + * @tags actions + * @name ActionsListRepoSecrets + * @summary List repository secrets + * @request GET:/repos/{owner}/{repo}/actions/secrets + */ + actionsListRepoSecrets: ({ owner, repo, ...query }: ActionsListRepoSecretsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsListRepoWorkflows + * @summary List repository workflows + * @request GET:/repos/{owner}/{repo}/actions/workflows + */ + actionsListRepoWorkflows: ({ owner, repo, ...query }: ActionsListRepoWorkflowsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListRunnerApplicationsForRepo + * @summary List runner applications for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/downloads + */ + actionsListRunnerApplicationsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/downloads\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all self-hosted runners configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnersForRepo + * @summary List self-hosted runners for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners + */ + actionsListSelfHostedRunnersForRepo: ( + { owner, repo, ...query }: ActionsListSelfHostedRunnersForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists artifacts for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsListWorkflowRunArtifacts + * @summary List workflow run artifacts + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/artifacts + */ + actionsListWorkflowRunArtifacts: ( + { owner, repo, runId, ...query }: ActionsListWorkflowRunArtifactsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/artifacts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all workflow runs for a workflow. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. + * + * @tags actions + * @name ActionsListWorkflowRuns + * @summary List workflow runs + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs + */ + actionsListWorkflowRuns: ( + { owner, repo, workflowId, ...query }: ActionsListWorkflowRunsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/runs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all workflow runs for a repository. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. + * + * @tags actions + * @name ActionsListWorkflowRunsForRepo + * @summary List workflow runs for a repository + * @request GET:/repos/{owner}/{repo}/actions/runs + */ + actionsListWorkflowRunsForRepo: ( + { owner, repo, ...query }: ActionsListWorkflowRunsForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Re-runs your workflow run using its \`id\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsReRunWorkflow + * @summary Re-run a workflow + * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/rerun + */ + actionsReRunWorkflow: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/rerun\`, + method: "POST", + ...params, + }), + + /** + * @description Sets the actions that are allowed in a repository. To use this endpoint, the repository permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." If the repository belongs to an organization or enterprise that has \`selected\` actions set at the organization or enterprise levels, then you cannot override any of the allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the repository must belong to an enterprise. If the repository does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsSetAllowedActionsRepository + * @summary Set allowed actions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions/selected-actions + */ + actionsSetAllowedActionsRepository: ( + owner: string, + repo: string, + data: SelectedActions, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions/selected-actions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Sets the GitHub Actions permissions policy for enabling GitHub Actions and allowed actions in the repository. If the repository belongs to an organization or enterprise that has set restrictive permissions at the organization or enterprise levels, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsSetGithubActionsPermissionsRepository + * @summary Set GitHub Actions permissions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions + */ + actionsSetGithubActionsPermissionsRepository: ( + owner: string, + repo: string, + data: ActionsSetGithubActionsPermissionsRepositoryPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint should only be used to stop watching a repository. To control whether or not you wish to receive notifications from a repository, [set the repository's subscription manually](https://docs.github.com/rest/reference/activity#set-a-repository-subscription). + * + * @tags activity + * @name ActivityDeleteRepoSubscription + * @summary Delete a repository subscription + * @request DELETE:/repos/{owner}/{repo}/subscription + */ + activityDeleteRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityGetRepoSubscription + * @summary Get a repository subscription + * @request GET:/repos/{owner}/{repo}/subscription + */ + activityGetRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityListRepoEvents + * @summary List repository events + * @request GET:/repos/{owner}/{repo}/events + */ + activityListRepoEvents: ({ owner, repo, ...query }: ActivityListRepoEventsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all notifications for the current user. + * + * @tags activity + * @name ActivityListRepoNotificationsForAuthenticatedUser + * @summary List repository notifications for the authenticated user + * @request GET:/repos/{owner}/{repo}/notifications + */ + activityListRepoNotificationsForAuthenticatedUser: ( + { owner, repo, ...query }: ActivityListRepoNotificationsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/notifications\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people that have starred the repository. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * + * @tags activity + * @name ActivityListStargazersForRepo + * @summary List stargazers + * @request GET:/repos/{owner}/{repo}/stargazers + */ + activityListStargazersForRepo: ( + { owner, repo, ...query }: ActivityListStargazersForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stargazers\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people watching the specified repository. + * + * @tags activity + * @name ActivityListWatchersForRepo + * @summary List watchers + * @request GET:/repos/{owner}/{repo}/subscribers + */ + activityListWatchersForRepo: ( + { owner, repo, ...query }: ActivityListWatchersForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscribers\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Marks all notifications in a repository as "read" removes them from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List repository notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-repository-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. + * + * @tags activity + * @name ActivityMarkRepoNotificationsAsRead + * @summary Mark repository notifications as read + * @request PUT:/repos/{owner}/{repo}/notifications + */ + activityMarkRepoNotificationsAsRead: ( + owner: string, + repo: string, + data: ActivityMarkRepoNotificationsAsReadPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/notifications\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description If you would like to watch a repository, set \`subscribed\` to \`true\`. If you would like to ignore notifications made within a repository, set \`ignored\` to \`true\`. If you would like to stop watching a repository, [delete the repository's subscription](https://docs.github.com/rest/reference/activity#delete-a-repository-subscription) completely. + * + * @tags activity + * @name ActivitySetRepoSubscription + * @summary Set a repository subscription + * @request PUT:/repos/{owner}/{repo}/subscription + */ + activitySetRepoSubscription: ( + owner: string, + repo: string, + data: ActivitySetRepoSubscriptionPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetRepoInstallation + * @summary Get a repository installation for the authenticated app + * @request GET:/repos/{owner}/{repo}/installation + */ + appsGetRepoInstallation: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/installation\`, + method: "GET", + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Creates a new check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to create check runs. In a check suite, GitHub limits the number of check runs with the same name to 1000. Once these check runs exceed 1000, GitHub will start to automatically delete older check runs. + * + * @tags checks + * @name ChecksCreate + * @summary Create a check run + * @request POST:/repos/{owner}/{repo}/check-runs + */ + checksCreate: (owner: string, repo: string, data: ChecksCreatePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. By default, check suites are automatically created when you create a [check run](https://docs.github.com/rest/reference/checks#check-runs). You only need to use this endpoint for manually creating check suites when you've disabled automatic creation using "[Update repository preferences for check suites](https://docs.github.com/rest/reference/checks#update-repository-preferences-for-check-suites)". Your GitHub App must have the \`checks:write\` permission to create check suites. + * + * @tags checks + * @name ChecksCreateSuite + * @summary Create a check suite + * @request POST:/repos/{owner}/{repo}/check-suites + */ + checksCreateSuite: (owner: string, repo: string, data: ChecksCreateSuitePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Gets a single check run using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * + * @tags checks + * @name ChecksGet + * @summary Get a check run + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id} + */ + checksGet: (owner: string, repo: string, checkRunId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Gets a single check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. + * + * @tags checks + * @name ChecksGetSuite + * @summary Get a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id} + */ + checksGetSuite: (owner: string, repo: string, checkSuiteId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists annotations for a check run using the annotation \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get annotations for a check run. OAuth Apps and authenticated users must have the \`repo\` scope to get annotations for a check run in a private repository. + * + * @tags checks + * @name ChecksListAnnotations + * @summary List check run annotations + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations + */ + checksListAnnotations: ( + { owner, repo, checkRunId, ...query }: ChecksListAnnotationsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}/annotations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a commit ref. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * + * @tags checks + * @name ChecksListForRef + * @summary List check runs for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-runs + */ + checksListForRef: ({ owner, repo, ref, ...query }: ChecksListForRefParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/check-runs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. + * + * @tags checks + * @name ChecksListForSuite + * @summary List check runs in a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs + */ + checksListForSuite: ( + { owner, repo, checkSuiteId, ...query }: ChecksListForSuiteParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}/check-runs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Lists check suites for a commit \`ref\`. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to list check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. + * + * @tags checks + * @name ChecksListSuitesForRef + * @summary List check suites for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-suites + */ + checksListSuitesForRef: ( + { owner, repo, ref, ...query }: ChecksListSuitesForRefParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/check-suites\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Triggers GitHub to rerequest an existing check suite, without pushing new code to a repository. This endpoint will trigger the [\`check_suite\` webhook](https://docs.github.com/webhooks/event-payloads/#check_suite) event with the action \`rerequested\`. When a check suite is \`rerequested\`, its \`status\` is reset to \`queued\` and the \`conclusion\` is cleared. To rerequest a check suite, your GitHub App must have the \`checks:read\` permission on a private repository or pull access to a public repository. + * + * @tags checks + * @name ChecksRerequestSuite + * @summary Rerequest a check suite + * @request POST:/repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest + */ + checksRerequestSuite: (owner: string, repo: string, checkSuiteId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}/rerequest\`, + method: "POST", + ...params, + }), + + /** + * @description Changes the default automatic flow when creating check suites. By default, a check suite is automatically created each time code is pushed to a repository. When you disable the automatic creation of check suites, you can manually [Create a check suite](https://docs.github.com/rest/reference/checks#create-a-check-suite). You must have admin permissions in the repository to set preferences for check suites. + * + * @tags checks + * @name ChecksSetSuitesPreferences + * @summary Update repository preferences for check suites + * @request PATCH:/repos/{owner}/{repo}/check-suites/preferences + */ + checksSetSuitesPreferences: ( + owner: string, + repo: string, + data: ChecksSetSuitesPreferencesPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/preferences\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Updates a check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to edit check runs. + * + * @tags checks + * @name ChecksUpdate + * @summary Update a check run + * @request PATCH:/repos/{owner}/{repo}/check-runs/{check_run_id} + */ + checksUpdate: ( + owner: string, + repo: string, + checkRunId: number, + data: ChecksUpdatePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Gets a single code scanning alert. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. The security \`alert_number\` is found at the end of the security alert's URL. For example, the security alert ID for \`https://github.com/Octo-org/octo-repo/security/code-scanning/88\` is \`88\`. + * + * @tags code-scanning + * @name CodeScanningGetAlert + * @summary Get a code scanning alert + * @request GET:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} + */ + codeScanningGetAlert: (owner: string, repo: string, alertNumber: number, params: RequestParams = {}) => + this.request< + CodeScanningGetAlertData, + | void + | BasicError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts/\${alertNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all open code scanning alerts for the default branch (usually \`main\` or \`master\`). You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. + * + * @tags code-scanning + * @name CodeScanningListAlertsForRepo + * @summary List code scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/alerts + */ + codeScanningListAlertsForRepo: ( + { owner, repo, ...query }: CodeScanningListAlertsForRepoParams, + params: RequestParams = {}, + ) => + this.request< + CodeScanningListAlertsForRepoData, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the details of recent code scanning analyses for a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. + * + * @tags code-scanning + * @name CodeScanningListRecentAnalyses + * @summary List recent code scanning analyses for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/analyses + */ + codeScanningListRecentAnalyses: ( + { owner, repo, ...query }: CodeScanningListRecentAnalysesParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/analyses\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Updates the status of a single code scanning alert. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. + * + * @tags code-scanning + * @name CodeScanningUpdateAlert + * @summary Update a code scanning alert + * @request PATCH:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} + */ + codeScanningUpdateAlert: ( + owner: string, + repo: string, + alertNumber: AlertNumber, + data: CodeScanningUpdateAlertPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts/\${alertNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Upload a SARIF file containing the results of a code scanning analysis to make the results available in a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. + * + * @tags code-scanning + * @name CodeScanningUploadSarif + * @summary Upload a SARIF file + * @request POST:/repos/{owner}/{repo}/code-scanning/sarifs + */ + codeScanningUploadSarif: ( + owner: string, + repo: string, + data: CodeScanningUploadSarifPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/sarifs\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Returns the contents of the repository's code of conduct file, if one is detected. A code of conduct is detected if there is a file named \`CODE_OF_CONDUCT\` in the root directory of the repository. GitHub detects which code of conduct it is using fuzzy matching. + * + * @tags codes-of-conduct + * @name CodesOfConductGetForRepo + * @summary Get the code of conduct for a repository + * @request GET:/repos/{owner}/{repo}/community/code_of_conduct + */ + codesOfConductGetForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/community/code_of_conduct\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags git + * @name GitCreateBlob + * @summary Create a blob + * @request POST:/repos/{owner}/{repo}/git/blobs + */ + gitCreateBlob: (owner: string, repo: string, data: GitCreateBlobPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/blobs\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags git + * @name GitCreateCommit + * @summary Create a commit + * @request POST:/repos/{owner}/{repo}/git/commits + */ + gitCreateCommit: (owner: string, repo: string, data: GitCreateCommitPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/commits\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches. + * + * @tags git + * @name GitCreateRef + * @summary Create a reference + * @request POST:/repos/{owner}/{repo}/git/refs + */ + gitCreateRef: (owner: string, repo: string, data: GitCreateRefPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then [create](https://docs.github.com/rest/reference/git#create-a-reference) the \`refs/tags/[tag]\` reference. If you want to create a lightweight tag, you only have to [create](https://docs.github.com/rest/reference/git#create-a-reference) the tag reference - this call would be unnecessary. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags git + * @name GitCreateTag + * @summary Create a tag object + * @request POST:/repos/{owner}/{repo}/git/tags + */ + gitCreateTag: (owner: string, repo: string, data: GitCreateTagPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/tags\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The tree creation API accepts nested entries. If you specify both a tree and a nested path modifying that tree, this endpoint will overwrite the contents of the tree with the new path contents, and create a new tree structure. If you use this endpoint to add, delete, or modify the file contents in a tree, you will need to commit the tree and then update a branch to point to the commit. For more information see "[Create a commit](https://docs.github.com/rest/reference/git#create-a-commit)" and "[Update a reference](https://docs.github.com/rest/reference/git#update-a-reference)." + * + * @tags git + * @name GitCreateTree + * @summary Create a tree + * @request POST:/repos/{owner}/{repo}/git/trees + */ + gitCreateTree: (owner: string, repo: string, data: GitCreateTreePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/trees\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags git + * @name GitDeleteRef + * @summary Delete a reference + * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} + */ + gitDeleteRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The \`content\` in the response will always be Base64 encoded. _Note_: This API supports blobs up to 100 megabytes in size. + * + * @tags git + * @name GitGetBlob + * @summary Get a blob + * @request GET:/repos/{owner}/{repo}/git/blobs/{file_sha} + */ + gitGetBlob: (owner: string, repo: string, fileSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/blobs/\${fileSha}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags git + * @name GitGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/git/commits/{commit_sha} + */ + gitGetCommit: (owner: string, repo: string, commitSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/commits/\${commitSha}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns a single reference from your Git database. The \`:ref\` in the URL must be formatted as \`heads/\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't match an existing ref, a \`404\` is returned. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". + * + * @tags git + * @name GitGetRef + * @summary Get a reference + * @request GET:/repos/{owner}/{repo}/git/ref/{ref} + */ + gitGetRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/ref/\${ref}\`, + method: "GET", + ...params, + }), + + /** + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags git + * @name GitGetTag + * @summary Get a tag + * @request GET:/repos/{owner}/{repo}/git/tags/{tag_sha} + */ + gitGetTag: (owner: string, repo: string, tagSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/tags/\${tagSha}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns a single tree using the SHA1 value for that tree. If \`truncated\` is \`true\` in the response then the number of items in the \`tree\` array exceeded our maximum limit. If you need to fetch more items, use the non-recursive method of fetching trees, and fetch one sub-tree at a time. + * + * @tags git + * @name GitGetTree + * @summary Get a tree + * @request GET:/repos/{owner}/{repo}/git/trees/{tree_sha} + */ + gitGetTree: ({ owner, repo, treeSha, ...query }: GitGetTreeParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/trees/\${treeSha}\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Returns an array of references from your Git database that match the supplied name. The \`:ref\` in the URL must be formatted as \`heads/\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't exist in the repository, but existing refs start with \`:ref\`, they will be returned as an array. When you use this endpoint without providing a \`:ref\`, it will return an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just \`heads\` and \`tags\`. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". If you request matching references for a branch named \`feature\` but the branch \`feature\` doesn't exist, the response can still include other matching head refs that start with the word \`feature\`, such as \`featureA\` and \`featureB\`. + * + * @tags git + * @name GitListMatchingRefs + * @summary List matching references + * @request GET:/repos/{owner}/{repo}/git/matching-refs/{ref} + */ + gitListMatchingRefs: ({ owner, repo, ref, ...query }: GitListMatchingRefsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/matching-refs/\${ref}\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags git + * @name GitUpdateRef + * @summary Update a reference + * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} + */ + gitUpdateRef: (owner: string, repo: string, ref: string, data: GitUpdateRefPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Shows which type of GitHub user can interact with this repository and when the restriction expires. If there are no restrictions, you will see an empty response. + * + * @tags interactions + * @name InteractionsGetRestrictionsForRepo + * @summary Get interaction restrictions for a repository + * @request GET:/repos/{owner}/{repo}/interaction-limits + */ + interactionsGetRestrictionsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "GET", + ...params, + }), + + /** + * @description Removes all interaction restrictions from the given repository. You must have owner or admin access to remove restrictions. If the interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. + * + * @tags interactions + * @name InteractionsRemoveRestrictionsForRepo + * @summary Remove interaction restrictions for a repository + * @request DELETE:/repos/{owner}/{repo}/interaction-limits + */ + interactionsRemoveRestrictionsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "DELETE", + ...params, + }), + + /** + * @description Temporarily restricts interactions to a certain type of GitHub user within the given repository. You must have owner or admin access to set these restrictions. If an interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. + * + * @tags interactions + * @name InteractionsSetRestrictionsForRepo + * @summary Set interaction restrictions for a repository + * @request PUT:/repos/{owner}/{repo}/interaction-limits + */ + interactionsSetRestrictionsForRepo: ( + owner: string, + repo: string, + data: InteractionLimit, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds up to 10 assignees to an issue. Users already assigned to an issue are not replaced. + * + * @tags issues + * @name IssuesAddAssignees + * @summary Add assignees to an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/assignees + */ + issuesAddAssignees: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesAddAssigneesPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/assignees\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesAddLabels + * @summary Add labels to an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + issuesAddLabels: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesAddLabelsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Checks if a user has permission to be assigned to an issue in this repository. If the \`assignee\` can be assigned to issues in the repository, a \`204\` header with no content is returned. Otherwise a \`404\` status code is returned. + * + * @tags issues + * @name IssuesCheckUserCanBeAssigned + * @summary Check if a user can be assigned + * @request GET:/repos/{owner}/{repo}/assignees/{assignee} + */ + issuesCheckUserCanBeAssigned: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, + method: "GET", + ...params, + }), + + /** + * @description Any user with pull access to a repository can create an issue. If [issues are disabled in the repository](https://help.github.com/articles/disabling-issues/), the API returns a \`410 Gone\` status. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * + * @tags issues + * @name IssuesCreate + * @summary Create an issue + * @request POST:/repos/{owner}/{repo}/issues + */ + issuesCreate: (owner: string, repo: string, data: IssuesCreatePayload, params: RequestParams = {}) => + this.request< + IssuesCreateData, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * + * @tags issues + * @name IssuesCreateComment + * @summary Create an issue comment + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/comments + */ + issuesCreateComment: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesCreateCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesCreateLabel + * @summary Create a label + * @request POST:/repos/{owner}/{repo}/labels + */ + issuesCreateLabel: (owner: string, repo: string, data: IssuesCreateLabelPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesCreateMilestone + * @summary Create a milestone + * @request POST:/repos/{owner}/{repo}/milestones + */ + issuesCreateMilestone: ( + owner: string, + repo: string, + data: IssuesCreateMilestonePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesDeleteComment + * @summary Delete an issue comment + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + issuesDeleteComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesDeleteLabel + * @summary Delete a label + * @request DELETE:/repos/{owner}/{repo}/labels/{name} + */ + issuesDeleteLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesDeleteMilestone + * @summary Delete a milestone + * @request DELETE:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + issuesDeleteMilestone: (owner: string, repo: string, milestoneNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The API returns a [\`301 Moved Permanently\` status](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-redirects-redirects) if the issue was [transferred](https://help.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API returns a \`404 Not Found\` status. If the issue was deleted from a repository where the authenticated user has read access, the API returns a \`410 Gone\` status. To receive webhook events for transferred and deleted issues, subscribe to the [\`issues\`](https://docs.github.com/webhooks/event-payloads/#issues) webhook. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesGet + * @summary Get an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number} + */ + issuesGet: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesGetComment + * @summary Get an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + issuesGetComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesGetEvent + * @summary Get an issue event + * @request GET:/repos/{owner}/{repo}/issues/events/{event_id} + */ + issuesGetEvent: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesGetLabel + * @summary Get a label + * @request GET:/repos/{owner}/{repo}/labels/{name} + */ + issuesGetLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesGetMilestone + * @summary Get a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + issuesGetMilestone: (owner: string, repo: string, milestoneNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists the [available assignees](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/) for issues in a repository. + * + * @tags issues + * @name IssuesListAssignees + * @summary List assignees + * @request GET:/repos/{owner}/{repo}/assignees + */ + issuesListAssignees: ({ owner, repo, ...query }: IssuesListAssigneesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/assignees\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Issue Comments are ordered by ascending ID. + * + * @tags issues + * @name IssuesListComments + * @summary List issue comments + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/comments + */ + issuesListComments: ( + { owner, repo, issueNumber, ...query }: IssuesListCommentsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description By default, Issue Comments are ordered by ascending ID. + * + * @tags issues + * @name IssuesListCommentsForRepo + * @summary List issue comments for a repository + * @request GET:/repos/{owner}/{repo}/issues/comments + */ + issuesListCommentsForRepo: ( + { owner, repo, ...query }: IssuesListCommentsForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListEvents + * @summary List issue events + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/events + */ + issuesListEvents: ({ owner, repo, issueNumber, ...query }: IssuesListEventsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListEventsForRepo + * @summary List issue events for a repository + * @request GET:/repos/{owner}/{repo}/issues/events + */ + issuesListEventsForRepo: ({ owner, repo, ...query }: IssuesListEventsForRepoParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListEventsForTimeline + * @summary List timeline events for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/timeline + */ + issuesListEventsForTimeline: ( + { owner, repo, issueNumber, ...query }: IssuesListEventsForTimelineParams, + params: RequestParams = {}, + ) => + this.request< + IssuesListEventsForTimelineData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/timeline\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List issues in a repository. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesListForRepo + * @summary List repository issues + * @request GET:/repos/{owner}/{repo}/issues + */ + issuesListForRepo: ({ owner, repo, ...query }: IssuesListForRepoParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListLabelsForMilestone + * @summary List labels for issues in a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number}/labels + */ + issuesListLabelsForMilestone: ( + { owner, repo, milestoneNumber, ...query }: IssuesListLabelsForMilestoneParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}/labels\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListLabelsForRepo + * @summary List labels for a repository + * @request GET:/repos/{owner}/{repo}/labels + */ + issuesListLabelsForRepo: ({ owner, repo, ...query }: IssuesListLabelsForRepoParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListLabelsOnIssue + * @summary List labels for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + issuesListLabelsOnIssue: ( + { owner, repo, issueNumber, ...query }: IssuesListLabelsOnIssueParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListMilestones + * @summary List milestones + * @request GET:/repos/{owner}/{repo}/milestones + */ + issuesListMilestones: ({ owner, repo, ...query }: IssuesListMilestonesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Users with push access can lock an issue or pull request's conversation. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags issues + * @name IssuesLock + * @summary Lock an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/lock + */ + issuesLock: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesLockPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/lock\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesRemoveAllLabels + * @summary Remove all labels from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + issuesRemoveAllLabels: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes one or more assignees from an issue. + * + * @tags issues + * @name IssuesRemoveAssignees + * @summary Remove assignees from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/assignees + */ + issuesRemoveAssignees: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesRemoveAssigneesPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/assignees\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Removes the specified label from the issue, and returns the remaining labels on the issue. This endpoint returns a \`404 Not Found\` status if the label does not exist. + * + * @tags issues + * @name IssuesRemoveLabel + * @summary Remove a label from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels/{name} + */ + issuesRemoveLabel: (owner: string, repo: string, issueNumber: number, name: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels/\${name}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes any previous labels and sets the new labels for an issue. + * + * @tags issues + * @name IssuesSetLabels + * @summary Set labels for an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/labels + */ + issuesSetLabels: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesSetLabelsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Users with push access can unlock an issue's conversation. + * + * @tags issues + * @name IssuesUnlock + * @summary Unlock an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/lock + */ + issuesUnlock: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/lock\`, + method: "DELETE", + ...params, + }), + + /** + * @description Issue owners and users with push access can edit an issue. + * + * @tags issues + * @name IssuesUpdate + * @summary Update an issue + * @request PATCH:/repos/{owner}/{repo}/issues/{issue_number} + */ + issuesUpdate: ( + owner: string, + repo: string, + issueNumber: number, + data: IssuesUpdatePayload, + params: RequestParams = {}, + ) => + this.request< + IssuesUpdateData, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesUpdateComment + * @summary Update an issue comment + * @request PATCH:/repos/{owner}/{repo}/issues/comments/{comment_id} + */ + issuesUpdateComment: ( + owner: string, + repo: string, + commentId: number, + data: IssuesUpdateCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesUpdateLabel + * @summary Update a label + * @request PATCH:/repos/{owner}/{repo}/labels/{name} + */ + issuesUpdateLabel: ( + owner: string, + repo: string, + name: string, + data: IssuesUpdateLabelPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesUpdateMilestone + * @summary Update a milestone + * @request PATCH:/repos/{owner}/{repo}/milestones/{milestone_number} + */ + issuesUpdateMilestone: ( + owner: string, + repo: string, + milestoneNumber: number, + data: IssuesUpdateMilestonePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This method returns the contents of the repository's license file, if one is detected. Similar to [Get repository content](https://docs.github.com/rest/reference/repos#get-repository-content), this method also supports [custom media types](https://docs.github.com/rest/overview/media-types) for retrieving the raw license content or rendered license HTML. + * + * @tags licenses + * @name LicensesGetForRepo + * @summary Get the license for a repository + * @request GET:/repos/{owner}/{repo}/license + */ + licensesGetForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/license\`, + method: "GET", + ...params, + }), + + /** + * @description Stop an import for a repository. + * + * @tags migrations + * @name MigrationsCancelImport + * @summary Cancel an import + * @request DELETE:/repos/{owner}/{repo}/import + */ + migrationsCancelImport: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "DELETE", + ...params, + }), + + /** + * @description Each type of source control system represents authors in a different way. For example, a Git commit author has a display name and an email address, but a Subversion commit author just has a username. The GitHub Importer will make the author information valid, but the author might not be correct. For example, it will change the bare Subversion username \`hubot\` into something like \`hubot \`. This endpoint and the [Map a commit author](https://docs.github.com/rest/reference/migrations#map-a-commit-author) endpoint allow you to provide correct Git author information. + * + * @tags migrations + * @name MigrationsGetCommitAuthors + * @summary Get commit authors + * @request GET:/repos/{owner}/{repo}/import/authors + */ + migrationsGetCommitAuthors: ( + { owner, repo, ...query }: MigrationsGetCommitAuthorsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/authors\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description View the progress of an import. **Import status** This section includes details about the possible values of the \`status\` field of the Import Progress response. An import that does not have errors will progress through these steps: * \`detecting\` - the "detection" step of the import is in progress because the request did not include a \`vcs\` parameter. The import is identifying the type of source control present at the URL. * \`importing\` - the "raw" step of the import is in progress. This is where commit data is fetched from the original repository. The import progress response will include \`commit_count\` (the total number of raw commits that will be imported) and \`percent\` (0 - 100, the current progress through the import). * \`mapping\` - the "rewrite" step of the import is in progress. This is where SVN branches are converted to Git branches, and where author updates are applied. The import progress response does not include progress information. * \`pushing\` - the "push" step of the import is in progress. This is where the importer updates the repository on GitHub. The import progress response will include \`push_percent\`, which is the percent value reported by \`git push\` when it is "Writing objects". * \`complete\` - the import is complete, and the repository is ready on GitHub. If there are problems, you will see one of these in the \`status\` field: * \`auth_failed\` - the import requires authentication in order to connect to the original repository. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`error\` - the import encountered an error. The import progress response will include the \`failed_step\` and an error message. Contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com) for more information. * \`detection_needs_auth\` - the importer requires authentication for the originating repository to continue detection. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`detection_found_nothing\` - the importer didn't recognize any source control at the URL. To resolve, [Cancel the import](https://docs.github.com/rest/reference/migrations#cancel-an-import) and [retry](https://docs.github.com/rest/reference/migrations#start-an-import) with the correct URL. * \`detection_found_multiple\` - the importer found several projects or repositories at the provided URL. When this is the case, the Import Progress response will also include a \`project_choices\` field with the possible project choices as values. To update project choice, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. **The project_choices field** When multiple projects are found at the provided URL, the response hash will include a \`project_choices\` field, the value of which is an array of hashes each representing a project choice. The exact key/value pairs of the project hashes will differ depending on the version control type. **Git LFS related fields** This section includes details about Git LFS related fields that may be present in the Import Progress response. * \`use_lfs\` - describes whether the import has been opted in or out of using Git LFS. The value can be \`opt_in\`, \`opt_out\`, or \`undecided\` if no action has been taken. * \`has_large_files\` - the boolean value describing whether files larger than 100MB were found during the \`importing\` step. * \`large_files_size\` - the total size in gigabytes of files larger than 100MB found in the originating repository. * \`large_files_count\` - the total number of files larger than 100MB found in the originating repository. To see a list of these files, make a "Get Large Files" request. + * + * @tags migrations + * @name MigrationsGetImportStatus + * @summary Get an import status + * @request GET:/repos/{owner}/{repo}/import + */ + migrationsGetImportStatus: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "GET", + ...params, + }), + + /** + * @description List files larger than 100MB found during the import + * + * @tags migrations + * @name MigrationsGetLargeFiles + * @summary Get large files + * @request GET:/repos/{owner}/{repo}/import/large_files + */ + migrationsGetLargeFiles: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/large_files\`, + method: "GET", + ...params, + }), + + /** + * @description Update an author's identity for the import. Your application can continue updating authors any time before you push new commits to the repository. + * + * @tags migrations + * @name MigrationsMapCommitAuthor + * @summary Map a commit author + * @request PATCH:/repos/{owner}/{repo}/import/authors/{author_id} + */ + migrationsMapCommitAuthor: ( + owner: string, + repo: string, + authorId: number, + data: MigrationsMapCommitAuthorPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/authors/\${authorId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You can import repositories from Subversion, Mercurial, and TFS that include files larger than 100MB. This ability is powered by [Git LFS](https://git-lfs.github.com). You can learn more about our LFS feature and working with large files [on our help site](https://help.github.com/articles/versioning-large-files/). + * + * @tags migrations + * @name MigrationsSetLfsPreference + * @summary Update Git LFS preference + * @request PATCH:/repos/{owner}/{repo}/import/lfs + */ + migrationsSetLfsPreference: ( + owner: string, + repo: string, + data: MigrationsSetLfsPreferencePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/lfs\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Start a source import to a GitHub repository using GitHub Importer. + * + * @tags migrations + * @name MigrationsStartImport + * @summary Start an import + * @request PUT:/repos/{owner}/{repo}/import + */ + migrationsStartImport: ( + owner: string, + repo: string, + data: MigrationsStartImportPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description An import can be updated with credentials or a project choice by passing in the appropriate parameters in this API request. If no parameters are provided, the import will be restarted. + * + * @tags migrations + * @name MigrationsUpdateImport + * @summary Update an import + * @request PATCH:/repos/{owner}/{repo}/import + */ + migrationsUpdateImport: ( + owner: string, + repo: string, + data: MigrationsUpdateImportPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a repository project board. Returns a \`404 Not Found\` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsCreateForRepo + * @summary Create a repository project + * @request POST:/repos/{owner}/{repo}/projects + */ + projectsCreateForRepo: ( + owner: string, + repo: string, + data: ProjectsCreateForRepoPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/projects\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists the projects in a repository. Returns a \`404 Not Found\` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsListForRepo + * @summary List repository projects + * @request GET:/repos/{owner}/{repo}/projects + */ + projectsListForRepo: ({ owner, repo, ...query }: ProjectsListForRepoParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/projects\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsCheckIfMerged + * @summary Check if a pull request has been merged + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/merge + */ + pullsCheckIfMerged: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/merge\`, + method: "GET", + ...params, + }), + + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. You can create a new pull request. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags pulls + * @name PullsCreate + * @summary Create a pull request + * @request POST:/repos/{owner}/{repo}/pulls + */ + pullsCreate: (owner: string, repo: string, data: PullsCreatePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a reply to a review comment for a pull request. For the \`comment_id\`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags pulls + * @name PullsCreateReplyForReviewComment + * @summary Create a reply for a review comment + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies + */ + pullsCreateReplyForReviewComment: ( + owner: string, + repo: string, + pullNumber: number, + commentId: number, + data: PullsCreateReplyForReviewCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments/\${commentId}/replies\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. Pull request reviews created in the \`PENDING\` state do not include the \`submitted_at\` property in the response. **Note:** To comment on a specific line in a file, you need to first determine the _position_ of that line in the diff. The GitHub REST API v3 offers the \`application/vnd.github.v3.diff\` [media type](https://docs.github.com/rest/overview/media-types#commits-commit-comparison-and-pull-requests). To see a pull request diff, add this media type to the \`Accept\` header of a call to the [single pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) endpoint. The \`position\` value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. + * + * @tags pulls + * @name PullsCreateReview + * @summary Create a review for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews + */ + pullsCreateReview: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsCreateReviewPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Create an issue comment](https://docs.github.com/rest/reference/issues#create-an-issue-comment)." We recommend creating a review comment using \`line\`, \`side\`, and optionally \`start_line\` and \`start_side\` if your comment applies to more than one line in the pull request diff. You can still create a review comment using the \`position\` parameter. When you use \`position\`, the \`line\`, \`side\`, \`start_line\`, and \`start_side\` parameters are not required. For more information, see the [\`comfort-fade\` preview notice](https://docs.github.com/rest/reference/pulls#create-a-review-comment-for-a-pull-request-preview-notices). **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags pulls + * @name PullsCreateReviewComment + * @summary Create a review comment for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments + */ + pullsCreateReviewComment: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsCreateReviewCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsDeletePendingReview + * @summary Delete a pending review for a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + pullsDeletePendingReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deletes a review comment. + * + * @tags pulls + * @name PullsDeleteReviewComment + * @summary Delete a review comment for a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + pullsDeleteReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** To dismiss a pull request review on a [protected branch](https://docs.github.com/rest/reference/repos#branches), you must be a repository administrator or be included in the list of people or teams who can dismiss pull request reviews. + * + * @tags pulls + * @name PullsDismissReview + * @summary Dismiss a review for a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals + */ + pullsDismissReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + data: PullsDismissReviewPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/dismissals\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists details of a pull request by providing its number. When you get, [create](https://docs.github.com/rest/reference/pulls/#create-a-pull-request), or [edit](https://docs.github.com/rest/reference/pulls#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the \`mergeable\` key. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". The value of the \`mergeable\` attribute can be \`true\`, \`false\`, or \`null\`. If the value is \`null\`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-\`null\` value for the \`mergeable\` attribute in the response. If \`mergeable\` is \`true\`, then \`merge_commit_sha\` will be the SHA of the _test_ merge commit. The value of the \`merge_commit_sha\` attribute changes depending on the state of the pull request. Before merging a pull request, the \`merge_commit_sha\` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the \`merge_commit_sha\` attribute changes depending on how you merged the pull request: * If merged as a [merge commit](https://help.github.com/articles/about-merge-methods-on-github/), \`merge_commit_sha\` represents the SHA of the merge commit. * If merged via a [squash](https://help.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), \`merge_commit_sha\` represents the SHA of the squashed commit on the base branch. * If [rebased](https://help.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), \`merge_commit_sha\` represents the commit that the base branch was updated to. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. + * + * @tags pulls + * @name PullsGet + * @summary Get a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number} + */ + pullsGet: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsGetReview + * @summary Get a review for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + pullsGetReview: (owner: string, repo: string, pullNumber: number, reviewId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "GET", + ...params, + }), + + /** + * @description Provides details for a review comment. + * + * @tags pulls + * @name PullsGetReviewComment + * @summary Get a review comment for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + pullsGetReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, + method: "GET", + ...params, + }), + + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags pulls + * @name PullsList + * @summary List pull requests + * @request GET:/repos/{owner}/{repo}/pulls + */ + pullsList: ({ owner, repo, ...query }: PullsListParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List comments for a specific pull request review. + * + * @tags pulls + * @name PullsListCommentsForReview + * @summary List comments for a pull request review + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments + */ + pullsListCommentsForReview: ( + { owner, repo, pullNumber, reviewId, ...query }: PullsListCommentsForReviewParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) endpoint. + * + * @tags pulls + * @name PullsListCommits + * @summary List commits on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/commits + */ + pullsListCommits: ({ owner, repo, pullNumber, ...query }: PullsListCommitsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/commits\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** Responses include a maximum of 3000 files. The paginated response returns 30 files per page by default. + * + * @tags pulls + * @name PullsListFiles + * @summary List pull requests files + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/files + */ + pullsListFiles: ({ owner, repo, pullNumber, ...query }: PullsListFilesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/files\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsListRequestedReviewers + * @summary List requested reviewers for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + pullsListRequestedReviewers: ( + { owner, repo, pullNumber, ...query }: PullsListRequestedReviewersParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all review comments for a pull request. By default, review comments are in ascending order by ID. + * + * @tags pulls + * @name PullsListReviewComments + * @summary List review comments on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/comments + */ + pullsListReviewComments: ( + { owner, repo, pullNumber, ...query }: PullsListReviewCommentsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists review comments for all pull requests in a repository. By default, review comments are in ascending order by ID. + * + * @tags pulls + * @name PullsListReviewCommentsForRepo + * @summary List review comments in a repository + * @request GET:/repos/{owner}/{repo}/pulls/comments + */ + pullsListReviewCommentsForRepo: ( + { owner, repo, ...query }: PullsListReviewCommentsForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The list of reviews returns in chronological order. + * + * @tags pulls + * @name PullsListReviews + * @summary List reviews for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews + */ + pullsListReviews: ({ owner, repo, pullNumber, ...query }: PullsListReviewsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * + * @tags pulls + * @name PullsMerge + * @summary Merge a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/merge + */ + pullsMerge: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsMergePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/merge\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsRemoveRequestedReviewers + * @summary Remove requested reviewers from a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + pullsRemoveRequestedReviewers: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsRemoveRequestedReviewersPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * + * @tags pulls + * @name PullsRequestReviewers + * @summary Request reviewers for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + */ + pullsRequestReviewers: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsRequestReviewersPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pulls + * @name PullsSubmitReview + * @summary Submit a review for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events + */ + pullsSubmitReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + data: PullsSubmitReviewPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/events\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. + * + * @tags pulls + * @name PullsUpdate + * @summary Update a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/{pull_number} + */ + pullsUpdate: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsUpdatePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch. + * + * @tags pulls + * @name PullsUpdateBranch + * @summary Update a pull request branch + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/update-branch + */ + pullsUpdateBranch: ( + owner: string, + repo: string, + pullNumber: number, + data: PullsUpdateBranchPayload, + params: RequestParams = {}, + ) => + this.request< + PullsUpdateBranchData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/update-branch\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Update the review summary comment with new text. + * + * @tags pulls + * @name PullsUpdateReview + * @summary Update a review for a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} + */ + pullsUpdateReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + data: PullsUpdateReviewPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Enables you to edit a review comment. + * + * @tags pulls + * @name PullsUpdateReviewComment + * @summary Update a review comment for a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{comment_id} + */ + pullsUpdateReviewComment: ( + owner: string, + repo: string, + commentId: number, + data: PullsUpdateReviewCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this commit comment. + * + * @tags reactions + * @name ReactionsCreateForCommitComment + * @summary Create reaction for a commit comment + * @request POST:/repos/{owner}/{repo}/comments/{comment_id}/reactions + */ + reactionsCreateForCommitComment: ( + owner: string, + repo: string, + commentId: number, + data: ReactionsCreateForCommitCommentPayload, + params: RequestParams = {}, + ) => + this.request< + ReactionsCreateForCommitCommentData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a reaction to an [issue](https://docs.github.com/rest/reference/issues/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this issue. + * + * @tags reactions + * @name ReactionsCreateForIssue + * @summary Create reaction for an issue + * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/reactions + */ + reactionsCreateForIssue: ( + owner: string, + repo: string, + issueNumber: number, + data: ReactionsCreateForIssuePayload, + params: RequestParams = {}, + ) => + this.request< + ReactionsCreateForIssueData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a reaction to an [issue comment](https://docs.github.com/rest/reference/issues#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this issue comment. + * + * @tags reactions + * @name ReactionsCreateForIssueComment + * @summary Create reaction for an issue comment + * @request POST:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions + */ + reactionsCreateForIssueComment: ( + owner: string, + repo: string, + commentId: number, + data: ReactionsCreateForIssueCommentPayload, + params: RequestParams = {}, + ) => + this.request< + ReactionsCreateForIssueCommentData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this pull request review comment. + * + * @tags reactions + * @name ReactionsCreateForPullRequestReviewComment + * @summary Create reaction for a pull request review comment + * @request POST:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions + */ + reactionsCreateForPullRequestReviewComment: ( + owner: string, + repo: string, + commentId: number, + data: ReactionsCreateForPullRequestReviewCommentPayload, + params: RequestParams = {}, + ) => + this.request< + ReactionsCreateForPullRequestReviewCommentData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * + * @tags reactions + * @name ReactionsDeleteForCommitComment + * @summary Delete a commit comment reaction + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id} + */ + reactionsDeleteForCommitComment: ( + owner: string, + repo: string, + commentId: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/issues/:issue_number/reactions/:reaction_id\`. Delete a reaction to an [issue](https://docs.github.com/rest/reference/issues/). + * + * @tags reactions + * @name ReactionsDeleteForIssue + * @summary Delete an issue reaction + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id} + */ + reactionsDeleteForIssue: ( + owner: string, + repo: string, + issueNumber: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE delete /repositories/:repository_id/issues/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * + * @tags reactions + * @name ReactionsDeleteForIssueComment + * @summary Delete an issue comment reaction + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id} + */ + reactionsDeleteForIssueComment: ( + owner: string, + repo: string, + commentId: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.\` Delete a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). + * + * @tags reactions + * @name ReactionsDeleteForPullRequestComment + * @summary Delete a pull request comment reaction + * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id} + */ + reactionsDeleteForPullRequestComment: ( + owner: string, + repo: string, + commentId: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description List the reactions to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * + * @tags reactions + * @name ReactionsListForCommitComment + * @summary List reactions for a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id}/reactions + */ + reactionsListForCommitComment: ( + { owner, repo, commentId, ...query }: ReactionsListForCommitCommentParams, + params: RequestParams = {}, + ) => + this.request< + ReactionsListForCommitCommentData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the reactions to an [issue](https://docs.github.com/rest/reference/issues). + * + * @tags reactions + * @name ReactionsListForIssue + * @summary List reactions for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/reactions + */ + reactionsListForIssue: ( + { owner, repo, issueNumber, ...query }: ReactionsListForIssueParams, + params: RequestParams = {}, + ) => + this.request< + ReactionsListForIssueData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the reactions to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * + * @tags reactions + * @name ReactionsListForIssueComment + * @summary List reactions for an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions + */ + reactionsListForIssueComment: ( + { owner, repo, commentId, ...query }: ReactionsListForIssueCommentParams, + params: RequestParams = {}, + ) => + this.request< + ReactionsListForIssueCommentData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List the reactions to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). + * + * @tags reactions + * @name ReactionsListForPullRequestReviewComment + * @summary List reactions for a pull request review comment + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions + */ + reactionsListForPullRequestReviewComment: ( + { owner, repo, commentId, ...query }: ReactionsListForPullRequestReviewCommentParams, + params: RequestParams = {}, + ) => + this.request< + ReactionsListForPullRequestReviewCommentData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified apps push access for this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposAddAppAccessRestrictions + * @summary Add app access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + reposAddAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposAddAppAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. For more information the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." The invitee will receive a notification that they have been invited to the repository, which they must accept or decline. They may do this via the notifications page, the email they receive, or by using the [repository invitations API endpoints](https://docs.github.com/rest/reference/repos#invitations). **Rate limits** To prevent abuse, you are limited to sending 50 invitations to a repository per 24 hour period. Note there is no limit if you are inviting organization members to an organization repository. + * + * @tags repos + * @name ReposAddCollaborator + * @summary Add a repository collaborator + * @request PUT:/repos/{owner}/{repo}/collaborators/{username} + */ + reposAddCollaborator: ( + owner: string, + repo: string, + username: string, + data: ReposAddCollaboratorPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposAddStatusCheckContexts + * @summary Add status check contexts + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + reposAddStatusCheckContexts: ( + owner: string, + repo: string, + branch: string, + data: ReposAddStatusCheckContextsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified teams push access for this branch. You can also give push access to child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | \`array\` | The teams that can have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposAddTeamAccessRestrictions + * @summary Add team access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + reposAddTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposAddTeamAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified people push access for this branch. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposAddUserAccessRestrictions + * @summary Add user access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + reposAddUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposAddUserAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. + * + * @tags repos + * @name ReposCheckCollaborator + * @summary Check if a user is a repository collaborator + * @request GET:/repos/{owner}/{repo}/collaborators/{username} + */ + reposCheckCollaborator: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Shows whether dependency alerts are enabled or disabled for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * + * @tags repos + * @name ReposCheckVulnerabilityAlerts + * @summary Check if vulnerability alerts are enabled for a repository + * @request GET:/repos/{owner}/{repo}/vulnerability-alerts + */ + reposCheckVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, + method: "GET", + ...params, + }), + + /** + * @description Both \`:base\` and \`:head\` must be branch names in \`:repo\`. To compare branches across other repositories in the same network as \`:repo\`, use the format \`:branch\`. The response from the API is equivalent to running the \`git log base..head\` command; however, commits are returned in chronological order. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. The response also includes details on the files that were changed between the two commits. This includes the status of the change (for example, if a file was added, removed, modified, or renamed), and details of the change itself. For example, files with a \`renamed\` status have a \`previous_filename\` field showing the previous filename of the file, and files with a \`modified\` status have a \`patch\` field showing the changes made to the file. **Working with large comparisons** The response will include a comparison of up to 250 commits. If you are working with a larger commit range, you can use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) to enumerate all commits in the range. For comparisons with extremely large diffs, you may receive an error response indicating that the diff took too long to generate. You can typically resolve this error by using a smaller commit range. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags repos + * @name ReposCompareCommits + * @summary Compare two commits + * @request GET:/repos/{owner}/{repo}/compare/{base}...{head} + */ + reposCompareCommits: (owner: string, repo: string, base: string, head: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/compare/\${base}...\${head}\`, + method: "GET", + ...params, + }), + + /** + * @description Create a comment for a commit using its \`:commit_sha\`. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags repos + * @name ReposCreateCommitComment + * @summary Create a commit comment + * @request POST:/repos/{owner}/{repo}/commits/{commit_sha}/comments + */ + reposCreateCommitComment: ( + owner: string, + repo: string, + commitSha: string, + data: ReposCreateCommitCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to require signed commits on a branch. You must enable branch protection to require signed commits. + * + * @tags repos + * @name ReposCreateCommitSignatureProtection + * @summary Create commit signature protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + reposCreateCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, + method: "POST", + ...params, + }), + + /** + * @description Users with push access in a repository can create commit statuses for a given SHA. Note: there is a limit of 1000 statuses per \`sha\` and \`context\` within a repository. Attempts to create more than 1000 statuses will result in a validation error. + * + * @tags repos + * @name ReposCreateCommitStatus + * @summary Create a commit status + * @request POST:/repos/{owner}/{repo}/statuses/{sha} + */ + reposCreateCommitStatus: ( + owner: string, + repo: string, + sha: string, + data: ReposCreateCommitStatusPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/statuses/\${sha}\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You can create a read-only deploy key. + * + * @tags repos + * @name ReposCreateDeployKey + * @summary Create a deploy key + * @request POST:/repos/{owner}/{repo}/keys + */ + reposCreateDeployKey: ( + owner: string, + repo: string, + data: ReposCreateDeployKeyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deployments offer a few configurable parameters with certain defaults. The \`ref\` parameter can be any named branch, tag, or SHA. At GitHub we often deploy branches and verify them before we merge a pull request. The \`environment\` parameter allows deployments to be issued to different runtime environments. Teams often have multiple environments for verifying their applications, such as \`production\`, \`staging\`, and \`qa\`. This parameter makes it easier to track which environments have requested deployments. The default environment is \`production\`. The \`auto_merge\` parameter is used to ensure that the requested ref is not behind the repository's default branch. If the ref _is_ behind the default branch for the repository, we will attempt to merge it for you. If the merge succeeds, the API will return a successful merge commit. If merge conflicts prevent the merge from succeeding, the API will return a failure response. By default, [commit statuses](https://docs.github.com/rest/reference/repos#statuses) for every submitted context must be in a \`success\` state. The \`required_contexts\` parameter allows you to specify a subset of contexts that must be \`success\`, or to specify contexts that have not yet been submitted. You are not required to use commit statuses to deploy. If you do not require any contexts or create any commit statuses, the deployment will always succeed. The \`payload\` parameter is available for any extra information that a deployment system might need. It is a JSON text field that will be passed on when a deployment event is dispatched. The \`task\` parameter is used by the deployment system to allow different execution paths. In the web world this might be \`deploy:migrations\` to run schema changes on the system. In the compiled world this could be a flag to compile an application with debugging enabled. Users with \`repo\` or \`repo_deployment\` scopes can create a deployment for a given ref. #### Merged branch response You will see this response when GitHub automatically merges the base branch into the topic branch instead of creating a deployment. This auto-merge happens when: * Auto-merge option is enabled in the repository * Topic branch does not include the latest changes on the base branch, which is \`master\` in the response example * There are no merge conflicts If there are no new commits in the base branch, a new request to create a deployment should give a successful response. #### Merge conflict response This error happens when the \`auto_merge\` option is enabled and when the default branch (in this case \`master\`), can't be merged into the branch that's being deployed (in this case \`topic-branch\`), due to merge conflicts. #### Failed commit status checks This error happens when the \`required_contexts\` parameter indicates that one or more contexts need to have a \`success\` status for the commit to be deployed, but one or more of the required contexts do not have a state of \`success\`. + * + * @tags repos + * @name ReposCreateDeployment + * @summary Create a deployment + * @request POST:/repos/{owner}/{repo}/deployments + */ + reposCreateDeployment: ( + owner: string, + repo: string, + data: ReposCreateDeploymentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Users with \`push\` access can create deployment statuses for a given deployment. GitHub Apps require \`read & write\` access to "Deployments" and \`read-only\` access to "Repo contents" (for private repos). OAuth Apps require the \`repo_deployment\` scope. + * + * @tags repos + * @name ReposCreateDeploymentStatus + * @summary Create a deployment status + * @request POST:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + */ + reposCreateDeploymentStatus: ( + owner: string, + repo: string, + deploymentId: number, + data: ReposCreateDeploymentStatusPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You can use this endpoint to trigger a webhook event called \`repository_dispatch\` when you want activity that happens outside of GitHub to trigger a GitHub Actions workflow or GitHub App webhook. You must configure your GitHub Actions workflow or GitHub App to run when the \`repository_dispatch\` event occurs. For an example \`repository_dispatch\` webhook payload, see "[RepositoryDispatchEvent](https://docs.github.com/webhooks/event-payloads/#repository_dispatch)." The \`client_payload\` parameter is available for any extra information that your workflow might need. This parameter is a JSON payload that will be passed on when the webhook event is dispatched. For example, the \`client_payload\` can include a message that a user would like to send using a GitHub Actions workflow. Or the \`client_payload\` can be used as a test to debug your workflow. This endpoint requires write access to the repository by providing either: - Personal access tokens with \`repo\` scope. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)" in the GitHub Help documentation. - GitHub Apps with both \`metadata:read\` and \`contents:read&write\` permissions. This input example shows how you can use the \`client_payload\` as a test to debug your workflow. + * + * @tags repos + * @name ReposCreateDispatchEvent + * @summary Create a repository dispatch event + * @request POST:/repos/{owner}/{repo}/dispatches + */ + reposCreateDispatchEvent: ( + owner: string, + repo: string, + data: ReposCreateDispatchEventPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/dispatches\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Create a fork for the authenticated user. **Note**: Forking a Repository happens asynchronously. You may have to wait a short period of time before you can access the git objects. If this takes longer than 5 minutes, be sure to contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com). + * + * @tags repos + * @name ReposCreateFork + * @summary Create a fork + * @request POST:/repos/{owner}/{repo}/forks + */ + reposCreateFork: (owner: string, repo: string, data: ReposCreateForkPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/forks\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a new file or replaces an existing file in a repository. + * + * @tags repos + * @name ReposCreateOrUpdateFileContents + * @summary Create or update file contents + * @request PUT:/repos/{owner}/{repo}/contents/{path} + */ + reposCreateOrUpdateFileContents: ( + owner: string, + repo: string, + path: string, + data: ReposCreateOrUpdateFileContentsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Configures a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages)." + * + * @tags repos + * @name ReposCreatePagesSite + * @summary Create a GitHub Pages site + * @request POST:/repos/{owner}/{repo}/pages + */ + reposCreatePagesSite: ( + owner: string, + repo: string, + data: ReposCreatePagesSitePayload, + params: RequestParams = {}, + ) => + this.request< + ReposCreatePagesSiteData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Users with push access to the repository can create a release. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags repos + * @name ReposCreateRelease + * @summary Create a release + * @request POST:/repos/{owner}/{repo}/releases + */ + reposCreateRelease: (owner: string, repo: string, data: ReposCreateReleasePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Creates a new repository using a repository template. Use the \`template_owner\` and \`template_repo\` route parameters to specify the repository to use as the template. The authenticated user must own or be a member of an organization that owns the repository. To check if a repository is available to use as a template, get the repository's information using the [Get a repository](https://docs.github.com/rest/reference/repos#get-a-repository) endpoint and check that the \`is_template\` key is \`true\`. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * + * @tags repos + * @name ReposCreateUsingTemplate + * @summary Create a repository using a template + * @request POST:/repos/{template_owner}/{template_repo}/generate + */ + reposCreateUsingTemplate: ( + templateOwner: string, + templateRepo: string, + data: ReposCreateUsingTemplatePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${templateOwner}/\${templateRepo}/generate\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Repositories can have multiple webhooks installed. Each webhook should have a unique \`config\`. Multiple webhooks can share the same \`config\` as long as those webhooks do not have any \`events\` that overlap. + * + * @tags repos + * @name ReposCreateWebhook + * @summary Create a repository webhook + * @request POST:/repos/{owner}/{repo}/hooks + */ + reposCreateWebhook: (owner: string, repo: string, data: ReposCreateWebhookPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deleting a repository requires admin access. If OAuth is used, the \`delete_repo\` scope is required. If an organization owner has configured the organization to prevent members from deleting organization-owned repositories, you will get a \`403 Forbidden\` response. + * + * @tags repos + * @name ReposDelete + * @summary Delete a repository + * @request DELETE:/repos/{owner}/{repo} + */ + reposDelete: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Disables the ability to restrict who can push to this branch. + * + * @tags repos + * @name ReposDeleteAccessRestrictions + * @summary Delete access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions + */ + reposDeleteAccessRestrictions: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removing admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * + * @tags repos + * @name ReposDeleteAdminBranchProtection + * @summary Delete admin branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposDeleteAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposDeleteBranchProtection + * @summary Delete branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection + */ + reposDeleteBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeleteCommitComment + * @summary Delete a commit comment + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id} + */ + reposDeleteCommitComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to disable required signed commits on a branch. You must enable branch protection to require signed commits. + * + * @tags repos + * @name ReposDeleteCommitSignatureProtection + * @summary Delete commit signature protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + reposDeleteCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deploy keys are immutable. If you need to update a key, remove the key and create a new one instead. + * + * @tags repos + * @name ReposDeleteDeployKey + * @summary Delete a deploy key + * @request DELETE:/repos/{owner}/{repo}/keys/{key_id} + */ + reposDeleteDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description To ensure there can always be an active deployment, you can only delete an _inactive_ deployment. Anyone with \`repo\` or \`repo_deployment\` scopes can delete an inactive deployment. To set a deployment as inactive, you must: * Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment. * Mark the active deployment as inactive by adding any non-successful deployment status. For more information, see "[Create a deployment](https://docs.github.com/rest/reference/repos/#create-a-deployment)" and "[Create a deployment status](https://docs.github.com/rest/reference/repos#create-a-deployment-status)." + * + * @tags repos + * @name ReposDeleteDeployment + * @summary Delete a deployment + * @request DELETE:/repos/{owner}/{repo}/deployments/{deployment_id} + */ + reposDeleteDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Deletes a file in a repository. You can provide an additional \`committer\` parameter, which is an object containing information about the committer. Or, you can provide an \`author\` parameter, which is an object containing information about the author. The \`author\` section is optional and is filled in with the \`committer\` information if omitted. If the \`committer\` information is omitted, the authenticated user's information is used. You must provide values for both \`name\` and \`email\`, whether you choose to use \`author\` or \`committer\`. Otherwise, you'll receive a \`422\` status code. + * + * @tags repos + * @name ReposDeleteFile + * @summary Delete a file + * @request DELETE:/repos/{owner}/{repo}/contents/{path} + */ + reposDeleteFile: ( + owner: string, + repo: string, + path: string, + data: ReposDeleteFilePayload, + params: RequestParams = {}, + ) => + this.request< + ReposDeleteFileData, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeleteInvitation + * @summary Delete a repository invitation + * @request DELETE:/repos/{owner}/{repo}/invitations/{invitation_id} + */ + reposDeleteInvitation: (owner: string, repo: string, invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations/\${invitationId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeletePagesSite + * @summary Delete a GitHub Pages site + * @request DELETE:/repos/{owner}/{repo}/pages + */ + reposDeletePagesSite: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + ReposDeletePagesSiteData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposDeletePullRequestReviewProtection + * @summary Delete pull request review protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + reposDeletePullRequestReviewProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, + method: "DELETE", + ...params, + }), + + /** + * @description Users with push access to the repository can delete a release. + * + * @tags repos + * @name ReposDeleteRelease + * @summary Delete a release + * @request DELETE:/repos/{owner}/{repo}/releases/{release_id} + */ + reposDeleteRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeleteReleaseAsset + * @summary Delete a release asset + * @request DELETE:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + reposDeleteReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeleteWebhook + * @summary Delete a repository webhook + * @request DELETE:/repos/{owner}/{repo}/hooks/{hook_id} + */ + reposDeleteWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Disables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * + * @tags repos + * @name ReposDisableAutomatedSecurityFixes + * @summary Disable automated security fixes + * @request DELETE:/repos/{owner}/{repo}/automated-security-fixes + */ + reposDisableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/automated-security-fixes\`, + method: "DELETE", + ...params, + }), + + /** + * @description Disables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * + * @tags repos + * @name ReposDisableVulnerabilityAlerts + * @summary Disable vulnerability alerts + * @request DELETE:/repos/{owner}/{repo}/vulnerability-alerts + */ + reposDisableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, + method: "DELETE", + ...params, + }), + + /** + * @description Gets a redirect URL to download a tar archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. + * + * @tags repos + * @name ReposDownloadTarballArchive + * @summary Download a repository archive (tar) + * @request GET:/repos/{owner}/{repo}/tarball/{ref} + */ + reposDownloadTarballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/tarball/\${ref}\`, + method: "GET", + ...params, + }), + + /** + * @description Gets a redirect URL to download a zip archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. + * + * @tags repos + * @name ReposDownloadZipballArchive + * @summary Download a repository archive (zip) + * @request GET:/repos/{owner}/{repo}/zipball/{ref} + */ + reposDownloadZipballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/zipball/\${ref}\`, + method: "GET", + ...params, + }), + + /** + * @description Enables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * + * @tags repos + * @name ReposEnableAutomatedSecurityFixes + * @summary Enable automated security fixes + * @request PUT:/repos/{owner}/{repo}/automated-security-fixes + */ + reposEnableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/automated-security-fixes\`, + method: "PUT", + ...params, + }), + + /** + * @description Enables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * + * @tags repos + * @name ReposEnableVulnerabilityAlerts + * @summary Enable vulnerability alerts + * @request PUT:/repos/{owner}/{repo}/vulnerability-alerts + */ + reposEnableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, + method: "PUT", + ...params, + }), + + /** + * @description When you pass the \`scarlet-witch-preview\` media type, requests to get a repository will also return the repository's code of conduct if it can be detected from the repository's code of conduct file. The \`parent\` and \`source\` objects are present when the repository is a fork. \`parent\` is the repository this repository was forked from, \`source\` is the ultimate source for the network. + * + * @tags repos + * @name ReposGet + * @summary Get a repository + * @request GET:/repos/{owner}/{repo} + */ + reposGet: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists who has access to this protected branch. **Note**: Users, apps, and teams \`restrictions\` are only available for organization-owned repositories. + * + * @tags repos + * @name ReposGetAccessRestrictions + * @summary Get access restrictions + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions + */ + reposGetAccessRestrictions: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetAdminBranchProtection + * @summary Get admin branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposGetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetAllStatusCheckContexts + * @summary Get all status check contexts + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + reposGetAllStatusCheckContexts: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetAllTopics + * @summary Get all repository topics + * @request GET:/repos/{owner}/{repo}/topics + */ + reposGetAllTopics: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + ReposGetAllTopicsData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/topics\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. + * + * @tags repos + * @name ReposGetAppsWithAccessToProtectedBranch + * @summary Get apps with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + reposGetAppsWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetBranch + * @summary Get a branch + * @request GET:/repos/{owner}/{repo}/branches/{branch} + */ + reposGetBranch: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request< + ReposGetBranchData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetBranchProtection + * @summary Get branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection + */ + reposGetBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, + method: "GET", + ...params, + }), + + /** + * @description Get the total number of clones and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. + * + * @tags repos + * @name ReposGetClones + * @summary Get repository clones + * @request GET:/repos/{owner}/{repo}/traffic/clones + */ + reposGetClones: ({ owner, repo, ...query }: ReposGetClonesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/clones\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Returns a weekly aggregate of the number of additions and deletions pushed to a repository. + * + * @tags repos + * @name ReposGetCodeFrequencyStats + * @summary Get the weekly commit activity + * @request GET:/repos/{owner}/{repo}/stats/code_frequency + */ + reposGetCodeFrequencyStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, + method: "GET", + ...params, + }), + + /** + * @description Checks the repository permission of a collaborator. The possible repository permissions are \`admin\`, \`write\`, \`read\`, and \`none\`. + * + * @tags repos + * @name ReposGetCollaboratorPermissionLevel + * @summary Get repository permissions for a user + * @request GET:/repos/{owner}/{repo}/collaborators/{username}/permission + */ + reposGetCollaboratorPermissionLevel: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}/permission\`, + method: "GET", + ...params, + }), + + /** + * @description Users with pull access in a repository can access a combined view of commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. The most recent status for each context is returned, up to 100. This field [paginates](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination) if there are over 100 contexts. Additionally, a combined \`state\` is returned. The \`state\` is one of: * **failure** if any of the contexts report as \`error\` or \`failure\` * **pending** if there are no statuses or a context is \`pending\` * **success** if the latest status for all contexts is \`success\` + * + * @tags repos + * @name ReposGetCombinedStatusForRef + * @summary Get the combined status for a specific reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/status + */ + reposGetCombinedStatusForRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the contents of a single commit reference. You must have \`read\` access for the repository to use this endpoint. **Note:** If there are more than 300 files in the commit diff, the response will include pagination link headers for the remaining files, up to a limit of 3000 files. Each page contains the static commit information, and the only changes are to the file listing. You can pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch \`diff\` and \`patch\` formats. Diffs with binary data will have no \`patch\` property. To return only the SHA-1 hash of the commit reference, you can provide the \`sha\` custom [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) in the \`Accept\` header. You can use this endpoint to check if a remote reference's SHA-1 hash is the same as your local reference's SHA-1 hash by providing the local SHA-1 reference as the ETag. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags repos + * @name ReposGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/commits/{ref} + */ + reposGetCommit: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the last year of commit activity grouped by week. The \`days\` array is a group of commits per day, starting on \`Sunday\`. + * + * @tags repos + * @name ReposGetCommitActivityStats + * @summary Get the last year of commit activity + * @request GET:/repos/{owner}/{repo}/stats/commit_activity + */ + reposGetCommitActivityStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetCommitComment + * @summary Get a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id} + */ + reposGetCommitComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to check whether a branch requires signed commits. An enabled status of \`true\` indicates you must sign commits on this branch. For more information, see [Signing commits with GPG](https://help.github.com/articles/signing-commits-with-gpg) in GitHub Help. **Note**: You must enable branch protection to require signed commits. + * + * @tags repos + * @name ReposGetCommitSignatureProtection + * @summary Get commit signature protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + */ + reposGetCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, + method: "GET", + ...params, + }), + + /** + * @description This endpoint will return all community profile metrics, including an overall health score, repository description, the presence of documentation, detected code of conduct, detected license, and the presence of ISSUE\\_TEMPLATE, PULL\\_REQUEST\\_TEMPLATE, README, and CONTRIBUTING files. The \`health_percentage\` score is defined as a percentage of how many of these four documents are present: README, CONTRIBUTING, LICENSE, and CODE_OF_CONDUCT. For example, if all four documents are present, then the \`health_percentage\` is \`100\`. If only one is present, then the \`health_percentage\` is \`25\`. \`content_reports_enabled\` is only returned for organization-owned repositories. + * + * @tags repos + * @name ReposGetCommunityProfileMetrics + * @summary Get community profile metrics + * @request GET:/repos/{owner}/{repo}/community/profile + */ + reposGetCommunityProfileMetrics: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/community/profile\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the contents of a file or directory in a repository. Specify the file path or directory in \`:path\`. If you omit \`:path\`, you will receive the contents of the repository's root directory. See the description below regarding what the API response includes for directories. Files and symlinks support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML (when supported). All content types support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) to ensure the content is returned in a consistent object format. **Note**: * To get a repository's contents recursively, you can [recursively get the tree](https://docs.github.com/rest/reference/git#trees). * This API has an upper limit of 1,000 files for a directory. If you need to retrieve more files, use the [Git Trees API](https://docs.github.com/rest/reference/git#get-a-tree). * This API supports files up to 1 megabyte in size. #### If the content is a directory The response will be an array of objects, one object for each item in the directory. When listing the contents of a directory, submodules have their "type" specified as "file". Logically, the value _should_ be "submodule". This behavior exists in API v3 [for backwards compatibility purposes](https://git.io/v1YCW). In the next major version of the API, the type will be returned as "submodule". #### If the content is a symlink If the requested \`:path\` points to a symlink, and the symlink's target is a normal file in the repository, then the API responds with the content of the file (in the format shown in the example. Otherwise, the API responds with an object describing the symlink itself. #### If the content is a submodule The \`submodule_git_url\` identifies the location of the submodule repository, and the \`sha\` identifies a specific commit within the submodule repository. Git uses the given URL when cloning the submodule repository, and checks out the submodule at that specific commit. If the submodule repository is not hosted on github.com, the Git URLs (\`git_url\` and \`_links["git"]\`) and the github.com URLs (\`html_url\` and \`_links["html"]\`) will have null values. + * + * @tags repos + * @name ReposGetContent + * @summary Get repository content + * @request GET:/repos/{owner}/{repo}/contents/{path} + */ + reposGetContent: ({ owner, repo, path, ...query }: ReposGetContentParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Returns the \`total\` number of commits authored by the contributor. In addition, the response includes a Weekly Hash (\`weeks\` array) with the following information: * \`w\` - Start of the week, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). * \`a\` - Number of additions * \`d\` - Number of deletions * \`c\` - Number of commits + * + * @tags repos + * @name ReposGetContributorsStats + * @summary Get all contributor commit activity + * @request GET:/repos/{owner}/{repo}/stats/contributors + */ + reposGetContributorsStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetDeployKey + * @summary Get a deploy key + * @request GET:/repos/{owner}/{repo}/keys/{key_id} + */ + reposGetDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetDeployment + * @summary Get a deployment + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id} + */ + reposGetDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}\`, + method: "GET", + ...params, + }), + + /** + * @description Users with pull access can view a deployment status for a deployment: + * + * @tags repos + * @name ReposGetDeploymentStatus + * @summary Get a deployment status + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id} + */ + reposGetDeploymentStatus: ( + owner: string, + repo: string, + deploymentId: number, + statusId: number, + params: RequestParams = {}, + ) => + this.request< + ReposGetDeploymentStatusData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses/\${statusId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetLatestPagesBuild + * @summary Get latest Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/latest + */ + reposGetLatestPagesBuild: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds/latest\`, + method: "GET", + ...params, + }), + + /** + * @description View the latest published full release for the repository. The latest release is the most recent non-prerelease, non-draft release, sorted by the \`created_at\` attribute. The \`created_at\` attribute is the date of the commit used for the release, and not the date when the release was drafted or published. + * + * @tags repos + * @name ReposGetLatestRelease + * @summary Get the latest release + * @request GET:/repos/{owner}/{repo}/releases/latest + */ + reposGetLatestRelease: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/latest\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetPages + * @summary Get a GitHub Pages site + * @request GET:/repos/{owner}/{repo}/pages + */ + reposGetPages: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetPagesBuild + * @summary Get GitHub Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/{build_id} + */ + reposGetPagesBuild: (owner: string, repo: string, buildId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds/\${buildId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the total commit counts for the \`owner\` and total commit counts in \`all\`. \`all\` is everyone combined, including the \`owner\` in the last 52 weeks. If you'd like to get the commit counts for non-owners, you can subtract \`owner\` from \`all\`. The array order is oldest week (index 0) to most recent week. + * + * @tags repos + * @name ReposGetParticipationStats + * @summary Get the weekly commit count + * @request GET:/repos/{owner}/{repo}/stats/participation + */ + reposGetParticipationStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/participation\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetPullRequestReviewProtection + * @summary Get pull request review protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + reposGetPullRequestReviewProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, + method: "GET", + ...params, + }), + + /** + * @description Each array contains the day number, hour number, and number of commits: * \`0-6\`: Sunday - Saturday * \`0-23\`: Hour of day * Number of commits For example, \`[2, 14, 25]\` indicates that there were 25 total commits, during the 2:00pm hour on Tuesdays. All times are based on the time zone of individual commits. + * + * @tags repos + * @name ReposGetPunchCardStats + * @summary Get the hourly commit count for each day + * @request GET:/repos/{owner}/{repo}/stats/punch_card + */ + reposGetPunchCardStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the preferred README for a repository. READMEs support [custom media types](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML. + * + * @tags repos + * @name ReposGetReadme + * @summary Get a repository README + * @request GET:/repos/{owner}/{repo}/readme + */ + reposGetReadme: ({ owner, repo, ...query }: ReposGetReadmeParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/readme\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** This returns an \`upload_url\` key corresponding to the endpoint for uploading release assets. This key is a [hypermedia resource](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia). + * + * @tags repos + * @name ReposGetRelease + * @summary Get a release + * @request GET:/repos/{owner}/{repo}/releases/{release_id} + */ + reposGetRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "GET", + ...params, + }), + + /** + * @description To download the asset's binary content, set the \`Accept\` header of the request to [\`application/octet-stream\`](https://docs.github.com/rest/overview/media-types). The API will either redirect the client to the location, or stream it directly if possible. API clients should handle both a \`200\` or \`302\` response. + * + * @tags repos + * @name ReposGetReleaseAsset + * @summary Get a release asset + * @request GET:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + reposGetReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => + this.request< + ReposGetReleaseAssetData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, + method: "GET", + ...params, + }), + + /** + * @description Get a published release with the specified tag. + * + * @tags repos + * @name ReposGetReleaseByTag + * @summary Get a release by tag name + * @request GET:/repos/{owner}/{repo}/releases/tags/{tag} + */ + reposGetReleaseByTag: (owner: string, repo: string, tag: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/tags/\${tag}\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetStatusChecksProtection + * @summary Get status checks protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + reposGetStatusChecksProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the teams who have push access to this branch. The list includes child teams. + * + * @tags repos + * @name ReposGetTeamsWithAccessToProtectedBranch + * @summary Get teams with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + reposGetTeamsWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "GET", + ...params, + }), + + /** + * @description Get the top 10 popular contents over the last 14 days. + * + * @tags repos + * @name ReposGetTopPaths + * @summary Get top referral paths + * @request GET:/repos/{owner}/{repo}/traffic/popular/paths + */ + reposGetTopPaths: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/popular/paths\`, + method: "GET", + ...params, + }), + + /** + * @description Get the top 10 referrers over the last 14 days. + * + * @tags repos + * @name ReposGetTopReferrers + * @summary Get top referral sources + * @request GET:/repos/{owner}/{repo}/traffic/popular/referrers + */ + reposGetTopReferrers: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/popular/referrers\`, + method: "GET", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the people who have push access to this branch. + * + * @tags repos + * @name ReposGetUsersWithAccessToProtectedBranch + * @summary Get users with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + reposGetUsersWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, + method: "GET", + ...params, + }), + + /** + * @description Get the total number of views and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. + * + * @tags repos + * @name ReposGetViews + * @summary Get page views + * @request GET:/repos/{owner}/{repo}/traffic/views + */ + reposGetViews: ({ owner, repo, ...query }: ReposGetViewsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/views\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Returns a webhook configured in a repository. To get only the webhook \`config\` properties, see "[Get a webhook configuration for a repository](/rest/reference/repos#get-a-webhook-configuration-for-a-repository)." + * + * @tags repos + * @name ReposGetWebhook + * @summary Get a repository webhook + * @request GET:/repos/{owner}/{repo}/hooks/{hook_id} + */ + reposGetWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns the webhook configuration for a repository. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get a repository webhook](/rest/reference/orgs#get-a-repository-webhook)." Access tokens must have the \`read:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:read\` permission. + * + * @tags repos + * @name ReposGetWebhookConfigForRepo + * @summary Get a webhook configuration for a repository + * @request GET:/repos/{owner}/{repo}/hooks/{hook_id}/config + */ + reposGetWebhookConfigForRepo: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/config\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListBranches + * @summary List branches + * @request GET:/repos/{owner}/{repo}/branches + */ + reposListBranches: ({ owner, repo, ...query }: ReposListBranchesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Returns all branches where the given commit SHA is the HEAD, or latest commit for the branch. + * + * @tags repos + * @name ReposListBranchesForHeadCommit + * @summary List branches for HEAD commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head + */ + reposListBranchesForHeadCommit: (owner: string, repo: string, commitSha: string, params: RequestParams = {}) => + this.request< + ReposListBranchesForHeadCommitData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/branches-where-head\`, + method: "GET", + ...params, + }), + + /** + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. + * + * @tags repos + * @name ReposListCollaborators + * @summary List repository collaborators + * @request GET:/repos/{owner}/{repo}/collaborators + */ + reposListCollaborators: ({ owner, repo, ...query }: ReposListCollaboratorsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Use the \`:commit_sha\` to specify the commit that will have its comments listed. + * + * @tags repos + * @name ReposListCommentsForCommit + * @summary List commit comments + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/comments + */ + reposListCommentsForCommit: ( + { owner, repo, commitSha, ...query }: ReposListCommentsForCommitParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Commit Comments use [these custom media types](https://docs.github.com/rest/reference/repos#custom-media-types). You can read more about the use of media types in the API [here](https://docs.github.com/rest/overview/media-types/). Comments are ordered by ascending ID. + * + * @tags repos + * @name ReposListCommitCommentsForRepo + * @summary List commit comments for a repository + * @request GET:/repos/{owner}/{repo}/comments + */ + reposListCommitCommentsForRepo: ( + { owner, repo, ...query }: ReposListCommitCommentsForRepoParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | + * + * @tags repos + * @name ReposListCommits + * @summary List commits + * @request GET:/repos/{owner}/{repo}/commits + */ + reposListCommits: ({ owner, repo, ...query }: ReposListCommitsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Users with pull access in a repository can view commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. Statuses are returned in reverse chronological order. The first status in the list will be the latest one. This resource is also available via a legacy route: \`GET /repos/:owner/:repo/statuses/:ref\`. + * + * @tags repos + * @name ReposListCommitStatusesForRef + * @summary List commit statuses for a reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/statuses + */ + reposListCommitStatusesForRef: ( + { owner, repo, ref, ...query }: ReposListCommitStatusesForRefParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/statuses\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists contributors to the specified repository and sorts them by the number of commits per contributor in descending order. This endpoint may return information that is a few hours old because the GitHub REST API v3 caches contributor data to improve performance. GitHub identifies contributors by author email address. This endpoint groups contribution counts by GitHub user, which includes all associated email addresses. To improve performance, only the first 500 author email addresses in the repository link to GitHub users. The rest will appear as anonymous contributors without associated GitHub user information. + * + * @tags repos + * @name ReposListContributors + * @summary List repository contributors + * @request GET:/repos/{owner}/{repo}/contributors + */ + reposListContributors: ({ owner, repo, ...query }: ReposListContributorsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/contributors\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListDeployKeys + * @summary List deploy keys + * @request GET:/repos/{owner}/{repo}/keys + */ + reposListDeployKeys: ({ owner, repo, ...query }: ReposListDeployKeysParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Simple filtering of deployments is available via query parameters: + * + * @tags repos + * @name ReposListDeployments + * @summary List deployments + * @request GET:/repos/{owner}/{repo}/deployments + */ + reposListDeployments: ({ owner, repo, ...query }: ReposListDeploymentsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Users with pull access can view deployment statuses for a deployment: + * + * @tags repos + * @name ReposListDeploymentStatuses + * @summary List deployment statuses + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + */ + reposListDeploymentStatuses: ( + { owner, repo, deploymentId, ...query }: ReposListDeploymentStatusesParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListForks + * @summary List forks + * @request GET:/repos/{owner}/{repo}/forks + */ + reposListForks: ({ owner, repo, ...query }: ReposListForksParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/forks\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description When authenticating as a user with admin rights to a repository, this endpoint will list all currently open repository invitations. + * + * @tags repos + * @name ReposListInvitations + * @summary List repository invitations + * @request GET:/repos/{owner}/{repo}/invitations + */ + reposListInvitations: ({ owner, repo, ...query }: ReposListInvitationsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists languages for the specified repository. The value shown for each language is the number of bytes of code written in that language. + * + * @tags repos + * @name ReposListLanguages + * @summary List repository languages + * @request GET:/repos/{owner}/{repo}/languages + */ + reposListLanguages: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/languages\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListPagesBuilds + * @summary List GitHub Pages builds + * @request GET:/repos/{owner}/{repo}/pages/builds + */ + reposListPagesBuilds: ({ owner, repo, ...query }: ReposListPagesBuildsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all pull requests containing the provided commit SHA, which can be from any point in the commit history. The results will include open and closed pull requests. Additional preview headers may be required to see certain details for associated pull requests, such as whether a pull request is in a draft state. For more information about previews that might affect this endpoint, see the [List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests) endpoint. + * + * @tags repos + * @name ReposListPullRequestsAssociatedWithCommit + * @summary List pull requests associated with a commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/pulls + */ + reposListPullRequestsAssociatedWithCommit: ( + { owner, repo, commitSha, ...query }: ReposListPullRequestsAssociatedWithCommitParams, + params: RequestParams = {}, + ) => + this.request< + ReposListPullRequestsAssociatedWithCommitData, + { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/pulls\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListReleaseAssets + * @summary List release assets + * @request GET:/repos/{owner}/{repo}/releases/{release_id}/assets + */ + reposListReleaseAssets: ( + { owner, repo, releaseId, ...query }: ReposListReleaseAssetsParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}/assets\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description This returns a list of releases, which does not include regular Git tags that have not been associated with a release. To get a list of Git tags, use the [Repository Tags API](https://docs.github.com/rest/reference/repos#list-repository-tags). Information about published releases are available to everyone. Only users with push access will receive listings for draft releases. + * + * @tags repos + * @name ReposListReleases + * @summary List releases + * @request GET:/repos/{owner}/{repo}/releases + */ + reposListReleases: ({ owner, repo, ...query }: ReposListReleasesParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListTags + * @summary List repository tags + * @request GET:/repos/{owner}/{repo}/tags + */ + reposListTags: ({ owner, repo, ...query }: ReposListTagsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/tags\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListTeams + * @summary List repository teams + * @request GET:/repos/{owner}/{repo}/teams + */ + reposListTeams: ({ owner, repo, ...query }: ReposListTeamsParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposListWebhooks + * @summary List repository webhooks + * @request GET:/repos/{owner}/{repo}/hooks + */ + reposListWebhooks: ({ owner, repo, ...query }: ReposListWebhooksParams, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposMerge + * @summary Merge a branch + * @request POST:/repos/{owner}/{repo}/merges + */ + reposMerge: (owner: string, repo: string, data: ReposMergePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/merges\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * + * @tags repos + * @name ReposPingWebhook + * @summary Ping a repository webhook + * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/pings + */ + reposPingWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/pings\`, + method: "POST", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of an app to push to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposRemoveAppAccessRestrictions + * @summary Remove app access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + reposRemoveAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposRemoveAppAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposRemoveCollaborator + * @summary Remove a repository collaborator + * @request DELETE:/repos/{owner}/{repo}/collaborators/{username} + */ + reposRemoveCollaborator: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposRemoveStatusCheckContexts + * @summary Remove status check contexts + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + reposRemoveStatusCheckContexts: ( + owner: string, + repo: string, + branch: string, + data: ReposRemoveStatusCheckContextsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposRemoveStatusCheckProtection + * @summary Remove status check protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + reposRemoveStatusCheckProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a team to push to this branch. You can also remove push access for child teams. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Teams that should no longer have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposRemoveTeamAccessRestrictions + * @summary Remove team access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + reposRemoveTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposRemoveTeamAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a user to push to this branch. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames of the people who should no longer have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposRemoveUserAccessRestrictions + * @summary Remove user access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + reposRemoveUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposRemoveUserAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Renames a branch in a repository. **Note:** Although the API responds immediately, the branch rename process might take some extra time to complete in the background. You won't be able to push to the old branch name while the rename process is in progress. For more information, see "[Renaming a branch](https://docs.github.com/github/administering-a-repository/renaming-a-branch)". The permissions required to use this endpoint depends on whether you are renaming the default branch. To rename a non-default branch: * Users must have push access. * GitHub Apps must have the \`contents:write\` repository permission. To rename the default branch: * Users must have admin or owner permissions. * GitHub Apps must have the \`administration:write\` repository permission. + * + * @tags repos + * @name ReposRenameBranch + * @summary Rename a branch + * @request POST:/repos/{owner}/{repo}/branches/{branch}/rename + */ + reposRenameBranch: ( + owner: string, + repo: string, + branch: string, + data: ReposRenameBranchPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/rename\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposReplaceAllTopics + * @summary Replace all repository topics + * @request PUT:/repos/{owner}/{repo}/topics + */ + reposReplaceAllTopics: ( + owner: string, + repo: string, + data: ReposReplaceAllTopicsPayload, + params: RequestParams = {}, + ) => + this.request< + ReposReplaceAllTopicsData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/repos/\${owner}/\${repo}/topics\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You can request that your site be built from the latest revision on the default branch. This has the same effect as pushing a commit to your default branch, but does not require an additional commit. Manually triggering page builds can be helpful when diagnosing build warnings and failures. Build requests are limited to one concurrent build per repository and one concurrent build per requester. If you request a build while another is still in progress, the second request will be queued until the first completes. + * + * @tags repos + * @name ReposRequestPagesBuild + * @summary Request a GitHub Pages build + * @request POST:/repos/{owner}/{repo}/pages/builds + */ + reposRequestPagesBuild: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds\`, + method: "POST", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adding admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * + * @tags repos + * @name ReposSetAdminBranchProtection + * @summary Set admin branch protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposSetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, + method: "POST", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of apps that have push access to this branch. This removes all apps that previously had push access and grants push access to the new list of apps. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposSetAppAccessRestrictions + * @summary Set app access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + reposSetAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposSetAppAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposSetStatusCheckContexts + * @summary Set status check contexts + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + */ + reposSetStatusCheckContexts: ( + owner: string, + repo: string, + branch: string, + data: ReposSetStatusCheckContextsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of teams that have push access to this branch. This removes all teams that previously had push access and grants push access to the new list of teams. Team restrictions include child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | \`array\` | The teams that can have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposSetTeamAccessRestrictions + * @summary Set team access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + */ + reposSetTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposSetTeamAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of people that have push access to this branch. This removes all people that previously had push access and grants push access to the new list of people. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * + * @tags repos + * @name ReposSetUserAccessRestrictions + * @summary Set user access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + */ + reposSetUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: ReposSetUserAccessRestrictionsPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This will trigger the hook with the latest push to the current repository if the hook is subscribed to \`push\` events. If the hook is not subscribed to \`push\` events, the server will respond with 204 but no test POST will be generated. **Note**: Previously \`/repos/:owner/:repo/hooks/:hook_id/test\` + * + * @tags repos + * @name ReposTestPushWebhook + * @summary Test the push repository webhook + * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/tests + */ + reposTestPushWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, + method: "POST", + ...params, + }), + + /** + * @description A transfer request will need to be accepted by the new owner when transferring a personal repository to another user. The response will contain the original \`owner\`, and the transfer will continue asynchronously. For more details on the requirements to transfer personal and organization-owned repositories, see [about repository transfers](https://help.github.com/articles/about-repository-transfers/). + * + * @tags repos + * @name ReposTransfer + * @summary Transfer a repository + * @request POST:/repos/{owner}/{repo}/transfer + */ + reposTransfer: (owner: string, repo: string, data: ReposTransferPayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/transfer\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note**: To edit a repository's topics, use the [Replace all repository topics](https://docs.github.com/rest/reference/repos#replace-all-repository-topics) endpoint. + * + * @tags repos + * @name ReposUpdate + * @summary Update a repository + * @request PATCH:/repos/{owner}/{repo} + */ + reposUpdate: (owner: string, repo: string, data: ReposUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Protecting a branch requires admin or owner permissions to the repository. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. **Note**: The list of users, apps, and teams in total is limited to 100 items. + * + * @tags repos + * @name ReposUpdateBranchProtection + * @summary Update branch protection + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection + */ + reposUpdateBranchProtection: ( + owner: string, + repo: string, + branch: string, + data: ReposUpdateBranchProtectionPayload, + params: RequestParams = {}, + ) => + this.request< + ReposUpdateBranchProtectionData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposUpdateCommitComment + * @summary Update a commit comment + * @request PATCH:/repos/{owner}/{repo}/comments/{comment_id} + */ + reposUpdateCommitComment: ( + owner: string, + repo: string, + commentId: number, + data: ReposUpdateCommitCommentPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates information for a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages). + * + * @tags repos + * @name ReposUpdateInformationAboutPagesSite + * @summary Update information about a GitHub Pages site + * @request PUT:/repos/{owner}/{repo}/pages + */ + reposUpdateInformationAboutPagesSite: ( + owner: string, + repo: string, + data: ReposUpdateInformationAboutPagesSitePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposUpdateInvitation + * @summary Update a repository invitation + * @request PATCH:/repos/{owner}/{repo}/invitations/{invitation_id} + */ + reposUpdateInvitation: ( + owner: string, + repo: string, + invitationId: number, + data: ReposUpdateInvitationPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations/\${invitationId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating pull request review enforcement requires admin or owner permissions to the repository and branch protection to be enabled. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. + * + * @tags repos + * @name ReposUpdatePullRequestReviewProtection + * @summary Update pull request review protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + reposUpdatePullRequestReviewProtection: ( + owner: string, + repo: string, + branch: string, + data: ReposUpdatePullRequestReviewProtectionPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Users with push access to the repository can edit a release. + * + * @tags repos + * @name ReposUpdateRelease + * @summary Update a release + * @request PATCH:/repos/{owner}/{repo}/releases/{release_id} + */ + reposUpdateRelease: ( + owner: string, + repo: string, + releaseId: number, + data: ReposUpdateReleasePayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Users with push access to the repository can edit a release asset. + * + * @tags repos + * @name ReposUpdateReleaseAsset + * @summary Update a release asset + * @request PATCH:/repos/{owner}/{repo}/releases/assets/{asset_id} + */ + reposUpdateReleaseAsset: ( + owner: string, + repo: string, + assetId: number, + data: ReposUpdateReleaseAssetPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating required status checks requires admin or owner permissions to the repository and branch protection to be enabled. + * + * @tags repos + * @name ReposUpdateStatusCheckProtection + * @summary Update status check protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + */ + reposUpdateStatusCheckProtection: ( + owner: string, + repo: string, + branch: string, + data: ReposUpdateStatusCheckProtectionPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates a webhook configured in a repository. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for a repository](/rest/reference/repos#update-a-webhook-configuration-for-a-repository)." + * + * @tags repos + * @name ReposUpdateWebhook + * @summary Update a repository webhook + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id} + */ + reposUpdateWebhook: ( + owner: string, + repo: string, + hookId: number, + data: ReposUpdateWebhookPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Updates the webhook configuration for a repository. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update a repository webhook](/rest/reference/orgs#update-a-repository-webhook)." Access tokens must have the \`write:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:write\` permission. + * + * @tags repos + * @name ReposUpdateWebhookConfigForRepo + * @summary Update a webhook configuration for a repository + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id}/config + */ + reposUpdateWebhookConfigForRepo: ( + owner: string, + repo: string, + hookId: number, + data: ReposUpdateWebhookConfigForRepoPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/config\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint makes use of [a Hypermedia relation](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) to determine which URL to access. The endpoint you call to upload release assets is specific to your release. Use the \`upload_url\` returned in the response of the [Create a release endpoint](https://docs.github.com/rest/reference/repos#create-a-release) to upload a release asset. You need to use an HTTP client which supports [SNI](http://en.wikipedia.org/wiki/Server_Name_Indication) to make calls to this endpoint. Most libraries will set the required \`Content-Length\` header automatically. Use the required \`Content-Type\` header to provide the media type of the asset. For a list of media types, see [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). For example: \`application/zip\` GitHub expects the asset data in its raw binary form, rather than JSON. You will send the raw binary content of the asset as the request body. Everything else about the endpoint is the same as the rest of the API. For example, you'll still need to pass your authentication to be able to upload an asset. When an upstream failure occurs, you will receive a \`502 Bad Gateway\` status. This may leave an empty asset with a state of \`starter\`. It can be safely deleted. **Notes:** * GitHub renames asset filenames that have special characters, non-alphanumeric characters, and leading or trailing periods. The "[List assets for a release](https://docs.github.com/rest/reference/repos#list-assets-for-a-release)" endpoint lists the renamed filenames. For more information and help, contact [GitHub Support](https://support.github.com/contact). * If you upload an asset with the same filename as another uploaded asset, you'll receive an error and must delete the old file before you can re-upload the new asset. + * + * @tags repos + * @name ReposUploadReleaseAsset + * @summary Upload a release asset + * @request POST:/repos/{owner}/{repo}/releases/{release_id}/assets + */ + reposUploadReleaseAsset: ( + { owner, repo, releaseId, ...query }: ReposUploadReleaseAssetParams, + data: ReposUploadReleaseAssetPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}/assets\`, + method: "POST", + query: query, + body: data, + ...params, + }), + + /** + * @description Gets a single secret scanning alert detected in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` read permission to use this endpoint. + * + * @tags secret-scanning + * @name SecretScanningGetAlert + * @summary Get a secret scanning alert + * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + */ + secretScanningGetAlert: (owner: string, repo: string, alertNumber: AlertNumber, params: RequestParams = {}) => + this.request< + SecretScanningGetAlertData, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts/\${alertNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` read permission to use this endpoint. + * + * @tags secret-scanning + * @name SecretScanningListAlertsForRepo + * @summary List secret scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts + */ + secretScanningListAlertsForRepo: ( + { owner, repo, ...query }: SecretScanningListAlertsForRepoParams, + params: RequestParams = {}, + ) => + this.request< + SecretScanningListAlertsForRepoData, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` write permission to use this endpoint. + * + * @tags secret-scanning + * @name SecretScanningUpdateAlert + * @summary Update a secret scanning alert + * @request PATCH:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + */ + secretScanningUpdateAlert: ( + owner: string, + repo: string, + alertNumber: AlertNumber, + data: SecretScanningUpdateAlertPayload, + params: RequestParams = {}, + ) => + this.request< + SecretScanningUpdateAlertData, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts/\${alertNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + repositories = { + /** + * @description Lists all public repositories in the order that they were created. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of repositories. + * + * @tags repos + * @name ReposListPublic + * @summary List public repositories + * @request GET:/repositories + */ + reposListPublic: (query: ReposListPublicParams, params: RequestParams = {}) => + this.request({ + path: \`/repositories\`, + method: "GET", + query: query, + ...params, + }), + }; + scim = { + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteScimGroupFromEnterprise + * @summary Delete a SCIM group from an enterprise + * @request DELETE:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + enterpriseAdminDeleteScimGroupFromEnterprise: ( + enterprise: string, + scimGroupId: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteUserFromEnterprise + * @summary Delete a SCIM user from an enterprise + * @request DELETE:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + enterpriseAdminDeleteUserFromEnterprise: (enterprise: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetProvisioningInformationForEnterpriseGroup + * @summary Get SCIM provisioning information for an enterprise group + * @request GET:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + enterpriseAdminGetProvisioningInformationForEnterpriseGroup: ( + enterprise: string, + scimGroupId: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetProvisioningInformationForEnterpriseUser + * @summary Get SCIM provisioning information for an enterprise user + * @request GET:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + enterpriseAdminGetProvisioningInformationForEnterpriseUser: ( + enterprise: string, + scimUserId: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedGroupsEnterprise + * @summary List provisioned SCIM groups for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Groups + */ + enterpriseAdminListProvisionedGroupsEnterprise: ( + { enterprise, ...query }: EnterpriseAdminListProvisionedGroupsEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Retrieves a paginated list of all provisioned enterprise members, including pending invitations. When a user with a SAML-provisioned external identity leaves (or is removed from) an enterprise, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an enterprise, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub enterprise. 1. The user attempts to access the GitHub enterprise and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub enterprise, and the external identity \`null\` entry remains in place. + * + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedIdentitiesEnterprise + * @summary List SCIM provisioned identities for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Users + */ + enterpriseAdminListProvisionedIdentitiesEnterprise: ( + { enterprise, ...query }: EnterpriseAdminListProvisionedIdentitiesEnterpriseParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision an enterprise group, and invite users to the group. This sends invitation emails to the email address of the invited users to join the GitHub organization that the SCIM group corresponds to. + * + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseGroup + * @summary Provision a SCIM enterprise group and invite users + * @request POST:/scim/v2/enterprises/{enterprise}/Groups + */ + enterpriseAdminProvisionAndInviteEnterpriseGroup: ( + enterprise: string, + data: EnterpriseAdminProvisionAndInviteEnterpriseGroupPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision enterprise membership for a user, and send organization invitation emails to the email address. You can optionally include the groups a user will be invited to join. If you do not provide a list of \`groups\`, the user is provisioned for the enterprise, but no organization invitation emails will be sent. + * + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseUser + * @summary Provision and invite a SCIM enterprise user + * @request POST:/scim/v2/enterprises/{enterprise}/Users + */ + enterpriseAdminProvisionAndInviteEnterpriseUser: ( + enterprise: string, + data: EnterpriseAdminProvisionAndInviteEnterpriseUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned group’s information. You must provide all the information required for the group as if you were provisioning it for the first time. Any existing group information that you don't provide will be removed, including group membership. If you want to only update a specific attribute, use the [Update an attribute for a SCIM enterprise group](#update-an-attribute-for-a-scim-enterprise-group) endpoint instead. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseGroup + * @summary Set SCIM information for a provisioned enterprise group + * @request PUT:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + enterpriseAdminSetInformationForProvisionedEnterpriseGroup: ( + enterprise: string, + scimGroupId: string, + data: EnterpriseAdminSetInformationForProvisionedEnterpriseGroupPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](#update-an-attribute-for-an-enterprise-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the enterprise, deletes the external identity, and deletes the associated \`{scim_user_id}\`. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseUser + * @summary Set SCIM information for a provisioned enterprise user + * @request PUT:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + enterpriseAdminSetInformationForProvisionedEnterpriseUser: ( + enterprise: string, + scimUserId: string, + data: EnterpriseAdminSetInformationForProvisionedEnterpriseUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned group’s individual attributes. To change a group’s values, you must provide a specific Operations JSON format that contains at least one of the add, remove, or replace operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). + * + * @tags enterprise-admin + * @name EnterpriseAdminUpdateAttributeForEnterpriseGroup + * @summary Update an attribute for a SCIM enterprise group + * @request PATCH:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + */ + enterpriseAdminUpdateAttributeForEnterpriseGroup: ( + enterprise: string, + scimGroupId: string, + data: EnterpriseAdminUpdateAttributeForEnterpriseGroupPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific \`Operations\` JSON format that contains at least one of the \`add\`, \`remove\`, or \`replace\` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM \`path\` selectors that include filters are not supported. For example, a \`path\` selector defined as \`"path": "emails[type eq \\"work\\"]"\` will not work. **Warning:** If you set \`active:false\` using the \`replace\` operation (as shown in the JSON example below), it removes the user from the enterprise, deletes the external identity, and deletes the associated \`:scim_user_id\`. \`\`\` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } \`\`\` + * + * @tags enterprise-admin + * @name EnterpriseAdminUpdateAttributeForEnterpriseUser + * @summary Update an attribute for a SCIM enterprise user + * @request PATCH:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + */ + enterpriseAdminUpdateAttributeForEnterpriseUser: ( + enterprise: string, + scimUserId: string, + data: EnterpriseAdminUpdateAttributeForEnterpriseUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags scim + * @name ScimDeleteUserFromOrg + * @summary Delete a SCIM user from an organization + * @request DELETE:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + scimDeleteUserFromOrg: (org: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags scim + * @name ScimGetProvisioningInformationForUser + * @summary Get SCIM provisioning information for a user + * @request GET:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + scimGetProvisioningInformationForUser: (org: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "GET", + ...params, + }), + + /** + * @description Retrieves a paginated list of all provisioned organization members, including pending invitations. If you provide the \`filter\` parameter, the resources for all matching provisions members are returned. When a user with a SAML-provisioned external identity leaves (or is removed from) an organization, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an organization, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub organization. 1. The user attempts to access the GitHub organization and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub organization, and the external identity \`null\` entry remains in place. + * + * @tags scim + * @name ScimListProvisionedIdentities + * @summary List SCIM provisioned identities + * @request GET:/scim/v2/organizations/{org}/Users + */ + scimListProvisionedIdentities: ( + { org, ...query }: ScimListProvisionedIdentitiesParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Provision organization membership for a user, and send an activation email to the email address. + * + * @tags scim + * @name ScimProvisionAndInviteUser + * @summary Provision and invite a SCIM user + * @request POST:/scim/v2/organizations/{org}/Users + */ + scimProvisionAndInviteUser: (org: string, data: ScimProvisionAndInviteUserPayload, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](https://docs.github.com/rest/reference/scim#update-an-attribute-for-a-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the organization, deletes the external identity, and deletes the associated \`{scim_user_id}\`. + * + * @tags scim + * @name ScimSetInformationForProvisionedUser + * @summary Update a provisioned organization membership + * @request PUT:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + scimSetInformationForProvisionedUser: ( + org: string, + scimUserId: string, + data: ScimSetInformationForProvisionedUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific \`Operations\` JSON format that contains at least one of the \`add\`, \`remove\`, or \`replace\` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM \`path\` selectors that include filters are not supported. For example, a \`path\` selector defined as \`"path": "emails[type eq \\"work\\"]"\` will not work. **Warning:** If you set \`active:false\` using the \`replace\` operation (as shown in the JSON example below), it removes the user from the organization, deletes the external identity, and deletes the associated \`:scim_user_id\`. \`\`\` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } \`\`\` + * + * @tags scim + * @name ScimUpdateAttributeForUser + * @summary Update an attribute for a SCIM user + * @request PATCH:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + scimUpdateAttributeForUser: ( + org: string, + scimUserId: string, + data: ScimUpdateAttributeForUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + search = { + /** + * @description Searches for query terms inside of a file. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for code, you can get text match metadata for the file **content** and file **path** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the definition of the \`addClass\` function inside [jQuery](https://github.com/jquery/jquery) repository, your query would look something like this: \`q=addClass+in:file+language:js+repo:jquery/jquery\` This query searches for the keyword \`addClass\` within a file's contents. The query limits the search to files where the language is JavaScript in the \`jquery/jquery\` repository. #### Considerations for code search Due to the complexity of searching code, there are a few restrictions on how searches are performed: * Only the _default branch_ is considered. In most cases, this will be the \`master\` branch. * Only files smaller than 384 KB are searchable. * You must always include at least one search term when searching source code. For example, searching for [\`language:go\`](https://github.com/search?utf8=%E2%9C%93&q=language%3Ago&type=Code) is not valid, while [\`amazing language:go\`](https://github.com/search?utf8=%E2%9C%93&q=amazing+language%3Ago&type=Code) is. + * + * @tags search + * @name SearchCode + * @summary Search code + * @request GET:/search/code + */ + searchCode: (query: SearchCodeParams, params: RequestParams = {}) => + this.request< + SearchCodeData, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/code\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find commits via various criteria on the default branch (usually \`master\`). This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for commits, you can get text match metadata for the **message** field when you provide the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find commits related to CSS in the [octocat/Spoon-Knife](https://github.com/octocat/Spoon-Knife) repository. Your query would look something like this: \`q=repo:octocat/Spoon-Knife+css\` + * + * @tags search + * @name SearchCommits + * @summary Search commits + * @request GET:/search/commits + */ + searchCommits: (query: SearchCommitsParams, params: RequestParams = {}) => + this.request< + SearchCommitsData, + { + documentation_url: string; + message: string; + } + >({ + path: \`/search/commits\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find issues by state and keyword. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this. \`q=windows+label:bug+language:python+state:open&sort=created&order=asc\` This query searches for the keyword \`windows\`, within any open issue that is labeled as \`bug\`. The search runs across repositories whose primary language is Python. The results are sorted by creation date in ascending order, which means the oldest issues appear first in the search results. **Note:** For [user-to-server](https://docs.github.com/developers/apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) GitHub App requests, you can't retrieve a combination of issues and pull requests in a single query. Requests that don't include the \`is:issue\` or \`is:pull-request\` qualifier will receive an HTTP \`422 Unprocessable Entity\` response. To get results for both issues and pull requests, you must send separate queries for issues and pull requests. For more information about the \`is\` qualifier, see "[Searching only issues or pull requests](https://docs.github.com/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-only-issues-or-pull-requests)." + * + * @tags search + * @name SearchIssuesAndPullRequests + * @summary Search issues and pull requests + * @request GET:/search/issues + */ + searchIssuesAndPullRequests: (query: SearchIssuesAndPullRequestsParams, params: RequestParams = {}) => + this.request< + SearchIssuesAndPullRequestsData, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/issues\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find labels in a repository with names or descriptions that match search keywords. Returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for labels, you can get text match metadata for the label **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find labels in the \`linguist\` repository that match \`bug\`, \`defect\`, or \`enhancement\`. Your query might look like this: \`q=bug+defect+enhancement&repository_id=64778136\` The labels that best match the query appear first in the search results. + * + * @tags search + * @name SearchLabels + * @summary Search labels + * @request GET:/search/labels + */ + searchLabels: (query: SearchLabelsParams, params: RequestParams = {}) => + this.request({ + path: \`/search/labels\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find repositories via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for repositories, you can get text match metadata for the **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for popular Tetris repositories written in assembly code, your query might look like this: \`q=tetris+language:assembly&sort=stars&order=desc\` This query searches for repositories with the word \`tetris\` in the name, the description, or the README. The results are limited to repositories where the primary language is assembly. The results are sorted by stars in descending order, so that the most popular repositories appear first in the search results. When you include the \`mercy\` preview header, you can also search for multiple topics by adding more \`topic:\` instances. For example, your query might look like this: \`q=topic:ruby+topic:rails\` + * + * @tags search + * @name SearchRepos + * @summary Search repositories + * @request GET:/search/repositories + */ + searchRepos: (query: SearchReposParams, params: RequestParams = {}) => + this.request< + SearchReposData, + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). See "[Searching topics](https://help.github.com/articles/searching-topics/)" for a detailed list of qualifiers. When searching for topics, you can get text match metadata for the topic's **short\\_description**, **description**, **name**, or **display\\_name** field when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for topics related to Ruby that are featured on https://github.com/topics. Your query might look like this: \`q=ruby+is:featured\` This query searches for topics with the keyword \`ruby\` and limits the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results. + * + * @tags search + * @name SearchTopics + * @summary Search topics + * @request GET:/search/topics + */ + searchTopics: (query: SearchTopicsParams, params: RequestParams = {}) => + this.request< + SearchTopicsData, + { + documentation_url: string; + message: string; + } + >({ + path: \`/search/topics\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Find users via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for users, you can get text match metadata for the issue **login**, **email**, and **name** fields when you pass the \`text-match\` media type. For more details about highlighting search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you're looking for a list of popular users, you might try this query: \`q=tom+repos:%3E42+followers:%3E1000\` This query searches for users with the name \`tom\`. The results are restricted to users with more than 42 repositories and over 1,000 followers. + * + * @tags search + * @name SearchUsers + * @summary Search users + * @request GET:/search/users + */ + searchUsers: (query: SearchUsersParams, params: RequestParams = {}) => + this.request< + SearchUsersData, + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/users\`, + method: "GET", + query: query, + ...params, + }), + }; + teams = { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Create reaction for a team discussion comment](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion-comment)" endpoint. Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentLegacy + * @summary Create reaction for a team discussion comment (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated + */ + reactionsCreateForTeamDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + data: ReactionsCreateForTeamDiscussionCommentLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create reaction for a team discussion\`](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion) endpoint. Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionLegacy + * @summary Create reaction for a team discussion (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated + */ + reactionsCreateForTeamDiscussionLegacy: ( + teamId: number, + discussionNumber: number, + data: ReactionsCreateForTeamDiscussionLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion comment\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion-comment) endpoint. List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentLegacy + * @summary List reactions for a team discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated + */ + reactionsListForTeamDiscussionCommentLegacy: ( + { teamId, discussionNumber, commentNumber, ...query }: ReactionsListForTeamDiscussionCommentLegacyParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion) endpoint. List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsListForTeamDiscussionLegacy + * @summary List reactions for a team discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated + */ + reactionsListForTeamDiscussionLegacy: ( + { teamId, discussionNumber, ...query }: ReactionsListForTeamDiscussionLegacyParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/reactions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The "Add team member" endpoint (described below) is deprecated. We recommend using the [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint instead. It allows you to invite new organization members to your teams. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To add someone to a team, the authenticated user must be an organization owner or a team maintainer in the team they're changing. The person being added to the team must be a member of the team's organization. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags teams + * @name TeamsAddMemberLegacy + * @summary Add team member (Legacy) + * @request PUT:/teams/{team_id}/members/{username} + * @deprecated + */ + teamsAddMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. If the user is already a member of the team's organization, this endpoint will add the user to the team. To add a membership between an organization member and a team, the authenticated user must be an organization owner or a team maintainer. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." If the user is unaffiliated with the team's organization, this endpoint will send an invitation to the user via email. This newly-created membership will be in the "pending" state until the user accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. To add a membership between an unaffiliated user and a team, the authenticated user must be an organization owner. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. + * + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserLegacy + * @summary Add or update team membership for a user (Legacy) + * @request PUT:/teams/{team_id}/memberships/{username} + * @deprecated + */ + teamsAddOrUpdateMembershipForUserLegacy: ( + teamId: number, + username: string, + data: TeamsAddOrUpdateMembershipForUserLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/memberships/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team project permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-project-permissions) endpoint. Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. + * + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsLegacy + * @summary Add or update team project permissions (Legacy) + * @request PUT:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + teamsAddOrUpdateProjectPermissionsLegacy: ( + teamId: number, + projectId: number, + data: TeamsAddOrUpdateProjectPermissionsLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Add or update team repository permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-repository-permissions)" endpoint. To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsLegacy + * @summary Add or update team repository permissions (Legacy) + * @request PUT:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + teamsAddOrUpdateRepoPermissionsLegacy: ( + teamId: number, + owner: string, + repo: string, + data: TeamsAddOrUpdateRepoPermissionsLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a project](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-project) endpoint. Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. + * + * @tags teams + * @name TeamsCheckPermissionsForProjectLegacy + * @summary Check team permissions for a project (Legacy) + * @request GET:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + teamsCheckPermissionsForProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => + this.request< + TeamsCheckPermissionsForProjectLegacyData, + void | { + documentation_url: string; + message: string; + } + >({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "GET", + ...params, + }), + + /** + * @description **Note**: Repositories inherited through a parent team will also be checked. **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a repository](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-repository) endpoint. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * + * @tags teams + * @name TeamsCheckPermissionsForRepoLegacy + * @summary Check team permissions for a repository (Legacy) + * @request GET:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + teamsCheckPermissionsForRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Create a discussion comment](https://docs.github.com/rest/reference/teams#create-a-discussion-comment) endpoint. Creates a new comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags teams + * @name TeamsCreateDiscussionCommentLegacy + * @summary Create a discussion comment (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments + * @deprecated + */ + teamsCreateDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + data: TeamsCreateDiscussionCommentLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create a discussion\`](https://docs.github.com/rest/reference/teams#create-a-discussion) endpoint. Creates a new discussion post on a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags teams + * @name TeamsCreateDiscussionLegacy + * @summary Create a discussion (Legacy) + * @request POST:/teams/{team_id}/discussions + * @deprecated + */ + teamsCreateDiscussionLegacy: ( + teamId: number, + data: TeamsCreateDiscussionLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create or update IdP group connections\`](https://docs.github.com/rest/reference/teams#create-or-update-idp-group-connections) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. + * + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsLegacy + * @summary Create or update IdP group connections (Legacy) + * @request PATCH:/teams/{team_id}/team-sync/group-mappings + * @deprecated + */ + teamsCreateOrUpdateIdpGroupConnectionsLegacy: ( + teamId: number, + data: TeamsCreateOrUpdateIdpGroupConnectionsLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/team-sync/group-mappings\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a discussion comment](https://docs.github.com/rest/reference/teams#delete-a-discussion-comment) endpoint. Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsDeleteDiscussionCommentLegacy + * @summary Delete a discussion comment (Legacy) + * @request DELETE:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + teamsDeleteDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Delete a discussion\`](https://docs.github.com/rest/reference/teams#delete-a-discussion) endpoint. Delete a discussion from a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsDeleteDiscussionLegacy + * @summary Delete a discussion (Legacy) + * @request DELETE:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + teamsDeleteDiscussionLegacy: (teamId: number, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a team](https://docs.github.com/rest/reference/teams#delete-a-team) endpoint. To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. + * + * @tags teams + * @name TeamsDeleteLegacy + * @summary Delete a team (Legacy) + * @request DELETE:/teams/{team_id} + * @deprecated + */ + teamsDeleteLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion comment](https://docs.github.com/rest/reference/teams#get-a-discussion-comment) endpoint. Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsGetDiscussionCommentLegacy + * @summary Get a discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + teamsGetDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion](https://docs.github.com/rest/reference/teams#get-a-discussion) endpoint. Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsGetDiscussionLegacy + * @summary Get a discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + teamsGetDiscussionLegacy: (teamId: number, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the [Get a team by name](https://docs.github.com/rest/reference/teams#get-a-team-by-name) endpoint. + * + * @tags teams + * @name TeamsGetLegacy + * @summary Get a team (Legacy) + * @request GET:/teams/{team_id} + * @deprecated + */ + teamsGetLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}\`, + method: "GET", + ...params, + }), + + /** + * @description The "Get team member" endpoint (described below) is deprecated. We recommend using the [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint instead. It allows you to get both active and pending memberships. To list members in a team, the team must be visible to the authenticated user. + * + * @tags teams + * @name TeamsGetMemberLegacy + * @summary Get team member (Legacy) + * @request GET:/teams/{team_id}/members/{username} + * @deprecated + */ + teamsGetMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint. Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). + * + * @tags teams + * @name TeamsGetMembershipForUserLegacy + * @summary Get team membership for a user (Legacy) + * @request GET:/teams/{team_id}/memberships/{username} + * @deprecated + */ + teamsGetMembershipForUserLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/memberships/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List child teams\`](https://docs.github.com/rest/reference/teams#list-child-teams) endpoint. + * + * @tags teams + * @name TeamsListChildLegacy + * @summary List child teams (Legacy) + * @request GET:/teams/{team_id}/teams + * @deprecated + */ + teamsListChildLegacy: ({ teamId, ...query }: TeamsListChildLegacyParams, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List discussion comments](https://docs.github.com/rest/reference/teams#list-discussion-comments) endpoint. List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsListDiscussionCommentsLegacy + * @summary List discussion comments (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments + * @deprecated + */ + teamsListDiscussionCommentsLegacy: ( + { teamId, discussionNumber, ...query }: TeamsListDiscussionCommentsLegacyParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List discussions\`](https://docs.github.com/rest/reference/teams#list-discussions) endpoint. List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsListDiscussionsLegacy + * @summary List discussions (Legacy) + * @request GET:/teams/{team_id}/discussions + * @deprecated + */ + teamsListDiscussionsLegacy: ({ teamId, ...query }: TeamsListDiscussionsLegacyParams, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/discussions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List IdP groups for a team\`](https://docs.github.com/rest/reference/teams#list-idp-groups-for-a-team) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. + * + * @tags teams + * @name TeamsListIdpGroupsForLegacy + * @summary List IdP groups for a team (Legacy) + * @request GET:/teams/{team_id}/team-sync/group-mappings + * @deprecated + */ + teamsListIdpGroupsForLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/team-sync/group-mappings\`, + method: "GET", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List team members\`](https://docs.github.com/rest/reference/teams#list-team-members) endpoint. Team members will include the members of child teams. + * + * @tags teams + * @name TeamsListMembersLegacy + * @summary List team members (Legacy) + * @request GET:/teams/{team_id}/members + * @deprecated + */ + teamsListMembersLegacy: ({ teamId, ...query }: TeamsListMembersLegacyParams, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List pending team invitations\`](https://docs.github.com/rest/reference/teams#list-pending-team-invitations) endpoint. The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. + * + * @tags teams + * @name TeamsListPendingInvitationsLegacy + * @summary List pending team invitations (Legacy) + * @request GET:/teams/{team_id}/invitations + * @deprecated + */ + teamsListPendingInvitationsLegacy: ( + { teamId, ...query }: TeamsListPendingInvitationsLegacyParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List team projects\`](https://docs.github.com/rest/reference/teams#list-team-projects) endpoint. Lists the organization projects for a team. + * + * @tags teams + * @name TeamsListProjectsLegacy + * @summary List team projects (Legacy) + * @request GET:/teams/{team_id}/projects + * @deprecated + */ + teamsListProjectsLegacy: ({ teamId, ...query }: TeamsListProjectsLegacyParams, params: RequestParams = {}) => + this.request< + TeamsListProjectsLegacyData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/teams/\${teamId}/projects\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List team repositories](https://docs.github.com/rest/reference/teams#list-team-repositories) endpoint. + * + * @tags teams + * @name TeamsListReposLegacy + * @summary List team repositories (Legacy) + * @request GET:/teams/{team_id}/repos + * @deprecated + */ + teamsListReposLegacy: ({ teamId, ...query }: TeamsListReposLegacyParams, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/repos\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The "Remove team member" endpoint (described below) is deprecated. We recommend using the [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint instead. It allows you to remove both active and pending memberships. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a team member, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. Removing a team member does not delete the user, it just removes them from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." + * + * @tags teams + * @name TeamsRemoveMemberLegacy + * @summary Remove team member (Legacy) + * @request DELETE:/teams/{team_id}/members/{username} + * @deprecated + */ + teamsRemoveMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." + * + * @tags teams + * @name TeamsRemoveMembershipForUserLegacy + * @summary Remove team membership for a user (Legacy) + * @request DELETE:/teams/{team_id}/memberships/{username} + * @deprecated + */ + teamsRemoveMembershipForUserLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a project from a team](https://docs.github.com/rest/reference/teams#remove-a-project-from-a-team) endpoint. Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. **Note:** This endpoint removes the project from the team, but does not delete it. + * + * @tags teams + * @name TeamsRemoveProjectLegacy + * @summary Remove a project from a team (Legacy) + * @request DELETE:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + teamsRemoveProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => + this.request< + TeamsRemoveProjectLegacyData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a repository from a team](https://docs.github.com/rest/reference/teams#remove-a-repository-from-a-team) endpoint. If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. NOTE: This does not delete the repository, it just removes it from the team. + * + * @tags teams + * @name TeamsRemoveRepoLegacy + * @summary Remove a repository from a team (Legacy) + * @request DELETE:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated + */ + teamsRemoveRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion comment](https://docs.github.com/rest/reference/teams#update-a-discussion-comment) endpoint. Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsUpdateDiscussionCommentLegacy + * @summary Update a discussion comment (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated + */ + teamsUpdateDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + data: TeamsUpdateDiscussionCommentLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion](https://docs.github.com/rest/reference/teams#update-a-discussion) endpoint. Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsUpdateDiscussionLegacy + * @summary Update a discussion (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number} + * @deprecated + */ + teamsUpdateDiscussionLegacy: ( + teamId: number, + discussionNumber: number, + data: TeamsUpdateDiscussionLegacyPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a team](https://docs.github.com/rest/reference/teams#update-a-team) endpoint. To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** With nested teams, the \`privacy\` for parent teams cannot be \`secret\`. + * + * @tags teams + * @name TeamsUpdateLegacy + * @summary Update a team (Legacy) + * @request PATCH:/teams/{team_id} + * @deprecated + */ + teamsUpdateLegacy: (teamId: number, data: TeamsUpdateLegacyPayload, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + user = { + /** + * No description + * + * @tags activity + * @name ActivityCheckRepoIsStarredByAuthenticatedUser + * @summary Check if a repository is starred by the authenticated user + * @request GET:/user/starred/{owner}/{repo} + */ + activityCheckRepoIsStarredByAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + ActivityCheckRepoIsStarredByAuthenticatedUserData, + ActivityCheckRepoIsStarredByAuthenticatedUserError + >({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "GET", + ...params, + }), + + /** + * @description Lists repositories the authenticated user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * + * @tags activity + * @name ActivityListReposStarredByAuthenticatedUser + * @summary List repositories starred by the authenticated user + * @request GET:/user/starred + */ + activityListReposStarredByAuthenticatedUser: ( + query: ActivityListReposStarredByAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/starred\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists repositories the authenticated user is watching. + * + * @tags activity + * @name ActivityListWatchedReposForAuthenticatedUser + * @summary List repositories watched by the authenticated user + * @request GET:/user/subscriptions + */ + activityListWatchedReposForAuthenticatedUser: ( + query: ActivityListWatchedReposForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/subscriptions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags activity + * @name ActivityStarRepoForAuthenticatedUser + * @summary Star a repository for the authenticated user + * @request PUT:/user/starred/{owner}/{repo} + */ + activityStarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityUnstarRepoForAuthenticatedUser + * @summary Unstar a repository for the authenticated user + * @request DELETE:/user/starred/{owner}/{repo} + */ + activityUnstarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Add a single repository to an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. + * + * @tags apps + * @name AppsAddRepoToInstallation + * @summary Add a repository to an app installation + * @request PUT:/user/installations/{installation_id}/repositories/{repository_id} + */ + appsAddRepoToInstallation: (installationId: number, repositoryId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/installations/\${installationId}/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description List repositories that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access for an installation. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The access the user has to each repository is included in the hash under the \`permissions\` key. + * + * @tags apps + * @name AppsListInstallationReposForAuthenticatedUser + * @summary List repositories accessible to the user access token + * @request GET:/user/installations/{installation_id}/repositories + */ + appsListInstallationReposForAuthenticatedUser: ( + { installationId, ...query }: AppsListInstallationReposForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/installations/\${installationId}/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists installations of your GitHub App that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You can find the permissions for the installation under the \`permissions\` key. + * + * @tags apps + * @name AppsListInstallationsForAuthenticatedUser + * @summary List app installations accessible to the user access token + * @request GET:/user/installations + */ + appsListInstallationsForAuthenticatedUser: ( + query: AppsListInstallationsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request< + AppsListInstallationsForAuthenticatedUserData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/user/installations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). + * + * @tags apps + * @name AppsListSubscriptionsForAuthenticatedUser + * @summary List subscriptions for the authenticated user + * @request GET:/user/marketplace_purchases + */ + appsListSubscriptionsForAuthenticatedUser: ( + query: AppsListSubscriptionsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/marketplace_purchases\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). + * + * @tags apps + * @name AppsListSubscriptionsForAuthenticatedUserStubbed + * @summary List subscriptions for the authenticated user (stubbed) + * @request GET:/user/marketplace_purchases/stubbed + */ + appsListSubscriptionsForAuthenticatedUserStubbed: ( + query: AppsListSubscriptionsForAuthenticatedUserStubbedParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/marketplace_purchases/stubbed\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Remove a single repository from an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. + * + * @tags apps + * @name AppsRemoveRepoFromInstallation + * @summary Remove a repository from an app installation + * @request DELETE:/user/installations/{installation_id}/repositories/{repository_id} + */ + appsRemoveRepoFromInstallation: (installationId: number, repositoryId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/installations/\${installationId}/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Shows which type of GitHub user can interact with your public repositories and when the restriction expires. If there are no restrictions, you will see an empty response. + * + * @tags interactions + * @name InteractionsGetRestrictionsForAuthenticatedUser + * @summary Get interaction restrictions for your public repositories + * @request GET:/user/interaction-limits + */ + interactionsGetRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/interaction-limits\`, + method: "GET", + ...params, + }), + + /** + * @description Removes any interaction restrictions from your public repositories. + * + * @tags interactions + * @name InteractionsRemoveRestrictionsForAuthenticatedUser + * @summary Remove interaction restrictions from your public repositories + * @request DELETE:/user/interaction-limits + */ + interactionsRemoveRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/interaction-limits\`, + method: "DELETE", + ...params, + }), + + /** + * @description Temporarily restricts which type of GitHub user can interact with your public repositories. Setting the interaction limit at the user level will overwrite any interaction limits that are set for individual repositories owned by the user. + * + * @tags interactions + * @name InteractionsSetRestrictionsForAuthenticatedUser + * @summary Set interaction restrictions for your public repositories + * @request PUT:/user/interaction-limits + */ + interactionsSetRestrictionsForAuthenticatedUser: (data: InteractionLimit, params: RequestParams = {}) => + this.request({ + path: \`/user/interaction-limits\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description List issues across owned and member repositories assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesListForAuthenticatedUser + * @summary List user account issues assigned to the authenticated user + * @request GET:/user/issues + */ + issuesListForAuthenticatedUser: (query: IssuesListForAuthenticatedUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/issues\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Deletes a previous migration archive. Downloadable migration archives are automatically deleted after seven days. Migration metadata, which is returned in the [List user migrations](https://docs.github.com/rest/reference/migrations#list-user-migrations) and [Get a user migration status](https://docs.github.com/rest/reference/migrations#get-a-user-migration-status) endpoints, will continue to be available even after an archive is deleted. + * + * @tags migrations + * @name MigrationsDeleteArchiveForAuthenticatedUser + * @summary Delete a user migration archive + * @request DELETE:/user/migrations/{migration_id}/archive + */ + migrationsDeleteArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/archive\`, + method: "DELETE", + ...params, + }), + + /** + * @description Fetches the URL to download the migration archive as a \`tar.gz\` file. Depending on the resources your repository uses, the migration archive can contain JSON files with data for these objects: * attachments * bases * commit\\_comments * issue\\_comments * issue\\_events * issues * milestones * organizations * projects * protected\\_branches * pull\\_request\\_reviews * pull\\_requests * releases * repositories * review\\_comments * schema * users The archive will also contain an \`attachments\` directory that includes all attachment files uploaded to GitHub.com and a \`repositories\` directory that contains the repository's Git data. + * + * @tags migrations + * @name MigrationsGetArchiveForAuthenticatedUser + * @summary Download a user migration archive + * @request GET:/user/migrations/{migration_id}/archive + */ + migrationsGetArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/archive\`, + method: "GET", + ...params, + }), + + /** + * @description Fetches a single user migration. The response includes the \`state\` of the migration, which can be one of the following values: * \`pending\` - the migration hasn't started yet. * \`exporting\` - the migration is in progress. * \`exported\` - the migration finished successfully. * \`failed\` - the migration failed. Once the migration has been \`exported\` you can [download the migration archive](https://docs.github.com/rest/reference/migrations#download-a-user-migration-archive). + * + * @tags migrations + * @name MigrationsGetStatusForAuthenticatedUser + * @summary Get a user migration status + * @request GET:/user/migrations/{migration_id} + */ + migrationsGetStatusForAuthenticatedUser: ( + { migrationId, ...query }: MigrationsGetStatusForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/migrations/\${migrationId}\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all migrations a user has started. + * + * @tags migrations + * @name MigrationsListForAuthenticatedUser + * @summary List user migrations + * @request GET:/user/migrations + */ + migrationsListForAuthenticatedUser: (query: MigrationsListForAuthenticatedUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all the repositories for this user migration. + * + * @tags migrations + * @name MigrationsListReposForUser + * @summary List repositories for a user migration + * @request GET:/user/migrations/{migration_id}/repositories + */ + migrationsListReposForUser: ( + { migrationId, ...query }: MigrationsListReposForUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/migrations/\${migrationId}/repositories\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Initiates the generation of a user migration archive. + * + * @tags migrations + * @name MigrationsStartForAuthenticatedUser + * @summary Start a user migration + * @request POST:/user/migrations + */ + migrationsStartForAuthenticatedUser: ( + data: MigrationsStartForAuthenticatedUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/migrations\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Unlocks a repository. You can lock repositories when you [start a user migration](https://docs.github.com/rest/reference/migrations#start-a-user-migration). Once the migration is complete you can unlock each repository to begin using it again or [delete the repository](https://docs.github.com/rest/reference/repos#delete-a-repository) if you no longer need the source data. Returns a status of \`404 Not Found\` if the repository is not locked. + * + * @tags migrations + * @name MigrationsUnlockRepoForAuthenticatedUser + * @summary Unlock a user repository + * @request DELETE:/user/migrations/{migration_id}/repos/{repo_name}/lock + */ + migrationsUnlockRepoForAuthenticatedUser: (migrationId: number, repoName: string, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/repos/\${repoName}/lock\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsGetMembershipForAuthenticatedUser + * @summary Get an organization membership for the authenticated user + * @request GET:/user/memberships/orgs/{org} + */ + orgsGetMembershipForAuthenticatedUser: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/user/memberships/orgs/\${org}\`, + method: "GET", + ...params, + }), + + /** + * @description List organizations for the authenticated user. **OAuth scope requirements** This only lists organizations that your authorization allows you to operate on in some way (e.g., you can list teams with \`read:org\` scope, you can publicize your organization membership with \`user\` scope, etc.). Therefore, this API requires at least \`user\` or \`read:org\` scope. OAuth requests with insufficient scope receive a \`403 Forbidden\` response. + * + * @tags orgs + * @name OrgsListForAuthenticatedUser + * @summary List organizations for the authenticated user + * @request GET:/user/orgs + */ + orgsListForAuthenticatedUser: (query: OrgsListForAuthenticatedUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/orgs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsListMembershipsForAuthenticatedUser + * @summary List organization memberships for the authenticated user + * @request GET:/user/memberships/orgs + */ + orgsListMembershipsForAuthenticatedUser: ( + query: OrgsListMembershipsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/memberships/orgs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsUpdateMembershipForAuthenticatedUser + * @summary Update an organization membership for the authenticated user + * @request PATCH:/user/memberships/orgs/{org} + */ + orgsUpdateMembershipForAuthenticatedUser: ( + org: string, + data: OrgsUpdateMembershipForAuthenticatedUserPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/memberships/orgs/\${org}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsCreateForAuthenticatedUser + * @summary Create a user project + * @request POST:/user/projects + */ + projectsCreateForAuthenticatedUser: (data: ProjectsCreateForAuthenticatedUserPayload, params: RequestParams = {}) => + this.request< + ProjectsCreateForAuthenticatedUserData, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/user/projects\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposAcceptInvitation + * @summary Accept a repository invitation + * @request PATCH:/user/repository_invitations/{invitation_id} + */ + reposAcceptInvitation: (invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/repository_invitations/\${invitationId}\`, + method: "PATCH", + ...params, + }), + + /** + * @description Creates a new repository for the authenticated user. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * + * @tags repos + * @name ReposCreateForAuthenticatedUser + * @summary Create a repository for the authenticated user + * @request POST:/user/repos + */ + reposCreateForAuthenticatedUser: (data: ReposCreateForAuthenticatedUserPayload, params: RequestParams = {}) => + this.request({ + path: \`/user/repos\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeclineInvitation + * @summary Decline a repository invitation + * @request DELETE:/user/repository_invitations/{invitation_id} + */ + reposDeclineInvitation: (invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/repository_invitations/\${invitationId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists repositories that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. + * + * @tags repos + * @name ReposListForAuthenticatedUser + * @summary List repositories for the authenticated user + * @request GET:/user/repos + */ + reposListForAuthenticatedUser: (query: ReposListForAuthenticatedUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/repos\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description When authenticating as a user, this endpoint will list all currently open repository invitations for that user. + * + * @tags repos + * @name ReposListInvitationsForAuthenticatedUser + * @summary List repository invitations for the authenticated user + * @request GET:/user/repository_invitations + */ + reposListInvitationsForAuthenticatedUser: ( + query: ReposListInvitationsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/repository_invitations\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires \`user\`, \`repo\`, or \`read:org\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/) when authenticating via [OAuth](https://docs.github.com/apps/building-oauth-apps/). + * + * @tags teams + * @name TeamsListForAuthenticatedUser + * @summary List teams for the authenticated user + * @request GET:/user/teams + */ + teamsListForAuthenticatedUser: (query: TeamsListForAuthenticatedUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/teams\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description This endpoint is accessible with the \`user\` scope. + * + * @tags users + * @name UsersAddEmailForAuthenticated + * @summary Add an email address for the authenticated user + * @request POST:/user/emails + */ + usersAddEmailForAuthenticated: (data: UsersAddEmailForAuthenticatedPayload, params: RequestParams = {}) => + this.request({ + path: \`/user/emails\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags users + * @name UsersBlock + * @summary Block a user + * @request PUT:/user/blocks/{username} + */ + usersBlock: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags users + * @name UsersCheckBlocked + * @summary Check if a user is blocked by the authenticated user + * @request GET:/user/blocks/{username} + */ + usersCheckBlocked: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags users + * @name UsersCheckPersonIsFollowedByAuthenticated + * @summary Check if a person is followed by the authenticated user + * @request GET:/user/following/{username} + */ + usersCheckPersonIsFollowedByAuthenticated: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/following/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Adds a GPG key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least \`write:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersCreateGpgKeyForAuthenticated + * @summary Create a GPG key for the authenticated user + * @request POST:/user/gpg_keys + */ + usersCreateGpgKeyForAuthenticated: (data: UsersCreateGpgKeyForAuthenticatedPayload, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds a public SSH key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least \`write:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersCreatePublicSshKeyForAuthenticated + * @summary Create a public SSH key for the authenticated user + * @request POST:/user/keys + */ + usersCreatePublicSshKeyForAuthenticated: ( + data: UsersCreatePublicSshKeyForAuthenticatedPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/keys\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description This endpoint is accessible with the \`user\` scope. + * + * @tags users + * @name UsersDeleteEmailForAuthenticated + * @summary Delete an email address for the authenticated user + * @request DELETE:/user/emails + */ + usersDeleteEmailForAuthenticated: (data: UsersDeleteEmailForAuthenticatedPayload, params: RequestParams = {}) => + this.request({ + path: \`/user/emails\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersDeleteGpgKeyForAuthenticated + * @summary Delete a GPG key for the authenticated user + * @request DELETE:/user/gpg_keys/{gpg_key_id} + */ + usersDeleteGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys/\${gpgKeyId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Removes a public SSH key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersDeletePublicSshKeyForAuthenticated + * @summary Delete a public SSH key for the authenticated user + * @request DELETE:/user/keys/{key_id} + */ + usersDeletePublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/keys/\${keyId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. + * + * @tags users + * @name UsersFollow + * @summary Follow a user + * @request PUT:/user/following/{username} + */ + usersFollow: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/following/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * @description If the authenticated user is authenticated through basic authentication or OAuth with the \`user\` scope, then the response lists public and private profile information. If the authenticated user is authenticated through OAuth without the \`user\` scope, then the response lists only public profile information. + * + * @tags users + * @name UsersGetAuthenticated + * @summary Get the authenticated user + * @request GET:/user + */ + usersGetAuthenticated: (params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "GET", + ...params, + }), + + /** + * @description View extended details for a single GPG key. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersGetGpgKeyForAuthenticated + * @summary Get a GPG key for the authenticated user + * @request GET:/user/gpg_keys/{gpg_key_id} + */ + usersGetGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys/\${gpgKeyId}\`, + method: "GET", + ...params, + }), + + /** + * @description View extended details for a single public SSH key. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersGetPublicSshKeyForAuthenticated + * @summary Get a public SSH key for the authenticated user + * @request GET:/user/keys/{key_id} + */ + usersGetPublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/keys/\${keyId}\`, + method: "GET", + ...params, + }), + + /** + * @description List the users you've blocked on your personal account. + * + * @tags users + * @name UsersListBlockedByAuthenticated + * @summary List users blocked by the authenticated user + * @request GET:/user/blocks + */ + usersListBlockedByAuthenticated: (params: RequestParams = {}) => + this.request< + UsersListBlockedByAuthenticatedData, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/user/blocks\`, + method: "GET", + ...params, + }), + + /** + * @description Lists all of your email addresses, and specifies which one is visible to the public. This endpoint is accessible with the \`user:email\` scope. + * + * @tags users + * @name UsersListEmailsForAuthenticated + * @summary List email addresses for the authenticated user + * @request GET:/user/emails + */ + usersListEmailsForAuthenticated: (query: UsersListEmailsForAuthenticatedParams, params: RequestParams = {}) => + this.request({ + path: \`/user/emails\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people who the authenticated user follows. + * + * @tags users + * @name UsersListFollowedByAuthenticated + * @summary List the people the authenticated user follows + * @request GET:/user/following + */ + usersListFollowedByAuthenticated: (query: UsersListFollowedByAuthenticatedParams, params: RequestParams = {}) => + this.request({ + path: \`/user/following\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people following the authenticated user. + * + * @tags users + * @name UsersListFollowersForAuthenticatedUser + * @summary List followers of the authenticated user + * @request GET:/user/followers + */ + usersListFollowersForAuthenticatedUser: ( + query: UsersListFollowersForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/followers\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the current user's GPG keys. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersListGpgKeysForAuthenticated + * @summary List GPG keys for the authenticated user + * @request GET:/user/gpg_keys + */ + usersListGpgKeysForAuthenticated: (query: UsersListGpgKeysForAuthenticatedParams, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists your publicly visible email address, which you can set with the [Set primary email visibility for the authenticated user](https://docs.github.com/rest/reference/users#set-primary-email-visibility-for-the-authenticated-user) endpoint. This endpoint is accessible with the \`user:email\` scope. + * + * @tags users + * @name UsersListPublicEmailsForAuthenticated + * @summary List public email addresses for the authenticated user + * @request GET:/user/public_emails + */ + usersListPublicEmailsForAuthenticated: ( + query: UsersListPublicEmailsForAuthenticatedParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/public_emails\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the public SSH keys for the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersListPublicSshKeysForAuthenticated + * @summary List public SSH keys for the authenticated user + * @request GET:/user/keys + */ + usersListPublicSshKeysForAuthenticated: ( + query: UsersListPublicSshKeysForAuthenticatedParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/keys\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Sets the visibility for your primary email addresses. + * + * @tags users + * @name UsersSetPrimaryEmailVisibilityForAuthenticated + * @summary Set primary email visibility for the authenticated user + * @request PATCH:/user/email/visibility + */ + usersSetPrimaryEmailVisibilityForAuthenticated: ( + data: UsersSetPrimaryEmailVisibilityForAuthenticatedPayload, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/email/visibility\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags users + * @name UsersUnblock + * @summary Unblock a user + * @request DELETE:/user/blocks/{username} + */ + usersUnblock: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. + * + * @tags users + * @name UsersUnfollow + * @summary Unfollow a user + * @request DELETE:/user/following/{username} + */ + usersUnfollow: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/following/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** If your email is set to private and you send an \`email\` parameter as part of this request to update your profile, your privacy settings are still enforced: the email address will not be displayed on your public profile or via the API. + * + * @tags users + * @name UsersUpdateAuthenticated + * @summary Update the authenticated user + * @request PATCH:/user + */ + usersUpdateAuthenticated: (data: UsersUpdateAuthenticatedPayload, params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; + users = { + /** + * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. + * + * @tags activity + * @name ActivityListEventsForAuthenticatedUser + * @summary List events for the authenticated user + * @request GET:/users/{username}/events + */ + activityListEventsForAuthenticatedUser: ( + { username, ...query }: ActivityListEventsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description This is the user's organization dashboard. You must be authenticated as the user to view this. + * + * @tags activity + * @name ActivityListOrgEventsForAuthenticatedUser + * @summary List organization events for the authenticated user + * @request GET:/users/{username}/events/orgs/{org} + */ + activityListOrgEventsForAuthenticatedUser: ( + { username, org, ...query }: ActivityListOrgEventsForAuthenticatedUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/events/orgs/\${org}\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityListPublicEventsForUser + * @summary List public events for a user + * @request GET:/users/{username}/events/public + */ + activityListPublicEventsForUser: ( + { username, ...query }: ActivityListPublicEventsForUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/events/public\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description These are events that you've received by watching repos and following users. If you are authenticated as the given user, you will see private events. Otherwise, you'll only see public events. + * + * @tags activity + * @name ActivityListReceivedEventsForUser + * @summary List events received by the authenticated user + * @request GET:/users/{username}/received_events + */ + activityListReceivedEventsForUser: ( + { username, ...query }: ActivityListReceivedEventsForUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/received_events\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityListReceivedPublicEventsForUser + * @summary List public events received by a user + * @request GET:/users/{username}/received_events/public + */ + activityListReceivedPublicEventsForUser: ( + { username, ...query }: ActivityListReceivedPublicEventsForUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/received_events/public\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists repositories a user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: + * + * @tags activity + * @name ActivityListReposStarredByUser + * @summary List repositories starred by a user + * @request GET:/users/{username}/starred + */ + activityListReposStarredByUser: ( + { username, ...query }: ActivityListReposStarredByUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/starred\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists repositories a user is watching. + * + * @tags activity + * @name ActivityListReposWatchedByUser + * @summary List repositories watched by a user + * @request GET:/users/{username}/subscriptions + */ + activityListReposWatchedByUser: ( + { username, ...query }: ActivityListReposWatchedByUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/subscriptions\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find the user’s installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetUserInstallation + * @summary Get a user installation for the authenticated app + * @request GET:/users/{username}/installation + */ + appsGetUserInstallation: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/installation\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the \`user\` scope. + * + * @tags billing + * @name BillingGetGithubActionsBillingUser + * @summary Get GitHub Actions billing for a user + * @request GET:/users/{username}/settings/billing/actions + */ + billingGetGithubActionsBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/actions\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. + * + * @tags billing + * @name BillingGetGithubPackagesBillingUser + * @summary Get GitHub Packages billing for a user + * @request GET:/users/{username}/settings/billing/packages + */ + billingGetGithubPackagesBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/packages\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. + * + * @tags billing + * @name BillingGetSharedStorageBillingUser + * @summary Get shared storage billing for a user + * @request GET:/users/{username}/settings/billing/shared-storage + */ + billingGetSharedStorageBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/shared-storage\`, + method: "GET", + ...params, + }), + + /** + * @description Lists public gists for the specified user: + * + * @tags gists + * @name GistsListForUser + * @summary List gists for a user + * @request GET:/users/{username}/gists + */ + gistsListForUser: ({ username, ...query }: GistsListForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/gists\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description List [public organization memberships](https://help.github.com/articles/publicizing-or-concealing-organization-membership) for the specified user. This method only lists _public_ memberships, regardless of authentication. If you need to fetch all of the organization memberships (public and private) for the authenticated user, use the [List organizations for the authenticated user](https://docs.github.com/rest/reference/orgs#list-organizations-for-the-authenticated-user) API instead. + * + * @tags orgs + * @name OrgsListForUser + * @summary List organizations for a user + * @request GET:/users/{username}/orgs + */ + orgsListForUser: ({ username, ...query }: OrgsListForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/orgs\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsListForUser + * @summary List user projects + * @request GET:/users/{username}/projects + */ + projectsListForUser: ({ username, ...query }: ProjectsListForUserParams, params: RequestParams = {}) => + this.request< + ProjectsListForUserData, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/users/\${username}/projects\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists public repositories for the specified user. + * + * @tags repos + * @name ReposListForUser + * @summary List repositories for a user + * @request GET:/users/{username}/repos + */ + reposListForUser: ({ username, ...query }: ReposListForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/repos\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags users + * @name UsersCheckFollowingForUser + * @summary Check if a user follows another user + * @request GET:/users/{username}/following/{target_user} + */ + usersCheckFollowingForUser: (username: string, targetUser: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/following/\${targetUser}\`, + method: "GET", + ...params, + }), + + /** + * @description Provides publicly available information about someone with a GitHub account. GitHub Apps with the \`Plan\` user permission can use this endpoint to retrieve information about a user's GitHub plan. The GitHub App must be authenticated as a user. See "[Identifying and authorizing users for GitHub Apps](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)" for details about authentication. For an example response, see 'Response with GitHub plan information' below" The \`email\` key in the following response is the publicly visible email address from your GitHub [profile page](https://github.com/settings/profile). When setting up your profile, you can select a primary email address to be “public” which provides an email entry for this endpoint. If you do not set a public email address for \`email\`, then it will have a value of \`null\`. You only see publicly visible email addresses when authenticated with GitHub. For more information, see [Authentication](https://docs.github.com/rest/overview/resources-in-the-rest-api#authentication). The Emails API enables you to list all of your email addresses, and toggle a primary email to be visible publicly. For more information, see "[Emails API](https://docs.github.com/rest/reference/users#emails)". + * + * @tags users + * @name UsersGetByUsername + * @summary Get a user + * @request GET:/users/{username} + */ + usersGetByUsername: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Provides hovercard information when authenticated through basic auth or OAuth with the \`repo\` scope. You can find out more about someone in relation to their pull requests, issues, repositories, and organizations. The \`subject_type\` and \`subject_id\` parameters provide context for the person's hovercard, which returns more information than without the parameters. For example, if you wanted to find out more about \`octocat\` who owns the \`Spoon-Knife\` repository via cURL, it would look like this: \`\`\`shell curl -u username:token https://api.github.com/users/octocat/hovercard?subject_type=repository&subject_id=1300192 \`\`\` + * + * @tags users + * @name UsersGetContextForUser + * @summary Get contextual information for a user + * @request GET:/users/{username}/hovercard + */ + usersGetContextForUser: ({ username, ...query }: UsersGetContextForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/hovercard\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists all users, in the order that they signed up on GitHub. This list includes personal user accounts and organization accounts. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of users. + * + * @tags users + * @name UsersList + * @summary List users + * @request GET:/users + */ + usersList: (query: UsersListParams, params: RequestParams = {}) => + this.request({ + path: \`/users\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people following the specified user. + * + * @tags users + * @name UsersListFollowersForUser + * @summary List followers of a user + * @request GET:/users/{username}/followers + */ + usersListFollowersForUser: ({ username, ...query }: UsersListFollowersForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/followers\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the people who the specified user follows. + * + * @tags users + * @name UsersListFollowingForUser + * @summary List the people a user follows + * @request GET:/users/{username}/following + */ + usersListFollowingForUser: ({ username, ...query }: UsersListFollowingForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/following\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the GPG keys for a user. This information is accessible by anyone. + * + * @tags users + * @name UsersListGpgKeysForUser + * @summary List GPG keys for a user + * @request GET:/users/{username}/gpg_keys + */ + usersListGpgKeysForUser: ({ username, ...query }: UsersListGpgKeysForUserParams, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/gpg_keys\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description Lists the _verified_ public SSH keys for a user. This is accessible by anyone. + * + * @tags users + * @name UsersListPublicKeysForUser + * @summary List public keys for a user + * @request GET:/users/{username}/keys + */ + usersListPublicKeysForUser: ( + { username, ...query }: UsersListPublicKeysForUserParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/keys\`, + method: "GET", + query: query, + ...params, + }), + }; + zen = { + /** + * @description Get a random sentence from the Zen of GitHub + * + * @tags meta + * @name MetaGetZen + * @summary Get the Zen of GitHub + * @request GET:/zen + */ + metaGetZen: (params: RequestParams = {}) => + this.request({ + path: \`/zen\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'furkot-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Step { + /** address of the stop */ + address?: string; + /** + * arrival at the stop in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + arrival?: string; + /** geographical coordinates of the stop */ + coordinates?: { + /** + * latitude + * @format float + */ + lat?: number; + /** + * longitude + * @format float + */ + lon?: number; + }; + /** + * departure from the stop in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + departure?: string; + /** name of the stop */ + name?: string; + /** + * number of nights + * @format int64 + */ + nights?: number; + /** route leading to the stop */ + route?: { + /** + * route distance in meters + * @format int64 + */ + distance?: number; + /** + * route duration in seconds + * @format int64 + */ + duration?: number; + /** travel mode */ + mode?: StepModeEnum; + /** route path compatible with Google polyline encoding algorithm */ + polyline?: string; + }; + /** url of the page with more information about the stop */ + url?: string; +} + +/** travel mode */ +export enum StepModeEnum { + Car = "car", + Motorcycle = "motorcycle", + Bicycle = "bicycle", + Walk = "walk", + Other = "other", +} + +export type StopDetailData = Step[]; + +export interface Trip { + /** + * begin of the trip in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + begin?: string; + /** description of the trip (truncated to 200 characters) */ + description?: string; + /** + * end of the trip in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + end?: string; + /** Unique ID of the trip */ + id?: string; + /** name of the trip */ + name?: string; +} + +export type TripListData = Trip[]; + +export namespace Trip { + /** + * @description list stops for a trip identified by {trip_id} + * @name StopDetail + * @request GET:/trip/{trip_id}/stop + * @secure + */ + export namespace StopDetail { + export type RequestParams = { + /** id of the trip */ + tripId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = StopDetailData; + } + /** + * @description list user's trips + * @name TripList + * @request GET:/trip + * @secure + */ + export namespace TripList { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TripListData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://trips.furkot.com/pub/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Furkot Trips + * @version 1.0.0 + * @baseUrl https://trips.furkot.com/pub/api + * @externalDocs https://help.furkot.com/widgets/furkot-api.html + * @contact + * + * Furkot provides Rest API to access user trip data. + * Using Furkot API an application can list user trips and display stops for a specific trip. + * Furkot API uses OAuth2 protocol to authorize applications to access data on behalf of users. + */ +export class Api extends HttpClient { + trip = { + /** + * @description list stops for a trip identified by {trip_id} + * + * @name StopDetail + * @request GET:/trip/{trip_id}/stop + * @secure + */ + stopDetail: (tripId: string, params: RequestParams = {}) => + this.request({ + path: \`/trip/\${tripId}/stop\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description list user's trips + * + * @name TripList + * @request GET:/trip + * @secure + */ + tripList: (params: RequestParams = {}) => + this.request({ + path: \`/trip\`, + method: "GET", + secure: true, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'giphy' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** Your request was formatted incorrectly or missing required parameters. */ +export type BadRequest = any; + +/** You weren't authorized to make your request; most likely this indicates an issue with your API Key. */ +export type Forbidden = any; + +export interface GetGifByIdData { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; +} + +export interface GetGifsByIdData { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; +} + +export interface GetGifsByIdParams { + /** Filters results by specified GIF IDs, separated by commas. */ + ids?: string; +} + +export interface Gif { + /** + * The unique bit.ly URL for this GIF + * @example "http://gph.is/1gsWDcL" + */ + bitly_url?: string; + /** Currently unused */ + content_url?: string; + /** + * The date this GIF was added to the GIPHY database. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + create_datetime?: string; + /** + * A URL used for embedding this GIF + * @example "http://giphy.com/embed/YsTs5ltWtEhnq" + */ + embded_url?: string; + /** An array of featured tags for this GIF (Note: Not available when using the Public Beta Key) */ + featured_tags?: string[]; + /** + * This GIF's unique ID + * @example "YsTs5ltWtEhnq" + */ + id?: string; + /** An object containing data for various available formats and sizes of this GIF. */ + images?: { + /** Data surrounding a version of this GIF downsized to be under 2mb. */ + downsized?: Image; + /** Data surrounding a version of this GIF downsized to be under 8mb. */ + downsized_large?: Image; + /** Data surrounding a version of this GIF downsized to be under 5mb. */ + downsized_medium?: Image; + /** Data surrounding a version of this GIF downsized to be under 200kb. */ + downsized_small?: Image; + /** Data surrounding a static preview image of the downsized version of this GIF. */ + downsized_still?: Image; + /** Data surrounding versions of this GIF with a fixed height of 200 pixels. Good for mobile use. */ + fixed_height?: Image; + /** Data surrounding versions of this GIF with a fixed height of 200 pixels and the number of frames reduced to 6. */ + fixed_height_downsampled?: Image; + /** Data surrounding versions of this GIF with a fixed height of 100 pixels. Good for mobile keyboards. */ + fixed_height_small?: Image; + /** Data surrounding a static image of this GIF with a fixed height of 100 pixels. */ + fixed_height_small_still?: Image; + /** Data surrounding a static image of this GIF with a fixed height of 200 pixels. */ + fixed_height_still?: Image; + /** Data surrounding versions of this GIF with a fixed width of 200 pixels. Good for mobile use. */ + fixed_width?: Image; + /** Data surrounding versions of this GIF with a fixed width of 200 pixels and the number of frames reduced to 6. */ + fixed_width_downsampled?: Image; + /** Data surrounding versions of this GIF with a fixed width of 100 pixels. Good for mobile keyboards. */ + fixed_width_small?: Image; + /** Data surrounding a static image of this GIF with a fixed width of 100 pixels. */ + fixed_width_small_still?: Image; + /** Data surrounding a static image of this GIF with a fixed width of 200 pixels. */ + fixed_width_still?: Image; + /** Data surrounding a version of this GIF set to loop for 15 seconds. */ + looping?: Image; + /** Data surrounding the original version of this GIF. Good for desktop use. */ + original?: Image; + /** Data surrounding a static preview image of the original GIF. */ + original_still?: Image; + /** Data surrounding a version of this GIF in .MP4 format limited to 50kb that displays the first 1-2 seconds of the GIF. */ + preview?: Image; + /** Data surrounding a version of this GIF limited to 50kb that displays the first 1-2 seconds of the GIF. */ + preview_gif?: Image; + }; + /** + * The creation or upload date from this GIF's source. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + import_datetime?: string; + /** + * The MPAA-style rating for this content. Examples include Y, G, PG, PG-13 and R + * @example "g" + */ + rating?: string; + /** + * The unique slug used in this GIF's URL + * @example "confused-flying-YsTs5ltWtEhnq" + */ + slug?: string; + /** + * The page on which this GIF was found + * @example "http://www.reddit.com/r/reactiongifs/comments/1xpyaa/superman_goes_to_hollywood/" + */ + source?: string; + /** + * The URL of the webpage on which this GIF was found. + * @example "http://cheezburger.com/5282328320" + */ + source_post_url?: string; + /** + * The top level domain of the source URL. + * @example "cheezburger.com" + */ + source_tld?: string; + /** An array of tags for this GIF (Note: Not available when using the Public Beta Key) */ + tags?: string[]; + /** + * The date on which this gif was marked trending, if applicable. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + trending_datetime?: string; + /** + * Type of the gif. By default, this is almost always gif + * @default "gif" + */ + type?: GifTypeEnum; + /** + * The date on which this GIF was last updated. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + update_datetime?: string; + /** + * The unique URL for this GIF + * @example "http://giphy.com/gifs/confused-flying-YsTs5ltWtEhnq" + */ + url?: string; + /** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ + user?: User; + /** + * The username this GIF is attached to, if applicable + * @example "JoeCool4000" + */ + username?: string; +} + +/** + * Type of the gif. By default, this is almost always gif + * @default "gif" + */ +export enum GifTypeEnum { + Gif = "gif", +} + +export interface Image { + /** + * The URL for this GIF in .MP4 format. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.mp4" + */ + mp4?: string; + /** + * The size in bytes of the .MP4 file corresponding to this GIF. + * @example "25123" + */ + mp4_size?: string; + /** + * The number of frames in this GIF. + * @example "15" + */ + frames?: string; + /** + * The height of this GIF in pixels. + * @example "200" + */ + height?: string; + /** + * The size of this GIF in bytes. + * @example "32381" + */ + size?: string; + /** + * The publicly-accessible direct URL for this GIF. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/200.gif" + */ + url?: string; + /** + * The URL for this GIF in .webp format. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.webp" + */ + webp?: string; + /** + * The size in bytes of the .webp file corresponding to this GIF. + * @example "12321" + */ + webp_size?: string; + /** + * The width of this GIF in pixels. + * @example "320" + */ + width?: string; +} + +/** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ +export interface Meta { + /** + * HTTP Response Message + * @example "OK" + */ + msg?: string; + /** + * A unique ID paired with this response from the API. + * @example "57eea03c72381f86e05c35d2" + */ + response_id?: string; + /** + * HTTP Response Code + * @format int32 + * @example 200 + */ + status?: number; +} + +/** The particular GIF you are requesting was not found. This occurs, for example, if you request a GIF by an id that does not exist. */ +export type NotFound = any; + +/** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ +export interface Pagination { + /** + * Total number of items returned. + * @format int32 + * @example 25 + */ + count?: number; + /** + * Position in pagination. + * @format int32 + * @example 75 + */ + offset?: number; + /** + * Total number of items available. + * @format int32 + * @example 250 + */ + total_count?: number; +} + +export interface RandomGifData { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; +} + +export interface RandomGifParams { + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; +} + +export interface RandomStickerData { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; +} + +export interface RandomStickerParams { + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; +} + +export interface SearchGifsData { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; +} + +export interface SearchGifsParams { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; +} + +export interface SearchStickersData { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; +} + +export interface SearchStickersParams { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; +} + +/** Your API Key is making too many requests. Read about [requesting a Production Key](https://developers.giphy.com/docs/#access) to upgrade your API Key rate limits. */ +export type TooManyRequests = any; + +export interface TranslateGifData { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; +} + +export interface TranslateGifParams { + /** Search term. */ + s: string; +} + +export interface TranslateStickerData { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; +} + +export interface TranslateStickerParams { + /** Search term. */ + s: string; +} + +export interface TrendingGifsData { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; +} + +export interface TrendingGifsParams { + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Filters results by specified rating. */ + rating?: string; +} + +export interface TrendingStickersData { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; +} + +export interface TrendingStickersParams { + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Filters results by specified rating. */ + rating?: string; +} + +/** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ +export interface User { + /** + * The URL for this user's avatar image. + * @example "https://media1.giphy.com/avatars/election2016/XwYrZi5H87o6.gif" + */ + avatar_url?: string; + /** + * The URL for the banner image that appears atop this user's profile page. + * @example "https://media4.giphy.com/avatars/cheezburger/XkuejOhoGLE6.jpg" + */ + banner_url?: string; + /** + * The display name associated with this user (contains formatting the base username might not). + * @example "JoeCool4000" + */ + display_name?: string; + /** + * The URL for this user's profile. + * @example "https://giphy.com/cheezburger/" + */ + profile_url?: string; + /** + * The Twitter username associated with this user, if applicable. + * @example "@joecool4000" + */ + twitter?: string; + /** + * The username associated with this user. + * @example "joecool4000" + */ + username?: string; +} + +export namespace Gifs { + /** + * @description Returns a GIF given that GIF's unique ID + * @tags gifs + * @name GetGifById + * @summary Get GIF by Id + * @request GET:/gifs/{gifId} + * @secure + */ + export namespace GetGifById { + export type RequestParams = { + /** + * Filters results by specified GIF ID. + * @format int32 + */ + gifId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetGifByIdData; + } + /** + * @description A multiget version of the get GIF by ID endpoint. + * @tags gifs + * @name GetGifsById + * @summary Get GIFs by ID + * @request GET:/gifs + * @secure + */ + export namespace GetGifsById { + export type RequestParams = {}; + export type RequestQuery = { + /** Filters results by specified GIF IDs, separated by commas. */ + ids?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetGifsByIdData; + } + /** + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. + * @tags gifs + * @name RandomGif + * @summary Random GIF + * @request GET:/gifs/random + * @secure + */ + export namespace RandomGif { + export type RequestParams = {}; + export type RequestQuery = { + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = RandomGifData; + } + /** + * @description Search all GIPHY GIFs for a word or phrase. Punctuation will be stripped and ignored. Use a plus or url encode for phrases. Example paul+rudd, ryan+gosling or american+psycho. + * @tags gifs + * @name SearchGifs + * @summary Search GIFs + * @request GET:/gifs/search + * @secure + */ + export namespace SearchGifs { + export type RequestParams = {}; + export type RequestQuery = { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchGifsData; + } + /** + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIF + * @tags gifs + * @name TranslateGif + * @summary Translate phrase to GIF + * @request GET:/gifs/translate + * @secure + */ + export namespace TranslateGif { + export type RequestParams = {}; + export type RequestQuery = { + /** Search term. */ + s: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TranslateGifData; + } + /** + * @description Fetch GIFs currently trending online. Hand curated by the GIPHY editorial team. The data returned mirrors the GIFs showcased on the GIPHY homepage. Returns 25 results by default. + * @tags gifs + * @name TrendingGifs + * @summary Trending GIFs + * @request GET:/gifs/trending + * @secure + */ + export namespace TrendingGifs { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Filters results by specified rating. */ + rating?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TrendingGifsData; + } +} + +export namespace Stickers { + /** + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. + * @tags stickers + * @name RandomSticker + * @summary Random Sticker + * @request GET:/stickers/random + * @secure + */ + export namespace RandomSticker { + export type RequestParams = {}; + export type RequestQuery = { + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = RandomStickerData; + } + /** + * @description Replicates the functionality and requirements of the classic GIPHY search, but returns animated stickers rather than GIFs. + * @tags stickers + * @name SearchStickers + * @summary Search Stickers + * @request GET:/stickers/search + * @secure + */ + export namespace SearchStickers { + export type RequestParams = {}; + export type RequestQuery = { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = SearchStickersData; + } + /** + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIFs. + * @tags stickers + * @name TranslateSticker + * @summary Translate phrase to Sticker + * @request GET:/stickers/translate + * @secure + */ + export namespace TranslateSticker { + export type RequestParams = {}; + export type RequestQuery = { + /** Search term. */ + s: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TranslateStickerData; + } + /** + * @description Fetch Stickers currently trending online. Hand curated by the GIPHY editorial team. Returns 25 results by default. + * @tags stickers + * @name TrendingStickers + * @summary Trending Stickers + * @request GET:/stickers/trending + * @secure + */ + export namespace TrendingStickers { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Filters results by specified rating. */ + rating?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TrendingStickersData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.giphy.com/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Giphy + * @version 1.0 + * @termsOfService https://developers.giphy.com/ + * @baseUrl https://api.giphy.com/v1 + * @externalDocs https://developers.giphy.com/docs/ + * @contact + * + * Giphy API + */ +export class Api extends HttpClient { + gifs = { + /** + * @description Returns a GIF given that GIF's unique ID + * + * @tags gifs + * @name GetGifById + * @summary Get GIF by Id + * @request GET:/gifs/{gifId} + * @secure + */ + getGifById: (gifId: number, params: RequestParams = {}) => + this.request({ + path: \`/gifs/\${gifId}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description A multiget version of the get GIF by ID endpoint. + * + * @tags gifs + * @name GetGifsById + * @summary Get GIFs by ID + * @request GET:/gifs + * @secure + */ + getGifsById: (query: GetGifsByIdParams, params: RequestParams = {}) => + this.request({ + path: \`/gifs\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. + * + * @tags gifs + * @name RandomGif + * @summary Random GIF + * @request GET:/gifs/random + * @secure + */ + randomGif: (query: RandomGifParams, params: RequestParams = {}) => + this.request({ + path: \`/gifs/random\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Search all GIPHY GIFs for a word or phrase. Punctuation will be stripped and ignored. Use a plus or url encode for phrases. Example paul+rudd, ryan+gosling or american+psycho. + * + * @tags gifs + * @name SearchGifs + * @summary Search GIFs + * @request GET:/gifs/search + * @secure + */ + searchGifs: (query: SearchGifsParams, params: RequestParams = {}) => + this.request({ + path: \`/gifs/search\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIF + * + * @tags gifs + * @name TranslateGif + * @summary Translate phrase to GIF + * @request GET:/gifs/translate + * @secure + */ + translateGif: (query: TranslateGifParams, params: RequestParams = {}) => + this.request({ + path: \`/gifs/translate\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Fetch GIFs currently trending online. Hand curated by the GIPHY editorial team. The data returned mirrors the GIFs showcased on the GIPHY homepage. Returns 25 results by default. + * + * @tags gifs + * @name TrendingGifs + * @summary Trending GIFs + * @request GET:/gifs/trending + * @secure + */ + trendingGifs: (query: TrendingGifsParams, params: RequestParams = {}) => + this.request({ + path: \`/gifs/trending\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + stickers = { + /** + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. + * + * @tags stickers + * @name RandomSticker + * @summary Random Sticker + * @request GET:/stickers/random + * @secure + */ + randomSticker: (query: RandomStickerParams, params: RequestParams = {}) => + this.request({ + path: \`/stickers/random\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Replicates the functionality and requirements of the classic GIPHY search, but returns animated stickers rather than GIFs. + * + * @tags stickers + * @name SearchStickers + * @summary Search Stickers + * @request GET:/stickers/search + * @secure + */ + searchStickers: (query: SearchStickersParams, params: RequestParams = {}) => + this.request({ + path: \`/stickers/search\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIFs. + * + * @tags stickers + * @name TranslateSticker + * @summary Translate phrase to Sticker + * @request GET:/stickers/translate + * @secure + */ + translateSticker: (query: TranslateStickerParams, params: RequestParams = {}) => + this.request({ + path: \`/stickers/translate\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Fetch Stickers currently trending online. Hand curated by the GIPHY editorial team. Returns 25 results by default. + * + * @tags stickers + * @name TrendingStickers + * @summary Trending Stickers + * @request GET:/stickers/trending + * @secure + */ + trendingStickers: (query: TrendingStickersParams, params: RequestParams = {}) => + this.request({ + path: \`/stickers/trending\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'link-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type GetPullRequestsByIdData = Pullrequest; + +export type GetPullRequestsByRepositoryData = Pullrequest[]; + +export interface GetPullRequestsByRepositoryParams { + slug: string; + state?: StateEnum; + username: string; +} + +export enum GetPullRequestsByRepositoryParams1StateEnum { + Open = "open", + Merged = "merged", + Declined = "declined", +} + +export type GetRepositoriesByOwnerData = Repository[]; + +export type GetRepositoryData = Repository; + +export type GetUserByNameData = User; + +export type MergePullRequestData = any; + +export interface Pullrequest { + author?: User; + id?: number; + repository?: Repository; + title?: string; +} + +export interface Repository { + owner?: User; + slug?: string; +} + +export enum StateEnum { + Open = "open", + Merged = "merged", + Declined = "declined", +} + +export interface User { + username?: string; + uuid?: string; +} + +export namespace V20 { + /** + * No description + * @name GetPullRequestsById + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} + */ + export namespace GetPullRequestsById { + export type RequestParams = { + pid: string; + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPullRequestsByIdData; + } + /** + * No description + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests + */ + export namespace GetPullRequestsByRepository { + export type RequestParams = { + slug: string; + username: string; + }; + export type RequestQuery = { + state?: GetPullRequestsByRepositoryParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPullRequestsByRepositoryData; + } + /** + * No description + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} + */ + export namespace GetRepositoriesByOwner { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetRepositoriesByOwnerData; + } + /** + * No description + * @name GetRepository + * @request GET:/2.0/repositories/{username}/{slug} + */ + export namespace GetRepository { + export type RequestParams = { + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetRepositoryData; + } + /** + * No description + * @name GetUserByName + * @request GET:/2.0/users/{username} + */ + export namespace GetUserByName { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetUserByNameData; + } + /** + * No description + * @name MergePullRequest + * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge + */ + export namespace MergePullRequest { + export type RequestParams = { + pid: string; + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MergePullRequestData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Link Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + v20 = { + /** + * No description + * + * @name GetPullRequestsById + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} + */ + getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests + */ + getPullRequestsByRepository: ( + { username, slug, ...query }: GetPullRequestsByRepositoryParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} + */ + getRepositoriesByOwner: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetRepository + * @request GET:/2.0/repositories/{username}/{slug} + */ + getRepository: (username: string, slug: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetUserByName + * @request GET:/2.0/users/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/users/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name MergePullRequest + * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge + */ + mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}/merge\`, + method: "POST", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'no-definitions-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface BasicErrorModel { + /** + * @min 100 + * @max 600 + */ + code: number; + field?: string | null; + message: string; +} + +export type ExtendedErrorModel = BasicErrorModel & { + rootCause: string; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Empty schema example + * @version 1.0.0 + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'oneof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Cat { + age?: number; + hunts?: boolean; +} + +export interface Dog { + bark?: boolean; + breed?: DogBreedEnum; +} + +export enum DogBreedEnum { + Dingo = "Dingo", + Husky = "Husky", + Retriever = "Retriever", + Shepherd = "Shepherd", +} + +export type PetsPartialUpdateData = any; + +export type PetsPartialUpdatePayload = Cat | Dog; + +export namespace Pets { + /** + * No description + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + export namespace PetsPartialUpdate { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = PetsPartialUpdatePayload; + export type RequestHeaders = {}; + export type ResponseBody = PetsPartialUpdateData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Oneof Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + petsPartialUpdate: (data: PetsPartialUpdatePayload, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'path-args' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type ListPetsData = object; + +export interface ListPetsParams { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param1?: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param2?: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param3: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + queryParam?: number; +} + +export namespace Pets { + /** + * No description + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets/{param1}/{param2}/{param3} + */ + export namespace ListPets { + export type RequestParams = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param1?: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param2?: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + param3: number; + }; + export type RequestQuery = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + queryParam?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ListPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://unknown.io/v666"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Path Args + * @version 1.0.0 + * @license MIT + * @baseUrl http://unknown.io/v666 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets/{param1}/{param2}/{param3} + */ + listPets: ({ param1, param2, param3, ...query }: ListPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${param1}/\${param2}/\${param3}\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'personal-api-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddJobData = string; + +export type AddProjectsData = string; + +export type AuthUserType = OmitIdUserType; + +export type DeleteJobData = any; + +export type DeleteProjectData = any; + +export type ExtractedProjectType = OmitProjectTypeJob & { + /** Information about job */ + job: JobType; +}; + +/** Information about job */ +export interface FooBar { + kind?: JobKind; +} + +/** Information about job */ +export interface FooBarBaz { + id?: string; + kind?: JobKind; + link?: string; + name?: string; + [key: string]: any; +} + +/** Information about job */ +export interface FooBaz { + link?: string; + name?: string; +} + +export type GetJobData = JobType; + +export type GetJobsData = JobType[]; + +export type GetProjectsData = ExtractedProjectType[]; + +/** + * FooBar + * @format int32 + */ +export enum IntEnumWithNames { + Unknown = 0, + String = 1, + Int32 = 2, + Int64 = 3, + Double = 4, + DateTime = 5, + Test2 = 6, + Test23 = 7, + Tess44 = 8, + BooFar = 9, +} + +export enum JobKind { + COMPANY = "COMPANY", + PERSONAL = "PERSONAL", + FREELANCE = "FREELANCE", + OPEN_SOURCE = "OPEN_SOURCE", +} + +/** Information about job */ +export interface JobType { + /** web site address */ + address?: string; + /** + * Exist only in open source jobs + * Format: \`\${username}/\${projectName}\` + */ + github?: string; + id: string; + /** + * Exist only in open source jobs + * Means project is dev. tool (like swagger code generator) + */ + isTool?: boolean; + kind: JobKind; + link?: string; + name?: string; + /** + * Exist only in open source jobs + * Format: \`\${orgname}/\${projectName}\` + */ + npm?: string; +} + +export type JobUpdateType = OmitIdJobType; + +export type LoginData = string; + +export interface NullableEnum { + /** @format int64 */ + id?: number; + legalCategory?: NullableEnumLegalCategoryEnum; +} + +export enum NullableEnumLegalCategoryEnum { + SARL = "SARL", + ASSOCIATION = "ASSOCIATION", +} + +export type OmitIdJobType = OmitJobTypeIdOrId; + +export type OmitIdProjectType = OmitProjectTypeIdOrId; + +export type OmitIdUserType = OmitUserTypeIdOrId; + +export type OmitJobTypeIdOrId = PickJobTypeExcludeKeysIdOrId; + +export type OmitProjectTypeIdOrId = PickProjectTypeExcludeKeysIdOrId; + +export type OmitProjectTypeJob = PickProjectTypeExcludeKeysJob; + +export type OmitUserTypeIdOrId = PickUserTypeExcludeKeysIdOrId; + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobTypeExcludeKeysIdOrId { + /** web site address */ + address?: string; + /** + * Exist only in open source jobs + * Format: \`\${username}/\${projectName}\` + */ + github?: string; + /** + * Exist only in open source jobs + * Means project is dev. tool (like swagger code generator) + */ + isTool?: boolean; + kind: JobKind; + link?: string; + name?: string; + /** + * Exist only in open source jobs + * Format: \`\${orgname}/\${projectName}\` + */ + npm?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectTypeExcludeKeysIdOrId { + description: string; + job: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectTypeExcludeKeysJob { + description: string; + id: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickUserTypeExcludeKeysIdOrId { + password: string; + username: string; +} + +export interface ProjectType { + description: string; + id: string; + job: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export type ProjectUpdateType = OmitIdProjectType; + +export type RefreshData = string; + +export type TestAllOfDc = (FooBarBaz & FooBar) & { + prop?: string; +}; + +export type TestAllOfDc2 = FooBarBaz & { + prop?: string; +}; + +export type TestAnyOfDc = (FooBarBaz | FooBar) & { + prop?: string; +}; + +export type TestOneOfDc = (FooBarBaz | FooBar) & { + prop?: string; +}; + +export type UpdateJobData = JobType; + +export type UpdateProjectData = ProjectType; + +export namespace Auth { + /** + * No description + * @tags Auth + * @name Login + * @request POST:/auth + */ + export namespace Login { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = AuthUserType; + export type RequestHeaders = {}; + export type ResponseBody = LoginData; + } + /** + * No description + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure + */ + export namespace Refresh { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = { + Authorization: string; + }; + export type ResponseBody = RefreshData; + } +} + +export namespace Jobs { + /** + * No description + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure + */ + export namespace AddJob { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = JobUpdateType; + export type RequestHeaders = {}; + export type ResponseBody = AddJobData; + } + /** + * No description + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure + */ + export namespace DeleteJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeleteJobData; + } + /** + * No description + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure + */ + export namespace GetJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetJobData; + } + /** + * No description + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure + */ + export namespace GetJobs { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetJobsData; + } + /** + * No description + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure + */ + export namespace UpdateJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = JobUpdateType; + export type RequestHeaders = {}; + export type ResponseBody = UpdateJobData; + } +} + +export namespace Projects { + /** + * No description + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure + */ + export namespace AddProjects { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ProjectUpdateType; + export type RequestHeaders = {}; + export type ResponseBody = AddProjectsData; + } + /** + * No description + * @tags Projects + * @name DeleteProject + * @request DELETE:/projects/{id} + */ + export namespace DeleteProject { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeleteProjectData; + } + /** + * No description + * @tags Projects + * @name GetProjects + * @request GET:/projects + */ + export namespace GetProjects { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetProjectsData; + } + /** + * No description + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure + */ + export namespace UpdateProject { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectUpdateType; + export type RequestHeaders = {}; + export type ResponseBody = UpdateProjectData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://localhost:8080/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + * @baseUrl http://localhost:8080/api/v1 + */ +export class Api extends HttpClient { + auth = { + /** + * No description + * + * @tags Auth + * @name Login + * @request POST:/auth + */ + login: (data: AuthUserType, params: RequestParams = {}) => + this.request({ + path: \`/auth\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure + */ + refresh: (params: RequestParams = {}) => + this.request({ + path: \`/auth/refresh\`, + method: "POST", + secure: true, + ...params, + }), + }; + jobs = { + /** + * No description + * + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure + */ + addJob: (data: JobUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure + */ + deleteJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure + */ + getJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure + */ + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure + */ + updateJob: (id: string, params: JobUpdateType, requestParams: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "PATCH", + body: params, + secure: true, + type: ContentType.Json, + ...requestParams, + }), + }; + projects = { + /** + * No description + * + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure + */ + addProjects: (data: ProjectUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Projects + * @name DeleteProject + * @request DELETE:/projects/{id} + */ + deleteProject: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags Projects + * @name GetProjects + * @request GET:/projects + */ + getProjects: (params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure + */ + updateProject: (id: string, data: ProjectUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type CreatePetsData = any; + +export type CreatePetsError = Error; + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export type ListPetsData = Pets; + +export type ListPetsError = Error; + +export interface ListPetsParams { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + limit?: number; +} + +export interface Pet { + /** @format int64 */ + id: number; + name: string; + tag?: string; +} + +export type Pets = Pet[]; + +export type ShowPetByIdData = Pet; + +export type ShowPetByIdError = Error; + +export type StringNullable = string | null; + +export namespace Pets { + /** + * No description + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets + */ + export namespace CreatePets { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CreatePetsData; + } + /** + * No description + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets + */ + export namespace ListPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + limit?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ListPetsData; + } + /** + * No description + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} + */ + export namespace ShowPetById { + export type RequestParams = { + /** The id of the pet to retrieve */ + petId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ShowPetByIdData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @baseUrl http://petstore.swagger.io/v1 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets + */ + createPets: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + ...params, + }), + + /** + * No description + * + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets + */ + listPets: (query: ListPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} + */ + showPetById: (petId: string, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${petId}\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type CreatePetsData = any; + +export type CreatePetsError = Error; + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export type ListPetsData = Pets; + +export type ListPetsError = Error; + +export interface ListPetsParams { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + limit?: number; +} + +export interface Pet { + /** @format int64 */ + id: number; + name: string; + tag?: string; +} + +export type Pets = Pet[]; + +export type ShowPetByIdData = Pets; + +export type ShowPetByIdError = Error; + +export namespace Pets { + /** + * No description + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets + */ + export namespace CreatePets { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CreatePetsData; + } + /** + * No description + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets + */ + export namespace ListPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + limit?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ListPetsData; + } + /** + * No description + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} + */ + export namespace ShowPetById { + export type RequestParams = { + /** The id of the pet to retrieve */ + petId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ShowPetByIdData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @baseUrl http://petstore.swagger.io/v1 + */ +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets + */ + createPets: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + ...params, + }), + + /** + * No description + * + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets + */ + listPets: (query: ListPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} + */ + showPetById: (petId: string, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${petId}\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-expanded' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddPetData = Pet; + +export type AddPetError = Error; + +export type DeletePetData = any; + +export type DeletePetError = Error; + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export type FindPetByIdData = Pet; + +export type FindPetByIdError = Error; + +export type FindPetsData = Pet[]; + +export type FindPetsError = Error; + +export interface FindPetsParams { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export namespace Pets { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * @name AddPet + * @request POST:/pets + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = NewPet; + export type RequestHeaders = {}; + export type ResponseBody = AddPetData; + } + /** + * @description deletes a single pet based on the ID supplied + * @name DeletePet + * @request DELETE:/pets/{id} + */ + export namespace DeletePet { + export type RequestParams = { + /** + * ID of pet to delete + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeletePetData; + } + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * @name FindPetById + * @request GET:/pets/{id} + */ + export namespace FindPetById { + export type RequestParams = { + /** + * ID of pet to fetch + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetByIdData; + } + /** + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. + * @name FindPets + * @request GET:/pets + */ + export namespace FindPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification + */ +export class Api extends HttpClient { + pets = { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * + * @name AddPet + * @request POST:/pets + */ + addPet: (data: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description deletes a single pet based on the ID supplied + * + * @name DeletePet + * @request DELETE:/pets/{id} + */ + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * + * @name FindPetById + * @request GET:/pets/{id} + */ + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. + * + * @name FindPets + * @request GET:/pets + */ + findPets: (query: FindPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-expanded' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddPetData = Pet; + +export type AddPetError = Error; + +export type DeletePetData = any; + +export type DeletePetError = Error; + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export type FindPetByIdData = Pet; + +export type FindPetByIdError = Error; + +export type FindPetsData = Pet[]; + +export type FindPetsError = Error; + +export interface FindPetsParams { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; +} + +export interface NewPet { + name: string; + tag?: string; +} + +/** Page«TemplateResponseDto» */ +export interface PageTemplateResponseDto { + content?: any[]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** @format int32 */ + number?: number; + /** @format int32 */ + numberOfElements?: number; + pageable?: any; + /** @format int32 */ + size?: number; + sort?: any; + /** @format int64 */ + totalElements?: number; + /** @format int32 */ + totalPages?: number; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export namespace PathParams { + /** + * No description + * @name PathParamFooBarBazList + * @request GET:/path-params/{path-param}/{foo-bar-baz} + */ + export namespace PathParamFooBarBazList { + export type RequestParams = { + /** foo bar baz */ + fooBarBaz: string; + /** path-param */ + pathParam: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export namespace Pets { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * @name AddPet + * @request POST:/pets + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = NewPet; + export type RequestHeaders = {}; + export type ResponseBody = AddPetData; + } + /** + * @description deletes a single pet based on the ID supplied + * @name DeletePet + * @request DELETE:/pets/{id} + */ + export namespace DeletePet { + export type RequestParams = { + /** + * ID of pet to delete + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeletePetData; + } + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * @name FindPetById + * @request GET:/pets/{id} + */ + export namespace FindPetById { + export type RequestParams = { + /** + * ID of pet to fetch + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetByIdData; + } + /** + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. + * @name FindPets + * @request GET:/pets + */ + export namespace FindPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pathParams = { + /** + * No description + * + * @name PathParamFooBarBazList + * @request GET:/path-params/{path-param}/{foo-bar-baz} + */ + pathParamFooBarBazList: (pathParam: string, fooBarBaz: string, params: RequestParams = {}) => + this.request({ + path: \`/path-params/\${pathParam}/\${fooBarBaz}\`, + method: "GET", + ...params, + }), + }; + pets = { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * + * @name AddPet + * @request POST:/pets + */ + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: pet, + type: ContentType.Json, + ...params, + }), + + /** + * @description deletes a single pet based on the ID supplied + * + * @name DeletePet + * @request DELETE:/pets/{id} + */ + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * + * @name FindPetById + * @request GET:/pets/{id} + */ + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. + * + * @name FindPets + * @request GET:/pets + */ + findPets: (query: FindPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-minimal' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Pet { + /** @format int64 */ + id: number; + multiple?: string | number; + name: string; + tag?: string; +} + +export type PetsListData = Pet[]; + +export namespace Pets { + /** + * @description Returns all pets from the system that the user has access to + * @name PetsList + * @request GET:/pets + */ + export namespace PetsList { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PetsListData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { + /** + * @description Returns all pets from the system that the user has access to + * + * @name PetsList + * @request GET:/pets + */ + petsList: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-simple' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddPetData = Pet; + +export type AddPetError = ErrorModel; + +export type DeletePetData = any; + +export type DeletePetError = ErrorModel; + +export interface ErrorModel { + /** @format int32 */ + code: number; + message: string; +} + +export type FindPetByIdData = Pet; + +export type FindPetByIdError = ErrorModel; + +export type FindPetsData = Pet[]; + +export type FindPetsError = ErrorModel; + +export interface FindPetsParams { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +/** Description of Test type */ +export type Test = NewPet; + +export interface Test2 { + /** Field description */ + data?: NewPet; +} + +export namespace Pets { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * @name AddPet + * @request POST:/pets + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = NewPet; + export type RequestHeaders = {}; + export type ResponseBody = AddPetData; + } + /** + * @description deletes a single pet based on the ID supplied + * @name DeletePet + * @request DELETE:/pets/{id} + */ + export namespace DeletePet { + export type RequestParams = { + /** + * ID of pet to delete + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeletePetData; + } + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * @name FindPetById + * @request GET:/pets/{id} + */ + export namespace FindPetById { + export type RequestParams = { + /** + * ID of pet to fetch + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetByIdData; + } + /** + * @description Returns all pets from the system that the user has access to + * @name FindPets + * @request GET:/pets + */ + export namespace FindPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * + * @name AddPet + * @request POST:/pets + */ + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: pet, + type: ContentType.Json, + ...params, + }), + + /** + * @description deletes a single pet based on the ID supplied + * + * @name DeletePet + * @request DELETE:/pets/{id} + */ + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * + * @name FindPetById + * @request GET:/pets/{id} + */ + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns all pets from the system that the user has access to + * + * @name FindPets + * @request GET:/pets + */ + findPets: (query: FindPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-swagger-io' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface ApiResponse { + /** @format int32 */ + code?: number; + message?: string; + type?: string; +} + +export interface Category { + /** @format int64 */ + id?: number; + name?: string; +} + +export type FindPetsByStatusData = Pet[]; + +export interface FindPetsByStatusParams { + /** Status values that need to be considered for filter */ + status: StatusEnum[]; +} + +/** @default "available" */ +export enum FindPetsByStatusParams1StatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +export type FindPetsByTagsData = Pet[]; + +export interface FindPetsByTagsParams { + /** Tags to filter by */ + tags: string[]; +} + +export type GetInventoryData = Record; + +export type GetOrderByIdData = Order; + +export type GetPetByIdData = Pet; + +export type GetUserByNameData = User; + +export type LoginUserData = string; + +export interface LoginUserParams { + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; +} + +export interface Order { + complete?: boolean; + /** @format int64 */ + id?: number; + /** @format int64 */ + petId?: number; + /** @format int32 */ + quantity?: number; + /** @format date-time */ + shipDate?: string; + /** Order Status */ + status?: OrderStatusEnum; +} + +/** Order Status */ +export enum OrderStatusEnum { + Placed = "placed", + Approved = "approved", + Delivered = "delivered", +} + +export interface Pet { + category?: Category; + /** @format int64 */ + id?: number; + /** @example "doggie" */ + name: string; + photoUrls: string[]; + /** pet status in the store */ + status?: PetStatusEnum; + tags?: Tag[]; +} + +/** pet status in the store */ +export enum PetStatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +export type PlaceOrderData = Order; + +/** @default "available" */ +export enum StatusEnum { + Available = "available", + Pending = "pending", + Sold = "sold", +} + +export interface Tag { + /** @format int64 */ + id?: number; + name?: string; +} + +export interface UpdatePetWithFormPayload { + /** Updated name of the pet */ + name?: string; + /** Updated status of the pet */ + status?: string; +} + +export type UploadFileData = ApiResponse; + +export interface UploadFilePayload { + /** Additional data to pass to server */ + additionalMetadata?: string; + /** file to upload */ + file?: File; +} + +export interface User { + email?: string; + firstName?: string; + /** @format int64 */ + id?: number; + lastName?: string; + password?: string; + phone?: string; + /** + * User Status + * @format int32 + */ + userStatus?: number; + username?: string; +} + +export namespace Pet { + /** + * No description + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Pet; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure + */ + export namespace DeletePet { + export type RequestParams = { + /** + * Pet id to delete + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = { + api_key?: string; + }; + export type ResponseBody = any; + } + /** + * @description Multiple status values can be provided with comma separated strings + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure + */ + export namespace FindPetsByStatus { + export type RequestParams = {}; + export type RequestQuery = { + /** Status values that need to be considered for filter */ + status: FindPetsByStatusParams1StatusEnum[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsByStatusData; + } + /** + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure + */ + export namespace FindPetsByTags { + export type RequestParams = {}; + export type RequestQuery = { + /** Tags to filter by */ + tags: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsByTagsData; + } + /** + * @description Returns a single pet + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure + */ + export namespace GetPetById { + export type RequestParams = { + /** + * ID of pet to return + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPetByIdData; + } + /** + * No description + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure + */ + export namespace UpdatePet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Pet; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure + */ + export namespace UpdatePetWithForm { + export type RequestParams = { + /** + * ID of pet that needs to be updated + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = UpdatePetWithFormPayload; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure + */ + export namespace UploadFile { + export type RequestParams = { + /** + * ID of pet to update + * @format int64 + */ + petId: number; + }; + export type RequestQuery = {}; + export type RequestBody = UploadFilePayload; + export type RequestHeaders = {}; + export type ResponseBody = UploadFileData; + } +} + +export namespace Store { + /** + * @description For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} + */ + export namespace DeleteOrder { + export type RequestParams = { + /** + * ID of the order that needs to be deleted + * @format int64 + * @min 1 + */ + orderId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description Returns a map of status codes to quantities + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure + */ + export namespace GetInventory { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetInventoryData; + } + /** + * @description For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} + */ + export namespace GetOrderById { + export type RequestParams = { + /** + * ID of pet that needs to be fetched + * @format int64 + * @min 1 + * @max 10 + */ + orderId: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetOrderByIdData; + } + /** + * No description + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order + */ + export namespace PlaceOrder { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = Order; + export type RequestHeaders = {}; + export type ResponseBody = PlaceOrderData; + } +} + +export namespace User { + /** + * @description This can only be done by the logged in user. + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + export namespace CreateUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + export namespace CreateUsersWithArrayInput { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User[]; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + export namespace CreateUsersWithListInput { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = User[]; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description This can only be done by the logged in user. + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + export namespace DeleteUser { + export type RequestParams = { + /** The name that needs to be deleted */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * No description + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + export namespace GetUserByName { + export type RequestParams = { + /** The name that needs to be fetched. Use user1 for testing. */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetUserByNameData; + } + /** + * No description + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + export namespace LoginUser { + export type RequestParams = {}; + export type RequestQuery = { + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LoginUserData; + } + /** + * No description + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout + */ + export namespace LogoutUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = any; + } + /** + * @description This can only be done by the logged in user. + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} + */ + export namespace UpdateUser { + export type RequestParams = { + /** name that need to be updated */ + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = User; + export type RequestHeaders = {}; + export type ResponseBody = any; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://petstore.swagger.io/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.3 + * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl https://petstore.swagger.io/v2 + * @externalDocs http://swagger.io + * @contact + * + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. + */ +export class Api extends HttpClient { + pet = { + /** + * No description + * + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure + */ + addPet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "POST", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure + */ + deletePet: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * @description Multiple status values can be provided with comma separated strings + * + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure + */ + findPetsByStatus: (query: FindPetsByStatusParams, params: RequestParams = {}) => + this.request({ + path: \`/pet/findByStatus\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure + */ + findPetsByTags: (query: FindPetsByTagsParams, params: RequestParams = {}) => + this.request({ + path: \`/pet/findByTags\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Returns a single pet + * + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure + */ + getPetById: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure + */ + updatePet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "PUT", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure + */ + updatePetWithForm: (petId: number, data: UpdatePetWithFormPayload, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + ...params, + }), + + /** + * No description + * + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure + */ + uploadFile: (petId: number, data: UploadFilePayload, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}/uploadImage\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + ...params, + }), + }; + store = { + /** + * @description For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors + * + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} + */ + deleteOrder: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a map of status codes to quantities + * + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure + */ + getInventory: (params: RequestParams = {}) => + this.request({ + path: \`/store/inventory\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions + * + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} + */ + getOrderById: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order + */ + placeOrder: (body: Order, params: RequestParams = {}) => + this.request({ + path: \`/store/order\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + }; + user = { + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + createUser: (body: User, params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithArray\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + createUsersWithListInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithList\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + deleteUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + loginUser: (query: LoginUserParams, params: RequestParams = {}) => + this.request({ + path: \`/user/login\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout + */ + logoutUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/logout\`, + method: "GET", + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} + */ + updateUser: (username: string, body: User, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "PUT", + body: body, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'petstore-with-external-docs' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddPetData = Pet; + +export type AddPetError = ErrorModel; + +export type DeletePetData = any; + +export type DeletePetError = ErrorModel; + +export interface ErrorModel { + /** @format int32 */ + code: number; + message: string; +} + +export type FindPetByIdData = Pet; + +export type FindPetByIdError = ErrorModel; + +export type FindPetsData = Pet[]; + +export type FindPetsError = ErrorModel; + +export interface FindPetsParams { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export namespace Pets { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * @name AddPet + * @request POST:/pets + */ + export namespace AddPet { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = NewPet; + export type RequestHeaders = {}; + export type ResponseBody = AddPetData; + } + /** + * @description deletes a single pet based on the ID supplied + * @name DeletePet + * @request DELETE:/pets/{id} + */ + export namespace DeletePet { + export type RequestParams = { + /** + * ID of pet to delete + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeletePetData; + } + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * @name FindPetById + * @request GET:/pets/{id} + */ + export namespace FindPetById { + export type RequestParams = { + /** + * ID of pet to fetch + * @format int64 + */ + id: number; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetByIdData; + } + /** + * @description Returns all pets from the system that the user has access to + * @name FindPets + * @request GET:/pets + */ + export namespace FindPets { + export type RequestParams = {}; + export type RequestQuery = { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = FindPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @externalDocs https://swagger.io/about + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { + /** + * @description Creates a new pet in the store. Duplicates are allowed + * + * @name AddPet + * @request POST:/pets + */ + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: pet, + type: ContentType.Json, + ...params, + }), + + /** + * @description deletes a single pet based on the ID supplied + * + * @name DeletePet + * @request DELETE:/pets/{id} + */ + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns a user based on a single ID, if the user does not have access to the pet + * + * @name FindPetById + * @request GET:/pets/{id} + */ + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "GET", + ...params, + }), + + /** + * @description Returns all pets from the system that the user has access to + * + * @name FindPets + * @request GET:/pets + */ + findPets: (query: FindPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'query-path-param' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type ListPetsData = object; + +export interface ListPetsParams { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + query?: number; + /** + * How many items to return at one time (max 100) + * @format int32 + */ + queryParam?: number; +} + +export namespace Foobarbaz { + /** + * No description + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/foobarbaz/{query} + */ + export namespace ListPets { + export type RequestParams = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + query?: number; + }; + export type RequestQuery = { + /** + * How many items to return at one time (max 100) + * @format int32 + */ + queryParam?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ListPetsData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://unknown.io/v666"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Query Path Param + * @version 1.0.0 + * @license MIT + * @baseUrl http://unknown.io/v666 + */ +export class Api extends HttpClient { + foobarbaz = { + /** + * No description + * + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/foobarbaz/{query} + */ + listPets: ({ query, ...queryParams }: ListPetsParams, params: RequestParams = {}) => + this.request({ + path: \`/foobarbaz/\${query}\`, + method: "GET", + query: queryParams, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'recursive-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** RECURSIVE */ +export interface RecursiveObject { + /** RECURSIVE */ + bar?: RecursiveObject; + /** + * Unique identifier of the GitHub app + * @example 37 + */ + id?: number; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'responses' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface GetDataData { + data?: string; +} + +export namespace Api { + /** + * No description + * @name GetData + * @request GET:/api + */ + export namespace GetData { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetDataData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Title + * @version latest + * + * Description + */ +export class Api extends HttpClient { + api = { + /** + * No description + * + * @name GetData + * @request GET:/api + */ + getData: (params: RequestParams = {}) => + this.request({ + path: \`/api\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'swaggerhub-template' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type ExampleListData = any; + +export type PingListData = any; + +export namespace Example { + /** + * @description This is an example operation to show how security is applied to the call. + * @name ExampleList + * @summary Server example operation + * @request GET:/example + * @secure + */ + export namespace ExampleList { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ExampleListData; + } +} + +export namespace Ping { + /** + * @description This operation shows how to override the global security defined above, as we want to open it up for all users. + * @name PingList + * @summary Server heartbeat operation + * @request GET:/ping + */ + export namespace PingList { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PingListData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Sample Application Flow OAuth2 Project + * @version 1.0.0 + * @baseUrl https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0 + * + * This is an example of using OAuth2 Application Flow in a specification to describe security to your API. + */ +export class Api extends HttpClient { + example = { + /** + * @description This is an example operation to show how security is applied to the call. + * + * @name ExampleList + * @summary Server example operation + * @request GET:/example + * @secure + */ + exampleList: (params: RequestParams = {}) => + this.request({ + path: \`/example\`, + method: "GET", + secure: true, + ...params, + }), + }; + ping = { + /** + * @description This operation shows how to override the global security defined above, as we want to open it up for all users. + * + * @name PingList + * @summary Server heartbeat operation + * @request GET:/ping + */ + pingList: (params: RequestParams = {}) => + this.request({ + path: \`/ping\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`extended > 'tsoa-odd-types-3' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AddJobData = string; + +export type AddJobResult = string; + +export type AddProjectsData = string; + +export type AddUserData = User; + +export interface AuthUser { + password: string; + username: string; +} + +export type DeleteJobData = any; + +export type DeleteUserData = any; + +export type GetJobData = Job; + +export type GetJobsData = Job[]; + +export type GetJobsResult = Job[]; + +export interface GetProfileBioDTO { + /** @format int32 */ + candidateId?: number; + cityName?: string | null; +} + +export type GetProjectsData = Project[]; + +export type GetUsersData = User[]; + +export interface Job { + address?: string | null; + github?: string | null; + id: string; + isTool?: boolean | null; + kind: Kind; + link?: string | null; + name?: string | null; + npm?: string | null; +} + +export type JobUpdate = OmitJobId | PickJobGithub | Record; + +export enum Kind { + COMPANY = "COMPANY", + PERSONAL = "PERSONAL", + FREELANCE = "FREELANCE", + OPEN_SOURCE = "OPEN_SOURCE", +} + +export type LoginData = string; + +export type OmitJobId = PickJobExcludeKeysId; + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobExcludeKeysId { + address?: string; + github?: string; + isTool?: boolean; + kind: Kind; + link?: string; + name?: string; + npm?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobGithub { + github?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectExcludeKeysIdOrjob { + description: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface Project { + description: string; + id: string; + job: Job; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface ProjectUpdate { + description: string; + job: string; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export type RefreshData = string; + +export type UpdateJobData = UpdatedJob; + +export type UpdateProjectData = UpdatedProject; + +export type UpdateUserData = User; + +export type UpdatedJob = Job; + +export interface UpdatedProject { + description: string; + id: string; + job: string; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface User { + id: string; + username: string; +} + +export interface UserUpdate { + id?: string | null; + username?: string | null; +} + +export namespace Auth { + /** + * No description + * @tags Auth + * @name Login + * @request POST:/auth + */ + export namespace Login { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = AuthUser; + export type RequestHeaders = {}; + export type ResponseBody = LoginData; + } + /** + * No description + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure + */ + export namespace Refresh { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = { + Authorization: string; + }; + export type ResponseBody = RefreshData; + } +} + +export namespace Jobs { + /** + * No description + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure + */ + export namespace AddJob { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = PickJobGithub; + export type RequestHeaders = {}; + export type ResponseBody = AddJobData; + } + /** + * No description + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure + */ + export namespace DeleteJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeleteJobData; + } + /** + * No description + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure + */ + export namespace GetJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetJobData; + } + /** + * No description + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure + */ + export namespace GetJobs { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetJobsData; + } + /** + * No description + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure + */ + export namespace UpdateJob { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = JobUpdate; + export type RequestHeaders = {}; + export type ResponseBody = UpdateJobData; + } +} + +export namespace XRoute { + /** + * No description + * @tags Jobs + * @name AddJob + * @request POST:x-route + * @secure + */ + export namespace AddJob { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = PickJobGithub; + export type RequestHeaders = {}; + export type ResponseBody = AddJobResult; + } + /** + * No description + * @tags Jobs + * @name GetJobs + * @request GET:x-route + * @secure + */ + export namespace GetJobs { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetJobsResult; + } +} + +export namespace Projects { + /** + * No description + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure + */ + export namespace AddProjects { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = ProjectUpdate; + export type RequestHeaders = {}; + export type ResponseBody = AddProjectsData; + } + /** + * No description + * @tags Projects + * @name GetProjects + * @request GET:/projects + */ + export namespace GetProjects { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetProjectsData; + } + /** + * No description + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure + */ + export namespace UpdateProject { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = ProjectUpdate; + export type RequestHeaders = {}; + export type ResponseBody = UpdateProjectData; + } +} + +export namespace Users { + /** + * No description + * @tags Users + * @name AddUser + * @request POST:/users + * @secure + */ + export namespace AddUser { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = AuthUser; + export type RequestHeaders = {}; + export type ResponseBody = AddUserData; + } + /** + * No description + * @tags Users + * @name DeleteUser + * @request DELETE:/users/{id} + * @secure + */ + export namespace DeleteUser { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = DeleteUserData; + } + /** + * No description + * @tags Users + * @name GetUsers + * @request GET:/users + * @secure + */ + export namespace GetUsers { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetUsersData; + } + /** + * No description + * @tags Users + * @name UpdateUser + * @request PATCH:/users/{id} + * @secure + */ + export namespace UpdateUser { + export type RequestParams = { + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = UserUpdate; + export type RequestHeaders = {}; + export type ResponseBody = UpdateUserData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://localhost:8080/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + * @baseUrl http://localhost:8080/api/v1 + */ +export class Api extends HttpClient { + auth = { + /** + * No description + * + * @tags Auth + * @name Login + * @request POST:/auth + */ + login: (data?: AuthUser, params: RequestParams = {}) => + this.request({ + path: \`/auth\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure + */ + refresh: (params: RequestParams = {}) => + this.request({ + path: \`/auth/refresh\`, + method: "POST", + secure: true, + ...params, + }), + }; + jobs = { + /** + * No description + * + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure + */ + addJob: (data: PickJobGithub, params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure + */ + deleteJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure + */ + getJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure + */ + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure + */ + updateJob: (id: string, data: JobUpdate, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + }; + xRoute = { + /** + * No description + * + * @tags Jobs + * @name AddJob + * @request POST:x-route + * @secure + */ + addJob: (data: PickJobGithub, params: RequestParams = {}) => + this.request({ + path: \`x-route\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Jobs + * @name GetJobs + * @request GET:x-route + * @secure + */ + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`x-route\`, + method: "GET", + secure: true, + ...params, + }), + }; + projects = { + /** + * No description + * + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure + */ + addProjects: (data: ProjectUpdate, params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Projects + * @name GetProjects + * @request GET:/projects + */ + getProjects: (params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure + */ + updateProject: (id: string, data: ProjectUpdate, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + }; + users = { + /** + * No description + * + * @tags Users + * @name AddUser + * @request POST:/users + * @secure + */ + addUser: (data: AuthUser, params: RequestParams = {}) => + this.request({ + path: \`/users\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Users + * @name DeleteUser + * @request DELETE:/users/{id} + * @secure + */ + deleteUser: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Users + * @name GetUsers + * @request GET:/users + * @secure + */ + getUsers: (params: RequestParams = {}) => + this.request({ + path: \`/users\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags Users + * @name UpdateUser + * @request PATCH:/users/{id} + * @secure + */ + updateUser: (id: string, data: UserUpdate, params: RequestParams = {}) => + this.request({ + path: \`/users/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'uber' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Activities { + /** + * Total number of items available. + * @format int32 + */ + count?: number; + history?: Activity[]; + /** + * Number of items to retrieve (100 max). + * @format int32 + */ + limit?: number; + /** + * Position in pagination. + * @format int32 + */ + offset?: number; +} + +export interface Activity { + /** Unique identifier for the activity */ + uuid?: string; +} + +export interface Error { + /** @format int32 */ + code?: number; + fields?: string; + message?: string; +} + +export type GetMeData = Profile; + +export type GetMeError = Error; + +export type HistoryListData = Activities; + +export type HistoryListError = Error; + +export interface HistoryListParams { + /** + * Number of items to retrieve. Default is 5, maximum is 100. + * @format int32 + */ + limit?: number; + /** + * Offset the list of returned results by this amount. Default is zero. + * @format int32 + */ + offset?: number; +} + +export interface PriceEstimate { + /** [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code. */ + currency_code?: string; + /** Display name of product. */ + display_name?: string; + /** Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or "Metered" for TAXI. */ + estimate?: string; + /** Upper bound of the estimated price. */ + high_estimate?: number; + /** Lower bound of the estimated price. */ + low_estimate?: number; + /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles */ + product_id?: string; + /** Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier. */ + surge_multiplier?: number; +} + +export type PriceListData = PriceEstimate[]; + +export type PriceListError = Error; + +export interface PriceListParams { + /** + * Latitude component of end location. + * @format double + */ + end_latitude?: number; + /** + * Longitude component of end location. + * @format double + */ + end_longitude: number; + /** + * Latitude component of start location. + * @format double + */ + start_latitude: number; + /** + * Longitude component of start location. + * @format double + */ + start_longitude: number; +} + +export interface Product { + /** Capacity of product. For example, 4 people. */ + capacity?: number; + /** Description of product. */ + description?: string; + /** Display name of product. */ + display_name?: string; + /** Image URL representing the product. */ + image?: string; + /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles. */ + product_id?: string; +} + +export interface ProductList { + /** Contains the list of products */ + products?: Product[]; +} + +export type ProductsListData = Product[]; + +export type ProductsListError = Error; + +export interface ProductsListParams { + /** + * Latitude component of location. + * @format double + */ + latitude: number; + /** + * Longitude component of location. + * @format double + */ + longitude: number; +} + +export interface Profile { + /** Email address of the Uber user */ + email?: string; + /** First name of the Uber user. */ + first_name?: string; + /** Last name of the Uber user. */ + last_name?: string; + /** Image URL of the Uber user. */ + picture?: string; + /** Promo code of the Uber user. */ + promo_code?: string; +} + +export type TimeListData = Product[]; + +export type TimeListError = Error; + +export interface TimeListParams { + /** + * Unique customer identifier to be used for experience customization. + * @format uuid + */ + customer_uuid?: string; + /** Unique identifier representing a specific product for a given latitude & longitude. */ + product_id?: string; + /** + * Latitude component of start location. + * @format double + */ + start_latitude: number; + /** + * Longitude component of start location. + * @format double + */ + start_longitude: number; +} + +export namespace Products { + /** + * @description The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @tags Products + * @name ProductsList + * @summary Product Types + * @request GET:/products + * @secure + */ + export namespace ProductsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Latitude component of location. + * @format double + */ + latitude: number; + /** + * Longitude component of location. + * @format double + */ + longitude: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ProductsListData; + } +} + +export namespace Estimates { + /** + * @description The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @tags Estimates + * @name PriceList + * @summary Price Estimates + * @request GET:/estimates/price + */ + export namespace PriceList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Latitude component of end location. + * @format double + */ + end_latitude?: number; + /** + * Longitude component of end location. + * @format double + */ + end_longitude: number; + /** + * Latitude component of start location. + * @format double + */ + start_latitude: number; + /** + * Longitude component of start location. + * @format double + */ + start_longitude: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PriceListData; + } + /** + * @description The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @tags Estimates + * @name TimeList + * @summary Time Estimates + * @request GET:/estimates/time + */ + export namespace TimeList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Unique customer identifier to be used for experience customization. + * @format uuid + */ + customer_uuid?: string; + /** Unique identifier representing a specific product for a given latitude & longitude. */ + product_id?: string; + /** + * Latitude component of start location. + * @format double + */ + start_latitude: number; + /** + * Longitude component of start location. + * @format double + */ + start_longitude: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TimeListData; + } +} + +export namespace Me { + /** + * @description The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @tags User + * @name GetMe + * @summary User Profile + * @request GET:/me + */ + export namespace GetMe { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetMeData; + } +} + +export namespace History { + /** + * @description The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @tags User + * @name HistoryList + * @summary User Activity + * @request GET:/history + */ + export namespace HistoryList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * Number of items to retrieve. Default is 5, maximum is 100. + * @format int32 + */ + limit?: number; + /** + * Offset the list of returned results by this amount. Default is zero. + * @format int32 + */ + offset?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = HistoryListData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.uber.com/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Uber API + * @version 1.0.0 + * @baseUrl https://api.uber.com/v1 + * + * Move your app forward with the Uber API + */ +export class Api extends HttpClient { + products = { + /** + * @description The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * + * @tags Products + * @name ProductsList + * @summary Product Types + * @request GET:/products + * @secure + */ + productsList: (query: ProductsListParams, params: RequestParams = {}) => + this.request({ + path: \`/products\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + estimates = { + /** + * @description The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * + * @tags Estimates + * @name PriceList + * @summary Price Estimates + * @request GET:/estimates/price + */ + priceList: (query: PriceListParams, params: RequestParams = {}) => + this.request({ + path: \`/estimates/price\`, + method: "GET", + query: query, + ...params, + }), + + /** + * @description The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * + * @tags Estimates + * @name TimeList + * @summary Time Estimates + * @request GET:/estimates/time + */ + timeList: (query: TimeListParams, params: RequestParams = {}) => + this.request({ + path: \`/estimates/time\`, + method: "GET", + query: query, + ...params, + }), + }; + me = { + /** + * @description The User Profile endpoint returns information about the Uber user that has authorized with the application. + * + * @tags User + * @name GetMe + * @summary User Profile + * @request GET:/me + */ + getMe: (params: RequestParams = {}) => + this.request({ + path: \`/me\`, + method: "GET", + ...params, + }), + }; + history = { + /** + * @description The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * + * @tags User + * @name HistoryList + * @summary User Activity + * @request GET:/history + */ + historyList: (query: HistoryListParams, params: RequestParams = {}) => + this.request({ + path: \`/history\`, + method: "GET", + query: query, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'up-banking' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** Provides information about an Up bank account. */ +export interface AccountResource { + attributes: { + /** The bank account type of this account. */ + accountType: AccountTypeEnum; + /** + * The available balance of the account, taking into account any amounts + * that are currently on hold. + */ + balance: MoneyObject; + /** + * The date-time at which this account was first opened. + * @format date-time + */ + createdAt: string; + /** The name associated with the account in the Up application. */ + displayName: string; + }; + /** The unique identifier for this account. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + transactions: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`accounts\` */ + type: string; +} + +/** + * Specifies the type of bank account. Currently returned values are \`SAVER\` + * and \`TRANSACTIONAL\`. + */ +export enum AccountTypeEnum { + SAVER = "SAVER", + TRANSACTIONAL = "TRANSACTIONAL", +} + +export type AccountsDetailData = GetAccountResponse; + +export type AccountsListData = ListAccountsResponse; + +export interface AccountsListParams { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; +} + +/** + * Provides information about an instant reimbursement in the form of + * cashback. + */ +export interface CashbackObject { + /** The total amount of cashback paid, represented as a positive value. */ + amount: MoneyObject; + /** A brief description of why this cashback was paid. */ + description: string; +} + +export type CategoriesDetailData = GetCategoryResponse; + +export type CategoriesListData = ListCategoriesResponse; + +export interface CategoriesListParams { + /** + * The unique identifier of a parent category for which to + * return only its children. Providing an invalid category + * identifier results in a \`404\` response. + * @example "good-life" + */ + "filter[parent]"?: string; +} + +/** Provides information about a category and its ancestry. */ +export interface CategoryResource { + attributes: { + /** The name of this category as seen in the Up application. */ + name: string; + }; + /** + * The unique identifier for this category. This is a human-readable but + * URL-safe value. + */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + children: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + }[]; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + parent: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`categories\` */ + type: string; +} + +/** + * Request to create a new webhook. This currently only requires a \`url\` + * attribute. + */ +export interface CreateWebhookRequest { + /** The webhook resource to create. */ + data: WebhookInputResource; +} + +/** Successful response after creating a webhook. */ +export interface CreateWebhookResponse { + /** The webhook that was created. */ + data: WebhookResource; +} + +/** Provides information about an error processing a request. */ +export interface ErrorObject { + /** + * A detailed description of this error. This should be considered unique + * to individual occurrences of an error and subject to change. It is + * useful for debugging purposes. + */ + detail: string; + /** + * If applicable, location in the request that this error relates to. This + * may be a parameter in the query string, or a an attribute in the + * request body. + */ + source?: { + /** + * If this error relates to a query parameter, the name of the + * parameter. + */ + parameter?: string; + /** + * If this error relates to an attribute in the request body, a + * rfc-6901 JSON pointer to the attribute. + */ + pointer?: string; + }; + /** + * The HTTP status code associated with this error. This can also be + * obtained from the response headers. The status indicates the broad type + * of error according to HTTP semantics. + */ + status: string; + /** + * A short description of this error. This should be stable across + * multiple occurrences of this type of error and typically expands on the + * reason for the status code. + */ + title: string; +} + +/** Generic error response that returns one or more errors. */ +export interface ErrorResponse { + /** The list of errors returned in this response. */ + errors: ErrorObject[]; +} + +/** Successful response to get a single account. */ +export interface GetAccountResponse { + /** The account returned in this response. */ + data: AccountResource; +} + +/** Successful response to get a single category and its ancestry. */ +export interface GetCategoryResponse { + /** The category returned in this response. */ + data: CategoryResource; +} + +/** Successful response to get a single transaction. */ +export interface GetTransactionResponse { + /** The transaction returned in this response. */ + data: TransactionResource; +} + +/** Successful response to get a single webhook. */ +export interface GetWebhookResponse { + /** The webhook returned in this response. */ + data: WebhookResource; +} + +/** + * Provides information about the amount at which a transaction was in the + * \`HELD\` status. + */ +export interface HoldInfoObject { + /** + * The amount of this transaction while in the \`HELD\` status, in + * Australian dollars. + */ + amount: MoneyObject; + /** + * The foreign currency amount of this transaction while in the \`HELD\` + * status. This field will be \`null\` for domestic transactions. The amount + * was converted to the AUD amount reflected in the \`amount\` field. + */ + foreignAmount: MoneyObject | null; +} + +/** + * Successful response to get all accounts. This returns a paginated list of + * accounts, which can be scrolled by following the \`prev\` and \`next\` links + * if present. + */ +export interface ListAccountsResponse { + /** The list of accounts returned in this response. */ + data: AccountResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all categories and their ancestry. The + * returned list is not paginated. + */ +export interface ListCategoriesResponse { + /** The list of categories returned in this response. */ + data: CategoryResource[]; +} + +/** + * Successful response to get all tags. This returns a paginated list of + * tags, which can be scrolled by following the \`prev\` and \`next\` links if + * present. + */ +export interface ListTagsResponse { + /** The list of tags returned in this response. */ + data: TagResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all transactions. This returns a paginated + * list of transactions, which can be scrolled by following the \`prev\` and + * \`next\` links if present. + */ +export interface ListTransactionsResponse { + /** The list of transactions returned in this response. */ + data: TransactionResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all delivery logs for a webhook. This returns + * a paginated list of delivery logs, which can be scrolled by following the + * \`next\` and \`prev\` links if present. + */ +export interface ListWebhookDeliveryLogsResponse { + /** The list of delivery logs returned in this response. */ + data: WebhookDeliveryLogResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all webhooks. This returns a paginated list of + * webhooks, which can be scrolled by following the \`prev\` and \`next\` links + * if present. + */ +export interface ListWebhooksResponse { + /** The list of webhooks returned in this response. */ + data: WebhookResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +export type LogsDetailData = ListWebhookDeliveryLogsResponse; + +export interface LogsDetailParams { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + /** + * The unique identifier for the webhook. + * @example "49733526-b90d-436a-8a75-9715a1d7cc5b" + */ + webhookId: string; +} + +/** Provides information about a value of money. */ +export interface MoneyObject { + /** The ISO 4217 currency code. */ + currencyCode: string; + /** + * The amount of money, formatted as a string in the relevant currency. + * For example, for an Australian dollar value of $10.56, this field will + * be \`"10.56"\`. The currency symbol is not included in the string. + */ + value: string; + /** + * The amount of money in the smallest denomination for the currency, as a + * 64-bit integer. For example, for an Australian dollar value of $10.56, + * this field will be \`1056\`. + */ + valueInBaseUnits: number; +} + +export type PingCreateData = WebhookEventCallback; + +export type PingListData = PingResponse; + +export type PingListError = ErrorResponse; + +/** Basic ping response to verify authentication. */ +export interface PingResponse { + meta: { + /** The unique identifier of the authenticated customer. */ + id: string; + /** A cute emoji that represents the response status. */ + statusEmoji: string; + }; +} + +export type RelationshipsTagsCreateData = any; + +export type RelationshipsTagsDeleteData = any; + +/** + * Provides information about how a Round Up was applied, such as whether or + * not a boost was included in the Round Up. + */ +export interface RoundUpObject { + /** + * The total amount of this Round Up, including any boosts, represented as + * a negative value. + */ + amount: MoneyObject; + /** + * The portion of the Round Up \`amount\` owing to boosted Round Ups, + * represented as a negative value. If no boost was added to the Round Up + * this field will be \`null\`. + */ + boostPortion: MoneyObject | null; +} + +/** Bla bla bla foo bar baz */ +export enum SomeEnumName { + Foo = "Foo", + Bar = "Bar", + Baz = "Baz", + Bad = "Bad", +} + +/** Uniquely identifies a single tag in the API. */ +export interface TagInputResourceIdentifier { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + /** The type of this resource: \`tags\` */ + type: string; +} + +/** Provides information about a tag. */ +export interface TagResource { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + relationships: { + transactions: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`tags\` */ + type: string; +} + +export type TagsListData = ListTagsResponse; + +export interface TagsListParams { + /** + * The number of records to return in each page. + * @example 50 + */ + "page[size]"?: number; +} + +export interface TransactionResource { + attributes: { + /** + * The amount of this transaction in Australian dollars. For + * transactions that were once \`HELD\` but are now \`SETTLED\`, refer to + * the \`holdInfo\` field for the original \`amount\` the transaction was + * \`HELD\` at. + */ + amount: MoneyObject; + /** + * If all or part of this transaction was instantly reimbursed in the + * form of cashback, details of the reimbursement. + */ + cashback: CashbackObject | null; + /** + * The date-time at which this transaction was first encountered. + * @format date-time + */ + createdAt: string; + /** + * A short description for this transaction. Usually the merchant name + * for purchases. + */ + description: string; + /** + * The foreign currency amount of this transaction. This field will be + * \`null\` for domestic transactions. The amount was converted to the AUD + * amount reflected in the \`amount\` of this transaction. Refer to the + * \`holdInfo\` field for the original \`foreignAmount\` the transaction was + * \`HELD\` at. + */ + foreignAmount: MoneyObject | null; + /** + * If this transaction is currently in the \`HELD\` status, or was ever in + * the \`HELD\` status, the \`amount\` and \`foreignAmount\` of the + * transaction while \`HELD\`. + */ + holdInfo: HoldInfoObject | null; + /** + * Attached message for this transaction, such as a payment message, or a + * transfer note. + */ + message: string | null; + /** + * The original, unprocessed text of the transaction. This is often not + * a perfect indicator of the actual merchant, but it is useful for + * reconciliation purposes in some cases. + */ + rawText: string | null; + /** + * Details of how this transaction was rounded-up. If no Round Up was + * applied this field will be \`null\`. + */ + roundUp: RoundUpObject | null; + /** + * The date-time at which this transaction settled. This field will be + * \`null\` for transactions that are currently in the \`HELD\` status. + * @format date-time + */ + settledAt: string | null; + /** + * The current processing status of this transaction, according to + * whether or not this transaction has settled or is still held. + */ + status: TransactionStatusEnum; + }; + /** The unique identifier for this transaction. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + account: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`accounts\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + category: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + parentCategory: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + tags: { + data: { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + /** The type of this resource: \`tags\` */ + type: string; + }[]; + links?: { + /** + * The link to retrieve or modify linkage between this resources and the + * related resource(s) in this relationship. + */ + self: string; + }; + }; + }; + /** The type of this resource: \`transactions\` */ + type: string; +} + +/** + * Specifies which stage of processing a transaction is currently at. + * Currently returned values are \`HELD\` and \`SETTLED\`. When a transaction is + * held, its account’s \`availableBalance\` is affected. When a transaction is + * settled, its account’s \`currentBalance\` is affected. + */ +export enum TransactionStatusEnum { + HELD = "HELD", + SETTLED = "SETTLED", +} + +export type TransactionsDetailData = GetTransactionResponse; + +export interface TransactionsDetailParams1 { + /** + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" + */ + "filter[category]"?: string; + /** + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" + */ + "filter[since]"?: string; + /** + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" + */ + "filter[status]"?: TransactionStatusEnum; + /** + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" + */ + "filter[tag]"?: string; + /** + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" + */ + "filter[until]"?: string; + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + /** + * The unique identifier for the account. + * @example "86150b64-feaa-4186-a7e4-e84eae764602" + */ + accountId: string; +} + +export type TransactionsDetailResult = ListTransactionsResponse; + +export type TransactionsListData = ListTransactionsResponse; + +export interface TransactionsListParams { + /** + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" + */ + "filter[category]"?: string; + /** + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" + */ + "filter[since]"?: string; + /** + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" + */ + "filter[status]"?: TransactionStatusEnum; + /** + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" + */ + "filter[tag]"?: string; + /** + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" + */ + "filter[until]"?: string; + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + /** Blablabla bla */ + someEnumName?: SomeEnumName; +} + +/** Request to add or remove tags associated with a transaction. */ +export interface UpdateTransactionTagsRequest { + /** The tags to add to or remove from the transaction. */ + data: TagInputResourceIdentifier[]; +} + +/** + * Provides historical webhook event delivery information for analysis and + * debugging purposes. + */ +export interface WebhookDeliveryLogResource { + attributes: { + /** + * The date-time at which this log entry was created. + * @format date-time + */ + createdAt: string; + /** The success or failure status of this delivery attempt. */ + deliveryStatus: WebhookDeliveryStatusEnum; + /** Information about the request that was sent to the webhook URL. */ + request: { + /** The payload that was sent in the request body. */ + body: string; + }; + /** Information about the response that was received from the webhook URL. */ + response: { + /** The payload that was received in the response body. */ + body: string; + /** The HTTP status code received in the response. */ + statusCode: number; + } | null; + }; + /** The unique identifier for this log entry. */ + id: string; + relationships: { + webhookEvent: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`webhook-events\` */ + type: string; + }; + }; + }; + /** The type of this resource: \`webhook-delivery-logs\` */ + type: string; +} + +/** + * Specifies the nature of the success or failure of a webhook delivery + * attempt to the subscribed webhook URL. The currently returned values are + * described below: + * + * - **\`DELIVERED\`**: The event was delivered to the webhook URL + * successfully and a \`200\` response was received. + * - **\`UNDELIVERABLE\`**: The webhook URL was not reachable, or timed out. + * - **\`BAD_RESPONSE_CODE\`**: The event was delivered to the webhook URL + * but a non-\`200\` response was received. + */ +export enum WebhookDeliveryStatusEnum { + DELIVERED = "DELIVERED", + UNDELIVERABLE = "UNDELIVERABLE", + BAD_RESPONSE_CODE = "BAD_RESPONSE_CODE", +} + +/** Asynchronous callback request used for webhook event delivery. */ +export interface WebhookEventCallback { + /** The webhook event data sent to the subscribed webhook. */ + data: WebhookEventResource; +} + +/** + * Provides the event data used in asynchronous webhook event callbacks to + * subscribed endpoints. Webhooks events have defined \`eventType\`s and may + * optionally relate to other resources within the Up API. + */ +export interface WebhookEventResource { + attributes: { + /** + * The date-time at which this event was generated. + * @format date-time + */ + createdAt: string; + /** + * The type of this event. This can be used to determine what action to + * take in response to the event. + */ + eventType: WebhookEventTypeEnum; + }; + /** + * The unique identifier for this event. This will remain constant across + * delivery retries. + */ + id: string; + relationships: { + transaction?: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`transactions\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + webhook: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`webhooks\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`webhook-events\` */ + type: string; +} + +/** + * Specifies the type of a webhook event. This can be used to determine what + * action to take in response to the event, such as which relationships to + * expect. + */ +export enum WebhookEventTypeEnum { + TRANSACTION_CREATED = "TRANSACTION_CREATED", + TRANSACTION_SETTLED = "TRANSACTION_SETTLED", + TRANSACTION_DELETED = "TRANSACTION_DELETED", + PING = "PING", +} + +/** Represents a webhook specified as request input. */ +export interface WebhookInputResource { + attributes: { + /** + * An optional description for this webhook, up to 64 characters in + * length. + */ + description?: string | null; + /** + * The URL that this webhook should post events to. This must be a valid + * HTTP or HTTPS URL that does not exceed 300 characters in length. + * @format uri + */ + url: string; + }; +} + +/** Provides information about a webhook. */ +export interface WebhookResource { + attributes: { + /** + * The date-time at which this webhook was created. + * @format date-time + */ + createdAt: string; + /** + * An optional description that was provided at the time the webhook was + * created. + */ + description: string | null; + /** + * A shared secret key used to sign all webhook events sent to the + * configured webhook URL. This field is returned only once, upon the + * initial creation of the webhook. If lost, create a new webhook and + * delete this webhook. + * + * The webhook URL receives a request with a + * \`X-Up-Authenticity-Signature\` header, which is the SHA-256 HMAC of + * the entire raw request body signed using this \`secretKey\`. It is + * advised to compute and check this signature to verify the + * authenticity of requests sent to the webhook URL. See + * [Handling webhook events](#callback_post_webhookURL) for full + * details. + */ + secretKey?: string; + /** The URL that this webhook is configured to \`POST\` events to. */ + url: string; + }; + /** The unique identifier for this webhook. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + logs: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`webhooks\` */ + type: string; +} + +export type WebhooksCreateData = CreateWebhookResponse; + +export type WebhooksDeleteData = any; + +export type WebhooksDetailData = GetWebhookResponse; + +export type WebhooksListData = ListWebhooksResponse; + +export interface WebhooksListParams { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; +} + +export namespace Accounts { + /** + * @description Retrieve a specific account by providing its unique identifier. + * @tags Accounts + * @name AccountsDetail + * @summary Retrieve account + * @request GET:/accounts/{id} + * @secure + */ + export namespace AccountsDetail { + export type RequestParams = { + /** + * The unique identifier for the account. + * @example "9842e43e-a1f9-4460-a252-364c86df2d3e" + */ + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AccountsDetailData; + } + /** + * @description Retrieve a paginated list of all accounts for the currently authenticated user. The returned list is paginated and can be scrolled by following the \`prev\` and \`next\` links where present. + * @tags Accounts + * @name AccountsList + * @summary List accounts + * @request GET:/accounts + * @secure + */ + export namespace AccountsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = AccountsListData; + } + /** + * @description Retrieve a list of all transactions for a specific account. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. + * @tags Transactions + * @name TransactionsDetail + * @summary List transactions by account + * @request GET:/accounts/{accountId}/transactions + * @secure + */ + export namespace TransactionsDetail { + export type RequestParams = { + /** + * The unique identifier for the account. + * @example "86150b64-feaa-4186-a7e4-e84eae764602" + */ + accountId: string; + }; + export type RequestQuery = { + /** + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" + */ + "filter[category]"?: string; + /** + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" + */ + "filter[since]"?: string; + /** + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" + */ + "filter[status]"?: TransactionStatusEnum; + /** + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" + */ + "filter[tag]"?: string; + /** + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" + */ + "filter[until]"?: string; + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TransactionsDetailResult; + } +} + +export namespace Categories { + /** + * @description Retrieve a specific category by providing its unique identifier. + * @tags Categories + * @name CategoriesDetail + * @summary Retrieve category + * @request GET:/categories/{id} + * @secure + */ + export namespace CategoriesDetail { + export type RequestParams = { + /** + * The unique identifier for the category. + * @example "restaurants-and-cafes" + */ + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CategoriesDetailData; + } + /** + * @description Retrieve a list of all categories and their ancestry. The returned list is not paginated. + * @tags Categories + * @name CategoriesList + * @summary List categories + * @request GET:/categories + * @secure + */ + export namespace CategoriesList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The unique identifier of a parent category for which to + * return only its children. Providing an invalid category + * identifier results in a \`404\` response. + * @example "good-life" + */ + "filter[parent]"?: string; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = CategoriesListData; + } +} + +export namespace Util { + /** + * @description Make a basic ping request to the API. This is useful to verify that authentication is functioning correctly. On authentication success an HTTP \`200\` status is returned. On failure an HTTP \`401\` error response is returned. + * @tags Utility endpoints + * @name PingList + * @summary Ping + * @request GET:/util/ping + * @secure + */ + export namespace PingList { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PingListData; + } +} + +export namespace Tags { + /** + * @description Retrieve a list of all tags currently in use. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered lexicographically. The \`transactions\` relationship for each tag exposes a link to get the transactions with the given tag. + * @tags Tags + * @name TagsList + * @summary List tags + * @request GET:/tags + * @secure + */ + export namespace TagsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The number of records to return in each page. + * @example 50 + */ + "page[size]"?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TagsListData; + } +} + +export namespace Transactions { + /** + * @description Associates one or more tags with a specific transaction. No more than 6 tags may be present on any single transaction. Duplicate tags are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. + * @tags Tags + * @name RelationshipsTagsCreate + * @summary Add tags to transaction + * @request POST:/transactions/{transactionId}/relationships/tags + * @secure + */ + export namespace RelationshipsTagsCreate { + export type RequestParams = { + /** + * The unique identifier for the transaction. + * @example "d024c1b8-bc6a-4785-afc6-cd332d2a2efb" + */ + transactionId: string; + }; + export type RequestQuery = {}; + export type RequestBody = UpdateTransactionTagsRequest; + export type RequestHeaders = {}; + export type ResponseBody = RelationshipsTagsCreateData; + } + /** + * @description Disassociates one or more tags from a specific transaction. Tags that are not associated are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. + * @tags Tags + * @name RelationshipsTagsDelete + * @summary Remove tags from transaction + * @request DELETE:/transactions/{transactionId}/relationships/tags + * @secure + */ + export namespace RelationshipsTagsDelete { + export type RequestParams = { + /** + * The unique identifier for the transaction. + * @example "d8c190d6-be35-4d64-b2c4-e1aa0c09a0e0" + */ + transactionId: string; + }; + export type RequestQuery = {}; + export type RequestBody = UpdateTransactionTagsRequest; + export type RequestHeaders = {}; + export type ResponseBody = RelationshipsTagsDeleteData; + } + /** + * @description Retrieve a specific transaction by providing its unique identifier. + * @tags Transactions + * @name TransactionsDetail + * @summary Retrieve transaction + * @request GET:/transactions/{id} + * @secure + */ + export namespace TransactionsDetail { + export type RequestParams = { + /** + * The unique identifier for the transaction. + * @example "8e1da97e-6490-42eb-9c18-d8fdd94cfddc" + */ + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TransactionsDetailData; + } + /** + * @description Retrieve a list of all transactions across all accounts for the currently authenticated user. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. + * @tags Transactions + * @name TransactionsList + * @summary List transactions + * @request GET:/transactions + * @secure + */ + export namespace TransactionsList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" + */ + "filter[category]"?: string; + /** + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" + */ + "filter[since]"?: string; + /** + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" + */ + "filter[status]"?: TransactionStatusEnum; + /** + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" + */ + "filter[tag]"?: string; + /** + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" + */ + "filter[until]"?: string; + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + /** Blablabla bla */ + someEnumName?: SomeEnumName; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = TransactionsListData; + } +} + +export namespace Webhooks { + /** + * @description Retrieve a list of delivery logs for a webhook by providing its unique identifier. This is useful for analysis and debugging purposes. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered newest first to oldest last. Logs may be automatically purged after a period of time. + * @tags Webhooks + * @name LogsDetail + * @summary List webhook logs + * @request GET:/webhooks/{webhookId}/logs + * @secure + */ + export namespace LogsDetail { + export type RequestParams = { + /** + * The unique identifier for the webhook. + * @example "49733526-b90d-436a-8a75-9715a1d7cc5b" + */ + webhookId: string; + }; + export type RequestQuery = { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = LogsDetailData; + } + /** + * @description Send a \`PING\` event to a webhook by providing its unique identifier. This is useful for testing and debugging purposes. The event is delivered asynchronously and its data is returned in the response to this request. + * @tags Webhooks + * @name PingCreate + * @summary Ping webhook + * @request POST:/webhooks/{webhookId}/ping + * @secure + */ + export namespace PingCreate { + export type RequestParams = { + /** + * The unique identifier for the webhook. + * @example "6ef4bb23-53f1-4a3d-aa5c-a6e9121c5da3" + */ + webhookId: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = PingCreateData; + } + /** + * @description Create a new webhook with a given URL. The URL will receive webhook events as JSON-encoded \`POST\` requests. The URL must respond with a HTTP \`200\` status on success. There is currently a limit of 10 webhooks at any given time. Once this limit is reached, existing webhooks will need to be deleted before new webhooks can be created. Event delivery is retried with exponential backoff if the URL is unreachable or it does not respond with a \`200\` status. The response includes a \`secretKey\` attribute, which is used to sign requests sent to the webhook URL. It will not be returned from any other endpoints within the Up API. If the \`secretKey\` is lost, simply create a new webhook with the same URL, capture its \`secretKey\` and then delete the original webhook. See [Handling webhook events](#callback_post_webhookURL) for details on how to process webhook events. It is probably a good idea to test the webhook by [sending it a \`PING\` event](#post_webhooks_webhookId_ping) after creating it. + * @tags Webhooks + * @name WebhooksCreate + * @summary Create webhook + * @request POST:/webhooks + * @secure + */ + export namespace WebhooksCreate { + export type RequestParams = {}; + export type RequestQuery = {}; + export type RequestBody = CreateWebhookRequest; + export type RequestHeaders = {}; + export type ResponseBody = WebhooksCreateData; + } + /** + * @description Delete a specific webhook by providing its unique identifier. Once deleted, webhook events will no longer be sent to the configured URL. + * @tags Webhooks + * @name WebhooksDelete + * @summary Delete webhook + * @request DELETE:/webhooks/{id} + * @secure + */ + export namespace WebhooksDelete { + export type RequestParams = { + /** + * The unique identifier for the webhook. + * @example "81f485ae-0e10-493d-95f3-a9c1dd4b6b6a" + */ + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = WebhooksDeleteData; + } + /** + * @description Retrieve a specific webhook by providing its unique identifier. + * @tags Webhooks + * @name WebhooksDetail + * @summary Retrieve webhook + * @request GET:/webhooks/{id} + * @secure + */ + export namespace WebhooksDetail { + export type RequestParams = { + /** + * The unique identifier for the webhook. + * @example "bc11e3ed-362e-43ab-b141-ef4f6251faa5" + */ + id: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = WebhooksDetailData; + } + /** + * @description Retrieve a list of configured webhooks. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered oldest first to newest last. + * @tags Webhooks + * @name WebhooksList + * @summary List webhooks + * @request GET:/webhooks + * @secure + */ + export namespace WebhooksList { + export type RequestParams = {}; + export type RequestQuery = { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = WebhooksListData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.up.com.au/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Up API + * @version v1 + * @baseUrl https://api.up.com.au/api/v1 + * @contact API Specification and Support (https://github.com/up-banking/api) + * + * The Up API gives you programmatic access to your balances and + * transaction data. You can request past transactions or set up + * webhooks to receive real-time events when new transactions hit your + * account. It’s new, it’s exciting and it’s just the beginning. + */ +export class Api extends HttpClient { + accounts = { + /** + * @description Retrieve a specific account by providing its unique identifier. + * + * @tags Accounts + * @name AccountsDetail + * @summary Retrieve account + * @request GET:/accounts/{id} + * @secure + */ + accountsDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/accounts/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Retrieve a paginated list of all accounts for the currently authenticated user. The returned list is paginated and can be scrolled by following the \`prev\` and \`next\` links where present. + * + * @tags Accounts + * @name AccountsList + * @summary List accounts + * @request GET:/accounts + * @secure + */ + accountsList: (query: AccountsListParams, params: RequestParams = {}) => + this.request({ + path: \`/accounts\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Retrieve a list of all transactions for a specific account. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. + * + * @tags Transactions + * @name TransactionsDetail + * @summary List transactions by account + * @request GET:/accounts/{accountId}/transactions + * @secure + */ + transactionsDetail: ({ accountId, ...query }: TransactionsDetailParams1, params: RequestParams = {}) => + this.request({ + path: \`/accounts/\${accountId}/transactions\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + categories = { + /** + * @description Retrieve a specific category by providing its unique identifier. + * + * @tags Categories + * @name CategoriesDetail + * @summary Retrieve category + * @request GET:/categories/{id} + * @secure + */ + categoriesDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/categories/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Retrieve a list of all categories and their ancestry. The returned list is not paginated. + * + * @tags Categories + * @name CategoriesList + * @summary List categories + * @request GET:/categories + * @secure + */ + categoriesList: (query: CategoriesListParams, params: RequestParams = {}) => + this.request({ + path: \`/categories\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + util = { + /** + * @description Make a basic ping request to the API. This is useful to verify that authentication is functioning correctly. On authentication success an HTTP \`200\` status is returned. On failure an HTTP \`401\` error response is returned. + * + * @tags Utility endpoints + * @name PingList + * @summary Ping + * @request GET:/util/ping + * @secure + */ + pingList: (params: RequestParams = {}) => + this.request({ + path: \`/util/ping\`, + method: "GET", + secure: true, + ...params, + }), + }; + tags = { + /** + * @description Retrieve a list of all tags currently in use. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered lexicographically. The \`transactions\` relationship for each tag exposes a link to get the transactions with the given tag. + * + * @tags Tags + * @name TagsList + * @summary List tags + * @request GET:/tags + * @secure + */ + tagsList: (query: TagsListParams, params: RequestParams = {}) => + this.request({ + path: \`/tags\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + transactions = { + /** + * @description Associates one or more tags with a specific transaction. No more than 6 tags may be present on any single transaction. Duplicate tags are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. + * + * @tags Tags + * @name RelationshipsTagsCreate + * @summary Add tags to transaction + * @request POST:/transactions/{transactionId}/relationships/tags + * @secure + */ + relationshipsTagsCreate: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${transactionId}/relationships/tags\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Disassociates one or more tags from a specific transaction. Tags that are not associated are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. + * + * @tags Tags + * @name RelationshipsTagsDelete + * @summary Remove tags from transaction + * @request DELETE:/transactions/{transactionId}/relationships/tags + * @secure + */ + relationshipsTagsDelete: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${transactionId}/relationships/tags\`, + method: "DELETE", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Retrieve a specific transaction by providing its unique identifier. + * + * @tags Transactions + * @name TransactionsDetail + * @summary Retrieve transaction + * @request GET:/transactions/{id} + * @secure + */ + transactionsDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Retrieve a list of all transactions across all accounts for the currently authenticated user. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. + * + * @tags Transactions + * @name TransactionsList + * @summary List transactions + * @request GET:/transactions + * @secure + */ + transactionsList: (query: TransactionsListParams, params: RequestParams = {}) => + this.request({ + path: \`/transactions\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; + webhooks = { + /** + * @description Retrieve a list of delivery logs for a webhook by providing its unique identifier. This is useful for analysis and debugging purposes. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered newest first to oldest last. Logs may be automatically purged after a period of time. + * + * @tags Webhooks + * @name LogsDetail + * @summary List webhook logs + * @request GET:/webhooks/{webhookId}/logs + * @secure + */ + logsDetail: ({ webhookId, ...query }: LogsDetailParams, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${webhookId}/logs\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + + /** + * @description Send a \`PING\` event to a webhook by providing its unique identifier. This is useful for testing and debugging purposes. The event is delivered asynchronously and its data is returned in the response to this request. + * + * @tags Webhooks + * @name PingCreate + * @summary Ping webhook + * @request POST:/webhooks/{webhookId}/ping + * @secure + */ + pingCreate: (webhookId: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${webhookId}/ping\`, + method: "POST", + secure: true, + ...params, + }), + + /** + * @description Create a new webhook with a given URL. The URL will receive webhook events as JSON-encoded \`POST\` requests. The URL must respond with a HTTP \`200\` status on success. There is currently a limit of 10 webhooks at any given time. Once this limit is reached, existing webhooks will need to be deleted before new webhooks can be created. Event delivery is retried with exponential backoff if the URL is unreachable or it does not respond with a \`200\` status. The response includes a \`secretKey\` attribute, which is used to sign requests sent to the webhook URL. It will not be returned from any other endpoints within the Up API. If the \`secretKey\` is lost, simply create a new webhook with the same URL, capture its \`secretKey\` and then delete the original webhook. See [Handling webhook events](#callback_post_webhookURL) for details on how to process webhook events. It is probably a good idea to test the webhook by [sending it a \`PING\` event](#post_webhooks_webhookId_ping) after creating it. + * + * @tags Webhooks + * @name WebhooksCreate + * @summary Create webhook + * @request POST:/webhooks + * @secure + */ + webhooksCreate: (data: CreateWebhookRequest, params: RequestParams = {}) => + this.request({ + path: \`/webhooks\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * @description Delete a specific webhook by providing its unique identifier. Once deleted, webhook events will no longer be sent to the configured URL. + * + * @tags Webhooks + * @name WebhooksDelete + * @summary Delete webhook + * @request DELETE:/webhooks/{id} + * @secure + */ + webhooksDelete: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${id}\`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * @description Retrieve a specific webhook by providing its unique identifier. + * + * @tags Webhooks + * @name WebhooksDetail + * @summary Retrieve webhook + * @request GET:/webhooks/{id} + * @secure + */ + webhooksDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${id}\`, + method: "GET", + secure: true, + ...params, + }), + + /** + * @description Retrieve a list of configured webhooks. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered oldest first to newest last. + * + * @tags Webhooks + * @name WebhooksList + * @summary List webhooks + * @request GET:/webhooks + * @secure + */ + webhooksList: (query: WebhooksListParams, params: RequestParams = {}) => + this.request({ + path: \`/webhooks\`, + method: "GET", + query: query, + secure: true, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'uspto' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface DataSetList { + apis?: { + /** + * A URL to the API console for each API + * @format uriref + */ + apiDocumentationUrl?: string; + /** To be used as a dataset parameter value */ + apiKey?: string; + /** + * The URL describing the dataset's fields + * @format uriref + */ + apiUrl?: string; + /** To be used as a version parameter value */ + apiVersionNumber?: string; + }[]; + total?: number; +} + +export type ListDataSetsData = DataSetList; + +export type ListSearchableFieldsData = string; + +export type ListSearchableFieldsError = string; + +export type PerformSearchData = Record[]; + +export interface PerformSearchPayload { + /** + * Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values. + * @default "*:*" + */ + criteria: string; + /** + * Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset. + * @default 100 + */ + rows?: number; + /** + * Starting record number. Default value is 0. + * @default 0 + */ + start?: number; +} + +export enum SomeEnum { + Foo = "Foo", + Bar = "Bar", + FooBar = "Foo Bar", +} + +export enum Status { + Resolved = "resolved", + New = "new", + InProgress = "in progress", +} + +export namespace Dataset { + /** + * @description This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below. + * @tags metadata + * @name ListSearchableFields + * @summary Provides the general information about the API and the list of fields that can be used to query the dataset. + * @request GET:/{dataset}/{version}/fields + */ + export namespace ListSearchableFields { + export type RequestParams = { + /** + * Name of the dataset. + * @example "oa_citations" + */ + dataset: string; + /** + * Version of the dataset. + * @example "v1" + */ + version: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = ListSearchableFieldsData; + } + /** + * @description This API is based on Solr/Lucense Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api. + * @tags search + * @name PerformSearch + * @summary Provides search capability for the data set with the given search criteria. + * @request POST:/{dataset}/{version}/records + */ + export namespace PerformSearch { + export type RequestParams = { + /** + * Name of the dataset. In this case, the default value is oa_citations + * @default "oa_citations" + */ + dataset: string; + /** + * Version of the dataset. + * @default "v1" + */ + version: string; + }; + export type RequestQuery = {}; + export type RequestBody = PerformSearchPayload; + export type RequestHeaders = {}; + export type ResponseBody = PerformSearchData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "{scheme}://developer.uspto.gov/ds-api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title USPTO Data Set API + * @version 1.0.0 + * @baseUrl {scheme}://developer.uspto.gov/ds-api + * @contact Open Data Portal (https://developer.uspto.gov) + * + * The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters. + */ +export class Api extends HttpClient { + /** + * No description + * + * @tags metadata + * @name ListDataSets + * @summary List available data sets + * @request GET:/ + */ + listDataSets = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + ...params, + }); + + dataset = { + /** + * @description This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below. + * + * @tags metadata + * @name ListSearchableFields + * @summary Provides the general information about the API and the list of fields that can be used to query the dataset. + * @request GET:/{dataset}/{version}/fields + */ + listSearchableFields: (dataset: string, version: string, params: RequestParams = {}) => + this.request({ + path: \`/\${dataset}/\${version}/fields\`, + method: "GET", + ...params, + }), + + /** + * @description This API is based on Solr/Lucense Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api. + * + * @tags search + * @name PerformSearch + * @summary Provides search capability for the data set with the given search criteria. + * @request POST:/{dataset}/{version}/records + */ + performSearch: (version: string, dataset: string, data: PerformSearchPayload, params: RequestParams = {}) => + this.request({ + path: \`/\${dataset}/\${version}/records\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), + }; +} +" +`; + +exports[`extended > 'wrong-enum-subtypes' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Test = { + x?: TestXEnum[]; +} & { + y?: string; +}; + +export enum TestXEnum { + AB = "A-B", +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Test + * @version test + */ +export class Api extends HttpClient {} +" +`; + +exports[`extended > 'wrong-schema-names' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** + * Not found response + * @example "Not found" + */ +export type DF = string; + +export type GetPullRequestsByIdData = Type404; + +export type GetPullRequestsByRepositoryData = any[]; + +export interface GetPullRequestsByRepositoryParams { + slug: string; + state?: StateEnum; + username: string; +} + +export enum GetPullRequestsByRepositoryParams1StateEnum { + Open = "open", + Merged = "merged", + Declined = "declined", +} + +export type GetRepositoriesByOwnerData = any[]; + +export type GetRepositoryData = any; + +export type GetUserByNameData = any; + +export type MergePullRequestData = any; + +export enum StateEnum { + Open = "open", + Merged = "merged", + Declined = "declined", +} + +/** + * Not found response + * @example "Not found" + */ +export type Type404 = string; + +/** + * Not found response + * @example "Not found" + */ +export type Type405 = string; + +/** + * Not found response + * @example "Not found" + */ +export type TypeFF = string; + +export namespace V20 { + /** + * No description + * @name GetPullRequestsById + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} + */ + export namespace GetPullRequestsById { + export type RequestParams = { + pid: string; + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPullRequestsByIdData; + } + /** + * No description + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests + */ + export namespace GetPullRequestsByRepository { + export type RequestParams = { + slug: string; + username: string; + }; + export type RequestQuery = { + state?: GetPullRequestsByRepositoryParams1StateEnum; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetPullRequestsByRepositoryData; + } + /** + * No description + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} + */ + export namespace GetRepositoriesByOwner { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetRepositoriesByOwnerData; + } + /** + * No description + * @name GetRepository + * @request GET:/2.0/repositories/{username}/{slug} + */ + export namespace GetRepository { + export type RequestParams = { + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetRepositoryData; + } + /** + * No description + * @name GetUserByName + * @request GET:/2.0/users/{username} + */ + export namespace GetUserByName { + export type RequestParams = { + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = GetUserByNameData; + } + /** + * No description + * @name MergePullRequest + * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge + */ + export namespace MergePullRequest { + export type RequestParams = { + pid: string; + slug: string; + username: string; + }; + export type RequestQuery = {}; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = MergePullRequestData; + } +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Link Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + v20 = { + /** + * No description + * + * @name GetPullRequestsById + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} + */ + getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests + */ + getPullRequestsByRepository: ( + { username, slug, ...query }: GetPullRequestsByRepositoryParams, + params: RequestParams = {}, + ) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests\`, + method: "GET", + query: query, + ...params, + }), + + /** + * No description + * + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} + */ + getRepositoriesByOwner: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetRepository + * @request GET:/2.0/repositories/{username}/{slug} + */ + getRepository: (username: string, slug: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name GetUserByName + * @request GET:/2.0/users/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/users/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @name MergePullRequest + * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge + */ + mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}/merge\`, + method: "POST", + ...params, + }), + }; +} +" +`; diff --git a/tests/generated/v3.0/full-swagger-scheme.ts b/tests/__snapshots__/simple.test.ts.snap similarity index 52% rename from tests/generated/v3.0/full-swagger-scheme.ts rename to tests/__snapshots__/simple.test.ts.snap index 4b6cb5ab..3069a13c 100644 --- a/tests/generated/v3.0/full-swagger-scheme.ts +++ b/tests/__snapshots__/simple.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`simple > 'adafruit' 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -9,8994 +12,22951 @@ * --------------------------------------------------------------- */ -export interface ActionsBillingUsage { - /** The amount of free GitHub Actions minutes available. */ - included_minutes: number; - minutes_used_breakdown: { - /** Total minutes used on macOS runner machines. */ - MACOS?: number; - /** Total minutes used on Ubuntu runner machines. */ - UBUNTU?: number; - /** Total minutes used on Windows runner machines. */ - WINDOWS?: number; - }; - /** The sum of the free and paid GitHub Actions minutes used. */ - total_minutes_used: number; - /** The total paid GitHub Actions minutes used. */ - total_paid_minutes_used: number; +export interface Activity { + action?: string; + /** @format dateTime */ + created_at?: string; + data?: object; + id?: number; + model?: string; + /** @format dateTime */ + updated_at?: string; + user_id?: number; } -/** Whether GitHub Actions is enabled on the repository. */ -export type ActionsEnabled = boolean; +export interface Block { + block_feeds?: BlockFeed[]; + column?: number; + description?: string; + key?: string; + name?: string; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; +} -export interface ActionsEnterprisePermissions { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions: AllowedActions; - /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ - enabled_organizations: EnabledOrganizations; - /** The API URL to use to get or set the actions that are allowed to run, when `allowed_actions` is set to `selected`. */ - selected_actions_url?: SelectedActionsUrl; - /** The API URL to use to get or set the selected organizations that are allowed to run GitHub Actions, when `enabled_organizations` is set to `selected`. */ - selected_organizations_url?: string; +export interface BlockFeed { + feed?: Feed; + group?: Group; + id?: string; } -export interface ActionsOrganizationPermissions { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions: AllowedActions; - /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ - enabled_repositories: EnabledRepositories; - /** The API URL to use to get or set the actions that are allowed to run, when `allowed_actions` is set to `selected`. */ - selected_actions_url?: SelectedActionsUrl; - /** The API URL to use to get or set the selected repositories that are allowed to run GitHub Actions, when `enabled_repositories` is set to `selected`. */ - selected_repositories_url?: string; +export interface Dashboard { + blocks?: Block[]; + description?: string; + key?: string; + name?: string; } -/** - * ActionsPublicKey - * The public key used for setting Actions Secrets. - */ -export interface ActionsPublicKey { - /** @example "2011-01-26T19:01:12Z" */ +export interface Data { + completed_at?: string; created_at?: string; - /** @example 2 */ - id?: number; - /** - * The Base64 encoded public key. - * @example "hBT5WZEj8ZoOv6TYJsfWq7MxTEQopZO5/IT3ZCVQPzs=" - */ - key: string; - /** - * The identifier for the key. - * @example "1234567" - */ - key_id: string; - /** @example "ssh-rsa AAAAB3NzaC1yc2EAAA" */ - title?: string; - /** @example "https://api.github.com/user/keys/2" */ - url?: string; + created_epoch?: number; + ele?: number; + expiration?: string; + feed_id?: number; + group_id?: number; + id?: string; + lat?: number; + lon?: number; + updated_at?: string; + value?: string; } -export interface ActionsRepositoryPermissions { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions: AllowedActions; - /** Whether GitHub Actions is enabled on the repository. */ - enabled: ActionsEnabled; - /** The API URL to use to get or set the actions that are allowed to run, when `allowed_actions` is set to `selected`. */ - selected_actions_url?: SelectedActionsUrl; +export interface DataResponse { + completed_at?: string; + created_at?: string; + created_epoch?: number; + ele?: number; + expiration?: string; + feed_id?: number; + group_id?: number; + id?: string; + lat?: number; + lon?: number; + updated_at?: string; + value?: string; } -/** - * Actions Secret - * Set secrets for GitHub Actions. - */ -export interface ActionsSecret { - /** @format date-time */ - created_at: string; - /** - * The name of the secret. - * @example "SECRET_TOKEN" - */ - name: string; - /** @format date-time */ - updated_at: string; +export interface Error { + code?: string; + message?: string; } -/** - * Actor - * Actor - */ -export interface Actor { - /** @format uri */ - avatar_url: string; - display_login?: string; - gravatar_id: string | null; - id: number; - login: string; - /** @format uri */ - url: string; +export interface Feed { + created_at?: string; + description?: string; + /** Additional details about this feed. */ + details?: { + data?: { + /** Number of data points stored by this feed. */ + count?: number; + first?: Record; + last?: Record; + }; + /** Access control list for this feed */ + shared_with?: object[]; + }; + enabled?: boolean; + group?: Record; + groups?: ShallowGroup[]; + history?: boolean; + id?: number; + key?: string; + last_value?: string; + license?: string; + name?: string; + status?: string; + /** Is status notification active? */ + status_notify?: boolean; + /** Status notification timeout in minutes. */ + status_timeout?: number; + unit_symbol?: string; + unit_type?: string; + updated_at?: string; + /** @default "private" */ + visibility?: "private" | "public" | "in progress" | "out of access"; } -/** - * The time that the alert was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. - * @format date-time - */ -export type AlertCreatedAt = string; - -/** - * The GitHub URL of the alert resource. - * @format uri - */ -export type AlertHtmlUrl = string; - -/** The security alert number. */ -export type AlertNumber = number; - -/** - * The REST API URL of the alert resource. - * @format uri - */ -export type AlertUrl = string; - -/** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ -export enum AllowedActions { - All = "all", - LocalOnly = "local_only", - Selected = "selected", +export interface Group { + created_at?: string; + description?: string; + feeds?: Feed[]; + id?: number; + name?: string; + updated_at?: string; } -/** - * Api Overview - * Api Overview - */ -export interface ApiOverview { - /** @example ["13.64.0.0/16","13.65.0.0/16"] */ - actions?: string[]; - /** @example ["127.0.0.1/32"] */ - api?: string[]; - /** @example ["127.0.0.1/32"] */ - git?: string[]; - /** @example ["127.0.0.1/32"] */ - hooks?: string[]; - /** @example ["54.158.161.132","54.226.70.38"] */ - importer?: string[]; - /** @example ["192.30.252.153/32","192.30.252.154/32"] */ - pages?: string[]; - ssh_key_fingerprints?: { - SHA256_DSA?: string; - SHA256_RSA?: string; - }; - /** @example true */ - verifiable_password_authentication: boolean; - /** @example ["127.0.0.1/32"] */ - web?: string[]; +export interface Permission { + created_at?: string; + id?: number; + /** @default "feed" */ + model?: "feed" | "group" | "dashboard"; + object_id?: number; + /** @default "public" */ + scope?: "secret" | "public" | "user" | "organization"; + scope_value?: string; + updated_at?: string; + user_id?: number; } -/** - * App Permissions - * The permissions granted to the user-to-server access token. - * @example {"contents":"read","issues":"read","deployments":"write","single_file":"read"} - */ -export interface AppPermissions { - /** The level of permission to grant the access token for GitHub Actions workflows, workflow runs, and artifacts. Can be one of: `read` or `write`. */ - actions?: "read" | "write"; - /** The level of permission to grant the access token for repository creation, deletion, settings, teams, and collaborators creation. Can be one of: `read` or `write`. */ - administration?: "read" | "write"; - /** The level of permission to grant the access token for checks on code. Can be one of: `read` or `write`. */ - checks?: "read" | "write"; - /** The level of permission to grant the access token for notification of content references and creation content attachments. Can be one of: `read` or `write`. */ - content_references?: "read" | "write"; - /** The level of permission to grant the access token for repository contents, commits, branches, downloads, releases, and merges. Can be one of: `read` or `write`. */ - contents?: "read" | "write"; - /** The level of permission to grant the access token for deployments and deployment statuses. Can be one of: `read` or `write`. */ - deployments?: "read" | "write"; - /** The level of permission to grant the access token for managing repository environments. Can be one of: `read` or `write`. */ - environments?: "read" | "write"; - /** The level of permission to grant the access token for issues and related comments, assignees, labels, and milestones. Can be one of: `read` or `write`. */ - issues?: "read" | "write"; - /** The level of permission to grant the access token for organization teams and members. Can be one of: `read` or `write`. */ - members?: "read" | "write"; - /** The level of permission to grant the access token to search repositories, list collaborators, and access repository metadata. Can be one of: `read` or `write`. */ - metadata?: "read" | "write"; - /** The level of permission to grant the access token to manage access to an organization. Can be one of: `read` or `write`. */ - organization_administration?: "read" | "write"; - /** The level of permission to grant the access token to manage the post-receive hooks for an organization. Can be one of: `read` or `write`. */ - organization_hooks?: "read" | "write"; - /** The level of permission to grant the access token for viewing an organization's plan. Can be one of: `read`. */ - organization_plan?: "read"; - /** The level of permission to grant the access token to manage organization projects, columns, and cards. Can be one of: `read`, `write`, or `admin`. */ - organization_projects?: "read" | "write" | "admin"; - /** The level of permission to grant the access token to manage organization secrets. Can be one of: `read` or `write`. */ - organization_secrets?: "read" | "write"; - /** The level of permission to grant the access token to view and manage GitHub Actions self-hosted runners available to an organization. Can be one of: `read` or `write`. */ - organization_self_hosted_runners?: "read" | "write"; - /** The level of permission to grant the access token to view and manage users blocked by the organization. Can be one of: `read` or `write`. */ - organization_user_blocking?: "read" | "write"; - /** The level of permission to grant the access token for packages published to GitHub Packages. Can be one of: `read` or `write`. */ - packages?: "read" | "write"; - /** The level of permission to grant the access token to retrieve Pages statuses, configuration, and builds, as well as create new builds. Can be one of: `read` or `write`. */ - pages?: "read" | "write"; - /** The level of permission to grant the access token for pull requests and related comments, assignees, labels, milestones, and merges. Can be one of: `read` or `write`. */ - pull_requests?: "read" | "write"; - /** The level of permission to grant the access token to manage the post-receive hooks for a repository. Can be one of: `read` or `write`. */ - repository_hooks?: "read" | "write"; - /** The level of permission to grant the access token to manage repository projects, columns, and cards. Can be one of: `read`, `write`, or `admin`. */ - repository_projects?: "read" | "write" | "admin"; - /** The level of permission to grant the access token to view and manage secret scanning alerts. Can be one of: `read` or `write`. */ - secret_scanning_alerts?: "read" | "write"; - /** The level of permission to grant the access token to manage repository secrets. Can be one of: `read` or `write`. */ - secrets?: "read" | "write"; - /** The level of permission to grant the access token to view and manage security events like code scanning alerts. Can be one of: `read` or `write`. */ - security_events?: "read" | "write"; - /** The level of permission to grant the access token to manage just a single file. Can be one of: `read` or `write`. */ - single_file?: "read" | "write"; - /** The level of permission to grant the access token for commit statuses. Can be one of: `read` or `write`. */ - statuses?: "read" | "write"; - /** The level of permission to grant the access token to manage team discussions and related comments. Can be one of: `read` or `write`. */ - team_discussions?: "read" | "write"; - /** The level of permission to grant the access token to retrieve Dependabot alerts. Can be one of: `read`. */ - vulnerability_alerts?: "read"; - /** The level of permission to grant the access token to update GitHub Actions workflow files. Can be one of: `write`. */ - workflows?: "write"; +export interface ShallowGroup { + created_at?: string; + description?: string; + id?: number; + name?: string; + updated_at?: string; } -/** - * Application Grant - * The authorization associated with an OAuth Access. - */ -export interface ApplicationGrant { - app: { - client_id: string; - name: string; - /** @format uri */ - url: string; - }; - /** - * @format date-time - * @example "2011-09-06T17:26:27Z" - */ - created_at: string; - /** @example 1 */ - id: number; - /** @example ["public_repo"] */ - scopes: string[]; - /** - * @format date-time - * @example "2011-09-06T20:39:23Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/applications/grants/1" - */ - url: string; - user?: SimpleUser | null; +export interface Token { + token?: string; } -/** - * Artifact - * An artifact - */ -export interface Artifact { - /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5/zip" */ - archive_download_url: string; - /** @format date-time */ - created_at: string | null; - /** Whether or not the artifact has expired. */ - expired: boolean; - /** @format date-time */ - expires_at: string; - /** @example 5 */ - id: number; - /** - * The name of the artifact. - * @example "AdventureWorks.Framework" - */ - name: string; - /** @example "MDEwOkNoZWNrU3VpdGU1" */ - node_id: string; - /** - * The size in bytes of the artifact. - * @example 12345 - */ - size_in_bytes: number; - /** @format date-time */ - updated_at: string | null; - /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5" */ - url: string; +export interface Trigger { + name?: string; } -export interface AuditLogEvent { - /** The time the audit log event occurred, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ - "@timestamp"?: number; - /** The name of the action that was performed, for example `user.login` or `repo.create`. */ - action?: string; - active?: boolean; - active_was?: boolean; - /** The actor who performed the action. */ - actor?: string; - /** The username of the account being blocked. */ - blocked_user?: string; - business?: string; - config?: any[]; - config_was?: any[]; - content_type?: string; - /** The time the audit log event was recorded, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ - created_at?: number; - deploy_key_fingerprint?: string; - emoji?: string; - events?: any[]; - events_were?: any[]; - explanation?: string; - fingerprint?: string; - hook_id?: number; - limited_availability?: boolean; - message?: string; +export interface User { + color?: string; + /** @format dateTime */ + created_at?: string; + id?: number; name?: string; - old_user?: string; - openssh_public_key?: string; - org?: string; - previous_visibility?: string; - read_only?: boolean; - /** The name of the repository. */ - repo?: string; - /** The name of the repository. */ - repository?: string; - repository_public?: boolean; - target_login?: string; - team?: string; - /** The type of protocol (for example, HTTP or SSH) used to transfer Git data. */ - transport_protocol?: number; - /** A human readable name for the protocol (for example, HTTP or SSH) used to transfer Git data. */ - transport_protocol_name?: string; - /** The user that was affected by the action performed (if available). */ - user?: string; - /** The repository visibility, for example `public` or `private`. */ - visibility?: string; + time_zone?: string; + /** @format dateTime */ + updated_at?: string; + username?: string; } -/** - * Authentication Token - * Authentication Token - */ -export interface AuthenticationToken { - /** - * The time this token expires - * @format date-time - * @example "2016-07-11T22:14:10Z" - */ - expires_at: string; - /** @example {"issues":"read","deployments":"write"} */ - permissions?: object; - /** The repositories this token has access to */ - repositories?: Repository[]; - /** Describe whether all repositories have been selected or there's a selection involved */ - repository_selection?: "all" | "selected"; - /** @example "config.yaml" */ - single_file?: string | null; - /** - * The token used for authentication - * @example "v1.1f699f1069f60xxx" - */ - token: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * author_association - * How the author is associated with the repository. - * @example "OWNER" - */ -export enum AuthorAssociation { - COLLABORATOR = "COLLABORATOR", - CONTRIBUTOR = "CONTRIBUTOR", - FIRST_TIMER = "FIRST_TIMER", - FIRST_TIME_CONTRIBUTOR = "FIRST_TIME_CONTRIBUTOR", - MANNEQUIN = "MANNEQUIN", - MEMBER = "MEMBER", - NONE = "NONE", - OWNER = "OWNER", +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Authorization - * The authorization for an OAuth app, GitHub App, or a Personal Access Token. - */ -export interface Authorization { - app: { - client_id: string; - name: string; - /** @format uri */ - url: string; - }; - /** @format date-time */ - created_at: string; - fingerprint: string | null; - hashed_token: string | null; - id: number; - installation?: ScopedInstallation | null; - note: string | null; - /** @format uri */ - note_url: string | null; - /** A list of scopes that this authorization is in. */ - scopes: string[] | null; - token: string; - token_last_eight: string | null; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - user?: SimpleUser | null; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Auto merge - * The status of auto merging a pull request. - */ -export type AutoMerge = { - /** Commit message for the merge commit. */ - commit_message: string; - /** Title for the merge commit message. */ - commit_title: string; - /** Simple User */ - enabled_by: SimpleUser; - /** The merge method to use. */ - merge_method: "merge" | "squash" | "rebase"; -} | null; +type CancelToken = Symbol | string | number; -/** - * Base Gist - * Base Gist - */ -export interface BaseGist { - comments: number; - /** @format uri */ - comments_url: string; - /** @format uri */ - commits_url: string; - /** @format date-time */ - created_at: string; - description: string | null; - files: Record< - string, - { - filename?: string; - language?: string; - raw_url?: string; - size?: number; - type?: string; - } - >; - forks?: any[]; - /** @format uri */ - forks_url: string; - /** @format uri */ - git_pull_url: string; - /** @format uri */ - git_push_url: string; - history?: any[]; - /** @format uri */ - html_url: string; - id: string; - node_id: string; - owner?: SimpleUser | null; - public: boolean; - truncated?: boolean; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - user: SimpleUser | null; +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Basic Error - * Basic Error - */ -export interface BasicError { - documentation_url?: string; - message?: string; -} +export class HttpClient { + public baseUrl: string = "https://io.adafruit.com/api/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); -/** - * Blob - * Blob - */ -export interface Blob { - content: string; - encoding: string; - highlighted_content?: string; - node_id: string; - sha: string; - size: number | null; - /** @format uri */ - url: string; -} + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; -/** - * Branch Protection - * Branch Protection - */ -export interface BranchProtection { - allow_deletions?: { - enabled?: boolean; - }; - allow_force_pushes?: { - enabled?: boolean; - }; - enabled: boolean; - /** Protected Branch Admin Enforced */ - enforce_admins?: ProtectedBranchAdminEnforced; - /** @example ""branch/with/protection"" */ - name?: string; - /** @example ""https://api.github.com/repos/owner-79e94e2d36b3fd06a32bb213/AAA_Public_Repo/branches/branch/with/protection/protection"" */ - protection_url?: string; - required_linear_history?: { - enabled?: boolean; + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; }; - /** Protected Branch Pull Request Review */ - required_pull_request_reviews?: ProtectedBranchPullRequestReview; - required_status_checks: { - contexts: string[]; - contexts_url?: string; - enforcement_level: string; - url?: string; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), }; - /** Branch Restriction Policy */ - restrictions?: BranchRestrictionPolicy; - url?: string; -} -/** - * Branch Restriction Policy - * Branch Restriction Policy - */ -export interface BranchRestrictionPolicy { - apps: { - created_at?: string; - description?: string; - events?: string[]; - external_url?: string; - html_url?: string; - id?: number; - name?: string; - node_id?: string; - owner?: { - avatar_url?: string; - description?: string; - events_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/followers"" */ - followers_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/following{/other_user}"" */ - following_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/gists{/gist_id}"" */ - gists_url?: string; - /** @example """" */ - gravatar_id?: string; - hooks_url?: string; - /** @example ""https://github.com/testorg-ea8ec76d71c3af4b"" */ - html_url?: string; - id?: number; - issues_url?: string; - login?: string; - members_url?: string; - node_id?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/orgs"" */ - organizations_url?: string; - public_members_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/received_events"" */ - received_events_url?: string; - repos_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/starred{/owner}{/repo}"" */ - starred_url?: string; - /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/subscriptions"" */ - subscriptions_url?: string; - /** @example ""Organization"" */ - type?: string; - url?: string; - }; - permissions?: { - contents?: string; - issues?: string; - metadata?: string; - single_file?: string; + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, }; - slug?: string; - updated_at?: string; - }[]; - /** @format uri */ - apps_url: string; - teams: { - description?: string | null; - html_url?: string; - id?: number; - members_url?: string; - name?: string; - node_id?: string; - parent?: string | null; - permission?: string; - privacy?: string; - repositories_url?: string; - slug?: string; - url?: string; - }[]; - /** @format uri */ - teams_url: string; - /** @format uri */ - url: string; - users: { - avatar_url?: string; - events_url?: string; - followers_url?: string; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - html_url?: string; - id?: number; - login?: string; - node_id?: string; - organizations_url?: string; - received_events_url?: string; - repos_url?: string; - site_admin?: boolean; - starred_url?: string; - subscriptions_url?: string; - type?: string; - url?: string; - }[]; - /** @format uri */ - users_url: string; -} + } -/** - * Branch Short - * Branch Short - */ -export interface BranchShort { - commit: { - sha: string; - url: string; - }; - name: string; - protected: boolean; -} + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } -/** - * Branch With Protection - * Branch With Protection - */ -export interface BranchWithProtection { - _links: { - html: string; - /** @format uri */ - self: string; + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - /** Commit */ - commit: Commit; - name: string; - /** @example ""mas*"" */ - pattern?: string; - protected: boolean; - /** Branch Protection */ - protection: BranchProtection; - /** @format uri */ - protection_url: string; - /** @example 1 */ - required_approving_review_count?: number; -} -/** - * Check Annotation - * Check Annotation - */ -export interface CheckAnnotation { - /** @example "warning" */ - annotation_level: string | null; - blob_href: string; - /** @example 10 */ - end_column: number | null; - /** @example 2 */ - end_line: number; - /** @example "Check your spelling for 'banaas'." */ - message: string | null; - /** @example "README.md" */ - path: string; - /** @example "Do you mean 'bananas' or 'banana'?" */ - raw_details: string | null; - /** @example 5 */ - start_column: number | null; - /** @example 2 */ - start_line: number; - /** @example "Spell Checker" */ - title: string | null; -} + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); -/** - * CheckRun - * A check performed on the code of a given code change - */ -export interface CheckRun { - app: Integration | null; - check_suite: { - id: number; - } | null; - /** - * @format date-time - * @example "2018-05-04T01:14:52Z" - */ - completed_at: string | null; - /** @example "neutral" */ - conclusion: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required" | null; - /** @example "https://example.com" */ - details_url: string | null; - /** @example "42" */ - external_id: string | null; - /** - * The SHA of the commit that is being checked. - * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" - */ - head_sha: string; - /** @example "https://github.com/github/hello-world/runs/4" */ - html_url: string | null; - /** - * The id of the check. - * @example 21 - */ - id: number; - /** - * The name of the check. - * @example "test-coverage" - */ - name: string; - /** @example "MDg6Q2hlY2tSdW40" */ - node_id: string; - output: { - annotations_count: number; - /** @format uri */ - annotations_url: string; - summary: string | null; - text: string | null; - title: string | null; + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } }; - pull_requests: PullRequestMinimal[]; - /** - * @format date-time - * @example "2018-05-04T01:14:52Z" - */ - started_at: string | null; - /** - * The phase of the lifecycle that the check is currently in. - * @example "queued" - */ - status: "queued" | "in_progress" | "completed"; - /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ - url: string; -} -/** - * CheckSuite - * A suite of checks performed on the code of a given code change - */ -export interface CheckSuite { - /** @example "d6fde92930d4715a2b49857d24b940956b26d2d3" */ - after: string | null; - app: Integration | null; - /** @example "146e867f55c26428e5f9fade55a9bbf5e95a7912" */ - before: string | null; - check_runs_url: string; - /** @example "neutral" */ - conclusion: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required" | null; - /** @format date-time */ - created_at: string | null; - /** @example "master" */ - head_branch: string | null; - /** Simple Commit */ - head_commit: SimpleCommit; - /** - * The SHA of the head commit that is being checked. - * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" - */ - head_sha: string; - /** @example 5 */ - id: number; - latest_check_runs_count: number; - /** @example "MDEwOkNoZWNrU3VpdGU1" */ - node_id: string; - pull_requests: PullRequestMinimal[] | null; - /** Minimal Repository */ - repository: MinimalRepository; - /** @example "completed" */ - status: "queued" | "in_progress" | "completed" | null; - /** @format date-time */ - updated_at: string | null; - /** @example "https://api.github.com/repos/github/hello-world/check-suites/5" */ - url: string | null; -} + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; -/** - * Check Suite Preference - * Check suite configuration preferences for a repository. - */ -export interface CheckSuitePreference { - preferences: { - auto_trigger_checks?: { - app_id: number; - setting: boolean; - }[]; - }; - /** A git repository */ - repository: Repository; -} + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; -/** - * Clone Traffic - * Clone Traffic - */ -export interface CloneTraffic { - clones: Traffic[]; - /** @example 173 */ - count: number; - /** @example 128 */ - uniques: number; -} + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); -/** - * Code Frequency Stat - * Code Frequency Stat - */ -export type CodeFrequencyStat = number[]; + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } -/** - * Code Of Conduct - * Code Of Conduct - */ -export interface CodeOfConduct { - /** - * @example "# Contributor Covenant Code of Conduct - * - * ## Our Pledge - * - * In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - * - * ## Our Standards - * - * Examples of behavior that contributes to creating a positive environment include: - * - * * Using welcoming and inclusive language - * * Being respectful of differing viewpoints and experiences - * * Gracefully accepting constructive criticism - * * Focusing on what is best for the community - * * Showing empathy towards other community members - * - * Examples of unacceptable behavior by participants include: - * - * * The use of sexualized language or imagery and unwelcome sexual attention or advances - * * Trolling, insulting/derogatory comments, and personal or political attacks - * * Public or private harassment - * * Publishing others' private information, such as a physical or electronic address, without explicit permission - * * Other conduct which could reasonably be considered inappropriate in a professional setting - * - * ## Our Responsibilities - * - * Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response - * to any instances of unacceptable behavior. - * - * Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - * - * ## Scope - * - * This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, - * posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - * - * ## Enforcement - * - * Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - * - * Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - * - * ## Attribution - * - * This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - * - * [homepage]: http://contributor-covenant.org - * [version]: http://contributor-covenant.org/version/1/4/ - * " - */ - body?: string; - /** @format uri */ - html_url: string | null; - /** @example "contributor_covenant" */ - key: string; - /** @example "Contributor Covenant" */ - name: string; - /** - * @format uri - * @example "https://api.github.com/codes_of_conduct/contributor_covenant" - */ - url: string; + if (!response.ok) throw data; + return data; + }); + }; } /** - * Code Of Conduct Simple - * Code of Conduct Simple + * @title Adafruit IO + * @version 2.0.0 + * @baseUrl https://io.adafruit.com/api/v2 + * + * ### The Internet of Things for Everyone + * + * The Adafruit IO HTTP API provides access to your Adafruit IO data from any programming language or hardware environment that can speak HTTP. The easiest way to get started is with [an Adafruit IO learn guide](https://learn.adafruit.com/series/adafruit-io-basics) and [a simple Internet of Things capable device like the Feather Huzzah](https://www.adafruit.com/product/2821). + * + * This API documentation is hosted on GitHub Pages and is available at [https://github.com/adafruit/io-api](https://github.com/adafruit/io-api). For questions or comments visit the [Adafruit IO Forums](https://forums.adafruit.com/viewforum.php?f=56) or the [adafruit-io channel on the Adafruit Discord server](https://discord.gg/adafruit). + * + * #### Authentication + * + * Authentication for every API request happens through the \`X-AIO-Key\` header or query parameter and your IO API key. A simple cURL request to get all available feeds for a user with the username "io_username" and the key "io_key_12345" could look like this: + * + * $ curl -H "X-AIO-Key: io_key_12345" https://io.adafruit.com/api/v2/io_username/feeds + * + * Or like this: + * + * $ curl "https://io.adafruit.com/api/v2/io_username/feeds?X-AIO-Key=io_key_12345 + * + * Using the node.js [request](https://github.com/request/request) library, IO HTTP requests are as easy as: + * + * \`\`\`js + * var request = require('request'); + * + * var options = { + * url: 'https://io.adafruit.com/api/v2/io_username/feeds', + * headers: { + * 'X-AIO-Key': 'io_key_12345', + * 'Content-Type': 'application/json' + * } + * }; + * + * function callback(error, response, body) { + * if (!error && response.statusCode == 200) { + * var feeds = JSON.parse(body); + * console.log(feeds.length + " FEEDS AVAILABLE"); + * + * feeds.forEach(function (feed) { + * console.log(feed.name, feed.key); + * }) + * } + * } + * + * request(options, callback); + * \`\`\` + * + * Using the ESP8266 Arduino HTTPClient library, an HTTPS GET request would look like this (replacing \`---\` with your own values in the appropriate locations): + * + * \`\`\`arduino + * /// based on + * /// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/Authorization/Authorization.ino + * + * #include + * #include + * #include + * #include + * + * ESP8266WiFiMulti WiFiMulti; + * + * const char* ssid = "---"; + * const char* password = "---"; + * + * const char* host = "io.adafruit.com"; + * + * const char* io_key = "---"; + * const char* path_with_username = "/api/v2/---/dashboards"; + * + * // Use web browser to view and copy + * // SHA1 fingerprint of the certificate + * const char* fingerprint = "77 00 54 2D DA E7 D8 03 27 31 23 99 EB 27 DB CB A5 4C 57 18"; + * + * void setup() { + * Serial.begin(115200); + * + * for(uint8_t t = 4; t > 0; t--) { + * Serial.printf("[SETUP] WAIT %d...\\n", t); + * Serial.flush(); + * delay(1000); + * } + * + * WiFi.mode(WIFI_STA); + * WiFiMulti.addAP(ssid, password); + * + * // wait for WiFi connection + * while(WiFiMulti.run() != WL_CONNECTED) { + * Serial.print('.'); + * delay(1000); + * } + * + * Serial.println("[WIFI] connected!"); + * + * HTTPClient http; + * + * // start request with URL and TLS cert fingerprint for verification + * http.begin("https://" + String(host) + String(path_with_username), fingerprint); + * + * // IO API authentication + * http.addHeader("X-AIO-Key", io_key); + * + * // start connection and send HTTP header + * int httpCode = http.GET(); + * + * // httpCode will be negative on error + * if(httpCode > 0) { + * // HTTP header has been send and Server response header has been handled + * Serial.printf("[HTTP] GET response: %d\\n", httpCode); + * + * // HTTP 200 OK + * if(httpCode == HTTP_CODE_OK) { + * String payload = http.getString(); + * Serial.println(payload); + * } + * + * http.end(); + * } + * } + * + * void loop() {} + * \`\`\` + * + * #### Client Libraries + * + * We have client libraries to help you get started with your project: [Python](https://github.com/adafruit/io-client-python), [Ruby](https://github.com/adafruit/io-client-ruby), [Arduino C++](https://github.com/adafruit/Adafruit_IO_Arduino), [Javascript](https://github.com/adafruit/adafruit-io-node), and [Go](https://github.com/adafruit/io-client-go) are available. They're all open source, so if they don't already do what you want, you can fork and add any feature you'd like. + * */ -export interface CodeOfConductSimple { - /** @format uri */ - html_url: string | null; - /** @example "citizen_code_of_conduct" */ - key: string; - /** @example "Citizen Code of Conduct" */ - name: string; - /** - * @format uri - * @example "https://api.github.com/codes_of_conduct/citizen_code_of_conduct" - */ - url: string; -} +export class Api extends HttpClient { + user = { + /** + * No description + * + * @tags Users + * @name CurrentUser + * @summary Get information about the current user + * @request GET:/user + * @secure + */ + currentUser: (params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + }; + webhooks = { + /** + * No description + * + * @tags Webhooks, Data + * @name CreateWebhookFeedData + * @summary Send data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token + * @secure + */ + createWebhookFeedData: ( + token: string, + payload: { + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/webhooks/feed/\${token}\`, + method: "POST", + body: payload, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export interface CodeScanningAlertCodeScanningAlert { - /** The time that the alert was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - created_at: AlertCreatedAt; - /** The time that the alert was dismissed in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - dismissed_at: CodeScanningAlertDismissedAt; - /** Simple User */ - dismissed_by: SimpleUser; - /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ - dismissed_reason: CodeScanningAlertDismissedReason; - /** The GitHub URL of the alert resource. */ - html_url: AlertHtmlUrl; - instances: CodeScanningAlertInstances; - /** The security alert number. */ - number: AlertNumber; - rule: CodeScanningAlertRule; - /** State of a code scanning alert. */ - state: CodeScanningAlertState; - tool: CodeScanningAnalysisTool; - /** The REST API URL of the alert resource. */ - url: AlertUrl; -} + /** + * @description The raw data webhook receiver accepts POST requests and stores the raw request body on your feed. This is useful when you don't have control of the webhook sender. If feed history is turned on, payloads will be truncated at 1024 bytes. If feed history is turned off, payloads will be truncated at 100KB. + * + * @tags Webhooks, Data + * @name CreateRawWebhookFeedData + * @summary Send arbitrary data to a feed via webhook URL. + * @request POST:/webhooks/feed/:token/raw + * @secure + */ + createRawWebhookFeedData: (token: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/feed/\${token}/raw\`, + method: "POST", + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + }; + username = { + /** + * @description Delete all your activities. + * + * @tags Activities + * @name DestroyActivities + * @summary All activities for current user + * @request DELETE:/{username}/activities + * @secure + */ + destroyActivities: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/activities\`, + method: "DELETE", + secure: true, + ...params, + }), -export interface CodeScanningAlertCodeScanningAlertItems { - /** The time that the alert was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - created_at: AlertCreatedAt; - /** The time that the alert was dismissed in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - dismissed_at: CodeScanningAlertDismissedAt; - /** Simple User */ - dismissed_by: SimpleUser; - /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ - dismissed_reason: CodeScanningAlertDismissedReason; - /** The GitHub URL of the alert resource. */ - html_url: AlertHtmlUrl; - /** The security alert number. */ - number: AlertNumber; - rule: CodeScanningAlertRule; - /** State of a code scanning alert. */ - state: CodeScanningAlertState; - tool: CodeScanningAnalysisTool; - /** The REST API URL of the alert resource. */ - url: AlertUrl; -} + /** + * @description The Activities endpoint returns information about the user's activities. + * + * @tags Activities + * @name AllActivities + * @summary All activities for current user + * @request GET:/{username}/activities + * @secure + */ + allActivities: ( + username: string, + query?: { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/activities\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * The time that the alert was dismissed in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. - * @format date-time - */ -export type CodeScanningAlertDismissedAt = string | null; + /** + * @description The Activities endpoint returns information about the user's activities. + * + * @tags Activities + * @name GetActivity + * @summary Get activities by type for current user + * @request GET:/{username}/activities/{type} + * @secure + */ + getActivity: ( + username: string, + type: string, + query?: { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/activities/\${type}\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ -export type CodeScanningAlertDismissedReason = "false positive" | "won't fix" | "used in tests" | null; + /** + * @description The Dashboards endpoint returns information about the user's dashboards. + * + * @tags Dashboards + * @name AllDashboards + * @summary All dashboards for current user + * @request GET:/{username}/dashboards + * @secure + */ + allDashboards: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ -export type CodeScanningAlertEnvironment = string; + /** + * No description + * + * @tags Dashboards + * @name CreateDashboard + * @summary Create a new Dashboard + * @request POST:/{username}/dashboards + * @secure + */ + createDashboard: (username: string, dashboard: Dashboard, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards\`, + method: "POST", + body: dashboard, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export type CodeScanningAlertInstances = { - /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ - analysis_key?: CodeScanningAnalysisAnalysisKey; - /** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ - environment?: CodeScanningAlertEnvironment; - matrix_vars?: string | null; - /** The full Git reference, formatted as `refs/heads/`. */ - ref?: CodeScanningAlertRef; - /** State of a code scanning alert. */ - state?: CodeScanningAlertState; -}[]; + /** + * @description The Blocks endpoint returns information about the user's blocks. + * + * @tags Blocks + * @name AllBlocks + * @summary All blocks for current user + * @request GET:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + allBlocks: (username: string, dashboardId: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** The full Git reference, formatted as `refs/heads/`. */ -export type CodeScanningAlertRef = string; + /** + * No description + * + * @tags Blocks + * @name CreateBlock + * @summary Create a new Block + * @request POST:/{username}/dashboards/{dashboard_id}/blocks + * @secure + */ + createBlock: (username: string, dashboardId: string, block: Block, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks\`, + method: "POST", + body: block, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export interface CodeScanningAlertRule { - /** A short description of the rule used to detect the alert. */ - description?: string; - /** A unique identifier for the rule used to detect the alert. */ - id?: string | null; - /** The severity of the alert. */ - severity?: "none" | "note" | "warning" | "error" | null; -} + /** + * No description + * + * @tags Blocks + * @name DestroyBlock + * @summary Delete an existing Block + * @request DELETE:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + destroyBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), -/** Sets the state of the code scanning alert. Can be one of `open` or `dismissed`. You must provide `dismissed_reason` when you set the state to `dismissed`. */ -export enum CodeScanningAlertSetState { - Open = "open", - Dismissed = "dismissed", -} + /** + * No description + * + * @tags Blocks + * @name GetBlock + * @summary Returns Block based on ID + * @request GET:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + getBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** State of a code scanning alert. */ -export enum CodeScanningAlertState { - Open = "open", - Dismissed = "dismissed", - Fixed = "fixed", -} + /** + * No description + * + * @tags Blocks + * @name UpdateBlock + * @summary Update properties of an existing Block + * @request PATCH:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + updateBlock: ( + username: string, + dashboardId: string, + id: string, + block: { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "PATCH", + body: block, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ -export type CodeScanningAnalysisAnalysisKey = string; + /** + * No description + * + * @tags Blocks + * @name ReplaceBlock + * @summary Replace an existing Block + * @request PUT:/{username}/dashboards/{dashboard_id}/blocks/{id} + * @secure + */ + replaceBlock: ( + username: string, + dashboardId: string, + id: string, + block: { + block_feeds?: { + feed_id?: string; + group_id?: string; + }[]; + column?: number; + dashboard_id?: number; + description?: string; + key?: string; + name?: string; + properties?: object; + row?: number; + size_x?: number; + size_y?: number; + visual_type?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${dashboardId}/blocks/\${id}\`, + method: "PUT", + body: block, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export interface CodeScanningAnalysisCodeScanningAnalysis { - /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ - analysis_key: CodeScanningAnalysisAnalysisKey; - /** The commit SHA of the code scanning analysis file. */ - commit_sha: CodeScanningAnalysisCommitSha; - /** The time that the analysis was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - created_at: CodeScanningAnalysisCreatedAt; - /** Identifies the variable values associated with the environment in which this analysis was performed. */ - environment: CodeScanningAnalysisEnvironment; - /** @example "error reading field xyz" */ - error: string; - /** The full Git reference of the code scanning analysis file, formatted as `refs/heads/`. */ - ref: CodeScanningAnalysisRef; - /** The name of the tool used to generate the code scanning analysis alert. */ - tool_name: CodeScanningAnalysisToolName; -} + /** + * No description + * + * @tags Dashboards + * @name DestroyDashboard + * @summary Delete an existing Dashboard + * @request DELETE:/{username}/dashboards/{id} + * @secure + */ + destroyDashboard: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), -/** - * The commit SHA of the code scanning analysis file. - * @minLength 40 - * @maxLength 40 - * @pattern ^[0-9a-fA-F]+$ - */ -export type CodeScanningAnalysisCommitSha = string; + /** + * No description + * + * @tags Dashboards + * @name GetDashboard + * @summary Returns Dashboard based on ID + * @request GET:/{username}/dashboards/{id} + * @secure + */ + getDashboard: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * The time that the analysis was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. - * @format date-time - */ -export type CodeScanningAnalysisCreatedAt = string; + /** + * No description + * + * @tags Dashboards + * @name UpdateDashboard + * @summary Update properties of an existing Dashboard + * @request PATCH:/{username}/dashboards/{id} + * @secure + */ + updateDashboard: ( + username: string, + id: string, + dashboard: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "PATCH", + body: dashboard, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** Identifies the variable values associated with the environment in which this analysis was performed. */ -export type CodeScanningAnalysisEnvironment = string; + /** + * No description + * + * @tags Dashboards + * @name ReplaceDashboard + * @summary Replace an existing Dashboard + * @request PUT:/{username}/dashboards/{id} + * @secure + */ + replaceDashboard: ( + username: string, + id: string, + dashboard: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/dashboards/\${id}\`, + method: "PUT", + body: dashboard, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** The full Git reference of the code scanning analysis file, formatted as `refs/heads/`. */ -export type CodeScanningAnalysisRef = string; + /** + * @description The Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed. + * + * @tags Feeds + * @name AllFeeds + * @summary All feeds for current user + * @request GET:/{username}/feeds + * @secure + */ + allFeeds: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [`gzip`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ -export type CodeScanningAnalysisSarifFile = string; + /** + * No description + * + * @tags Feeds + * @name CreateFeed + * @summary Create a new Feed + * @request POST:/{username}/feeds + * @secure + */ + createFeed: ( + username: string, + feed: Feed, + query?: { + group_key?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds\`, + method: "POST", + query: query, + body: feed, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export interface CodeScanningAnalysisTool { - /** The name of the tool used to generate the code scanning analysis alert. */ - name?: CodeScanningAnalysisToolName; - /** The version of the tool used to detect the alert. */ - version?: string | null; -} + /** + * No description + * + * @tags Feeds + * @name DestroyFeed + * @summary Delete an existing Feed + * @request DELETE:/{username}/feeds/{feed_key} + * @secure + */ + destroyFeed: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "DELETE", + secure: true, + ...params, + }), -/** The name of the tool used to generate the code scanning analysis alert. */ -export type CodeScanningAnalysisToolName = string; + /** + * @description Returns feed based on the feed key + * + * @tags Feeds + * @name GetFeed + * @summary Get feed by feed key + * @request GET:/{username}/feeds/{feed_key} + * @secure + */ + getFeed: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Code Search Result Item - * Code Search Result Item - */ -export interface CodeSearchResultItem { - file_size?: number; - /** @format uri */ - git_url: string; - /** @format uri */ - html_url: string; - language?: string | null; - /** @format date-time */ - last_modified_at?: string; - /** @example ["73..77","77..78"] */ - line_numbers?: string[]; - name: string; - path: string; - /** Minimal Repository */ - repository: MinimalRepository; - score: number; - sha: string; - text_matches?: SearchResultTextMatches; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags Feeds + * @name UpdateFeed + * @summary Update properties of an existing Feed + * @request PATCH:/{username}/feeds/{feed_key} + * @secure + */ + updateFeed: ( + username: string, + feedKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "PATCH", + body: feed, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Collaborator - * Collaborator - */ -export interface Collaborator { - /** - * @format uri - * @example "https://github.com/images/error/octocat_happy.gif" - */ - avatar_url: string; - /** @example "https://api.github.com/users/octocat/events{/privacy}" */ - events_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/followers" - */ - followers_url: string; - /** @example "https://api.github.com/users/octocat/following{/other_user}" */ - following_url: string; - /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ - gists_url: string; - /** @example "41d064eb2195891e12d0413f63227ea7" */ - gravatar_id: string | null; - /** - * @format uri - * @example "https://github.com/octocat" - */ - html_url: string; - /** @example 1 */ - id: number; - /** @example "octocat" */ - login: string; - /** @example "MDQ6VXNlcjE=" */ - node_id: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/orgs" - */ - organizations_url: string; - permissions?: { - admin: boolean; - pull: boolean; - push: boolean; - }; - /** - * @format uri - * @example "https://api.github.com/users/octocat/received_events" - */ - received_events_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/repos" - */ - repos_url: string; - site_admin: boolean; - /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ - starred_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/subscriptions" - */ - subscriptions_url: string; - /** @example "User" */ - type: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat" - */ - url: string; -} + /** + * No description + * + * @tags Feeds + * @name ReplaceFeed + * @summary Replace an existing Feed + * @request PUT:/{username}/feeds/{feed_key} + * @secure + */ + replaceFeed: ( + username: string, + feedKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}\`, + method: "PUT", + body: feed, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -export interface CombinedBillingUsage { - /** Numbers of days left in billing cycle. */ - days_left_in_billing_cycle: number; - /** Estimated storage space (GB) used in billing cycle. */ - estimated_paid_storage_for_month: number; - /** Estimated sum of free and paid storage space (GB) used in billing cycle. */ - estimated_storage_for_month: number; -} + /** + * No description + * + * @tags Data + * @name AllData + * @summary Get all data for the given feed + * @request GET:/{username}/feeds/{feed_key}/data + * @secure + */ + allData: ( + username: string, + feedKey: string, + query?: { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * Combined Commit Status - * Combined Commit Status - */ -export interface CombinedCommitStatus { - /** @format uri */ - commit_url: string; - /** Minimal Repository */ - repository: MinimalRepository; - sha: string; - state: string; - statuses: SimpleCommitStatus[]; - total_count: number; - /** @format uri */ - url: string; -} + /** + * @description Create new data records on the given feed. **NOTE:** when feed history is on, data \`value\` size is limited to 1KB, when feed history is turned off data value size is limited to 100KB. + * + * @tags Data + * @name CreateData + * @summary Create new Data + * @request POST:/{username}/feeds/{feed_key}/data + * @secure + */ + createData: ( + username: string, + feedKey: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data\`, + method: "POST", + body: datum, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Commit - * Commit - */ -export interface Commit { - author: SimpleUser | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e/comments" - */ - comments_url: string; - commit: { - author: GitUser | null; - /** @example 0 */ - comment_count: number; - committer: GitUser | null; - /** @example "Fix all the bugs" */ - message: string; - tree: { - /** @example "827efc6d56897b048c772eb4087f854f46256132" */ - sha: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/tree/827efc6d56897b048c772eb4087f854f46256132" - */ - url: string; - }; /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" + * No description + * + * @tags Data + * @name BatchCreateData + * @summary Create multiple new Data records + * @request POST:/{username}/feeds/{feed_key}/data/batch + * @secure */ - url: string; - verification?: Verification; - }; - committer: SimpleUser | null; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - /** @example ""https://api.github.com/repos/owner-3d68404b07d25daeb2d4a6bf/AAA_Public_Repo/contents/geometry.js?ref=c3956841a7cb7e8ba4a6fd923568d86958f01573"" */ - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - /** @example ""subdir/before_name.txt"" */ - previous_filename?: string; - raw_url?: string; - /** @example ""1e8e60ce9733d5283f7836fa602b6365a66b2567"" */ - sha?: string; - status?: string; - }[]; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - html_url: string; - /** @example "MDY6Q29tbWl0NmRjYjA5YjViNTc4NzVmMzM0ZjYxYWViZWQ2OTVlMmU0MTkzZGI1ZQ==" */ - node_id: string; - parents: { + batchCreateData: (username: string, feedKey: string, data: Data, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/batch\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + /** - * @format uri - * @example "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd" + * @description The Chart API is what we use on io.adafruit.com to populate charts over varying timespans with a consistent number of data points. The maximum number of points returned is 480. This API works by aggregating slices of time into a single value by averaging. All time-based parameters are optional, if none are given it will default to 1 hour at the finest-grained resolution possible. + * + * @tags Data + * @name ChartData + * @summary Chart data for current feed + * @request GET:/{username}/feeds/{feed_key}/data/chart + * @secure */ - html_url?: string; - /** @example "7638417db6d59f3c431d3e1f261cc637155684cd" */ - sha: string; + chartData: ( + username: string, + feedKey: string, + query?: { + /** + * End time for filtering, returns records created before give time. + * @format date-time + */ + end_time?: string; + /** + * The number of hours the chart should cover. + * @format int32 + */ + hours?: number; + /** + * A resolution size in minutes. By giving a resolution value you will get back grouped data points aggregated over resolution-sized intervals. NOTE: time span is preferred over resolution, so if you request a span of time that includes more than max limit points you may get a larger resolution than you requested. Valid resolutions are 1, 5, 10, 30, 60, and 120. + * @format int32 + */ + resolution?: number; + /** + * Start time for filtering, returns records created after given time. + * @format date-time + */ + start_time?: string; + }, + params: RequestParams = {}, + ) => + this.request< + { + /** The names of the columns returned as data. */ + columns?: string[]; + /** The actual chart data. */ + data?: string[][]; + feed?: { + id?: number; + key?: string; + name?: string; + }; + parameters?: object; + }, + void + >({ + path: \`/\${username}/feeds/\${feedKey}/data/chart\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), + /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/commits/7638417db6d59f3c431d3e1f261cc637155684cd" + * @description Get the oldest data point in the feed. This request sets the queue pointer to the beginning of the feed. + * + * @tags Data + * @name FirstData + * @summary First Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/first + * @secure */ - url: string; - }[]; - /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ - sha: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - url: string; -} + firstData: ( + username: string, + feedKey: string, + query?: { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/first\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Commit Activity - * Commit Activity - */ -export interface CommitActivity { - /** @example [0,3,26,20,39,1,0] */ - days: number[]; - /** @example 89 */ - total: number; - /** @example 1336280400 */ - week: number; -} + /** + * @description Get the most recent data point in the feed. This request sets the queue pointer to the end of the feed. + * + * @tags Data + * @name LastData + * @summary Last Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/last + * @secure + */ + lastData: ( + username: string, + feedKey: string, + query?: { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/last\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Commit Comment - * Commit Comment - */ -export interface CommitComment { - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - body: string; - commit_id: string; - /** @format date-time */ - created_at: string; - /** @format uri */ - html_url: string; - id: number; - line: number | null; - node_id: string; - path: string | null; - position: number | null; - reactions?: ReactionRollup; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - user: SimpleUser | null; -} + /** + * @description Get the next newest data point in the feed. If queue processing hasn't been started, the first data point in the feed will be returned. + * + * @tags Data + * @name NextData + * @summary Next Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/next + * @secure + */ + nextData: ( + username: string, + feedKey: string, + query?: { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/next\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Commit Comparison - * Commit Comparison - */ -export interface CommitComparison { - /** @example 4 */ - ahead_by: number; - /** Commit */ - base_commit: Commit; - /** @example 5 */ - behind_by: number; - commits: Commit[]; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/compare/master...topic.diff" - */ - diff_url: string; - files: DiffEntry[]; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/compare/master...topic" - */ - html_url: string; - /** Commit */ - merge_base_commit: Commit; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/compare/master...topic.patch" - */ - patch_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/compare/octocat:bbcd538c8e72b8c175046e27cc8f907076331401...octocat:0328041d1152db8ae77652d1618a02e57f745f17" - */ - permalink_url: string; - /** @example "ahead" */ - status: "diverged" | "ahead" | "behind" | "identical"; - /** @example 6 */ - total_commits: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/compare/master...topic" - */ - url: string; -} + /** + * @description Get the previously processed data point in the feed. NOTE: this method doesn't move the processing queue pointer. + * + * @tags Data + * @name PreviousData + * @summary Previous Data in Queue + * @request GET:/{username}/feeds/{feed_key}/data/previous + * @secure + */ + previousData: ( + username: string, + feedKey: string, + query?: { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/previous\`, + method: "GET", + query: query, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Commit Search Result Item - * Commit Search Result Item - */ -export interface CommitSearchResultItem { - author: SimpleUser | null; - /** @format uri */ - comments_url: string; - commit: { - author: { - /** @format date-time */ - date: string; - email: string; - name: string; - }; - comment_count: number; - committer: GitUser | null; - message: string; - tree: { - sha: string; - /** @format uri */ - url: string; - }; - /** @format uri */ - url: string; - verification?: Verification; - }; - committer: GitUser | null; - /** @format uri */ - html_url: string; - node_id: string; - parents: { - html_url?: string; - sha?: string; - url?: string; - }[]; - /** Minimal Repository */ - repository: MinimalRepository; - score: number; - sha: string; - text_matches?: SearchResultTextMatches; - /** @format uri */ - url: string; -} + /** + * @description Get the most recent data point in the feed in an MQTT compatible CSV format: \`value,lat,lon,ele\` + * + * @tags Data + * @name RetainData + * @summary Last Data in MQTT CSV format + * @request GET:/{username}/feeds/{feed_key}/data/retain + * @secure + */ + retainData: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/retain\`, + method: "GET", + secure: true, + type: ContentType.Json, + ...params, + }), -/** Community Health File */ -export interface CommunityHealthFile { - /** @format uri */ - html_url: string; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags Data + * @name DestroyData + * @summary Delete existing Data + * @request DELETE:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + destroyData: (username: string, feedKey: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), -/** - * Community Profile - * Community Profile - */ -export interface CommunityProfile { - /** @example true */ - content_reports_enabled?: boolean; - /** @example "My first repository on GitHub!" */ - description: string | null; - /** @example "example.com" */ - documentation: string | null; - files: { - code_of_conduct: CodeOfConductSimple | null; - contributing: CommunityHealthFile | null; - issue_template: CommunityHealthFile | null; - license: LicenseSimple | null; - pull_request_template: CommunityHealthFile | null; - readme: CommunityHealthFile | null; - }; - /** @example 100 */ - health_percentage: number; - /** - * @format date-time - * @example "2017-02-28T19:09:29Z" - */ - updated_at: string | null; -} + /** + * No description + * + * @tags Data + * @name GetData + * @summary Returns data based on feed key + * @request GET:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + getData: ( + username: string, + feedKey: string, + id: string, + query?: { + /** List of Data record fields to include in response as comma separated list. Acceptable values are: \`value\`, \`lat\`, \`lon\`, \`ele\`, \`id\`, and \`created_at\`. */ + include?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * Content Directory - * A list of directory items - */ -export type ContentDirectory = { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - content?: string; - /** @format uri */ - download_url: string | null; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - type: string; - /** @format uri */ - url: string; -}[]; + /** + * No description + * + * @tags Data + * @name UpdateData + * @summary Update properties of existing Data + * @request PATCH:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + updateData: ( + username: string, + feedKey: string, + id: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "PATCH", + body: datum, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Content File - * Content File - */ -export interface ContentFile { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - content: string; - /** @format uri */ - download_url: string | null; - encoding: string; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - /** @example ""git://example.com/defunkt/dotjs.git"" */ - submodule_git_url?: string; - /** @example ""actual/actual.md"" */ - target?: string; - type: string; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags Data + * @name ReplaceData + * @summary Replace existing Data + * @request PUT:/{username}/feeds/{feed_key}/data/{id} + * @secure + */ + replaceData: ( + username: string, + feedKey: string, + id: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/data/\${id}\`, + method: "PUT", + body: datum, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * ContentReferenceAttachment - * Content Reference attachments allow you to provide context around URLs posted in comments - */ -export interface ContentReferenceAttachment { - /** - * The body of the attachment - * @maxLength 262144 - * @example "Body of the attachment" - */ - body: string; - /** - * The ID of the attachment - * @example 21 - */ - id: number; - /** - * The node_id of the content attachment - * @example "MDE3OkNvbnRlbnRBdHRhY2htZW50MjE=" - */ - node_id?: string; - /** - * The title of the attachment - * @maxLength 1024 - * @example "Title of the attachment" - */ - title: string; -} + /** + * @description Returns more detailed feed record based on the feed key + * + * @tags Feeds + * @name GetFeedDetails + * @summary Get detailed feed by feed key + * @request GET:/{username}/feeds/{feed_key}/details + * @secure + */ + getFeedDetails: (username: string, feedKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/feeds/\${feedKey}/details\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Symlink Content - * An object describing a symlink - */ -export interface ContentSubmodule { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - /** @format uri */ - download_url: string | null; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - /** @format uri */ - submodule_git_url: string; - type: string; - /** @format uri */ - url: string; -} + /** + * @description The Groups endpoint returns information about the user's groups. The response includes the latest value of each feed in the group, and other metadata about the group. + * + * @tags Groups + * @name AllGroups + * @summary All groups for current user + * @request GET:/{username}/groups + * @secure + */ + allGroups: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Symlink Content - * An object describing a symlink - */ -export interface ContentSymlink { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - /** @format uri */ - download_url: string | null; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - target: string; - type: string; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags Groups + * @name CreateGroup + * @summary Create a new Group + * @request POST:/{username}/groups + * @secure + */ + createGroup: (username: string, group: Group, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups\`, + method: "POST", + body: group, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Content Traffic - * Content Traffic - */ -export interface ContentTraffic { - /** @example 3542 */ - count: number; - /** @example "/github/hubot" */ - path: string; - /** @example "github/hubot: A customizable life embetterment robot." */ - title: string; - /** @example 2225 */ - uniques: number; -} + /** + * No description + * + * @tags Groups + * @name DestroyGroup + * @summary Delete an existing Group + * @request DELETE:/{username}/groups/{group_key} + * @secure + */ + destroyGroup: (username: string, groupKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), -/** - * Content Tree - * Content Tree - */ -export interface ContentTree { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - /** @format uri */ - download_url: string | null; - entries?: { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - content?: string; - /** @format uri */ - download_url: string | null; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - type: string; - /** @format uri */ - url: string; - }[]; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - name: string; - path: string; - sha: string; - size: number; - type: string; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags Groups + * @name GetGroup + * @summary Returns Group based on ID + * @request GET:/{username}/groups/{group_key} + * @secure + */ + getGroup: (username: string, groupKey: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Contributor - * Contributor - */ -export interface Contributor { - /** @format uri */ - avatar_url?: string; - contributions: number; - email?: string; - events_url?: string; - /** @format uri */ - followers_url?: string; - following_url?: string; - gists_url?: string; - gravatar_id?: string | null; - /** @format uri */ - html_url?: string; - id?: number; - login?: string; - name?: string; - node_id?: string; - /** @format uri */ - organizations_url?: string; - /** @format uri */ - received_events_url?: string; - /** @format uri */ - repos_url?: string; - site_admin?: boolean; - starred_url?: string; - /** @format uri */ - subscriptions_url?: string; - type: string; - /** @format uri */ - url?: string; -} + /** + * No description + * + * @tags Groups + * @name UpdateGroup + * @summary Update properties of an existing Group + * @request PATCH:/{username}/groups/{group_key} + * @secure + */ + updateGroup: ( + username: string, + groupKey: string, + group: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "PATCH", + body: group, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Contributor Activity - * Contributor Activity - */ -export interface ContributorActivity { - author: SimpleUser | null; - /** @example 135 */ - total: number; - /** @example [{"w":"1367712000","a":6898,"d":77,"c":10}] */ - weeks: { - a?: number; - c?: number; - d?: number; - w?: string; - }[]; -} + /** + * No description + * + * @tags Groups + * @name ReplaceGroup + * @summary Replace an existing Group + * @request PUT:/{username}/groups/{group_key} + * @secure + */ + replaceGroup: ( + username: string, + groupKey: string, + group: { + description?: string; + key?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}\`, + method: "PUT", + body: group, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Credential Authorization - * Credential Authorization - */ -export interface CredentialAuthorization { - /** @example 12345678 */ - authorized_credential_id?: number | null; - /** - * The note given to the token. This will only be present when the credential is a token. - * @example "my token" - */ - authorized_credential_note?: string | null; - /** - * The title given to the ssh key. This will only be present when the credential is an ssh key. - * @example "my ssh key" - */ - authorized_credential_title?: string | null; - /** - * Date when the credential was last accessed. May be null if it was never accessed - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - credential_accessed_at?: string | null; - /** - * Date when the credential was authorized for use. - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - credential_authorized_at: string; - /** - * Unique identifier for the credential. - * @example 1 - */ - credential_id: number; - /** - * Human-readable description of the credential type. - * @example "SSH Key" - */ - credential_type: string; - /** - * Unique string to distinguish the credential. Only included in responses with credential_type of SSH Key. - * @example "jklmnop12345678" - */ - fingerprint?: string; - /** - * User login that owns the underlying credential. - * @example "monalisa" - */ - login: string; - /** - * List of oauth scopes the token has been granted. - * @example ["user","repo"] - */ - scopes?: string[]; - /** - * Last eight characters of the credential. Only included in responses with credential_type of personal access token. - * @example "12345678" - */ - token_last_eight?: string; -} + /** + * No description + * + * @tags Groups, Feeds + * @name AddFeedToGroup + * @summary Add an existing Feed to a Group + * @request POST:/{username}/groups/{group_key}/add + * @secure + */ + addFeedToGroup: ( + groupKey: string, + username: string, + query?: { + feed_key?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/add\`, + method: "POST", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * Deploy Key - * An SSH key granting access to a single repository. - */ -export interface DeployKey { - created_at: string; - id: number; - key: string; - read_only: boolean; - title: string; - url: string; - verified: boolean; -} + /** + * No description + * + * @tags Data + * @name CreateGroupData + * @summary Create new data for multiple feeds in a group + * @request POST:/{username}/groups/{group_key}/data + * @secure + */ + createGroupData: ( + username: string, + groupKey: string, + group_feed_data: { + /** Optional created_at timestamp which will be applied to all feed values created. */ + created_at?: string; + /** An array of feed data records with \`key\` and \`value\` properties. */ + feeds: { + key: string; + value: string; + }[]; + /** A location record with \`lat\`, \`lon\`, and [optional] \`ele\` properties. */ + location?: { + ele?: number; + lat: number; + lon: number; + }; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/data\`, + method: "POST", + body: group_feed_data, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Deployment - * A request for a specific ref(branch,sha,tag) to be deployed - */ -export interface Deployment { - /** - * @format date-time - * @example "2012-07-20T01:19:13Z" - */ - created_at: string; - creator: SimpleUser | null; - /** @example "Deploy request from hubot" */ - description: string | null; - /** - * Name for the target deployment environment. - * @example "production" - */ - environment: string; - /** - * Unique identifier of the deployment - * @example 42 - */ - id: number; - /** @example "MDEwOkRlcGxveW1lbnQx" */ - node_id: string; - /** @example "staging" */ - original_environment?: string; - payload: object; - performed_via_github_app?: Integration | null; - /** - * Specifies if the given environment is one that end-users directly interact with. Default: false. - * @example true - */ - production_environment?: boolean; - /** - * The ref to deploy. This can be a branch, tag, or sha. - * @example "topic-branch" - */ - ref: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example" - */ - repository_url: string; - /** @example "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d" */ - sha: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example/deployments/1/statuses" - */ - statuses_url: string; - /** - * Parameter to specify a task to execute - * @example "deploy" - */ - task: string; - /** - * Specifies if the given environment is will no longer exist at some point in the future. Default: false. - * @example true - */ - transient_environment?: boolean; - /** - * @format date-time - * @example "2012-07-20T01:19:13Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example/deployments/1" - */ - url: string; -} + /** + * @description The Group Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed, but only for feeds within the given group. + * + * @tags Groups, Feeds + * @name AllGroupFeeds + * @summary All feeds for current user in a given group + * @request GET:/{username}/groups/{group_key}/feeds + * @secure + */ + allGroupFeeds: (groupKey: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Deployment Status - * The status of a deployment. - */ -export interface DeploymentStatus { - /** - * @format date-time - * @example "2012-07-20T01:19:13Z" - */ - created_at: string; - creator: SimpleUser | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example/deployments/42" - */ - deployment_url: string; - /** - * A short description of the status. - * @maxLength 140 - * @default "" - * @example "Deployment finished successfully." - */ - description: string; - /** - * The environment of the deployment that the status is for. - * @default "" - * @example "production" - */ - environment?: string; - /** - * The URL for accessing your environment. - * @format uri - * @default "" - * @example "https://staging.example.com/" - */ - environment_url?: string; - /** @example 1 */ - id: number; - /** - * The URL to associate with this status. - * @format uri - * @default "" - * @example "https://example.com/deployment/42/output" - */ - log_url?: string; - /** @example "MDE2OkRlcGxveW1lbnRTdGF0dXMx" */ - node_id: string; - performed_via_github_app?: Integration | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example" - */ - repository_url: string; - /** - * The state of the status. - * @example "success" - */ - state: "error" | "failure" | "inactive" | "pending" | "success" | "queued" | "in_progress"; - /** - * Deprecated: the URL to associate with this status. - * @format uri - * @default "" - * @example "https://example.com/deployment/42/output" - */ - target_url: string; - /** - * @format date-time - * @example "2012-07-20T01:19:13Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example/deployments/42/statuses/1" - */ - url: string; -} + /** + * No description + * + * @tags Feeds + * @name CreateGroupFeed + * @summary Create a new Feed in a Group + * @request POST:/{username}/groups/{group_key}/feeds + * @secure + */ + createGroupFeed: ( + username: string, + groupKey: string, + feed: { + description?: string; + key?: string; + license?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds\`, + method: "POST", + body: feed, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Diff Entry - * Diff Entry - */ -export interface DiffEntry { - /** @example 103 */ - additions: number; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" - */ - blob_url: string; - /** @example 124 */ - changes: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - contents_url: string; - /** @example 21 */ - deletions: number; - /** @example "file1.txt" */ - filename: string; - /** @example "@@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test" */ - patch?: string; - /** @example "file.txt" */ - previous_filename?: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" - */ - raw_url: string; - /** @example "bbcd538c8e72b8c175046e27cc8f907076331401" */ - sha: string; - /** @example "added" */ - status: string; + /** + * No description + * + * @tags Data + * @name AllGroupFeedData + * @summary All data for current feed in a specific group + * @request GET:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + allGroupFeedData: ( + username: string, + groupKey: string, + feedKey: string, + query?: { + /** + * End time for filtering data. Returns data created before give time. + * @format date-time + */ + end_time?: string; + /** Limit the number of records returned. */ + limit?: number; + /** + * Start time for filtering data. Returns data created after given time. + * @format date-time + */ + start_time?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Data + * @name CreateGroupFeedData + * @summary Create new Data in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data + * @secure + */ + createGroupFeedData: ( + username: string, + groupKey: string, + feedKey: string, + datum: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data\`, + method: "POST", + body: datum, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Data + * @name BatchCreateGroupFeedData + * @summary Create multiple new Data records in a feed belonging to a particular group + * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data/batch + * @secure + */ + batchCreateGroupFeedData: ( + username: string, + groupKey: string, + feedKey: string, + data: { + /** @format dateTime */ + created_at?: string; + ele?: string; + epoch?: number; + lat?: string; + lon?: string; + value?: string; + }[], + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/feeds/\${feedKey}/data/batch\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Groups, Feeds + * @name RemoveFeedFromGroup + * @summary Remove a Feed from a Group + * @request POST:/{username}/groups/{group_key}/remove + * @secure + */ + removeFeedFromGroup: ( + groupKey: string, + username: string, + query?: { + feed_key?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/groups/\${groupKey}/remove\`, + method: "POST", + query: query, + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Users + * @name GetCurrentUserThrottle + * @summary Get the user's data rate limit and current activity level. + * @request GET:/{username}/throttle + * @secure + */ + getCurrentUserThrottle: (username: string, params: RequestParams = {}) => + this.request< + { + /** Actions taken inside the time window. */ + active_data_rate?: number; + /** Max possible actions inside the time window (usually 1 minute). */ + data_rate_limit?: number; + }, + void + >({ + path: \`/\${username}/throttle\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * @description The Tokens endpoint returns information about the user's tokens. + * + * @tags Tokens + * @name AllTokens + * @summary All tokens for current user + * @request GET:/{username}/tokens + * @secure + */ + allTokens: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name CreateToken + * @summary Create a new Token + * @request POST:/{username}/tokens + * @secure + */ + createToken: (username: string, token: Token, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens\`, + method: "POST", + body: token, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name DestroyToken + * @summary Delete an existing Token + * @request DELETE:/{username}/tokens/{id} + * @secure + */ + destroyToken: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name GetToken + * @summary Returns Token based on ID + * @request GET:/{username}/tokens/{id} + * @secure + */ + getToken: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name UpdateToken + * @summary Update properties of an existing Token + * @request PATCH:/{username}/tokens/{id} + * @secure + */ + updateToken: ( + username: string, + id: string, + token: { + token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "PATCH", + body: token, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Tokens + * @name ReplaceToken + * @summary Replace an existing Token + * @request PUT:/{username}/tokens/{id} + * @secure + */ + replaceToken: ( + username: string, + id: string, + token: { + token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/tokens/\${id}\`, + method: "PUT", + body: token, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description The Triggers endpoint returns information about the user's triggers. + * + * @tags Triggers + * @name AllTriggers + * @summary All triggers for current user + * @request GET:/{username}/triggers + * @secure + */ + allTriggers: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name CreateTrigger + * @summary Create a new Trigger + * @request POST:/{username}/triggers + * @secure + */ + createTrigger: (username: string, trigger: Trigger, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers\`, + method: "POST", + body: trigger, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name DestroyTrigger + * @summary Delete an existing Trigger + * @request DELETE:/{username}/triggers/{id} + * @secure + */ + destroyTrigger: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name GetTrigger + * @summary Returns Trigger based on ID + * @request GET:/{username}/triggers/{id} + * @secure + */ + getTrigger: (username: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name UpdateTrigger + * @summary Update properties of an existing Trigger + * @request PATCH:/{username}/triggers/{id} + * @secure + */ + updateTrigger: ( + username: string, + id: string, + trigger: { + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "PATCH", + body: trigger, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Triggers + * @name ReplaceTrigger + * @summary Replace an existing Trigger + * @request PUT:/{username}/triggers/{id} + * @secure + */ + replaceTrigger: ( + username: string, + id: string, + trigger: { + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/triggers/\${id}\`, + method: "PUT", + body: trigger, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description The Permissions endpoint returns information about the user's permissions. + * + * @tags Permissions + * @name AllPermissions + * @summary All permissions for current user and type + * @request GET:/{username}/{type}/{type_id}/acl + * @secure + */ + allPermissions: (username: string, type: string, typeId: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name CreatePermission + * @summary Create a new Permission + * @request POST:/{username}/{type}/{type_id}/acl + * @secure + */ + createPermission: ( + username: string, + type: string, + typeId: string, + permission: Permission, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl\`, + method: "POST", + body: permission, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name DestroyPermission + * @summary Delete an existing Permission + * @request DELETE:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + destroyPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name GetPermission + * @summary Returns Permission based on ID + * @request GET:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + getPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name UpdatePermission + * @summary Update properties of an existing Permission + * @request PATCH:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + updatePermission: ( + username: string, + type: string, + typeId: string, + id: string, + permission: { + /** @default "r" */ + mode?: "r" | "w" | "rw"; + /** @default "public" */ + scope?: "secret" | "public" | "user" | "organization"; + scope_value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "PATCH", + body: permission, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Permissions + * @name ReplacePermission + * @summary Replace an existing Permission + * @request PUT:/{username}/{type}/{type_id}/acl/{id} + * @secure + */ + replacePermission: ( + username: string, + type: string, + typeId: string, + id: string, + permission: { + /** @default "r" */ + mode?: "r" | "w" | "rw"; + /** @default "public" */ + scope?: "secret" | "public" | "user" | "organization"; + scope_value?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${username}/\${type}/\${typeId}/acl/\${id}\`, + method: "PUT", + body: permission, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + }; } +" +`; -/** - * Email - * Email +exports[`simple > 'additional-properties' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface Email { - /** - * @format email - * @example "octocat@github.com" - */ - email: string; - /** @example true */ - primary: boolean; - /** @example true */ - verified: boolean; - /** @example "public" */ - visibility: string | null; + +export interface Message { + code?: number; + text?: string; } -/** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ -export enum EnabledOrganizations { - All = "all", - None = "none", - Selected = "selected", +export type Messages = Record; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ -export enum EnabledRepositories { - All = "all", - None = "none", - Selected = "selected", +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Enterprise - * An enterprise account - */ -export interface Enterprise { - /** @format uri */ - avatar_url: string; - /** - * @format date-time - * @example "2019-01-26T19:01:12Z" - */ - created_at: string | null; - /** A short description of the enterprise. */ - description?: string | null; - /** - * @format uri - * @example "https://github.com/enterprises/octo-business" - */ - html_url: string; - /** - * Unique identifier of the enterprise - * @example 42 - */ - id: number; - /** - * The name of the enterprise. - * @example "Octo Business" - */ - name: string; - /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ - node_id: string; - /** - * The slug url identifier for the enterprise. - * @example "octo-business" - */ - slug: string; - /** - * @format date-time - * @example "2019-01-26T19:14:43Z" - */ - updated_at: string | null; - /** - * The enterprise's website URL. - * @format uri - */ - website_url?: string | null; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Event - * Event - */ -export interface Event { - /** Actor */ - actor: Actor; - /** @format date-time */ - created_at: string | null; - id: string; - /** Actor */ - org?: Actor; - payload: { - action: string; - /** Comments provide a way for people to collaborate on an issue. */ - comment?: IssueComment; - /** Issue Simple */ - issue?: IssueSimple; - pages?: { - action?: string; - html_url?: string; - page_name?: string; - sha?: string; - summary?: string | null; - title?: string; - }[]; - }; - public: boolean; - repo: { - id: number; - name: string; - /** @format uri */ - url: string; - }; - type: string | null; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Feed - * Feed - */ -export interface Feed { - _links: { - /** Hypermedia Link with Type */ - current_user?: LinkWithType; - /** Hypermedia Link with Type */ - current_user_actor?: LinkWithType; - /** Hypermedia Link with Type */ - current_user_organization?: LinkWithType; - current_user_organizations?: LinkWithType[]; - /** Hypermedia Link with Type */ - current_user_public?: LinkWithType; - /** Hypermedia Link with Type */ - security_advisories?: LinkWithType; - /** Hypermedia Link with Type */ - timeline: LinkWithType; - /** Hypermedia Link with Type */ - user: LinkWithType; +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); }; - /** @example "https://github.com/octocat.private.actor?token=abc123" */ - current_user_actor_url?: string; - /** @example "https://github.com/octocat-org" */ - current_user_organization_url?: string; - /** @example ["https://github.com/organizations/github/octocat.private.atom?token=abc123"] */ - current_user_organization_urls?: string[]; - /** @example "https://github.com/octocat" */ - current_user_public_url?: string; - /** @example "https://github.com/octocat.private?token=abc123" */ - current_user_url?: string; - /** @example "https://github.com/security-advisories" */ - security_advisories_url?: string; - /** @example "https://github.com/timeline" */ - timeline_url: string; - /** @example "https://github.com/{user}" */ - user_url: string; } /** - * File Commit - * File Commit + * @title Additional properties Example + * @version 1.0.0 */ -export interface FileCommit { - commit: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - node_id?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - verification?: { - payload?: string | null; - reason?: string; - signature?: string | null; - verified?: boolean; - }; +export class Api extends HttpClient {} +" +`; + +exports[`simple > 'additional-properties2' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Primitive = string | number | boolean | null; + +export type PrimitiveMap = Record; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - content: { - _links?: { - git?: string; - html?: string; - self?: string; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, }; - download_url?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - } | null; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Full Repository - * Full Repository + * @title No title */ -export interface FullRepository { - /** @example true */ - allow_merge_commit?: boolean; - /** @example true */ - allow_rebase_merge?: boolean; - /** @example true */ - allow_squash_merge?: boolean; - /** - * Whether anonymous git access is allowed. - * @default true - */ - anonymous_access_enabled?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ - archive_url: string; - archived: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ - assignees_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ - blobs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ - branches_url: string; - /** @example "https://github.com/octocat/Hello-World.git" */ - clone_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ - collaborators_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ - comments_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ - commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ - compare_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ - contents_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/contributors" - */ - contributors_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at: string; - /** @example "master" */ - default_branch: string; - /** @example false */ - delete_branch_on_merge?: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/deployments" - */ - deployments_url: string; - /** @example "This your first repo!" */ - description: string | null; - /** Returns whether or not this repository disabled. */ - disabled: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/downloads" - */ - downloads_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/events" - */ - events_url: string; - fork: boolean; - forks: number; - /** @example 9 */ - forks_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/forks" - */ - forks_url: string; - /** @example "octocat/Hello-World" */ - full_name: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ - git_commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ - git_refs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ - git_tags_url: string; - /** @example "git:github.com/octocat/Hello-World.git" */ - git_url: string; - /** @example true */ - has_downloads: boolean; - /** @example true */ - has_issues: boolean; - has_pages: boolean; - /** @example true */ - has_projects: boolean; - /** @example true */ - has_wiki: boolean; - /** - * @format uri - * @example "https://github.com" - */ - homepage: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/hooks" - */ - hooks_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World" - */ - html_url: string; - /** @example 1296269 */ - id: number; - /** @example true */ - is_template?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ - issue_comment_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ - issue_events_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ - issues_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ - keys_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ - labels_url: string; - language: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/languages" - */ - languages_url: string; - license: LicenseSimple | null; - master_branch?: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/merges" - */ - merges_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ - milestones_url: string; - /** - * @format uri - * @example "git:git.example.com/octocat/Hello-World" - */ - mirror_url: string | null; - /** @example "Hello-World" */ - name: string; - /** @example 0 */ - network_count: number; - /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ - node_id: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ - notifications_url: string; - open_issues: number; - /** @example 0 */ - open_issues_count: number; - organization?: SimpleUser | null; - owner: SimpleUser | null; - /** A git repository */ - parent?: Repository; - permissions?: { - admin: boolean; - pull: boolean; - push: boolean; +export class Api extends HttpClient {} +" +`; + +exports[`simple > 'allof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Cat = Pet & { + age?: number; + hunts?: boolean; +}; + +export type Dog = Pet & { + bark?: boolean; + breed: "Dingo" | "Husky" | "Retriever" | "Shepherd"; +}; + +export interface Pet { + pet_type: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); }; - private: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ - pulls_url: string; - /** - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - pushed_at: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ - releases_url: string; - /** @example 108 */ - size: number; - /** A git repository */ - source?: Repository; - /** @example "git@github.com:octocat/Hello-World.git" */ - ssh_url: string; - /** @example 80 */ - stargazers_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" - */ - stargazers_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ - statuses_url: string; - /** @example 42 */ - subscribers_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" - */ - subscribers_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscription" - */ - subscription_url: string; - /** - * @format uri - * @example "https://svn.github.com/octocat/Hello-World" - */ - svn_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/tags" - */ - tags_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/teams" - */ - teams_url: string; - temp_clone_token?: string | null; - template_repository?: Repository | null; - /** @example ["octocat","atom","electron","API"] */ - topics?: string[]; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ - trees_url: string; - /** - * @format date-time - * @example "2011-01-26T19:14:43Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World" - */ - url: string; - /** - * The repository visibility: public, private, or internal. - * @example "public" - */ - visibility?: string; - watchers: number; - /** @example 80 */ - watchers_count: number; } /** - * Gist Comment - * A comment made to a gist. + * @title Allof Example + * @version 1.0.0 */ -export interface GistComment { - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** - * The comment text. - * @maxLength 65535 - * @example "Body of the attachment" - */ - body: string; - /** - * @format date-time - * @example "2011-04-18T23:23:56Z" - */ - created_at: string; - /** @example 1 */ - id: number; - /** @example "MDExOkdpc3RDb21tZW50MQ==" */ - node_id: string; - /** - * @format date-time - * @example "2011-04-18T23:23:56Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/gists/a6db0bec360bb87e9418/comments/1" - */ - url: string; - user: SimpleUser | null; +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + petsPartialUpdate: (data: Cat | Dog, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), + }; } +" +`; -/** - * Gist Commit - * Gist Commit +exports[`simple > 'another-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface GistCommit { - change_status: { - additions?: number; - deletions?: number; - total?: number; - }; - /** - * @format date-time - * @example "2010-04-14T02:15:15Z" - */ - committed_at: string; + +/** some description */ +export interface Amount { + /** some description */ + currency: Currency; /** - * @format uri - * @example "https://api.github.com/gists/aa5a315d61ae9438b18d/57a7f021a713b1c5a6a199b54cc514735d2d462f" + * some description + * @format double + * @min 0.01 + * @max 1000000000000000 */ - url: string; - user: SimpleUser | null; - /** @example "57a7f021a713b1c5a6a199b54cc514735d2d462f" */ - version: string; + value: number; } /** - * Gist Simple - * Gist Simple + * An uploaded response + * Describes the result of uploading an image resource + * @example {"code":0,"type":"type","message":"message"} */ -export interface GistSimple { - comments?: number; - comments_url?: string; - commits_url?: string; - created_at?: string; - description?: string | null; - files?: Record< - string, - { - content?: string; - filename?: string; - language?: string; - raw_url?: string; - size?: number; - truncated?: boolean; - type?: string; - } | null - >; - forks_url?: string; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - node_id?: string; - /** Simple User */ - owner?: SimpleUser; - public?: boolean; - truncated?: boolean; - updated_at?: string; - url?: string; - user?: string | null; +export interface ApiResponse { + /** @format int32 */ + code?: number; + message?: string; + type?: string; } /** - * Git Commit - * Low-level Git commit operations within a repository + * Pet category + * A category for a pet + * @example {"name":"name","id":6} */ -export interface GitCommit { - /** Identifying information for the git-user */ - author: { - /** - * Timestamp of the commit - * @format date-time - * @example "2014-08-09T08:02:04+12:00" - */ - date: string; - /** - * Git email address of the user - * @example "monalisa.octocat@example.com" - */ - email: string; - /** - * Name of the git user - * @example "Monalisa Octocat" - */ - name: string; - }; - /** Identifying information for the git-user */ - committer: { - /** - * Timestamp of the commit - * @format date-time - * @example "2014-08-09T08:02:04+12:00" - */ - date: string; - /** - * Git email address of the user - * @example "monalisa.octocat@example.com" - */ - email: string; - /** - * Name of the git user - * @example "Monalisa Octocat" - */ - name: string; - }; - /** @format uri */ - html_url: string; - /** - * Message describing the purpose of the commit - * @example "Fix #42" - */ - message: string; - node_id: string; - parents: { - /** @format uri */ - html_url: string; - /** - * SHA for the commit - * @example "7638417db6d59f3c431d3e1f261cc637155684cd" - */ - sha: string; - /** @format uri */ - url: string; - }[]; - /** - * SHA for the commit - * @example "7638417db6d59f3c431d3e1f261cc637155684cd" - */ - sha: string; - tree: { - /** - * SHA for the commit - * @example "7638417db6d59f3c431d3e1f261cc637155684cd" - */ - sha: string; - /** @format uri */ - url: string; - }; - /** @format uri */ - url: string; - verification: { - payload: string | null; - reason: string; - signature: string | null; - verified: boolean; - }; +export interface Category { + /** @format int64 */ + id?: number; + name?: string; } /** - * Git Reference - * Git references within a repository + * some description + * @pattern ^[A-Z]{3,3}$ */ -export interface GitRef { - node_id: string; - object: { - /** - * SHA for the reference - * @minLength 40 - * @maxLength 40 - * @example "7638417db6d59f3c431d3e1f261cc637155684cd" - */ - sha: string; - type: string; - /** @format uri */ - url: string; - }; - ref: string; - /** @format uri */ - url: string; -} +export type Currency = string; /** - * Git Tag - * Metadata for a Git tag + * Pet Order + * An order for a pets from the pet store + * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} */ -export interface GitTag { - /** - * Message describing the purpose of the tag - * @example "Initial public release" - */ - message: string; - /** @example "MDM6VGFnOTQwYmQzMzYyNDhlZmFlMGY5ZWU1YmM3YjJkNWM5ODU4ODdiMTZhYw==" */ - node_id: string; - object: { - sha: string; - type: string; - /** @format uri */ - url: string; - }; - /** @example "940bd336248efae0f9ee5bc7b2d5c985887b16ac" */ - sha: string; - /** - * Name of the tag - * @example "v0.0.1" - */ - tag: string; - tagger: { - date: string; - email: string; - name: string; - }; - /** - * URL for the tag - * @format uri - * @example "https://api.github.com/repositories/42/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac" - */ - url: string; - verification?: Verification; +export interface Order { + /** @default false */ + complete?: boolean; + /** @format int64 */ + id?: number; + /** @format int64 */ + petId?: number; + /** @format int32 */ + quantity?: number; + /** @format date-time */ + shipDate?: string; + /** Order Status */ + status?: "placed" | "approved" | "delivered" | null; } /** - * Git Tree - * The hierarchy between files in a Git repository. + * a Pet + * A pet for sale in the pet store + * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} */ -export interface GitTree { - sha: string; - /** - * Objects specifying a tree structure - * @example [{"path":"file.rb","mode":"100644","type":"blob","size":30,"sha":"44b4fc6d56897b048c772eb4087f854f46256132","url":"https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132","properties":{"path":{"type":"string"},"mode":{"type":"string"},"type":{"type":"string"},"size":{"type":"integer"},"sha":{"type":"string"},"url":{"type":"string"}},"required":["path","mode","type","sha","url","size"]}] - */ - tree: { - /** @example "040000" */ - mode?: string; - /** @example "test/file.rb" */ - path?: string; - /** @example "23f6827669e43831def8a7ad935069c8bd418261" */ - sha?: string; - /** @example 12 */ - size?: number; - /** @example "tree" */ - type?: string; - /** @example "https://api.github.com/repos/owner-482f3203ecf01f67e9deb18e/BBB_Private_Repo/git/blobs/23f6827669e43831def8a7ad935069c8bd418261" */ - url?: string; - }[]; - truncated: boolean; - /** @format uri */ - url: string; +export interface Pet { + /** A category for a pet */ + category?: Category; + /** @format int64 */ + id?: number; + /** @example "doggie" */ + name: string; + photoUrls: string[]; + /** pet status in the store */ + status?: "available" | "pending" | "sold"; + tags?: Tag[]; } -/** - * Git User - * Metaproperties for Git author/committer information. - */ -export interface GitUser { - /** @example ""2007-10-29T02:42:39.000-07:00"" */ - date?: string; - /** @example ""chris@ozmm.org"" */ - email?: string; - /** @example ""Chris Wanstrath"" */ - name?: string; +export enum PetIds { + Value10 = 10, + Value20 = 20, + Value30 = 30, + Value40 = 40, } -/** - * Gitignore Template - * Gitignore Template - */ -export interface GitignoreTemplate { - /** @example "C" */ - name: string; - /** - * @example "# Object files - * *.o - * - * # Libraries - * *.lib - * *.a - * - * # Shared objects (inc. Windows DLLs) - * *.dll - * *.so - * *.so.* - * *.dylib - * - * # Executables - * *.exe - * *.out - * *.app - * " - */ - source: string; +export enum PetIdsWithWrongEnum { + Value10 = 10, + Value20 = 20, + Value30 = 30, + Value40 = 40, } -/** - * GPG Key - * A unique encryption key - */ -export interface GpgKey { - /** @example true */ - can_certify: boolean; - can_encrypt_comms: boolean; - can_encrypt_storage: boolean; - /** @example true */ - can_sign: boolean; - /** - * @format date-time - * @example "2016-03-24T11:31:04-06:00" - */ - created_at: string; - /** @example [{"email":"mastahyeti@users.noreply.github.com","verified":true}] */ - emails: { - email?: string; - verified?: boolean; - }[]; - /** @format date-time */ - expires_at: string | null; - /** @example 3 */ - id: number; - /** @example "3262EFF25BA0D270" */ - key_id: string; - primary_key_id: number | null; - /** @example "xsBNBFayYZ..." */ - public_key: string; - raw_key: string | null; - /** @example [{"id":4,"primary_key_id":3,"key_id":"4A595D4C72EE49C7","public_key":"zsBNBFayYZ...","emails":[],"subkeys":[],"can_sign":false,"can_encrypt_comms":true,"can_encrypt_storage":true,"can_certify":false,"created_at":"2016-03-24T11:31:04-06:00","expires_at":null}] */ - subkeys: { - can_certify?: boolean; - can_encrypt_comms?: boolean; - can_encrypt_storage?: boolean; - can_sign?: boolean; - created_at?: string; - emails?: any[]; - expires_at?: string | null; - id?: number; - key_id?: string; - primary_key_id?: number; - public_key?: string; - raw_key?: string | null; - subkeys?: any[]; - }[]; +export enum PetNames { + FluffyHero = "Fluffy Hero", + PiggyPo = "Piggy Po", + SwaggerTypescriptApi = "Swagger Typescript Api", + UPPER_CASE = "UPPER_CASE", } /** - * GroupMapping - * External Groups to be mapped to a team for membership + * Pet Tag + * A tag for a pet + * @example {"name":"name","id":1} */ -export interface GroupMapping { - /** - * a description of the group - * @example "A group of Developers working on AzureAD SAML SSO" - */ - group_description?: string; - /** - * The ID of the group - * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" - */ - group_id?: string; - /** - * The name of the group - * @example "saml-azuread-test" - */ - group_name?: string; - /** - * Array of groups to be mapped to this team - * @example [{"group_id":"111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa","group_name":"saml-azuread-test","group_description":"A group of Developers working on AzureAD SAML SSO"},{"group_id":"2bb2bb2b-bb22-22bb-2bb2-bb2bbb2bb2b2","group_name":"saml-azuread-test2","group_description":"Another group of Developers working on AzureAD SAML SSO"}] - */ - groups?: { - /** - * a description of the group - * @example "A group of Developers working on AzureAD SAML SSO" - */ - group_description: string; - /** - * The ID of the group - * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" - */ - group_id: string; - /** - * The name of the group - * @example "saml-azuread-test" - */ - group_name: string; - }[]; - /** - * synchronization status for this group mapping - * @example "unsynced" - */ - status?: string; - /** - * the time of the last sync for this group-mapping - * @example "2019-06-03 22:27:15:000 -700" - */ - synced_at?: string; +export interface Tag { + /** @format int64 */ + id?: number; + name?: string; } /** - * Webhook - * Webhooks for repositories. + * a User + * A User who is purchasing from the pet store + * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} */ -export interface Hook { - /** - * Determines whether the hook is actually triggered on pushes. - * @example true - */ - active: boolean; - config: { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ - content_type?: WebhookConfigContentType; - /** @example ""sha256"" */ - digest?: string; - /** @example ""foo@bar.com"" */ - email?: string; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ - insecure_ssl?: WebhookConfigInsecureSsl; - /** @example ""foo"" */ - password?: string; - /** @example ""roomer"" */ - room?: string; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ - secret?: WebhookConfigSecret; - /** @example ""foo"" */ - subdomain?: string; - /** @example ""abc"" */ - token?: string; - /** The URL to which the payloads will be delivered. */ - url?: WebhookConfigUrl; - }; - /** - * @format date-time - * @example "2011-09-06T17:26:27Z" - */ - created_at: string; - /** - * Determines what events the hook is triggered for. Default: ['push']. - * @example ["push","pull_request"] - */ - events: string[]; - /** - * Unique identifier of the webhook. - * @example 42 - */ - id: number; - last_response: HookResponse; - /** - * The name of a valid service, use 'web' for a webhook. - * @example "web" - */ - name: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/pings" - */ - ping_url: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/test" - */ - test_url: string; - type: string; - /** - * @format date-time - * @example "2011-09-06T20:39:23Z" - */ - updated_at: string; +export interface User { + email?: string; + firstName?: string; + /** @format int64 */ + id?: number; + lastName?: string; + password?: string; + phone?: string; /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1" + * User Status + * @format int32 */ - url: string; + userStatus?: number; + username?: string; } -/** Hook Response */ -export interface HookResponse { - code: number | null; - message: string | null; - status: string | null; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Hovercard - * Hovercard - */ -export interface Hovercard { - contexts: { - message: string; - octicon: string; - }[]; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Import - * A repository import from an external source. - */ -export interface Import { - authors_count?: number | null; - /** @format uri */ - authors_url: string; - commit_count?: number | null; - error_message?: string | null; - failed_step?: string | null; - has_large_files?: boolean; - /** @format uri */ - html_url: string; - import_percent?: number | null; - large_files_count?: number; - large_files_size?: number; - message?: string; - project_choices?: { - human_name?: string; - tfvc_project?: string; - vcs?: string; - }[]; - push_percent?: number | null; - /** @format uri */ - repository_url: string; - status: - | "auth" - | "error" - | "none" - | "detecting" - | "choose" - | "auth_failed" - | "importing" - | "mapping" - | "waiting_to_push" - | "pushing" - | "complete" - | "setup" - | "unknown" - | "detection_found_multiple" - | "detection_found_nothing" - | "detection_needs_auth"; - status_text?: string | null; - svc_root?: string; - svn_root?: string; - tfvc_project?: string; - /** @format uri */ - url: string; - use_lfs?: string; - vcs: string | null; - /** The URL of the originating repository. */ - vcs_url: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Installation - * Installation - */ -export interface Installation { - /** - * @format uri - * @example "https://api.github.com/installations/1/access_tokens" - */ - access_tokens_url: string; - account: SimpleUser | Enterprise | null; - /** @example 1 */ - app_id: number; - /** @example "github-actions" */ - app_slug: string; - /** @example ""test_13f1e99741e3e004@d7e1eb0bc0a1ba12.com"" */ - contact_email?: string | null; - /** @format date-time */ - created_at: string; - events: string[]; - /** @example true */ - has_multiple_single_files?: boolean; - /** - * @format uri - * @example "https://github.com/organizations/github/settings/installations/1" - */ - html_url: string; - /** - * The ID of the installation. - * @example 1 - */ - id: number; - /** @example {"issues":"read","deployments":"write"} */ - permissions: { - checks?: string; - contents?: string; - deployments?: string; - /** @example ""read"" */ - issues?: string; - metadata?: string; - /** @example ""read"" */ - organization_administration?: string; - pull_requests?: string; - statuses?: string; - }; - /** - * @format uri - * @example "https://api.github.com/installation/repositories" - */ - repositories_url: string; - /** Describe whether all repositories have been selected or there's a selection involved */ - repository_selection: "all" | "selected"; - /** @example "config.yaml" */ - single_file_name: string | null; - /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ - single_file_paths?: string[]; - /** @format date-time */ - suspended_at?: string | null; - suspended_by?: SimpleUser | null; - /** The ID of the user or organization this token is being scoped to. */ - target_id: number; - /** @example "Organization" */ - target_type: string; - /** @format date-time */ - updated_at: string; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Installation Token - * Authentication token for a GitHub App installed on a user or org. - */ -export interface InstallationToken { - expires_at: string; - /** @example true */ - has_multiple_single_files?: boolean; - permissions?: { - contents?: string; - issues?: string; - /** @example "read" */ - metadata?: string; - /** @example "read" */ - single_file?: string; +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - repositories?: Repository[]; - repository_selection?: "all" | "selected"; - /** @example "README.md" */ - single_file?: string; - /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ - single_file_paths?: string[]; - token: string; -} -/** - * GitHub app - * GitHub apps are a new way to extend GitHub. They can be installed directly on organizations and user accounts and granted access to specific repositories. They come with granular permissions and built-in webhooks. GitHub apps are first class actors within GitHub. - */ -export interface Integration { - /** @example ""Iv1.25b5d1e65ffc4022"" */ - client_id?: string; - /** @example ""1d4b2097ac622ba702d19de498f005747a8b21d3"" */ - client_secret?: string; - /** - * @format date-time - * @example "2017-07-08T16:18:44-04:00" - */ - created_at: string; - /** @example "The description of the app." */ - description: string | null; - /** - * The list of events for the GitHub app - * @example ["label","deployment"] - */ - events: string[]; - /** - * @format uri - * @example "https://example.com" - */ - external_url: string; - /** - * @format uri - * @example "https://github.com/apps/super-ci" - */ - html_url: string; - /** - * Unique identifier of the GitHub app - * @example 37 - */ - id: number; - /** - * The number of installations associated with the GitHub app - * @example 5 - */ - installations_count?: number; - /** - * The name of the GitHub app - * @example "Probot Owners" - */ - name: string; - /** @example "MDExOkludGVncmF0aW9uMQ==" */ - node_id: string; - owner: SimpleUser | null; - /** @example ""-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEArYxrNYD/iT5CZVpRJu4rBKmmze3PVmT/gCo2ATUvDvZTPTey\nxcGJ3vvrJXazKk06pN05TN29o98jrYz4cengG3YGsXPNEpKsIrEl8NhbnxapEnM9\nJCMRe0P5JcPsfZlX6hmiT7136GRWiGOUba2X9+HKh8QJVLG5rM007TBER9/z9mWm\nrJuNh+m5l320oBQY/Qq3A7wzdEfZw8qm/mIN0FCeoXH1L6B8xXWaAYBwhTEh6SSn\nZHlO1Xu1JWDmAvBCi0RO5aRSKM8q9QEkvvHP4yweAtK3N8+aAbZ7ovaDhyGz8r6r\nzhU1b8Uo0Z2ysf503WqzQgIajr7Fry7/kUwpgQIDAQABAoIBADwJp80Ko1xHPZDy\nfcCKBDfIuPvkmSW6KumbsLMaQv1aGdHDwwTGv3t0ixSay8CGlxMRtRDyZPib6SvQ\n6OH/lpfpbMdW2ErkksgtoIKBVrDilfrcAvrNZu7NxRNbhCSvN8q0s4ICecjbbVQh\nnueSdlA6vGXbW58BHMq68uRbHkP+k+mM9U0mDJ1HMch67wlg5GbayVRt63H7R2+r\nVxcna7B80J/lCEjIYZznawgiTvp3MSanTglqAYi+m1EcSsP14bJIB9vgaxS79kTu\noiSo93leJbBvuGo8QEiUqTwMw4tDksmkLsoqNKQ1q9P7LZ9DGcujtPy4EZsamSJT\ny8OJt0ECgYEA2lxOxJsQk2kI325JgKFjo92mQeUObIvPfSNWUIZQDTjniOI6Gv63\nGLWVFrZcvQBWjMEQraJA9xjPbblV8PtfO87MiJGLWCHFxmPz2dzoedN+2Coxom8m\nV95CLz8QUShuao6u/RYcvUaZEoYs5bHcTmy5sBK80JyEmafJPtCQVxMCgYEAy3ar\nZr3yv4xRPEPMat4rseswmuMooSaK3SKub19WFI5IAtB/e7qR1Rj9JhOGcZz+OQrl\nT78O2OFYlgOIkJPvRMrPpK5V9lslc7tz1FSh3BZMRGq5jSyD7ETSOQ0c8T2O/s7v\nbeEPbVbDe4mwvM24XByH0GnWveVxaDl51ABD65sCgYB3ZAspUkOA5egVCh8kNpnd\nSd6SnuQBE3ySRlT2WEnCwP9Ph6oPgn+oAfiPX4xbRqkL8q/k0BdHQ4h+zNwhk7+h\nWtPYRAP1Xxnc/F+jGjb+DVaIaKGU18MWPg7f+FI6nampl3Q0KvfxwX0GdNhtio8T\nTj1E+SnFwh56SRQuxSh2gwKBgHKjlIO5NtNSflsUYFM+hyQiPiqnHzddfhSG+/3o\nm5nNaSmczJesUYreH5San7/YEy2UxAugvP7aSY2MxB+iGsiJ9WD2kZzTUlDZJ7RV\nUzWsoqBR+eZfVJ2FUWWvy8TpSG6trh4dFxImNtKejCR1TREpSiTV3Zb1dmahK9GV\nrK9NAoGAbBxRLoC01xfxCTgt5BDiBcFVh4fp5yYKwavJPLzHSpuDOrrI9jDn1oKN\nonq5sDU1i391zfQvdrbX4Ova48BN+B7p63FocP/MK5tyyBoT8zQEk2+vWDOw7H/Z\nu5dTCPxTIsoIwUw1I+7yIxqJzLPFgR2gVBwY1ra/8iAqCj+zeBw=\n-----END RSA PRIVATE KEY-----\n"" */ - pem?: string; - /** - * The set of permissions for the GitHub app - * @example {"issues":"read","deployments":"write"} - */ - permissions: { - checks?: string; - contents?: string; - deployments?: string; - issues?: string; - metadata?: string; - [key: string]: any; + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; }; - /** - * The slug name of the GitHub app - * @example "probot-owners" - */ - slug?: string; - /** - * @format date-time - * @example "2017-07-08T16:18:44-04:00" - */ - updated_at: string; - /** @example ""6fba8f2fc8a7e8f2cca5577eddd82ca7586b3b6b"" */ - webhook_secret?: string; - [key: string]: any; -} -/** - * The duration of the interaction restriction. Can be one of: `one_day`, `three_days`, `one_week`, `one_month`, `six_months`. Default: `one_day`. - * @example "one_month" - */ -export enum InteractionExpiry { - OneDay = "one_day", - ThreeDays = "three_days", - OneWeek = "one_week", - OneMonth = "one_month", - SixMonths = "six_months", -} + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } -/** - * The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: `existing_users`, `contributors_only`, `collaborators_only`. - * @example "collaborators_only" - */ -export enum InteractionGroup { - ExistingUsers = "existing_users", - ContributorsOnly = "contributors_only", - CollaboratorsOnly = "collaborators_only", -} + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } -/** - * Interaction Restrictions - * Limit interactions to a specific type of user for a specified duration - */ -export interface InteractionLimit { - /** The duration of the interaction restriction. Can be one of: `one_day`, `three_days`, `one_week`, `one_month`, `six_months`. Default: `one_day`. */ - expiry?: InteractionExpiry; - /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: `existing_users`, `contributors_only`, `collaborators_only`. */ - limit: InteractionGroup; -} + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } -/** - * Interaction Limits - * Interaction limit settings. - */ -export interface InteractionLimitResponse { - /** - * @format date-time - * @example "2018-08-17T04:18:39Z" - */ - expires_at: string; - /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: `existing_users`, `contributors_only`, `collaborators_only`. */ - limit: InteractionGroup; - /** @example "repository" */ - origin: string; -} + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } -/** - * Issue - * Issues are a great way to keep track of tasks, enhancements, and bugs for your projects. - */ -export interface Issue { - active_lock_reason?: string | null; - assignee: SimpleUser | null; - assignees?: SimpleUser[] | null; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** - * Contents of the issue - * @example "It looks like the new widget form is broken on Safari. When I try and create the widget, Safari crashes. This is reproducible on 10.8, but not 10.9. Maybe a browser bug?" - */ - body?: string; - body_html?: string; - body_text?: string; - /** @format date-time */ - closed_at: string | null; - closed_by?: SimpleUser | null; - comments: number; - /** @format uri */ - comments_url: string; - /** @format date-time */ - created_at: string; - /** @format uri */ - events_url: string; - /** @format uri */ - html_url: string; - id: number; - /** - * Labels to associate with this issue; pass one or more label names to replace the set of labels on this issue; send an empty array to clear all labels from the issue; note that the labels are silently dropped for users without push access to the repository - * @example ["bug","registration"] - */ - labels: ( - | string - | { - color?: string | null; - default?: boolean; - description?: string | null; - id?: number; - name?: string; - node_id?: string; - /** @format uri */ - url?: string; + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; } - )[]; - labels_url: string; - locked: boolean; - milestone: Milestone | null; - node_id: string; - /** - * Number uniquely identifying the issue within its repository - * @example 42 - */ - number: number; - performed_via_github_app?: Integration | null; - pull_request?: { - /** @format uri */ - diff_url: string | null; - /** @format uri */ - html_url: string | null; - /** @format date-time */ - merged_at?: string | null; - /** @format uri */ - patch_url: string | null; - /** @format uri */ - url: string | null; + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - reactions?: ReactionRollup; - /** A git repository */ - repository?: Repository; - /** @format uri */ - repository_url: string; - /** - * State of the issue; either 'open' or 'closed' - * @example "open" - */ - state: string; - /** @format uri */ - timeline_url?: string; - /** - * Title of the issue - * @example "Widget creation fails in Safari on OS X 10.8" - */ - title: string; - /** @format date-time */ - updated_at: string; - /** - * URL for the issue - * @format uri - * @example "https://api.github.com/repositories/42/issues/1" - */ - url: string; - user: SimpleUser | null; -} -/** - * Issue Comment - * Comments provide a way for people to collaborate on an issue. - */ -export interface IssueComment { - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** - * Contents of the issue comment - * @example "What version of Safari were you using when you observed this bug?" - */ - body?: string; - body_html?: string; - body_text?: string; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - created_at: string; - /** @format uri */ - html_url: string; - /** - * Unique identifier of the issue comment - * @example 42 - */ - id: number; - /** @format uri */ - issue_url: string; - node_id: string; - performed_via_github_app?: Integration | null; - reactions?: ReactionRollup; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - updated_at: string; - /** - * URL for the issue comment - * @format uri - * @example "https://api.github.com/repositories/42/issues/comments/1" - */ - url: string; - user: SimpleUser | null; -} + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); -/** - * Issue Event - * Issue Event - */ -export interface IssueEvent { - actor: SimpleUser | null; - assignee?: SimpleUser | null; - assigner?: SimpleUser | null; - /** How the author is associated with the repository. */ - author_association?: AuthorAssociation; - /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ - commit_id: string | null; - /** @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" */ - commit_url: string | null; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - created_at: string; - dismissed_review?: IssueEventDismissedReview; - /** @example "closed" */ - event: string; - /** @example 1 */ - id: number; - /** Issue Simple */ - issue?: IssueSimple; - /** Issue Event Label */ - label?: IssueEventLabel; - lock_reason?: string | null; - /** Issue Event Milestone */ - milestone?: IssueEventMilestone; - /** @example "MDEwOklzc3VlRXZlbnQx" */ - node_id: string; - /** Issue Event Project Card */ - project_card?: IssueEventProjectCard; - /** Issue Event Rename */ - rename?: IssueEventRename; - requested_reviewer?: SimpleUser | null; - /** Groups of organization members that gives permissions on specified repositories. */ - requested_team?: Team; - review_requester?: SimpleUser | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/events/1" - */ - url: string; -} + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; -/** Issue Event Dismissed Review */ -export interface IssueEventDismissedReview { - dismissal_commit_id?: string | null; - dismissal_message: string | null; - review_id: number; - state: string; + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Issue Event for Issue - * Issue Event for Issue + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/v2 + * @externalDocs http://swagger.io + * @contact + * + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ -export interface IssueEventForIssue { - /** Simple User */ - actor?: SimpleUser; - /** How the author is associated with the repository. */ - author_association?: AuthorAssociation; - /** @example "":+1:"" */ - body?: string; - /** @example ""

Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam.

"" */ - body_html?: string; - /** @example ""Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam."" */ - body_text?: string; - commit_id?: string | null; - commit_url?: string | null; - created_at?: string; - event?: string; - /** @example ""https://github.com/owner-3906e11a33a3d55ba449d63f/BBB_Private_Repo/commit/480d4f47447129f015cb327536c522ca683939a1"" */ - html_url?: string; - id?: number; - /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/issues/1"" */ - issue_url?: string; - /** @example ""off-topic"" */ - lock_reason?: string; - /** @example ""add a bunch of files"" */ - message?: string; - node_id?: string; - /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/pulls/2"" */ - pull_request_url?: string; - /** @example ""480d4f47447129f015cb327536c522ca683939a1"" */ - sha?: string; - /** @example ""commented"" */ - state?: string; - /** @example ""2020-07-09T00:17:51Z"" */ - submitted_at?: string; - /** @example ""2020-07-09T00:17:36Z"" */ - updated_at?: string; - url?: string; -} +export class Api extends HttpClient { + pet = { + /** + * No description + * + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure + */ + addPet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "POST", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), -/** - * Issue Event Label - * Issue Event Label - */ -export interface IssueEventLabel { - color: string | null; - name: string | null; -} + /** + * No description + * + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure + */ + updatePet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "PUT", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), -/** - * Issue Event Milestone - * Issue Event Milestone - */ -export interface IssueEventMilestone { - title: string; -} + /** + * @description Multiple status values can be provided with comma separated strings + * + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure + */ + findPetsByStatus: ( + query: { + /** Status values that need to be considered for filter */ + status: ("available" | "pending" | "sold")[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/findByStatus\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * Issue Event Project Card - * Issue Event Project Card - */ -export interface IssueEventProjectCard { - column_name: string; - id: number; - previous_column_name?: string; - project_id: number; - /** @format uri */ - project_url: string; - /** @format uri */ - url: string; -} + /** + * No description + * + * @tags pet + * @name SingleFormUrlEncodedRequest + * @summary summary + * @request POST:/pet/single-form-url-encoded + */ + singleFormUrlEncodedRequest: ( + data: { + /** @format string */ + param1: string; + param2: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/single-form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), -/** - * Issue Event Rename - * Issue Event Rename - */ -export interface IssueEventRename { - from: string; - to: string; -} + /** + * No description + * + * @tags pet + * @name FormUrlEncodedRequest + * @summary summary + * @request POST:/pet/form-url-encoded + */ + formUrlEncodedRequest: ( + data: { + /** @format string */ + param1: string; + param2: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), -/** - * Issue Search Result Item - * Issue Search Result Item - */ -export interface IssueSearchResultItem { - active_lock_reason?: string | null; - assignee: SimpleUser | null; - assignees?: SimpleUser[] | null; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - body?: string; - body_html?: string; - body_text?: string; - /** @format date-time */ - closed_at: string | null; - comments: number; - /** @format uri */ - comments_url: string; - /** @format date-time */ - created_at: string; - draft?: boolean; - /** @format uri */ - events_url: string; - /** @format uri */ - html_url: string; - id: number; - labels: { - color?: string; - default?: boolean; - description?: string | null; - id?: number; - name?: string; - node_id?: string; - url?: string; - }[]; - labels_url: string; - locked: boolean; - milestone: Milestone | null; - node_id: string; - number: number; - performed_via_github_app?: Integration | null; - pull_request?: { - /** @format uri */ - diff_url: string | null; - /** @format uri */ - html_url: string | null; - /** @format date-time */ - merged_at?: string | null; - /** @format uri */ - patch_url: string | null; - /** @format uri */ - url: string | null; - }; - /** A git repository */ - repository?: Repository; - /** @format uri */ - repository_url: string; - score: number; - state: string; - text_matches?: SearchResultTextMatches; - /** @format uri */ - timeline_url?: string; - title: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - user: SimpleUser | null; -} + /** + * No description + * + * @tags pet + * @name FormUrlEncodedRequest2 + * @summary summary + * @request POST:/pet/end-form-url-encoded + * @originalName formUrlEncodedRequest + * @duplicate + */ + formUrlEncodedRequest2: ( + data: { + /** @format string */ + param1: string; + param2: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/end-form-url-encoded\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, + ...params, + }), -/** - * Issue Simple - * Issue Simple - */ -export interface IssueSimple { - /** @example "too heated" */ - active_lock_reason?: string | null; - assignee: SimpleUser | null; - assignees?: SimpleUser[] | null; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** @example "I'm having a problem with this." */ - body?: string; - body_html?: string; - body_text?: string; - /** @format date-time */ - closed_at: string | null; - /** @example 0 */ - comments: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" - */ - comments_url: string; - /** - * @format date-time - * @example "2011-04-22T13:33:48Z" - */ - created_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/events" - */ - events_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/issues/1347" - */ - html_url: string; - /** @example 1 */ - id: number; - labels: Label[]; - /** @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/labels{/name}" */ - labels_url: string; - /** @example true */ - locked: boolean; - milestone: Milestone | null; - /** @example "MDU6SXNzdWUx" */ - node_id: string; - /** @example 1347 */ - number: number; - performed_via_github_app?: Integration | null; - pull_request?: { - /** @format uri */ - diff_url: string | null; - /** @format uri */ - html_url: string | null; - /** @format date-time */ - merged_at?: string | null; - /** @format uri */ - patch_url: string | null; - /** @format uri */ - url: string | null; - }; - /** A git repository */ - repository?: Repository; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World" - */ - repository_url: string; - /** @example "open" */ - state: string; - /** @format uri */ - timeline_url?: string; - /** @example "Found a bug" */ - title: string; - /** - * @format date-time - * @example "2011-04-22T13:33:48Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" - */ - url: string; - user: SimpleUser | null; -} + /** + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure + */ + findPetsByTags: ( + query: { + /** Tags to filter by */ + tags: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/findByTags\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), -/** - * Job - * Information of a job execution in a workflow run - */ -export interface Job { - /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ - check_run_url: string; - /** - * The time that the job finished, in ISO 8601 format. - * @format date-time - * @example "2019-08-08T08:00:00-07:00" - */ - completed_at: string | null; - /** - * The outcome of the job. - * @example "success" - */ - conclusion: string | null; - /** - * The SHA of the commit that is being run. - * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" - */ - head_sha: string; - /** @example "https://github.com/github/hello-world/runs/4" */ - html_url: string | null; - /** - * The id of the job. - * @example 21 - */ - id: number; - /** - * The name of the job. - * @example "test-coverage" - */ - name: string; - /** @example "MDg6Q2hlY2tSdW40" */ - node_id: string; - /** - * The id of the associated workflow run. - * @example 5 - */ - run_id: number; - /** @example "https://api.github.com/repos/github/hello-world/actions/runs/5" */ - run_url: string; - /** - * The time that the job started, in ISO 8601 format. - * @format date-time - * @example "2019-08-08T08:00:00-07:00" - */ - started_at: string; - /** - * The phase of the lifecycle that the job is currently in. - * @example "queued" - */ - status: "queued" | "in_progress" | "completed"; - /** Steps in this job. */ - steps?: { /** - * The time that the job finished, in ISO 8601 format. - * @format date-time - * @example "2019-08-08T08:00:00-07:00" + * @description Returns a single pet + * + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure */ - completed_at?: string | null; + getPetById: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + /** - * The outcome of the job. - * @example "success" + * No description + * + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure */ - conclusion: string | null; + updatePetWithForm: ( + petId: number, + data: { + /** Updated name of the pet */ + name?: string; + /** Updated status of the pet */ + status?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/\${petId}\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + ...params, + }), + /** - * The name of the job. - * @example "test-coverage" + * No description + * + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure */ - name: string; - /** @example 1 */ - number: number; + deletePet: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "DELETE", + secure: true, + ...params, + }), + /** - * The time that the step started, in ISO 8601 format. - * @format date-time - * @example "2019-08-08T08:00:00-07:00" + * No description + * + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure */ - started_at?: string | null; + uploadFile: ( + petId: number, + data: { + /** Additional data to pass to server */ + additionalMetadata?: string; + /** file to upload */ + file?: File; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/pet/\${petId}/uploadImage\`, + method: "POST", + body: data, + secure: true, + type: ContentType.FormData, + format: "json", + ...params, + }), + }; + store = { /** - * The phase of the lifecycle that the job is currently in. - * @example "queued" + * @description Returns a map of status codes to quantities + * + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure */ - status: "queued" | "in_progress" | "completed"; - }[]; - /** @example "https://api.github.com/repos/github/hello-world/actions/jobs/21" */ - url: string; -} - -/** - * Key - * Key - */ -export interface Key { - /** @format date-time */ - created_at: string; - id: number; - key: string; - key_id: string; - read_only: boolean; - title: string; - url: string; - verified: boolean; -} + getInventory: (params: RequestParams = {}) => + this.request, any>({ + path: \`/store/inventory\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), -/** - * Key Simple - * Key Simple - */ -export interface KeySimple { - id: number; - key: string; -} + /** + * No description + * + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order + */ + placeOrder: (body: Order, params: RequestParams = {}) => + this.request({ + path: \`/store/order\`, + method: "POST", + body: body, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Label - * Color-coded labels help you categorize and filter your issues (just like labels in Gmail). - */ -export interface Label { - /** - * 6-character hex code, without the leading #, identifying the color - * @example "FFFFFF" - */ - color: string; - /** @example true */ - default: boolean; - /** @example "Something isn't working" */ - description: string | null; - /** @example 208045946 */ - id: number; - /** - * The name of the label. - * @example "bug" - */ - name: string; - /** @example "MDU6TGFiZWwyMDgwNDU5NDY=" */ - node_id: string; - /** - * URL for the label - * @format uri - * @example "https://api.github.com/repositories/42/labels/bug" - */ - url: string; -} + /** + * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} + */ + getOrderById: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Label Search Result Item - * Label Search Result Item - */ -export interface LabelSearchResultItem { - color: string; - default: boolean; - description: string | null; - id: number; - name: string; - node_id: string; - score: number; - text_matches?: SearchResultTextMatches; - /** @format uri */ - url: string; + /** + * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} + */ + deleteOrder: (orderId: string, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "DELETE", + ...params, + }), + }; + user = { + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + createUser: (body: User, params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithArray\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + createUsersWithListInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithList\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + loginUser: ( + query: { + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/login\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout + */ + logoutUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/logout\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} + */ + updateUser: (username: string, body: User, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "PUT", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + deleteUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "DELETE", + ...params, + }), + }; } +" +`; -/** - * Language - * Language +exports[`simple > 'another-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export type Language = Record; -/** - * License - * License - */ -export interface License { - /** - * @example " - * - * The MIT License (MIT) - * - * Copyright (c) [year] [fullname] - * - * 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. - * " - */ - body: string; - /** @example ["include-copyright"] */ - conditions: string[]; - /** @example "A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty." */ - description: string; - /** @example true */ - featured: boolean; - /** - * @format uri - * @example "http://choosealicense.com/licenses/mit/" - */ - html_url: string; - /** @example "Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders." */ - implementation: string; - /** @example "mit" */ - key: string; - /** @example ["no-liability"] */ - limitations: string[]; - /** @example "MIT License" */ - name: string; - /** @example "MDc6TGljZW5zZW1pdA==" */ - node_id: string; - /** @example ["commercial-use","modifications","distribution","sublicense","private-use"] */ - permissions: string[]; - /** @example "MIT" */ - spdx_id: string | null; - /** - * @format uri - * @example "https://api.github.com/licenses/mit" - */ - url: string | null; +export interface Bar { + A?: string; + /** @format int32 */ + B: number; + Baz?: Baz; + /** @format date-time */ + C: string; } -/** - * License Content - * License Content - */ -export interface LicenseContent { - _links: { - /** @format uri */ - git: string | null; - /** @format uri */ - html: string | null; - /** @format uri */ - self: string; - }; - content: string; - /** @format uri */ - download_url: string | null; - encoding: string; - /** @format uri */ - git_url: string | null; - /** @format uri */ - html_url: string | null; - license: LicenseSimple | null; - name: string; - path: string; - sha: string; - size: number; - type: string; - /** @format uri */ - url: string; +export interface Baz { + Color: Color; + /** @format decimal */ + D: number; } -/** - * License Simple - * License Simple - */ -export interface LicenseSimple { - /** @format uri */ - html_url?: string; - /** @example "mit" */ - key: string; - /** @example "MIT License" */ - name: string; - /** @example "MDc6TGljZW5zZW1pdA==" */ - node_id: string; - /** @example "MIT" */ - spdx_id: string | null; - /** - * @format uri - * @example "https://api.github.com/licenses/mit" - */ - url: string | null; +export enum Color { + RED = 0, + GREEN = 1, + BLUE = 2, } -/** - * Link - * Hypermedia Link - */ -export interface Link { - href: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Link With Type - * Hypermedia Link with Type - */ -export interface LinkWithType { - href: string; - type: string; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** Marketplace Account */ -export interface MarketplaceAccount { - /** @format email */ - email?: string | null; - id: number; - login: string; - node_id?: string; - /** @format email */ - organization_billing_email?: string | null; - type: string; - /** @format uri */ - url: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Marketplace Listing Plan - * Marketplace Listing Plan - */ -export interface MarketplaceListingPlan { - /** - * @format uri - * @example "https://api.github.com/marketplace_listing/plans/1313/accounts" - */ - accounts_url: string; - /** @example ["Up to 25 private repositories","11 concurrent builds"] */ - bullets: string[]; - /** @example "A professional-grade CI solution" */ - description: string; - /** @example true */ - has_free_trial: boolean; - /** @example 1313 */ - id: number; - /** @example 1099 */ - monthly_price_in_cents: number; - /** @example "Pro" */ - name: string; - /** @example 3 */ - number: number; - /** @example "flat-rate" */ - price_model: string; - /** @example "published" */ - state: string; - unit_name: string | null; - /** - * @format uri - * @example "https://api.github.com/marketplace_listing/plans/1313" - */ - url: string; - /** @example 11870 */ - yearly_price_in_cents: number; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Marketplace Purchase - * Marketplace Purchase - */ -export interface MarketplacePurchase { - id: number; - login: string; - marketplace_pending_change?: { - effective_date?: string; - id?: number; - is_installed?: boolean; - /** Marketplace Listing Plan */ - plan?: MarketplaceListingPlan; - unit_count?: number | null; +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - marketplace_purchase: { - billing_cycle?: string; - free_trial_ends_on?: string | null; - is_installed?: boolean; - next_billing_date?: string | null; - on_free_trial?: boolean; - /** Marketplace Listing Plan */ - plan?: MarketplaceListingPlan; - unit_count?: number | null; - updated_at?: string; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); }; - organization_billing_email?: string; - type: string; - url: string; } /** - * Migration - * A migration. + * @title No title */ -export interface Migration { - /** @format uri */ - archive_url?: string; - /** - * @format date-time - * @example "2015-07-06T15:33:38-07:00" - */ - created_at: string; - exclude?: any[]; - exclude_attachments: boolean; - /** @example "0b989ba4-242f-11e5-81e1-c7b6966d2516" */ - guid: string; - /** @example 79 */ - id: number; - /** @example true */ - lock_repositories: boolean; - node_id: string; - owner: SimpleUser | null; - repositories: Repository[]; - /** @example "pending" */ - state: string; - /** - * @format date-time - * @example "2015-07-06T15:33:38-07:00" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/orgs/octo-org/migrations/79" - */ - url: string; +export class Api extends HttpClient { + api = { + /** + * No description + * + * @tags Foo + * @name FooGetBarDescriptions + * @request GET:/api/Foo/GetBarDescriptions + */ + fooGetBarDescriptions: (params: RequestParams = {}) => + this.request({ + path: \`/api/Foo/GetBarDescriptions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Foo + * @name FooGetBar + * @request GET:/api/Foo/GetBar + */ + fooGetBar: ( + query: { + /** @format int32 */ + id: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/api/Foo/GetBar\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Foo + * @name FooSetBar + * @request POST:/api/Foo/SetBar + */ + fooSetBar: (value: Bar | null, params: RequestParams = {}) => + this.request({ + path: \`/api/Foo/SetBar\`, + method: "POST", + body: value, + type: ContentType.Json, + ...params, + }), + }; } +" +`; -/** - * Milestone - * A collection of related issues and pull requests. +exports[`simple > 'anyof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface Milestone { - /** - * @format date-time - * @example "2013-02-12T13:22:01Z" - */ - closed_at: string | null; - /** @example 8 */ - closed_issues: number; - /** - * @format date-time - * @example "2011-04-10T20:09:31Z" - */ - created_at: string; - creator: SimpleUser | null; - /** @example "Tracking milestone for version 1.0" */ - description: string | null; - /** - * @format date-time - * @example "2012-10-09T23:39:01Z" - */ - due_on: string | null; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/milestones/v1.0" - */ - html_url: string; - /** @example 1002604 */ - id: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1/labels" - */ - labels_url: string; - /** @example "MDk6TWlsZXN0b25lMTAwMjYwNA==" */ - node_id: string; - /** - * The number of the milestone. - * @example 42 - */ - number: number; - /** @example 4 */ - open_issues: number; - /** - * The state of the milestone. - * @default "open" - * @example "open" - */ - state: "open" | "closed"; - /** - * The title of the milestone. - * @example "v1.0" - */ - title: string; - /** - * @format date-time - * @example "2014-03-03T18:58:10Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1" - */ - url: string; + +export interface PetByAge { + age: number; + nickname?: string; } -/** - * Minimal Repository - * Minimal Repository - */ -export interface MinimalRepository { - /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ - archive_url: string; - archived?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ - assignees_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ - blobs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ - branches_url: string; - clone_url?: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ - collaborators_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ - comments_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ - commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ - compare_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ - contents_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/contributors" - */ - contributors_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at?: string | null; - default_branch?: string; - delete_branch_on_merge?: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/deployments" - */ - deployments_url: string; - /** @example "This your first repo!" */ - description: string | null; - disabled?: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/downloads" - */ - downloads_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/events" - */ - events_url: string; - fork: boolean; - /** @example 0 */ - forks?: number; - forks_count?: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/forks" - */ - forks_url: string; - /** @example "octocat/Hello-World" */ - full_name: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ - git_commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ - git_refs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ - git_tags_url: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_pages?: boolean; - has_projects?: boolean; - has_wiki?: boolean; - homepage?: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/hooks" - */ - hooks_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World" - */ - html_url: string; - /** @example 1296269 */ - id: number; - is_template?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ - issue_comment_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ - issue_events_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ - issues_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ - keys_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ - labels_url: string; - language?: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/languages" - */ - languages_url: string; - license?: { - key?: string; - name?: string; - node_id?: string; - spdx_id?: string; - url?: string; - } | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/merges" - */ - merges_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ - milestones_url: string; - mirror_url?: string | null; - /** @example "Hello-World" */ - name: string; - network_count?: number; - /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ - node_id: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ - notifications_url: string; - /** @example 0 */ - open_issues?: number; - open_issues_count?: number; - owner: SimpleUser | null; - permissions?: { - admin?: boolean; - pull?: boolean; - push?: boolean; - }; - private: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ - pulls_url: string; - /** - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - pushed_at?: string | null; - /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ - releases_url: string; - size?: number; - ssh_url?: string; - stargazers_count?: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" - */ - stargazers_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ - statuses_url: string; - subscribers_count?: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" - */ - subscribers_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscription" - */ - subscription_url: string; - svn_url?: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/tags" - */ - tags_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/teams" - */ - teams_url: string; - temp_clone_token?: string; - template_repository?: Repository | null; - topics?: string[]; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ - trees_url: string; - /** - * @format date-time - * @example "2011-01-26T19:14:43Z" - */ - updated_at?: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World" - */ - url: string; - visibility?: string; - /** @example 0 */ - watchers?: number; - watchers_count?: number; +export interface PetByType { + hunts?: boolean; + pet_type: "Cat" | "Dog"; } -/** - * Org Hook - * Org Hook - */ -export interface OrgHook { - /** @example true */ - active: boolean; - config: { - /** @example ""form"" */ - content_type?: string; - /** @example ""0"" */ - insecure_ssl?: string; - /** @example ""********"" */ - secret?: string; - /** @example ""http://example.com/2"" */ - url?: string; - }; - /** - * @format date-time - * @example "2011-09-06T17:26:27Z" - */ - created_at: string; - /** @example ["push","pull_request"] */ - events: string[]; - /** @example 1 */ - id: number; - /** @example "web" */ - name: string; - /** - * @format uri - * @example "https://api.github.com/orgs/octocat/hooks/1/pings" - */ - ping_url: string; - type: string; - /** - * @format date-time - * @example "2011-09-06T20:39:23Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/orgs/octocat/hooks/1" - */ - url: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Org Membership - * Org Membership - */ -export interface OrgMembership { - /** Organization Simple */ - organization: OrganizationSimple; - /** - * @format uri - * @example "https://api.github.com/orgs/octocat" - */ - organization_url: string; - permissions?: { - can_create_repository: boolean; - }; - /** @example "admin" */ - role: string; - /** @example "active" */ - state: string; - /** - * @format uri - * @example "https://api.github.com/orgs/octocat/memberships/defunkt" - */ - url: string; - user: SimpleUser | null; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Actions Secret for an Organization - * Secrets for GitHub Actions for an organization. - */ -export interface OrganizationActionsSecret { - /** @format date-time */ - created_at: string; - /** - * The name of the secret. - * @example "SECRET_TOKEN" - */ - name: string; - /** - * @format uri - * @example "https://api.github.com/organizations/org/secrets/my_secret/repositories" - */ - selected_repositories_url?: string; - /** @format date-time */ - updated_at: string; - /** Visibility of a secret */ - visibility: "all" | "private" | "selected"; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Organization Full - * Organization Full - */ -export interface OrganizationFull { - /** @example "https://github.com/images/error/octocat_happy.gif" */ - avatar_url: string; - /** - * @format email - * @example "org@example.com" - */ - billing_email?: string | null; - /** - * @format uri - * @example "https://github.com/blog" - */ - blog?: string; - /** @example 8 */ - collaborators?: number | null; - /** @example "GitHub" */ - company?: string; - /** - * @format date-time - * @example "2008-01-14T04:33:35Z" - */ - created_at: string; - default_repository_permission?: string | null; - /** @example "A great organization" */ - description: string | null; - /** @example 10000 */ - disk_usage?: number | null; - /** - * @format email - * @example "octocat@github.com" - */ - email?: string; - /** - * @format uri - * @example "https://api.github.com/orgs/github/events" - */ - events_url: string; - /** @example 20 */ - followers: number; - /** @example 0 */ - following: number; - /** @example true */ - has_organization_projects: boolean; - /** @example true */ - has_repository_projects: boolean; - /** @example "https://api.github.com/orgs/github/hooks" */ - hooks_url: string; - /** - * @format uri - * @example "https://github.com/octocat" - */ - html_url: string; - /** @example 1 */ - id: number; - /** @example true */ - is_verified?: boolean; - /** @example "https://api.github.com/orgs/github/issues" */ - issues_url: string; - /** @example "San Francisco" */ - location?: string; - /** @example "github" */ - login: string; - /** @example "all" */ - members_allowed_repository_creation_type?: string; - /** @example true */ - members_can_create_internal_repositories?: boolean; - /** @example true */ - members_can_create_pages?: boolean; - /** @example true */ - members_can_create_private_repositories?: boolean; - /** @example true */ - members_can_create_public_repositories?: boolean; - /** @example true */ - members_can_create_repositories?: boolean | null; - /** @example "https://api.github.com/orgs/github/members{/member}" */ - members_url: string; - /** @example "github" */ - name?: string; - /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ - node_id: string; - /** @example 100 */ - owned_private_repos?: number; - plan?: { - filled_seats?: number; - name: string; - private_repos: number; - seats?: number; - space: number; - }; - /** @example 81 */ - private_gists?: number | null; - /** @example 1 */ - public_gists: number; - /** @example "https://api.github.com/orgs/github/public_members{/member}" */ - public_members_url: string; - /** @example 2 */ - public_repos: number; - /** - * @format uri - * @example "https://api.github.com/orgs/github/repos" - */ - repos_url: string; - /** @example 100 */ - total_private_repos?: number; - /** @example "github" */ - twitter_username?: string | null; - /** @example true */ - two_factor_requirement_enabled?: boolean | null; - /** @example "Organization" */ - type: string; - /** @format date-time */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/orgs/github" - */ - url: string; -} +type CancelToken = Symbol | string | number; -/** - * Organization Invitation - * Organization Invitation - */ -export interface OrganizationInvitation { - created_at: string; - email: string | null; - failed_at?: string; - failed_reason?: string; - id: number; - invitation_team_url: string; - /** @example ""https://api.github.com/organizations/16/invitations/1/teams"" */ - invitation_teams_url?: string; - /** Simple User */ - inviter: SimpleUser; - login: string | null; - /** @example ""MDIyOk9yZ2FuaXphdGlvbkludml0YXRpb24x"" */ - node_id: string; - role: string; - team_count: number; +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Organization Simple - * Organization Simple - */ -export interface OrganizationSimple { - /** @example "https://github.com/images/error/octocat_happy.gif" */ - avatar_url: string; - /** @example "A great organization" */ - description: string | null; - /** - * @format uri - * @example "https://api.github.com/orgs/github/events" - */ - events_url: string; - /** @example "https://api.github.com/orgs/github/hooks" */ - hooks_url: string; - /** @example 1 */ - id: number; - /** @example "https://api.github.com/orgs/github/issues" */ - issues_url: string; - /** @example "github" */ - login: string; - /** @example "https://api.github.com/orgs/github/members{/member}" */ - members_url: string; - /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ - node_id: string; - /** @example "https://api.github.com/orgs/github/public_members{/member}" */ - public_members_url: string; - /** - * @format uri - * @example "https://api.github.com/orgs/github/repos" - */ - repos_url: string; - /** - * @format uri - * @example "https://api.github.com/orgs/github" - */ - url: string; -} +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); -export interface PackagesBillingUsage { - /** Free storage space (GB) for GitHub Packages. */ - included_gigabytes_bandwidth: number; - /** Sum of the free and paid storage space (GB) for GitHuub Packages. */ - total_gigabytes_bandwidth_used: number; - /** Total paid storage space (GB) for GitHuub Packages. */ - total_paid_gigabytes_bandwidth_used: number; -} + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; -/** - * GitHub Pages - * The configuration for GitHub Pages for a repository. - */ -export interface Page { - /** - * Whether the Page has a custom 404 page. - * @default false - * @example false - */ - custom_404: boolean; - /** - * The Pages site's custom domain - * @example "example.com" - */ - cname: string | null; - /** - * The web address the Page can be accessed from. - * @format uri - * @example "https://example.com" - */ - html_url?: string; - /** - * Whether the GitHub Pages site is publicly visible. If set to `true`, the site is accessible to anyone on the internet. If set to `false`, the site will only be accessible to users who have at least `read` access to the repository that published the site. - * @example true - */ - public: boolean; - source?: PagesSourceHash; - /** - * The status of the most recent build of the Page. - * @example "built" - */ - status: "built" | "building" | "errored" | null; - /** - * The API address for accessing this Page resource. - * @format uri - * @example "https://api.github.com/repos/github/hello-world/pages" - */ - url: string; + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Page Build - * Page Build + * @title Anyof Example + * @version 1.0.0 */ -export interface PageBuild { - commit: string; - /** @format date-time */ - created_at: string; - duration: number; - error: { - message: string | null; +export class Api extends HttpClient { + pets = { + /** + * No description + * + * @name PetsPartialUpdate + * @request PATCH:/pets + */ + petsPartialUpdate: (data: PetByAge | PetByType, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", + body: data, + type: ContentType.Json, + ...params, + }), }; - pusher: SimpleUser | null; - status: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; } +" +`; -/** - * Page Build Status - * Page Build Status +exports[`simple > 'api-with-examples' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface PageBuildStatus { - /** @example "queued" */ - status: string; - /** - * @format uri - * @example "https://api.github.com/repos/github/hello-world/pages/builds/latest" - */ - url: string; -} -/** Pages Source Hash */ -export interface PagesSourceHash { - branch: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** Participation Stats */ -export interface ParticipationStats { - all: number[]; - owner: number[]; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Porter Author - * Porter Author - */ -export interface PorterAuthor { - email: string; - id: number; - /** @format uri */ - import_url: string; - name: string; - remote_id: string; - remote_name: string; - /** @format uri */ - url: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Porter Large File - * Porter Large File - */ -export interface PorterLargeFile { - oid: string; - path: string; - ref_name: string; - size: number; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Private User - * Private User - */ -export interface PrivateUser { - /** - * @format uri - * @example "https://github.com/images/error/octocat_happy.gif" - */ - avatar_url: string; - /** @example "There once was..." */ - bio: string | null; - /** @example "https://github.com/blog" */ - blog: string | null; - business_plus?: boolean; - /** @example 8 */ - collaborators: number; - /** @example "GitHub" */ - company: string | null; - /** - * @format date-time - * @example "2008-01-14T04:33:35Z" - */ - created_at: string; - /** @example 10000 */ - disk_usage: number; - /** - * @format email - * @example "octocat@github.com" - */ - email: string | null; - /** @example "https://api.github.com/users/octocat/events{/privacy}" */ - events_url: string; - /** @example 20 */ - followers: number; - /** - * @format uri - * @example "https://api.github.com/users/octocat/followers" - */ - followers_url: string; - /** @example 0 */ - following: number; - /** @example "https://api.github.com/users/octocat/following{/other_user}" */ - following_url: string; - /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ - gists_url: string; - /** @example "41d064eb2195891e12d0413f63227ea7" */ - gravatar_id: string | null; - hireable: boolean | null; - /** - * @format uri - * @example "https://github.com/octocat" - */ - html_url: string; - /** @example 1 */ - id: number; - ldap_dn?: string; - /** @example "San Francisco" */ - location: string | null; - /** @example "octocat" */ - login: string; - /** @example "monalisa octocat" */ - name: string | null; - /** @example "MDQ6VXNlcjE=" */ - node_id: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/orgs" - */ - organizations_url: string; - /** @example 100 */ - owned_private_repos: number; - plan?: { - collaborators: number; - name: string; - private_repos: number; - space: number; - }; - /** @example 81 */ - private_gists: number; - /** @example 1 */ - public_gists: number; - /** @example 2 */ - public_repos: number; - /** - * @format uri - * @example "https://api.github.com/users/octocat/received_events" - */ - received_events_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/repos" - */ - repos_url: string; - site_admin: boolean; - /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ - starred_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/subscriptions" - */ - subscriptions_url: string; - /** @format date-time */ - suspended_at?: string | null; - /** @example 100 */ - total_private_repos: number; - /** @example "monalisa" */ - twitter_username?: string | null; - /** @example true */ - two_factor_authentication: boolean; - /** @example "User" */ - type: string; - /** - * @format date-time - * @example "2008-01-14T04:33:35Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat" - */ - url: string; -} - -/** - * Project - * Projects are a way to organize columns and cards of work. - */ -export interface Project { - /** - * Body of the project - * @example "This project represents the sprint of the first week in January" - */ - body: string | null; - /** - * @format uri - * @example "https://api.github.com/projects/1002604/columns" - */ - columns_url: string; - /** - * @format date-time - * @example "2011-04-10T20:09:31Z" - */ - created_at: string; - creator: SimpleUser | null; - /** - * @format uri - * @example "https://github.com/api-playground/projects-test/projects/12" - */ - html_url: string; - /** @example 1002604 */ - id: number; - /** - * Name of the project - * @example "Week One Sprint" - */ - name: string; - /** @example "MDc6UHJvamVjdDEwMDI2MDQ=" */ - node_id: string; - /** @example 1 */ - number: number; - /** The baseline permission that all organization members have on this project. Only present if owner is an organization. */ - organization_permission?: "read" | "write" | "admin" | "none"; - /** - * @format uri - * @example "https://api.github.com/repos/api-playground/projects-test" - */ - owner_url: string; - /** Whether or not this project can be seen by everyone. Only present if owner is an organization. */ - private?: boolean; - /** - * State of the project; either 'open' or 'closed' - * @example "open" - */ - state: string; - /** - * @format date-time - * @example "2014-03-03T18:58:10Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/projects/1002604" - */ - url: string; -} +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); -/** - * Project Card - * Project cards represent a scope of work. - */ -export interface ProjectCard { - /** - * Whether or not the card is archived - * @example false - */ - archived?: boolean; - /** - * @format uri - * @example "https://api.github.com/projects/columns/367" - */ - column_url: string; - /** - * @format uri - * @example "https://api.github.com/repos/api-playground/projects-test/issues/3" - */ - content_url?: string; - /** - * @format date-time - * @example "2016-09-05T14:21:06Z" - */ - created_at: string; - creator: SimpleUser | null; - /** - * The project card's ID - * @example 42 - */ - id: number; - /** @example "MDExOlByb2plY3RDYXJkMTQ3OA==" */ - node_id: string; - /** @example "Add payload for delete Project column" */ - note: string | null; - /** - * @format uri - * @example "https://api.github.com/projects/120" - */ - project_url: string; - /** - * @format date-time - * @example "2016-09-05T14:20:22Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/projects/columns/cards/1478" - */ - url: string; -} + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; -/** - * Project Column - * Project columns contain cards of work. - */ -export interface ProjectColumn { - /** - * @format uri - * @example "https://api.github.com/projects/columns/367/cards" - */ - cards_url: string; - /** - * @format date-time - * @example "2016-09-05T14:18:44Z" - */ - created_at: string; - /** - * The unique identifier of the project column - * @example 42 - */ - id: number; - /** - * Name of the project column - * @example "Remaining tasks" - */ - name: string; - /** @example "MDEzOlByb2plY3RDb2x1bW4zNjc=" */ - node_id: string; - /** - * @format uri - * @example "https://api.github.com/projects/120" - */ - project_url: string; - /** - * @format date-time - * @example "2016-09-05T14:22:28Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/projects/columns/367" - */ - url: string; -} + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } -/** - * Protected Branch - * Branch protections protect branches - */ -export interface ProtectedBranch { - allow_deletions?: { - enabled: boolean; - }; - allow_force_pushes?: { - enabled: boolean; - }; - enforce_admins?: { - enabled: boolean; - /** @format uri */ - url: string; + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; }; - required_linear_history?: { - enabled: boolean; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), }; - required_pull_request_reviews?: { - dismiss_stale_reviews?: boolean; - dismissal_restrictions?: { - teams: Team[]; - /** @format uri */ - teams_url: string; - /** @format uri */ - url: string; - users: SimpleUser[]; - /** @format uri */ - users_url: string; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, }; - require_code_owner_reviews?: boolean; - required_approving_review_count?: number; - /** @format uri */ - url: string; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - required_signatures?: { - /** @example true */ - enabled: boolean; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_signatures" - */ - url: string; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); }; - /** Status Check Policy */ - required_status_checks?: StatusCheckPolicy; - /** Branch Restriction Policy */ - restrictions?: BranchRestrictionPolicy; - /** @format uri */ - url: string; } /** - * Protected Branch Admin Enforced - * Protected Branch Admin Enforced + * @title Simple API overview + * @version 2.0.0 */ -export interface ProtectedBranchAdminEnforced { - /** @example true */ - enabled: boolean; +export class Api extends HttpClient { /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/enforce_admins" + * No description + * + * @name ListVersionsv2 + * @summary List API versions + * @request GET:/ */ - url: string; -} + listVersionsv2 = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + format: "json", + ...params, + }); -/** - * Protected Branch Pull Request Review - * Protected Branch Pull Request Review - */ -export interface ProtectedBranchPullRequestReview { - /** @example true */ - dismiss_stale_reviews: boolean; - dismissal_restrictions?: { - /** The list of teams with review dismissal access. */ - teams?: Team[]; - /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/teams"" */ - teams_url?: string; - /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions"" */ - url?: string; - /** The list of users with review dismissal access. */ - users?: SimpleUser[]; - /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/users"" */ - users_url?: string; + v2 = { + /** + * No description + * + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + getVersionDetailsv2: (params: RequestParams = {}) => + this.request({ + path: \`/v2\`, + method: "GET", + format: "json", + ...params, + }), }; - /** @example true */ - require_code_owner_reviews: boolean; - /** - * @min 1 - * @max 6 - * @example 2 - */ - required_approving_review_count?: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/dismissal_restrictions" - */ - url?: string; } +" +`; -/** - * Public User - * Public User +exports[`simple > 'api-with-examples' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface PublicUser { - /** @format uri */ - avatar_url: string; - bio: string | null; - blog: string | null; - /** @example 3 */ - collaborators?: number; - company: string | null; - /** @format date-time */ - created_at: string; - /** @example 1 */ - disk_usage?: number; - /** @format email */ - email: string | null; - events_url: string; - followers: number; - /** @format uri */ - followers_url: string; - following: number; - following_url: string; - gists_url: string; - gravatar_id: string | null; - hireable: boolean | null; - /** @format uri */ - html_url: string; - id: number; - location: string | null; - login: string; - name: string | null; - node_id: string; - /** @format uri */ - organizations_url: string; - /** @example 2 */ - owned_private_repos?: number; - plan?: { - collaborators: number; - name: string; - private_repos: number; - space: number; - }; - /** @example 1 */ - private_gists?: number; - public_gists: number; - public_repos: number; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - /** @format date-time */ - suspended_at?: string | null; - /** @example 2 */ - total_private_repos?: number; - twitter_username?: string | null; - type: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Pull Request - * Pull requests let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary. - */ -export interface PullRequest { - _links: { - /** Hypermedia Link */ - comments: Link; - /** Hypermedia Link */ - commits: Link; - /** Hypermedia Link */ - html: Link; - /** Hypermedia Link */ - issue: Link; - /** Hypermedia Link */ - review_comment: Link; - /** Hypermedia Link */ - review_comments: Link; - /** Hypermedia Link */ - self: Link; - /** Hypermedia Link */ - statuses: Link; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - /** @example "too heated" */ - active_lock_reason?: string | null; - /** @example 100 */ - additions: number; - assignee: SimpleUser | null; - assignees?: SimpleUser[] | null; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** The status of auto merging a pull request. */ - auto_merge: AutoMerge; - base: { - label: string; - ref: string; - repo: { - allow_merge_commit?: boolean; - allow_rebase_merge?: boolean; - allow_squash_merge?: boolean; - archive_url: string; - archived: boolean; - assignees_url: string; - blobs_url: string; - branches_url: string; - clone_url: string; - collaborators_url: string; - comments_url: string; - commits_url: string; - compare_url: string; - contents_url: string; - /** @format uri */ - contributors_url: string; - /** @format date-time */ - created_at: string; - default_branch: string; - /** @format uri */ - deployments_url: string; - description: string | null; - disabled: boolean; - /** @format uri */ - downloads_url: string; - /** @format uri */ - events_url: string; - fork: boolean; - forks: number; - forks_count: number; - /** @format uri */ - forks_url: string; - full_name: string; - git_commits_url: string; - git_refs_url: string; - git_tags_url: string; - git_url: string; - has_downloads: boolean; - has_issues: boolean; - has_pages: boolean; - has_projects: boolean; - has_wiki: boolean; - /** @format uri */ - homepage: string | null; - /** @format uri */ - hooks_url: string; - /** @format uri */ - html_url: string; - id: number; - issue_comment_url: string; - issue_events_url: string; - issues_url: string; - keys_url: string; - labels_url: string; - language: string | null; - /** @format uri */ - languages_url: string; - license: LicenseSimple | null; - master_branch?: string; - /** @format uri */ - merges_url: string; - milestones_url: string; - /** @format uri */ - mirror_url: string | null; - name: string; - node_id: string; - notifications_url: string; - open_issues: number; - open_issues_count: number; - owner: { - /** @format uri */ - avatar_url: string; - events_url: string; - /** @format uri */ - followers_url: string; - following_url: string; - gists_url: string; - gravatar_id: string | null; - /** @format uri */ - html_url: string; - id: number; - login: string; - node_id: string; - /** @format uri */ - organizations_url: string; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - type: string; - /** @format uri */ - url: string; - }; - permissions?: { - admin: boolean; - pull: boolean; - push: boolean; - }; - private: boolean; - pulls_url: string; - /** @format date-time */ - pushed_at: string; - releases_url: string; - size: number; - ssh_url: string; - stargazers_count: number; - /** @format uri */ - stargazers_url: string; - statuses_url: string; - /** @format uri */ - subscribers_url: string; - /** @format uri */ - subscription_url: string; - /** @format uri */ - svn_url: string; - /** @format uri */ - tags_url: string; - /** @format uri */ - teams_url: string; - temp_clone_token?: string; - topics?: string[]; - trees_url: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - watchers: number; - watchers_count: number; - }; - sha: string; - user: { - /** @format uri */ - avatar_url: string; - events_url: string; - /** @format uri */ - followers_url: string; - following_url: string; - gists_url: string; - gravatar_id: string | null; - /** @format uri */ - html_url: string; - id: number; - login: string; - node_id: string; - /** @format uri */ - organizations_url: string; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - type: string; - /** @format uri */ - url: string; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - /** @example "Please pull these awesome changes" */ - body: string | null; - /** @example 5 */ - changed_files: number; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - closed_at: string | null; - /** @example 10 */ - comments: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" - */ - comments_url: string; - /** @example 3 */ - commits: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" - */ - commits_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at: string; - /** @example 3 */ - deletions: number; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347.diff" - */ - diff_url: string; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Simple API overview + * @version v2 + */ +export class Api extends HttpClient { /** - * Indicates whether or not the pull request is a draft. - * @example false + * @description multiple line 1 multiple line 2 multiple line 3 + * + * @name ListVersionsv2 + * @summary List API versions + * @request GET:/ */ - draft?: boolean; - head: { - label: string; - ref: string; - repo: { - allow_merge_commit?: boolean; - allow_rebase_merge?: boolean; - allow_squash_merge?: boolean; - archive_url: string; - archived: boolean; - assignees_url: string; - blobs_url: string; - branches_url: string; - clone_url: string; - collaborators_url: string; - comments_url: string; - commits_url: string; - compare_url: string; - contents_url: string; - /** @format uri */ - contributors_url: string; - /** @format date-time */ - created_at: string; - default_branch: string; - /** @format uri */ - deployments_url: string; - description: string | null; - disabled: boolean; - /** @format uri */ - downloads_url: string; - /** @format uri */ - events_url: string; - fork: boolean; - forks: number; - forks_count: number; - /** @format uri */ - forks_url: string; - full_name: string; - git_commits_url: string; - git_refs_url: string; - git_tags_url: string; - git_url: string; - has_downloads: boolean; - has_issues: boolean; - has_pages: boolean; - has_projects: boolean; - has_wiki: boolean; - /** @format uri */ - homepage: string | null; - /** @format uri */ - hooks_url: string; - /** @format uri */ - html_url: string; - id: number; - issue_comment_url: string; - issue_events_url: string; - issues_url: string; - keys_url: string; - labels_url: string; - language: string | null; - /** @format uri */ - languages_url: string; - license: { - key: string; - name: string; - node_id: string; - spdx_id: string | null; - /** @format uri */ - url: string | null; - }; - master_branch?: string; - /** @format uri */ - merges_url: string; - milestones_url: string; - /** @format uri */ - mirror_url: string | null; - name: string; - node_id: string; - notifications_url: string; - open_issues: number; - open_issues_count: number; - owner: { - /** @format uri */ - avatar_url: string; - events_url: string; - /** @format uri */ - followers_url: string; - following_url: string; - gists_url: string; - gravatar_id: string | null; - /** @format uri */ - html_url: string; - id: number; - login: string; - node_id: string; - /** @format uri */ - organizations_url: string; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - type: string; - /** @format uri */ - url: string; - }; - permissions?: { - admin: boolean; - pull: boolean; - push: boolean; - }; - private: boolean; - pulls_url: string; - /** @format date-time */ - pushed_at: string; - releases_url: string; - size: number; - ssh_url: string; - stargazers_count: number; - /** @format uri */ - stargazers_url: string; - statuses_url: string; - /** @format uri */ - subscribers_url: string; - /** @format uri */ - subscription_url: string; - /** @format uri */ - svn_url: string; - /** @format uri */ - tags_url: string; - /** @format uri */ - teams_url: string; - temp_clone_token?: string; - topics?: string[]; - trees_url: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - watchers: number; - watchers_count: number; - }; - sha: string; - user: { - /** @format uri */ - avatar_url: string; - events_url: string; - /** @format uri */ - followers_url: string; - following_url: string; - gists_url: string; - gravatar_id: string | null; - /** @format uri */ - html_url: string; - id: number; - login: string; - node_id: string; - /** @format uri */ - organizations_url: string; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - type: string; - /** @format uri */ - url: string; - }; + listVersionsv2 = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + format: "json", + ...params, + }); + + v2 = { + /** + * No description + * + * @name GetVersionDetailsv2 + * @summary Show API version details + * @request GET:/v2 + */ + getVersionDetailsv2: (params: RequestParams = {}) => + this.request({ + path: \`/v2\`, + method: "GET", + format: "json", + ...params, + }), + }; + withCharset = { + /** + * @description consumes contains charset + * + * @name WithCharset + * @summary consumes contains charset + * @request POST:/with-charset/ + */ + withCharset: (someParm: string, params: RequestParams = {}) => + this.request({ + path: \`/with-charset/\`, + method: "POST", + body: someParm, + type: ContentType.Json, + ...params, + }), + }; + consumesPlainText = { + /** + * @description consumes plain text + * + * @name ConsumesPlainText + * @summary consumes plain text + * @request POST:/consumes-plain-text/ + */ + consumesPlainText: (someParm: string, params: RequestParams = {}) => + this.request({ + path: \`/consumes-plain-text/\`, + method: "POST", + body: someParm, + type: ContentType.Text, + ...params, + }), }; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347" - */ - html_url: string; - /** @example 1 */ - id: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" - */ - issue_url: string; - labels: { - color?: string; - default?: boolean; - description?: string | null; - id?: number; - name?: string; - node_id?: string; - url?: string; - }[]; - /** @example true */ - locked: boolean; - /** - * Indicates whether maintainers can modify the pull request. - * @example true - */ - maintainer_can_modify: boolean; - /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ - merge_commit_sha: string | null; - /** @example true */ - mergeable: boolean | null; - /** @example "clean" */ - mergeable_state: string; - merged: boolean; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - merged_at: string | null; - merged_by: SimpleUser | null; - milestone: Milestone | null; - /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ - node_id: string; - /** - * Number uniquely identifying the pull request within its repository. - * @example 42 - */ - number: number; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347.patch" - */ - patch_url: string; - /** @example true */ - rebaseable?: boolean | null; - requested_reviewers?: SimpleUser[] | null; - requested_teams?: TeamSimple[] | null; - /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ - review_comment_url: string; - /** @example 0 */ - review_comments: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" - */ - review_comments_url: string; - /** - * State of this Pull Request. Either `open` or `closed`. - * @example "open" - */ - state: "open" | "closed"; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - statuses_url: string; - /** - * The title of the pull request. - * @example "Amazing new feature" - */ - title: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" - */ - url: string; - user: SimpleUser | null; } +" +`; -/** - * Pull Request Merge Result - * Pull Request Merge Result +exports[`simple > 'authentiq' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface PullRequestMergeResult { - merged: boolean; - message: string; - sha: string; + +/** Authentiq ID in JWT format, self-signed. */ +export interface AuthentiqID { + /** device token for push messages */ + devtoken?: string; + /** UUID and public signing key */ + sub: string; } -/** Pull Request Minimal */ -export interface PullRequestMinimal { - base: { - ref: string; - repo: { - id: number; - name: string; - url: string; - }; - sha: string; - }; - head: { - ref: string; - repo: { - id: number; - name: string; - url: string; - }; - sha: string; - }; - id: number; - number: number; - url: string; +/** Claim in JWT format, self- or issuer-signed. */ +export interface Claims { + email?: string; + phone?: string; + /** claim scope */ + scope: string; + /** UUID */ + sub: string; + type?: string; } -/** - * Pull Request Review - * Pull Request Reviews are reviews on pull requests. - */ -export interface PullRequestReview { - _links: { - html: { - href: string; - }; - pull_request: { - href: string; - }; - }; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** - * The text of the review. - * @example "This looks great." - */ - body: string; - body_html?: string; - body_text?: string; - /** - * A commit SHA for the review. - * @example "54bb654c9e6025347f57900a4a5c2313a96b8035" - */ - commit_id: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/12#pullrequestreview-80" - */ - html_url: string; - /** - * Unique identifier of the review - * @example 42 - */ - id: number; - /** @example "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3ODA=" */ - node_id: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/12" - */ - pull_request_url: string; - /** @example "CHANGES_REQUESTED" */ - state: string; - /** @format date-time */ - submitted_at?: string; - user: SimpleUser | null; +export interface Error { + detail?: string; + error: number; + title?: string; + /** unique uri for this error */ + type?: string; } -/** - * Pull Request Review Comment - * Pull Request Review Comments are comments on a portion of the Pull Request's diff. - */ -export interface PullRequestReviewComment { - _links: { - html: { - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - */ - href: string; - }; - pull_request: { - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" - */ - href: string; - }; - self: { - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" - */ - href: string; - }; - }; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** - * The text of the comment. - * @example "We should probably include a check for null values here." - */ - body: string; - /** @example ""

comment body

"" */ - body_html?: string; - /** @example ""comment body"" */ - body_text?: string; - /** - * The SHA of the commit to which the comment applies. - * @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - commit_id: string; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - created_at: string; - /** - * The diff of the line that the comment refers to. - * @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." - */ - diff_hunk: string; - /** - * HTML URL for the pull request review comment. - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - */ - html_url: string; - /** - * The ID of the pull request review comment. - * @example 1 - */ - id: number; - /** - * The comment ID to reply to. - * @example 8 - */ - in_reply_to_id?: number; - /** - * The line of the blob to which the comment applies. The last line of the range for a multi-line comment - * @example 2 - */ - line?: number; - /** - * The node ID of the pull request review comment. - * @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" - */ - node_id: string; - /** - * The SHA of the original commit to which the comment applies. - * @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" - */ - original_commit_id: string; - /** - * The line of the blob to which the comment applies. The last line of the range for a multi-line comment - * @example 2 - */ - original_line?: number; - /** - * The index of the original line in the diff to which the comment applies. - * @example 4 - */ - original_position: number; - /** - * The first line of the range for a multi-line comment. - * @example 2 - */ - original_start_line?: number | null; - /** - * The relative path of the file to which the comment applies. - * @example "config/database.yaml" - */ +/** PushToken in JWT format, self-signed. */ +export interface PushToken { + /** audience (URI) */ + aud: string; + exp?: number; + iat?: number; + /** issuer (URI) */ + iss: string; + nbf: number; + /** UUID and public signing key */ + sub: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ path: string; - /** - * The line index in the diff to which the comment applies. - * @example 1 - */ - position: number; - /** - * The ID of the pull request review to which the comment belongs. - * @example 42 - */ - pull_request_review_id: number | null; - /** - * URL for the pull request that the review comment belongs to. - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" - */ - pull_request_url: string; - reactions?: ReactionRollup; - /** - * The side of the diff to which the comment applies. The side of the last line of the range for a multi-line comment - * @default "RIGHT" - */ - side?: "LEFT" | "RIGHT"; - /** - * The first line of the range for a multi-line comment. - * @example 2 - */ - start_line?: number | null; - /** - * The side of the first line of the range for a multi-line comment. - * @default "RIGHT" - */ - start_side?: "LEFT" | "RIGHT" | null; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - updated_at: string; - /** - * URL for the pull request review comment - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" - */ - url: string; - /** Simple User */ - user: SimpleUser; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Pull Request Review Request - * Pull Request Review Request - */ -export interface PullRequestReviewRequest { - teams: TeamSimple[]; - users: SimpleUser[]; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Pull Request Simple - * Pull Request Simple - */ -export interface PullRequestSimple { - _links: { - /** Hypermedia Link */ - comments: Link; - /** Hypermedia Link */ - commits: Link; - /** Hypermedia Link */ - html: Link; - /** Hypermedia Link */ - issue: Link; - /** Hypermedia Link */ - review_comment: Link; - /** Hypermedia Link */ - review_comments: Link; - /** Hypermedia Link */ - self: Link; - /** Hypermedia Link */ - statuses: Link; +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - /** @example "too heated" */ - active_lock_reason?: string | null; - assignee: SimpleUser | null; - assignees?: SimpleUser[] | null; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** The status of auto merging a pull request. */ - auto_merge: AutoMerge; - base: { - label: string; - ref: string; - /** A git repository */ - repo: Repository; - sha: string; - user: SimpleUser | null; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; }; - /** @example "Please pull these awesome changes" */ - body: string | null; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - closed_at: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" - */ - comments_url: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" - */ - commits_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347.diff" - */ - diff_url: string; - /** - * Indicates whether or not the pull request is a draft. - * @example false - */ - draft?: boolean; - head: { - label: string; - ref: string; - /** A git repository */ - repo: Repository; - sha: string; - user: SimpleUser | null; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), }; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347" - */ - html_url: string; - /** @example 1 */ - id: number; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" - */ - issue_url: string; - labels: { - color?: string; - default?: boolean; - description?: string; - id?: number; - name?: string; - node_id?: string; - url?: string; - }[]; - /** @example true */ - locked: boolean; - /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ - merge_commit_sha: string | null; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - merged_at: string | null; - milestone: Milestone | null; - /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ - node_id: string; - /** @example 1347 */ - number: number; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1347.patch" - */ - patch_url: string; - requested_reviewers?: SimpleUser[] | null; - requested_teams?: TeamSimple[] | null; - /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ - review_comment_url: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" - */ - review_comments_url: string; - /** @example "open" */ - state: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" - */ - statuses_url: string; - /** @example "new-feature" */ - title: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" - */ - url: string; - user: SimpleUser | null; -} -/** Rate Limit */ -export interface RateLimit { - limit: number; - remaining: number; - reset: number; -} + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } -/** - * Rate Limit Overview - * Rate Limit Overview - */ -export interface RateLimitOverview { - rate: RateLimit; - resources: { - code_scanning_upload?: RateLimit; - core: RateLimit; - graphql?: RateLimit; - integration_manifest?: RateLimit; - search: RateLimit; - source_import?: RateLimit; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; -} -/** - * Reaction - * Reactions to conversations provide a way to help people express their feelings more simply and effectively. - */ -export interface Reaction { - /** - * The reaction to use - * @example "heart" - */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - /** - * @format date-time - * @example "2016-05-20T20:09:31Z" - */ - created_at: string; - /** @example 1 */ - id: number; - /** @example "MDg6UmVhY3Rpb24x" */ - node_id: string; - user: SimpleUser | null; -} + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); -/** Reaction Rollup */ -export interface ReactionRollup { - "+1": number; - "-1": number; - confused: number; - eyes: number; - heart: number; - hooray: number; - laugh: number; - rocket: number; - total_count: number; - /** @format uri */ - url: string; -} + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; -/** - * Referrer Traffic - * Referrer Traffic - */ -export interface ReferrerTraffic { - /** @example 4 */ - count: number; - /** @example "Google" */ - referrer: string; - /** @example 3 */ - uniques: number; -} + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; -/** - * Release - * A release. - */ -export interface Release { - assets: ReleaseAsset[]; - /** @format uri */ - assets_url: string; - /** Simple User */ - author: SimpleUser; - body?: string | null; - body_html?: string; - body_text?: string; - /** @format date-time */ - created_at: string; - /** - * true to create a draft (unpublished) release, false to create a published one. - * @example false - */ - draft: boolean; - /** @format uri */ - html_url: string; - id: number; - name: string | null; - node_id: string; - /** - * Whether to identify the release as a prerelease or a full release. - * @example false - */ - prerelease: boolean; - /** @format date-time */ - published_at: string | null; - /** - * The name of the tag. - * @example "v1.0.0" - */ - tag_name: string; - /** @format uri */ - tarball_url: string | null; - /** - * Specifies the commitish value that determines where the Git tag is created from. - * @example "master" - */ - target_commitish: string; - upload_url: string; - /** @format uri */ - url: string; - /** @format uri */ - zipball_url: string | null; -} + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; -/** - * Release Asset - * Data related to a release. - */ -export interface ReleaseAsset { - /** @format uri */ - browser_download_url: string; - content_type: string; - /** @format date-time */ - created_at: string; - download_count: number; - id: number; - label: string | null; - /** - * The file name of the asset. - * @example "Team Environment" - */ - name: string; - node_id: string; - size: number; - /** State of the release asset. */ - state: "uploaded" | "open"; - /** @format date-time */ - updated_at: string; - uploader: SimpleUser | null; - /** @format uri */ - url: string; + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Repo Search Result Item - * Repo Search Result Item + * @title Authentiq + * @version 6 + * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://authentiq.com/terms/ + * @baseUrl https://6-dot-authentiqio.appspot.com + * @contact Authentiq team (http://authentiq.io/support) + * + * Strong authentication, without the passwords. */ -export interface RepoSearchResultItem { - allow_merge_commit?: boolean; - allow_rebase_merge?: boolean; - allow_squash_merge?: boolean; - archive_url: string; - archived: boolean; - assignees_url: string; - blobs_url: string; - branches_url: string; - clone_url: string; - collaborators_url: string; - comments_url: string; - commits_url: string; - compare_url: string; - contents_url: string; - /** @format uri */ - contributors_url: string; - /** @format date-time */ - created_at: string; - default_branch: string; - delete_branch_on_merge?: boolean; - /** @format uri */ - deployments_url: string; - description: string | null; - /** Returns whether or not this repository disabled. */ - disabled: boolean; - /** @format uri */ - downloads_url: string; - /** @format uri */ - events_url: string; - fork: boolean; - forks: number; - forks_count: number; - /** @format uri */ - forks_url: string; - full_name: string; - git_commits_url: string; - git_refs_url: string; - git_tags_url: string; - git_url: string; - has_downloads: boolean; - has_issues: boolean; - has_pages: boolean; - has_projects: boolean; - has_wiki: boolean; - /** @format uri */ - homepage: string | null; - /** @format uri */ - hooks_url: string; - /** @format uri */ - html_url: string; - id: number; - issue_comment_url: string; - issue_events_url: string; - issues_url: string; - keys_url: string; - labels_url: string; - language: string | null; - /** @format uri */ - languages_url: string; - license: LicenseSimple | null; - master_branch?: string; - /** @format uri */ - merges_url: string; - milestones_url: string; - /** @format uri */ - mirror_url: string | null; - name: string; - node_id: string; - notifications_url: string; - open_issues: number; - open_issues_count: number; - owner: SimpleUser | null; - permissions?: { - admin: boolean; - pull: boolean; - push: boolean; +export class Api extends HttpClient { + wrongPathParams1 = { + /** + * @description DDD + * + * @tags key, delete + * @name WrongPathParams1 + * @request DELETE:/wrong-path-params1/{pathParam1}/{path_param2}/{path_param3}/:pathParam4 + */ + wrongPathParams1: ( + pathParam1: string, + pathParam2: string, + pathParam3: string, + pathParam4: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/wrong-path-params1/\${pathParam1}/\${pathParam2}/\${pathParam3}/\${pathParam4}\`, + method: "DELETE", + ...params, + }), + }; + wrongPathParams2 = { + /** + * @description DDD + * + * @tags key, delete + * @name WrongPathParams2 + * @request DELETE:/wrong-path-params2 + */ + wrongPathParams2: (pathParam1: string, params: RequestParams = {}) => + this.request({ + path: \`/wrong-path-params2\`, + method: "DELETE", + ...params, + }), + }; + key = { + /** + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. + * + * @tags key, delete + * @name KeyRevokeNosecret + * @request DELETE:/key + */ + keyRevokeNosecret: ( + query: { + /** verification code sent by email */ + code?: string; + /** primary email associated to Key (ID) */ + email: string; + /** primary phone number, international representation */ + phone: string; + }, + params: RequestParams = {}, + ) => + this.request< + { + /** pending or done */ + status?: string; + }, + Error + >({ + path: \`/key\`, + method: "DELETE", + query: query, + format: "json", + ...params, + }), + + /** + * @description Register a new ID \`JWT(sub, devtoken)\` v5: \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, post + * @name KeyRegister + * @request POST:/key + */ + keyRegister: (body: AuthentiqID, params: RequestParams = {}) => + this.request< + { + /** revoke key */ + secret?: string; + /** registered */ + status?: string; + }, + Error + >({ + path: \`/key\`, + method: "POST", + body: body, + format: "json", + ...params, + }), + + /** + * @description Revoke an Identity (Key) with a revocation secret + * + * @tags key, delete + * @name KeyRevoke + * @request DELETE:/key/{PK} + */ + keyRevoke: ( + pk: string, + query: { + /** revokation secret */ + secret: string; + }, + params: RequestParams = {}, + ) => + this.request< + { + /** done */ + status?: string; + }, + Error + >({ + path: \`/key/\${pk}\`, + method: "DELETE", + query: query, + format: "json", + ...params, + }), + + /** + * @description Get public details of an Authentiq ID. + * + * @tags key, get + * @name GetKey + * @request GET:/key/{PK} + */ + getKey: (pk: string, params: RequestParams = {}) => + this.request< + { + /** @format date-time */ + since?: string; + status?: string; + /** base64safe encoded public signing key */ + sub?: string; + }, + Error + >({ + path: \`/key/\${pk}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description HEAD info on Authentiq ID + * + * @tags key, head + * @name HeadKey + * @request HEAD:/key/{PK} + */ + headKey: (pk: string, params: RequestParams = {}) => + this.request({ + path: \`/key/\${pk}\`, + method: "HEAD", + ...params, + }), + + /** + * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, post + * @name KeyUpdate + * @request POST:/key/{PK} + */ + keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => + this.request< + { + /** confirmed */ + status?: string; + }, + Error + >({ + path: \`/key/\${pk}\`, + method: "POST", + body: body, + format: "json", + ...params, + }), + + /** + * @description Update Authentiq ID by replacing the object. v4: \`JWT(sub,email,phone)\` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags key, put + * @name KeyBind + * @request PUT:/key/{PK} + */ + keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => + this.request< + { + /** confirmed */ + status?: string; + }, + Error + >({ + path: \`/key/\${pk}\`, + method: "PUT", + body: body, + format: "json", + ...params, + }), + }; + login = { + /** + * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags login, post + * @name PushLoginRequest + * @request POST:/login + */ + pushLoginRequest: ( + query: { + /** URI App will connect to */ + callback: string; + }, + body: PushToken, + params: RequestParams = {}, + ) => + this.request< + { + /** sent */ + status?: string; + }, + Error + >({ + path: \`/login\`, + method: "POST", + query: query, + body: body, + format: "json", + ...params, + }), + }; + scope = { + /** + * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags scope, post + * @name SignRequest + * @request POST:/scope + */ + signRequest: ( + body: Claims, + query?: { + /** test only mode, using test issuer */ + test?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + /** 20-character ID */ + job?: string; + /** waiting */ + status?: string; + }, + Error + >({ + path: \`/scope\`, + method: "POST", + query: query, + body: body, + format: "json", + ...params, + }), + + /** + * @description delete a verification job + * + * @tags scope, delete + * @name SignDelete + * @request DELETE:/scope/{job} + */ + signDelete: (job: string, params: RequestParams = {}) => + this.request< + { + /** done */ + status?: string; + }, + Error + >({ + path: \`/scope/\${job}\`, + method: "DELETE", + format: "json", + ...params, + }), + + /** + * @description get the status / current content of a verification job + * + * @tags scope, get + * @name SignRetrieve + * @request GET:/scope/{job} + */ + signRetrieve: (job: string, params: RequestParams = {}) => + this.request< + { + exp?: number; + field?: string; + /** base64safe encoded public signing key */ + sub?: string; + }, + Error + >({ + path: \`/scope/\${job}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description HEAD to get the status of a verification job + * + * @tags scope, head + * @name SignRetrieveHead + * @request HEAD:/scope/{job} + */ + signRetrieveHead: (job: string, params: RequestParams = {}) => + this.request({ + path: \`/scope/\${job}\`, + method: "HEAD", + ...params, + }), + + /** + * @description this is a scope confirmation + * + * @tags scope, post + * @name SignConfirm + * @request POST:/scope/{job} + */ + signConfirm: (job: string, params: RequestParams = {}) => + this.request< + { + /** confirmed */ + status?: string; + }, + Error + >({ + path: \`/scope/\${job}\`, + method: "POST", + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples + * + * @tags scope, put + * @name SignUpdate + * @request PUT:/scope/{job} + */ + signUpdate: (job: string, params: RequestParams = {}) => + this.request< + { + /** result is JWT or JSON?? */ + jwt?: string; + /** ready */ + status?: string; + }, + Error + >({ + path: \`/scope/\${job}\`, + method: "PUT", + ...params, + }), + }; +} +" +`; + +exports[`simple > 'callback-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); }; - private: boolean; - pulls_url: string; - /** @format date-time */ - pushed_at: string; - releases_url: string; - score: number; - size: number; - ssh_url: string; - stargazers_count: number; - /** @format uri */ - stargazers_url: string; - statuses_url: string; - /** @format uri */ - subscribers_url: string; - /** @format uri */ - subscription_url: string; - /** @format uri */ - svn_url: string; - /** @format uri */ - tags_url: string; - /** @format uri */ - teams_url: string; - temp_clone_token?: string; - text_matches?: SearchResultTextMatches; - topics?: string[]; - trees_url: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; - watchers: number; - watchers_count: number; } /** - * Repository - * A git repository + * @title Callback Example + * @version 1.0.0 */ -export interface Repository { - /** - * Whether to allow merge commits for pull requests. - * @default true - * @example true - */ - allow_merge_commit?: boolean; - /** - * Whether to allow rebase merges for pull requests. - * @default true - * @example true - */ - allow_rebase_merge?: boolean; - /** - * Whether to allow squash merges for pull requests. - * @default true - * @example true - */ - allow_squash_merge?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ - archive_url: string; - /** - * Whether the repository is archived. - * @default false - */ - archived: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ - assignees_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ - blobs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ - branches_url: string; - /** @example "https://github.com/octocat/Hello-World.git" */ - clone_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ - collaborators_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ - comments_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ - commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ - compare_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ - contents_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/contributors" - */ - contributors_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at: string | null; - /** - * The default branch of the repository. - * @example "master" - */ - default_branch: string; - /** - * Whether to delete head branches when pull requests are merged - * @default false - * @example false - */ - delete_branch_on_merge?: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/deployments" - */ - deployments_url: string; - /** @example "This your first repo!" */ - description: string | null; - /** Returns whether or not this repository disabled. */ - disabled: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/downloads" - */ - downloads_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/events" - */ - events_url: string; - fork: boolean; - forks: number; - /** @example 9 */ - forks_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/forks" - */ - forks_url: string; - /** @example "octocat/Hello-World" */ - full_name: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ - git_commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ - git_refs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ - git_tags_url: string; - /** @example "git:github.com/octocat/Hello-World.git" */ - git_url: string; - /** - * Whether downloads are enabled. - * @default true - * @example true - */ - has_downloads: boolean; - /** - * Whether issues are enabled. - * @default true - * @example true - */ - has_issues: boolean; - has_pages: boolean; - /** - * Whether projects are enabled. - * @default true - * @example true - */ - has_projects: boolean; - /** - * Whether the wiki is enabled. - * @default true - * @example true - */ - has_wiki: boolean; - /** - * @format uri - * @example "https://github.com" - */ - homepage: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/hooks" - */ - hooks_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World" - */ - html_url: string; - /** - * Unique identifier of the repository - * @example 42 - */ - id: number; - /** - * Whether this repository acts as a template that can be used to generate new repositories. - * @default false - * @example true - */ - is_template?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ - issue_comment_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ - issue_events_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ - issues_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ - keys_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ - labels_url: string; - language: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/languages" - */ - languages_url: string; - license: LicenseSimple | null; - master_branch?: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/merges" - */ - merges_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ - milestones_url: string; - /** - * @format uri - * @example "git:git.example.com/octocat/Hello-World" - */ - mirror_url: string | null; - /** - * The name of the repository. - * @example "Team Environment" - */ - name: string; - network_count?: number; - /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ - node_id: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ - notifications_url: string; - open_issues: number; - /** @example 0 */ - open_issues_count: number; - owner: SimpleUser | null; - permissions?: { - admin: boolean; - maintain?: boolean; - pull: boolean; - push: boolean; - triage?: boolean; +export class Api extends HttpClient { + streams = { + /** + * @description subscribes a client to receive out-of-band data + * + * @name StreamsCreate + * @request POST:/streams + */ + streamsCreate: ( + query: { + /** + * the location where data will be sent. Must be network accessible + * by the source server + * @format uri + * @example "https://tonys-server.com" + */ + callbackUrl: string; + }, + params: RequestParams = {}, + ) => + this.request< + { + /** + * this unique identifier allows management of the subscription + * @example "2531329f-fb09-4ef7-887e-84e648214436" + */ + subscriptionId: string; + }, + any + >({ + path: \`/streams\`, + method: "POST", + query: query, + format: "json", + ...params, + }), }; - /** - * Whether the repository is private or public. - * @default false - */ - private: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ - pulls_url: string; - /** - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - pushed_at: string | null; - /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ - releases_url: string; - /** @example 108 */ - size: number; - /** @example "git@github.com:octocat/Hello-World.git" */ - ssh_url: string; - /** @example 80 */ - stargazers_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" - */ - stargazers_url: string; - /** @example ""2020-07-09T00:17:42Z"" */ - starred_at?: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ - statuses_url: string; - subscribers_count?: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" - */ - subscribers_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscription" - */ - subscription_url: string; - /** - * @format uri - * @example "https://svn.github.com/octocat/Hello-World" - */ - svn_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/tags" - */ - tags_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/teams" - */ - teams_url: string; - temp_clone_token?: string; - template_repository?: { - allow_merge_commit?: boolean; - allow_rebase_merge?: boolean; - allow_squash_merge?: boolean; - archive_url?: string; - archived?: boolean; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - clone_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - created_at?: string; - default_branch?: string; - delete_branch_on_merge?: boolean; - deployments_url?: string; - description?: string; - disabled?: boolean; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_count?: number; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_pages?: boolean; - has_projects?: boolean; - has_wiki?: boolean; - homepage?: string; - hooks_url?: string; - html_url?: string; - id?: number; - is_template?: boolean; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - language?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - mirror_url?: string; - name?: string; - network_count?: number; - node_id?: string; - notifications_url?: string; - open_issues_count?: number; - owner?: { - avatar_url?: string; - events_url?: string; - followers_url?: string; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - html_url?: string; - id?: number; - login?: string; - node_id?: string; - organizations_url?: string; - received_events_url?: string; - repos_url?: string; - site_admin?: boolean; - starred_url?: string; - subscriptions_url?: string; - type?: string; - url?: string; - }; - permissions?: { - admin?: boolean; - pull?: boolean; - push?: boolean; - }; - private?: boolean; - pulls_url?: string; - pushed_at?: string; - releases_url?: string; - size?: number; - ssh_url?: string; - stargazers_count?: number; - stargazers_url?: string; - statuses_url?: string; - subscribers_count?: number; - subscribers_url?: string; - subscription_url?: string; - svn_url?: string; - tags_url?: string; - teams_url?: string; - temp_clone_token?: string; - topics?: string[]; - trees_url?: string; - updated_at?: string; - url?: string; - visibility?: string; - watchers_count?: number; - } | null; - topics?: string[]; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ - trees_url: string; - /** - * @format date-time - * @example "2011-01-26T19:14:43Z" - */ - updated_at: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World" - */ - url: string; - /** - * The repository visibility: public, private, or internal. - * @default "public" - */ - visibility?: string; - watchers: number; - /** @example 80 */ - watchers_count: number; } +" +`; -/** - * Repository Collaborator Permission - * Repository Collaborator Permission +exports[`simple > 'components-responses' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface RepositoryCollaboratorPermission { - permission: string; - user: SimpleUser | null; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Repository Invitation - * Repository invitations let you manage who you collaborate with. - */ -export interface RepositoryInvitation { - /** - * @format date-time - * @example "2016-06-13T14:52:50-05:00" - */ - created_at: string; - /** Whether or not the invitation has expired */ - expired?: boolean; - /** @example "https://github.com/octocat/Hello-World/invitations" */ - html_url: string; - /** - * Unique identifier of the repository invitation. - * @example 42 - */ - id: number; - invitee: SimpleUser | null; - inviter: SimpleUser | null; - node_id: string; - /** - * The permission associated with the invitation. - * @example "read" - */ - permissions: "read" | "write" | "admin"; - /** Minimal Repository */ - repository: MinimalRepository; - /** - * URL for the repository invitation - * @example "https://api.github.com/user/repository-invitations/1" - */ - url: string; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Repository Invitation - * Repository invitations let you manage who you collaborate with. - */ -export interface RepositorySubscription { - /** - * @format date-time - * @example "2012-10-06T21:34:12Z" - */ - created_at: string; - /** Determines if all notifications should be blocked from this repository. */ - ignored: boolean; - reason: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example" - */ - repository_url: string; - /** - * Determines if notifications should be received from this repository. - * @example true - */ - subscribed: boolean; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/example/subscription" - */ - url: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Legacy Review Comment - * Legacy Review Comment - */ -export interface ReviewComment { - _links: { - /** Hypermedia Link */ - html: Link; - /** Hypermedia Link */ - pull_request: Link; - /** Hypermedia Link */ - self: Link; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - /** How the author is associated with the repository. */ - author_association: AuthorAssociation; - /** @example "Great stuff" */ - body: string; - body_html?: string; - body_text?: string; - /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ - commit_id: string; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - created_at: string; - /** @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." */ - diff_hunk: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - */ - html_url: string; - /** @example 10 */ - id: number; - /** @example 8 */ - in_reply_to_id?: number; - /** - * The line of the blob to which the comment applies. The last line of the range for a multi-line comment - * @example 2 - */ - line?: number; - /** @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" */ - node_id: string; - /** @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" */ - original_commit_id: string; - /** - * The original line of the blob to which the comment applies. The last line of the range for a multi-line comment - * @example 2 - */ - original_line?: number; - /** @example 4 */ - original_position: number; - /** - * The original first line of the range for a multi-line comment. - * @example 2 - */ - original_start_line?: number | null; - /** @example "file1.txt" */ - path: string; - /** @example 1 */ - position: number | null; - /** @example 42 */ - pull_request_review_id: number | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" - */ - pull_request_url: string; - /** - * The side of the first line of the range for a multi-line comment. - * @default "RIGHT" - */ - side?: "LEFT" | "RIGHT"; - /** - * The first line of the range for a multi-line comment. - * @example 2 - */ - start_line?: number | null; - /** - * The side of the first line of the range for a multi-line comment. - * @default "RIGHT" - */ - start_side?: "LEFT" | "RIGHT" | null; - /** - * @format date-time - * @example "2011-04-14T16:00:49Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" - */ - url: string; - user: SimpleUser | null; -} -/** - * Self hosted runners - * A self hosted runner - */ -export interface Runner { - busy: boolean; - /** - * The id of the runner. - * @example 5 - */ - id: number; - labels: { - /** Unique identifier of the label. */ - id?: number; - /** Name of the label. */ - name?: string; - /** The type of label. Read-only labels are applied automatically when the runner is configured. */ - type?: "read-only" | "custom"; - }[]; - /** - * The name of the runner. - * @example "iMac" - */ - name: string; - /** - * The Operating System of the runner. - * @example "macos" - */ - os: string; - /** - * The status of the runner. - * @example "online" - */ - status: string; -} + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } -/** - * Runner Application - * Runner Application - */ -export interface RunnerApplication { - architecture: string; - download_url: string; - filename: string; - os: string; -} + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; -export interface RunnerGroupsEnterprise { - allows_public_repositories: boolean; - default: boolean; - id: number; - name: string; - runners_url: string; - selected_organizations_url?: string; - visibility: string; -} + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } -export interface RunnerGroupsOrg { - allows_public_repositories: boolean; - default: boolean; - id: number; - inherited: boolean; - inherited_allows_public_repositories?: boolean; - name: string; - runners_url: string; - /** Link to the selected repositories resource for this runner group. Not present unless visibility was set to `selected` */ - selected_repositories_url?: string; - visibility: string; -} + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } -export interface ScimEnterpriseGroup { - displayName?: string; - externalId?: string | null; - id: string; - members?: { - $ref?: string; - display?: string; - value?: string; - }[]; - meta?: { - created?: string; - lastModified?: string; - location?: string; - resourceType?: string; + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), }; - schemas: string[]; -} -export interface ScimEnterpriseUser { - active?: boolean; - emails?: { - primary?: boolean; - type?: string; - value?: string; - }[]; - externalId?: string; - groups?: { - value?: string; - }[]; - id: string; - meta?: { - created?: string; - lastModified?: string; - location?: string; - resourceType?: string; + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - name?: { - familyName?: string; - givenName?: string; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } }; - schemas: string[]; - userName?: string; -} -/** - * Scim Error - * Scim Error - */ -export interface ScimError { - detail?: string | null; - documentation_url?: string | null; - message?: string | null; - schemas?: string[]; - scimType?: string | null; - status?: number; -} + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; -export interface ScimGroupListEnterprise { - Resources: { - displayName?: string; - externalId?: string | null; - id: string; - members?: { - $ref?: string; - display?: string; - value?: string; - }[]; - meta?: { - created?: string; - lastModified?: string; - location?: string; - resourceType?: string; - }; - schemas: string[]; - }[]; - itemsPerPage: number; - schemas: string[]; - startIndex: number; - totalResults: number; + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * SCIM /Users - * SCIM /Users provisioning endpoints + * @title Title + * @version latest + * + * Description */ -export interface ScimUser { - /** - * The active status of the User. - * @example true - */ - active: boolean; - /** - * The name of the user, suitable for display to end-users - * @example "Jon Doe" - */ - displayName?: string | null; - /** - * user emails - * @minItems 1 - * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] - */ - emails: { - primary?: boolean; - value: string; - }[]; - /** - * The ID of the User. - * @example "a7b0f98395" - */ - externalId: string | null; - /** associated groups */ - groups?: { - display?: string; - value?: string; - }[]; - /** - * Unique identifier of an external identity - * @example "1b78eada-9baa-11e6-9eb6-a431576d590e" - */ - id: string; - meta: { - /** - * @format date-time - * @example "2019-01-24T22:45:36.000Z" - */ - created?: string; - /** - * @format date-time - * @example "2019-01-24T22:45:36.000Z" - */ - lastModified?: string; +export class Api extends HttpClient { + api = { /** - * @format uri - * @example "https://api.github.com/scim/v2/organizations/myorg-123abc55141bfd8f/Users/c42772b5-2029-11e9-8543-9264a97dec8d" + * No description + * + * @name GetData + * @request GET:/api */ - location?: string; - /** @example "User" */ - resourceType?: string; - }; - /** @example {"givenName":"Jane","familyName":"User"} */ - name: { - familyName: string | null; - formatted?: string | null; - givenName: string | null; + getData: (params: RequestParams = {}) => + this.request< + { + data?: string; + }, + any + >({ + path: \`/api\`, + method: "GET", + ...params, + }), }; - /** - * Set of operations to be performed - * @minItems 1 - * @example [{"op":"replace","value":{"active":false}}] - */ - operations?: { - op: "add" | "remove" | "replace"; - path?: string; - value?: string | object | any[]; - }[]; - /** The ID of the organization. */ - organization_id?: number; - /** - * SCIM schema used. - * @minItems 1 - */ - schemas: string[]; - /** - * Configured by the admin. Could be an email, login, or username - * @example "someone@example.com" - */ - userName: string | null; } +" +`; -/** - * SCIM User List - * SCIM User List +exports[`simple > 'enums' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface ScimUserList { - Resources: ScimUser[]; - /** @example 10 */ - itemsPerPage: number; - /** - * SCIM schema used. - * @minItems 1 - */ - schemas: string[]; - /** @example 1 */ - startIndex: number; - /** @example 3 */ - totalResults: number; + +/** @format int32 */ +export enum EmptyEnum { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", } -export interface ScimUserListEnterprise { - Resources: { - active?: boolean; - emails?: { - primary?: boolean; - type?: string; - value?: string; - }[]; - externalId?: string; - groups?: { - value?: string; - }[]; - id: string; - meta?: { - created?: string; - lastModified?: string; - location?: string; - resourceType?: string; - }; - name?: { - familyName?: string; - givenName?: string; - }; - schemas: string[]; - userName?: string; - }[]; - itemsPerPage: number; - schemas: string[]; - startIndex: number; - totalResults: number; +/** @format int32 */ +export enum EnumWithMoreNames { + Bla = 1, + Blabla = "Blabla", + Boiler = "Boiler", } -/** Scoped Installation */ -export interface ScopedInstallation { - /** Simple User */ - account: SimpleUser; - /** @example true */ - has_multiple_single_files?: boolean; - /** The permissions granted to the user-to-server access token. */ - permissions: AppPermissions; - /** - * @format uri - * @example "https://api.github.com/users/octocat/repos" - */ - repositories_url: string; - /** Describe whether all repositories have been selected or there's a selection involved */ - repository_selection: "all" | "selected"; - /** @example "config.yaml" */ - single_file_name: string | null; - /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ - single_file_paths?: string[]; +export enum OnlyEnumNames { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", } -/** Search Result Text Matches */ -export type SearchResultTextMatches = { - fragment?: string; - matches?: { - indices?: number[]; - text?: string; - }[]; - object_type?: string | null; - object_url?: string; - property?: string; -}[]; +/** @format int32 */ +export enum SomeInterestEnum { + Bla = 6, + Blabla = 2, + Boiler = 1, + Bbabab = 67, + Nowadays = 88, + FAIL = 122, + Vvvvv = 88, + ASdasAS = 0, + ASDsacZX = 213, + Zook = 12378, + EnumMm = 123125, + VCsa = 32452, + Yuuu = 1111, + ASddd = 66666, + ASdsdsa = "ASdsdsa", + ASDds = "ASDds", + HSDFDS = "HSDFDS", +} -export interface SecretScanningAlert { - /** The time that the alert was created in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. */ - created_at?: AlertCreatedAt; - /** The GitHub URL of the alert resource. */ - html_url?: AlertHtmlUrl; - /** The security alert number. */ - number?: AlertNumber; - /** **Required when the `state` is `resolved`.** The reason for resolving the alert. Can be one of `false_positive`, `wont_fix`, `revoked`, or `used_in_tests`. */ - resolution?: SecretScanningAlertResolution; - /** - * The time that the alert was resolved in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. - * @format date-time - */ - resolved_at?: string | null; - /** Simple User */ - resolved_by?: SimpleUser; - /** The secret that was detected. */ - secret?: string; - /** The type of secret that secret scanning detected. */ - secret_type?: string; - /** Sets the state of the secret scanning alert. Can be either `open` or `resolved`. You must provide `resolution` when you set the state to `resolved`. */ - state?: SecretScanningAlertState; - /** The REST API URL of the alert resource. */ - url?: AlertUrl; +export enum StringCompleteEnums { + Bla = "foo", + Blabla = "bar", + Boiler = "baz", } -/** **Required when the `state` is `resolved`.** The reason for resolving the alert. Can be one of `false_positive`, `wont_fix`, `revoked`, or `used_in_tests`. */ -export type SecretScanningAlertResolution = "false_positive" | "wont_fix" | "revoked" | "used_in_tests" | null; +export enum StringEnums { + Bla = "foo", + Blabla = "bar", + Boiler = "Boiler", +} -/** Sets the state of the secret scanning alert. Can be either `open` or `resolved`. You must provide `resolution` when you set the state to `resolved`. */ -export enum SecretScanningAlertState { - Open = "open", - Resolved = "resolved", +export enum StringOnlyEnumNames { + Bla = "Bla", + Blabla = "Blabla", + Boiler = "Boiler", } -export interface SelectedActions { - /** Whether GitHub-owned actions are allowed. For example, this includes the actions in the `actions` organization. */ - github_owned_allowed: boolean; - /** Specifies a list of string-matching patterns to allow specific action(s). Wildcards, tags, and SHAs are allowed. For example, `monalisa/octocat@*`, `monalisa/octocat@v2`, `monalisa/*`." */ - patterns_allowed: string[]; - /** Whether actions in GitHub Marketplace from verified creators are allowed. Set to `true` to allow all GitHub Marketplace actions by verified creators. */ - verified_allowed: boolean; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** The API URL to use to get or set the actions that are allowed to run, when `allowed_actions` is set to `selected`. */ -export type SelectedActionsUrl = string; +export type RequestParams = Omit; -/** - * Short Blob - * Short Blob - */ -export interface ShortBlob { - sha: string; - url: string; +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Short Branch - * Short Branch - */ -export interface ShortBranch { - commit: { - sha: string; - /** @format uri */ - url: string; - }; - name: string; - protected: boolean; - /** Branch Protection */ - protection?: BranchProtection; - /** @format uri */ - protection_url?: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Simple Commit - * Simple Commit - */ -export interface SimpleCommit { - author: { - email: string; - name: string; - } | null; - committer: { - email: string; - name: string; - } | null; - id: string; - message: string; - /** @format date-time */ - timestamp: string; - tree_id: string; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** Simple Commit Status */ -export interface SimpleCommitStatus { - /** @format uri */ - avatar_url: string | null; - context: string; - /** @format date-time */ - created_at: string; - description: string | null; - id: number; - node_id: string; - required?: boolean | null; - state: string; - /** @format uri */ - target_url: string; - /** @format date-time */ - updated_at: string; - /** @format uri */ - url: string; +export class HttpClient { + public baseUrl: string = "https://ffff.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Simple User - * Simple User + * @title No title + * @baseUrl https://ffff.com */ -export type SimpleUser = { - /** - * @format uri - * @example "https://github.com/images/error/octocat_happy.gif" - */ - avatar_url: string; - /** @example "https://api.github.com/users/octocat/events{/privacy}" */ - events_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/followers" - */ - followers_url: string; - /** @example "https://api.github.com/users/octocat/following{/other_user}" */ - following_url: string; - /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ - gists_url: string; - /** @example "41d064eb2195891e12d0413f63227ea7" */ - gravatar_id: string | null; - /** - * @format uri - * @example "https://github.com/octocat" - */ - html_url: string; - /** @example 1 */ - id: number; - /** @example "octocat" */ - login: string; - /** @example "MDQ6VXNlcjE=" */ - node_id: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/orgs" - */ - organizations_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/received_events" - */ - received_events_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/repos" - */ - repos_url: string; - site_admin: boolean; - /** @example ""2020-07-09T00:17:55Z"" */ - starred_at?: string; - /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ - starred_url: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat/subscriptions" - */ - subscriptions_url: string; - /** @example "User" */ - type: string; - /** - * @format uri - * @example "https://api.github.com/users/octocat" - */ - url: string; -}; +export class Api extends HttpClient {} +" +`; -/** - * Stargazer - * Stargazer +exports[`simple > 'example1' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface Stargazer { - /** @format date-time */ - starred_at: string; - user: SimpleUser | null; -} /** - * Starred Repository - * Starred Repository + * some description + * @pattern ^[A-Z]{3,3}$ */ -export interface StarredRepository { - /** A git repository */ - repo: Repository; - /** @format date-time */ - starred_at: string; +export type Currency = string; + +/** A TDE certificate that can be uploaded into a server. */ +export type TdeCertificate = { + /** Resource ID. */ + id?: string; + /** Resource name. */ + name?: string; + /** Resource type. */ + type?: string; +} & { + /** Resource properties. */ + properties?: TdeCertificateProperties; +}; + +/** A TDE certificate that can be uploaded into a server. */ +export type TdeCertificate2 = { + /** Resource ID. */ + id?: string; + /** Resource name. */ + name?: string; + /** Resource type. */ + type?: string; +}; + +/** Properties of a TDE certificate. */ +export interface TdeCertificateProperties { + /** The certificate password. */ + certPassword?: string; + /** The base64 encoded certificate private blob. */ + privateBlob: string; } -/** - * Status - * The status of a commit. - */ -export interface Status { - avatar_url: string | null; - context: string; - created_at: string; - /** Simple User */ - creator: SimpleUser; - description: string; - id: number; - node_id: string; - state: string; - target_url: string; - updated_at: string; - url: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Status Check Policy - * Status Check Policy - */ -export interface StatusCheckPolicy { - /** @example ["continuous-integration/travis-ci"] */ - contexts: string[]; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks/contexts" - */ - contexts_url: string; - /** @example true */ - strict: boolean; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks" - */ - url: string; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Tag - * Tag - */ -export interface Tag { - commit: { - sha: string; - /** @format uri */ - url: string; - }; - /** @example "v0.1" */ - name: string; - node_id: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/tarball/v0.1" - */ - tarball_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World/zipball/v0.1" - */ - zipball_url: string; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Team - * Groups of organization members that gives permissions on specified repositories. - */ -export interface Team { - description: string | null; - /** - * @format uri - * @example "https://github.com/orgs/rails/teams/core" - */ - html_url: string; - id: number; - members_url: string; - name: string; - node_id: string; - parent?: TeamSimple | null; - permission: string; - privacy?: string; - /** @format uri */ - repositories_url: string; - slug: string; - /** @format uri */ - url: string; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", } -/** - * Team Discussion - * A team discussion is a persistent record of a free-form conversation within a team. - */ -export interface TeamDiscussion { - author: SimpleUser | null; - /** - * The main text of the discussion. - * @example "Please suggest improvements to our workflow in comments." - */ - body: string; - /** @example "

Hi! This is an area for us to collaborate as a team

" */ - body_html: string; - /** - * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. - * @example "0307116bbf7ced493b8d8a346c650b71" - */ - body_version: string; - /** @example 0 */ - comments_count: number; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/2343027/discussions/1/comments" - */ - comments_url: string; - /** - * @format date-time - * @example "2018-01-25T18:56:31Z" - */ - created_at: string; - /** - * @format uri - * @example "https://github.com/orgs/github/teams/justice-league/discussions/1" - */ - html_url: string; - /** @format date-time */ - last_edited_at: string | null; - /** @example "MDE0OlRlYW1EaXNjdXNzaW9uMQ==" */ - node_id: string; - /** - * The unique sequence number of a team discussion. - * @example 42 - */ - number: number; - /** - * Whether or not this discussion should be pinned for easy retrieval. - * @example true - */ - pinned: boolean; - /** - * Whether or not this discussion should be restricted to team members and organization administrators. - * @example true - */ - private: boolean; - reactions?: ReactionRollup; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/2343027" - */ - team_url: string; - /** - * The title of the discussion. - * @example "How can we improve our workflow?" - */ - title: string; - /** - * @format date-time - * @example "2018-01-25T18:56:31Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/2343027/discussions/1" - */ - url: string; +export class HttpClient { + public baseUrl: string = "https://management.azure.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; } /** - * Team Discussion Comment - * A reply to a discussion within a team. + * @title SqlManagementClient + * @version 2017-10-01-preview + * @baseUrl https://management.azure.com + * + * The Azure SQL Database management API provides a RESTful set of web APIs that interact with Azure SQL Database services to manage your databases. The API enables users to create, retrieve, update, and delete databases, servers, and other entities. */ -export interface TeamDiscussionComment { - author: SimpleUser | null; - /** - * The main text of the comment. - * @example "I agree with this suggestion." - */ - body: string; - /** @example "

Do you like apples?

" */ - body_html: string; - /** - * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. - * @example "0307116bbf7ced493b8d8a346c650b71" - */ - body_version: string; - /** - * @format date-time - * @example "2018-01-15T23:53:58Z" - */ - created_at: string; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/2403582/discussions/1" - */ - discussion_url: string; - /** - * @format uri - * @example "https://github.com/orgs/github/teams/justice-league/discussions/1/comments/1" - */ - html_url: string; - /** @format date-time */ - last_edited_at: string | null; - /** @example "MDIxOlRlYW1EaXNjdXNzaW9uQ29tbWVudDE=" */ - node_id: string; - /** - * The unique sequence number of a team discussion comment. - * @example 42 - */ - number: number; - reactions?: ReactionRollup; - /** - * @format date-time - * @example "2018-01-15T23:53:58Z" - */ - updated_at: string; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/2403582/discussions/1/comments/1" - */ - url: string; +export class Api extends HttpClient { + subscriptions = { + /** + * @description Creates a TDE certificate for a given server. + * + * @tags ManagedInstanceTdeCertificates + * @name ManagedInstanceTdeCertificatesCreate + * @request POST:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/tdeCertificates + */ + managedInstanceTdeCertificatesCreate: ( + resourceGroupName: string, + managedInstanceName: string, + subscriptionId: string, + query: { + /** The API version to use for the request. */ + "api-version": string; + }, + parameters: TdeCertificate, + params: RequestParams = {}, + ) => + this.request({ + path: \`/subscriptions/\${subscriptionId}/resourceGroups/\${resourceGroupName}/providers/Microsoft.Sql/managedInstances/\${managedInstanceName}/tdeCertificates\`, + method: "POST", + query: query, + body: parameters, + type: ContentType.Json, + ...params, + }), + }; } +" +`; -/** - * Full Team - * Groups of organization members that gives permissions on specified repositories. +exports[`simple > 'explode-param-3' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- */ -export interface TeamFull { - /** - * @format date-time - * @example "2017-07-14T16:53:42Z" - */ - created_at: string; - /** @example "A great team." */ - description: string | null; - /** - * @format uri - * @example "https://github.com/orgs/rails/teams/core" - */ - html_url: string; - /** - * Unique identifier of the team - * @example 42 - */ - id: number; - /** - * Distinguished Name (DN) that team maps to within LDAP environment - * @example "uid=example,ou=users,dc=github,dc=com" - */ - ldap_dn?: string; - /** @example 3 */ - members_count: number; - /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ - members_url: string; - /** - * Name of the team - * @example "Developers" - */ - name: string; - /** @example "MDQ6VGVhbTE=" */ - node_id: string; - /** Organization Full */ - organization: OrganizationFull; - parent?: TeamSimple | null; - /** - * Permission that the team will have for its repositories - * @example "push" - */ - permission: string; - /** - * The level of privacy this team should have - * @example "closed" - */ - privacy?: "closed" | "secret"; - /** @example 10 */ - repos_count: number; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/1/repos" - */ - repositories_url: string; - /** @example "justice-league" */ - slug: string; + +export interface Floop { + info?: string; +} + +export interface QueryParams { /** - * @format date-time - * @example "2017-08-17T12:37:15Z" + * Page size + * @format int32 + * @min 0 */ - updated_at: string; + "page-size"?: number | null; /** - * URL for the team - * @format uri - * @example "https://api.github.com/organizations/1/team/1" + * Page number + * @format int32 + * @min 0 */ - url: string; + page?: number | null; } -/** - * Team Membership - * Team Membership - */ -export interface TeamMembership { - /** - * The role of the user in the team. - * @default "member" - * @example "member" - */ - role: "member" | "maintainer"; - state: string; - /** @format uri */ - url: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; } -/** - * Team Project - * A team's access to a project. - */ -export interface TeamProject { - body: string | null; - columns_url: string; - created_at: string; - /** Simple User */ - creator: SimpleUser; - html_url: string; - id: number; - name: string; - node_id: string; - number: number; - /** The organization permission for this project. Only present when owner is an organization. */ - organization_permission?: string; - owner_url: string; - permissions: { - admin: boolean; - read: boolean; - write: boolean; - }; - /** Whether the project is private or not. Only present when owner is an organization. */ - private?: boolean; - state: string; - updated_at: string; - url: string; +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; } -/** - * Team Repository - * A team's access to a repository. - */ -export interface TeamRepository { - /** - * Whether to allow merge commits for pull requests. - * @default true - * @example true - */ - allow_merge_commit?: boolean; - /** - * Whether to allow rebase merges for pull requests. - * @default true - * @example true - */ - allow_rebase_merge?: boolean; - /** - * Whether to allow squash merges for pull requests. - * @default true - * @example true - */ - allow_squash_merge?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ - archive_url: string; - /** - * Whether the repository is archived. - * @default false - */ - archived: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ - assignees_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ - blobs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ - branches_url: string; - /** @example "https://github.com/octocat/Hello-World.git" */ - clone_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ - collaborators_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ - comments_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ - commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ - compare_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ - contents_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/contributors" - */ - contributors_url: string; - /** - * @format date-time - * @example "2011-01-26T19:01:12Z" - */ - created_at: string | null; - /** - * The default branch of the repository. - * @example "master" - */ - default_branch: string; - /** - * Whether to delete head branches when pull requests are merged - * @default false - * @example false - */ - delete_branch_on_merge?: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/deployments" - */ - deployments_url: string; - /** @example "This your first repo!" */ - description: string | null; - /** Returns whether or not this repository disabled. */ - disabled: boolean; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/downloads" - */ - downloads_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/events" - */ - events_url: string; - fork: boolean; - forks: number; - /** @example 9 */ - forks_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/forks" - */ - forks_url: string; - /** @example "octocat/Hello-World" */ - full_name: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ - git_commits_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ - git_refs_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ - git_tags_url: string; - /** @example "git:github.com/octocat/Hello-World.git" */ - git_url: string; - /** - * Whether downloads are enabled. - * @default true - * @example true - */ - has_downloads: boolean; - /** - * Whether issues are enabled. - * @default true - * @example true - */ - has_issues: boolean; - has_pages: boolean; - /** - * Whether projects are enabled. - * @default true - * @example true - */ - has_projects: boolean; - /** - * Whether the wiki is enabled. - * @default true - * @example true - */ - has_wiki: boolean; - /** - * @format uri - * @example "https://github.com" - */ - homepage: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/hooks" - */ - hooks_url: string; - /** - * @format uri - * @example "https://github.com/octocat/Hello-World" - */ - html_url: string; - /** - * Unique identifier of the repository - * @example 42 - */ - id: number; - /** - * Whether this repository acts as a template that can be used to generate new repositories. - * @default false - * @example true - */ - is_template?: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ - issue_comment_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ - issue_events_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ - issues_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ - keys_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ - labels_url: string; - language: string | null; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/languages" - */ - languages_url: string; - license: LicenseSimple | null; - master_branch?: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/merges" - */ - merges_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ - milestones_url: string; - /** - * @format uri - * @example "git:git.example.com/octocat/Hello-World" - */ - mirror_url: string | null; - /** - * The name of the repository. - * @example "Team Environment" - */ - name: string; - network_count?: number; - /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ - node_id: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ - notifications_url: string; - open_issues: number; - /** @example 0 */ - open_issues_count: number; - owner: SimpleUser | null; - permissions?: { - admin: boolean; - maintain?: boolean; - pull: boolean; - push: boolean; - triage?: boolean; - }; - /** - * Whether the repository is private or public. - * @default false - */ - private: boolean; - /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ - pulls_url: string; - /** - * @format date-time - * @example "2011-01-26T19:06:43Z" - */ - pushed_at: string | null; - /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ - releases_url: string; - /** @example 108 */ - size: number; - /** @example "git@github.com:octocat/Hello-World.git" */ - ssh_url: string; - /** @example 80 */ - stargazers_count: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" - */ - stargazers_url: string; - /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ - statuses_url: string; - subscribers_count?: number; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" - */ - subscribers_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/subscription" - */ - subscription_url: string; - /** - * @format uri - * @example "https://svn.github.com/octocat/Hello-World" - */ - svn_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/tags" - */ - tags_url: string; - /** - * @format uri - * @example "http://api.github.com/repos/octocat/Hello-World/teams" - */ - teams_url: string; - temp_clone_token?: string; - template_repository?: Repository | null; - topics?: string[]; - /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ - trees_url: string; - /** - * @format date-time - * @example "2011-01-26T19:14:43Z" - */ - updated_at: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/octocat/Hello-World" - */ - url: string; - /** - * The repository visibility: public, private, or internal. - * @default "public" - */ - visibility?: string; - watchers: number; - /** @example 80 */ - watchers_count: number; +export interface HttpResponse extends Response { + data: D; + error: E; } -/** - * Team Simple - * Groups of organization members that gives permissions on specified repositories. - */ -export type TeamSimple = { - /** - * Description of the team - * @example "A great team." - */ - description: string | null; - /** - * @format uri - * @example "https://github.com/orgs/rails/teams/core" - */ - html_url: string; - /** - * Unique identifier of the team - * @example 1 - */ - id: number; - /** - * Distinguished Name (DN) that team maps to within LDAP environment - * @example "uid=example,ou=users,dc=github,dc=com" - */ - ldap_dn?: string; - /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ - members_url: string; - /** - * Name of the team - * @example "Justice League" - */ - name: string; - /** @example "MDQ6VGVhbTE=" */ - node_id: string; - /** - * Permission that the team will have for its repositories - * @example "admin" - */ - permission: string; - /** - * The level of privacy this team should have - * @example "closed" - */ - privacy?: string; - /** - * @format uri - * @example "https://api.github.com/organizations/1/team/1/repos" - */ - repositories_url: string; - /** @example "justice-league" */ - slug: string; - /** - * URL for the team - * @format uri - * @example "https://api.github.com/organizations/1/team/1" - */ - url: string; -}; +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} /** - * Thread - * Thread + * @title API + * @version 0.1 + * + * Documentation */ -export interface Thread { - id: string; - last_read_at: string | null; - reason: string; - /** Minimal Repository */ - repository: MinimalRepository; - subject: { - latest_comment_url: string; - title: string; - type: string; - url: string; +export class Api extends HttpClient { + user = { + /** + * No description + * + * @name CreateFile + * @summary Some summary + * @request POST:/{user}/foos + */ + createFile: ( + user: string, + data: { + /** @default "" */ + meme: string; + memeType?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/\${user}/foos\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + }; + something = { + /** + * No description + * + * @name Gets + * @request GET:/something/ + */ + gets: ( + query?: { + params?: QueryParams; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/something/\`, + method: "GET", + query: query, + ...params, + }), }; - /** @example "https://api.github.com/notifications/threads/2/subscription" */ - subscription_url: string; - unread: boolean; - updated_at: string; - url: string; } +" +`; + +exports[`simple > 'file-formdata-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Title + * @version v0.1 + */ +export class Api extends HttpClient { + uploadFile = { + /** + * No description + * + * @tags tag + * @name UploadFile + * @summary Upload file + * @request POST:/upload-file + */ + uploadFile: ( + data: { + /** + * File description + * @format binary + */ + file?: File; + /** Boolean flag */ + someFlag?: boolean; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/upload-file\`, + method: "POST", + body: data, + type: ContentType.FormData, + ...params, + }), + }; +} +" +`; + +exports[`simple > 'full-swagger-scheme' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface ActionsBillingUsage { + /** The amount of free GitHub Actions minutes available. */ + included_minutes: number; + minutes_used_breakdown: { + /** Total minutes used on macOS runner machines. */ + MACOS?: number; + /** Total minutes used on Ubuntu runner machines. */ + UBUNTU?: number; + /** Total minutes used on Windows runner machines. */ + WINDOWS?: number; + }; + /** The sum of the free and paid GitHub Actions minutes used. */ + total_minutes_used: number; + /** The total paid GitHub Actions minutes used. */ + total_paid_minutes_used: number; +} + +/** Whether GitHub Actions is enabled on the repository. */ +export type ActionsEnabled = boolean; + +export interface ActionsEnterprisePermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_organizations: EnabledOrganizations; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; + /** The API URL to use to get or set the selected organizations that are allowed to run GitHub Actions, when \`enabled_organizations\` is set to \`selected\`. */ + selected_organizations_url?: string; +} + +export interface ActionsOrganizationPermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_repositories: EnabledRepositories; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; + /** The API URL to use to get or set the selected repositories that are allowed to run GitHub Actions, when \`enabled_repositories\` is set to \`selected\`. */ + selected_repositories_url?: string; +} + +/** + * ActionsPublicKey + * The public key used for setting Actions Secrets. + */ +export interface ActionsPublicKey { + /** @example "2011-01-26T19:01:12Z" */ + created_at?: string; + /** @example 2 */ + id?: number; + /** + * The Base64 encoded public key. + * @example "hBT5WZEj8ZoOv6TYJsfWq7MxTEQopZO5/IT3ZCVQPzs=" + */ + key: string; + /** + * The identifier for the key. + * @example "1234567" + */ + key_id: string; + /** @example "ssh-rsa AAAAB3NzaC1yc2EAAA" */ + title?: string; + /** @example "https://api.github.com/user/keys/2" */ + url?: string; +} + +export interface ActionsRepositoryPermissions { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions: AllowedActions; + /** Whether GitHub Actions is enabled on the repository. */ + enabled: ActionsEnabled; + /** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ + selected_actions_url?: SelectedActionsUrl; +} + +/** + * Actions Secret + * Set secrets for GitHub Actions. + */ +export interface ActionsSecret { + /** @format date-time */ + created_at: string; + /** + * The name of the secret. + * @example "SECRET_TOKEN" + */ + name: string; + /** @format date-time */ + updated_at: string; +} + +/** + * Actor + * Actor + */ +export interface Actor { + /** @format uri */ + avatar_url: string; + display_login?: string; + gravatar_id: string | null; + id: number; + login: string; + /** @format uri */ + url: string; +} + +/** + * The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type AlertCreatedAt = string; + +/** + * The GitHub URL of the alert resource. + * @format uri + */ +export type AlertHtmlUrl = string; + +/** The security alert number. */ +export type AlertNumber = number; + +/** + * The REST API URL of the alert resource. + * @format uri + */ +export type AlertUrl = string; + +/** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ +export enum AllowedActions { + All = "all", + LocalOnly = "local_only", + Selected = "selected", +} + +/** + * Api Overview + * Api Overview + */ +export interface ApiOverview { + /** @example ["13.64.0.0/16","13.65.0.0/16"] */ + actions?: string[]; + /** @example ["127.0.0.1/32"] */ + api?: string[]; + /** @example ["127.0.0.1/32"] */ + git?: string[]; + /** @example ["127.0.0.1/32"] */ + hooks?: string[]; + /** @example ["54.158.161.132","54.226.70.38"] */ + importer?: string[]; + /** @example ["192.30.252.153/32","192.30.252.154/32"] */ + pages?: string[]; + ssh_key_fingerprints?: { + SHA256_DSA?: string; + SHA256_RSA?: string; + }; + /** @example true */ + verifiable_password_authentication: boolean; + /** @example ["127.0.0.1/32"] */ + web?: string[]; +} + +/** + * App Permissions + * The permissions granted to the user-to-server access token. + * @example {"contents":"read","issues":"read","deployments":"write","single_file":"read"} + */ +export interface AppPermissions { + /** The level of permission to grant the access token for GitHub Actions workflows, workflow runs, and artifacts. Can be one of: \`read\` or \`write\`. */ + actions?: "read" | "write"; + /** The level of permission to grant the access token for repository creation, deletion, settings, teams, and collaborators creation. Can be one of: \`read\` or \`write\`. */ + administration?: "read" | "write"; + /** The level of permission to grant the access token for checks on code. Can be one of: \`read\` or \`write\`. */ + checks?: "read" | "write"; + /** The level of permission to grant the access token for notification of content references and creation content attachments. Can be one of: \`read\` or \`write\`. */ + content_references?: "read" | "write"; + /** The level of permission to grant the access token for repository contents, commits, branches, downloads, releases, and merges. Can be one of: \`read\` or \`write\`. */ + contents?: "read" | "write"; + /** The level of permission to grant the access token for deployments and deployment statuses. Can be one of: \`read\` or \`write\`. */ + deployments?: "read" | "write"; + /** The level of permission to grant the access token for managing repository environments. Can be one of: \`read\` or \`write\`. */ + environments?: "read" | "write"; + /** The level of permission to grant the access token for issues and related comments, assignees, labels, and milestones. Can be one of: \`read\` or \`write\`. */ + issues?: "read" | "write"; + /** The level of permission to grant the access token for organization teams and members. Can be one of: \`read\` or \`write\`. */ + members?: "read" | "write"; + /** The level of permission to grant the access token to search repositories, list collaborators, and access repository metadata. Can be one of: \`read\` or \`write\`. */ + metadata?: "read" | "write"; + /** The level of permission to grant the access token to manage access to an organization. Can be one of: \`read\` or \`write\`. */ + organization_administration?: "read" | "write"; + /** The level of permission to grant the access token to manage the post-receive hooks for an organization. Can be one of: \`read\` or \`write\`. */ + organization_hooks?: "read" | "write"; + /** The level of permission to grant the access token for viewing an organization's plan. Can be one of: \`read\`. */ + organization_plan?: "read"; + /** The level of permission to grant the access token to manage organization projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ + organization_projects?: "read" | "write" | "admin"; + /** The level of permission to grant the access token to manage organization secrets. Can be one of: \`read\` or \`write\`. */ + organization_secrets?: "read" | "write"; + /** The level of permission to grant the access token to view and manage GitHub Actions self-hosted runners available to an organization. Can be one of: \`read\` or \`write\`. */ + organization_self_hosted_runners?: "read" | "write"; + /** The level of permission to grant the access token to view and manage users blocked by the organization. Can be one of: \`read\` or \`write\`. */ + organization_user_blocking?: "read" | "write"; + /** The level of permission to grant the access token for packages published to GitHub Packages. Can be one of: \`read\` or \`write\`. */ + packages?: "read" | "write"; + /** The level of permission to grant the access token to retrieve Pages statuses, configuration, and builds, as well as create new builds. Can be one of: \`read\` or \`write\`. */ + pages?: "read" | "write"; + /** The level of permission to grant the access token for pull requests and related comments, assignees, labels, milestones, and merges. Can be one of: \`read\` or \`write\`. */ + pull_requests?: "read" | "write"; + /** The level of permission to grant the access token to manage the post-receive hooks for a repository. Can be one of: \`read\` or \`write\`. */ + repository_hooks?: "read" | "write"; + /** The level of permission to grant the access token to manage repository projects, columns, and cards. Can be one of: \`read\`, \`write\`, or \`admin\`. */ + repository_projects?: "read" | "write" | "admin"; + /** The level of permission to grant the access token to view and manage secret scanning alerts. Can be one of: \`read\` or \`write\`. */ + secret_scanning_alerts?: "read" | "write"; + /** The level of permission to grant the access token to manage repository secrets. Can be one of: \`read\` or \`write\`. */ + secrets?: "read" | "write"; + /** The level of permission to grant the access token to view and manage security events like code scanning alerts. Can be one of: \`read\` or \`write\`. */ + security_events?: "read" | "write"; + /** The level of permission to grant the access token to manage just a single file. Can be one of: \`read\` or \`write\`. */ + single_file?: "read" | "write"; + /** The level of permission to grant the access token for commit statuses. Can be one of: \`read\` or \`write\`. */ + statuses?: "read" | "write"; + /** The level of permission to grant the access token to manage team discussions and related comments. Can be one of: \`read\` or \`write\`. */ + team_discussions?: "read" | "write"; + /** The level of permission to grant the access token to retrieve Dependabot alerts. Can be one of: \`read\`. */ + vulnerability_alerts?: "read"; + /** The level of permission to grant the access token to update GitHub Actions workflow files. Can be one of: \`write\`. */ + workflows?: "write"; +} + +/** + * Application Grant + * The authorization associated with an OAuth Access. + */ +export interface ApplicationGrant { + app: { + client_id: string; + name: string; + /** @format uri */ + url: string; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example ["public_repo"] */ + scopes: string[]; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/applications/grants/1" + */ + url: string; + user?: SimpleUser | null; +} + +/** + * Artifact + * An artifact + */ +export interface Artifact { + /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5/zip" */ + archive_download_url: string; + /** @format date-time */ + created_at: string | null; + /** Whether or not the artifact has expired. */ + expired: boolean; + /** @format date-time */ + expires_at: string; + /** @example 5 */ + id: number; + /** + * The name of the artifact. + * @example "AdventureWorks.Framework" + */ + name: string; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + /** + * The size in bytes of the artifact. + * @example 12345 + */ + size_in_bytes: number; + /** @format date-time */ + updated_at: string | null; + /** @example "https://api.github.com/repos/github/hello-world/actions/artifacts/5" */ + url: string; +} + +export interface AuditLogEvent { + /** The time the audit log event occurred, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ + "@timestamp"?: number; + /** The name of the action that was performed, for example \`user.login\` or \`repo.create\`. */ + action?: string; + active?: boolean; + active_was?: boolean; + /** The actor who performed the action. */ + actor?: string; + /** The username of the account being blocked. */ + blocked_user?: string; + business?: string; + config?: any[]; + config_was?: any[]; + content_type?: string; + /** The time the audit log event was recorded, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). */ + created_at?: number; + deploy_key_fingerprint?: string; + emoji?: string; + events?: any[]; + events_were?: any[]; + explanation?: string; + fingerprint?: string; + hook_id?: number; + limited_availability?: boolean; + message?: string; + name?: string; + old_user?: string; + openssh_public_key?: string; + org?: string; + previous_visibility?: string; + read_only?: boolean; + /** The name of the repository. */ + repo?: string; + /** The name of the repository. */ + repository?: string; + repository_public?: boolean; + target_login?: string; + team?: string; + /** The type of protocol (for example, HTTP or SSH) used to transfer Git data. */ + transport_protocol?: number; + /** A human readable name for the protocol (for example, HTTP or SSH) used to transfer Git data. */ + transport_protocol_name?: string; + /** The user that was affected by the action performed (if available). */ + user?: string; + /** The repository visibility, for example \`public\` or \`private\`. */ + visibility?: string; +} + +/** + * Authentication Token + * Authentication Token + */ +export interface AuthenticationToken { + /** + * The time this token expires + * @format date-time + * @example "2016-07-11T22:14:10Z" + */ + expires_at: string; + /** @example {"issues":"read","deployments":"write"} */ + permissions?: object; + /** The repositories this token has access to */ + repositories?: Repository[]; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection?: "all" | "selected"; + /** @example "config.yaml" */ + single_file?: string | null; + /** + * The token used for authentication + * @example "v1.1f699f1069f60xxx" + */ + token: string; +} + +/** + * author_association + * How the author is associated with the repository. + * @example "OWNER" + */ +export enum AuthorAssociation { + COLLABORATOR = "COLLABORATOR", + CONTRIBUTOR = "CONTRIBUTOR", + FIRST_TIMER = "FIRST_TIMER", + FIRST_TIME_CONTRIBUTOR = "FIRST_TIME_CONTRIBUTOR", + MANNEQUIN = "MANNEQUIN", + MEMBER = "MEMBER", + NONE = "NONE", + OWNER = "OWNER", +} + +/** + * Authorization + * The authorization for an OAuth app, GitHub App, or a Personal Access Token. + */ +export interface Authorization { + app: { + client_id: string; + name: string; + /** @format uri */ + url: string; + }; + /** @format date-time */ + created_at: string; + fingerprint: string | null; + hashed_token: string | null; + id: number; + installation?: ScopedInstallation | null; + note: string | null; + /** @format uri */ + note_url: string | null; + /** A list of scopes that this authorization is in. */ + scopes: string[] | null; + token: string; + token_last_eight: string | null; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user?: SimpleUser | null; +} + +/** + * Auto merge + * The status of auto merging a pull request. + */ +export type AutoMerge = { + /** Commit message for the merge commit. */ + commit_message: string; + /** Title for the merge commit message. */ + commit_title: string; + /** Simple User */ + enabled_by: SimpleUser; + /** The merge method to use. */ + merge_method: "merge" | "squash" | "rebase"; +} | null; + +/** + * Base Gist + * Base Gist + */ +export interface BaseGist { + comments: number; + /** @format uri */ + comments_url: string; + /** @format uri */ + commits_url: string; + /** @format date-time */ + created_at: string; + description: string | null; + files: Record< + string, + { + filename?: string; + language?: string; + raw_url?: string; + size?: number; + type?: string; + } + >; + forks?: any[]; + /** @format uri */ + forks_url: string; + /** @format uri */ + git_pull_url: string; + /** @format uri */ + git_push_url: string; + history?: any[]; + /** @format uri */ + html_url: string; + id: string; + node_id: string; + owner?: SimpleUser | null; + public: boolean; + truncated?: boolean; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Basic Error + * Basic Error + */ +export interface BasicError { + documentation_url?: string; + message?: string; +} + +/** + * Blob + * Blob + */ +export interface Blob { + content: string; + encoding: string; + highlighted_content?: string; + node_id: string; + sha: string; + size: number | null; + /** @format uri */ + url: string; +} + +/** + * Branch Protection + * Branch Protection + */ +export interface BranchProtection { + allow_deletions?: { + enabled?: boolean; + }; + allow_force_pushes?: { + enabled?: boolean; + }; + enabled: boolean; + /** Protected Branch Admin Enforced */ + enforce_admins?: ProtectedBranchAdminEnforced; + /** @example ""branch/with/protection"" */ + name?: string; + /** @example ""https://api.github.com/repos/owner-79e94e2d36b3fd06a32bb213/AAA_Public_Repo/branches/branch/with/protection/protection"" */ + protection_url?: string; + required_linear_history?: { + enabled?: boolean; + }; + /** Protected Branch Pull Request Review */ + required_pull_request_reviews?: ProtectedBranchPullRequestReview; + required_status_checks: { + contexts: string[]; + contexts_url?: string; + enforcement_level: string; + url?: string; + }; + /** Branch Restriction Policy */ + restrictions?: BranchRestrictionPolicy; + url?: string; +} + +/** + * Branch Restriction Policy + * Branch Restriction Policy + */ +export interface BranchRestrictionPolicy { + apps: { + created_at?: string; + description?: string; + events?: string[]; + external_url?: string; + html_url?: string; + id?: number; + name?: string; + node_id?: string; + owner?: { + avatar_url?: string; + description?: string; + events_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/followers"" */ + followers_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/following{/other_user}"" */ + following_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/gists{/gist_id}"" */ + gists_url?: string; + /** @example """" */ + gravatar_id?: string; + hooks_url?: string; + /** @example ""https://github.com/testorg-ea8ec76d71c3af4b"" */ + html_url?: string; + id?: number; + issues_url?: string; + login?: string; + members_url?: string; + node_id?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/orgs"" */ + organizations_url?: string; + public_members_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/received_events"" */ + received_events_url?: string; + repos_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/starred{/owner}{/repo}"" */ + starred_url?: string; + /** @example ""https://api.github.com/users/testorg-ea8ec76d71c3af4b/subscriptions"" */ + subscriptions_url?: string; + /** @example ""Organization"" */ + type?: string; + url?: string; + }; + permissions?: { + contents?: string; + issues?: string; + metadata?: string; + single_file?: string; + }; + slug?: string; + updated_at?: string; + }[]; + /** @format uri */ + apps_url: string; + teams: { + description?: string | null; + html_url?: string; + id?: number; + members_url?: string; + name?: string; + node_id?: string; + parent?: string | null; + permission?: string; + privacy?: string; + repositories_url?: string; + slug?: string; + url?: string; + }[]; + /** @format uri */ + teams_url: string; + /** @format uri */ + url: string; + users: { + avatar_url?: string; + events_url?: string; + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string; + html_url?: string; + id?: number; + login?: string; + node_id?: string; + organizations_url?: string; + received_events_url?: string; + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + subscriptions_url?: string; + type?: string; + url?: string; + }[]; + /** @format uri */ + users_url: string; +} + +/** + * Branch Short + * Branch Short + */ +export interface BranchShort { + commit: { + sha: string; + url: string; + }; + name: string; + protected: boolean; +} + +/** + * Branch With Protection + * Branch With Protection + */ +export interface BranchWithProtection { + _links: { + html: string; + /** @format uri */ + self: string; + }; + /** Commit */ + commit: Commit; + name: string; + /** @example ""mas*"" */ + pattern?: string; + protected: boolean; + /** Branch Protection */ + protection: BranchProtection; + /** @format uri */ + protection_url: string; + /** @example 1 */ + required_approving_review_count?: number; +} + +/** + * Check Annotation + * Check Annotation + */ +export interface CheckAnnotation { + /** @example "warning" */ + annotation_level: string | null; + blob_href: string; + /** @example 10 */ + end_column: number | null; + /** @example 2 */ + end_line: number; + /** @example "Check your spelling for 'banaas'." */ + message: string | null; + /** @example "README.md" */ + path: string; + /** @example "Do you mean 'bananas' or 'banana'?" */ + raw_details: string | null; + /** @example 5 */ + start_column: number | null; + /** @example 2 */ + start_line: number; + /** @example "Spell Checker" */ + title: string | null; +} + +/** + * CheckRun + * A check performed on the code of a given code change + */ +export interface CheckRun { + app: Integration | null; + check_suite: { + id: number; + } | null; + /** + * @format date-time + * @example "2018-05-04T01:14:52Z" + */ + completed_at: string | null; + /** @example "neutral" */ + conclusion: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required" | null; + /** @example "https://example.com" */ + details_url: string | null; + /** @example "42" */ + external_id: string | null; + /** + * The SHA of the commit that is being checked. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/runs/4" */ + html_url: string | null; + /** + * The id of the check. + * @example 21 + */ + id: number; + /** + * The name of the check. + * @example "test-coverage" + */ + name: string; + /** @example "MDg6Q2hlY2tSdW40" */ + node_id: string; + output: { + annotations_count: number; + /** @format uri */ + annotations_url: string; + summary: string | null; + text: string | null; + title: string | null; + }; + pull_requests: PullRequestMinimal[]; + /** + * @format date-time + * @example "2018-05-04T01:14:52Z" + */ + started_at: string | null; + /** + * The phase of the lifecycle that the check is currently in. + * @example "queued" + */ + status: "queued" | "in_progress" | "completed"; + /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ + url: string; +} + +/** + * CheckSuite + * A suite of checks performed on the code of a given code change + */ +export interface CheckSuite { + /** @example "d6fde92930d4715a2b49857d24b940956b26d2d3" */ + after: string | null; + app: Integration | null; + /** @example "146e867f55c26428e5f9fade55a9bbf5e95a7912" */ + before: string | null; + check_runs_url: string; + /** @example "neutral" */ + conclusion: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required" | null; + /** @format date-time */ + created_at: string | null; + /** @example "master" */ + head_branch: string | null; + /** Simple Commit */ + head_commit: SimpleCommit; + /** + * The SHA of the head commit that is being checked. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example 5 */ + id: number; + latest_check_runs_count: number; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + pull_requests: PullRequestMinimal[] | null; + /** Minimal Repository */ + repository: MinimalRepository; + /** @example "completed" */ + status: "queued" | "in_progress" | "completed" | null; + /** @format date-time */ + updated_at: string | null; + /** @example "https://api.github.com/repos/github/hello-world/check-suites/5" */ + url: string | null; +} + +/** + * Check Suite Preference + * Check suite configuration preferences for a repository. + */ +export interface CheckSuitePreference { + preferences: { + auto_trigger_checks?: { + app_id: number; + setting: boolean; + }[]; + }; + /** A git repository */ + repository: Repository; +} + +/** + * Clone Traffic + * Clone Traffic + */ +export interface CloneTraffic { + clones: Traffic[]; + /** @example 173 */ + count: number; + /** @example 128 */ + uniques: number; +} + +/** + * Code Frequency Stat + * Code Frequency Stat + */ +export type CodeFrequencyStat = number[]; + +/** + * Code Of Conduct + * Code Of Conduct + */ +export interface CodeOfConduct { + /** + * @example "# Contributor Covenant Code of Conduct + * + * ## Our Pledge + * + * In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + * + * ## Our Standards + * + * Examples of behavior that contributes to creating a positive environment include: + * + * * Using welcoming and inclusive language + * * Being respectful of differing viewpoints and experiences + * * Gracefully accepting constructive criticism + * * Focusing on what is best for the community + * * Showing empathy towards other community members + * + * Examples of unacceptable behavior by participants include: + * + * * The use of sexualized language or imagery and unwelcome sexual attention or advances + * * Trolling, insulting/derogatory comments, and personal or political attacks + * * Public or private harassment + * * Publishing others' private information, such as a physical or electronic address, without explicit permission + * * Other conduct which could reasonably be considered inappropriate in a professional setting + * + * ## Our Responsibilities + * + * Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response + * to any instances of unacceptable behavior. + * + * Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + * + * ## Scope + * + * This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, + * posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + * + * ## Enforcement + * + * Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + * + * Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + * + * ## Attribution + * + * This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + * + * [homepage]: http://contributor-covenant.org + * [version]: http://contributor-covenant.org/version/1/4/ + * " + */ + body?: string; + /** @format uri */ + html_url: string | null; + /** @example "contributor_covenant" */ + key: string; + /** @example "Contributor Covenant" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/codes_of_conduct/contributor_covenant" + */ + url: string; +} + +/** + * Code Of Conduct Simple + * Code of Conduct Simple + */ +export interface CodeOfConductSimple { + /** @format uri */ + html_url: string | null; + /** @example "citizen_code_of_conduct" */ + key: string; + /** @example "Citizen Code of Conduct" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/codes_of_conduct/citizen_code_of_conduct" + */ + url: string; +} + +export interface CodeScanningAlertCodeScanningAlert { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: AlertCreatedAt; + /** The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + dismissed_at: CodeScanningAlertDismissedAt; + /** Simple User */ + dismissed_by: SimpleUser; + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason: CodeScanningAlertDismissedReason; + /** The GitHub URL of the alert resource. */ + html_url: AlertHtmlUrl; + instances: CodeScanningAlertInstances; + /** The security alert number. */ + number: AlertNumber; + rule: CodeScanningAlertRule; + /** State of a code scanning alert. */ + state: CodeScanningAlertState; + tool: CodeScanningAnalysisTool; + /** The REST API URL of the alert resource. */ + url: AlertUrl; +} + +export interface CodeScanningAlertCodeScanningAlertItems { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: AlertCreatedAt; + /** The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + dismissed_at: CodeScanningAlertDismissedAt; + /** Simple User */ + dismissed_by: SimpleUser; + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason: CodeScanningAlertDismissedReason; + /** The GitHub URL of the alert resource. */ + html_url: AlertHtmlUrl; + /** The security alert number. */ + number: AlertNumber; + rule: CodeScanningAlertRule; + /** State of a code scanning alert. */ + state: CodeScanningAlertState; + tool: CodeScanningAnalysisTool; + /** The REST API URL of the alert resource. */ + url: AlertUrl; +} + +/** + * The time that the alert was dismissed in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type CodeScanningAlertDismissedAt = string | null; + +/** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ +export type CodeScanningAlertDismissedReason = "false positive" | "won't fix" | "used in tests" | null; + +/** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ +export type CodeScanningAlertEnvironment = string; + +export type CodeScanningAlertInstances = { + /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ + analysis_key?: CodeScanningAnalysisAnalysisKey; + /** Identifies the variable values associated with the environment in which the analysis that generated this alert instance was performed, such as the language that was analyzed. */ + environment?: CodeScanningAlertEnvironment; + matrix_vars?: string | null; + /** The full Git reference, formatted as \`refs/heads/\`. */ + ref?: CodeScanningAlertRef; + /** State of a code scanning alert. */ + state?: CodeScanningAlertState; +}[]; + +/** The full Git reference, formatted as \`refs/heads/\`. */ +export type CodeScanningAlertRef = string; + +export interface CodeScanningAlertRule { + /** A short description of the rule used to detect the alert. */ + description?: string; + /** A unique identifier for the rule used to detect the alert. */ + id?: string | null; + /** The severity of the alert. */ + severity?: "none" | "note" | "warning" | "error" | null; +} + +/** Sets the state of the code scanning alert. Can be one of \`open\` or \`dismissed\`. You must provide \`dismissed_reason\` when you set the state to \`dismissed\`. */ +export enum CodeScanningAlertSetState { + Open = "open", + Dismissed = "dismissed", +} + +/** State of a code scanning alert. */ +export enum CodeScanningAlertState { + Open = "open", + Dismissed = "dismissed", + Fixed = "fixed", +} + +/** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ +export type CodeScanningAnalysisAnalysisKey = string; + +export interface CodeScanningAnalysisCodeScanningAnalysis { + /** Identifies the configuration under which the analysis was executed. For example, in GitHub Actions this includes the workflow filename and job name. */ + analysis_key: CodeScanningAnalysisAnalysisKey; + /** The commit SHA of the code scanning analysis file. */ + commit_sha: CodeScanningAnalysisCommitSha; + /** The time that the analysis was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at: CodeScanningAnalysisCreatedAt; + /** Identifies the variable values associated with the environment in which this analysis was performed. */ + environment: CodeScanningAnalysisEnvironment; + /** @example "error reading field xyz" */ + error: string; + /** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ + ref: CodeScanningAnalysisRef; + /** The name of the tool used to generate the code scanning analysis alert. */ + tool_name: CodeScanningAnalysisToolName; +} + +/** + * The commit SHA of the code scanning analysis file. + * @minLength 40 + * @maxLength 40 + * @pattern ^[0-9a-fA-F]+$ + */ +export type CodeScanningAnalysisCommitSha = string; + +/** + * The time that the analysis was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ +export type CodeScanningAnalysisCreatedAt = string; + +/** Identifies the variable values associated with the environment in which this analysis was performed. */ +export type CodeScanningAnalysisEnvironment = string; + +/** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ +export type CodeScanningAnalysisRef = string; + +/** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [\`gzip\`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ +export type CodeScanningAnalysisSarifFile = string; + +export interface CodeScanningAnalysisTool { + /** The name of the tool used to generate the code scanning analysis alert. */ + name?: CodeScanningAnalysisToolName; + /** The version of the tool used to detect the alert. */ + version?: string | null; +} + +/** The name of the tool used to generate the code scanning analysis alert. */ +export type CodeScanningAnalysisToolName = string; + +/** + * Code Search Result Item + * Code Search Result Item + */ +export interface CodeSearchResultItem { + file_size?: number; + /** @format uri */ + git_url: string; + /** @format uri */ + html_url: string; + language?: string | null; + /** @format date-time */ + last_modified_at?: string; + /** @example ["73..77","77..78"] */ + line_numbers?: string[]; + name: string; + path: string; + /** Minimal Repository */ + repository: MinimalRepository; + score: number; + sha: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +/** + * Collaborator + * Collaborator + */ +export interface Collaborator { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example "octocat" */ + login: string; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @example "User" */ + type: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +} + +export interface CombinedBillingUsage { + /** Numbers of days left in billing cycle. */ + days_left_in_billing_cycle: number; + /** Estimated storage space (GB) used in billing cycle. */ + estimated_paid_storage_for_month: number; + /** Estimated sum of free and paid storage space (GB) used in billing cycle. */ + estimated_storage_for_month: number; +} + +/** + * Combined Commit Status + * Combined Commit Status + */ +export interface CombinedCommitStatus { + /** @format uri */ + commit_url: string; + /** Minimal Repository */ + repository: MinimalRepository; + sha: string; + state: string; + statuses: SimpleCommitStatus[]; + total_count: number; + /** @format uri */ + url: string; +} + +/** + * Commit + * Commit + */ +export interface Commit { + author: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e/comments" + */ + comments_url: string; + commit: { + author: GitUser | null; + /** @example 0 */ + comment_count: number; + committer: GitUser | null; + /** @example "Fix all the bugs" */ + message: string; + tree: { + /** @example "827efc6d56897b048c772eb4087f854f46256132" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/tree/827efc6d56897b048c772eb4087f854f46256132" + */ + url: string; + }; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + url: string; + verification?: Verification; + }; + committer: SimpleUser | null; + files?: { + additions?: number; + blob_url?: string; + changes?: number; + /** @example ""https://api.github.com/repos/owner-3d68404b07d25daeb2d4a6bf/AAA_Public_Repo/contents/geometry.js?ref=c3956841a7cb7e8ba4a6fd923568d86958f01573"" */ + contents_url?: string; + deletions?: number; + filename?: string; + patch?: string; + /** @example ""subdir/before_name.txt"" */ + previous_filename?: string; + raw_url?: string; + /** @example ""1e8e60ce9733d5283f7836fa602b6365a66b2567"" */ + sha?: string; + status?: string; + }[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + html_url: string; + /** @example "MDY6Q29tbWl0NmRjYjA5YjViNTc4NzVmMzM0ZjYxYWViZWQ2OTVlMmU0MTkzZGI1ZQ==" */ + node_id: string; + parents: { + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd" + */ + html_url?: string; + /** @example "7638417db6d59f3c431d3e1f261cc637155684cd" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/7638417db6d59f3c431d3e1f261cc637155684cd" + */ + url: string; + }[]; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + sha: string; + stats?: { + additions?: number; + deletions?: number; + total?: number; + }; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + url: string; +} + +/** + * Commit Activity + * Commit Activity + */ +export interface CommitActivity { + /** @example [0,3,26,20,39,1,0] */ + days: number[]; + /** @example 89 */ + total: number; + /** @example 1336280400 */ + week: number; +} + +/** + * Commit Comment + * Commit Comment + */ +export interface CommitComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + body: string; + commit_id: string; + /** @format date-time */ + created_at: string; + /** @format uri */ + html_url: string; + id: number; + line: number | null; + node_id: string; + path: string | null; + position: number | null; + reactions?: ReactionRollup; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Commit Comparison + * Commit Comparison + */ +export interface CommitComparison { + /** @example 4 */ + ahead_by: number; + /** Commit */ + base_commit: Commit; + /** @example 5 */ + behind_by: number; + commits: Commit[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic.diff" + */ + diff_url: string; + files: DiffEntry[]; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic" + */ + html_url: string; + /** Commit */ + merge_base_commit: Commit; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/master...topic.patch" + */ + patch_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/compare/octocat:bbcd538c8e72b8c175046e27cc8f907076331401...octocat:0328041d1152db8ae77652d1618a02e57f745f17" + */ + permalink_url: string; + /** @example "ahead" */ + status: "diverged" | "ahead" | "behind" | "identical"; + /** @example 6 */ + total_commits: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/compare/master...topic" + */ + url: string; +} + +/** + * Commit Search Result Item + * Commit Search Result Item + */ +export interface CommitSearchResultItem { + author: SimpleUser | null; + /** @format uri */ + comments_url: string; + commit: { + author: { + /** @format date-time */ + date: string; + email: string; + name: string; + }; + comment_count: number; + committer: GitUser | null; + message: string; + tree: { + sha: string; + /** @format uri */ + url: string; + }; + /** @format uri */ + url: string; + verification?: Verification; + }; + committer: GitUser | null; + /** @format uri */ + html_url: string; + node_id: string; + parents: { + html_url?: string; + sha?: string; + url?: string; + }[]; + /** Minimal Repository */ + repository: MinimalRepository; + score: number; + sha: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +/** Community Health File */ +export interface CommunityHealthFile { + /** @format uri */ + html_url: string; + /** @format uri */ + url: string; +} + +/** + * Community Profile + * Community Profile + */ +export interface CommunityProfile { + /** @example true */ + content_reports_enabled?: boolean; + /** @example "My first repository on GitHub!" */ + description: string | null; + /** @example "example.com" */ + documentation: string | null; + files: { + code_of_conduct: CodeOfConductSimple | null; + contributing: CommunityHealthFile | null; + issue_template: CommunityHealthFile | null; + license: LicenseSimple | null; + pull_request_template: CommunityHealthFile | null; + readme: CommunityHealthFile | null; + }; + /** @example 100 */ + health_percentage: number; + /** + * @format date-time + * @example "2017-02-28T19:09:29Z" + */ + updated_at: string | null; +} + +/** + * Content Directory + * A list of directory items + */ +export type ContentDirectory = { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content?: string; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +}[]; + +/** + * Content File + * Content File + */ +export interface ContentFile { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content: string; + /** @format uri */ + download_url: string | null; + encoding: string; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + /** @example ""git://example.com/defunkt/dotjs.git"" */ + submodule_git_url?: string; + /** @example ""actual/actual.md"" */ + target?: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * ContentReferenceAttachment + * Content Reference attachments allow you to provide context around URLs posted in comments + */ +export interface ContentReferenceAttachment { + /** + * The body of the attachment + * @maxLength 262144 + * @example "Body of the attachment" + */ + body: string; + /** + * The ID of the attachment + * @example 21 + */ + id: number; + /** + * The node_id of the content attachment + * @example "MDE3OkNvbnRlbnRBdHRhY2htZW50MjE=" + */ + node_id?: string; + /** + * The title of the attachment + * @maxLength 1024 + * @example "Title of the attachment" + */ + title: string; +} + +/** + * Symlink Content + * An object describing a symlink + */ +export interface ContentSubmodule { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + /** @format uri */ + submodule_git_url: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * Symlink Content + * An object describing a symlink + */ +export interface ContentSymlink { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + target: string; + type: string; + /** @format uri */ + url: string; +} + +/** + * Content Traffic + * Content Traffic + */ +export interface ContentTraffic { + /** @example 3542 */ + count: number; + /** @example "/github/hubot" */ + path: string; + /** @example "github/hubot: A customizable life embetterment robot." */ + title: string; + /** @example 2225 */ + uniques: number; +} + +/** + * Content Tree + * Content Tree + */ +export interface ContentTree { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + /** @format uri */ + download_url: string | null; + entries?: { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content?: string; + /** @format uri */ + download_url: string | null; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; + }[]; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +} + +/** + * Contributor + * Contributor + */ +export interface Contributor { + /** @format uri */ + avatar_url?: string; + contributions: number; + email?: string; + events_url?: string; + /** @format uri */ + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string | null; + /** @format uri */ + html_url?: string; + id?: number; + login?: string; + name?: string; + node_id?: string; + /** @format uri */ + organizations_url?: string; + /** @format uri */ + received_events_url?: string; + /** @format uri */ + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + /** @format uri */ + subscriptions_url?: string; + type: string; + /** @format uri */ + url?: string; +} + +/** + * Contributor Activity + * Contributor Activity + */ +export interface ContributorActivity { + author: SimpleUser | null; + /** @example 135 */ + total: number; + /** @example [{"w":"1367712000","a":6898,"d":77,"c":10}] */ + weeks: { + a?: number; + c?: number; + d?: number; + w?: string; + }[]; +} + +/** + * Credential Authorization + * Credential Authorization + */ +export interface CredentialAuthorization { + /** @example 12345678 */ + authorized_credential_id?: number | null; + /** + * The note given to the token. This will only be present when the credential is a token. + * @example "my token" + */ + authorized_credential_note?: string | null; + /** + * The title given to the ssh key. This will only be present when the credential is an ssh key. + * @example "my ssh key" + */ + authorized_credential_title?: string | null; + /** + * Date when the credential was last accessed. May be null if it was never accessed + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + credential_accessed_at?: string | null; + /** + * Date when the credential was authorized for use. + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + credential_authorized_at: string; + /** + * Unique identifier for the credential. + * @example 1 + */ + credential_id: number; + /** + * Human-readable description of the credential type. + * @example "SSH Key" + */ + credential_type: string; + /** + * Unique string to distinguish the credential. Only included in responses with credential_type of SSH Key. + * @example "jklmnop12345678" + */ + fingerprint?: string; + /** + * User login that owns the underlying credential. + * @example "monalisa" + */ + login: string; + /** + * List of oauth scopes the token has been granted. + * @example ["user","repo"] + */ + scopes?: string[]; + /** + * Last eight characters of the credential. Only included in responses with credential_type of personal access token. + * @example "12345678" + */ + token_last_eight?: string; +} + +/** + * Deploy Key + * An SSH key granting access to a single repository. + */ +export interface DeployKey { + created_at: string; + id: number; + key: string; + read_only: boolean; + title: string; + url: string; + verified: boolean; +} + +/** + * Deployment + * A request for a specific ref(branch,sha,tag) to be deployed + */ +export interface Deployment { + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + created_at: string; + creator: SimpleUser | null; + /** @example "Deploy request from hubot" */ + description: string | null; + /** + * Name for the target deployment environment. + * @example "production" + */ + environment: string; + /** + * Unique identifier of the deployment + * @example 42 + */ + id: number; + /** @example "MDEwOkRlcGxveW1lbnQx" */ + node_id: string; + /** @example "staging" */ + original_environment?: string; + payload: object; + performed_via_github_app?: Integration | null; + /** + * Specifies if the given environment is one that end-users directly interact with. Default: false. + * @example true + */ + production_environment?: boolean; + /** + * The ref to deploy. This can be a branch, tag, or sha. + * @example "topic-branch" + */ + ref: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** @example "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d" */ + sha: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/1/statuses" + */ + statuses_url: string; + /** + * Parameter to specify a task to execute + * @example "deploy" + */ + task: string; + /** + * Specifies if the given environment is will no longer exist at some point in the future. Default: false. + * @example true + */ + transient_environment?: boolean; + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/1" + */ + url: string; +} + +/** + * Deployment Status + * The status of a deployment. + */ +export interface DeploymentStatus { + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/42" + */ + deployment_url: string; + /** + * A short description of the status. + * @maxLength 140 + * @default "" + * @example "Deployment finished successfully." + */ + description: string; + /** + * The environment of the deployment that the status is for. + * @default "" + * @example "production" + */ + environment?: string; + /** + * The URL for accessing your environment. + * @format uri + * @default "" + * @example "https://staging.example.com/" + */ + environment_url?: string; + /** @example 1 */ + id: number; + /** + * The URL to associate with this status. + * @format uri + * @default "" + * @example "https://example.com/deployment/42/output" + */ + log_url?: string; + /** @example "MDE2OkRlcGxveW1lbnRTdGF0dXMx" */ + node_id: string; + performed_via_github_app?: Integration | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** + * The state of the status. + * @example "success" + */ + state: "error" | "failure" | "inactive" | "pending" | "success" | "queued" | "in_progress"; + /** + * Deprecated: the URL to associate with this status. + * @format uri + * @default "" + * @example "https://example.com/deployment/42/output" + */ + target_url: string; + /** + * @format date-time + * @example "2012-07-20T01:19:13Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/deployments/42/statuses/1" + */ + url: string; +} + +/** + * Diff Entry + * Diff Entry + */ +export interface DiffEntry { + /** @example 103 */ + additions: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" + */ + blob_url: string; + /** @example 124 */ + changes: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + contents_url: string; + /** @example 21 */ + deletions: number; + /** @example "file1.txt" */ + filename: string; + /** @example "@@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test" */ + patch?: string; + /** @example "file.txt" */ + previous_filename?: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt" + */ + raw_url: string; + /** @example "bbcd538c8e72b8c175046e27cc8f907076331401" */ + sha: string; + /** @example "added" */ + status: string; +} + +/** + * Email + * Email + */ +export interface Email { + /** + * @format email + * @example "octocat@github.com" + */ + email: string; + /** @example true */ + primary: boolean; + /** @example true */ + verified: boolean; + /** @example "public" */ + visibility: string | null; +} + +/** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ +export enum EnabledOrganizations { + All = "all", + None = "none", + Selected = "selected", +} + +/** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ +export enum EnabledRepositories { + All = "all", + None = "none", + Selected = "selected", +} + +/** + * Enterprise + * An enterprise account + */ +export interface Enterprise { + /** @format uri */ + avatar_url: string; + /** + * @format date-time + * @example "2019-01-26T19:01:12Z" + */ + created_at: string | null; + /** A short description of the enterprise. */ + description?: string | null; + /** + * @format uri + * @example "https://github.com/enterprises/octo-business" + */ + html_url: string; + /** + * Unique identifier of the enterprise + * @example 42 + */ + id: number; + /** + * The name of the enterprise. + * @example "Octo Business" + */ + name: string; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** + * The slug url identifier for the enterprise. + * @example "octo-business" + */ + slug: string; + /** + * @format date-time + * @example "2019-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * The enterprise's website URL. + * @format uri + */ + website_url?: string | null; +} + +/** + * Event + * Event + */ +export interface Event { + /** Actor */ + actor: Actor; + /** @format date-time */ + created_at: string | null; + id: string; + /** Actor */ + org?: Actor; + payload: { + action: string; + /** Comments provide a way for people to collaborate on an issue. */ + comment?: IssueComment; + /** Issue Simple */ + issue?: IssueSimple; + pages?: { + action?: string; + html_url?: string; + page_name?: string; + sha?: string; + summary?: string | null; + title?: string; + }[]; + }; + public: boolean; + repo: { + id: number; + name: string; + /** @format uri */ + url: string; + }; + type: string | null; +} + +/** + * Feed + * Feed + */ +export interface Feed { + _links: { + /** Hypermedia Link with Type */ + current_user?: LinkWithType; + /** Hypermedia Link with Type */ + current_user_actor?: LinkWithType; + /** Hypermedia Link with Type */ + current_user_organization?: LinkWithType; + current_user_organizations?: LinkWithType[]; + /** Hypermedia Link with Type */ + current_user_public?: LinkWithType; + /** Hypermedia Link with Type */ + security_advisories?: LinkWithType; + /** Hypermedia Link with Type */ + timeline: LinkWithType; + /** Hypermedia Link with Type */ + user: LinkWithType; + }; + /** @example "https://github.com/octocat.private.actor?token=abc123" */ + current_user_actor_url?: string; + /** @example "https://github.com/octocat-org" */ + current_user_organization_url?: string; + /** @example ["https://github.com/organizations/github/octocat.private.atom?token=abc123"] */ + current_user_organization_urls?: string[]; + /** @example "https://github.com/octocat" */ + current_user_public_url?: string; + /** @example "https://github.com/octocat.private?token=abc123" */ + current_user_url?: string; + /** @example "https://github.com/security-advisories" */ + security_advisories_url?: string; + /** @example "https://github.com/timeline" */ + timeline_url: string; + /** @example "https://github.com/{user}" */ + user_url: string; +} + +/** + * File Commit + * File Commit + */ +export interface FileCommit { + commit: { + author?: { + date?: string; + email?: string; + name?: string; + }; + committer?: { + date?: string; + email?: string; + name?: string; + }; + html_url?: string; + message?: string; + node_id?: string; + parents?: { + html_url?: string; + sha?: string; + url?: string; + }[]; + sha?: string; + tree?: { + sha?: string; + url?: string; + }; + url?: string; + verification?: { + payload?: string | null; + reason?: string; + signature?: string | null; + verified?: boolean; + }; + }; + content: { + _links?: { + git?: string; + html?: string; + self?: string; + }; + download_url?: string; + git_url?: string; + html_url?: string; + name?: string; + path?: string; + sha?: string; + size?: number; + type?: string; + url?: string; + } | null; +} + +/** + * Full Repository + * Full Repository + */ +export interface FullRepository { + /** @example true */ + allow_merge_commit?: boolean; + /** @example true */ + allow_rebase_merge?: boolean; + /** @example true */ + allow_squash_merge?: boolean; + /** + * Whether anonymous git access is allowed. + * @default true + */ + anonymous_access_enabled?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** @example "master" */ + default_branch: string; + /** @example false */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** @example true */ + has_downloads: boolean; + /** @example true */ + has_issues: boolean; + has_pages: boolean; + /** @example true */ + has_projects: boolean; + /** @example true */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** @example 1296269 */ + id: number; + /** @example true */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** @example "Hello-World" */ + name: string; + /** @example 0 */ + network_count: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + organization?: SimpleUser | null; + owner: SimpleUser | null; + /** A git repository */ + parent?: Repository; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** A git repository */ + source?: Repository; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + /** @example 42 */ + subscribers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string | null; + template_repository?: Repository | null; + /** @example ["octocat","atom","electron","API"] */ + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @example "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Gist Comment + * A comment made to a gist. + */ +export interface GistComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; + /** + * @format date-time + * @example "2011-04-18T23:23:56Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example "MDExOkdpc3RDb21tZW50MQ==" */ + node_id: string; + /** + * @format date-time + * @example "2011-04-18T23:23:56Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/gists/a6db0bec360bb87e9418/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Gist Commit + * Gist Commit + */ +export interface GistCommit { + change_status: { + additions?: number; + deletions?: number; + total?: number; + }; + /** + * @format date-time + * @example "2010-04-14T02:15:15Z" + */ + committed_at: string; + /** + * @format uri + * @example "https://api.github.com/gists/aa5a315d61ae9438b18d/57a7f021a713b1c5a6a199b54cc514735d2d462f" + */ + url: string; + user: SimpleUser | null; + /** @example "57a7f021a713b1c5a6a199b54cc514735d2d462f" */ + version: string; +} + +/** + * Gist Simple + * Gist Simple + */ +export interface GistSimple { + comments?: number; + comments_url?: string; + commits_url?: string; + created_at?: string; + description?: string | null; + files?: Record< + string, + { + content?: string; + filename?: string; + language?: string; + raw_url?: string; + size?: number; + truncated?: boolean; + type?: string; + } | null + >; + forks_url?: string; + git_pull_url?: string; + git_push_url?: string; + html_url?: string; + id?: string; + node_id?: string; + /** Simple User */ + owner?: SimpleUser; + public?: boolean; + truncated?: boolean; + updated_at?: string; + url?: string; + user?: string | null; +} + +/** + * Git Commit + * Low-level Git commit operations within a repository + */ +export interface GitCommit { + /** Identifying information for the git-user */ + author: { + /** + * Timestamp of the commit + * @format date-time + * @example "2014-08-09T08:02:04+12:00" + */ + date: string; + /** + * Git email address of the user + * @example "monalisa.octocat@example.com" + */ + email: string; + /** + * Name of the git user + * @example "Monalisa Octocat" + */ + name: string; + }; + /** Identifying information for the git-user */ + committer: { + /** + * Timestamp of the commit + * @format date-time + * @example "2014-08-09T08:02:04+12:00" + */ + date: string; + /** + * Git email address of the user + * @example "monalisa.octocat@example.com" + */ + email: string; + /** + * Name of the git user + * @example "Monalisa Octocat" + */ + name: string; + }; + /** @format uri */ + html_url: string; + /** + * Message describing the purpose of the commit + * @example "Fix #42" + */ + message: string; + node_id: string; + parents: { + /** @format uri */ + html_url: string; + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + /** @format uri */ + url: string; + }[]; + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + tree: { + /** + * SHA for the commit + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + /** @format uri */ + url: string; + }; + /** @format uri */ + url: string; + verification: { + payload: string | null; + reason: string; + signature: string | null; + verified: boolean; + }; +} + +/** + * Git Reference + * Git references within a repository + */ +export interface GitRef { + node_id: string; + object: { + /** + * SHA for the reference + * @minLength 40 + * @maxLength 40 + * @example "7638417db6d59f3c431d3e1f261cc637155684cd" + */ + sha: string; + type: string; + /** @format uri */ + url: string; + }; + ref: string; + /** @format uri */ + url: string; +} + +/** + * Git Tag + * Metadata for a Git tag + */ +export interface GitTag { + /** + * Message describing the purpose of the tag + * @example "Initial public release" + */ + message: string; + /** @example "MDM6VGFnOTQwYmQzMzYyNDhlZmFlMGY5ZWU1YmM3YjJkNWM5ODU4ODdiMTZhYw==" */ + node_id: string; + object: { + sha: string; + type: string; + /** @format uri */ + url: string; + }; + /** @example "940bd336248efae0f9ee5bc7b2d5c985887b16ac" */ + sha: string; + /** + * Name of the tag + * @example "v0.0.1" + */ + tag: string; + tagger: { + date: string; + email: string; + name: string; + }; + /** + * URL for the tag + * @format uri + * @example "https://api.github.com/repositories/42/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac" + */ + url: string; + verification?: Verification; +} + +/** + * Git Tree + * The hierarchy between files in a Git repository. + */ +export interface GitTree { + sha: string; + /** + * Objects specifying a tree structure + * @example [{"path":"file.rb","mode":"100644","type":"blob","size":30,"sha":"44b4fc6d56897b048c772eb4087f854f46256132","url":"https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132","properties":{"path":{"type":"string"},"mode":{"type":"string"},"type":{"type":"string"},"size":{"type":"integer"},"sha":{"type":"string"},"url":{"type":"string"}},"required":["path","mode","type","sha","url","size"]}] + */ + tree: { + /** @example "040000" */ + mode?: string; + /** @example "test/file.rb" */ + path?: string; + /** @example "23f6827669e43831def8a7ad935069c8bd418261" */ + sha?: string; + /** @example 12 */ + size?: number; + /** @example "tree" */ + type?: string; + /** @example "https://api.github.com/repos/owner-482f3203ecf01f67e9deb18e/BBB_Private_Repo/git/blobs/23f6827669e43831def8a7ad935069c8bd418261" */ + url?: string; + }[]; + truncated: boolean; + /** @format uri */ + url: string; +} + +/** + * Git User + * Metaproperties for Git author/committer information. + */ +export interface GitUser { + /** @example ""2007-10-29T02:42:39.000-07:00"" */ + date?: string; + /** @example ""chris@ozmm.org"" */ + email?: string; + /** @example ""Chris Wanstrath"" */ + name?: string; +} + +/** + * Gitignore Template + * Gitignore Template + */ +export interface GitignoreTemplate { + /** @example "C" */ + name: string; + /** + * @example "# Object files + * *.o + * + * # Libraries + * *.lib + * *.a + * + * # Shared objects (inc. Windows DLLs) + * *.dll + * *.so + * *.so.* + * *.dylib + * + * # Executables + * *.exe + * *.out + * *.app + * " + */ + source: string; +} + +/** + * GPG Key + * A unique encryption key + */ +export interface GpgKey { + /** @example true */ + can_certify: boolean; + can_encrypt_comms: boolean; + can_encrypt_storage: boolean; + /** @example true */ + can_sign: boolean; + /** + * @format date-time + * @example "2016-03-24T11:31:04-06:00" + */ + created_at: string; + /** @example [{"email":"mastahyeti@users.noreply.github.com","verified":true}] */ + emails: { + email?: string; + verified?: boolean; + }[]; + /** @format date-time */ + expires_at: string | null; + /** @example 3 */ + id: number; + /** @example "3262EFF25BA0D270" */ + key_id: string; + primary_key_id: number | null; + /** @example "xsBNBFayYZ..." */ + public_key: string; + raw_key: string | null; + /** @example [{"id":4,"primary_key_id":3,"key_id":"4A595D4C72EE49C7","public_key":"zsBNBFayYZ...","emails":[],"subkeys":[],"can_sign":false,"can_encrypt_comms":true,"can_encrypt_storage":true,"can_certify":false,"created_at":"2016-03-24T11:31:04-06:00","expires_at":null}] */ + subkeys: { + can_certify?: boolean; + can_encrypt_comms?: boolean; + can_encrypt_storage?: boolean; + can_sign?: boolean; + created_at?: string; + emails?: any[]; + expires_at?: string | null; + id?: number; + key_id?: string; + primary_key_id?: number; + public_key?: string; + raw_key?: string | null; + subkeys?: any[]; + }[]; +} + +/** + * GroupMapping + * External Groups to be mapped to a team for membership + */ +export interface GroupMapping { + /** + * a description of the group + * @example "A group of Developers working on AzureAD SAML SSO" + */ + group_description?: string; + /** + * The ID of the group + * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" + */ + group_id?: string; + /** + * The name of the group + * @example "saml-azuread-test" + */ + group_name?: string; + /** + * Array of groups to be mapped to this team + * @example [{"group_id":"111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa","group_name":"saml-azuread-test","group_description":"A group of Developers working on AzureAD SAML SSO"},{"group_id":"2bb2bb2b-bb22-22bb-2bb2-bb2bbb2bb2b2","group_name":"saml-azuread-test2","group_description":"Another group of Developers working on AzureAD SAML SSO"}] + */ + groups?: { + /** + * a description of the group + * @example "A group of Developers working on AzureAD SAML SSO" + */ + group_description: string; + /** + * The ID of the group + * @example "111a1a11-aaa1-1aaa-11a1-a1a1a1a1a1aa" + */ + group_id: string; + /** + * The name of the group + * @example "saml-azuread-test" + */ + group_name: string; + }[]; + /** + * synchronization status for this group mapping + * @example "unsynced" + */ + status?: string; + /** + * the time of the last sync for this group-mapping + * @example "2019-06-03 22:27:15:000 -700" + */ + synced_at?: string; +} + +/** + * Webhook + * Webhooks for repositories. + */ +export interface Hook { + /** + * Determines whether the hook is actually triggered on pushes. + * @example true + */ + active: boolean; + config: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** @example ""sha256"" */ + digest?: string; + /** @example ""foo@bar.com"" */ + email?: string; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** @example ""foo"" */ + password?: string; + /** @example ""roomer"" */ + room?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** @example ""foo"" */ + subdomain?: string; + /** @example ""abc"" */ + token?: string; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** + * Determines what events the hook is triggered for. Default: ['push']. + * @example ["push","pull_request"] + */ + events: string[]; + /** + * Unique identifier of the webhook. + * @example 42 + */ + id: number; + last_response: HookResponse; + /** + * The name of a valid service, use 'web' for a webhook. + * @example "web" + */ + name: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/pings" + */ + ping_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1/test" + */ + test_url: string; + type: string; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/hooks/1" + */ + url: string; +} + +/** Hook Response */ +export interface HookResponse { + code: number | null; + message: string | null; + status: string | null; +} + +/** + * Hovercard + * Hovercard + */ +export interface Hovercard { + contexts: { + message: string; + octicon: string; + }[]; +} + +/** + * Import + * A repository import from an external source. + */ +export interface Import { + authors_count?: number | null; + /** @format uri */ + authors_url: string; + commit_count?: number | null; + error_message?: string | null; + failed_step?: string | null; + has_large_files?: boolean; + /** @format uri */ + html_url: string; + import_percent?: number | null; + large_files_count?: number; + large_files_size?: number; + message?: string; + project_choices?: { + human_name?: string; + tfvc_project?: string; + vcs?: string; + }[]; + push_percent?: number | null; + /** @format uri */ + repository_url: string; + status: + | "auth" + | "error" + | "none" + | "detecting" + | "choose" + | "auth_failed" + | "importing" + | "mapping" + | "waiting_to_push" + | "pushing" + | "complete" + | "setup" + | "unknown" + | "detection_found_multiple" + | "detection_found_nothing" + | "detection_needs_auth"; + status_text?: string | null; + svc_root?: string; + svn_root?: string; + tfvc_project?: string; + /** @format uri */ + url: string; + use_lfs?: string; + vcs: string | null; + /** The URL of the originating repository. */ + vcs_url: string; +} + +/** + * Installation + * Installation + */ +export interface Installation { + /** + * @format uri + * @example "https://api.github.com/installations/1/access_tokens" + */ + access_tokens_url: string; + account: SimpleUser | Enterprise | null; + /** @example 1 */ + app_id: number; + /** @example "github-actions" */ + app_slug: string; + /** @example ""test_13f1e99741e3e004@d7e1eb0bc0a1ba12.com"" */ + contact_email?: string | null; + /** @format date-time */ + created_at: string; + events: string[]; + /** @example true */ + has_multiple_single_files?: boolean; + /** + * @format uri + * @example "https://github.com/organizations/github/settings/installations/1" + */ + html_url: string; + /** + * The ID of the installation. + * @example 1 + */ + id: number; + /** @example {"issues":"read","deployments":"write"} */ + permissions: { + checks?: string; + contents?: string; + deployments?: string; + /** @example ""read"" */ + issues?: string; + metadata?: string; + /** @example ""read"" */ + organization_administration?: string; + pull_requests?: string; + statuses?: string; + }; + /** + * @format uri + * @example "https://api.github.com/installation/repositories" + */ + repositories_url: string; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection: "all" | "selected"; + /** @example "config.yaml" */ + single_file_name: string | null; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; + /** @format date-time */ + suspended_at?: string | null; + suspended_by?: SimpleUser | null; + /** The ID of the user or organization this token is being scoped to. */ + target_id: number; + /** @example "Organization" */ + target_type: string; + /** @format date-time */ + updated_at: string; +} + +/** + * Installation Token + * Authentication token for a GitHub App installed on a user or org. + */ +export interface InstallationToken { + expires_at: string; + /** @example true */ + has_multiple_single_files?: boolean; + permissions?: { + contents?: string; + issues?: string; + /** @example "read" */ + metadata?: string; + /** @example "read" */ + single_file?: string; + }; + repositories?: Repository[]; + repository_selection?: "all" | "selected"; + /** @example "README.md" */ + single_file?: string; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; + token: string; +} + +/** + * GitHub app + * GitHub apps are a new way to extend GitHub. They can be installed directly on organizations and user accounts and granted access to specific repositories. They come with granular permissions and built-in webhooks. GitHub apps are first class actors within GitHub. + */ +export interface Integration { + /** @example ""Iv1.25b5d1e65ffc4022"" */ + client_id?: string; + /** @example ""1d4b2097ac622ba702d19de498f005747a8b21d3"" */ + client_secret?: string; + /** + * @format date-time + * @example "2017-07-08T16:18:44-04:00" + */ + created_at: string; + /** @example "The description of the app." */ + description: string | null; + /** + * The list of events for the GitHub app + * @example ["label","deployment"] + */ + events: string[]; + /** + * @format uri + * @example "https://example.com" + */ + external_url: string; + /** + * @format uri + * @example "https://github.com/apps/super-ci" + */ + html_url: string; + /** + * Unique identifier of the GitHub app + * @example 37 + */ + id: number; + /** + * The number of installations associated with the GitHub app + * @example 5 + */ + installations_count?: number; + /** + * The name of the GitHub app + * @example "Probot Owners" + */ + name: string; + /** @example "MDExOkludGVncmF0aW9uMQ==" */ + node_id: string; + owner: SimpleUser | null; + /** @example ""-----BEGIN RSA PRIVATE KEY-----\\nMIIEogIBAAKCAQEArYxrNYD/iT5CZVpRJu4rBKmmze3PVmT/gCo2ATUvDvZTPTey\\nxcGJ3vvrJXazKk06pN05TN29o98jrYz4cengG3YGsXPNEpKsIrEl8NhbnxapEnM9\\nJCMRe0P5JcPsfZlX6hmiT7136GRWiGOUba2X9+HKh8QJVLG5rM007TBER9/z9mWm\\nrJuNh+m5l320oBQY/Qq3A7wzdEfZw8qm/mIN0FCeoXH1L6B8xXWaAYBwhTEh6SSn\\nZHlO1Xu1JWDmAvBCi0RO5aRSKM8q9QEkvvHP4yweAtK3N8+aAbZ7ovaDhyGz8r6r\\nzhU1b8Uo0Z2ysf503WqzQgIajr7Fry7/kUwpgQIDAQABAoIBADwJp80Ko1xHPZDy\\nfcCKBDfIuPvkmSW6KumbsLMaQv1aGdHDwwTGv3t0ixSay8CGlxMRtRDyZPib6SvQ\\n6OH/lpfpbMdW2ErkksgtoIKBVrDilfrcAvrNZu7NxRNbhCSvN8q0s4ICecjbbVQh\\nnueSdlA6vGXbW58BHMq68uRbHkP+k+mM9U0mDJ1HMch67wlg5GbayVRt63H7R2+r\\nVxcna7B80J/lCEjIYZznawgiTvp3MSanTglqAYi+m1EcSsP14bJIB9vgaxS79kTu\\noiSo93leJbBvuGo8QEiUqTwMw4tDksmkLsoqNKQ1q9P7LZ9DGcujtPy4EZsamSJT\\ny8OJt0ECgYEA2lxOxJsQk2kI325JgKFjo92mQeUObIvPfSNWUIZQDTjniOI6Gv63\\nGLWVFrZcvQBWjMEQraJA9xjPbblV8PtfO87MiJGLWCHFxmPz2dzoedN+2Coxom8m\\nV95CLz8QUShuao6u/RYcvUaZEoYs5bHcTmy5sBK80JyEmafJPtCQVxMCgYEAy3ar\\nZr3yv4xRPEPMat4rseswmuMooSaK3SKub19WFI5IAtB/e7qR1Rj9JhOGcZz+OQrl\\nT78O2OFYlgOIkJPvRMrPpK5V9lslc7tz1FSh3BZMRGq5jSyD7ETSOQ0c8T2O/s7v\\nbeEPbVbDe4mwvM24XByH0GnWveVxaDl51ABD65sCgYB3ZAspUkOA5egVCh8kNpnd\\nSd6SnuQBE3ySRlT2WEnCwP9Ph6oPgn+oAfiPX4xbRqkL8q/k0BdHQ4h+zNwhk7+h\\nWtPYRAP1Xxnc/F+jGjb+DVaIaKGU18MWPg7f+FI6nampl3Q0KvfxwX0GdNhtio8T\\nTj1E+SnFwh56SRQuxSh2gwKBgHKjlIO5NtNSflsUYFM+hyQiPiqnHzddfhSG+/3o\\nm5nNaSmczJesUYreH5San7/YEy2UxAugvP7aSY2MxB+iGsiJ9WD2kZzTUlDZJ7RV\\nUzWsoqBR+eZfVJ2FUWWvy8TpSG6trh4dFxImNtKejCR1TREpSiTV3Zb1dmahK9GV\\nrK9NAoGAbBxRLoC01xfxCTgt5BDiBcFVh4fp5yYKwavJPLzHSpuDOrrI9jDn1oKN\\nonq5sDU1i391zfQvdrbX4Ova48BN+B7p63FocP/MK5tyyBoT8zQEk2+vWDOw7H/Z\\nu5dTCPxTIsoIwUw1I+7yIxqJzLPFgR2gVBwY1ra/8iAqCj+zeBw=\\n-----END RSA PRIVATE KEY-----\\n"" */ + pem?: string; + /** + * The set of permissions for the GitHub app + * @example {"issues":"read","deployments":"write"} + */ + permissions: { + checks?: string; + contents?: string; + deployments?: string; + issues?: string; + metadata?: string; + [key: string]: any; + }; + /** + * The slug name of the GitHub app + * @example "probot-owners" + */ + slug?: string; + /** + * @format date-time + * @example "2017-07-08T16:18:44-04:00" + */ + updated_at: string; + /** @example ""6fba8f2fc8a7e8f2cca5577eddd82ca7586b3b6b"" */ + webhook_secret?: string; + [key: string]: any; +} + +/** + * The duration of the interaction restriction. Can be one of: \`one_day\`, \`three_days\`, \`one_week\`, \`one_month\`, \`six_months\`. Default: \`one_day\`. + * @example "one_month" + */ +export enum InteractionExpiry { + OneDay = "one_day", + ThreeDays = "three_days", + OneWeek = "one_week", + OneMonth = "one_month", + SixMonths = "six_months", +} + +/** + * The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. + * @example "collaborators_only" + */ +export enum InteractionGroup { + ExistingUsers = "existing_users", + ContributorsOnly = "contributors_only", + CollaboratorsOnly = "collaborators_only", +} + +/** + * Interaction Restrictions + * Limit interactions to a specific type of user for a specified duration + */ +export interface InteractionLimit { + /** The duration of the interaction restriction. Can be one of: \`one_day\`, \`three_days\`, \`one_week\`, \`one_month\`, \`six_months\`. Default: \`one_day\`. */ + expiry?: InteractionExpiry; + /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. */ + limit: InteractionGroup; +} + +/** + * Interaction Limits + * Interaction limit settings. + */ +export interface InteractionLimitResponse { + /** + * @format date-time + * @example "2018-08-17T04:18:39Z" + */ + expires_at: string; + /** The type of GitHub user that can comment, open issues, or create pull requests while the interaction limit is in effect. Can be one of: \`existing_users\`, \`contributors_only\`, \`collaborators_only\`. */ + limit: InteractionGroup; + /** @example "repository" */ + origin: string; +} + +/** + * Issue + * Issues are a great way to keep track of tasks, enhancements, and bugs for your projects. + */ +export interface Issue { + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * Contents of the issue + * @example "It looks like the new widget form is broken on Safari. When I try and create the widget, Safari crashes. This is reproducible on 10.8, but not 10.9. Maybe a browser bug?" + */ + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + closed_by?: SimpleUser | null; + comments: number; + /** @format uri */ + comments_url: string; + /** @format date-time */ + created_at: string; + /** @format uri */ + events_url: string; + /** @format uri */ + html_url: string; + id: number; + /** + * Labels to associate with this issue; pass one or more label names to replace the set of labels on this issue; send an empty array to clear all labels from the issue; note that the labels are silently dropped for users without push access to the repository + * @example ["bug","registration"] + */ + labels: ( + | string + | { + color?: string | null; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + /** @format uri */ + url?: string; + } + )[]; + labels_url: string; + locked: boolean; + milestone: Milestone | null; + node_id: string; + /** + * Number uniquely identifying the issue within its repository + * @example 42 + */ + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + reactions?: ReactionRollup; + /** A git repository */ + repository?: Repository; + /** @format uri */ + repository_url: string; + /** + * State of the issue; either 'open' or 'closed' + * @example "open" + */ + state: string; + /** @format uri */ + timeline_url?: string; + /** + * Title of the issue + * @example "Widget creation fails in Safari on OS X 10.8" + */ + title: string; + /** @format date-time */ + updated_at: string; + /** + * URL for the issue + * @format uri + * @example "https://api.github.com/repositories/42/issues/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Comment + * Comments provide a way for people to collaborate on an issue. + */ +export interface IssueComment { + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * Contents of the issue comment + * @example "What version of Safari were you using when you observed this bug?" + */ + body?: string; + body_html?: string; + body_text?: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** @format uri */ + html_url: string; + /** + * Unique identifier of the issue comment + * @example 42 + */ + id: number; + /** @format uri */ + issue_url: string; + node_id: string; + performed_via_github_app?: Integration | null; + reactions?: ReactionRollup; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * URL for the issue comment + * @format uri + * @example "https://api.github.com/repositories/42/issues/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Event + * Issue Event + */ +export interface IssueEvent { + actor: SimpleUser | null; + assignee?: SimpleUser | null; + assigner?: SimpleUser | null; + /** How the author is associated with the repository. */ + author_association?: AuthorAssociation; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_id: string | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_url: string | null; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + dismissed_review?: IssueEventDismissedReview; + /** @example "closed" */ + event: string; + /** @example 1 */ + id: number; + /** Issue Simple */ + issue?: IssueSimple; + /** Issue Event Label */ + label?: IssueEventLabel; + lock_reason?: string | null; + /** Issue Event Milestone */ + milestone?: IssueEventMilestone; + /** @example "MDEwOklzc3VlRXZlbnQx" */ + node_id: string; + /** Issue Event Project Card */ + project_card?: IssueEventProjectCard; + /** Issue Event Rename */ + rename?: IssueEventRename; + requested_reviewer?: SimpleUser | null; + /** Groups of organization members that gives permissions on specified repositories. */ + requested_team?: Team; + review_requester?: SimpleUser | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/events/1" + */ + url: string; +} + +/** Issue Event Dismissed Review */ +export interface IssueEventDismissedReview { + dismissal_commit_id?: string | null; + dismissal_message: string | null; + review_id: number; + state: string; +} + +/** + * Issue Event for Issue + * Issue Event for Issue + */ +export interface IssueEventForIssue { + /** Simple User */ + actor?: SimpleUser; + /** How the author is associated with the repository. */ + author_association?: AuthorAssociation; + /** @example "":+1:"" */ + body?: string; + /** @example ""

Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam.

"" */ + body_html?: string; + /** @example ""Accusantium fugiat cumque. Autem qui nostrum. Atque quae ullam."" */ + body_text?: string; + commit_id?: string | null; + commit_url?: string | null; + created_at?: string; + event?: string; + /** @example ""https://github.com/owner-3906e11a33a3d55ba449d63f/BBB_Private_Repo/commit/480d4f47447129f015cb327536c522ca683939a1"" */ + html_url?: string; + id?: number; + /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/issues/1"" */ + issue_url?: string; + /** @example ""off-topic"" */ + lock_reason?: string; + /** @example ""add a bunch of files"" */ + message?: string; + node_id?: string; + /** @example ""https://api.github.com/repos/owner-3906e11a33a3d55ba449d63f/AAA_Public_Repo/pulls/2"" */ + pull_request_url?: string; + /** @example ""480d4f47447129f015cb327536c522ca683939a1"" */ + sha?: string; + /** @example ""commented"" */ + state?: string; + /** @example ""2020-07-09T00:17:51Z"" */ + submitted_at?: string; + /** @example ""2020-07-09T00:17:36Z"" */ + updated_at?: string; + url?: string; +} + +/** + * Issue Event Label + * Issue Event Label + */ +export interface IssueEventLabel { + color: string | null; + name: string | null; +} + +/** + * Issue Event Milestone + * Issue Event Milestone + */ +export interface IssueEventMilestone { + title: string; +} + +/** + * Issue Event Project Card + * Issue Event Project Card + */ +export interface IssueEventProjectCard { + column_name: string; + id: number; + previous_column_name?: string; + project_id: number; + /** @format uri */ + project_url: string; + /** @format uri */ + url: string; +} + +/** + * Issue Event Rename + * Issue Event Rename + */ +export interface IssueEventRename { + from: string; + to: string; +} + +/** + * Issue Search Result Item + * Issue Search Result Item + */ +export interface IssueSearchResultItem { + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + comments: number; + /** @format uri */ + comments_url: string; + /** @format date-time */ + created_at: string; + draft?: boolean; + /** @format uri */ + events_url: string; + /** @format uri */ + html_url: string; + id: number; + labels: { + color?: string; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + labels_url: string; + locked: boolean; + milestone: Milestone | null; + node_id: string; + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + /** A git repository */ + repository?: Repository; + /** @format uri */ + repository_url: string; + score: number; + state: string; + text_matches?: SearchResultTextMatches; + /** @format uri */ + timeline_url?: string; + title: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + user: SimpleUser | null; +} + +/** + * Issue Simple + * Issue Simple + */ +export interface IssueSimple { + /** @example "too heated" */ + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** @example "I'm having a problem with this." */ + body?: string; + body_html?: string; + body_text?: string; + /** @format date-time */ + closed_at: string | null; + /** @example 0 */ + comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** + * @format date-time + * @example "2011-04-22T13:33:48Z" + */ + created_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/events" + */ + events_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/issues/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + labels: Label[]; + /** @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/labels{/name}" */ + labels_url: string; + /** @example true */ + locked: boolean; + milestone: Milestone | null; + /** @example "MDU6SXNzdWUx" */ + node_id: string; + /** @example 1347 */ + number: number; + performed_via_github_app?: Integration | null; + pull_request?: { + /** @format uri */ + diff_url: string | null; + /** @format uri */ + html_url: string | null; + /** @format date-time */ + merged_at?: string | null; + /** @format uri */ + patch_url: string | null; + /** @format uri */ + url: string | null; + }; + /** A git repository */ + repository?: Repository; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + repository_url: string; + /** @example "open" */ + state: string; + /** @format uri */ + timeline_url?: string; + /** @example "Found a bug" */ + title: string; + /** + * @format date-time + * @example "2011-04-22T13:33:48Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Job + * Information of a job execution in a workflow run + */ +export interface Job { + /** @example "https://api.github.com/repos/github/hello-world/check-runs/4" */ + check_run_url: string; + /** + * The time that the job finished, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + completed_at: string | null; + /** + * The outcome of the job. + * @example "success" + */ + conclusion: string | null; + /** + * The SHA of the commit that is being run. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/runs/4" */ + html_url: string | null; + /** + * The id of the job. + * @example 21 + */ + id: number; + /** + * The name of the job. + * @example "test-coverage" + */ + name: string; + /** @example "MDg6Q2hlY2tSdW40" */ + node_id: string; + /** + * The id of the associated workflow run. + * @example 5 + */ + run_id: number; + /** @example "https://api.github.com/repos/github/hello-world/actions/runs/5" */ + run_url: string; + /** + * The time that the job started, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + started_at: string; + /** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ + status: "queued" | "in_progress" | "completed"; + /** Steps in this job. */ + steps?: { + /** + * The time that the job finished, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + completed_at?: string | null; + /** + * The outcome of the job. + * @example "success" + */ + conclusion: string | null; + /** + * The name of the job. + * @example "test-coverage" + */ + name: string; + /** @example 1 */ + number: number; + /** + * The time that the step started, in ISO 8601 format. + * @format date-time + * @example "2019-08-08T08:00:00-07:00" + */ + started_at?: string | null; + /** + * The phase of the lifecycle that the job is currently in. + * @example "queued" + */ + status: "queued" | "in_progress" | "completed"; + }[]; + /** @example "https://api.github.com/repos/github/hello-world/actions/jobs/21" */ + url: string; +} + +/** + * Key + * Key + */ +export interface Key { + /** @format date-time */ + created_at: string; + id: number; + key: string; + key_id: string; + read_only: boolean; + title: string; + url: string; + verified: boolean; +} + +/** + * Key Simple + * Key Simple + */ +export interface KeySimple { + id: number; + key: string; +} + +/** + * Label + * Color-coded labels help you categorize and filter your issues (just like labels in Gmail). + */ +export interface Label { + /** + * 6-character hex code, without the leading #, identifying the color + * @example "FFFFFF" + */ + color: string; + /** @example true */ + default: boolean; + /** @example "Something isn't working" */ + description: string | null; + /** @example 208045946 */ + id: number; + /** + * The name of the label. + * @example "bug" + */ + name: string; + /** @example "MDU6TGFiZWwyMDgwNDU5NDY=" */ + node_id: string; + /** + * URL for the label + * @format uri + * @example "https://api.github.com/repositories/42/labels/bug" + */ + url: string; +} + +/** + * Label Search Result Item + * Label Search Result Item + */ +export interface LabelSearchResultItem { + color: string; + default: boolean; + description: string | null; + id: number; + name: string; + node_id: string; + score: number; + text_matches?: SearchResultTextMatches; + /** @format uri */ + url: string; +} + +/** + * Language + * Language + */ +export type Language = Record; + +/** + * License + * License + */ +export interface License { + /** + * @example " + * + * The MIT License (MIT) + * + * Copyright (c) [year] [fullname] + * + * 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. + * " + */ + body: string; + /** @example ["include-copyright"] */ + conditions: string[]; + /** @example "A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty." */ + description: string; + /** @example true */ + featured: boolean; + /** + * @format uri + * @example "http://choosealicense.com/licenses/mit/" + */ + html_url: string; + /** @example "Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders." */ + implementation: string; + /** @example "mit" */ + key: string; + /** @example ["no-liability"] */ + limitations: string[]; + /** @example "MIT License" */ + name: string; + /** @example "MDc6TGljZW5zZW1pdA==" */ + node_id: string; + /** @example ["commercial-use","modifications","distribution","sublicense","private-use"] */ + permissions: string[]; + /** @example "MIT" */ + spdx_id: string | null; + /** + * @format uri + * @example "https://api.github.com/licenses/mit" + */ + url: string | null; +} + +/** + * License Content + * License Content + */ +export interface LicenseContent { + _links: { + /** @format uri */ + git: string | null; + /** @format uri */ + html: string | null; + /** @format uri */ + self: string; + }; + content: string; + /** @format uri */ + download_url: string | null; + encoding: string; + /** @format uri */ + git_url: string | null; + /** @format uri */ + html_url: string | null; + license: LicenseSimple | null; + name: string; + path: string; + sha: string; + size: number; + type: string; + /** @format uri */ + url: string; +} + +/** + * License Simple + * License Simple + */ +export interface LicenseSimple { + /** @format uri */ + html_url?: string; + /** @example "mit" */ + key: string; + /** @example "MIT License" */ + name: string; + /** @example "MDc6TGljZW5zZW1pdA==" */ + node_id: string; + /** @example "MIT" */ + spdx_id: string | null; + /** + * @format uri + * @example "https://api.github.com/licenses/mit" + */ + url: string | null; +} + +/** + * Link + * Hypermedia Link + */ +export interface Link { + href: string; +} + +/** + * Link With Type + * Hypermedia Link with Type + */ +export interface LinkWithType { + href: string; + type: string; +} + +/** Marketplace Account */ +export interface MarketplaceAccount { + /** @format email */ + email?: string | null; + id: number; + login: string; + node_id?: string; + /** @format email */ + organization_billing_email?: string | null; + type: string; + /** @format uri */ + url: string; +} + +/** + * Marketplace Listing Plan + * Marketplace Listing Plan + */ +export interface MarketplaceListingPlan { + /** + * @format uri + * @example "https://api.github.com/marketplace_listing/plans/1313/accounts" + */ + accounts_url: string; + /** @example ["Up to 25 private repositories","11 concurrent builds"] */ + bullets: string[]; + /** @example "A professional-grade CI solution" */ + description: string; + /** @example true */ + has_free_trial: boolean; + /** @example 1313 */ + id: number; + /** @example 1099 */ + monthly_price_in_cents: number; + /** @example "Pro" */ + name: string; + /** @example 3 */ + number: number; + /** @example "flat-rate" */ + price_model: string; + /** @example "published" */ + state: string; + unit_name: string | null; + /** + * @format uri + * @example "https://api.github.com/marketplace_listing/plans/1313" + */ + url: string; + /** @example 11870 */ + yearly_price_in_cents: number; +} + +/** + * Marketplace Purchase + * Marketplace Purchase + */ +export interface MarketplacePurchase { + id: number; + login: string; + marketplace_pending_change?: { + effective_date?: string; + id?: number; + is_installed?: boolean; + /** Marketplace Listing Plan */ + plan?: MarketplaceListingPlan; + unit_count?: number | null; + }; + marketplace_purchase: { + billing_cycle?: string; + free_trial_ends_on?: string | null; + is_installed?: boolean; + next_billing_date?: string | null; + on_free_trial?: boolean; + /** Marketplace Listing Plan */ + plan?: MarketplaceListingPlan; + unit_count?: number | null; + updated_at?: string; + }; + organization_billing_email?: string; + type: string; + url: string; +} + +/** + * Migration + * A migration. + */ +export interface Migration { + /** @format uri */ + archive_url?: string; + /** + * @format date-time + * @example "2015-07-06T15:33:38-07:00" + */ + created_at: string; + exclude?: any[]; + exclude_attachments: boolean; + /** @example "0b989ba4-242f-11e5-81e1-c7b6966d2516" */ + guid: string; + /** @example 79 */ + id: number; + /** @example true */ + lock_repositories: boolean; + node_id: string; + owner: SimpleUser | null; + repositories: Repository[]; + /** @example "pending" */ + state: string; + /** + * @format date-time + * @example "2015-07-06T15:33:38-07:00" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octo-org/migrations/79" + */ + url: string; +} + +/** + * Milestone + * A collection of related issues and pull requests. + */ +export interface Milestone { + /** + * @format date-time + * @example "2013-02-12T13:22:01Z" + */ + closed_at: string | null; + /** @example 8 */ + closed_issues: number; + /** + * @format date-time + * @example "2011-04-10T20:09:31Z" + */ + created_at: string; + creator: SimpleUser | null; + /** @example "Tracking milestone for version 1.0" */ + description: string | null; + /** + * @format date-time + * @example "2012-10-09T23:39:01Z" + */ + due_on: string | null; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/milestones/v1.0" + */ + html_url: string; + /** @example 1002604 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1/labels" + */ + labels_url: string; + /** @example "MDk6TWlsZXN0b25lMTAwMjYwNA==" */ + node_id: string; + /** + * The number of the milestone. + * @example 42 + */ + number: number; + /** @example 4 */ + open_issues: number; + /** + * The state of the milestone. + * @default "open" + * @example "open" + */ + state: "open" | "closed"; + /** + * The title of the milestone. + * @example "v1.0" + */ + title: string; + /** + * @format date-time + * @example "2014-03-03T18:58:10Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/milestones/1" + */ + url: string; +} + +/** + * Minimal Repository + * Minimal Repository + */ +export interface MinimalRepository { + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + archived?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + clone_url?: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at?: string | null; + default_branch?: string; + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + disabled?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + /** @example 0 */ + forks?: number; + forks_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + git_url?: string; + has_downloads?: boolean; + has_issues?: boolean; + has_pages?: boolean; + has_projects?: boolean; + has_wiki?: boolean; + homepage?: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** @example 1296269 */ + id: number; + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language?: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license?: { + key?: string; + name?: string; + node_id?: string; + spdx_id?: string; + url?: string; + } | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + mirror_url?: string | null; + /** @example "Hello-World" */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + /** @example 0 */ + open_issues?: number; + open_issues_count?: number; + owner: SimpleUser | null; + permissions?: { + admin?: boolean; + pull?: boolean; + push?: boolean; + }; + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at?: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + size?: number; + ssh_url?: string; + stargazers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + svn_url?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: Repository | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at?: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + visibility?: string; + /** @example 0 */ + watchers?: number; + watchers_count?: number; +} + +/** + * Org Hook + * Org Hook + */ +export interface OrgHook { + /** @example true */ + active: boolean; + config: { + /** @example ""form"" */ + content_type?: string; + /** @example ""0"" */ + insecure_ssl?: string; + /** @example ""********"" */ + secret?: string; + /** @example ""http://example.com/2"" */ + url?: string; + }; + /** + * @format date-time + * @example "2011-09-06T17:26:27Z" + */ + created_at: string; + /** @example ["push","pull_request"] */ + events: string[]; + /** @example 1 */ + id: number; + /** @example "web" */ + name: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/hooks/1/pings" + */ + ping_url: string; + type: string; + /** + * @format date-time + * @example "2011-09-06T20:39:23Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/hooks/1" + */ + url: string; +} + +/** + * Org Membership + * Org Membership + */ +export interface OrgMembership { + /** Organization Simple */ + organization: OrganizationSimple; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat" + */ + organization_url: string; + permissions?: { + can_create_repository: boolean; + }; + /** @example "admin" */ + role: string; + /** @example "active" */ + state: string; + /** + * @format uri + * @example "https://api.github.com/orgs/octocat/memberships/defunkt" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Actions Secret for an Organization + * Secrets for GitHub Actions for an organization. + */ +export interface OrganizationActionsSecret { + /** @format date-time */ + created_at: string; + /** + * The name of the secret. + * @example "SECRET_TOKEN" + */ + name: string; + /** + * @format uri + * @example "https://api.github.com/organizations/org/secrets/my_secret/repositories" + */ + selected_repositories_url?: string; + /** @format date-time */ + updated_at: string; + /** Visibility of a secret */ + visibility: "all" | "private" | "selected"; +} + +/** + * Organization Full + * Organization Full + */ +export interface OrganizationFull { + /** @example "https://github.com/images/error/octocat_happy.gif" */ + avatar_url: string; + /** + * @format email + * @example "org@example.com" + */ + billing_email?: string | null; + /** + * @format uri + * @example "https://github.com/blog" + */ + blog?: string; + /** @example 8 */ + collaborators?: number | null; + /** @example "GitHub" */ + company?: string; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + created_at: string; + default_repository_permission?: string | null; + /** @example "A great organization" */ + description: string | null; + /** @example 10000 */ + disk_usage?: number | null; + /** + * @format email + * @example "octocat@github.com" + */ + email?: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github/events" + */ + events_url: string; + /** @example 20 */ + followers: number; + /** @example 0 */ + following: number; + /** @example true */ + has_organization_projects: boolean; + /** @example true */ + has_repository_projects: boolean; + /** @example "https://api.github.com/orgs/github/hooks" */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example true */ + is_verified?: boolean; + /** @example "https://api.github.com/orgs/github/issues" */ + issues_url: string; + /** @example "San Francisco" */ + location?: string; + /** @example "github" */ + login: string; + /** @example "all" */ + members_allowed_repository_creation_type?: string; + /** @example true */ + members_can_create_internal_repositories?: boolean; + /** @example true */ + members_can_create_pages?: boolean; + /** @example true */ + members_can_create_private_repositories?: boolean; + /** @example true */ + members_can_create_public_repositories?: boolean; + /** @example true */ + members_can_create_repositories?: boolean | null; + /** @example "https://api.github.com/orgs/github/members{/member}" */ + members_url: string; + /** @example "github" */ + name?: string; + /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ + node_id: string; + /** @example 100 */ + owned_private_repos?: number; + plan?: { + filled_seats?: number; + name: string; + private_repos: number; + seats?: number; + space: number; + }; + /** @example 81 */ + private_gists?: number | null; + /** @example 1 */ + public_gists: number; + /** @example "https://api.github.com/orgs/github/public_members{/member}" */ + public_members_url: string; + /** @example 2 */ + public_repos: number; + /** + * @format uri + * @example "https://api.github.com/orgs/github/repos" + */ + repos_url: string; + /** @example 100 */ + total_private_repos?: number; + /** @example "github" */ + twitter_username?: string | null; + /** @example true */ + two_factor_requirement_enabled?: boolean | null; + /** @example "Organization" */ + type: string; + /** @format date-time */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github" + */ + url: string; +} + +/** + * Organization Invitation + * Organization Invitation + */ +export interface OrganizationInvitation { + created_at: string; + email: string | null; + failed_at?: string; + failed_reason?: string; + id: number; + invitation_team_url: string; + /** @example ""https://api.github.com/organizations/16/invitations/1/teams"" */ + invitation_teams_url?: string; + /** Simple User */ + inviter: SimpleUser; + login: string | null; + /** @example ""MDIyOk9yZ2FuaXphdGlvbkludml0YXRpb24x"" */ + node_id: string; + role: string; + team_count: number; +} + +/** + * Organization Simple + * Organization Simple + */ +export interface OrganizationSimple { + /** @example "https://github.com/images/error/octocat_happy.gif" */ + avatar_url: string; + /** @example "A great organization" */ + description: string | null; + /** + * @format uri + * @example "https://api.github.com/orgs/github/events" + */ + events_url: string; + /** @example "https://api.github.com/orgs/github/hooks" */ + hooks_url: string; + /** @example 1 */ + id: number; + /** @example "https://api.github.com/orgs/github/issues" */ + issues_url: string; + /** @example "github" */ + login: string; + /** @example "https://api.github.com/orgs/github/members{/member}" */ + members_url: string; + /** @example "MDEyOk9yZ2FuaXphdGlvbjE=" */ + node_id: string; + /** @example "https://api.github.com/orgs/github/public_members{/member}" */ + public_members_url: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github/repos" + */ + repos_url: string; + /** + * @format uri + * @example "https://api.github.com/orgs/github" + */ + url: string; +} + +export interface PackagesBillingUsage { + /** Free storage space (GB) for GitHub Packages. */ + included_gigabytes_bandwidth: number; + /** Sum of the free and paid storage space (GB) for GitHuub Packages. */ + total_gigabytes_bandwidth_used: number; + /** Total paid storage space (GB) for GitHuub Packages. */ + total_paid_gigabytes_bandwidth_used: number; +} + +/** + * GitHub Pages + * The configuration for GitHub Pages for a repository. + */ +export interface Page { + /** + * Whether the Page has a custom 404 page. + * @default false + * @example false + */ + custom_404: boolean; + /** + * The Pages site's custom domain + * @example "example.com" + */ + cname: string | null; + /** + * The web address the Page can be accessed from. + * @format uri + * @example "https://example.com" + */ + html_url?: string; + /** + * Whether the GitHub Pages site is publicly visible. If set to \`true\`, the site is accessible to anyone on the internet. If set to \`false\`, the site will only be accessible to users who have at least \`read\` access to the repository that published the site. + * @example true + */ + public: boolean; + source?: PagesSourceHash; + /** + * The status of the most recent build of the Page. + * @example "built" + */ + status: "built" | "building" | "errored" | null; + /** + * The API address for accessing this Page resource. + * @format uri + * @example "https://api.github.com/repos/github/hello-world/pages" + */ + url: string; +} + +/** + * Page Build + * Page Build + */ +export interface PageBuild { + commit: string; + /** @format date-time */ + created_at: string; + duration: number; + error: { + message: string | null; + }; + pusher: SimpleUser | null; + status: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Page Build Status + * Page Build Status + */ +export interface PageBuildStatus { + /** @example "queued" */ + status: string; + /** + * @format uri + * @example "https://api.github.com/repos/github/hello-world/pages/builds/latest" + */ + url: string; +} + +/** Pages Source Hash */ +export interface PagesSourceHash { + branch: string; + path: string; +} + +/** Participation Stats */ +export interface ParticipationStats { + all: number[]; + owner: number[]; +} + +/** + * Porter Author + * Porter Author + */ +export interface PorterAuthor { + email: string; + id: number; + /** @format uri */ + import_url: string; + name: string; + remote_id: string; + remote_name: string; + /** @format uri */ + url: string; +} + +/** + * Porter Large File + * Porter Large File + */ +export interface PorterLargeFile { + oid: string; + path: string; + ref_name: string; + size: number; +} + +/** + * Private User + * Private User + */ +export interface PrivateUser { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "There once was..." */ + bio: string | null; + /** @example "https://github.com/blog" */ + blog: string | null; + business_plus?: boolean; + /** @example 8 */ + collaborators: number; + /** @example "GitHub" */ + company: string | null; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + created_at: string; + /** @example 10000 */ + disk_usage: number; + /** + * @format email + * @example "octocat@github.com" + */ + email: string | null; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** @example 20 */ + followers: number; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example 0 */ + following: number; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + hireable: boolean | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + ldap_dn?: string; + /** @example "San Francisco" */ + location: string | null; + /** @example "octocat" */ + login: string; + /** @example "monalisa octocat" */ + name: string | null; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + /** @example 100 */ + owned_private_repos: number; + plan?: { + collaborators: number; + name: string; + private_repos: number; + space: number; + }; + /** @example 81 */ + private_gists: number; + /** @example 1 */ + public_gists: number; + /** @example 2 */ + public_repos: number; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + /** @example 100 */ + total_private_repos: number; + /** @example "monalisa" */ + twitter_username?: string | null; + /** @example true */ + two_factor_authentication: boolean; + /** @example "User" */ + type: string; + /** + * @format date-time + * @example "2008-01-14T04:33:35Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +} + +/** + * Project + * Projects are a way to organize columns and cards of work. + */ +export interface Project { + /** + * Body of the project + * @example "This project represents the sprint of the first week in January" + */ + body: string | null; + /** + * @format uri + * @example "https://api.github.com/projects/1002604/columns" + */ + columns_url: string; + /** + * @format date-time + * @example "2011-04-10T20:09:31Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * @format uri + * @example "https://github.com/api-playground/projects-test/projects/12" + */ + html_url: string; + /** @example 1002604 */ + id: number; + /** + * Name of the project + * @example "Week One Sprint" + */ + name: string; + /** @example "MDc6UHJvamVjdDEwMDI2MDQ=" */ + node_id: string; + /** @example 1 */ + number: number; + /** The baseline permission that all organization members have on this project. Only present if owner is an organization. */ + organization_permission?: "read" | "write" | "admin" | "none"; + /** + * @format uri + * @example "https://api.github.com/repos/api-playground/projects-test" + */ + owner_url: string; + /** Whether or not this project can be seen by everyone. Only present if owner is an organization. */ + private?: boolean; + /** + * State of the project; either 'open' or 'closed' + * @example "open" + */ + state: string; + /** + * @format date-time + * @example "2014-03-03T18:58:10Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/1002604" + */ + url: string; +} + +/** + * Project Card + * Project cards represent a scope of work. + */ +export interface ProjectCard { + /** + * Whether or not the card is archived + * @example false + */ + archived?: boolean; + /** + * @format uri + * @example "https://api.github.com/projects/columns/367" + */ + column_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/api-playground/projects-test/issues/3" + */ + content_url?: string; + /** + * @format date-time + * @example "2016-09-05T14:21:06Z" + */ + created_at: string; + creator: SimpleUser | null; + /** + * The project card's ID + * @example 42 + */ + id: number; + /** @example "MDExOlByb2plY3RDYXJkMTQ3OA==" */ + node_id: string; + /** @example "Add payload for delete Project column" */ + note: string | null; + /** + * @format uri + * @example "https://api.github.com/projects/120" + */ + project_url: string; + /** + * @format date-time + * @example "2016-09-05T14:20:22Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/columns/cards/1478" + */ + url: string; +} + +/** + * Project Column + * Project columns contain cards of work. + */ +export interface ProjectColumn { + /** + * @format uri + * @example "https://api.github.com/projects/columns/367/cards" + */ + cards_url: string; + /** + * @format date-time + * @example "2016-09-05T14:18:44Z" + */ + created_at: string; + /** + * The unique identifier of the project column + * @example 42 + */ + id: number; + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; + /** @example "MDEzOlByb2plY3RDb2x1bW4zNjc=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/projects/120" + */ + project_url: string; + /** + * @format date-time + * @example "2016-09-05T14:22:28Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/projects/columns/367" + */ + url: string; +} + +/** + * Protected Branch + * Branch protections protect branches + */ +export interface ProtectedBranch { + allow_deletions?: { + enabled: boolean; + }; + allow_force_pushes?: { + enabled: boolean; + }; + enforce_admins?: { + enabled: boolean; + /** @format uri */ + url: string; + }; + required_linear_history?: { + enabled: boolean; + }; + required_pull_request_reviews?: { + dismiss_stale_reviews?: boolean; + dismissal_restrictions?: { + teams: Team[]; + /** @format uri */ + teams_url: string; + /** @format uri */ + url: string; + users: SimpleUser[]; + /** @format uri */ + users_url: string; + }; + require_code_owner_reviews?: boolean; + required_approving_review_count?: number; + /** @format uri */ + url: string; + }; + required_signatures?: { + /** @example true */ + enabled: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_signatures" + */ + url: string; + }; + /** Status Check Policy */ + required_status_checks?: StatusCheckPolicy; + /** Branch Restriction Policy */ + restrictions?: BranchRestrictionPolicy; + /** @format uri */ + url: string; +} + +/** + * Protected Branch Admin Enforced + * Protected Branch Admin Enforced + */ +export interface ProtectedBranchAdminEnforced { + /** @example true */ + enabled: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/enforce_admins" + */ + url: string; +} + +/** + * Protected Branch Pull Request Review + * Protected Branch Pull Request Review + */ +export interface ProtectedBranchPullRequestReview { + /** @example true */ + dismiss_stale_reviews: boolean; + dismissal_restrictions?: { + /** The list of teams with review dismissal access. */ + teams?: Team[]; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/teams"" */ + teams_url?: string; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions"" */ + url?: string; + /** The list of users with review dismissal access. */ + users?: SimpleUser[]; + /** @example ""https://api.github.com/repos/the-org/an-org-repo/branches/master/protection/dismissal_restrictions/users"" */ + users_url?: string; + }; + /** @example true */ + require_code_owner_reviews: boolean; + /** + * @min 1 + * @max 6 + * @example 2 + */ + required_approving_review_count?: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/dismissal_restrictions" + */ + url?: string; +} + +/** + * Public User + * Public User + */ +export interface PublicUser { + /** @format uri */ + avatar_url: string; + bio: string | null; + blog: string | null; + /** @example 3 */ + collaborators?: number; + company: string | null; + /** @format date-time */ + created_at: string; + /** @example 1 */ + disk_usage?: number; + /** @format email */ + email: string | null; + events_url: string; + followers: number; + /** @format uri */ + followers_url: string; + following: number; + following_url: string; + gists_url: string; + gravatar_id: string | null; + hireable: boolean | null; + /** @format uri */ + html_url: string; + id: number; + location: string | null; + login: string; + name: string | null; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @example 2 */ + owned_private_repos?: number; + plan?: { + collaborators: number; + name: string; + private_repos: number; + space: number; + }; + /** @example 1 */ + private_gists?: number; + public_gists: number; + public_repos: number; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + /** @example 2 */ + total_private_repos?: number; + twitter_username?: string | null; + type: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Pull Request + * Pull requests let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary. + */ +export interface PullRequest { + _links: { + /** Hypermedia Link */ + comments: Link; + /** Hypermedia Link */ + commits: Link; + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + issue: Link; + /** Hypermedia Link */ + review_comment: Link; + /** Hypermedia Link */ + review_comments: Link; + /** Hypermedia Link */ + self: Link; + /** Hypermedia Link */ + statuses: Link; + }; + /** @example "too heated" */ + active_lock_reason?: string | null; + /** @example 100 */ + additions: number; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** The status of auto merging a pull request. */ + auto_merge: AutoMerge; + base: { + label: string; + ref: string; + repo: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + /** @format uri */ + deployments_url: string; + description: string | null; + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; + }; + sha: string; + user: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + }; + /** @example "Please pull these awesome changes" */ + body: string | null; + /** @example 5 */ + changed_files: number; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + closed_at: string | null; + /** @example 10 */ + comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** @example 3 */ + commits: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" + */ + commits_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** @example 3 */ + deletions: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.diff" + */ + diff_url: string; + /** + * Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + head: { + label: string; + ref: string; + repo: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + /** @format uri */ + deployments_url: string; + description: string | null; + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: { + key: string; + name: string; + node_id: string; + spdx_id: string | null; + /** @format uri */ + url: string | null; + }; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; + }; + sha: string; + user: { + /** @format uri */ + avatar_url: string; + events_url: string; + /** @format uri */ + followers_url: string; + following_url: string; + gists_url: string; + gravatar_id: string | null; + /** @format uri */ + html_url: string; + id: number; + login: string; + node_id: string; + /** @format uri */ + organizations_url: string; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + type: string; + /** @format uri */ + url: string; + }; + }; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + issue_url: string; + labels: { + color?: string; + default?: boolean; + description?: string | null; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + /** @example true */ + locked: boolean; + /** + * Indicates whether maintainers can modify the pull request. + * @example true + */ + maintainer_can_modify: boolean; + /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ + merge_commit_sha: string | null; + /** @example true */ + mergeable: boolean | null; + /** @example "clean" */ + mergeable_state: string; + merged: boolean; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + merged_at: string | null; + merged_by: SimpleUser | null; + milestone: Milestone | null; + /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ + node_id: string; + /** + * Number uniquely identifying the pull request within its repository. + * @example 42 + */ + number: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.patch" + */ + patch_url: string; + /** @example true */ + rebaseable?: boolean | null; + requested_reviewers?: SimpleUser[] | null; + requested_teams?: TeamSimple[] | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ + review_comment_url: string; + /** @example 0 */ + review_comments: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" + */ + review_comments_url: string; + /** + * State of this Pull Request. Either \`open\` or \`closed\`. + * @example "open" + */ + state: "open" | "closed"; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + statuses_url: string; + /** + * The title of the pull request. + * @example "Amazing new feature" + */ + title: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Pull Request Merge Result + * Pull Request Merge Result + */ +export interface PullRequestMergeResult { + merged: boolean; + message: string; + sha: string; +} + +/** Pull Request Minimal */ +export interface PullRequestMinimal { + base: { + ref: string; + repo: { + id: number; + name: string; + url: string; + }; + sha: string; + }; + head: { + ref: string; + repo: { + id: number; + name: string; + url: string; + }; + sha: string; + }; + id: number; + number: number; + url: string; +} + +/** + * Pull Request Review + * Pull Request Reviews are reviews on pull requests. + */ +export interface PullRequestReview { + _links: { + html: { + href: string; + }; + pull_request: { + href: string; + }; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The text of the review. + * @example "This looks great." + */ + body: string; + body_html?: string; + body_text?: string; + /** + * A commit SHA for the review. + * @example "54bb654c9e6025347f57900a4a5c2313a96b8035" + */ + commit_id: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/12#pullrequestreview-80" + */ + html_url: string; + /** + * Unique identifier of the review + * @example 42 + */ + id: number; + /** @example "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3ODA=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/12" + */ + pull_request_url: string; + /** @example "CHANGES_REQUESTED" */ + state: string; + /** @format date-time */ + submitted_at?: string; + user: SimpleUser | null; +} + +/** + * Pull Request Review Comment + * Pull Request Review Comments are comments on a portion of the Pull Request's diff. + */ +export interface PullRequestReviewComment { + _links: { + html: { + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + href: string; + }; + pull_request: { + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + href: string; + }; + self: { + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + href: string; + }; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** + * The text of the comment. + * @example "We should probably include a check for null values here." + */ + body: string; + /** @example ""

comment body

"" */ + body_html?: string; + /** @example ""comment body"" */ + body_text?: string; + /** + * The SHA of the commit to which the comment applies. + * @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + commit_id: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** + * The diff of the line that the comment refers to. + * @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." + */ + diff_hunk: string; + /** + * HTML URL for the pull request review comment. + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + html_url: string; + /** + * The ID of the pull request review comment. + * @example 1 + */ + id: number; + /** + * The comment ID to reply to. + * @example 8 + */ + in_reply_to_id?: number; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** + * The node ID of the pull request review comment. + * @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" + */ + node_id: string; + /** + * The SHA of the original commit to which the comment applies. + * @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" + */ + original_commit_id: string; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** + * The index of the original line in the diff to which the comment applies. + * @example 4 + */ + original_position: number; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + /** + * The relative path of the file to which the comment applies. + * @example "config/database.yaml" + */ + path: string; + /** + * The line index in the diff to which the comment applies. + * @example 1 + */ + position: number; + /** + * The ID of the pull request review to which the comment belongs. + * @example 42 + */ + pull_request_review_id: number | null; + /** + * URL for the pull request that the review comment belongs to. + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + pull_request_url: string; + reactions?: ReactionRollup; + /** + * The side of the diff to which the comment applies. The side of the last line of the range for a multi-line comment + * @default "RIGHT" + */ + side?: "LEFT" | "RIGHT"; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + start_side?: "LEFT" | "RIGHT" | null; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * URL for the pull request review comment + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + url: string; + /** Simple User */ + user: SimpleUser; +} + +/** + * Pull Request Review Request + * Pull Request Review Request + */ +export interface PullRequestReviewRequest { + teams: TeamSimple[]; + users: SimpleUser[]; +} + +/** + * Pull Request Simple + * Pull Request Simple + */ +export interface PullRequestSimple { + _links: { + /** Hypermedia Link */ + comments: Link; + /** Hypermedia Link */ + commits: Link; + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + issue: Link; + /** Hypermedia Link */ + review_comment: Link; + /** Hypermedia Link */ + review_comments: Link; + /** Hypermedia Link */ + self: Link; + /** Hypermedia Link */ + statuses: Link; + }; + /** @example "too heated" */ + active_lock_reason?: string | null; + assignee: SimpleUser | null; + assignees?: SimpleUser[] | null; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** The status of auto merging a pull request. */ + auto_merge: AutoMerge; + base: { + label: string; + ref: string; + /** A git repository */ + repo: Repository; + sha: string; + user: SimpleUser | null; + }; + /** @example "Please pull these awesome changes" */ + body: string | null; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + closed_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347/comments" + */ + comments_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits" + */ + commits_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.diff" + */ + diff_url: string; + /** + * Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + head: { + label: string; + ref: string; + /** A git repository */ + repo: Repository; + sha: string; + user: SimpleUser | null; + }; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347" + */ + html_url: string; + /** @example 1 */ + id: number; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/issues/1347" + */ + issue_url: string; + labels: { + color?: string; + default?: boolean; + description?: string; + id?: number; + name?: string; + node_id?: string; + url?: string; + }[]; + /** @example true */ + locked: boolean; + /** @example "e5bd3914e2e596debea16f433f57875b5b90bcd6" */ + merge_commit_sha: string | null; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + merged_at: string | null; + milestone: Milestone | null; + /** @example "MDExOlB1bGxSZXF1ZXN0MQ==" */ + node_id: string; + /** @example 1347 */ + number: number; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1347.patch" + */ + patch_url: string; + requested_reviewers?: SimpleUser[] | null; + requested_teams?: TeamSimple[] | null; + /** @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number}" */ + review_comment_url: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments" + */ + review_comments_url: string; + /** @example "open" */ + state: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e" + */ + statuses_url: string; + /** @example "new-feature" */ + title: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1347" + */ + url: string; + user: SimpleUser | null; +} + +/** Rate Limit */ +export interface RateLimit { + limit: number; + remaining: number; + reset: number; +} + +/** + * Rate Limit Overview + * Rate Limit Overview + */ +export interface RateLimitOverview { + rate: RateLimit; + resources: { + code_scanning_upload?: RateLimit; + core: RateLimit; + graphql?: RateLimit; + integration_manifest?: RateLimit; + search: RateLimit; + source_import?: RateLimit; + }; +} + +/** + * Reaction + * Reactions to conversations provide a way to help people express their feelings more simply and effectively. + */ +export interface Reaction { + /** + * The reaction to use + * @example "heart" + */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * @format date-time + * @example "2016-05-20T20:09:31Z" + */ + created_at: string; + /** @example 1 */ + id: number; + /** @example "MDg6UmVhY3Rpb24x" */ + node_id: string; + user: SimpleUser | null; +} + +/** Reaction Rollup */ +export interface ReactionRollup { + "+1": number; + "-1": number; + confused: number; + eyes: number; + heart: number; + hooray: number; + laugh: number; + rocket: number; + total_count: number; + /** @format uri */ + url: string; +} + +/** + * Referrer Traffic + * Referrer Traffic + */ +export interface ReferrerTraffic { + /** @example 4 */ + count: number; + /** @example "Google" */ + referrer: string; + /** @example 3 */ + uniques: number; +} + +/** + * Release + * A release. + */ +export interface Release { + assets: ReleaseAsset[]; + /** @format uri */ + assets_url: string; + /** Simple User */ + author: SimpleUser; + body?: string | null; + body_html?: string; + body_text?: string; + /** @format date-time */ + created_at: string; + /** + * true to create a draft (unpublished) release, false to create a published one. + * @example false + */ + draft: boolean; + /** @format uri */ + html_url: string; + id: number; + name: string | null; + node_id: string; + /** + * Whether to identify the release as a prerelease or a full release. + * @example false + */ + prerelease: boolean; + /** @format date-time */ + published_at: string | null; + /** + * The name of the tag. + * @example "v1.0.0" + */ + tag_name: string; + /** @format uri */ + tarball_url: string | null; + /** + * Specifies the commitish value that determines where the Git tag is created from. + * @example "master" + */ + target_commitish: string; + upload_url: string; + /** @format uri */ + url: string; + /** @format uri */ + zipball_url: string | null; +} + +/** + * Release Asset + * Data related to a release. + */ +export interface ReleaseAsset { + /** @format uri */ + browser_download_url: string; + content_type: string; + /** @format date-time */ + created_at: string; + download_count: number; + id: number; + label: string | null; + /** + * The file name of the asset. + * @example "Team Environment" + */ + name: string; + node_id: string; + size: number; + /** State of the release asset. */ + state: "uploaded" | "open"; + /** @format date-time */ + updated_at: string; + uploader: SimpleUser | null; + /** @format uri */ + url: string; +} + +/** + * Repo Search Result Item + * Repo Search Result Item + */ +export interface RepoSearchResultItem { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url: string; + archived: boolean; + assignees_url: string; + blobs_url: string; + branches_url: string; + clone_url: string; + collaborators_url: string; + comments_url: string; + commits_url: string; + compare_url: string; + contents_url: string; + /** @format uri */ + contributors_url: string; + /** @format date-time */ + created_at: string; + default_branch: string; + delete_branch_on_merge?: boolean; + /** @format uri */ + deployments_url: string; + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** @format uri */ + downloads_url: string; + /** @format uri */ + events_url: string; + fork: boolean; + forks: number; + forks_count: number; + /** @format uri */ + forks_url: string; + full_name: string; + git_commits_url: string; + git_refs_url: string; + git_tags_url: string; + git_url: string; + has_downloads: boolean; + has_issues: boolean; + has_pages: boolean; + has_projects: boolean; + has_wiki: boolean; + /** @format uri */ + homepage: string | null; + /** @format uri */ + hooks_url: string; + /** @format uri */ + html_url: string; + id: number; + issue_comment_url: string; + issue_events_url: string; + issues_url: string; + keys_url: string; + labels_url: string; + language: string | null; + /** @format uri */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** @format uri */ + merges_url: string; + milestones_url: string; + /** @format uri */ + mirror_url: string | null; + name: string; + node_id: string; + notifications_url: string; + open_issues: number; + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + pull: boolean; + push: boolean; + }; + private: boolean; + pulls_url: string; + /** @format date-time */ + pushed_at: string; + releases_url: string; + score: number; + size: number; + ssh_url: string; + stargazers_count: number; + /** @format uri */ + stargazers_url: string; + statuses_url: string; + /** @format uri */ + subscribers_url: string; + /** @format uri */ + subscription_url: string; + /** @format uri */ + svn_url: string; + /** @format uri */ + tags_url: string; + /** @format uri */ + teams_url: string; + temp_clone_token?: string; + text_matches?: SearchResultTextMatches; + topics?: string[]; + trees_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; + watchers: number; + watchers_count: number; +} + +/** + * Repository + * A git repository + */ +export interface Repository { + /** + * Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit?: boolean; + /** + * Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge?: boolean; + /** + * Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + /** + * Whether the repository is archived. + * @default false + */ + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string | null; + /** + * The default branch of the repository. + * @example "master" + */ + default_branch: string; + /** + * Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** + * Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads: boolean; + /** + * Whether issues are enabled. + * @default true + * @example true + */ + has_issues: boolean; + has_pages: boolean; + /** + * Whether projects are enabled. + * @default true + * @example true + */ + has_projects: boolean; + /** + * Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** + * Unique identifier of the repository + * @example 42 + */ + id: number; + /** + * Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** + * The name of the repository. + * @example "Team Environment" + */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + maintain?: boolean; + pull: boolean; + push: boolean; + triage?: boolean; + }; + /** + * Whether the repository is private or public. + * @default false + */ + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example ""2020-07-09T00:17:42Z"" */ + starred_at?: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: { + allow_merge_commit?: boolean; + allow_rebase_merge?: boolean; + allow_squash_merge?: boolean; + archive_url?: string; + archived?: boolean; + assignees_url?: string; + blobs_url?: string; + branches_url?: string; + clone_url?: string; + collaborators_url?: string; + comments_url?: string; + commits_url?: string; + compare_url?: string; + contents_url?: string; + contributors_url?: string; + created_at?: string; + default_branch?: string; + delete_branch_on_merge?: boolean; + deployments_url?: string; + description?: string; + disabled?: boolean; + downloads_url?: string; + events_url?: string; + fork?: boolean; + forks_count?: number; + forks_url?: string; + full_name?: string; + git_commits_url?: string; + git_refs_url?: string; + git_tags_url?: string; + git_url?: string; + has_downloads?: boolean; + has_issues?: boolean; + has_pages?: boolean; + has_projects?: boolean; + has_wiki?: boolean; + homepage?: string; + hooks_url?: string; + html_url?: string; + id?: number; + is_template?: boolean; + issue_comment_url?: string; + issue_events_url?: string; + issues_url?: string; + keys_url?: string; + labels_url?: string; + language?: string; + languages_url?: string; + merges_url?: string; + milestones_url?: string; + mirror_url?: string; + name?: string; + network_count?: number; + node_id?: string; + notifications_url?: string; + open_issues_count?: number; + owner?: { + avatar_url?: string; + events_url?: string; + followers_url?: string; + following_url?: string; + gists_url?: string; + gravatar_id?: string; + html_url?: string; + id?: number; + login?: string; + node_id?: string; + organizations_url?: string; + received_events_url?: string; + repos_url?: string; + site_admin?: boolean; + starred_url?: string; + subscriptions_url?: string; + type?: string; + url?: string; + }; + permissions?: { + admin?: boolean; + pull?: boolean; + push?: boolean; + }; + private?: boolean; + pulls_url?: string; + pushed_at?: string; + releases_url?: string; + size?: number; + ssh_url?: string; + stargazers_count?: number; + stargazers_url?: string; + statuses_url?: string; + subscribers_count?: number; + subscribers_url?: string; + subscription_url?: string; + svn_url?: string; + tags_url?: string; + teams_url?: string; + temp_clone_token?: string; + topics?: string[]; + trees_url?: string; + updated_at?: string; + url?: string; + visibility?: string; + watchers_count?: number; + } | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @default "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Repository Collaborator Permission + * Repository Collaborator Permission + */ +export interface RepositoryCollaboratorPermission { + permission: string; + user: SimpleUser | null; +} + +/** + * Repository Invitation + * Repository invitations let you manage who you collaborate with. + */ +export interface RepositoryInvitation { + /** + * @format date-time + * @example "2016-06-13T14:52:50-05:00" + */ + created_at: string; + /** Whether or not the invitation has expired */ + expired?: boolean; + /** @example "https://github.com/octocat/Hello-World/invitations" */ + html_url: string; + /** + * Unique identifier of the repository invitation. + * @example 42 + */ + id: number; + invitee: SimpleUser | null; + inviter: SimpleUser | null; + node_id: string; + /** + * The permission associated with the invitation. + * @example "read" + */ + permissions: "read" | "write" | "admin"; + /** Minimal Repository */ + repository: MinimalRepository; + /** + * URL for the repository invitation + * @example "https://api.github.com/user/repository-invitations/1" + */ + url: string; +} + +/** + * Repository Invitation + * Repository invitations let you manage who you collaborate with. + */ +export interface RepositorySubscription { + /** + * @format date-time + * @example "2012-10-06T21:34:12Z" + */ + created_at: string; + /** Determines if all notifications should be blocked from this repository. */ + ignored: boolean; + reason: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example" + */ + repository_url: string; + /** + * Determines if notifications should be received from this repository. + * @example true + */ + subscribed: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/example/subscription" + */ + url: string; +} + +/** + * Legacy Review Comment + * Legacy Review Comment + */ +export interface ReviewComment { + _links: { + /** Hypermedia Link */ + html: Link; + /** Hypermedia Link */ + pull_request: Link; + /** Hypermedia Link */ + self: Link; + }; + /** How the author is associated with the repository. */ + author_association: AuthorAssociation; + /** @example "Great stuff" */ + body: string; + body_html?: string; + body_text?: string; + /** @example "6dcb09b5b57875f334f61aebed695e2e4193db5e" */ + commit_id: string; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + created_at: string; + /** @example "@@ -16,33 +16,40 @@ public class Connection : IConnection..." */ + diff_hunk: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" + */ + html_url: string; + /** @example 10 */ + id: number; + /** @example 8 */ + in_reply_to_id?: number; + /** + * The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** @example "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw" */ + node_id: string; + /** @example "9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840" */ + original_commit_id: string; + /** + * The original line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** @example 4 */ + original_position: number; + /** + * The original first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + /** @example "file1.txt" */ + path: string; + /** @example 1 */ + position: number | null; + /** @example 42 */ + pull_request_review_id: number | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/1" + */ + pull_request_url: string; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + side?: "LEFT" | "RIGHT"; + /** + * The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * The side of the first line of the range for a multi-line comment. + * @default "RIGHT" + */ + start_side?: "LEFT" | "RIGHT" | null; + /** + * @format date-time + * @example "2011-04-14T16:00:49Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1" + */ + url: string; + user: SimpleUser | null; +} + +/** + * Self hosted runners + * A self hosted runner + */ +export interface Runner { + busy: boolean; + /** + * The id of the runner. + * @example 5 + */ + id: number; + labels: { + /** Unique identifier of the label. */ + id?: number; + /** Name of the label. */ + name?: string; + /** The type of label. Read-only labels are applied automatically when the runner is configured. */ + type?: "read-only" | "custom"; + }[]; + /** + * The name of the runner. + * @example "iMac" + */ + name: string; + /** + * The Operating System of the runner. + * @example "macos" + */ + os: string; + /** + * The status of the runner. + * @example "online" + */ + status: string; +} + +/** + * Runner Application + * Runner Application + */ +export interface RunnerApplication { + architecture: string; + download_url: string; + filename: string; + os: string; +} + +export interface RunnerGroupsEnterprise { + allows_public_repositories: boolean; + default: boolean; + id: number; + name: string; + runners_url: string; + selected_organizations_url?: string; + visibility: string; +} + +export interface RunnerGroupsOrg { + allows_public_repositories: boolean; + default: boolean; + id: number; + inherited: boolean; + inherited_allows_public_repositories?: boolean; + name: string; + runners_url: string; + /** Link to the selected repositories resource for this runner group. Not present unless visibility was set to \`selected\` */ + selected_repositories_url?: string; + visibility: string; +} + +export interface ScimEnterpriseGroup { + displayName?: string; + externalId?: string | null; + id: string; + members?: { + $ref?: string; + display?: string; + value?: string; + }[]; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + schemas: string[]; +} + +export interface ScimEnterpriseUser { + active?: boolean; + emails?: { + primary?: boolean; + type?: string; + value?: string; + }[]; + externalId?: string; + groups?: { + value?: string; + }[]; + id: string; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + name?: { + familyName?: string; + givenName?: string; + }; + schemas: string[]; + userName?: string; +} + +/** + * Scim Error + * Scim Error + */ +export interface ScimError { + detail?: string | null; + documentation_url?: string | null; + message?: string | null; + schemas?: string[]; + scimType?: string | null; + status?: number; +} + +export interface ScimGroupListEnterprise { + Resources: { + displayName?: string; + externalId?: string | null; + id: string; + members?: { + $ref?: string; + display?: string; + value?: string; + }[]; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + schemas: string[]; + }[]; + itemsPerPage: number; + schemas: string[]; + startIndex: number; + totalResults: number; +} + +/** + * SCIM /Users + * SCIM /Users provisioning endpoints + */ +export interface ScimUser { + /** + * The active status of the User. + * @example true + */ + active: boolean; + /** + * The name of the user, suitable for display to end-users + * @example "Jon Doe" + */ + displayName?: string | null; + /** + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] + */ + emails: { + primary?: boolean; + value: string; + }[]; + /** + * The ID of the User. + * @example "a7b0f98395" + */ + externalId: string | null; + /** associated groups */ + groups?: { + display?: string; + value?: string; + }[]; + /** + * Unique identifier of an external identity + * @example "1b78eada-9baa-11e6-9eb6-a431576d590e" + */ + id: string; + meta: { + /** + * @format date-time + * @example "2019-01-24T22:45:36.000Z" + */ + created?: string; + /** + * @format date-time + * @example "2019-01-24T22:45:36.000Z" + */ + lastModified?: string; + /** + * @format uri + * @example "https://api.github.com/scim/v2/organizations/myorg-123abc55141bfd8f/Users/c42772b5-2029-11e9-8543-9264a97dec8d" + */ + location?: string; + /** @example "User" */ + resourceType?: string; + }; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string | null; + formatted?: string | null; + givenName: string | null; + }; + /** + * Set of operations to be performed + * @minItems 1 + * @example [{"op":"replace","value":{"active":false}}] + */ + operations?: { + op: "add" | "remove" | "replace"; + path?: string; + value?: string | object | any[]; + }[]; + /** The ID of the organization. */ + organization_id?: number; + /** + * SCIM schema used. + * @minItems 1 + */ + schemas: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string | null; +} + +/** + * SCIM User List + * SCIM User List + */ +export interface ScimUserList { + Resources: ScimUser[]; + /** @example 10 */ + itemsPerPage: number; + /** + * SCIM schema used. + * @minItems 1 + */ + schemas: string[]; + /** @example 1 */ + startIndex: number; + /** @example 3 */ + totalResults: number; +} + +export interface ScimUserListEnterprise { + Resources: { + active?: boolean; + emails?: { + primary?: boolean; + type?: string; + value?: string; + }[]; + externalId?: string; + groups?: { + value?: string; + }[]; + id: string; + meta?: { + created?: string; + lastModified?: string; + location?: string; + resourceType?: string; + }; + name?: { + familyName?: string; + givenName?: string; + }; + schemas: string[]; + userName?: string; + }[]; + itemsPerPage: number; + schemas: string[]; + startIndex: number; + totalResults: number; +} + +/** Scoped Installation */ +export interface ScopedInstallation { + /** Simple User */ + account: SimpleUser; + /** @example true */ + has_multiple_single_files?: boolean; + /** The permissions granted to the user-to-server access token. */ + permissions: AppPermissions; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repositories_url: string; + /** Describe whether all repositories have been selected or there's a selection involved */ + repository_selection: "all" | "selected"; + /** @example "config.yaml" */ + single_file_name: string | null; + /** @example ["config.yml",".github/issue_TEMPLATE.md"] */ + single_file_paths?: string[]; +} + +/** Search Result Text Matches */ +export type SearchResultTextMatches = { + fragment?: string; + matches?: { + indices?: number[]; + text?: string; + }[]; + object_type?: string | null; + object_url?: string; + property?: string; +}[]; + +export interface SecretScanningAlert { + /** The time that the alert was created in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + created_at?: AlertCreatedAt; + /** The GitHub URL of the alert resource. */ + html_url?: AlertHtmlUrl; + /** The security alert number. */ + number?: AlertNumber; + /** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ + resolution?: SecretScanningAlertResolution; + /** + * The time that the alert was resolved in ISO 8601 format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date-time + */ + resolved_at?: string | null; + /** Simple User */ + resolved_by?: SimpleUser; + /** The secret that was detected. */ + secret?: string; + /** The type of secret that secret scanning detected. */ + secret_type?: string; + /** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ + state?: SecretScanningAlertState; + /** The REST API URL of the alert resource. */ + url?: AlertUrl; +} + +/** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ +export type SecretScanningAlertResolution = "false_positive" | "wont_fix" | "revoked" | "used_in_tests" | null; + +/** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ +export enum SecretScanningAlertState { + Open = "open", + Resolved = "resolved", +} + +export interface SelectedActions { + /** Whether GitHub-owned actions are allowed. For example, this includes the actions in the \`actions\` organization. */ + github_owned_allowed: boolean; + /** Specifies a list of string-matching patterns to allow specific action(s). Wildcards, tags, and SHAs are allowed. For example, \`monalisa/octocat@*\`, \`monalisa/octocat@v2\`, \`monalisa/*\`." */ + patterns_allowed: string[]; + /** Whether actions in GitHub Marketplace from verified creators are allowed. Set to \`true\` to allow all GitHub Marketplace actions by verified creators. */ + verified_allowed: boolean; +} + +/** The API URL to use to get or set the actions that are allowed to run, when \`allowed_actions\` is set to \`selected\`. */ +export type SelectedActionsUrl = string; + +/** + * Short Blob + * Short Blob + */ +export interface ShortBlob { + sha: string; + url: string; +} + +/** + * Short Branch + * Short Branch + */ +export interface ShortBranch { + commit: { + sha: string; + /** @format uri */ + url: string; + }; + name: string; + protected: boolean; + /** Branch Protection */ + protection?: BranchProtection; + /** @format uri */ + protection_url?: string; +} + +/** + * Simple Commit + * Simple Commit + */ +export interface SimpleCommit { + author: { + email: string; + name: string; + } | null; + committer: { + email: string; + name: string; + } | null; + id: string; + message: string; + /** @format date-time */ + timestamp: string; + tree_id: string; +} + +/** Simple Commit Status */ +export interface SimpleCommitStatus { + /** @format uri */ + avatar_url: string | null; + context: string; + /** @format date-time */ + created_at: string; + description: string | null; + id: number; + node_id: string; + required?: boolean | null; + state: string; + /** @format uri */ + target_url: string; + /** @format date-time */ + updated_at: string; + /** @format uri */ + url: string; +} + +/** + * Simple User + * Simple User + */ +export type SimpleUser = { + /** + * @format uri + * @example "https://github.com/images/error/octocat_happy.gif" + */ + avatar_url: string; + /** @example "https://api.github.com/users/octocat/events{/privacy}" */ + events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/followers" + */ + followers_url: string; + /** @example "https://api.github.com/users/octocat/following{/other_user}" */ + following_url: string; + /** @example "https://api.github.com/users/octocat/gists{/gist_id}" */ + gists_url: string; + /** @example "41d064eb2195891e12d0413f63227ea7" */ + gravatar_id: string | null; + /** + * @format uri + * @example "https://github.com/octocat" + */ + html_url: string; + /** @example 1 */ + id: number; + /** @example "octocat" */ + login: string; + /** @example "MDQ6VXNlcjE=" */ + node_id: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/orgs" + */ + organizations_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/received_events" + */ + received_events_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/repos" + */ + repos_url: string; + site_admin: boolean; + /** @example ""2020-07-09T00:17:55Z"" */ + starred_at?: string; + /** @example "https://api.github.com/users/octocat/starred{/owner}{/repo}" */ + starred_url: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat/subscriptions" + */ + subscriptions_url: string; + /** @example "User" */ + type: string; + /** + * @format uri + * @example "https://api.github.com/users/octocat" + */ + url: string; +}; + +/** + * Stargazer + * Stargazer + */ +export interface Stargazer { + /** @format date-time */ + starred_at: string; + user: SimpleUser | null; +} + +/** + * Starred Repository + * Starred Repository + */ +export interface StarredRepository { + /** A git repository */ + repo: Repository; + /** @format date-time */ + starred_at: string; +} + +/** + * Status + * The status of a commit. + */ +export interface Status { + avatar_url: string | null; + context: string; + created_at: string; + /** Simple User */ + creator: SimpleUser; + description: string; + id: number; + node_id: string; + state: string; + target_url: string; + updated_at: string; + url: string; +} + +/** + * Status Check Policy + * Status Check Policy + */ +export interface StatusCheckPolicy { + /** @example ["continuous-integration/travis-ci"] */ + contexts: string[]; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks/contexts" + */ + contexts_url: string; + /** @example true */ + strict: boolean; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World/branches/master/protection/required_status_checks" + */ + url: string; +} + +/** + * Tag + * Tag + */ +export interface Tag { + commit: { + sha: string; + /** @format uri */ + url: string; + }; + /** @example "v0.1" */ + name: string; + node_id: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/tarball/v0.1" + */ + tarball_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World/zipball/v0.1" + */ + zipball_url: string; +} + +/** + * Team + * Groups of organization members that gives permissions on specified repositories. + */ +export interface Team { + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + id: number; + members_url: string; + name: string; + node_id: string; + parent?: TeamSimple | null; + permission: string; + privacy?: string; + /** @format uri */ + repositories_url: string; + slug: string; + /** @format uri */ + url: string; +} + +/** + * Team Discussion + * A team discussion is a persistent record of a free-form conversation within a team. + */ +export interface TeamDiscussion { + author: SimpleUser | null; + /** + * The main text of the discussion. + * @example "Please suggest improvements to our workflow in comments." + */ + body: string; + /** @example "

Hi! This is an area for us to collaborate as a team

" */ + body_html: string; + /** + * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. + * @example "0307116bbf7ced493b8d8a346c650b71" + */ + body_version: string; + /** @example 0 */ + comments_count: number; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027/discussions/1/comments" + */ + comments_url: string; + /** + * @format date-time + * @example "2018-01-25T18:56:31Z" + */ + created_at: string; + /** + * @format uri + * @example "https://github.com/orgs/github/teams/justice-league/discussions/1" + */ + html_url: string; + /** @format date-time */ + last_edited_at: string | null; + /** @example "MDE0OlRlYW1EaXNjdXNzaW9uMQ==" */ + node_id: string; + /** + * The unique sequence number of a team discussion. + * @example 42 + */ + number: number; + /** + * Whether or not this discussion should be pinned for easy retrieval. + * @example true + */ + pinned: boolean; + /** + * Whether or not this discussion should be restricted to team members and organization administrators. + * @example true + */ + private: boolean; + reactions?: ReactionRollup; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027" + */ + team_url: string; + /** + * The title of the discussion. + * @example "How can we improve our workflow?" + */ + title: string; + /** + * @format date-time + * @example "2018-01-25T18:56:31Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2343027/discussions/1" + */ + url: string; +} + +/** + * Team Discussion Comment + * A reply to a discussion within a team. + */ +export interface TeamDiscussionComment { + author: SimpleUser | null; + /** + * The main text of the comment. + * @example "I agree with this suggestion." + */ + body: string; + /** @example "

Do you like apples?

" */ + body_html: string; + /** + * The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. + * @example "0307116bbf7ced493b8d8a346c650b71" + */ + body_version: string; + /** + * @format date-time + * @example "2018-01-15T23:53:58Z" + */ + created_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2403582/discussions/1" + */ + discussion_url: string; + /** + * @format uri + * @example "https://github.com/orgs/github/teams/justice-league/discussions/1/comments/1" + */ + html_url: string; + /** @format date-time */ + last_edited_at: string | null; + /** @example "MDIxOlRlYW1EaXNjdXNzaW9uQ29tbWVudDE=" */ + node_id: string; + /** + * The unique sequence number of a team discussion comment. + * @example 42 + */ + number: number; + reactions?: ReactionRollup; + /** + * @format date-time + * @example "2018-01-15T23:53:58Z" + */ + updated_at: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/2403582/discussions/1/comments/1" + */ + url: string; +} + +/** + * Full Team + * Groups of organization members that gives permissions on specified repositories. + */ +export interface TeamFull { + /** + * @format date-time + * @example "2017-07-14T16:53:42Z" + */ + created_at: string; + /** @example "A great team." */ + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + /** + * Unique identifier of the team + * @example 42 + */ + id: number; + /** + * Distinguished Name (DN) that team maps to within LDAP environment + * @example "uid=example,ou=users,dc=github,dc=com" + */ + ldap_dn?: string; + /** @example 3 */ + members_count: number; + /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ + members_url: string; + /** + * Name of the team + * @example "Developers" + */ + name: string; + /** @example "MDQ6VGVhbTE=" */ + node_id: string; + /** Organization Full */ + organization: OrganizationFull; + parent?: TeamSimple | null; + /** + * Permission that the team will have for its repositories + * @example "push" + */ + permission: string; + /** + * The level of privacy this team should have + * @example "closed" + */ + privacy?: "closed" | "secret"; + /** @example 10 */ + repos_count: number; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/1/repos" + */ + repositories_url: string; + /** @example "justice-league" */ + slug: string; + /** + * @format date-time + * @example "2017-08-17T12:37:15Z" + */ + updated_at: string; + /** + * URL for the team + * @format uri + * @example "https://api.github.com/organizations/1/team/1" + */ + url: string; +} + +/** + * Team Membership + * Team Membership + */ +export interface TeamMembership { + /** + * The role of the user in the team. + * @default "member" + * @example "member" + */ + role: "member" | "maintainer"; + state: string; + /** @format uri */ + url: string; +} + +/** + * Team Project + * A team's access to a project. + */ +export interface TeamProject { + body: string | null; + columns_url: string; + created_at: string; + /** Simple User */ + creator: SimpleUser; + html_url: string; + id: number; + name: string; + node_id: string; + number: number; + /** The organization permission for this project. Only present when owner is an organization. */ + organization_permission?: string; + owner_url: string; + permissions: { + admin: boolean; + read: boolean; + write: boolean; + }; + /** Whether the project is private or not. Only present when owner is an organization. */ + private?: boolean; + state: string; + updated_at: string; + url: string; +} + +/** + * Team Repository + * A team's access to a repository. + */ +export interface TeamRepository { + /** + * Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit?: boolean; + /** + * Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge?: boolean; + /** + * Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" */ + archive_url: string; + /** + * Whether the repository is archived. + * @default false + */ + archived: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" */ + assignees_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" */ + blobs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" */ + branches_url: string; + /** @example "https://github.com/octocat/Hello-World.git" */ + clone_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" */ + collaborators_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/comments{/number}" */ + comments_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" */ + commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" */ + compare_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" */ + contents_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/contributors" + */ + contributors_url: string; + /** + * @format date-time + * @example "2011-01-26T19:01:12Z" + */ + created_at: string | null; + /** + * The default branch of the repository. + * @example "master" + */ + default_branch: string; + /** + * Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge?: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/deployments" + */ + deployments_url: string; + /** @example "This your first repo!" */ + description: string | null; + /** Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/downloads" + */ + downloads_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/events" + */ + events_url: string; + fork: boolean; + forks: number; + /** @example 9 */ + forks_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/forks" + */ + forks_url: string; + /** @example "octocat/Hello-World" */ + full_name: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" */ + git_commits_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" */ + git_refs_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" */ + git_tags_url: string; + /** @example "git:github.com/octocat/Hello-World.git" */ + git_url: string; + /** + * Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads: boolean; + /** + * Whether issues are enabled. + * @default true + * @example true + */ + has_issues: boolean; + has_pages: boolean; + /** + * Whether projects are enabled. + * @default true + * @example true + */ + has_projects: boolean; + /** + * Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki: boolean; + /** + * @format uri + * @example "https://github.com" + */ + homepage: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/hooks" + */ + hooks_url: string; + /** + * @format uri + * @example "https://github.com/octocat/Hello-World" + */ + html_url: string; + /** + * Unique identifier of the repository + * @example 42 + */ + id: number; + /** + * Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template?: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" */ + issue_comment_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" */ + issue_events_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/issues{/number}" */ + issues_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" */ + keys_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/labels{/name}" */ + labels_url: string; + language: string | null; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/languages" + */ + languages_url: string; + license: LicenseSimple | null; + master_branch?: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/merges" + */ + merges_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" */ + milestones_url: string; + /** + * @format uri + * @example "git:git.example.com/octocat/Hello-World" + */ + mirror_url: string | null; + /** + * The name of the repository. + * @example "Team Environment" + */ + name: string; + network_count?: number; + /** @example "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" */ + node_id: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" */ + notifications_url: string; + open_issues: number; + /** @example 0 */ + open_issues_count: number; + owner: SimpleUser | null; + permissions?: { + admin: boolean; + maintain?: boolean; + pull: boolean; + push: boolean; + triage?: boolean; + }; + /** + * Whether the repository is private or public. + * @default false + */ + private: boolean; + /** @example "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" */ + pulls_url: string; + /** + * @format date-time + * @example "2011-01-26T19:06:43Z" + */ + pushed_at: string | null; + /** @example "http://api.github.com/repos/octocat/Hello-World/releases{/id}" */ + releases_url: string; + /** @example 108 */ + size: number; + /** @example "git@github.com:octocat/Hello-World.git" */ + ssh_url: string; + /** @example 80 */ + stargazers_count: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/stargazers" + */ + stargazers_url: string; + /** @example "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" */ + statuses_url: string; + subscribers_count?: number; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscribers" + */ + subscribers_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/subscription" + */ + subscription_url: string; + /** + * @format uri + * @example "https://svn.github.com/octocat/Hello-World" + */ + svn_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/tags" + */ + tags_url: string; + /** + * @format uri + * @example "http://api.github.com/repos/octocat/Hello-World/teams" + */ + teams_url: string; + temp_clone_token?: string; + template_repository?: Repository | null; + topics?: string[]; + /** @example "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" */ + trees_url: string; + /** + * @format date-time + * @example "2011-01-26T19:14:43Z" + */ + updated_at: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/octocat/Hello-World" + */ + url: string; + /** + * The repository visibility: public, private, or internal. + * @default "public" + */ + visibility?: string; + watchers: number; + /** @example 80 */ + watchers_count: number; +} + +/** + * Team Simple + * Groups of organization members that gives permissions on specified repositories. + */ +export type TeamSimple = { + /** + * Description of the team + * @example "A great team." + */ + description: string | null; + /** + * @format uri + * @example "https://github.com/orgs/rails/teams/core" + */ + html_url: string; + /** + * Unique identifier of the team + * @example 1 + */ + id: number; + /** + * Distinguished Name (DN) that team maps to within LDAP environment + * @example "uid=example,ou=users,dc=github,dc=com" + */ + ldap_dn?: string; + /** @example "https://api.github.com/organizations/1/team/1/members{/member}" */ + members_url: string; + /** + * Name of the team + * @example "Justice League" + */ + name: string; + /** @example "MDQ6VGVhbTE=" */ + node_id: string; + /** + * Permission that the team will have for its repositories + * @example "admin" + */ + permission: string; + /** + * The level of privacy this team should have + * @example "closed" + */ + privacy?: string; + /** + * @format uri + * @example "https://api.github.com/organizations/1/team/1/repos" + */ + repositories_url: string; + /** @example "justice-league" */ + slug: string; + /** + * URL for the team + * @format uri + * @example "https://api.github.com/organizations/1/team/1" + */ + url: string; +}; + +/** + * Thread + * Thread + */ +export interface Thread { + id: string; + last_read_at: string | null; + reason: string; + /** Minimal Repository */ + repository: MinimalRepository; + subject: { + latest_comment_url: string; + title: string; + type: string; + url: string; + }; + /** @example "https://api.github.com/notifications/threads/2/subscription" */ + subscription_url: string; + unread: boolean; + updated_at: string; + url: string; +} + +/** + * Thread Subscription + * Thread Subscription + */ +export interface ThreadSubscription { + /** + * @format date-time + * @example "2012-10-06T21:34:12Z" + */ + created_at: string | null; + ignored: boolean; + reason: string | null; + /** + * @format uri + * @example "https://api.github.com/repos/1" + */ + repository_url?: string; + /** @example true */ + subscribed: boolean; + /** + * @format uri + * @example "https://api.github.com/notifications/threads/1" + */ + thread_url?: string; + /** + * @format uri + * @example "https://api.github.com/notifications/threads/1/subscription" + */ + url: string; +} + +/** + * Topic + * A topic aggregates entities that are related to a subject. + */ +export interface Topic { + names: string[]; +} + +/** + * Topic Search Result Item + * Topic Search Result Item + */ +export interface TopicSearchResultItem { + aliases?: + | { + topic_relation?: { + id?: number; + name?: string; + relation_type?: string; + topic_id?: number; + }; + }[] + | null; + /** @format date-time */ + created_at: string; + created_by: string | null; + curated: boolean; + description: string | null; + display_name: string | null; + featured: boolean; + /** @format uri */ + logo_url?: string | null; + name: string; + related?: + | { + topic_relation?: { + id?: number; + name?: string; + relation_type?: string; + topic_id?: number; + }; + }[] + | null; + released: string | null; + repository_count?: number | null; + score: number; + short_description: string | null; + text_matches?: SearchResultTextMatches; + /** @format date-time */ + updated_at: string; +} + +/** Traffic */ +export interface Traffic { + count: number; + /** @format date-time */ + timestamp: string; + uniques: number; +} + +/** + * User Marketplace Purchase + * User Marketplace Purchase + */ +export interface UserMarketplacePurchase { + account: MarketplaceAccount; + /** @example "monthly" */ + billing_cycle: string; + /** + * @format date-time + * @example "2017-11-11T00:00:00Z" + */ + free_trial_ends_on: string | null; + /** + * @format date-time + * @example "2017-11-11T00:00:00Z" + */ + next_billing_date: string | null; + /** @example true */ + on_free_trial: boolean; + /** Marketplace Listing Plan */ + plan: MarketplaceListingPlan; + unit_count: number | null; + /** + * @format date-time + * @example "2017-11-02T01:12:12Z" + */ + updated_at: string | null; +} + +/** + * User Search Result Item + * User Search Result Item + */ +export interface UserSearchResultItem { + /** @format uri */ + avatar_url: string; + bio?: string | null; + blog?: string | null; + company?: string | null; + /** @format date-time */ + created_at?: string; + /** @format email */ + email?: string | null; + events_url: string; + followers?: number; + /** @format uri */ + followers_url: string; + following?: number; + following_url: string; + gists_url: string; + gravatar_id: string | null; + hireable?: boolean | null; + /** @format uri */ + html_url: string; + id: number; + location?: string | null; + login: string; + name?: string | null; + node_id: string; + /** @format uri */ + organizations_url: string; + public_gists?: number; + public_repos?: number; + /** @format uri */ + received_events_url: string; + /** @format uri */ + repos_url: string; + score: number; + site_admin: boolean; + starred_url: string; + /** @format uri */ + subscriptions_url: string; + /** @format date-time */ + suspended_at?: string | null; + text_matches?: SearchResultTextMatches; + type: string; + /** @format date-time */ + updated_at?: string; + /** @format uri */ + url: string; +} + +/** + * Validation Error + * Validation Error + */ +export interface ValidationError { + documentation_url: string; + errors?: { + code: string; + field?: string; + index?: number; + message?: string; + resource?: string; + value?: string | null | number | null | string[] | null; + }[]; + message: string; +} + +/** + * Validation Error Simple + * Validation Error Simple + */ +export interface ValidationErrorSimple { + documentation_url: string; + errors?: string[]; + message: string; +} + +/** Verification */ +export interface Verification { + payload: string | null; + reason: string; + signature: string | null; + verified: boolean; +} + +/** + * View Traffic + * View Traffic + */ +export interface ViewTraffic { + /** @example 14850 */ + count: number; + /** @example 3782 */ + uniques: number; + views: Traffic[]; +} + +/** + * Webhook Configuration + * Configuration object of the webhook + */ +export interface WebhookConfig { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; +} + +/** + * The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. + * @example ""json"" + */ +export type WebhookConfigContentType = string; + +/** + * Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** + * @example ""0"" + */ +export type WebhookConfigInsecureSsl = string; + +/** + * If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). + * @example ""********"" + */ +export type WebhookConfigSecret = string; + +/** + * The URL to which the payloads will be delivered. + * @format uri + * @example "https://example.com/webhook" + */ +export type WebhookConfigUrl = string; + +/** + * Workflow + * A GitHub Actions workflow + */ +export interface Workflow { + /** @example "https://github.com/actions/setup-ruby/workflows/CI/badge.svg" */ + badge_url: string; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + created_at: string; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + deleted_at?: string; + /** @example "https://github.com/actions/setup-ruby/blob/master/.github/workflows/ruby.yaml" */ + html_url: string; + /** @example 5 */ + id: number; + /** @example "CI" */ + name: string; + /** @example "MDg6V29ya2Zsb3cxMg==" */ + node_id: string; + /** @example "ruby.yaml" */ + path: string; + /** @example "active" */ + state: "active" | "deleted"; + /** + * @format date-time + * @example "2019-12-06T14:20:20.000Z" + */ + updated_at: string; + /** @example "https://api.github.com/repos/actions/setup-ruby/workflows/5" */ + url: string; +} + +/** + * Workflow Run + * An invocation of a workflow + */ +export interface WorkflowRun { + /** + * The URL to the artifacts for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun/artifacts" + */ + artifacts_url: string; + /** + * The URL to cancel the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/cancel" + */ + cancel_url: string; + /** + * The URL to the associated check suite. + * @example "https://api.github.com/repos/github/hello-world/check-suites/12" + */ + check_suite_url: string; + /** @example "neutral" */ + conclusion: string | null; + /** @format date-time */ + created_at: string; + /** @example "push" */ + event: string; + /** @example "master" */ + head_branch: string | null; + /** Simple Commit */ + head_commit: SimpleCommit; + /** Minimal Repository */ + head_repository: MinimalRepository; + /** @example 5 */ + head_repository_id?: number; + /** + * The SHA of the head commit that points to the version of the worflow being run. + * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + */ + head_sha: string; + /** @example "https://github.com/github/hello-world/suites/4" */ + html_url: string; + /** + * The ID of the workflow run. + * @example 5 + */ + id: number; + /** + * The URL to the jobs for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/jobs" + */ + jobs_url: string; + /** + * The URL to download the logs for the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/logs" + */ + logs_url: string; + /** + * The name of the workflow run. + * @example "Build" + */ + name?: string; + /** @example "MDEwOkNoZWNrU3VpdGU1" */ + node_id: string; + pull_requests: PullRequestMinimal[] | null; + /** Minimal Repository */ + repository: MinimalRepository; + /** + * The URL to rerun the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun" + */ + rerun_url: string; + /** + * The auto incrementing run number for the workflow run. + * @example 106 + */ + run_number: number; + /** @example "completed" */ + status: string | null; + /** @format date-time */ + updated_at: string; + /** + * The URL to the workflow run. + * @example "https://api.github.com/repos/github/hello-world/actions/runs/5" + */ + url: string; + /** + * The ID of the parent workflow. + * @example 5 + */ + workflow_id: number; + /** + * The URL to the workflow. + * @example "https://api.github.com/repos/github/hello-world/actions/workflows/main.yaml" + */ + workflow_url: string; +} + +/** + * Workflow Run Usage + * Workflow Run Usage + */ +export interface WorkflowRunUsage { + billable: { + MACOS?: { + jobs: number; + total_ms: number; + }; + UBUNTU?: { + jobs: number; + total_ms: number; + }; + WINDOWS?: { + jobs: number; + total_ms: number; + }; + }; + run_duration_ms: number; +} + +/** + * Workflow Usage + * Workflow Usage + */ +export interface WorkflowUsage { + billable: { + MACOS?: { + total_ms?: number; + }; + UBUNTU?: { + total_ms?: number; + }; + WINDOWS?: { + total_ms?: number; + }; + }; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.github.com"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title GitHub v3 REST API + * @version 1.1.4 + * @license MIT (https://spdx.org/licenses/MIT) + * @termsOfService https://docs.github.com/articles/github-terms-of-service + * @baseUrl https://api.github.com + * @externalDocs https://docs.github.com/rest/ + * @contact Support (https://support.github.com/contact) + * + * GitHub's v3 REST API. + */ +export class Api extends HttpClient { + /** + * @description Get Hypermedia links to resources accessible in GitHub's REST API + * + * @tags meta + * @name MetaRoot + * @summary GitHub API Root + * @request GET:/ + */ + metaRoot = (params: RequestParams = {}) => + this.request< + { + /** @format uri */ + authorizations_url: string; + /** @format uri */ + code_search_url: string; + /** @format uri */ + commit_search_url: string; + /** @format uri */ + current_user_authorizations_html_url: string; + /** @format uri */ + current_user_repositories_url: string; + /** @format uri */ + current_user_url: string; + /** @format uri */ + emails_url: string; + /** @format uri */ + emojis_url: string; + /** @format uri */ + events_url: string; + /** @format uri */ + feeds_url: string; + /** @format uri */ + followers_url: string; + /** @format uri */ + following_url: string; + /** @format uri */ + gists_url: string; + /** @format uri */ + hub_url: string; + /** @format uri */ + issue_search_url: string; + /** @format uri */ + issues_url: string; + /** @format uri */ + keys_url: string; + /** @format uri */ + label_search_url: string; + /** @format uri */ + notifications_url: string; + /** @format uri */ + organization_repositories_url: string; + /** @format uri */ + organization_teams_url: string; + /** @format uri */ + organization_url: string; + /** @format uri */ + public_gists_url: string; + /** @format uri */ + rate_limit_url: string; + /** @format uri */ + repository_search_url: string; + /** @format uri */ + repository_url: string; + /** @format uri */ + starred_gists_url: string; + /** @format uri */ + starred_url: string; + /** @format uri */ + topic_search_url?: string; + /** @format uri */ + user_organizations_url: string; + /** @format uri */ + user_repositories_url: string; + /** @format uri */ + user_search_url: string; + /** @format uri */ + user_url: string; + }, + any + >({ + path: \`/\`, + method: "GET", + format: "json", + ...params, + }); + + app = { + /** + * @description Returns the GitHub App associated with the authentication credentials used. To see how many app installations are associated with this GitHub App, see the \`installations_count\` in the response. For more details about your app's installations, see the "[List installations for the authenticated app](https://docs.github.com/rest/reference/apps#list-installations-for-the-authenticated-app)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetAuthenticated + * @summary Get the authenticated app + * @request GET:/app + */ + appsGetAuthenticated: (params: RequestParams = {}) => + this.request({ + path: \`/app\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Returns the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetWebhookConfigForApp + * @summary Get a webhook configuration for an app + * @request GET:/app/hook/config + */ + appsGetWebhookConfigForApp: (params: RequestParams = {}) => + this.request({ + path: \`/app/hook/config\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Updates the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsUpdateWebhookConfigForApp + * @summary Update a webhook configuration for an app + * @request PATCH:/app/hook/config + */ + appsUpdateWebhookConfigForApp: ( + data: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/app/hook/config\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. The permissions the installation has are included under the \`permissions\` key. + * + * @tags apps + * @name AppsListInstallations + * @summary List installations for the authenticated app + * @request GET:/app/installations + */ + appsListInstallations: ( + query?: { + outdated?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/app/installations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find an installation's information using the installation id. The installation's account type (\`target_type\`) will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetInstallation + * @summary Get an installation for the authenticated app + * @request GET:/app/installations/{installation_id} + */ + appsGetInstallation: (installationId: number, params: RequestParams = {}) => + this.request< + Installation, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/app/installations/\${installationId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Uninstalls a GitHub App on a user, organization, or business account. If you prefer to temporarily suspend an app's access to your account's resources, then we recommend the "[Suspend an app installation](https://docs.github.com/v3/apps/#suspend-an-app-installation)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsDeleteInstallation + * @summary Delete an installation for the authenticated app + * @request DELETE:/app/installations/{installation_id} + */ + appsDeleteInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Creates an installation access token that enables a GitHub App to make authenticated API requests for the app's installation on an organization or individual account. Installation tokens expire one hour from the time you create them. Using an expired token produces a status code of \`401 - Unauthorized\`, and requires creating a new installation token. By default the installation token has access to all repositories that the installation can access. To restrict the access to specific repositories, you can provide the \`repository_ids\` when creating the token. When you omit \`repository_ids\`, the response does not contain the \`repositories\` key. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsCreateInstallationAccessToken + * @summary Create an installation access token for an app + * @request POST:/app/installations/{installation_id}/access_tokens + */ + appsCreateInstallationAccessToken: ( + installationId: number, + data: { + /** The permissions granted to the user-to-server access token. */ + permissions?: AppPermissions; + /** List of repository names that the token should have access to */ + repositories?: string[]; + /** + * List of repository IDs that the token should have access to + * @example [1] + */ + repository_ids?: number[]; + }, + params: RequestParams = {}, + ) => + this.request< + InstallationToken, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/app/installations/\${installationId}/access_tokens\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsSuspendInstallation + * @summary Suspend an app installation + * @request PUT:/app/installations/{installation_id}/suspended + */ + appsSuspendInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}/suspended\`, + method: "PUT", + ...params, + }), + + /** + * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Removes a GitHub App installation suspension. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsUnsuspendInstallation + * @summary Unsuspend an app installation + * @request DELETE:/app/installations/{installation_id}/suspended + */ + appsUnsuspendInstallation: (installationId: number, params: RequestParams = {}) => + this.request({ + path: \`/app/installations/\${installationId}/suspended\`, + method: "DELETE", + ...params, + }), + }; + appManifests = { + /** + * @description Use this endpoint to complete the handshake necessary when implementing the [GitHub App Manifest flow](https://docs.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/). When you create a GitHub App with the manifest flow, you receive a temporary \`code\` used to retrieve the GitHub App's \`id\`, \`pem\` (private key), and \`webhook_secret\`. + * + * @tags apps + * @name AppsCreateFromManifest + * @summary Create a GitHub App from a manifest + * @request POST:/app-manifests/{code}/conversions + */ + appsCreateFromManifest: (code: string, params: RequestParams = {}) => + this.request< + Integration & { + client_id: string; + client_secret: string; + pem: string; + webhook_secret: string; + [key: string]: any; + }, + BasicError | ValidationErrorSimple + >({ + path: \`/app-manifests/\${code}/conversions\`, + method: "POST", + format: "json", + ...params, + }), + }; + applications = { + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the [list your authorizations](https://docs.github.com/rest/reference/oauth-authorizations#list-your-authorizations) API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). The \`scopes\` returned are the union of scopes authorized for the application. For example, if an application has one token with \`repo\` scope and another token with \`user\` scope, the grant will return \`["repo", "user"]\`. + * + * @tags oauth-authorizations + * @name OauthAuthorizationsListGrants + * @summary List your grants + * @request GET:/applications/grants + * @deprecated + */ + oauthAuthorizationsListGrants: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/grants\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetGrant + * @summary Get a single grant + * @request GET:/applications/grants/{grant_id} + * @deprecated + */ + oauthAuthorizationsGetGrant: (grantId: number, params: RequestParams = {}) => + this.request({ + path: \`/applications/grants/\${grantId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteGrant + * @summary Delete a grant + * @request DELETE:/applications/grants/{grant_id} + * @deprecated + */ + oauthAuthorizationsDeleteGrant: (grantId: number, params: RequestParams = {}) => + this.request({ + path: \`/applications/grants/\${grantId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid OAuth \`access_token\` as an input parameter and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * + * @tags apps + * @name AppsDeleteAuthorization + * @summary Delete an app authorization + * @request DELETE:/applications/{client_id}/grant + */ + appsDeleteAuthorization: ( + clientId: string, + data: { + /** The OAuth access token used to authenticate to the GitHub API. */ + access_token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/\${clientId}/grant\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. You must also provide a valid token as \`:access_token\` and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized). + * + * @tags apps + * @name AppsRevokeGrantForApplication + * @summary Revoke a grant for an application + * @request DELETE:/applications/{client_id}/grants/{access_token} + * @deprecated + */ + appsRevokeGrantForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/grants/\${accessToken}\`, + method: "DELETE", + ...params, + }), + + /** + * @description OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) to use this endpoint, where the username is the OAuth application \`client_id\` and the password is its \`client_secret\`. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsCheckToken + * @summary Check a token + * @request POST:/applications/{client_id}/token + */ + appsCheckToken: ( + clientId: string, + data: { + /** The access_token of the OAuth application. */ + access_token: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsResetToken + * @summary Reset a token + * @request PATCH:/applications/{client_id}/token + */ + appsResetToken: ( + clientId: string, + data: { + /** The access_token of the OAuth application. */ + access_token: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * + * @tags apps + * @name AppsDeleteToken + * @summary Delete an app token + * @request DELETE:/applications/{client_id}/token + */ + appsDeleteToken: ( + clientId: string, + data: { + /** The OAuth access token used to authenticate to the GitHub API. */ + access_token?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/\${clientId}/token\`, + method: "DELETE", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Exchanges a non-repository scoped user-to-server OAuth access token for a repository scoped user-to-server OAuth access token. You can specify which repositories the token can access and which permissions are granted to the token. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsScopeToken + * @summary Create a scoped access token + * @request POST:/applications/{client_id}/token/scoped + */ + appsScopeToken: ( + clientId: string, + data: { + /** + * **Required.** The OAuth access token used to authenticate to the GitHub API. + * @example "e72e16c7e42f292c6912e7710c838347ae178b4a" + */ + access_token?: string; + /** The permissions granted to the user-to-server access token. */ + permissions?: AppPermissions; + /** The list of repository IDs to scope the user-to-server access token to. \`repositories\` may not be specified if \`repository_ids\` is specified. */ + repositories?: string[]; + /** + * The list of repository names to scope the user-to-server access token to. \`repository_ids\` may not be specified if \`repositories\` is specified. + * @example [1] + */ + repository_ids?: number[]; + /** + * The name of the user or organization to scope the user-to-server access token to. **Required** unless \`target_id\` is specified. + * @example "octocat" + */ + target?: string; + /** + * The ID of the user or organization to scope the user-to-server access token to. **Required** unless \`target\` is specified. + * @example 1 + */ + target_id?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/applications/\${clientId}/token/scoped\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsCheckAuthorization + * @summary Check an authorization + * @request GET:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsCheckAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. Invalid tokens will return \`404 NOT FOUND\`. + * + * @tags apps + * @name AppsResetAuthorization + * @summary Reset an authorization + * @request POST:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsResetAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain \`access_token\` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving \`access_token\` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's \`client_id\` and \`client_secret\` as the username and password. + * + * @tags apps + * @name AppsRevokeAuthorizationForApplication + * @summary Revoke an authorization for an application + * @request DELETE:/applications/{client_id}/tokens/{access_token} + * @deprecated + */ + appsRevokeAuthorizationForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => + this.request({ + path: \`/applications/\${clientId}/tokens/\${accessToken}\`, + method: "DELETE", + ...params, + }), + }; + apps = { + /** + * @description **Note**: The \`:app_slug\` is just the URL-friendly name of your GitHub App. You can find this on the settings page for your GitHub App (e.g., \`https://github.com/settings/apps/:app_slug\`). If the GitHub App you specify is public, you can access this endpoint without authenticating. If the GitHub App you specify is private, you must authenticate with a [personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsGetBySlug + * @summary Get an app + * @request GET:/apps/{app_slug} + */ + appsGetBySlug: (appSlug: string, params: RequestParams = {}) => + this.request< + Integration, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/apps/\${appSlug}\`, + method: "GET", + format: "json", + ...params, + }), + }; + authorizations = { + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsListAuthorizations + * @summary List your authorizations + * @request GET:/authorizations + * @deprecated + */ + oauthAuthorizationsListAuthorizations: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates OAuth tokens using [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use \`fingerprint\` to differentiate between them. You can also create tokens on GitHub from the [personal access tokens settings](https://github.com/settings/tokens) page. Read more about these tokens in [the GitHub Help documentation](https://help.github.com/articles/creating-an-access-token-for-command-line-use). Organizations that enforce SAML SSO require personal access tokens to be allowed. Read more about allowing tokens in [the GitHub Help documentation](https://help.github.com/articles/about-identity-and-access-management-with-saml-single-sign-on). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsCreateAuthorization + * @summary Create a new authorization + * @request POST:/authorizations + * @deprecated + */ + oauthAuthorizationsCreateAuthorization: ( + data: { + /** + * The OAuth app client key for which to create the token. + * @maxLength 20 + */ + client_id?: string; + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret?: string; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForApp + * @summary Get-or-create an authorization for a specific app + * @request PUT:/authorizations/clients/{client_id} + * @deprecated + */ + oauthAuthorizationsGetOrCreateAuthorizationForApp: ( + clientId: string, + data: { + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret: string; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/clients/\${clientId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. \`fingerprint\` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint + * @summary Get-or-create an authorization for a specific app and fingerprint + * @request PUT:/authorizations/clients/{client_id}/{fingerprint} + * @deprecated + */ + oauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint: ( + clientId: string, + fingerprint: string, + data: { + /** + * The OAuth app client secret for which to create the token. + * @maxLength 40 + */ + client_secret: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/clients/\${clientId}/\${fingerprint}\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsGetAuthorization + * @summary Get a single authorization + * @request GET:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsGetAuthorization: (authorizationId: number, params: RequestParams = {}) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." You can only send one of these scope keys at a time. + * + * @tags oauth-authorizations + * @name OauthAuthorizationsUpdateAuthorization + * @summary Update an existing authorization + * @request PATCH:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsUpdateAuthorization: ( + authorizationId: number, + data: { + /** A list of scopes to add to this authorization. */ + add_scopes?: string[]; + /** A unique string to distinguish an authorization from others created for the same client ID and user. */ + fingerprint?: string; + /** + * A note to remind you what the OAuth token is for. + * @example "Update all gems" + */ + note?: string; + /** A URL to remind you what app the OAuth token is for. */ + note_url?: string; + /** A list of scopes to remove from this authorization. */ + remove_scopes?: string[]; + /** + * A list of scopes that this authorization is in. + * @example ["public_repo","user"] + */ + scopes?: string[] | null; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * + * @tags oauth-authorizations + * @name OauthAuthorizationsDeleteAuthorization + * @summary Delete an authorization + * @request DELETE:/authorizations/{authorization_id} + * @deprecated + */ + oauthAuthorizationsDeleteAuthorization: (authorizationId: number, params: RequestParams = {}) => + this.request({ + path: \`/authorizations/\${authorizationId}\`, + method: "DELETE", + ...params, + }), + }; + codesOfConduct = { + /** + * No description + * + * @tags codes-of-conduct + * @name CodesOfConductGetAllCodesOfConduct + * @summary Get all codes of conduct + * @request GET:/codes_of_conduct + */ + codesOfConductGetAllCodesOfConduct: (params: RequestParams = {}) => + this.request< + CodeOfConduct[], + { + documentation_url: string; + message: string; + } + >({ + path: \`/codes_of_conduct\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags codes-of-conduct + * @name CodesOfConductGetConductCode + * @summary Get a code of conduct + * @request GET:/codes_of_conduct/{key} + */ + codesOfConductGetConductCode: (key: string, params: RequestParams = {}) => + this.request< + CodeOfConduct, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/codes_of_conduct/\${key}\`, + method: "GET", + format: "json", + ...params, + }), + }; + contentReferences = { + /** + * @description Creates an attachment under a content reference URL in the body or comment of an issue or pull request. Use the \`id\` of the content reference from the [\`content_reference\` event](https://docs.github.com/webhooks/event-payloads/#content_reference) to create an attachment. The app must create a content attachment within six hours of the content reference URL being posted. See "[Using content attachments](https://docs.github.com/apps/using-content-attachments/)" for details about content attachments. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsCreateContentAttachment + * @summary Create a content attachment + * @request POST:/content_references/{content_reference_id}/attachments + */ + appsCreateContentAttachment: ( + contentReferenceId: number, + data: { + /** + * The body of the attachment + * @maxLength 262144 + * @example "Body of the attachment" + */ + body: string; + /** + * The title of the attachment + * @maxLength 1024 + * @example "Title of the attachment" + */ + title: string; + }, + params: RequestParams = {}, + ) => + this.request< + ContentReferenceAttachment, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/content_references/\${contentReferenceId}/attachments\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + }; + emojis = { + /** + * @description Lists all the emojis available to use on GitHub. + * + * @tags emojis + * @name EmojisGet + * @summary Get emojis + * @request GET:/emojis + */ + emojisGet: (params: RequestParams = {}) => + this.request, any>({ + path: \`/emojis\`, + method: "GET", + format: "json", + ...params, + }), + }; + enterprises = { + /** + * @description Gets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetGithubActionsPermissionsEnterprise + * @summary Get GitHub Actions permissions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions + */ + enterpriseAdminGetGithubActionsPermissionsEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Sets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetGithubActionsPermissionsEnterprise + * @summary Set GitHub Actions permissions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions + */ + enterpriseAdminSetGithubActionsPermissionsEnterprise: ( + enterprise: string, + data: { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_organizations: EnabledOrganizations; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists the organizations that are selected to have GitHub Actions enabled in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary List selected organizations enabled for GitHub Actions in an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/organizations + */ + enterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise: ( + enterprise: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + organizations: OrganizationSimple[]; + total_count: number; + }, + any + >({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Replaces the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise + * @summary Set selected organizations enabled for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations + */ + enterpriseAdminSetSelectedOrganizationsEnabledGithubActionsEnterprise: ( + enterprise: string, + data: { + /** List of organization IDs to enable for GitHub Actions. */ + selected_organization_ids: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds an organization to the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise + * @summary Enable a selected organization for GitHub Actions in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + enterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise: ( + enterprise: string, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations/\${orgId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removes an organization from the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for \`enabled_organizations\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise + * @summary Disable a selected organization for GitHub Actions in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + */ + enterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise: ( + enterprise: string, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/organizations/\${orgId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Gets the selected actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetAllowedActionsEnterprise + * @summary Get allowed actions for an enterprise + * @request GET:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + enterpriseAdminGetAllowedActionsEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/selected-actions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Sets the actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetAllowedActionsEnterprise + * @summary Set allowed actions for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/permissions/selected-actions + */ + enterpriseAdminSetAllowedActionsEnterprise: ( + enterprise: string, + data: SelectedActions, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/permissions/selected-actions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists all self-hosted runner groups for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnerGroupsForEnterprise + * @summary List self-hosted runner groups for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups + */ + enterpriseAdminListSelfHostedRunnerGroupsForEnterprise: ( + enterprise: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runner_groups: RunnerGroupsEnterprise[]; + total_count: number; + }, + any + >({ + path: \`/enterprises/\${enterprise}/actions/runner-groups\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Creates a new self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateSelfHostedRunnerGroupForEnterprise + * @summary Create a self-hosted runner group for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runner-groups + */ + enterpriseAdminCreateSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + data: { + /** Name of the runner group. */ + name: string; + /** List of runner IDs to add to the runner group. */ + runners?: number[]; + /** List of organization IDs that can access the runner group. */ + selected_organization_ids?: number[]; + /** Visibility of a runner group. You can select all organizations or select individual organization. Can be one of: \`all\` or \`selected\` */ + visibility?: "selected" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerGroupForEnterprise + * @summary Get a self-hosted runner group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminGetSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Updates the \`name\` and \`visibility\` of a self-hosted runner group in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise + * @summary Update a self-hosted runner group for an enterprise + * @request PATCH:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: { + /** Name of the runner group. */ + name?: string; + /** + * Visibility of a runner group. You can select all organizations or select individual organizations. Can be one of: \`all\` or \`selected\` + * @default "all" + */ + visibility?: "selected" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Deletes a self-hosted runner group for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise + * @summary Delete a self-hosted runner group from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + */ + enterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise: ( + enterprise: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists the organizations with access to a self-hosted runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary List organization access to a self-hosted runner group in an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + enterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + organizations: OrganizationSimple[]; + total_count: number; + }, + any + >({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Replaces the list of organizations that have access to a self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Set organization access for a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + */ + enterpriseAdminSetOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: { + /** List of organization IDs that can access the runner group. */ + selected_organization_ids: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds an organization to the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Add organization access to a self-hosted runner group in an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + enterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations/\${orgId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removes an organization from the list of selected organizations that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise + * @summary Remove organization access to a self-hosted runner group in an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + */ + enterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise: ( + enterprise: string, + runnerGroupId: number, + orgId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/organizations/\${orgId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists the self-hosted runners that are in a specific enterprise group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersInGroupForEnterprise + * @summary List self-hosted runners in a group for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + enterpriseAdminListSelfHostedRunnersInGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runners: Runner[]; + total_count: number; + }, + any + >({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Replaces the list of self-hosted runners that are part of an enterprise runner group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminSetSelfHostedRunnersInGroupForEnterprise + * @summary Set self-hosted runners in a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + */ + enterpriseAdminSetSelfHostedRunnersInGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + data: { + /** List of runner IDs to add to the runner group. */ + runners: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds a self-hosted runner to a runner group configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminAddSelfHostedRunnerToGroupForEnterprise + * @summary Add a self-hosted runner to a group for an enterprise + * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + enterpriseAdminAddSelfHostedRunnerToGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removes a self-hosted runner from a group configured in an enterprise. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise + * @summary Remove a self-hosted runner from a group for an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + enterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise: ( + enterprise: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists all self-hosted runners configured for an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListSelfHostedRunnersForEnterprise + * @summary List self-hosted runners for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners + */ + enterpriseAdminListSelfHostedRunnersForEnterprise: ( + enterprise: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runners?: Runner[]; + total_count?: number; + }, + any + >({ + path: \`/enterprises/\${enterprise}/actions/runners\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminListRunnerApplicationsForEnterprise + * @summary List runner applications for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/downloads + */ + enterpriseAdminListRunnerApplicationsForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/downloads\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/enterprises/octo-enterprise --token TOKEN \`\`\` + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateRegistrationTokenForEnterprise + * @summary Create a registration token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/registration-token + */ + enterpriseAdminCreateRegistrationTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/registration-token\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an enterprise. The token expires after one hour. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an enterprise, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * + * @tags enterprise-admin + * @name EnterpriseAdminCreateRemoveTokenForEnterprise + * @summary Create a remove token for an enterprise + * @request POST:/enterprises/{enterprise}/actions/runners/remove-token + */ + enterpriseAdminCreateRemoveTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/remove-token\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner configured in an enterprise. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminGetSelfHostedRunnerForEnterprise + * @summary Get a self-hosted runner for an enterprise + * @request GET:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + enterpriseAdminGetSelfHostedRunnerForEnterprise: ( + enterprise: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/\${runnerId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Forces the removal of a self-hosted runner from an enterprise. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:enterprise\` scope to use this endpoint. + * + * @tags enterprise-admin + * @name EnterpriseAdminDeleteSelfHostedRunnerFromEnterprise + * @summary Delete a self-hosted runner from an enterprise + * @request DELETE:/enterprises/{enterprise}/actions/runners/{runner_id} + */ + enterpriseAdminDeleteSelfHostedRunnerFromEnterprise: ( + enterprise: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/actions/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an enterprise. To use this endpoint, you must be an enterprise admin, and you must use an access token with the \`admin:enterprise\` scope. + * + * @tags audit-log + * @name AuditLogGetAuditLog + * @summary Get the audit log for an enterprise + * @request GET:/enterprises/{enterprise}/audit-log + */ + auditLogGetAuditLog: ( + enterprise: string, + query?: { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: "web" | "git" | "all"; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: "desc" | "asc"; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/enterprises/\${enterprise}/audit-log\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetGithubActionsBillingGhe + * @summary Get GitHub Actions billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/actions + */ + billingGetGithubActionsBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/actions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetGithubPackagesBillingGhe + * @summary Get GitHub Packages billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/packages + */ + billingGetGithubPackagesBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/packages\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * + * @tags billing + * @name BillingGetSharedStorageBillingGhe + * @summary Get shared storage billing for an enterprise + * @request GET:/enterprises/{enterprise}/settings/billing/shared-storage + */ + billingGetSharedStorageBillingGhe: (enterprise: string, params: RequestParams = {}) => + this.request({ + path: \`/enterprises/\${enterprise}/settings/billing/shared-storage\`, + method: "GET", + format: "json", + ...params, + }), + }; + events = { + /** + * @description We delay the public events feed by five minutes, which means the most recent event returned by the public events API actually occurred at least five minutes ago. + * + * @tags activity + * @name ActivityListPublicEvents + * @summary List public events + * @request GET:/events + */ + activityListPublicEvents: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + Event[], + | BasicError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/events\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + feeds = { + /** + * @description GitHub provides several timeline resources in [Atom](http://en.wikipedia.org/wiki/Atom_(standard)) format. The Feeds API lists all the feeds available to the authenticated user: * **Timeline**: The GitHub global public timeline * **User**: The public timeline for any user, using [URI template](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) * **Current user public**: The public timeline for the authenticated user * **Current user**: The private timeline for the authenticated user * **Current user actor**: The private timeline for activity created by the authenticated user * **Current user organizations**: The private timeline for the organizations the authenticated user is a member of. * **Security advisories**: A collection of public announcements that provide information about security-related vulnerabilities in software on GitHub. **Note**: Private feeds are only returned when [authenticating via Basic Auth](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) since current feed URIs use the older, non revocable auth tokens. + * + * @tags activity + * @name ActivityGetFeeds + * @summary Get feeds + * @request GET:/feeds + */ + activityGetFeeds: (params: RequestParams = {}) => + this.request({ + path: \`/feeds\`, + method: "GET", + format: "json", + ...params, + }), + }; + gists = { + /** + * @description Lists the authenticated user's gists or if called anonymously, this endpoint returns all public gists: + * + * @tags gists + * @name GistsList + * @summary List gists for the authenticated user + * @request GET:/gists + */ + gistsList: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Allows you to add a new gist with one or more files. **Note:** Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally. + * + * @tags gists + * @name GistsCreate + * @summary Create a gist + * @request POST:/gists + */ + gistsCreate: ( + data: { + /** + * Description of the gist + * @example "Example Ruby script" + */ + description?: string; + /** + * Names and content for the files that make up the gist + * @example {"hello.rb":{"content":"puts \\"Hello, World!\\""}} + */ + files: Record< + string, + { + /** Content of the file */ + content: string; + } + >; + /** Flag indicating whether the gist is public */ + public?: boolean | "true" | "false"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description List public gists sorted by most recently updated to least recently updated. Note: With [pagination](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination), you can fetch up to 3000 gists. For example, you can fetch 100 pages with 30 gists per page or 30 pages with 100 gists per page. + * + * @tags gists + * @name GistsListPublic + * @summary List public gists + * @request GET:/gists/public + */ + gistsListPublic: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/public\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description List the authenticated user's starred gists: + * + * @tags gists + * @name GistsListStarred + * @summary List starred gists + * @request GET:/gists/starred + */ + gistsListStarred: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/starred\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGet + * @summary Get a gist + * @request GET:/gists/{gist_id} + */ + gistsGet: (gistId: string, params: RequestParams = {}) => + this.request< + GistSimple, + | { + block?: { + created_at?: string; + html_url?: string | null; + reason?: string; + }; + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/gists/\${gistId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Allows you to update or delete a gist file and rename gist files. Files from the previous version of the gist that aren't explicitly changed during an edit are unchanged. + * + * @tags gists + * @name GistsUpdate + * @summary Update a gist + * @request PATCH:/gists/{gist_id} + */ + gistsUpdate: ( + gistId: string, + data: null & { + /** + * Description of the gist + * @example "Example Ruby script" + */ + description?: string; + /** + * Names of files to be updated + * @example {"hello.rb":{"content":"blah","filename":"goodbye.rb"}} + */ + files?: Record< + string, + (object | null) & { + /** The new content of the file */ + content?: string; + /** The new filename for the file */ + filename?: string | null; + } + >; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsDelete + * @summary Delete a gist + * @request DELETE:/gists/{gist_id} + */ + gistsDelete: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListComments + * @summary List gist comments + * @request GET:/gists/{gist_id}/comments + */ + gistsListComments: ( + gistId: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/comments\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsCreateComment + * @summary Create a gist comment + * @request POST:/gists/{gist_id}/comments + */ + gistsCreateComment: ( + gistId: string, + data: { + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGetComment + * @summary Get a gist comment + * @request GET:/gists/{gist_id}/comments/{comment_id} + */ + gistsGetComment: (gistId: string, commentId: number, params: RequestParams = {}) => + this.request< + GistComment, + | { + block?: { + created_at?: string; + html_url?: string | null; + reason?: string; + }; + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsUpdateComment + * @summary Update a gist comment + * @request PATCH:/gists/{gist_id}/comments/{comment_id} + */ + gistsUpdateComment: ( + gistId: string, + commentId: number, + data: { + /** + * The comment text. + * @maxLength 65535 + * @example "Body of the attachment" + */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsDeleteComment + * @summary Delete a gist comment + * @request DELETE:/gists/{gist_id}/comments/{comment_id} + */ + gistsDeleteComment: (gistId: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListCommits + * @summary List gist commits + * @request GET:/gists/{gist_id}/commits + */ + gistsListCommits: ( + gistId: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/commits\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsListForks + * @summary List gist forks + * @request GET:/gists/{gist_id}/forks + */ + gistsListForks: ( + gistId: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/gists/\${gistId}/forks\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description **Note**: This was previously \`/gists/:gist_id/fork\`. + * + * @tags gists + * @name GistsFork + * @summary Fork a gist + * @request POST:/gists/{gist_id}/forks + */ + gistsFork: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/forks\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsCheckIsStarred + * @summary Check if a gist is starred + * @request GET:/gists/{gist_id}/star + */ + gistsCheckIsStarred: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "GET", + ...params, + }), + + /** + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags gists + * @name GistsStar + * @summary Star a gist + * @request PUT:/gists/{gist_id}/star + */ + gistsStar: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsUnstar + * @summary Unstar a gist + * @request DELETE:/gists/{gist_id}/star + */ + gistsUnstar: (gistId: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/star\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags gists + * @name GistsGetRevision + * @summary Get a gist revision + * @request GET:/gists/{gist_id}/{sha} + */ + gistsGetRevision: (gistId: string, sha: string, params: RequestParams = {}) => + this.request({ + path: \`/gists/\${gistId}/\${sha}\`, + method: "GET", + format: "json", + ...params, + }), + }; + gitignore = { + /** + * @description List all templates available to pass as an option when [creating a repository](https://docs.github.com/rest/reference/repos#create-a-repository-for-the-authenticated-user). + * + * @tags gitignore + * @name GitignoreGetAllTemplates + * @summary Get all gitignore templates + * @request GET:/gitignore/templates + */ + gitignoreGetAllTemplates: (params: RequestParams = {}) => + this.request({ + path: \`/gitignore/templates\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description The API also allows fetching the source of a single template. Use the raw [media type](https://docs.github.com/rest/overview/media-types/) to get the raw contents. + * + * @tags gitignore + * @name GitignoreGetTemplate + * @summary Get a gitignore template + * @request GET:/gitignore/templates/{name} + */ + gitignoreGetTemplate: (name: string, params: RequestParams = {}) => + this.request({ + path: \`/gitignore/templates/\${name}\`, + method: "GET", + format: "json", + ...params, + }), + }; + installation = { + /** + * @description List repositories that an app installation can access. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsListReposAccessibleToInstallation + * @summary List repositories accessible to the app installation + * @request GET:/installation/repositories + */ + appsListReposAccessibleToInstallation: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + repositories: Repository[]; + /** @example "selected" */ + repository_selection?: string; + total_count: number; + }, + BasicError + >({ + path: \`/installation/repositories\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Revokes the installation token you're using to authenticate as an installation and access this endpoint. Once an installation token is revoked, the token is invalidated and cannot be used. Other endpoints that require the revoked installation token must have a new installation token to work. You can create a new token using the "[Create an installation access token for an app](https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app)" endpoint. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * + * @tags apps + * @name AppsRevokeInstallationAccessToken + * @summary Revoke an installation access token + * @request DELETE:/installation/token + */ + appsRevokeInstallationAccessToken: (params: RequestParams = {}) => + this.request({ + path: \`/installation/token\`, + method: "DELETE", + ...params, + }), + }; + issues = { + /** + * @description List issues assigned to the authenticated user across all visible repositories including owned repositories, member repositories, and organization repositories. You can use the \`filter\` query parameter to fetch issues that are not necessarily assigned to you. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesList + * @summary List issues assigned to the authenticated user + * @request GET:/issues + */ + issuesList: ( + query?: { + collab?: boolean; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + orgs?: boolean; + owned?: boolean; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + pulls?: boolean; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: "created" | "updated" | "comments"; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/issues\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + licenses = { + /** + * No description + * + * @tags licenses + * @name LicensesGetAllCommonlyUsed + * @summary Get all commonly used licenses + * @request GET:/licenses + */ + licensesGetAllCommonlyUsed: ( + query?: { + featured?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/licenses\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags licenses + * @name LicensesGet + * @summary Get a license + * @request GET:/licenses/{license} + */ + licensesGet: (license: string, params: RequestParams = {}) => + this.request({ + path: \`/licenses/\${license}\`, + method: "GET", + format: "json", + ...params, + }), + }; + markdown = { + /** + * No description + * + * @tags markdown + * @name MarkdownRender + * @summary Render a Markdown document + * @request POST:/markdown + */ + markdownRender: ( + data: { + /** The repository context to use when creating references in \`gfm\` mode. */ + context?: string; + /** + * The rendering mode. + * @default "markdown" + * @example "markdown" + */ + mode?: "markdown" | "gfm"; + /** The Markdown text to render in HTML. */ + text: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/markdown\`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description You must send Markdown as plain text (using a \`Content-Type\` header of \`text/plain\` or \`text/x-markdown\`) to this endpoint, rather than using JSON format. In raw mode, [GitHub Flavored Markdown](https://github.github.com/gfm/) is not supported and Markdown will be rendered in plain format like a README.md file. Markdown content must be 400 KB or less. + * + * @tags markdown + * @name MarkdownRenderRaw + * @summary Render a Markdown document in raw mode + * @request POST:/markdown/raw + */ + markdownRenderRaw: (data: WebhookConfigUrl, params: RequestParams = {}) => + this.request({ + path: \`/markdown/raw\`, + method: "POST", + body: data, + type: ContentType.Text, + ...params, + }), + }; + marketplaceListing = { + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsGetSubscriptionPlanForAccount + * @summary Get a subscription plan for an account + * @request GET:/marketplace_listing/accounts/{account_id} + */ + appsGetSubscriptionPlanForAccount: (accountId: number, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/accounts/\${accountId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListPlans + * @summary List plans + * @request GET:/marketplace_listing/plans + */ + appsListPlans: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/marketplace_listing/plans\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Returns user and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListAccountsForPlan + * @summary List accounts for a plan + * @request GET:/marketplace_listing/plans/{plan_id}/accounts + */ + appsListAccountsForPlan: ( + planId: number, + query?: { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: "created" | "updated"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/marketplace_listing/plans/\${planId}/accounts\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsGetSubscriptionPlanForAccountStubbed + * @summary Get a subscription plan for an account (stubbed) + * @request GET:/marketplace_listing/stubbed/accounts/{account_id} + */ + appsGetSubscriptionPlanForAccountStubbed: (accountId: number, params: RequestParams = {}) => + this.request({ + path: \`/marketplace_listing/stubbed/accounts/\${accountId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListPlansStubbed + * @summary List plans (stubbed) + * @request GET:/marketplace_listing/stubbed/plans + */ + appsListPlansStubbed: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/marketplace_listing/stubbed/plans\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Returns repository and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * + * @tags apps + * @name AppsListAccountsForPlanStubbed + * @summary List accounts for a plan (stubbed) + * @request GET:/marketplace_listing/stubbed/plans/{plan_id}/accounts + */ + appsListAccountsForPlanStubbed: ( + planId: number, + query?: { + /** To return the oldest accounts first, set to \`asc\`. Can be one of \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: "created" | "updated"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/marketplace_listing/stubbed/plans/\${planId}/accounts\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + meta = { + /** + * @description Returns meta information about GitHub, including a list of GitHub's IP addresses. For more information, see "[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/)." **Note:** The IP addresses shown in the documentation's response are only example values. You must always query the API directly to get the latest list of IP addresses. + * + * @tags meta + * @name MetaGet + * @summary Get GitHub meta information + * @request GET:/meta + */ + metaGet: (params: RequestParams = {}) => + this.request({ + path: \`/meta\`, + method: "GET", + format: "json", + ...params, + }), + }; + networks = { + /** + * No description + * + * @tags activity + * @name ActivityListPublicEventsForRepoNetwork + * @summary List public events for a network of repositories + * @request GET:/networks/{owner}/{repo}/events + */ + activityListPublicEventsForRepoNetwork: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/networks/\${owner}/\${repo}/events\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + notifications = { + /** + * @description List all notifications for the current user, sorted by most recently updated. + * + * @tags activity + * @name ActivityListNotificationsForAuthenticatedUser + * @summary List notifications for the authenticated user + * @request GET:/notifications + */ + activityListNotificationsForAuthenticatedUser: ( + query?: { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/notifications\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Marks all notifications as "read" removes it from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. + * + * @tags activity + * @name ActivityMarkNotificationsAsRead + * @summary Mark notifications as read + * @request PUT:/notifications + */ + activityMarkNotificationsAsRead: ( + data: { + /** + * Describes the last point that notifications were checked. + * @format date-time + */ + last_read_at?: string; + /** Whether the notification has been read. */ + read?: boolean; + }, + params: RequestParams = {}, + ) => + this.request< + { + message?: string; + }, + BasicError + >({ + path: \`/notifications\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityGetThread + * @summary Get a thread + * @request GET:/notifications/threads/{thread_id} + */ + activityGetThread: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityMarkThreadAsRead + * @summary Mark a thread as read + * @request PATCH:/notifications/threads/{thread_id} + */ + activityMarkThreadAsRead: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}\`, + method: "PATCH", + ...params, + }), + + /** + * @description This checks to see if the current user is subscribed to a thread. You can also [get a repository subscription](https://docs.github.com/rest/reference/activity#get-a-repository-subscription). Note that subscriptions are only generated if a user is participating in a conversation--for example, they've replied to the thread, were **@mentioned**, or manually subscribe to a thread. + * + * @tags activity + * @name ActivityGetThreadSubscriptionForAuthenticatedUser + * @summary Get a thread subscription for the authenticated user + * @request GET:/notifications/threads/{thread_id}/subscription + */ + activityGetThreadSubscriptionForAuthenticatedUser: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description If you are watching a repository, you receive notifications for all threads by default. Use this endpoint to ignore future notifications for threads until you comment on the thread or get an **@mention**. You can also use this endpoint to subscribe to threads that you are currently not receiving notifications for or to subscribed to threads that you have previously ignored. Unsubscribing from a conversation in a repository that you are not watching is functionally equivalent to the [Delete a thread subscription](https://docs.github.com/rest/reference/activity#delete-a-thread-subscription) endpoint. + * + * @tags activity + * @name ActivitySetThreadSubscription + * @summary Set a thread subscription + * @request PUT:/notifications/threads/{thread_id}/subscription + */ + activitySetThreadSubscription: ( + threadId: number, + data: { + /** + * Whether to block all notifications from a thread. + * @default false + */ + ignored?: boolean; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Mutes all future notifications for a conversation until you comment on the thread or get an **@mention**. If you are watching the repository of the thread, you will still receive notifications. To ignore future notifications for a repository you are watching, use the [Set a thread subscription](https://docs.github.com/rest/reference/activity#set-a-thread-subscription) endpoint and set \`ignore\` to \`true\`. + * + * @tags activity + * @name ActivityDeleteThreadSubscription + * @summary Delete a thread subscription + * @request DELETE:/notifications/threads/{thread_id}/subscription + */ + activityDeleteThreadSubscription: (threadId: number, params: RequestParams = {}) => + this.request({ + path: \`/notifications/threads/\${threadId}/subscription\`, + method: "DELETE", + ...params, + }), + }; + octocat = { + /** + * @description Get the octocat as ASCII art + * + * @tags meta + * @name MetaGetOctocat + * @summary Get Octocat + * @request GET:/octocat + */ + metaGetOctocat: ( + query?: { + /** The words to show in Octocat's speech bubble */ + s?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/octocat\`, + method: "GET", + query: query, + ...params, + }), + }; + organizations = { + /** + * @description Lists all organizations, in the order that they were created on GitHub. **Note:** Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of organizations. + * + * @tags orgs + * @name OrgsList + * @summary List organizations + * @request GET:/organizations + */ + orgsList: ( + query?: { + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** An organization ID. Only return organizations with an ID greater than this ID. */ + since?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/organizations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + orgs = { + /** + * @description To see many of the organization response values, you need to be an authenticated organization owner with the \`admin:org\` scope. When the value of \`two_factor_requirement_enabled\` is \`true\`, the organization requires all members, billing managers, and outside collaborators to enable [two-factor authentication](https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/). GitHub Apps with the \`Organization plan\` permission can use this endpoint to retrieve information about an organization's GitHub plan. See "[Authenticating with GitHub Apps](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/)" for details. For an example response, see 'Response with GitHub plan information' below." + * + * @tags orgs + * @name OrgsGet + * @summary Get an organization + * @request GET:/orgs/{org} + */ + orgsGet: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description **Parameter Deprecation Notice:** GitHub will replace and discontinue \`members_allowed_repository_creation_type\` in favor of more granular permissions. The new input parameters are \`members_can_create_public_repositories\`, \`members_can_create_private_repositories\` for all organizations and \`members_can_create_internal_repositories\` for organizations associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. For more information, see the [blog post](https://developer.github.com/changes/2019-12-03-internal-visibility-changes). Enables an authenticated organization owner with the \`admin:org\` scope to update the organization's profile and member privileges. + * + * @tags orgs + * @name OrgsUpdate + * @summary Update an organization + * @request PATCH:/orgs/{org} + */ + orgsUpdate: ( + org: string, + data: { + /** Billing email address. This address is not publicized. */ + billing_email?: string; + /** @example ""http://github.blog"" */ + blog?: string; + /** The company name. */ + company?: string; + /** + * Default permission level members have for organization repositories: + * \\* \`read\` - can pull, but not push to or administer this repository. + * \\* \`write\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push, and administer this repository. + * \\* \`none\` - no permissions granted by default. + * @default "read" + */ + default_repository_permission?: "read" | "write" | "admin" | "none"; + /** The description of the company. */ + description?: string; + /** The publicly visible email address. */ + email?: string; + /** Toggles whether an organization can use organization projects. */ + has_organization_projects?: boolean; + /** Toggles whether repositories that belong to the organization can use repository projects. */ + has_repository_projects?: boolean; + /** The location. */ + location?: string; + /** + * Specifies which types of repositories non-admin organization members can create. Can be one of: + * \\* \`all\` - all organization members can create public and private repositories. + * \\* \`private\` - members can create private repositories. This option is only available to repositories that are part of an organization on GitHub Enterprise Cloud. + * \\* \`none\` - only admin members can create repositories. + * **Note:** This parameter is deprecated and will be removed in the future. Its return value ignores internal repositories. Using this parameter overrides values set in \`members_can_create_repositories\`. See the parameter deprecation notice in the operation description for details. + */ + members_allowed_repository_creation_type?: "all" | "private" | "none"; + /** + * Toggles whether organization members can create internal repositories, which are visible to all enterprise members. You can only allow members to create internal repositories if your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. Can be one of: + * \\* \`true\` - all organization members can create internal repositories. + * \\* \`false\` - only organization owners can create internal repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_internal_repositories?: boolean; + /** + * Toggles whether organization members can create GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create GitHub Pages sites. + * \\* \`false\` - no organization members can create GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_pages?: boolean; + /** + * Toggles whether organization members can create private GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create private GitHub Pages sites. + * \\* \`false\` - no organization members can create private GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_private_pages?: boolean; + /** + * Toggles whether organization members can create private repositories, which are visible to organization members with permission. Can be one of: + * \\* \`true\` - all organization members can create private repositories. + * \\* \`false\` - only organization owners can create private repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_private_repositories?: boolean; + /** + * Toggles whether organization members can create public GitHub Pages sites. Can be one of: + * \\* \`true\` - all organization members can create public GitHub Pages sites. + * \\* \`false\` - no organization members can create public GitHub Pages sites. Existing published sites will not be impacted. + * @default true + */ + members_can_create_public_pages?: boolean; + /** + * Toggles whether organization members can create public repositories, which are visible to anyone. Can be one of: + * \\* \`true\` - all organization members can create public repositories. + * \\* \`false\` - only organization owners can create public repositories. + * Default: \`true\`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + */ + members_can_create_public_repositories?: boolean; + /** + * Toggles the ability of non-admin organization members to create repositories. Can be one of: + * \\* \`true\` - all organization members can create repositories. + * \\* \`false\` - only organization owners can create repositories. + * Default: \`true\` + * **Note:** A parameter can override this parameter. See \`members_allowed_repository_creation_type\` in this table for details. **Note:** A parameter can override this parameter. See \`members_allowed_repository_creation_type\` in this table for details. + * @default true + */ + members_can_create_repositories?: boolean; + /** The shorthand name of the company. */ + name?: string; + /** The Twitter username of the company. */ + twitter_username?: string; + }, + params: RequestParams = {}, + ) => + this.request< + OrganizationFull, + | BasicError + | { + documentation_url: string; + message: string; + } + | (ValidationError | ValidationErrorSimple) + >({ + path: \`/orgs/\${org}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Gets the GitHub Actions permissions policy for repositories and allowed actions in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsGetGithubActionsPermissionsOrganization + * @summary Get GitHub Actions permissions for an organization + * @request GET:/orgs/{org}/actions/permissions + */ + actionsGetGithubActionsPermissionsOrganization: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Sets the GitHub Actions permissions policy for repositories and allowed actions in an organization. If the organization belongs to an enterprise that has set restrictive permissions at the enterprise level, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetGithubActionsPermissionsOrganization + * @summary Set GitHub Actions permissions for an organization + * @request PUT:/orgs/{org}/actions/permissions + */ + actionsSetGithubActionsPermissionsOrganization: ( + org: string, + data: { + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: \`all\`, \`none\`, or \`selected\`. */ + enabled_repositories: EnabledRepositories; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Lists the selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsListSelectedRepositoriesEnabledGithubActionsOrganization + * @summary List selected repositories enabled for GitHub Actions in an organization + * @request GET:/orgs/{org}/actions/permissions/repositories + */ + actionsListSelectedRepositoriesEnabledGithubActionsOrganization: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + repositories: Repository[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/permissions/repositories\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Replaces the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetSelectedRepositoriesEnabledGithubActionsOrganization + * @summary Set selected repositories enabled for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories + */ + actionsSetSelectedRepositoriesEnabledGithubActionsOrganization: ( + org: string, + data: { + /** List of repository IDs to enable for GitHub Actions. */ + selected_repository_ids: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsEnableSelectedRepositoryGithubActionsOrganization + * @summary Enable a selected repository for GitHub Actions in an organization + * @request PUT:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + actionsEnableSelectedRepositoryGithubActionsOrganization: ( + org: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removes a repository from the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for \`enabled_repositories\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsDisableSelectedRepositoryGithubActionsOrganization + * @summary Disable a selected repository for GitHub Actions in an organization + * @request DELETE:/orgs/{org}/actions/permissions/repositories/{repository_id} + */ + actionsDisableSelectedRepositoryGithubActionsOrganization: ( + org: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Gets the selected actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)."" You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsGetAllowedActionsOrganization + * @summary Get allowed actions for an organization + * @request GET:/orgs/{org}/actions/permissions/selected-actions + */ + actionsGetAllowedActionsOrganization: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/selected-actions\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Sets the actions that are allowed in an organization. To use this endpoint, the organization permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." If the organization belongs to an enterprise that has \`selected\` actions set at the enterprise level, then you cannot override any of the enterprise's allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the organization must belong to an enterprise. If the organization does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories in the organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`administration\` organization permission to use this API. + * + * @tags actions + * @name ActionsSetAllowedActionsOrganization + * @summary Set allowed actions for an organization + * @request PUT:/orgs/{org}/actions/permissions/selected-actions + */ + actionsSetAllowedActionsOrganization: (org: string, data: SelectedActions, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/permissions/selected-actions\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists all self-hosted runner groups configured in an organization and inherited from an enterprise. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnerGroupsForOrg + * @summary List self-hosted runner groups for an organization + * @request GET:/orgs/{org}/actions/runner-groups + */ + actionsListSelfHostedRunnerGroupsForOrg: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runner_groups: RunnerGroupsOrg[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/runner-groups\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Creates a new self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsCreateSelfHostedRunnerGroupForOrg + * @summary Create a self-hosted runner group for an organization + * @request POST:/orgs/{org}/actions/runner-groups + */ + actionsCreateSelfHostedRunnerGroupForOrg: ( + org: string, + data: { + /** Name of the runner group. */ + name: string; + /** List of runner IDs to add to the runner group. */ + runners?: number[]; + /** List of repository IDs that can access the runner group. */ + selected_repository_ids?: number[]; + /** + * Visibility of a runner group. You can select all repositories, select individual repositories, or limit access to private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. + * @default "all" + */ + visibility?: "selected" | "all" | "private"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Gets a specific self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsGetSelfHostedRunnerGroupForOrg + * @summary Get a self-hosted runner group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsGetSelfHostedRunnerGroupForOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Updates the \`name\` and \`visibility\` of a self-hosted runner group in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsUpdateSelfHostedRunnerGroupForOrg + * @summary Update a self-hosted runner group for an organization + * @request PATCH:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsUpdateSelfHostedRunnerGroupForOrg: ( + org: string, + runnerGroupId: number, + data: { + /** Name of the runner group. */ + name?: string; + /** Visibility of a runner group. You can select all repositories, select individual repositories, or all private repositories. Can be one of: \`all\`, \`selected\`, or \`private\`. */ + visibility?: "selected" | "all" | "private"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Deletes a self-hosted runner group for an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsDeleteSelfHostedRunnerGroupFromOrg + * @summary Delete a self-hosted runner group from an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id} + */ + actionsDeleteSelfHostedRunnerGroupFromOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists the repositories with access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListRepoAccessToSelfHostedRunnerGroupInOrg + * @summary List repository access to a self-hosted runner group in an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + actionsListRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + params: RequestParams = {}, + ) => + this.request< + { + repositories: Repository[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of repositories that have access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsSetRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Set repository access for a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + */ + actionsSetRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + data: { + /** List of repository IDs that can access the runner group. */ + selected_repository_ids: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a repository to the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsAddRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Add repository access to a self-hosted runner group in an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + actionsAddRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a repository from the list of selected repositories that can access a self-hosted runner group. The runner group must have \`visibility\` set to \`selected\`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg + * @summary Remove repository access to a self-hosted runner group in an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + */ + actionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg: ( + org: string, + runnerGroupId: number, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists self-hosted runners that are in a specific organization group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnersInGroupForOrg + * @summary List self-hosted runners in a group for an organization + * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + actionsListSelfHostedRunnersInGroupForOrg: ( + org: string, + runnerGroupId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runners: Runner[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of self-hosted runners that are part of an organization runner group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsSetSelfHostedRunnersInGroupForOrg + * @summary Set self-hosted runners in a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + */ + actionsSetSelfHostedRunnersInGroupForOrg: ( + org: string, + runnerGroupId: number, + data: { + /** List of runner IDs to add to the runner group. */ + runners: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a self-hosted runner to a runner group configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsAddSelfHostedRunnerToGroupForOrg + * @summary Add a self-hosted runner to a group for an organization + * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + actionsAddSelfHostedRunnerToGroupForOrg: ( + org: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "PUT", + ...params, + }), + + /** + * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a self-hosted runner from a group configured in an organization. The runner is then returned to the default group. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsRemoveSelfHostedRunnerFromGroupForOrg + * @summary Remove a self-hosted runner from a group for an organization + * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + */ + actionsRemoveSelfHostedRunnerFromGroupForOrg: ( + org: string, + runnerGroupId: number, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/runner-groups/\${runnerGroupId}/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists all self-hosted runners configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListSelfHostedRunnersForOrg + * @summary List self-hosted runners for an organization + * @request GET:/orgs/{org}/actions/runners + */ + actionsListSelfHostedRunnersForOrg: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + runners: Runner[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/runners\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsListRunnerApplicationsForOrg + * @summary List runner applications for an organization + * @request GET:/orgs/{org}/actions/runners/downloads + */ + actionsListRunnerApplicationsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/downloads\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRegistrationTokenForOrg + * @summary Create a registration token for an organization + * @request POST:/orgs/{org}/actions/runners/registration-token + */ + actionsCreateRegistrationTokenForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/registration-token\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * @description Returns a token that you can pass to the \`config\` script to remove a self-hosted runner from an organization. The token expires after one hour. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an organization, replace \`TOKEN\` with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` + * + * @tags actions + * @name ActionsCreateRemoveTokenForOrg + * @summary Create a remove token for an organization + * @request POST:/orgs/{org}/actions/runners/remove-token + */ + actionsCreateRemoveTokenForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/remove-token\`, + method: "POST", + format: "json", + ...params, + }), + + /** + * @description Gets a specific self-hosted runner configured in an organization. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsGetSelfHostedRunnerForOrg + * @summary Get a self-hosted runner for an organization + * @request GET:/orgs/{org}/actions/runners/{runner_id} + */ + actionsGetSelfHostedRunnerForOrg: (org: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/\${runnerId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Forces the removal of a self-hosted runner from an organization. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. + * + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromOrg + * @summary Delete a self-hosted runner from an organization + * @request DELETE:/orgs/{org}/actions/runners/{runner_id} + */ + actionsDeleteSelfHostedRunnerFromOrg: (org: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/runners/\${runnerId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists all secrets available in an organization without revealing their encrypted values. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsListOrgSecrets + * @summary List organization secrets + * @request GET:/orgs/{org}/actions/secrets + */ + actionsListOrgSecrets: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + secrets: OrganizationActionsSecret[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/secrets\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Gets your public key, which you need to encrypt secrets. You need to encrypt a secret before you can create or update secrets. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsGetOrgPublicKey + * @summary Get an organization public key + * @request GET:/orgs/{org}/actions/secrets/public-key + */ + actionsGetOrgPublicKey: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/public-key\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Gets a single organization secret without revealing its encrypted value. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsGetOrgSecret + * @summary Get an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsGetOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Creates or updates an organization secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` + * + * @tags actions + * @name ActionsCreateOrUpdateOrgSecret + * @summary Create or update an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsCreateOrUpdateOrgSecret: ( + org: string, + secretName: string, + data: { + /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get an organization public key](https://docs.github.com/rest/reference/actions#get-an-organization-public-key) endpoint. */ + encrypted_value?: string; + /** ID of the key you used to encrypt the secret. */ + key_id?: string; + /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the \`visibility\` is set to \`selected\`. You can manage the list of selected repositories using the [List selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#list-selected-repositories-for-an-organization-secret), [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret), and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ + selected_repository_ids?: string[]; + /** + * Configures the access that repositories have to the organization secret. Can be one of: + * \\- \`all\` - All repositories in an organization can access the secret. + * \\- \`private\` - Private repositories in an organization can access the secret. + * \\- \`selected\` - Only specific repositories can access the secret. + */ + visibility?: "all" | "private" | "selected"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Deletes a secret in an organization using the secret name. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteOrgSecret + * @summary Delete an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name} + */ + actionsDeleteOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists all repositories that have been selected when the \`visibility\` for repository access to a secret is set to \`selected\`. You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsListSelectedReposForOrgSecret + * @summary List selected repositories for an organization secret + * @request GET:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + actionsListSelectedReposForOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => + this.request< + { + repositories: MinimalRepository[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Replaces all repositories for an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsSetSelectedReposForOrgSecret + * @summary Set selected repositories for an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories + */ + actionsSetSelectedReposForOrgSecret: ( + org: string, + secretName: string, + data: { + /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the \`visibility\` is set to \`selected\`. You can add and remove individual repositories using the [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret) and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ + selected_repository_ids?: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * @description Adds a repository to an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsAddSelectedRepoToOrgSecret + * @summary Add selected repository to an organization secret + * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + actionsAddSelectedRepoToOrgSecret: ( + org: string, + secretName: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories/\${repositoryId}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removes a repository from an organization secret when the \`visibility\` for repository access is set to \`selected\`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the \`admin:org\` scope to use this endpoint. GitHub Apps must have the \`secrets\` organization permission to use this endpoint. + * + * @tags actions + * @name ActionsRemoveSelectedRepoFromOrgSecret + * @summary Remove selected repository from an organization secret + * @request DELETE:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + */ + actionsRemoveSelectedRepoFromOrgSecret: ( + org: string, + secretName: string, + repositoryId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/actions/secrets/\${secretName}/repositories/\${repositoryId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an organization. For more information, see "[Reviewing the audit log for your organization](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization)." To use this endpoint, you must be an organization owner, and you must use an access token with the \`admin:org\` scope. GitHub Apps must have the \`organization_administration\` read permission to use this endpoint. + * + * @tags orgs + * @name OrgsGetAuditLog + * @summary Get the audit log for an organization + * @request GET:/orgs/{org}/audit-log + */ + orgsGetAuditLog: ( + org: string, + query?: { + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ + after?: string; + /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ + before?: string; + /** + * The event types to include: + * + * - \`web\` - returns web (non-Git) events + * - \`git\` - returns Git events + * - \`all\` - returns both web and Git events + * + * The default is \`web\`. + */ + include?: "web" | "git" | "all"; + /** + * The order of audit log events. To list newest events first, specify \`desc\`. To list oldest events first, specify \`asc\`. + * + * The default is \`desc\`. + */ + order?: "desc" | "asc"; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ + phrase?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/audit-log\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description List the users blocked by an organization. + * + * @tags orgs + * @name OrgsListBlockedUsers + * @summary List users blocked by an organization + * @request GET:/orgs/{org}/blocks + */ + orgsListBlockedUsers: (org: string, params: RequestParams = {}) => + this.request< + SimpleUser[], + { + documentation_url: string; + message: string; + } + >({ + path: \`/orgs/\${org}/blocks\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsCheckBlockedUser + * @summary Check if a user is blocked by an organization + * @request GET:/orgs/{org}/blocks/{username} + */ + orgsCheckBlockedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "GET", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsBlockUser + * @summary Block a user from an organization + * @request PUT:/orgs/{org}/blocks/{username} + */ + orgsBlockUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsUnblockUser + * @summary Unblock a user from an organization + * @request DELETE:/orgs/{org}/blocks/{username} + */ + orgsUnblockUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/blocks/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`read:org\` scope can list all credential authorizations for an organization that uses SAML single sign-on (SSO). The credentials are either personal access tokens or SSH keys that organization members have authorized for the organization. For more information, see [About authentication with SAML single sign-on](https://help.github.com/en/articles/about-authentication-with-saml-single-sign-on). + * + * @tags orgs + * @name OrgsListSamlSsoAuthorizations + * @summary List SAML SSO authorizations for an organization + * @request GET:/orgs/{org}/credential-authorizations + */ + orgsListSamlSsoAuthorizations: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/credential-authorizations\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the \`admin:org\` scope can remove a credential authorization for an organization that uses SAML SSO. Once you remove someone's credential authorization, they will need to create a new personal access token or SSH key and authorize it for the organization they want to access. + * + * @tags orgs + * @name OrgsRemoveSamlSsoAuthorization + * @summary Remove a SAML SSO authorization for an organization + * @request DELETE:/orgs/{org}/credential-authorizations/{credential_id} + */ + orgsRemoveSamlSsoAuthorization: (org: string, credentialId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/credential-authorizations/\${credentialId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags activity + * @name ActivityListPublicOrgEvents + * @summary List public organization events + * @request GET:/orgs/{org}/events + */ + activityListPublicOrgEvents: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/events\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description The return hash contains \`failed_at\` and \`failed_reason\` fields which represent the time at which the invitation failed and the reason for the failure. + * + * @tags orgs + * @name OrgsListFailedInvitations + * @summary List failed organization invitations + * @request GET:/orgs/{org}/failed_invitations + */ + orgsListFailedInvitations: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/failed_invitations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsListWebhooks + * @summary List organization webhooks + * @request GET:/orgs/{org}/hooks + */ + orgsListWebhooks: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/hooks\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Here's how you can create a hook that posts payloads in JSON format: + * + * @tags orgs + * @name OrgsCreateWebhook + * @summary Create an organization webhook + * @request POST:/orgs/{org}/hooks + */ + orgsCreateWebhook: ( + org: string, + data: { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/orgs#create-hook-config-params). */ + config: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** @example ""password"" */ + password?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + /** @example ""kdaigle"" */ + username?: string; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * @default ["push"] + */ + events?: string[]; + /** Must be passed as "web". */ + name: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/hooks\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Returns a webhook configured in an organization. To get only the webhook \`config\` properties, see "[Get a webhook configuration for an organization](/rest/reference/orgs#get-a-webhook-configuration-for-an-organization)." + * + * @tags orgs + * @name OrgsGetWebhook + * @summary Get an organization webhook + * @request GET:/orgs/{org}/hooks/{hook_id} + */ + orgsGetWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Updates a webhook configured in an organization. When you update a webhook, the \`secret\` will be overwritten. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for an organization](/rest/reference/orgs#update-a-webhook-configuration-for-an-organization)." + * + * @tags orgs + * @name OrgsUpdateWebhook + * @summary Update an organization webhook + * @request PATCH:/orgs/{org}/hooks/{hook_id} + */ + orgsUpdateWebhook: ( + org: string, + hookId: number, + data: { + /** + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. + * @default true + */ + active?: boolean; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/orgs#update-hook-config-params). */ + config?: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url: WebhookConfigUrl; + }; + /** + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * @default ["push"] + */ + events?: string[]; + /** @example ""web"" */ + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsDeleteWebhook + * @summary Delete an organization webhook + * @request DELETE:/orgs/{org}/hooks/{hook_id} + */ + orgsDeleteWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Returns the webhook configuration for an organization. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get an organization webhook ](/rest/reference/orgs#get-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:read\` permission. + * + * @tags orgs + * @name OrgsGetWebhookConfigForOrg + * @summary Get a webhook configuration for an organization + * @request GET:/orgs/{org}/hooks/{hook_id}/config + */ + orgsGetWebhookConfigForOrg: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/config\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Updates the webhook configuration for an organization. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update an organization webhook ](/rest/reference/orgs#update-an-organization-webhook)." Access tokens must have the \`admin:org_hook\` scope, and GitHub Apps must have the \`organization_hooks:write\` permission. + * + * @tags orgs + * @name OrgsUpdateWebhookConfigForOrg + * @summary Update a webhook configuration for an organization + * @request PATCH:/orgs/{org}/hooks/{hook_id}/config + */ + orgsUpdateWebhookConfigForOrg: ( + org: string, + hookId: number, + data: { + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ + content_type?: WebhookConfigContentType; + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ + insecure_ssl?: WebhookConfigInsecureSsl; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + secret?: WebhookConfigSecret; + /** The URL to which the payloads will be delivered. */ + url?: WebhookConfigUrl; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/config\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * + * @tags orgs + * @name OrgsPingWebhook + * @summary Ping an organization webhook + * @request POST:/orgs/{org}/hooks/{hook_id}/pings + */ + orgsPingWebhook: (org: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/hooks/\${hookId}/pings\`, + method: "POST", + ...params, + }), + + /** + * @description Enables an authenticated GitHub App to find the organization's installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * + * @tags apps + * @name AppsGetOrgInstallation + * @summary Get an organization installation for the authenticated app + * @request GET:/orgs/{org}/installation + */ + appsGetOrgInstallation: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/installation\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Lists all GitHub Apps in an organization. The installation count includes all GitHub Apps installed on repositories in the organization. You must be an organization owner with \`admin:read\` scope to use this endpoint. + * + * @tags orgs + * @name OrgsListAppInstallations + * @summary List app installations for an organization + * @request GET:/orgs/{org}/installations + */ + orgsListAppInstallations: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request< + { + installations: Installation[]; + total_count: number; + }, + any + >({ + path: \`/orgs/\${org}/installations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Shows which type of GitHub user can interact with this organization and when the restriction expires. If there is no restrictions, you will see an empty response. + * + * @tags interactions + * @name InteractionsGetRestrictionsForOrg + * @summary Get interaction restrictions for an organization + * @request GET:/orgs/{org}/interaction-limits + */ + interactionsGetRestrictionsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Temporarily restricts interactions to a certain type of GitHub user in any public repository in the given organization. You must be an organization owner to set these restrictions. Setting the interaction limit at the organization level will overwrite any interaction limits that are set for individual repositories owned by the organization. + * + * @tags interactions + * @name InteractionsSetRestrictionsForOrg + * @summary Set interaction restrictions for an organization + * @request PUT:/orgs/{org}/interaction-limits + */ + interactionsSetRestrictionsForOrg: (org: string, data: InteractionLimit, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Removes all interaction restrictions from public repositories in the given organization. You must be an organization owner to remove restrictions. + * + * @tags interactions + * @name InteractionsRemoveRestrictionsForOrg + * @summary Remove interaction restrictions for an organization + * @request DELETE:/orgs/{org}/interaction-limits + */ + interactionsRemoveRestrictionsForOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/interaction-limits\`, + method: "DELETE", + ...params, + }), + + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. + * + * @tags orgs + * @name OrgsListPendingInvitations + * @summary List pending organization invitations + * @request GET:/orgs/{org}/invitations + */ + orgsListPendingInvitations: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/invitations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Invite people to an organization by using their GitHub user ID or their email address. In order to create invitations in an organization, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * + * @tags orgs + * @name OrgsCreateInvitation + * @summary Create an organization invitation + * @request POST:/orgs/{org}/invitations + */ + orgsCreateInvitation: ( + org: string, + data: { + /** **Required unless you provide \`invitee_id\`**. Email address of the person you are inviting, which can be an existing GitHub user. */ + email?: string; + /** **Required unless you provide \`email\`**. GitHub user ID for the person you are inviting. */ + invitee_id?: number; + /** + * Specify role for new member. Can be one of: + * \\* \`admin\` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams. + * \\* \`direct_member\` - Non-owner organization members with ability to see other members and join teams by invitation. + * \\* \`billing_manager\` - Non-owner organization members with ability to manage the billing settings of your organization. + * @default "direct_member" + */ + role?: "admin" | "direct_member" | "billing_manager"; + /** Specify IDs for the teams you want to invite new members to. */ + team_ids?: number[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/invitations\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Cancel an organization invitation. In order to cancel an organization invitation, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). + * + * @tags orgs + * @name OrgsCancelInvitation + * @summary Cancel an organization invitation + * @request DELETE:/orgs/{org}/invitations/{invitation_id} + */ + orgsCancelInvitation: (org: string, invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/invitations/\${invitationId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description List all teams associated with an invitation. In order to see invitations in an organization, the authenticated user must be an organization owner. + * + * @tags orgs + * @name OrgsListInvitationTeams + * @summary List organization invitation teams + * @request GET:/orgs/{org}/invitations/{invitation_id}/teams + */ + orgsListInvitationTeams: ( + org: string, + invitationId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/invitations/\${invitationId}/teams\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description List issues in an organization assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * + * @tags issues + * @name IssuesListForOrg + * @summary List organization issues assigned to the authenticated user + * @request GET:/orgs/{org}/issues + */ + issuesListForOrg: ( + org: string, + query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: "created" | "updated" | "comments"; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/issues\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description List all users who are members of an organization. If the authenticated user is also a member of this organization then both concealed and public members will be returned. + * + * @tags orgs + * @name OrgsListMembers + * @summary List organization members + * @request GET:/orgs/{org}/members + */ + orgsListMembers: ( + org: string, + query?: { + /** + * Filter members returned in the list. Can be one of: + * \\* \`2fa_disabled\` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. + * \\* \`all\` - All members the authenticated user can see. + * @default "all" + */ + filter?: "2fa_disabled" | "all"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filter members returned by their role. Can be one of: + * \\* \`all\` - All members of the organization, regardless of role. + * \\* \`admin\` - Organization owners. + * \\* \`member\` - Non-owner organization members. + * @default "all" + */ + role?: "all" | "admin" | "member"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/members\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Check if a user is, publicly or privately, a member of the organization. + * + * @tags orgs + * @name OrgsCheckMembershipForUser + * @summary Check organization membership for a user + * @request GET:/orgs/{org}/members/{username} + */ + orgsCheckMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/members/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. + * + * @tags orgs + * @name OrgsRemoveMember + * @summary Remove an organization member + * @request DELETE:/orgs/{org}/members/{username} + */ + orgsRemoveMember: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/members/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description In order to get a user's membership with an organization, the authenticated user must be an organization member. + * + * @tags orgs + * @name OrgsGetMembershipForUser + * @summary Get organization membership for a user + * @request GET:/orgs/{org}/memberships/{username} + */ + orgsGetMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Only authenticated organization owners can add a member to the organization or update the member's role. * If the authenticated user is _adding_ a member to the organization, the invited user will receive an email inviting them to the organization. The user's [membership status](https://docs.github.com/rest/reference/orgs#get-organization-membership-for-a-user) will be \`pending\` until they accept the invitation. * Authenticated users can _update_ a user's membership by passing the \`role\` parameter. If the authenticated user changes a member's role to \`admin\`, the affected user will receive an email notifying them that they've been made an organization owner. If the authenticated user changes an owner's role to \`member\`, no email will be sent. **Rate limits** To prevent abuse, the authenticated user is limited to 50 organization invitations per 24 hour period. If the organization is more than one month old or on a paid plan, the limit is 500 invitations per 24 hour period. + * + * @tags orgs + * @name OrgsSetMembershipForUser + * @summary Set organization membership for a user + * @request PUT:/orgs/{org}/memberships/{username} + */ + orgsSetMembershipForUser: ( + org: string, + username: string, + data: { + /** + * The role to give the user in the organization. Can be one of: + * \\* \`admin\` - The user will become an owner of the organization. + * \\* \`member\` - The user will become a non-owner member of the organization. + * @default "member" + */ + role?: "admin" | "member"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description In order to remove a user's membership with an organization, the authenticated user must be an organization owner. If the specified user is an active member of the organization, this will remove them from the organization. If the specified user has been invited to the organization, this will cancel their invitation. The specified user will receive an email notification in both cases. + * + * @tags orgs + * @name OrgsRemoveMembershipForUser + * @summary Remove organization membership for a user + * @request DELETE:/orgs/{org}/memberships/{username} + */ + orgsRemoveMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists the most recent migrations. + * + * @tags migrations + * @name MigrationsListForOrg + * @summary List organization migrations + * @request GET:/orgs/{org}/migrations + */ + migrationsListForOrg: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/migrations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Initiates the generation of a migration archive. + * + * @tags migrations + * @name MigrationsStartForOrg + * @summary Start an organization migration + * @request POST:/orgs/{org}/migrations + */ + migrationsStartForOrg: ( + org: string, + data: { + exclude?: string[]; + /** + * Indicates whether attachments should be excluded from the migration (to reduce migration archive file size). + * @default false + */ + exclude_attachments?: boolean; + /** + * Indicates whether repositories should be locked (to prevent manipulation) while migrating data. + * @default false + */ + lock_repositories?: boolean; + /** A list of arrays indicating which repositories should be migrated. */ + repositories: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/migrations\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Fetches the status of a migration. The \`state\` of a migration can be one of the following values: * \`pending\`, which means the migration hasn't started yet. * \`exporting\`, which means the migration is in progress. * \`exported\`, which means the migration finished successfully. * \`failed\`, which means the migration failed. + * + * @tags migrations + * @name MigrationsGetStatusForOrg + * @summary Get an organization migration status + * @request GET:/orgs/{org}/migrations/{migration_id} + */ + migrationsGetStatusForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Fetches the URL to a migration archive. + * + * @tags migrations + * @name MigrationsDownloadArchiveForOrg + * @summary Download an organization migration archive + * @request GET:/orgs/{org}/migrations/{migration_id}/archive + */ + migrationsDownloadArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/archive\`, + method: "GET", + ...params, + }), + + /** + * @description Deletes a previous migration archive. Migration archives are automatically deleted after seven days. + * + * @tags migrations + * @name MigrationsDeleteArchiveForOrg + * @summary Delete an organization migration archive + * @request DELETE:/orgs/{org}/migrations/{migration_id}/archive + */ + migrationsDeleteArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/archive\`, + method: "DELETE", + ...params, + }), + + /** + * @description Unlocks a repository that was locked for migration. You should unlock each migrated repository and [delete them](https://docs.github.com/rest/reference/repos#delete-a-repository) when the migration is complete and you no longer need the source data. + * + * @tags migrations + * @name MigrationsUnlockRepoForOrg + * @summary Unlock an organization repository + * @request DELETE:/orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock + */ + migrationsUnlockRepoForOrg: (org: string, migrationId: number, repoName: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/repos/\${repoName}/lock\`, + method: "DELETE", + ...params, + }), + + /** + * @description List all the repositories for this organization migration. + * + * @tags migrations + * @name MigrationsListReposForOrg + * @summary List repositories in an organization migration + * @request GET:/orgs/{org}/migrations/{migration_id}/repositories + */ + migrationsListReposForOrg: ( + org: string, + migrationId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/migrations/\${migrationId}/repositories\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description List all users who are outside collaborators of an organization. + * + * @tags orgs + * @name OrgsListOutsideCollaborators + * @summary List outside collaborators for an organization + * @request GET:/orgs/{org}/outside_collaborators + */ + orgsListOutsideCollaborators: ( + org: string, + query?: { + /** + * Filter the list of outside collaborators. Can be one of: + * \\* \`2fa_disabled\`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. + * \\* \`all\`: All outside collaborators. + * @default "all" + */ + filter?: "2fa_disabled" | "all"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/outside_collaborators\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description When an organization member is converted to an outside collaborator, they'll only have access to the repositories that their current team membership allows. The user will no longer be a member of the organization. For more information, see "[Converting an organization member to an outside collaborator](https://help.github.com/articles/converting-an-organization-member-to-an-outside-collaborator/)". + * + * @tags orgs + * @name OrgsConvertMemberToOutsideCollaborator + * @summary Convert an organization member to outside collaborator + * @request PUT:/orgs/{org}/outside_collaborators/{username} + */ + orgsConvertMemberToOutsideCollaborator: (org: string, username: string, params: RequestParams = {}) => + this.request< + void, + | { + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/orgs/\${org}/outside_collaborators/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * @description Removing a user from this list will remove them from all the organization's repositories. + * + * @tags orgs + * @name OrgsRemoveOutsideCollaborator + * @summary Remove outside collaborator from an organization + * @request DELETE:/orgs/{org}/outside_collaborators/{username} + */ + orgsRemoveOutsideCollaborator: (org: string, username: string, params: RequestParams = {}) => + this.request< + void, + { + documentation_url?: string; + message?: string; + } + >({ + path: \`/orgs/\${org}/outside_collaborators/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists the projects in an organization. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsListForOrg + * @summary List organization projects + * @request GET:/orgs/{org}/projects + */ + projectsListForOrg: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/projects\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Creates an organization project board. Returns a \`404 Not Found\` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsCreateForOrg + * @summary Create an organization project + * @request POST:/orgs/{org}/projects + */ + projectsCreateForOrg: ( + org: string, + data: { + /** The description of the project. */ + body?: string; + /** The name of the project. */ + name: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/projects\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Members of an organization can choose to have their membership publicized or not. + * + * @tags orgs + * @name OrgsListPublicMembers + * @summary List public organization members + * @request GET:/orgs/{org}/public_members + */ + orgsListPublicMembers: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/public_members\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsCheckPublicMembershipForUser + * @summary Check public organization membership for a user + * @request GET:/orgs/{org}/public_members/{username} + */ + orgsCheckPublicMembershipForUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "GET", + ...params, + }), + + /** + * @description The user can publicize their own membership. (A user cannot publicize the membership for another user.) Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * + * @tags orgs + * @name OrgsSetPublicMembershipForAuthenticatedUser + * @summary Set public organization membership for the authenticated user + * @request PUT:/orgs/{org}/public_members/{username} + */ + orgsSetPublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "PUT", + ...params, + }), + + /** + * No description + * + * @tags orgs + * @name OrgsRemovePublicMembershipForAuthenticatedUser + * @summary Remove public organization membership for the authenticated user + * @request DELETE:/orgs/{org}/public_members/{username} + */ + orgsRemovePublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/public_members/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists repositories for the specified organization. + * + * @tags repos + * @name ReposListForOrg + * @summary List organization repositories + * @request GET:/orgs/{org}/repos + */ + reposListForOrg: ( + org: string, + query?: { + /** Can be one of \`asc\` or \`desc\`. Default: when using \`full_name\`: \`asc\`, otherwise \`desc\` */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Can be one of \`created\`, \`updated\`, \`pushed\`, \`full_name\`. + * @default "created" + */ + sort?: "created" | "updated" | "pushed" | "full_name"; + /** Specifies the types of repositories you want returned. Can be one of \`all\`, \`public\`, \`private\`, \`forks\`, \`sources\`, \`member\`, \`internal\`. Default: \`all\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`type\` can also be \`internal\`. */ + type?: "all" | "public" | "private" | "forks" | "sources" | "member" | "internal"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/repos\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Creates a new repository in the specified organization. The authenticated user must be a member of the organization. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository + * + * @tags repos + * @name ReposCreateInOrg + * @summary Create an organization repository + * @request POST:/orgs/{org}/repos + */ + reposCreateInOrg: ( + org: string, + data: { + /** + * Either \`true\` to allow merging pull requests with a merge commit, or \`false\` to prevent merging pull requests with merge commits. + * @default true + */ + allow_merge_commit?: boolean; + /** + * Either \`true\` to allow rebase-merging pull requests, or \`false\` to prevent rebase-merging. + * @default true + */ + allow_rebase_merge?: boolean; + /** + * Either \`true\` to allow squash-merging pull requests, or \`false\` to prevent squash-merging. + * @default true + */ + allow_squash_merge?: boolean; + /** + * Pass \`true\` to create an initial commit with empty README. + * @default false + */ + auto_init?: boolean; + /** + * Either \`true\` to allow automatically deleting head branches when pull requests are merged, or \`false\` to prevent automatic deletion. + * @default false + */ + delete_branch_on_merge?: boolean; + /** A short description of the repository. */ + description?: string; + /** Desired language or platform [.gitignore template](https://github.com/github/gitignore) to apply. Use the name of the template without the extension. For example, "Haskell". */ + gitignore_template?: string; + /** + * Either \`true\` to enable issues for this repository or \`false\` to disable them. + * @default true + */ + has_issues?: boolean; + /** + * Either \`true\` to enable projects for this repository or \`false\` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is \`false\`, and if you pass \`true\`, the API returns an error. + * @default true + */ + has_projects?: boolean; + /** + * Either \`true\` to enable the wiki for this repository or \`false\` to disable it. + * @default true + */ + has_wiki?: boolean; + /** A URL with more information about the repository. */ + homepage?: string; + /** + * Either \`true\` to make this repo available as a template repository or \`false\` to prevent it. + * @default false + */ + is_template?: boolean; + /** Choose an [open source license template](https://choosealicense.com/) that best suits your needs, and then use the [license keyword](https://help.github.com/articles/licensing-a-repository/#searching-github-by-license-type) as the \`license_template\` string. For example, "mit" or "mpl-2.0". */ + license_template?: string; + /** The name of the repository. */ + name: string; + /** + * Either \`true\` to create a private repository or \`false\` to create a public one. + * @default false + */ + private?: boolean; + /** The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization. */ + team_id?: number; + /** + * Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. For more information, see "[Creating an internal repository](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-repository-visibility#about-internal-repositories)" in the GitHub Help documentation. + * The \`visibility\` parameter overrides the \`private\` parameter when you use both parameters with the \`nebula-preview\` preview header. + */ + visibility?: "public" | "private" | "visibility" | "internal"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/repos\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Thread Subscription - * Thread Subscription - */ -export interface ThreadSubscription { - /** - * @format date-time - * @example "2012-10-06T21:34:12Z" - */ - created_at: string | null; - ignored: boolean; - reason: string | null; - /** - * @format uri - * @example "https://api.github.com/repos/1" - */ - repository_url?: string; - /** @example true */ - subscribed: boolean; - /** - * @format uri - * @example "https://api.github.com/notifications/threads/1" - */ - thread_url?: string; - /** - * @format uri - * @example "https://api.github.com/notifications/threads/1/subscription" - */ - url: string; -} + /** + * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetGithubActionsBillingOrg + * @summary Get GitHub Actions billing for an organization + * @request GET:/orgs/{org}/settings/billing/actions + */ + billingGetGithubActionsBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/actions\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Topic - * A topic aggregates entities that are related to a subject. - */ -export interface Topic { - names: string[]; -} + /** + * @description Gets the free and paid storage usued for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetGithubPackagesBillingOrg + * @summary Get GitHub Packages billing for an organization + * @request GET:/orgs/{org}/settings/billing/packages + */ + billingGetGithubPackagesBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/packages\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Topic Search Result Item - * Topic Search Result Item - */ -export interface TopicSearchResultItem { - aliases?: - | { - topic_relation?: { - id?: number; - name?: string; - relation_type?: string; - topic_id?: number; - }; - }[] - | null; - /** @format date-time */ - created_at: string; - created_by: string | null; - curated: boolean; - description: string | null; - display_name: string | null; - featured: boolean; - /** @format uri */ - logo_url?: string | null; - name: string; - related?: - | { - topic_relation?: { - id?: number; - name?: string; - relation_type?: string; - topic_id?: number; - }; - }[] - | null; - released: string | null; - repository_count?: number | null; - score: number; - short_description: string | null; - text_matches?: SearchResultTextMatches; - /** @format date-time */ - updated_at: string; -} + /** + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`repo\` or \`admin:org\` scope. + * + * @tags billing + * @name BillingGetSharedStorageBillingOrg + * @summary Get shared storage billing for an organization + * @request GET:/orgs/{org}/settings/billing/shared-storage + */ + billingGetSharedStorageBillingOrg: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/settings/billing/shared-storage\`, + method: "GET", + format: "json", + ...params, + }), -/** Traffic */ -export interface Traffic { - count: number; - /** @format date-time */ - timestamp: string; - uniques: number; -} + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups available in an organization. You can limit your page results using the \`per_page\` parameter. GitHub generates a url-encoded \`page\` token using a cursor value for where the next page begins. For more information on cursor pagination, see "[Offset and Cursor Pagination explained](https://dev.to/jackmarchant/offset-and-cursor-pagination-explained-b89)." The \`per_page\` parameter provides pagination for a list of IdP groups the authenticated user can access in an organization. For example, if the user \`octocat\` wants to see two groups per page in \`octo-org\` via cURL, it would look like this: + * + * @tags teams + * @name TeamsListIdpGroupsForOrg + * @summary List IdP groups for an organization + * @request GET:/orgs/{org}/team-sync/groups + */ + teamsListIdpGroupsForOrg: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/team-sync/groups\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -/** - * User Marketplace Purchase - * User Marketplace Purchase - */ -export interface UserMarketplacePurchase { - account: MarketplaceAccount; - /** @example "monthly" */ - billing_cycle: string; - /** - * @format date-time - * @example "2017-11-11T00:00:00Z" - */ - free_trial_ends_on: string | null; - /** - * @format date-time - * @example "2017-11-11T00:00:00Z" - */ - next_billing_date: string | null; - /** @example true */ - on_free_trial: boolean; - /** Marketplace Listing Plan */ - plan: MarketplaceListingPlan; - unit_count: number | null; - /** - * @format date-time - * @example "2017-11-02T01:12:12Z" - */ - updated_at: string | null; -} + /** + * @description Lists all teams in an organization that are visible to the authenticated user. + * + * @tags teams + * @name TeamsList + * @summary List teams + * @request GET:/orgs/{org}/teams + */ + teamsList: ( + org: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -/** - * User Search Result Item - * User Search Result Item - */ -export interface UserSearchResultItem { - /** @format uri */ - avatar_url: string; - bio?: string | null; - blog?: string | null; - company?: string | null; - /** @format date-time */ - created_at?: string; - /** @format email */ - email?: string | null; - events_url: string; - followers?: number; - /** @format uri */ - followers_url: string; - following?: number; - following_url: string; - gists_url: string; - gravatar_id: string | null; - hireable?: boolean | null; - /** @format uri */ - html_url: string; - id: number; - location?: string | null; - login: string; - name?: string | null; - node_id: string; - /** @format uri */ - organizations_url: string; - public_gists?: number; - public_repos?: number; - /** @format uri */ - received_events_url: string; - /** @format uri */ - repos_url: string; - score: number; - site_admin: boolean; - starred_url: string; - /** @format uri */ - subscriptions_url: string; - /** @format date-time */ - suspended_at?: string | null; - text_matches?: SearchResultTextMatches; - type: string; - /** @format date-time */ - updated_at?: string; - /** @format uri */ - url: string; -} + /** + * @description To create a team, the authenticated user must be a member or owner of \`{org}\`. By default, organization members can create teams. Organization owners can limit team creation to organization owners. For more information, see "[Setting team creation permissions](https://help.github.com/en/articles/setting-team-creation-permissions-in-your-organization)." When you create a new team, you automatically become a team maintainer without explicitly adding yourself to the optional array of \`maintainers\`. For more information, see "[About teams](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/about-teams)". + * + * @tags teams + * @name TeamsCreate + * @summary Create a team + * @request POST:/orgs/{org}/teams + */ + teamsCreate: ( + org: string, + data: { + /** The description of the team. */ + description?: string; + /** List GitHub IDs for organization members who will become team maintainers. */ + maintainers?: string[]; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: "pull" | "push" | "admin"; + /** + * The level of privacy this team should have. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * Default: \`secret\` + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + * Default for child team: \`closed\` + */ + privacy?: "secret" | "closed"; + /** The full name (e.g., "organization-name/repository-name") of repositories to add the team to. */ + repo_names?: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Validation Error - * Validation Error - */ -export interface ValidationError { - documentation_url: string; - errors?: { - code: string; - field?: string; - index?: number; - message?: string; - resource?: string; - value?: string | null | number | null | string[] | null; - }[]; - message: string; -} + /** + * @description Gets a team using the team's \`slug\`. GitHub generates the \`slug\` from the team \`name\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsGetByName + * @summary Get a team by name + * @request GET:/orgs/{org}/teams/{team_slug} + */ + teamsGetByName: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Validation Error Simple - * Validation Error Simple - */ -export interface ValidationErrorSimple { - documentation_url: string; - errors?: string[]; - message: string; -} + /** + * @description To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsUpdateInOrg + * @summary Update a team + * @request PATCH:/orgs/{org}/teams/{team_slug} + */ + teamsUpdateInOrg: ( + org: string, + teamSlug: string, + data: { + /** The description of the team. */ + description?: string; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: "pull" | "push" | "admin"; + /** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. When a team is nested, the \`privacy\` for parent teams cannot be \`secret\`. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ + privacy?: "secret" | "closed"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** Verification */ -export interface Verification { - payload: string | null; - reason: string; - signature: string | null; - verified: boolean; -} + /** + * @description To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}\`. + * + * @tags teams + * @name TeamsDeleteInOrg + * @summary Delete a team + * @request DELETE:/orgs/{org}/teams/{team_slug} + */ + teamsDeleteInOrg: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}\`, + method: "DELETE", + ...params, + }), -/** - * View Traffic - * View Traffic - */ -export interface ViewTraffic { - /** @example 14850 */ - count: number; - /** @example 3782 */ - uniques: number; - views: Traffic[]; -} + /** + * @description List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions\`. + * + * @tags teams + * @name TeamsListDiscussionsInOrg + * @summary List discussions + * @request GET:/orgs/{org}/teams/{team_slug}/discussions + */ + teamsListDiscussionsInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -/** - * Webhook Configuration - * Configuration object of the webhook - */ -export interface WebhookConfig { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ - content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ - insecure_ssl?: WebhookConfigInsecureSsl; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ - secret?: WebhookConfigSecret; - /** The URL to which the payloads will be delivered. */ - url?: WebhookConfigUrl; -} + /** + * @description Creates a new discussion post on a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions\`. + * + * @tags teams + * @name TeamsCreateDiscussionInOrg + * @summary Create a discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions + */ + teamsCreateDiscussionInOrg: ( + org: string, + teamSlug: string, + data: { + /** The discussion post's body text. */ + body: string; + /** + * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to \`true\` to create a private post. + * @default false + */ + private?: boolean; + /** The discussion post's title. */ + title: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. - * @example ""json"" - */ -export type WebhookConfigContentType = string; + /** + * @description Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsGetDiscussionInOrg + * @summary Get a discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsGetDiscussionInOrg: (org: string, teamSlug: string, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** - * @example ""0"" - */ -export type WebhookConfigInsecureSsl = string; + /** + * @description Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsUpdateDiscussionInOrg + * @summary Update a discussion + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsUpdateDiscussionInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: { + /** The discussion post's body text. */ + body?: string; + /** The discussion post's title. */ + title?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). - * @example ""********"" - */ -export type WebhookConfigSecret = string; + /** + * @description Delete a discussion from a team's page. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}\`. + * + * @tags teams + * @name TeamsDeleteDiscussionInOrg + * @summary Delete a discussion + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + */ + teamsDeleteDiscussionInOrg: (org: string, teamSlug: string, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}\`, + method: "DELETE", + ...params, + }), -/** - * The URL to which the payloads will be delivered. - * @format uri - * @example "https://example.com/webhook" - */ -export type WebhookConfigUrl = string; + /** + * @description List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * + * @tags teams + * @name TeamsListDiscussionCommentsInOrg + * @summary List discussion comments + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + teamsListDiscussionCommentsInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -/** - * Workflow - * A GitHub Actions workflow - */ -export interface Workflow { - /** @example "https://github.com/actions/setup-ruby/workflows/CI/badge.svg" */ - badge_url: string; - /** - * @format date-time - * @example "2019-12-06T14:20:20.000Z" - */ - created_at: string; - /** - * @format date-time - * @example "2019-12-06T14:20:20.000Z" - */ - deleted_at?: string; - /** @example "https://github.com/actions/setup-ruby/blob/master/.github/workflows/ruby.yaml" */ - html_url: string; - /** @example 5 */ - id: number; - /** @example "CI" */ - name: string; - /** @example "MDg6V29ya2Zsb3cxMg==" */ - node_id: string; - /** @example "ruby.yaml" */ - path: string; - /** @example "active" */ - state: "active" | "deleted"; - /** - * @format date-time - * @example "2019-12-06T14:20:20.000Z" - */ - updated_at: string; - /** @example "https://api.github.com/repos/actions/setup-ruby/workflows/5" */ - url: string; -} + /** + * @description Creates a new comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments\`. + * + * @tags teams + * @name TeamsCreateDiscussionCommentInOrg + * @summary Create a discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + */ + teamsCreateDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: { + /** The discussion comment's body text. */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Workflow Run - * An invocation of a workflow - */ -export interface WorkflowRun { - /** - * The URL to the artifacts for the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun/artifacts" - */ - artifacts_url: string; - /** - * The URL to cancel the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/cancel" - */ - cancel_url: string; - /** - * The URL to the associated check suite. - * @example "https://api.github.com/repos/github/hello-world/check-suites/12" - */ - check_suite_url: string; - /** @example "neutral" */ - conclusion: string | null; - /** @format date-time */ - created_at: string; - /** @example "push" */ - event: string; - /** @example "master" */ - head_branch: string | null; - /** Simple Commit */ - head_commit: SimpleCommit; - /** Minimal Repository */ - head_repository: MinimalRepository; - /** @example 5 */ - head_repository_id?: number; - /** - * The SHA of the head commit that points to the version of the worflow being run. - * @example "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" - */ - head_sha: string; - /** @example "https://github.com/github/hello-world/suites/4" */ - html_url: string; - /** - * The ID of the workflow run. - * @example 5 - */ - id: number; - /** - * The URL to the jobs for the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/jobs" - */ - jobs_url: string; - /** - * The URL to download the logs for the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/logs" - */ - logs_url: string; - /** - * The name of the workflow run. - * @example "Build" - */ - name?: string; - /** @example "MDEwOkNoZWNrU3VpdGU1" */ - node_id: string; - pull_requests: PullRequestMinimal[] | null; - /** Minimal Repository */ - repository: MinimalRepository; - /** - * The URL to rerun the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun" - */ - rerun_url: string; - /** - * The auto incrementing run number for the workflow run. - * @example 106 - */ - run_number: number; - /** @example "completed" */ - status: string | null; - /** @format date-time */ - updated_at: string; - /** - * The URL to the workflow run. - * @example "https://api.github.com/repos/github/hello-world/actions/runs/5" - */ - url: string; - /** - * The ID of the parent workflow. - * @example 5 - */ - workflow_id: number; - /** - * The URL to the workflow. - * @example "https://api.github.com/repos/github/hello-world/actions/workflows/main.yaml" - */ - workflow_url: string; -} + /** + * @description Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsGetDiscussionCommentInOrg + * @summary Get a discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsGetDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "GET", + format: "json", + ...params, + }), -/** - * Workflow Run Usage - * Workflow Run Usage - */ -export interface WorkflowRunUsage { - billable: { - MACOS?: { - jobs: number; - total_ms: number; - }; - UBUNTU?: { - jobs: number; - total_ms: number; - }; - WINDOWS?: { - jobs: number; - total_ms: number; - }; - }; - run_duration_ms: number; -} + /** + * @description Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsUpdateDiscussionCommentInOrg + * @summary Update a discussion comment + * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsUpdateDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + data: { + /** The discussion comment's body text. */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -/** - * Workflow Usage - * Workflow Usage - */ -export interface WorkflowUsage { - billable: { - MACOS?: { - total_ms?: number; - }; - UBUNTU?: { - total_ms?: number; - }; - WINDOWS?: { - total_ms?: number; - }; - }; -} + /** + * @description Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}\`. + * + * @tags teams + * @name TeamsDeleteDiscussionCommentInOrg + * @summary Delete a discussion comment + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + */ + teamsDeleteDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "DELETE", + ...params, + }), -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; + /** + * @description List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments/). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentInOrg + * @summary List reactions for a team discussion comment + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + reactionsListForTeamDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} + /** + * @description Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions\`. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentInOrg + * @summary Create reaction for a team discussion comment + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + */ + reactionsCreateForTeamDiscussionCommentInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + data: { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -export type RequestParams = Omit; + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsDeleteForTeamDiscussionComment + * @summary Delete team discussion comment reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id} + */ + reactionsDeleteForTeamDiscussionComment: ( + org: string, + teamSlug: string, + discussionNumber: number, + commentNumber: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} + /** + * @description List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * + * @tags reactions + * @name ReactionsListForTeamDiscussionInOrg + * @summary List reactions for a team discussion + * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + reactionsListForTeamDiscussionInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -export interface HttpResponse extends Response { - data: D; - error: E; -} + /** + * @description Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions\`. + * + * @tags reactions + * @name ReactionsCreateForTeamDiscussionInOrg + * @summary Create reaction for a team discussion + * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + */ + reactionsCreateForTeamDiscussionInOrg: ( + org: string, + teamSlug: string, + discussionNumber: number, + data: { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), -type CancelToken = Symbol | string | number; + /** + * @description **Note:** You can also specify a team or organization with \`team_id\` and \`org_id\` using the route \`DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions/:reaction_id\`. Delete a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags reactions + * @name ReactionsDeleteForTeamDiscussion + * @summary Delete team discussion reaction + * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id} + */ + reactionsDeleteForTeamDiscussion: ( + org: string, + teamSlug: string, + discussionNumber: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/discussions/\${discussionNumber}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} + /** + * @description The return hash contains a \`role\` field which refers to the Organization Invitation role and will be one of the following values: \`direct_member\`, \`admin\`, \`billing_manager\`, \`hiring_manager\`, or \`reinstate\`. If the invitee is not a GitHub member, the \`login\` field in the return hash will be \`null\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/invitations\`. + * + * @tags teams + * @name TeamsListPendingInvitationsInOrg + * @summary List pending team invitations + * @request GET:/orgs/{org}/teams/{team_slug}/invitations + */ + teamsListPendingInvitationsInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/invitations\`, + method: "GET", + query: query, + format: "json", + ...params, + }), -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + /** + * @description Team members will include the members of child teams. To list members in a team, the team must be visible to the authenticated user. + * + * @tags teams + * @name TeamsListMembersInOrg + * @summary List team members + * @request GET:/orgs/{org}/teams/{team_slug}/members + */ + teamsListMembersInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Filters members returned by their role in the team. Can be one of: + * \\* \`member\` - normal members of the team. + * \\* \`maintainer\` - team maintainers. + * \\* \`all\` - all members of the team. + * @default "all" + */ + role?: "member" | "maintainer" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/members\`, + method: "GET", + query: query, + format: "json", + ...params, + }), - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; + /** + * @description Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/memberships/{username}\`. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). + * + * @tags teams + * @name TeamsGetMembershipForUserInOrg + * @summary Get team membership for a user + * @request GET:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsGetMembershipForUserInOrg: (org: string, teamSlug: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "GET", + format: "json", + ...params, + }), - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adds an organization member to a team. An authenticated organization owner or team maintainer can add organization members to a team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." An organization owner can add someone who is not part of the team's organization to a team. When an organization owner adds someone to a team who is not an organization member, this endpoint will send an invitation to the person via email. This newly-created membership will be in the "pending" state until the person accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserInOrg + * @summary Add or update team membership for a user + * @request PUT:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsAddOrUpdateMembershipForUserInOrg: ( + org: string, + teamSlug: string, + username: string, + data: { + /** + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" + */ + role?: "member" | "maintainer"; + }, + params: RequestParams = {}, + ) => + this.request< + TeamMembership, + void | { + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; + } + >({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/memberships/{username}\`. + * + * @tags teams + * @name TeamsRemoveMembershipForUserInOrg + * @summary Remove team membership for a user + * @request DELETE:/orgs/{org}/teams/{team_slug}/memberships/{username} + */ + teamsRemoveMembershipForUserInOrg: (org: string, teamSlug: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } + /** + * @description Lists the organization projects for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects\`. + * + * @tags teams + * @name TeamsListProjectsInOrg + * @summary List team projects + * @request GET:/orgs/{org}/teams/{team_slug}/projects + */ + teamsListProjectsInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects\`, + method: "GET", + query: query, + format: "json", + ...params, + }), - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } + /** + * @description Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsCheckPermissionsForProjectInOrg + * @summary Check team permissions for a project + * @request GET:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsCheckPermissionsForProjectInOrg: ( + org: string, + teamSlug: string, + projectId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "GET", + format: "json", + ...params, + }), - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } + /** + * @description Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsInOrg + * @summary Add or update team project permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsAddOrUpdateProjectPermissionsInOrg: ( + org: string, + teamSlug: string, + projectId: number, + data: { + /** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ + permission?: "read" | "write" | "admin"; + }, + params: RequestParams = {}, + ) => + this.request< + void, + { + documentation_url?: string; + message?: string; + } + >({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } + /** + * @description Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. This endpoint removes the project from the team, but does not delete the project. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/projects/{project_id}\`. + * + * @tags teams + * @name TeamsRemoveProjectInOrg + * @summary Remove a project from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/projects/{project_id} + */ + teamsRemoveProjectInOrg: (org: string, teamSlug: string, projectId: number, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/projects/\${projectId}\`, + method: "DELETE", + ...params, + }), - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } + /** + * @description Lists a team's repositories visible to the authenticated user. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos\`. + * + * @tags teams + * @name TeamsListReposInOrg + * @summary List team repositories + * @request GET:/orgs/{org}/teams/{team_slug}/repos + */ + teamsListReposInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos\`, + method: "GET", + query: query, + format: "json", + ...params, + }), - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; + /** + * @description Checks whether a team has \`admin\`, \`push\`, \`maintain\`, \`triage\`, or \`pull\` permission for a repository. Repositories inherited through a parent team will also be checked. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`application/vnd.github.v3.repository+json\` accept header. If a team doesn't have permission for the repository, you will receive a \`404 Not Found\` response status. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * + * @tags teams + * @name TeamsCheckPermissionsForRepoInOrg + * @summary Check team permissions for a repository + * @request GET:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsCheckPermissionsForRepoInOrg: ( + org: string, + teamSlug: string, + owner: string, + repo: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "GET", + format: "json", + ...params, + }), - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), + /** + * @description To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PUT /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. For more information about the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". + * + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsInOrg + * @summary Add or update team repository permissions + * @request PUT:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsAddOrUpdateRepoPermissionsInOrg: ( + org: string, + teamSlug: string, + owner: string, + repo: string, + data: { + /** + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * \\* \`maintain\` - team members can manage the repository without access to sensitive or destructive actions. Recommended for project managers. Only applies to repositories owned by organizations. + * \\* \`triage\` - team members can proactively manage issues and pull requests without write access. Recommended for contributors who triage a repository. Only applies to repositories owned by organizations. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. + */ + permission?: "pull" | "push" | "admin" | "maintain" | "triage"; }, - }; - } + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } + /** + * @description If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. This does not delete the repository, it just removes it from the team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`DELETE /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}\`. + * + * @tags teams + * @name TeamsRemoveRepoInOrg + * @summary Remove a repository from a team + * @request DELETE:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + */ + teamsRemoveRepoInOrg: (org: string, teamSlug: string, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/repos/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * + * @tags teams + * @name TeamsListIdpGroupsInOrg + * @summary List IdP groups for a team + * @request GET:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + teamsListIdpGroupsInOrg: (org: string, teamSlug: string, params: RequestParams = {}) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/team-sync/group-mappings\`, + method: "GET", + format: "json", + ...params, + }), - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); + /** + * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`PATCH /organizations/{org_id}/team/{team_id}/team-sync/group-mappings\`. + * + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsInOrg + * @summary Create or update IdP group connections + * @request PATCH:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + */ + teamsCreateOrUpdateIdpGroupConnectionsInOrg: ( + org: string, + teamSlug: string, + data: { + /** The IdP groups you want to connect to a GitHub team. When updating, the new \`groups\` object will replace the original one. You must include any existing groups that you don't want to remove. */ + groups: { + /** Description of the IdP group. */ + group_description: string; + /** ID of the IdP group. */ + group_id: string; + /** Name of the IdP group. */ + group_name: string; + }[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/team-sync/group-mappings\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } + /** + * @description Lists the child teams of the team specified by \`{team_slug}\`. **Note:** You can also specify a team by \`org_id\` and \`team_id\` using the route \`GET /organizations/{org_id}/team/{team_id}/teams\`. + * + * @tags teams + * @name TeamsListChildInOrg + * @summary List child teams + * @request GET:/orgs/{org}/teams/{team_slug}/teams + */ + teamsListChildInOrg: ( + org: string, + teamSlug: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/orgs/\${org}/teams/\${teamSlug}/teams\`, + method: "GET", + query: query, + format: "json", + ...params, + }), }; + projects = { + /** + * No description + * + * @tags projects + * @name ProjectsGetCard + * @summary Get a project card + * @request GET:/projects/columns/cards/{card_id} + */ + projectsGetCard: (cardId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "GET", + format: "json", + ...params, + }), - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + /** + * No description + * + * @tags projects + * @name ProjectsUpdateCard + * @summary Update an existing project card + * @request PATCH:/projects/columns/cards/{card_id} + */ + projectsUpdateCard: ( + cardId: number, + data: { + /** + * Whether or not the card is archived + * @example false + */ + archived?: boolean; + /** + * The project card's note + * @example "Update all gems" + */ + note?: string | null; }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; + params: RequestParams = {}, + ) => + this.request({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); + /** + * No description + * + * @tags projects + * @name ProjectsDeleteCard + * @summary Delete a project card + * @request DELETE:/projects/columns/cards/{card_id} + */ + projectsDeleteCard: (cardId: number, params: RequestParams = {}) => + this.request< + void, + | BasicError + | { + documentation_url?: string; + errors?: string[]; + message?: string; + } + >({ + path: \`/projects/columns/cards/\${cardId}\`, + method: "DELETE", + ...params, + }), - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } + /** + * No description + * + * @tags projects + * @name ProjectsMoveCard + * @summary Move a project card + * @request POST:/projects/columns/cards/{card_id}/moves + */ + projectsMoveCard: ( + cardId: number, + data: { + /** + * The unique identifier of the column the card should be moved to + * @example 42 + */ + column_id?: number; + /** + * The position of the card in a column + * @pattern ^(?:top|bottom|after:\\d+)$ + * @example "bottom" + */ + position: string; + }, + params: RequestParams = {}, + ) => + this.request< + object, + | BasicError + | { + documentation_url?: string; + errors?: { + code?: string; + field?: string; + message?: string; + resource?: string; + }[]; + message?: string; + } + | ValidationError + | { + code?: string; + documentation_url?: string; + errors?: { + code?: string; + message?: string; + }[]; + message?: string; + } + >({ + path: \`/projects/columns/cards/\${cardId}/moves\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), - if (!response.ok) throw data; - return data; - }); - }; -} + /** + * No description + * + * @tags projects + * @name ProjectsGetColumn + * @summary Get a project column + * @request GET:/projects/columns/{column_id} + */ + projectsGetColumn: (columnId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "GET", + format: "json", + ...params, + }), -/** - * @title GitHub v3 REST API - * @version 1.1.4 - * @license MIT (https://spdx.org/licenses/MIT) - * @termsOfService https://docs.github.com/articles/github-terms-of-service - * @baseUrl https://api.github.com - * @externalDocs https://docs.github.com/rest/ - * @contact Support (https://support.github.com/contact) - * - * GitHub's v3 REST API. - */ -export class Api extends HttpClient { - /** - * @description Get Hypermedia links to resources accessible in GitHub's REST API - * - * @tags meta - * @name MetaRoot - * @summary GitHub API Root - * @request GET:/ - */ - metaRoot = (params: RequestParams = {}) => - this.request< - { - /** @format uri */ - authorizations_url: string; - /** @format uri */ - code_search_url: string; - /** @format uri */ - commit_search_url: string; - /** @format uri */ - current_user_authorizations_html_url: string; - /** @format uri */ - current_user_repositories_url: string; - /** @format uri */ - current_user_url: string; - /** @format uri */ - emails_url: string; - /** @format uri */ - emojis_url: string; - /** @format uri */ - events_url: string; - /** @format uri */ - feeds_url: string; - /** @format uri */ - followers_url: string; - /** @format uri */ - following_url: string; - /** @format uri */ - gists_url: string; - /** @format uri */ - hub_url: string; - /** @format uri */ - issue_search_url: string; - /** @format uri */ - issues_url: string; - /** @format uri */ - keys_url: string; - /** @format uri */ - label_search_url: string; - /** @format uri */ - notifications_url: string; - /** @format uri */ - organization_repositories_url: string; - /** @format uri */ - organization_teams_url: string; - /** @format uri */ - organization_url: string; - /** @format uri */ - public_gists_url: string; - /** @format uri */ - rate_limit_url: string; - /** @format uri */ - repository_search_url: string; - /** @format uri */ - repository_url: string; - /** @format uri */ - starred_gists_url: string; - /** @format uri */ - starred_url: string; - /** @format uri */ - topic_search_url?: string; - /** @format uri */ - user_organizations_url: string; - /** @format uri */ - user_repositories_url: string; - /** @format uri */ - user_search_url: string; - /** @format uri */ - user_url: string; + /** + * No description + * + * @tags projects + * @name ProjectsUpdateColumn + * @summary Update an existing project column + * @request PATCH:/projects/columns/{column_id} + */ + projectsUpdateColumn: ( + columnId: number, + data: { + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; }, - any - >({ - path: `/`, - method: "GET", - format: "json", - ...params, - }); + params: RequestParams = {}, + ) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsDeleteColumn + * @summary Delete a project column + * @request DELETE:/projects/columns/{column_id} + */ + projectsDeleteColumn: (columnId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/columns/\${columnId}\`, + method: "DELETE", + ...params, + }), - app = { /** - * @description Returns the GitHub App associated with the authentication credentials used. To see how many app installations are associated with this GitHub App, see the `installations_count` in the response. For more details about your app's installations, see the "[List installations for the authenticated app](https://docs.github.com/rest/reference/apps#list-installations-for-the-authenticated-app)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * No description * - * @tags apps - * @name AppsGetAuthenticated - * @summary Get the authenticated app - * @request GET:/app + * @tags projects + * @name ProjectsListCards + * @summary List project cards + * @request GET:/projects/columns/{column_id}/cards */ - appsGetAuthenticated: (params: RequestParams = {}) => - this.request({ - path: `/app`, + projectsListCards: ( + columnId: number, + query?: { + /** + * Filters the project cards that are returned by the card's state. Can be one of \`all\`,\`archived\`, or \`not_archived\`. + * @default "not_archived" + */ + archived_state?: "all" | "archived" | "not_archived"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/projects/columns/\${columnId}/cards\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Returns the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @description **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. * - * @tags apps - * @name AppsGetWebhookConfigForApp - * @summary Get a webhook configuration for an app - * @request GET:/app/hook/config + * @tags projects + * @name ProjectsCreateCard + * @summary Create a project card + * @request POST:/projects/columns/{column_id}/cards */ - appsGetWebhookConfigForApp: (params: RequestParams = {}) => - this.request({ - path: `/app/hook/config`, + projectsCreateCard: ( + columnId: number, + data: + | { + /** + * The project card's note + * @example "Update all gems" + */ + note: string | null; + } + | { + /** + * The unique identifier of the content associated with the card + * @example 42 + */ + content_id: number; + /** + * The piece of content associated with the card + * @example "PullRequest" + */ + content_type: string; + }, + params: RequestParams = {}, + ) => + this.request< + ProjectCard, + | BasicError + | (ValidationError | ValidationErrorSimple) + | { + code?: string; + documentation_url?: string; + errors?: { + code?: string; + message?: string; + }[]; + message?: string; + } + >({ + path: \`/projects/columns/\${columnId}/cards\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags projects + * @name ProjectsMoveColumn + * @summary Move a project column + * @request POST:/projects/columns/{column_id}/moves + */ + projectsMoveColumn: ( + columnId: number, + data: { + /** + * The position of the column in a project + * @pattern ^(?:first|last|after:\\d+)$ + * @example "last" + */ + position: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/projects/columns/\${columnId}/moves\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Gets a project by its \`id\`. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. + * + * @tags projects + * @name ProjectsGet + * @summary Get a project + * @request GET:/projects/{project_id} + */ + projectsGet: (projectId: number, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${projectId}\`, method: "GET", format: "json", ...params, }), /** - * @description Updates the webhook configuration for a GitHub App. For more information about configuring a webhook for your app, see "[Creating a GitHub App](/developers/apps/creating-a-github-app)." You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @description Updates a project board's information. Returns a \`404 Not Found\` status if projects are disabled. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. * - * @tags apps - * @name AppsUpdateWebhookConfigForApp - * @summary Update a webhook configuration for an app - * @request PATCH:/app/hook/config + * @tags projects + * @name ProjectsUpdate + * @summary Update a project + * @request PATCH:/projects/{project_id} */ - appsUpdateWebhookConfigForApp: ( + projectsUpdate: ( + projectId: number, data: { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ - content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ - insecure_ssl?: WebhookConfigInsecureSsl; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ - secret?: WebhookConfigSecret; - /** The URL to which the payloads will be delivered. */ - url?: WebhookConfigUrl; + /** + * Body of the project + * @example "This project represents the sprint of the first week in January" + */ + body?: string | null; + /** + * Name of the project + * @example "Week One Sprint" + */ + name?: string; + /** The baseline permission that all organization members have on this project */ + organization_permission?: "read" | "write" | "admin" | "none"; + /** Whether or not this project can be seen by everyone. */ + private?: boolean; + /** + * State of the project; either 'open' or 'closed' + * @example "open" + */ + state?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/app/hook/config`, + this.request< + Project, + | BasicError + | { + documentation_url?: string; + errors?: string[]; + message?: string; + } + | void + | ValidationErrorSimple + >({ + path: \`/projects/\${projectId}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -9005,16 +22965,47 @@ export class Api extends HttpClient + this.request< + void, + | BasicError + | { + documentation_url?: string; + errors?: string[]; + message?: string; + } + >({ + path: \`/projects/\${projectId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project \`admin\` to list collaborators. + * + * @tags projects + * @name ProjectsListCollaborators + * @summary List project collaborators + * @request GET:/projects/{project_id}/collaborators + */ + projectsListCollaborators: ( + projectId: number, query?: { - outdated?: string; + /** + * Filters the collaborators by their affiliation. Can be one of: + * \\* \`outside\`: Outside collaborators of a project that are not a member of the project's organization. + * \\* \`direct\`: Collaborators with permissions to a project, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" + */ + affiliation?: "outside" | "direct" | "all"; /** * Page number of the results to fetch. * @default 1 @@ -9025,82 +23016,48 @@ export class Api extends HttpClient - this.request({ - path: `/app/installations`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Enables an authenticated GitHub App to find an installation's information using the installation id. The installation's account type (`target_type`) will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. - * - * @tags apps - * @name AppsGetInstallation - * @summary Get an installation for the authenticated app - * @request GET:/app/installations/{installation_id} - */ - appsGetInstallation: (installationId: number, params: RequestParams = {}) => this.request< - Installation, + SimpleUser[], | BasicError | { documentation_url: string; message: string; } + | ValidationError >({ - path: `/app/installations/${installationId}`, + path: \`/projects/\${projectId}/collaborators\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Uninstalls a GitHub App on a user, organization, or business account. If you prefer to temporarily suspend an app's access to your account's resources, then we recommend the "[Suspend an app installation](https://docs.github.com/v3/apps/#suspend-an-app-installation)" endpoint. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. - * - * @tags apps - * @name AppsDeleteInstallation - * @summary Delete an installation for the authenticated app - * @request DELETE:/app/installations/{installation_id} - */ - appsDeleteInstallation: (installationId: number, params: RequestParams = {}) => - this.request({ - path: `/app/installations/${installationId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Creates an installation access token that enables a GitHub App to make authenticated API requests for the app's installation on an organization or individual account. Installation tokens expire one hour from the time you create them. Using an expired token produces a status code of `401 - Unauthorized`, and requires creating a new installation token. By default the installation token has access to all repositories that the installation can access. To restrict the access to specific repositories, you can provide the `repository_ids` when creating the token. When you omit `repository_ids`, the response does not contain the `repositories` key. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @description Adds a collaborator to an organization project and sets their permission level. You must be an organization owner or a project \`admin\` to add a collaborator. * - * @tags apps - * @name AppsCreateInstallationAccessToken - * @summary Create an installation access token for an app - * @request POST:/app/installations/{installation_id}/access_tokens + * @tags projects + * @name ProjectsAddCollaborator + * @summary Add project collaborator + * @request PUT:/projects/{project_id}/collaborators/{username} */ - appsCreateInstallationAccessToken: ( - installationId: number, + projectsAddCollaborator: ( + projectId: number, + username: string, data: { - /** The permissions granted to the user-to-server access token. */ - permissions?: AppPermissions; - /** List of repository names that the token should have access to */ - repositories?: string[]; /** - * List of repository IDs that the token should have access to - * @example [1] + * The permission to grant the collaborator. + * @default "write" + * @example "write" */ - repository_ids?: number[]; + permission?: "read" | "write" | "admin"; }, params: RequestParams = {}, ) => this.request< - InstallationToken, + void, | BasicError | { documentation_url: string; @@ -9108,81 +23065,70 @@ export class Api extends HttpClient({ - path: `/app/installations/${installationId}/access_tokens`, - method: "POST", + path: \`/projects/\${projectId}/collaborators/\${username}\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Suspends a GitHub App on a user, organization, or business account, which blocks the app from accessing the account's resources. When a GitHub App is suspended, the app's access to the GitHub API or webhook events is blocked for that account. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. - * - * @tags apps - * @name AppsSuspendInstallation - * @summary Suspend an app installation - * @request PUT:/app/installations/{installation_id}/suspended - */ - appsSuspendInstallation: (installationId: number, params: RequestParams = {}) => - this.request({ - path: `/app/installations/${installationId}/suspended`, - method: "PUT", ...params, }), /** - * @description **Note:** Suspending a GitHub App installation is currently in beta and subject to change. Before you can suspend a GitHub App, the app owner must enable suspending installations for the app by opting-in to the beta. For more information, see "[Suspending a GitHub App installation](https://docs.github.com/apps/managing-github-apps/suspending-a-github-app-installation/)." Removes a GitHub App installation suspension. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @description Removes a collaborator from an organization project. You must be an organization owner or a project \`admin\` to remove a collaborator. * - * @tags apps - * @name AppsUnsuspendInstallation - * @summary Unsuspend an app installation - * @request DELETE:/app/installations/{installation_id}/suspended + * @tags projects + * @name ProjectsRemoveCollaborator + * @summary Remove user as a collaborator + * @request DELETE:/projects/{project_id}/collaborators/{username} */ - appsUnsuspendInstallation: (installationId: number, params: RequestParams = {}) => - this.request({ - path: `/app/installations/${installationId}/suspended`, + projectsRemoveCollaborator: (projectId: number, username: string, params: RequestParams = {}) => + this.request< + void, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/projects/\${projectId}/collaborators/\${username}\`, method: "DELETE", ...params, }), - }; - appManifests = { + /** - * @description Use this endpoint to complete the handshake necessary when implementing the [GitHub App Manifest flow](https://docs.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/). When you create a GitHub App with the manifest flow, you receive a temporary `code` used to retrieve the GitHub App's `id`, `pem` (private key), and `webhook_secret`. + * @description Returns the collaborator's permission level for an organization project. Possible values for the \`permission\` key: \`admin\`, \`write\`, \`read\`, \`none\`. You must be an organization owner or a project \`admin\` to review a user's permission level. * - * @tags apps - * @name AppsCreateFromManifest - * @summary Create a GitHub App from a manifest - * @request POST:/app-manifests/{code}/conversions + * @tags projects + * @name ProjectsGetPermissionForUser + * @summary Get project permission for a user + * @request GET:/projects/{project_id}/collaborators/{username}/permission */ - appsCreateFromManifest: (code: string, params: RequestParams = {}) => + projectsGetPermissionForUser: (projectId: number, username: string, params: RequestParams = {}) => this.request< - Integration & { - client_id: string; - client_secret: string; - pem: string; - webhook_secret: string; - [key: string]: any; - }, - BasicError | ValidationErrorSimple + RepositoryCollaboratorPermission, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError >({ - path: `/app-manifests/${code}/conversions`, - method: "POST", + path: \`/projects/\${projectId}/collaborators/\${username}/permission\`, + method: "GET", format: "json", ...params, }), - }; - applications = { + /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the [list your authorizations](https://docs.github.com/rest/reference/oauth-authorizations#list-your-authorizations) API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). The `scopes` returned are the union of scopes authorized for the application. For example, if an application has one token with `repo` scope and another token with `user` scope, the grant will return `["repo", "user"]`. + * No description * - * @tags oauth-authorizations - * @name OauthAuthorizationsListGrants - * @summary List your grants - * @request GET:/applications/grants - * @deprecated + * @tags projects + * @name ProjectsListColumns + * @summary List project columns + * @request GET:/projects/{project_id}/columns */ - oauthAuthorizationsListGrants: ( + projectsListColumns: ( + projectId: number, query?: { /** * Page number of the results to fetch. @@ -9197,8 +23143,8 @@ export class Api extends HttpClient - this.request({ - path: `/applications/grants`, + this.request({ + path: \`/projects/\${projectId}/columns\`, method: "GET", query: query, format: "json", @@ -9206,121 +23152,169 @@ export class Api extends HttpClient - this.request({ - path: `/applications/grants/${grantId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). - * - * @tags oauth-authorizations - * @name OauthAuthorizationsDeleteGrant - * @summary Delete a grant - * @request DELETE:/applications/grants/{grant_id} - * @deprecated - */ - oauthAuthorizationsDeleteGrant: (grantId: number, params: RequestParams = {}) => - this.request({ - path: `/applications/grants/${grantId}`, - method: "DELETE", - ...params, - }), - - /** - * @description OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. You must also provide a valid OAuth `access_token` as an input parameter and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the application authorizations settings screen within GitHub](https://github.com/settings/applications#authorized). + * No description * - * @tags apps - * @name AppsDeleteAuthorization - * @summary Delete an app authorization - * @request DELETE:/applications/{client_id}/grant + * @tags projects + * @name ProjectsCreateColumn + * @summary Create a project column + * @request POST:/projects/{project_id}/columns */ - appsDeleteAuthorization: ( - clientId: string, + projectsCreateColumn: ( + projectId: number, data: { - /** The OAuth access token used to authenticate to the GitHub API. */ - access_token?: string; + /** + * Name of the project column + * @example "Remaining tasks" + */ + name: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/applications/${clientId}/grant`, - method: "DELETE", + this.request({ + path: \`/projects/\${projectId}/columns\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), - + }; + rateLimit = { /** - * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain `access_token` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving `access_token` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a grant for their OAuth application and a specific user. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. You must also provide a valid token as `:access_token` and the grant for the token's owner will be deleted. Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for the user. Once deleted, the application will have no access to the user's account and will no longer be listed on [the Applications settings page under "Authorized OAuth Apps" on GitHub](https://github.com/settings/applications#authorized). + * @description **Note:** Accessing this endpoint does not count against your REST API rate limit. **Note:** The \`rate\` object is deprecated. If you're writing new API client code or updating existing code, you should use the \`core\` object instead of the \`rate\` object. The \`core\` object contains the same information that is present in the \`rate\` object. * - * @tags apps - * @name AppsRevokeGrantForApplication - * @summary Revoke a grant for an application - * @request DELETE:/applications/{client_id}/grants/{access_token} + * @tags rate-limit + * @name RateLimitGet + * @summary Get rate limit status for the authenticated user + * @request GET:/rate_limit + */ + rateLimitGet: (params: RequestParams = {}) => + this.request({ + path: \`/rate_limit\`, + method: "GET", + format: "json", + ...params, + }), + }; + reactions = { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Reactions API. We recommend migrating your existing code to use the new delete reactions endpoints. For more information, see this [blog post](https://developer.github.com/changes/2020-02-26-new-delete-reactions-endpoints/). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), when deleting a [team discussion](https://docs.github.com/rest/reference/teams#discussions) or [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). + * + * @tags reactions + * @name ReactionsDeleteLegacy + * @summary Delete a reaction (Legacy) + * @request DELETE:/reactions/{reaction_id} * @deprecated */ - appsRevokeGrantForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => - this.request({ - path: `/applications/${clientId}/grants/${accessToken}`, + reactionsDeleteLegacy: (reactionId: number, params: RequestParams = {}) => + this.request< + void, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/reactions/\${reactionId}\`, method: "DELETE", ...params, }), - + }; + repos = { /** - * @description OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) to use this endpoint, where the username is the OAuth application `client_id` and the password is its `client_secret`. Invalid tokens will return `404 NOT FOUND`. + * @description When you pass the \`scarlet-witch-preview\` media type, requests to get a repository will also return the repository's code of conduct if it can be detected from the repository's code of conduct file. The \`parent\` and \`source\` objects are present when the repository is a fork. \`parent\` is the repository this repository was forked from, \`source\` is the ultimate source for the network. * - * @tags apps - * @name AppsCheckToken - * @summary Check a token - * @request POST:/applications/{client_id}/token + * @tags repos + * @name ReposGet + * @summary Get a repository + * @request GET:/repos/{owner}/{repo} */ - appsCheckToken: ( - clientId: string, - data: { - /** The access_token of the OAuth application. */ - access_token: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/applications/${clientId}/token`, - method: "POST", - body: data, - type: ContentType.Json, + reposGet: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}\`, + method: "GET", format: "json", ...params, }), /** - * @description OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`. + * @description **Note**: To edit a repository's topics, use the [Replace all repository topics](https://docs.github.com/rest/reference/repos#replace-all-repository-topics) endpoint. * - * @tags apps - * @name AppsResetToken - * @summary Reset a token - * @request PATCH:/applications/{client_id}/token + * @tags repos + * @name ReposUpdate + * @summary Update a repository + * @request PATCH:/repos/{owner}/{repo} */ - appsResetToken: ( - clientId: string, + reposUpdate: ( + owner: string, + repo: string, data: { - /** The access_token of the OAuth application. */ - access_token: string; + /** + * Either \`true\` to allow merging pull requests with a merge commit, or \`false\` to prevent merging pull requests with merge commits. + * @default true + */ + allow_merge_commit?: boolean; + /** + * Either \`true\` to allow rebase-merging pull requests, or \`false\` to prevent rebase-merging. + * @default true + */ + allow_rebase_merge?: boolean; + /** + * Either \`true\` to allow squash-merging pull requests, or \`false\` to prevent squash-merging. + * @default true + */ + allow_squash_merge?: boolean; + /** + * \`true\` to archive this repository. **Note**: You cannot unarchive repositories through the API. + * @default false + */ + archived?: boolean; + /** Updates the default branch for this repository. */ + default_branch?: string; + /** + * Either \`true\` to allow automatically deleting head branches when pull requests are merged, or \`false\` to prevent automatic deletion. + * @default false + */ + delete_branch_on_merge?: boolean; + /** A short description of the repository. */ + description?: string; + /** + * Either \`true\` to enable issues for this repository or \`false\` to disable them. + * @default true + */ + has_issues?: boolean; + /** + * Either \`true\` to enable projects for this repository or \`false\` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is \`false\`, and if you pass \`true\`, the API returns an error. + * @default true + */ + has_projects?: boolean; + /** + * Either \`true\` to enable the wiki for this repository or \`false\` to disable it. + * @default true + */ + has_wiki?: boolean; + /** A URL with more information about the repository. */ + homepage?: string; + /** + * Either \`true\` to make this repo available as a template repository or \`false\` to prevent it. + * @default false + */ + is_template?: boolean; + /** The name of the repository. */ + name?: string; + /** + * Either \`true\` to make the repository private or \`false\` to make it public. Default: \`false\`. + * **Note**: You will get a \`422\` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a \`422\` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. + * @default false + */ + private?: boolean; + /** Can be \`public\` or \`private\`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, \`visibility\` can also be \`internal\`. The \`visibility\` parameter overrides the \`private\` parameter when you use both along with the \`nebula-preview\` preview header. */ + visibility?: "public" | "private" | "visibility" | "internal"; }, params: RequestParams = {}, ) => - this.request({ - path: `/applications/${clientId}/token`, + this.request({ + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -9329,550 +23323,443 @@ export class Api extends HttpClient - this.request({ - path: `/applications/${clientId}/token`, + reposDelete: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + void, + | { + documentation_url?: string; + message?: string; + } + | BasicError + >({ + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", - body: data, - type: ContentType.Json, ...params, }), /** - * @description Exchanges a non-repository scoped user-to-server OAuth access token for a repository scoped user-to-server OAuth access token. You can specify which repositories the token can access and which permissions are granted to the token. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`. + * @description Lists all artifacts for a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags apps - * @name AppsScopeToken - * @summary Create a scoped access token - * @request POST:/applications/{client_id}/token/scoped + * @tags actions + * @name ActionsListArtifactsForRepo + * @summary List artifacts for a repository + * @request GET:/repos/{owner}/{repo}/actions/artifacts */ - appsScopeToken: ( - clientId: string, - data: { - /** - * **Required.** The OAuth access token used to authenticate to the GitHub API. - * @example "e72e16c7e42f292c6912e7710c838347ae178b4a" - */ - access_token?: string; - /** The permissions granted to the user-to-server access token. */ - permissions?: AppPermissions; - /** The list of repository IDs to scope the user-to-server access token to. `repositories` may not be specified if `repository_ids` is specified. */ - repositories?: string[]; - /** - * The list of repository names to scope the user-to-server access token to. `repository_ids` may not be specified if `repositories` is specified. - * @example [1] - */ - repository_ids?: number[]; + actionsListArtifactsForRepo: ( + owner: string, + repo: string, + query?: { /** - * The name of the user or organization to scope the user-to-server access token to. **Required** unless `target_id` is specified. - * @example "octocat" + * Page number of the results to fetch. + * @default 1 */ - target?: string; + page?: number; /** - * The ID of the user or organization to scope the user-to-server access token to. **Required** unless `target` is specified. - * @example 1 + * Results per page (max 100) + * @default 30 */ - target_id?: number; + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/applications/${clientId}/token/scoped`, - method: "POST", - body: data, - type: ContentType.Json, + this.request< + { + artifacts: Artifact[]; + total_count: number; + }, + any + >({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain `access_token` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving `access_token` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use a special API method for checking OAuth token validity without exceeding the normal rate limits for failed login attempts. Authentication works differently with this particular endpoint. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`. + * @description Gets a specific artifact for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags apps - * @name AppsCheckAuthorization - * @summary Check an authorization - * @request GET:/applications/{client_id}/tokens/{access_token} - * @deprecated + * @tags actions + * @name ActionsGetArtifact + * @summary Get an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} */ - appsCheckAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => - this.request({ - path: `/applications/${clientId}/tokens/${accessToken}`, + actionsGetArtifact: (owner: string, repo: string, artifactId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}\`, method: "GET", format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain `access_token` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving `access_token` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth applications can use this API method to reset a valid OAuth token without end-user involvement. Applications must save the "token" property in the response because changes take effect immediately. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. Invalid tokens will return `404 NOT FOUND`. + * @description Deletes an artifact for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. * - * @tags apps - * @name AppsResetAuthorization - * @summary Reset an authorization - * @request POST:/applications/{client_id}/tokens/{access_token} - * @deprecated + * @tags actions + * @name ActionsDeleteArtifact + * @summary Delete an artifact + * @request DELETE:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} */ - appsResetAuthorization: (clientId: string, accessToken: string, params: RequestParams = {}) => - this.request({ - path: `/applications/${clientId}/tokens/${accessToken}`, - method: "POST", - format: "json", + actionsDeleteArtifact: (owner: string, repo: string, artifactId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}\`, + method: "DELETE", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue OAuth endpoints that contain `access_token` in the path parameter. We have introduced new endpoints that allow you to securely manage tokens for OAuth Apps by moving `access_token` to the request body. For more information, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/). OAuth application owners can revoke a single token for an OAuth application. You must use [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) when accessing this endpoint, using the OAuth application's `client_id` and `client_secret` as the username and password. + * @description Gets a redirect URL to download an archive for a repository. This URL expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. The \`:archive_format\` must be \`zip\`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags apps - * @name AppsRevokeAuthorizationForApplication - * @summary Revoke an authorization for an application - * @request DELETE:/applications/{client_id}/tokens/{access_token} - * @deprecated + * @tags actions + * @name ActionsDownloadArtifact + * @summary Download an artifact + * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format} */ - appsRevokeAuthorizationForApplication: (clientId: string, accessToken: string, params: RequestParams = {}) => - this.request({ - path: `/applications/${clientId}/tokens/${accessToken}`, - method: "DELETE", + actionsDownloadArtifact: ( + owner: string, + repo: string, + artifactId: number, + archiveFormat: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/artifacts/\${artifactId}/\${archiveFormat}\`, + method: "GET", ...params, }), - }; - apps = { + /** - * @description **Note**: The `:app_slug` is just the URL-friendly name of your GitHub App. You can find this on the settings page for your GitHub App (e.g., `https://github.com/settings/apps/:app_slug`). If the GitHub App you specify is public, you can access this endpoint without authenticating. If the GitHub App you specify is private, you must authenticate with a [personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) or an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @description Gets a specific job in a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags apps - * @name AppsGetBySlug - * @summary Get an app - * @request GET:/apps/{app_slug} + * @tags actions + * @name ActionsGetJobForWorkflowRun + * @summary Get a job for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id} */ - appsGetBySlug: (appSlug: string, params: RequestParams = {}) => - this.request< - Integration, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/apps/${appSlug}`, + actionsGetJobForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/jobs/\${jobId}\`, method: "GET", format: "json", ...params, }), - }; - authorizations = { + /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @description Gets a redirect URL to download a plain text file of logs for a workflow job. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags oauth-authorizations - * @name OauthAuthorizationsListAuthorizations - * @summary List your authorizations - * @request GET:/authorizations - * @deprecated + * @tags actions + * @name ActionsDownloadJobLogsForWorkflowRun + * @summary Download job logs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id}/logs */ - oauthAuthorizationsListAuthorizations: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/authorizations`, + actionsDownloadJobLogsForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/jobs/\${jobId}/logs\`, + method: "GET", + ...params, + }), + + /** + * @description Gets the GitHub Actions permissions policy for a repository, including whether GitHub Actions is enabled and the actions allowed to run in the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsGetGithubActionsPermissionsRepository + * @summary Get GitHub Actions permissions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions + */ + actionsGetGithubActionsPermissionsRepository: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates OAuth tokens using [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use `fingerprint` to differentiate between them. You can also create tokens on GitHub from the [personal access tokens settings](https://github.com/settings/tokens) page. Read more about these tokens in [the GitHub Help documentation](https://help.github.com/articles/creating-an-access-token-for-command-line-use). Organizations that enforce SAML SSO require personal access tokens to be allowed. Read more about allowing tokens in [the GitHub Help documentation](https://help.github.com/articles/about-identity-and-access-management-with-saml-single-sign-on). + * @description Sets the GitHub Actions permissions policy for enabling GitHub Actions and allowed actions in the repository. If the repository belongs to an organization or enterprise that has set restrictive permissions at the organization or enterprise levels, such as \`allowed_actions\` to \`selected\` actions, then you cannot override them for the repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. * - * @tags oauth-authorizations - * @name OauthAuthorizationsCreateAuthorization - * @summary Create a new authorization - * @request POST:/authorizations - * @deprecated + * @tags actions + * @name ActionsSetGithubActionsPermissionsRepository + * @summary Set GitHub Actions permissions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions */ - oauthAuthorizationsCreateAuthorization: ( + actionsSetGithubActionsPermissionsRepository: ( + owner: string, + repo: string, data: { - /** - * The OAuth app client key for which to create the token. - * @maxLength 20 - */ - client_id?: string; - /** - * The OAuth app client secret for which to create the token. - * @maxLength 40 - */ - client_secret?: string; - /** A unique string to distinguish an authorization from others created for the same client ID and user. */ - fingerprint?: string; - /** - * A note to remind you what the OAuth token is for. - * @example "Update all gems" - */ - note?: string; - /** A URL to remind you what app the OAuth token is for. */ - note_url?: string; - /** - * A list of scopes that this authorization is in. - * @example ["public_repo","user"] - */ - scopes?: string[] | null; + /** The permissions policy that controls the actions that are allowed to run. Can be one of: \`all\`, \`local_only\`, or \`selected\`. */ + allowed_actions?: AllowedActions; + /** Whether GitHub Actions is enabled on the repository. */ + enabled: ActionsEnabled; }, params: RequestParams = {}, ) => - this.request({ - path: `/authorizations`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions\`, + method: "PUT", body: data, type: ContentType.Json, + ...params, + }), + + /** + * @description Gets the settings for selected actions that are allowed in a repository. To use this endpoint, the repository policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. + * + * @tags actions + * @name ActionsGetAllowedActionsRepository + * @summary Get allowed actions for a repository + * @request GET:/repos/{owner}/{repo}/actions/permissions/selected-actions + */ + actionsGetAllowedActionsRepository: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions/selected-actions\`, + method: "GET", format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @description Sets the actions that are allowed in a repository. To use this endpoint, the repository permission policy for \`allowed_actions\` must be configured to \`selected\`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." If the repository belongs to an organization or enterprise that has \`selected\` actions set at the organization or enterprise levels, then you cannot override any of the allowed actions settings. To use the \`patterns_allowed\` setting for private repositories, the repository must belong to an enterprise. If the repository does not belong to an enterprise, then the \`patterns_allowed\` setting only applies to public repositories. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`administration\` repository permission to use this API. * - * @tags oauth-authorizations - * @name OauthAuthorizationsGetOrCreateAuthorizationForApp - * @summary Get-or-create an authorization for a specific app - * @request PUT:/authorizations/clients/{client_id} - * @deprecated + * @tags actions + * @name ActionsSetAllowedActionsRepository + * @summary Set allowed actions for a repository + * @request PUT:/repos/{owner}/{repo}/actions/permissions/selected-actions */ - oauthAuthorizationsGetOrCreateAuthorizationForApp: ( - clientId: string, - data: { - /** - * The OAuth app client secret for which to create the token. - * @maxLength 40 - */ - client_secret: string; - /** A unique string to distinguish an authorization from others created for the same client ID and user. */ - fingerprint?: string; - /** - * A note to remind you what the OAuth token is for. - * @example "Update all gems" - */ - note?: string; - /** A URL to remind you what app the OAuth token is for. */ - note_url?: string; - /** - * A list of scopes that this authorization is in. - * @example ["public_repo","user"] - */ - scopes?: string[] | null; - }, + actionsSetAllowedActionsRepository: ( + owner: string, + repo: string, + data: SelectedActions, params: RequestParams = {}, ) => - this.request({ - path: `/authorizations/clients/${clientId}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/permissions/selected-actions\`, method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). **Warning:** Apps must use the [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow) to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the [blog post](https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api). This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. `fingerprint` is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." + * @description Lists all self-hosted runners configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. * - * @tags oauth-authorizations - * @name OauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint - * @summary Get-or-create an authorization for a specific app and fingerprint - * @request PUT:/authorizations/clients/{client_id}/{fingerprint} - * @deprecated + * @tags actions + * @name ActionsListSelfHostedRunnersForRepo + * @summary List self-hosted runners for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners */ - oauthAuthorizationsGetOrCreateAuthorizationForAppAndFingerprint: ( - clientId: string, - fingerprint: string, - data: { - /** - * The OAuth app client secret for which to create the token. - * @maxLength 40 - */ - client_secret: string; + actionsListSelfHostedRunnersForRepo: ( + owner: string, + repo: string, + query?: { /** - * A note to remind you what the OAuth token is for. - * @example "Update all gems" + * Page number of the results to fetch. + * @default 1 */ - note?: string; - /** A URL to remind you what app the OAuth token is for. */ - note_url?: string; + page?: number; /** - * A list of scopes that this authorization is in. - * @example ["public_repo","user"] + * Results per page (max 100) + * @default 30 */ - scopes?: string[] | null; + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/authorizations/clients/${clientId}/${fingerprint}`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request< + { + runners: Runner[]; + total_count: number; + }, + any + >({ + path: \`/repos/\${owner}/\${repo}/actions/runners\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. * - * @tags oauth-authorizations - * @name OauthAuthorizationsGetAuthorization - * @summary Get a single authorization - * @request GET:/authorizations/{authorization_id} - * @deprecated + * @tags actions + * @name ActionsListRunnerApplicationsForRepo + * @summary List runner applications for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/downloads */ - oauthAuthorizationsGetAuthorization: (authorizationId: number, params: RequestParams = {}) => - this.request({ - path: `/authorizations/${authorizationId}`, + actionsListRunnerApplicationsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/downloads\`, method: "GET", format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations/), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/developers/apps/authorizing-oauth-apps#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "[Working with two-factor authentication](https://docs.github.com/rest/overview/other-authentication-methods#working-with-two-factor-authentication)." You can only send one of these scope keys at a time. + * @description Returns a token that you can pass to the \`config\` script. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing \`TOKEN\` with the registration token provided by this endpoint. \`\`\` ./config.sh --url https://github.com/octo-org/octo-repo-artifacts --token TOKEN \`\`\` * - * @tags oauth-authorizations - * @name OauthAuthorizationsUpdateAuthorization - * @summary Update an existing authorization - * @request PATCH:/authorizations/{authorization_id} - * @deprecated + * @tags actions + * @name ActionsCreateRegistrationTokenForRepo + * @summary Create a registration token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/registration-token */ - oauthAuthorizationsUpdateAuthorization: ( - authorizationId: number, - data: { - /** A list of scopes to add to this authorization. */ - add_scopes?: string[]; - /** A unique string to distinguish an authorization from others created for the same client ID and user. */ - fingerprint?: string; - /** - * A note to remind you what the OAuth token is for. - * @example "Update all gems" - */ - note?: string; - /** A URL to remind you what app the OAuth token is for. */ - note_url?: string; - /** A list of scopes to remove from this authorization. */ - remove_scopes?: string[]; - /** - * A list of scopes that this authorization is in. - * @example ["public_repo","user"] - */ - scopes?: string[] | null; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/authorizations/${authorizationId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + actionsCreateRegistrationTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/registration-token\`, + method: "POST", format: "json", ...params, }), /** - * @description **Deprecation Notice:** GitHub will discontinue the [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations), which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our [web application flow](https://docs.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow). The [OAuth Authorizations API](https://docs.github.com/rest/reference/oauth-authorizations) will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the [blog post](https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/). + * @description Returns a token that you can pass to remove a self-hosted runner from a repository. The token expires after one hour. You must authenticate using an access token with the \`repo\` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from a repository, replace TOKEN with the remove token provided by this endpoint. \`\`\` ./config.sh remove --token TOKEN \`\`\` * - * @tags oauth-authorizations - * @name OauthAuthorizationsDeleteAuthorization - * @summary Delete an authorization - * @request DELETE:/authorizations/{authorization_id} - * @deprecated + * @tags actions + * @name ActionsCreateRemoveTokenForRepo + * @summary Create a remove token for a repository + * @request POST:/repos/{owner}/{repo}/actions/runners/remove-token */ - oauthAuthorizationsDeleteAuthorization: (authorizationId: number, params: RequestParams = {}) => - this.request({ - path: `/authorizations/${authorizationId}`, - method: "DELETE", + actionsCreateRemoveTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/remove-token\`, + method: "POST", + format: "json", ...params, }), - }; - codesOfConduct = { + /** - * No description + * @description Gets a specific self-hosted runner configured in a repository. You must authenticate using an access token with the \`repo\` scope to use this endpoint. * - * @tags codes-of-conduct - * @name CodesOfConductGetAllCodesOfConduct - * @summary Get all codes of conduct - * @request GET:/codes_of_conduct + * @tags actions + * @name ActionsGetSelfHostedRunnerForRepo + * @summary Get a self-hosted runner for a repository + * @request GET:/repos/{owner}/{repo}/actions/runners/{runner_id} */ - codesOfConductGetAllCodesOfConduct: (params: RequestParams = {}) => - this.request< - CodeOfConduct[], - { - documentation_url: string; - message: string; - } - >({ - path: `/codes_of_conduct`, + actionsGetSelfHostedRunnerForRepo: (owner: string, repo: string, runnerId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/\${runnerId}\`, method: "GET", format: "json", ...params, }), /** - * No description + * @description Forces the removal of a self-hosted runner from a repository. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the \`repo\` scope to use this endpoint. * - * @tags codes-of-conduct - * @name CodesOfConductGetConductCode - * @summary Get a code of conduct - * @request GET:/codes_of_conduct/{key} + * @tags actions + * @name ActionsDeleteSelfHostedRunnerFromRepo + * @summary Delete a self-hosted runner from a repository + * @request DELETE:/repos/{owner}/{repo}/actions/runners/{runner_id} */ - codesOfConductGetConductCode: (key: string, params: RequestParams = {}) => - this.request< - CodeOfConduct, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/codes_of_conduct/${key}`, - method: "GET", - format: "json", + actionsDeleteSelfHostedRunnerFromRepo: ( + owner: string, + repo: string, + runnerId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runners/\${runnerId}\`, + method: "DELETE", ...params, }), - }; - contentReferences = { + /** - * @description Creates an attachment under a content reference URL in the body or comment of an issue or pull request. Use the `id` of the content reference from the [`content_reference` event](https://docs.github.com/webhooks/event-payloads/#content_reference) to create an attachment. The app must create a content attachment within six hours of the content reference URL being posted. See "[Using content attachments](https://docs.github.com/apps/using-content-attachments/)" for details about content attachments. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @description Lists all workflow runs for a repository. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags apps - * @name AppsCreateContentAttachment - * @summary Create a content attachment - * @request POST:/content_references/{content_reference_id}/attachments + * @tags actions + * @name ActionsListWorkflowRunsForRepo + * @summary List workflow runs for a repository + * @request GET:/repos/{owner}/{repo}/actions/runs */ - appsCreateContentAttachment: ( - contentReferenceId: number, - data: { + actionsListWorkflowRunsForRepo: ( + owner: string, + repo: string, + query?: { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; /** - * The body of the attachment - * @maxLength 262144 - * @example "Body of the attachment" + * Page number of the results to fetch. + * @default 1 */ - body: string; + page?: number; /** - * The title of the attachment - * @maxLength 1024 - * @example "Title of the attachment" + * Results per page (max 100) + * @default 30 */ - title: string; + per_page?: number; + /** Returns workflow runs associated with the check run \`status\` or \`conclusion\` you specify. For example, a conclusion can be \`success\` or a status can be \`completed\`. For more information, see the \`status\` and \`conclusion\` options available in "[Create a check run](https://docs.github.com/rest/reference/checks#create-a-check-run)." */ + status?: "completed" | "status" | "conclusion"; }, params: RequestParams = {}, ) => this.request< - ContentReferenceAttachment, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError + { + total_count: number; + workflow_runs: WorkflowRun[]; + }, + any >({ - path: `/content_references/${contentReferenceId}/attachments`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - emojis = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @tags emojis - * @name EmojisGet - * @summary Get emojis - * @request GET:/emojis - */ - emojisGet: (params: RequestParams = {}) => - this.request, any>({ - path: `/emojis`, + path: \`/repos/\${owner}/\${repo}/actions/runs\`, method: "GET", + query: query, format: "json", ...params, }), - }; - enterprises = { + /** - * @description Gets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Gets a specific workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminGetGithubActionsPermissionsEnterprise - * @summary Get GitHub Actions permissions for an enterprise - * @request GET:/enterprises/{enterprise}/actions/permissions + * @tags actions + * @name ActionsGetWorkflowRun + * @summary Get a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id} */ - enterpriseAdminGetGithubActionsPermissionsEnterprise: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/actions/permissions`, + actionsGetWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}\`, method: "GET", format: "json", ...params, }), /** - * @description Sets the GitHub Actions permissions policy for organizations and allowed actions in an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Delete a specific workflow run. Anyone with write access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:write\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminSetGithubActionsPermissionsEnterprise - * @summary Set GitHub Actions permissions for an enterprise - * @request PUT:/enterprises/{enterprise}/actions/permissions + * @tags actions + * @name ActionsDeleteWorkflowRun + * @summary Delete a workflow run + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id} */ - enterpriseAdminSetGithubActionsPermissionsEnterprise: ( - enterprise: string, - data: { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions?: AllowedActions; - /** The policy that controls the organizations in the enterprise that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ - enabled_organizations: EnabledOrganizations; - }, - params: RequestParams = {}, - ) => + actionsDeleteWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/permissions`, - method: "PUT", - body: data, - type: ContentType.Json, + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}\`, + method: "DELETE", ...params, }), /** - * @description Lists the organizations that are selected to have GitHub Actions enabled in an enterprise. To use this endpoint, the enterprise permission policy for `enabled_organizations` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Lists artifacts for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise - * @summary List selected organizations enabled for GitHub Actions in an enterprise - * @request GET:/enterprises/{enterprise}/actions/permissions/organizations + * @tags actions + * @name ActionsListWorkflowRunArtifacts + * @summary List workflow run artifacts + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/artifacts */ - enterpriseAdminListSelectedOrganizationsEnabledGithubActionsEnterprise: ( - enterprise: string, + actionsListWorkflowRunArtifacts: ( + owner: string, + repo: string, + runId: number, query?: { /** * Page number of the results to fetch. @@ -9889,12 +23776,12 @@ export class Api extends HttpClient this.request< { - organizations: OrganizationSimple[]; + artifacts: Artifact[]; total_count: number; }, any >({ - path: `/enterprises/${enterprise}/actions/permissions/organizations`, + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/artifacts\`, method: "GET", query: query, format: "json", @@ -9902,114 +23789,139 @@ export class Api extends HttpClient + actionsCancelWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/permissions/organizations`, - method: "PUT", - body: data, - type: ContentType.Json, + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/cancel\`, + method: "POST", ...params, }), /** - * @description Adds an organization to the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for `enabled_organizations` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Lists jobs for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). * - * @tags enterprise-admin - * @name EnterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise - * @summary Enable a selected organization for GitHub Actions in an enterprise - * @request PUT:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + * @tags actions + * @name ActionsListJobsForWorkflowRun + * @summary List jobs for a workflow run + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/jobs */ - enterpriseAdminEnableSelectedOrganizationGithubActionsEnterprise: ( - enterprise: string, - orgId: number, + actionsListJobsForWorkflowRun: ( + owner: string, + repo: string, + runId: number, + query?: { + /** + * Filters jobs by their \`completed_at\` timestamp. Can be one of: + * \\* \`latest\`: Returns jobs from the most recent execution of the workflow run. + * \\* \`all\`: Returns all jobs for a workflow run, including from old executions of the workflow run. + * @default "latest" + */ + filter?: "latest" | "all"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/enterprises/${enterprise}/actions/permissions/organizations/${orgId}`, - method: "PUT", + this.request< + { + jobs: Job[]; + total_count: number; + }, + any + >({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/jobs\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Removes an organization from the list of selected organizations that are enabled for GitHub Actions in an enterprise. To use this endpoint, the enterprise permission policy for `enabled_organizations` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Gets a redirect URL to download an archive of log files for a workflow run. This link expires after 1 minute. Look for \`Location:\` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise - * @summary Disable a selected organization for GitHub Actions in an enterprise - * @request DELETE:/enterprises/{enterprise}/actions/permissions/organizations/{org_id} + * @tags actions + * @name ActionsDownloadWorkflowRunLogs + * @summary Download workflow run logs + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/logs */ - enterpriseAdminDisableSelectedOrganizationGithubActionsEnterprise: ( - enterprise: string, - orgId: number, - params: RequestParams = {}, - ) => + actionsDownloadWorkflowRunLogs: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/logs\`, + method: "GET", + ...params, + }), + + /** + * @description Deletes all logs for a workflow run. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDeleteWorkflowRunLogs + * @summary Delete workflow run logs + * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + */ + actionsDeleteWorkflowRunLogs: (owner: string, repo: string, runId: number, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/permissions/organizations/${orgId}`, + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/logs\`, method: "DELETE", ...params, }), /** - * @description Gets the selected actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Re-runs your workflow run using its \`id\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminGetAllowedActionsEnterprise - * @summary Get allowed actions for an enterprise - * @request GET:/enterprises/{enterprise}/actions/permissions/selected-actions + * @tags actions + * @name ActionsReRunWorkflow + * @summary Re-run a workflow + * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/rerun */ - enterpriseAdminGetAllowedActionsEnterprise: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/actions/permissions/selected-actions`, - method: "GET", - format: "json", + actionsReRunWorkflow: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/rerun\`, + method: "POST", ...params, }), /** - * @description Sets the actions that are allowed in an enterprise. To use this endpoint, the enterprise permission policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an enterprise](#set-github-actions-permissions-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Gets the number of billable minutes and total run time for a specific workflow run. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminSetAllowedActionsEnterprise - * @summary Set allowed actions for an enterprise - * @request PUT:/enterprises/{enterprise}/actions/permissions/selected-actions + * @tags actions + * @name ActionsGetWorkflowRunUsage + * @summary Get workflow run usage + * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/timing */ - enterpriseAdminSetAllowedActionsEnterprise: ( - enterprise: string, - data: SelectedActions, - params: RequestParams = {}, - ) => - this.request({ - path: `/enterprises/${enterprise}/actions/permissions/selected-actions`, - method: "PUT", - body: data, - type: ContentType.Json, + actionsGetWorkflowRunUsage: (owner: string, repo: string, runId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/runs/\${runId}/timing\`, + method: "GET", + format: "json", ...params, }), /** - * @description Lists all self-hosted runner groups for an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Lists all secrets available in a repository without revealing their encrypted values. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminListSelfHostedRunnerGroupsForEnterprise - * @summary List self-hosted runner groups for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runner-groups + * @tags actions + * @name ActionsListRepoSecrets + * @summary List repository secrets + * @request GET:/repos/{owner}/{repo}/actions/secrets */ - enterpriseAdminListSelfHostedRunnerGroupsForEnterprise: ( - enterprise: string, + actionsListRepoSecrets: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -10026,12 +23938,12 @@ export class Api extends HttpClient this.request< { - runner_groups: RunnerGroupsEnterprise[]; + secrets: ActionsSecret[]; total_count: number; }, any >({ - path: `/enterprises/${enterprise}/actions/runner-groups`, + path: \`/repos/\${owner}/\${repo}/actions/secrets\`, method: "GET", query: query, format: "json", @@ -10039,117 +23951,91 @@ export class Api extends HttpClient - this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups`, - method: "POST", - body: data, - type: ContentType.Json, + actionsGetRepoPublicKey: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/public-key\`, + method: "GET", format: "json", ...params, }), /** - * @description Gets a specific self-hosted runner group for an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Gets a single repository secret without revealing its encrypted value. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminGetSelfHostedRunnerGroupForEnterprise - * @summary Get a self-hosted runner group for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + * @tags actions + * @name ActionsGetRepoSecret + * @summary Get a repository secret + * @request GET:/repos/{owner}/{repo}/actions/secrets/{secret_name} */ - enterpriseAdminGetSelfHostedRunnerGroupForEnterprise: ( - enterprise: string, - runnerGroupId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}`, + actionsGetRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, method: "GET", format: "json", ...params, }), /** - * @description Updates the `name` and `visibility` of a self-hosted runner group in an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Creates or updates a repository secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. \`\`\` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); \`\`\` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. \`\`\` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") \`\`\` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. \`\`\` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); \`\`\` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. \`\`\`ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) \`\`\` * - * @tags enterprise-admin - * @name EnterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise - * @summary Update a self-hosted runner group for an enterprise - * @request PATCH:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + * @tags actions + * @name ActionsCreateOrUpdateRepoSecret + * @summary Create or update a repository secret + * @request PUT:/repos/{owner}/{repo}/actions/secrets/{secret_name} */ - enterpriseAdminUpdateSelfHostedRunnerGroupForEnterprise: ( - enterprise: string, - runnerGroupId: number, + actionsCreateOrUpdateRepoSecret: ( + owner: string, + repo: string, + secretName: string, data: { - /** Name of the runner group. */ - name?: string; - /** - * Visibility of a runner group. You can select all organizations or select individual organizations. Can be one of: `all` or `selected` - * @default "all" - */ - visibility?: "selected" | "all"; + /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get a repository public key](https://docs.github.com/rest/reference/actions#get-a-repository-public-key) endpoint. */ + encrypted_value?: string; + /** ID of the key you used to encrypt the secret. */ + key_id?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** - * @description Deletes a self-hosted runner group for an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Deletes a secret in a repository using the secret name. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`secrets\` repository permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise - * @summary Delete a self-hosted runner group from an enterprise - * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id} + * @tags actions + * @name ActionsDeleteRepoSecret + * @summary Delete a repository secret + * @request DELETE:/repos/{owner}/{repo}/actions/secrets/{secret_name} */ - enterpriseAdminDeleteSelfHostedRunnerGroupFromEnterprise: ( - enterprise: string, - runnerGroupId: number, - params: RequestParams = {}, - ) => + actionsDeleteRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}`, + path: \`/repos/\${owner}/\${repo}/actions/secrets/\${secretName}\`, method: "DELETE", ...params, }), /** - * @description Lists the organizations with access to a self-hosted runner group. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Lists the workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. GitHub Apps must have the \`actions:read\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise - * @summary List organization access to a self-hosted runner group in an enterprise - * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations + * @tags actions + * @name ActionsListRepoWorkflows + * @summary List repository workflows + * @request GET:/repos/{owner}/{repo}/actions/workflows */ - enterpriseAdminListOrgAccessToSelfHostedRunnerGroupInEnterprise: ( - enterprise: string, - runnerGroupId: number, + actionsListRepoWorkflows: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -10166,12 +24052,12 @@ export class Api extends HttpClient this.request< { - organizations: OrganizationSimple[]; total_count: number; + workflows: Workflow[]; }, any >({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/organizations`, + path: \`/repos/\${owner}/\${repo}/actions/workflows\`, method: "GET", query: query, format: "json", @@ -10179,82 +24065,98 @@ export class Api extends HttpClient + actionsGetWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Disables a workflow and sets the \`state\` of the workflow to \`disabled_manually\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. + * + * @tags actions + * @name ActionsDisableWorkflow + * @summary Disable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable + */ + actionsDisableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/organizations`, + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/disable\`, method: "PUT", - body: data, - type: ContentType.Json, ...params, }), /** - * @description Adds an organization to the list of selected organizations that can access a self-hosted runner group. The runner group must have `visibility` set to `selected`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description You can use this endpoint to manually trigger a GitHub Actions workflow run. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must configure your GitHub Actions workflow to run when the [\`workflow_dispatch\` webhook](/developers/webhooks-and-events/webhook-events-and-payloads#workflow_dispatch) event occurs. The \`inputs\` are configured in the workflow file. For more information about how to configure the \`workflow_dispatch\` event in the workflow file, see "[Events that trigger workflows](/actions/reference/events-that-trigger-workflows#workflow_dispatch)." You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)." * - * @tags enterprise-admin - * @name EnterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise - * @summary Add organization access to a self-hosted runner group in an enterprise - * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + * @tags actions + * @name ActionsCreateWorkflowDispatch + * @summary Create a workflow dispatch event + * @request POST:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches */ - enterpriseAdminAddOrgAccessToSelfHostedRunnerGroupInEnterprise: ( - enterprise: string, - runnerGroupId: number, - orgId: number, + actionsCreateWorkflowDispatch: ( + owner: string, + repo: string, + workflowId: number | string, + data: { + /** Input keys and values configured in the workflow file. The maximum number of properties is 10. Any default properties configured in the workflow file will be used when \`inputs\` are omitted. */ + inputs?: Record; + /** The git reference for the workflow. The reference can be a branch or tag name. */ + ref: string; + }, params: RequestParams = {}, ) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/organizations/${orgId}`, - method: "PUT", + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/dispatches\`, + method: "POST", + body: data, + type: ContentType.Json, ...params, }), /** - * @description Removes an organization from the list of selected organizations that can access a self-hosted runner group. The runner group must have `visibility` set to `selected`. For more information, see "[Create a self-hosted runner group for an enterprise](#create-a-self-hosted-runner-group-for-an-enterprise)." You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Enables a workflow and sets the \`state\` of the workflow to \`active\`. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You must authenticate using an access token with the \`repo\` scope to use this endpoint. GitHub Apps must have the \`actions:write\` permission to use this endpoint. * - * @tags enterprise-admin - * @name EnterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise - * @summary Remove organization access to a self-hosted runner group in an enterprise - * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations/{org_id} + * @tags actions + * @name ActionsEnableWorkflow + * @summary Enable a workflow + * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable */ - enterpriseAdminRemoveOrgAccessToSelfHostedRunnerGroupInEnterprise: ( - enterprise: string, - runnerGroupId: number, - orgId: number, - params: RequestParams = {}, - ) => + actionsEnableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/organizations/${orgId}`, - method: "DELETE", + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/enable\`, + method: "PUT", ...params, }), /** - * @description Lists the self-hosted runners that are in a specific enterprise group. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description List all workflow runs for a workflow. You can replace \`workflow_id\` with the workflow file name. For example, you could use \`main.yaml\`. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the \`repo\` scope. * - * @tags enterprise-admin - * @name EnterpriseAdminListSelfHostedRunnersInGroupForEnterprise - * @summary List self-hosted runners in a group for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners + * @tags actions + * @name ActionsListWorkflowRuns + * @summary List workflow runs + * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs */ - enterpriseAdminListSelfHostedRunnersInGroupForEnterprise: ( - enterprise: string, - runnerGroupId: number, + actionsListWorkflowRuns: ( + owner: string, + repo: string, + workflowId: number | string, query?: { + /** Returns someone's workflow runs. Use the login for the user who created the \`push\` associated with the check suite or workflow run. */ + actor?: string; + /** Returns workflow runs associated with a branch. Use the name of the branch of the \`push\`. */ + branch?: string; + /** Returns workflow run triggered by the event you specify. For example, \`push\`, \`pull_request\` or \`issue\`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ + event?: string; /** * Page number of the results to fetch. * @default 1 @@ -10265,17 +24167,19 @@ export class Api extends HttpClient this.request< { - runners: Runner[]; total_count: number; + workflow_runs: WorkflowRun[]; }, any >({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/runners`, + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/runs\`, method: "GET", query: query, format: "json", @@ -10283,80 +24187,110 @@ export class Api extends HttpClient + this.request({ + path: \`/repos/\${owner}/\${repo}/actions/workflows/\${workflowId}/timing\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Lists the [available assignees](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/) for issues in a repository. + * + * @tags issues + * @name IssuesListAssignees + * @summary List assignees + * @request GET:/repos/{owner}/{repo}/assignees + */ + issuesListAssignees: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/runners`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/assignees\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Adds a self-hosted runner to a runner group configured in an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Checks if a user has permission to be assigned to an issue in this repository. If the \`assignee\` can be assigned to issues in the repository, a \`204\` header with no content is returned. Otherwise a \`404\` status code is returned. * - * @tags enterprise-admin - * @name EnterpriseAdminAddSelfHostedRunnerToGroupForEnterprise - * @summary Add a self-hosted runner to a group for an enterprise - * @request PUT:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + * @tags issues + * @name IssuesCheckUserCanBeAssigned + * @summary Check if a user can be assigned + * @request GET:/repos/{owner}/{repo}/assignees/{assignee} */ - enterpriseAdminAddSelfHostedRunnerToGroupForEnterprise: ( - enterprise: string, - runnerGroupId: number, - runnerId: number, - params: RequestParams = {}, - ) => + issuesCheckUserCanBeAssigned: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, + method: "GET", + ...params, + }), + + /** + * @description Enables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * + * @tags repos + * @name ReposEnableAutomatedSecurityFixes + * @summary Enable automated security fixes + * @request PUT:/repos/{owner}/{repo}/automated-security-fixes + */ + reposEnableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/runners/${runnerId}`, + path: \`/repos/\${owner}/\${repo}/automated-security-fixes\`, method: "PUT", ...params, }), /** - * @description Removes a self-hosted runner from a group configured in an enterprise. The runner is then returned to the default group. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Disables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". * - * @tags enterprise-admin - * @name EnterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise - * @summary Remove a self-hosted runner from a group for an enterprise - * @request DELETE:/enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + * @tags repos + * @name ReposDisableAutomatedSecurityFixes + * @summary Disable automated security fixes + * @request DELETE:/repos/{owner}/{repo}/automated-security-fixes */ - enterpriseAdminRemoveSelfHostedRunnerFromGroupForEnterprise: ( - enterprise: string, - runnerGroupId: number, - runnerId: number, - params: RequestParams = {}, - ) => + reposDisableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => this.request({ - path: `/enterprises/${enterprise}/actions/runner-groups/${runnerGroupId}/runners/${runnerId}`, + path: \`/repos/\${owner}/\${repo}/automated-security-fixes\`, method: "DELETE", ...params, }), /** - * @description Lists all self-hosted runners configured for an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * No description * - * @tags enterprise-admin - * @name EnterpriseAdminListSelfHostedRunnersForEnterprise - * @summary List self-hosted runners for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runners + * @tags repos + * @name ReposListBranches + * @summary List branches + * @request GET:/repos/{owner}/{repo}/branches */ - enterpriseAdminListSelfHostedRunnersForEnterprise: ( - enterprise: string, + reposListBranches: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -10368,331 +24302,405 @@ export class Api extends HttpClient + this.request({ + path: \`/repos/\${owner}/\${repo}/branches\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposGetBranch + * @summary Get a branch + * @request GET:/repos/{owner}/{repo}/branches/{branch} + */ + reposGetBranch: (owner: string, repo: string, branch: string, params: RequestParams = {}) => this.request< - { - runners?: Runner[]; - total_count?: number; - }, - any + BranchWithProtection, + | BasicError + | { + documentation_url: string; + message: string; + } >({ - path: `/enterprises/${enterprise}/actions/runners`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Lists binaries for the runner application that you can download and run. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags enterprise-admin - * @name EnterpriseAdminListRunnerApplicationsForEnterprise - * @summary List runner applications for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runners/downloads + * @tags repos + * @name ReposGetBranchProtection + * @summary Get branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection */ - enterpriseAdminListRunnerApplicationsForEnterprise: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/actions/runners/downloads`, + reposGetBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, method: "GET", format: "json", ...params, }), /** - * @description Returns a token that you can pass to the `config` script. The token expires after one hour. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing `TOKEN` with the registration token provided by this endpoint. ``` ./config.sh --url https://github.com/enterprises/octo-enterprise --token TOKEN ``` + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Protecting a branch requires admin or owner permissions to the repository. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. **Note**: The list of users, apps, and teams in total is limited to 100 items. * - * @tags enterprise-admin - * @name EnterpriseAdminCreateRegistrationTokenForEnterprise - * @summary Create a registration token for an enterprise - * @request POST:/enterprises/{enterprise}/actions/runners/registration-token + * @tags repos + * @name ReposUpdateBranchProtection + * @summary Update branch protection + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection */ - enterpriseAdminCreateRegistrationTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/actions/runners/registration-token`, - method: "POST", + reposUpdateBranchProtection: ( + owner: string, + repo: string, + branch: string, + data: { + /** Allows deletion of the protected branch by anyone with write access to the repository. Set to \`false\` to prevent deletion of the protected branch. Default: \`false\`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation. */ + allow_deletions?: boolean; + /** Permits force pushes to the protected branch by anyone with write access to the repository. Set to \`true\` to allow force pushes. Set to \`false\` or \`null\` to block force pushes. Default: \`false\`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation." */ + allow_force_pushes?: boolean | null; + /** Enforce all configured restrictions for administrators. Set to \`true\` to enforce required status checks for repository administrators. Set to \`null\` to disable. */ + enforce_admins: boolean | null; + /** Enforces a linear commit Git history, which prevents anyone from pushing merge commits to a branch. Set to \`true\` to enforce a linear commit history. Set to \`false\` to disable a linear commit Git history. Your repository must allow squash merging or rebase merging before you can enable a linear commit history. Default: \`false\`. For more information, see "[Requiring a linear commit history](https://help.github.com/github/administering-a-repository/requiring-a-linear-commit-history)" in the GitHub Help documentation. */ + required_linear_history?: boolean; + /** Require at least one approving review on a pull request, before merging. Set to \`null\` to disable. */ + required_pull_request_reviews: { + /** Set to \`true\` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ + dismiss_stale_reviews?: boolean; + /** Specify which users and teams can dismiss pull request reviews. Pass an empty \`dismissal_restrictions\` object to disable. User and team \`dismissal_restrictions\` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ + dismissal_restrictions?: { + /** The list of team \`slug\`s with dismissal access */ + teams?: string[]; + /** The list of user \`login\`s with dismissal access */ + users?: string[]; + }; + /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) review them. */ + require_code_owner_reviews?: boolean; + /** Specify the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ + required_approving_review_count?: number; + } | null; + /** Require status checks to pass before merging. Set to \`null\` to disable. */ + required_status_checks: { + /** The list of status checks to require in order to merge into this branch */ + contexts: string[]; + /** Require branches to be up to date before merging. */ + strict: boolean; + } | null; + /** Restrict who can push to the protected branch. User, app, and team \`restrictions\` are only available for organization-owned repositories. Set to \`null\` to disable. */ + restrictions: { + /** The list of app \`slug\`s with push access */ + apps?: string[]; + /** The list of team \`slug\`s with push access */ + teams: string[]; + /** The list of user \`login\`s with push access */ + users: string[]; + } | null; + }, + params: RequestParams = {}, + ) => + this.request< + ProtectedBranch, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Returns a token that you can pass to the `config` script to remove a self-hosted runner from an enterprise. The token expires after one hour. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an enterprise, replace `TOKEN` with the remove token provided by this endpoint. ``` ./config.sh remove --token TOKEN ``` + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags enterprise-admin - * @name EnterpriseAdminCreateRemoveTokenForEnterprise - * @summary Create a remove token for an enterprise - * @request POST:/enterprises/{enterprise}/actions/runners/remove-token + * @tags repos + * @name ReposDeleteBranchProtection + * @summary Delete branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection */ - enterpriseAdminCreateRemoveTokenForEnterprise: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/actions/runners/remove-token`, + reposDeleteBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetAdminBranchProtection + * @summary Get admin branch protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposGetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adding admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * + * @tags repos + * @name ReposSetAdminBranchProtection + * @summary Set admin branch protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposSetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, method: "POST", format: "json", ...params, }), /** - * @description Gets a specific self-hosted runner configured in an enterprise. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removing admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * + * @tags repos + * @name ReposDeleteAdminBranchProtection + * @summary Delete admin branch protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + */ + reposDeleteAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/enforce_admins\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * @tags repos + * @name ReposGetPullRequestReviewProtection + * @summary Get pull request review protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + */ + reposGetPullRequestReviewProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating pull request review enforcement requires admin or owner permissions to the repository and branch protection to be enabled. **Note**: Passing new arrays of \`users\` and \`teams\` replaces their previous values. * - * @tags enterprise-admin - * @name EnterpriseAdminGetSelfHostedRunnerForEnterprise - * @summary Get a self-hosted runner for an enterprise - * @request GET:/enterprises/{enterprise}/actions/runners/{runner_id} + * @tags repos + * @name ReposUpdatePullRequestReviewProtection + * @summary Update pull request review protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews */ - enterpriseAdminGetSelfHostedRunnerForEnterprise: ( - enterprise: string, - runnerId: number, + reposUpdatePullRequestReviewProtection: ( + owner: string, + repo: string, + branch: string, + data: { + /** Set to \`true\` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ + dismiss_stale_reviews?: boolean; + /** Specify which users and teams can dismiss pull request reviews. Pass an empty \`dismissal_restrictions\` object to disable. User and team \`dismissal_restrictions\` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ + dismissal_restrictions?: { + /** The list of team \`slug\`s with dismissal access */ + teams?: string[]; + /** The list of user \`login\`s with dismissal access */ + users?: string[]; + }; + /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed. */ + require_code_owner_reviews?: boolean; + /** Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ + required_approving_review_count?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/enterprises/${enterprise}/actions/runners/${runnerId}`, - method: "GET", + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Forces the removal of a self-hosted runner from an enterprise. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the `admin:enterprise` scope to use this endpoint. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags enterprise-admin - * @name EnterpriseAdminDeleteSelfHostedRunnerFromEnterprise - * @summary Delete a self-hosted runner from an enterprise - * @request DELETE:/enterprises/{enterprise}/actions/runners/{runner_id} + * @tags repos + * @name ReposDeletePullRequestReviewProtection + * @summary Delete pull request review protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews */ - enterpriseAdminDeleteSelfHostedRunnerFromEnterprise: ( - enterprise: string, - runnerId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/enterprises/${enterprise}/actions/runners/${runnerId}`, + reposDeletePullRequestReviewProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_pull_request_reviews\`, method: "DELETE", ...params, }), /** - * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an enterprise. To use this endpoint, you must be an enterprise admin, and you must use an access token with the `admin:enterprise` scope. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to check whether a branch requires signed commits. An enabled status of \`true\` indicates you must sign commits on this branch. For more information, see [Signing commits with GPG](https://help.github.com/articles/signing-commits-with-gpg) in GitHub Help. **Note**: You must enable branch protection to require signed commits. * - * @tags audit-log - * @name AuditLogGetAuditLog - * @summary Get the audit log for an enterprise - * @request GET:/enterprises/{enterprise}/audit-log + * @tags repos + * @name ReposGetCommitSignatureProtection + * @summary Get commit signature protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures */ - auditLogGetAuditLog: ( - enterprise: string, - query?: { - /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ - after?: string; - /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ - before?: string; - /** - * The event types to include: - * - * - `web` - returns web (non-Git) events - * - `git` - returns Git events - * - `all` - returns both web and Git events - * - * The default is `web`. - */ - include?: "web" | "git" | "all"; - /** - * The order of audit log events. To list newest events first, specify `desc`. To list oldest events first, specify `asc`. - * - * The default is `desc`. - */ - order?: "desc" | "asc"; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ - phrase?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/enterprises/${enterprise}/audit-log`, + reposGetCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". The authenticated user must be an enterprise admin. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to require signed commits on a branch. You must enable branch protection to require signed commits. * - * @tags billing - * @name BillingGetGithubActionsBillingGhe - * @summary Get GitHub Actions billing for an enterprise - * @request GET:/enterprises/{enterprise}/settings/billing/actions + * @tags repos + * @name ReposCreateCommitSignatureProtection + * @summary Create commit signature protection + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures */ - billingGetGithubActionsBillingGhe: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/settings/billing/actions`, - method: "GET", + reposCreateCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, + method: "POST", format: "json", ...params, }), /** - * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to disable required signed commits on a branch. You must enable branch protection to require signed commits. * - * @tags billing - * @name BillingGetGithubPackagesBillingGhe - * @summary Get GitHub Packages billing for an enterprise - * @request GET:/enterprises/{enterprise}/settings/billing/packages + * @tags repos + * @name ReposDeleteCommitSignatureProtection + * @summary Delete commit signature protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures */ - billingGetGithubPackagesBillingGhe: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/settings/billing/packages`, - method: "GET", - format: "json", + reposDeleteCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_signatures\`, + method: "DELETE", ...params, }), /** - * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." The authenticated user must be an enterprise admin. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags billing - * @name BillingGetSharedStorageBillingGhe - * @summary Get shared storage billing for an enterprise - * @request GET:/enterprises/{enterprise}/settings/billing/shared-storage + * @tags repos + * @name ReposGetStatusChecksProtection + * @summary Get status checks protection + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks */ - billingGetSharedStorageBillingGhe: (enterprise: string, params: RequestParams = {}) => - this.request({ - path: `/enterprises/${enterprise}/settings/billing/shared-storage`, + reposGetStatusChecksProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, method: "GET", format: "json", ...params, }), - }; - events = { + /** - * @description We delay the public events feed by five minutes, which means the most recent event returned by the public events API actually occurred at least five minutes ago. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating required status checks requires admin or owner permissions to the repository and branch protection to be enabled. * - * @tags activity - * @name ActivityListPublicEvents - * @summary List public events - * @request GET:/events + * @tags repos + * @name ReposUpdateStatusCheckProtection + * @summary Update status check protection + * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks */ - activityListPublicEvents: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + reposUpdateStatusCheckProtection: ( + owner: string, + repo: string, + branch: string, + data: { + /** The list of status checks to require in order to merge into this branch */ + contexts?: string[]; + /** Require branches to be up to date before merging. */ + strict?: boolean; }, params: RequestParams = {}, ) => - this.request< - Event[], - | BasicError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/events`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), - }; - feeds = { + /** - * @description GitHub provides several timeline resources in [Atom](http://en.wikipedia.org/wiki/Atom_(standard)) format. The Feeds API lists all the feeds available to the authenticated user: * **Timeline**: The GitHub global public timeline * **User**: The public timeline for any user, using [URI template](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) * **Current user public**: The public timeline for the authenticated user * **Current user**: The private timeline for the authenticated user * **Current user actor**: The private timeline for activity created by the authenticated user * **Current user organizations**: The private timeline for the organizations the authenticated user is a member of. * **Security advisories**: A collection of public announcements that provide information about security-related vulnerabilities in software on GitHub. **Note**: Private feeds are only returned when [authenticating via Basic Auth](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) since current feed URIs use the older, non revocable auth tokens. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags activity - * @name ActivityGetFeeds - * @summary Get feeds - * @request GET:/feeds + * @tags repos + * @name ReposRemoveStatusCheckProtection + * @summary Remove status check protection + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks */ - activityGetFeeds: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", + reposRemoveStatusCheckProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks\`, + method: "DELETE", ...params, }), - }; - gists = { + /** - * @description Lists the authenticated user's gists or if called anonymously, this endpoint returns all public gists: + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags gists - * @name GistsList - * @summary List gists for the authenticated user - * @request GET:/gists + * @tags repos + * @name ReposGetAllStatusCheckContexts + * @summary Get all status check contexts + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts */ - gistsList: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, + reposGetAllStatusCheckContexts: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Allows you to add a new gist with one or more files. **Note:** Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags gists - * @name GistsCreate - * @summary Create a gist - * @request POST:/gists + * @tags repos + * @name ReposAddStatusCheckContexts + * @summary Add status check contexts + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts */ - gistsCreate: ( + reposAddStatusCheckContexts: ( + owner: string, + repo: string, + branch: string, data: { - /** - * Description of the gist - * @example "Example Ruby script" - */ - description?: string; - /** - * Names and content for the files that make up the gist - * @example {"hello.rb":{"content":"puts \"Hello, World!\""}} - */ - files: Record< - string, - { - /** Content of the file */ - content: string; - } - >; - /** Flag indicating whether the gist is public */ - public?: boolean | "true" | "false"; + /** contexts parameter */ + contexts: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists`, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, method: "POST", body: data, type: ContentType.Json, @@ -10701,210 +24709,186 @@ export class Api extends HttpClient - this.request({ - path: `/gists/public`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description List the authenticated user's starred gists: + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags gists - * @name GistsListStarred - * @summary List starred gists - * @request GET:/gists/starred + * @tags repos + * @name ReposRemoveStatusCheckContexts + * @summary Remove status check contexts + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts */ - gistsListStarred: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; + reposRemoveStatusCheckContexts: ( + owner: string, + repo: string, + branch: string, + data: { + /** contexts parameter */ + contexts: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/required_status_checks/contexts\`, + method: "DELETE", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists who has access to this protected branch. **Note**: Users, apps, and teams \`restrictions\` are only available for organization-owned repositories. * - * @tags gists - * @name GistsGet - * @summary Get a gist - * @request GET:/gists/{gist_id} + * @tags repos + * @name ReposGetAccessRestrictions + * @summary Get access restrictions + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions */ - gistsGet: (gistId: string, params: RequestParams = {}) => - this.request< - GistSimple, - | { - block?: { - created_at?: string; - html_url?: string | null; - reason?: string; - }; - documentation_url?: string; - message?: string; - } - | BasicError - >({ - path: `/gists/${gistId}`, + reposGetAccessRestrictions: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions\`, method: "GET", format: "json", ...params, }), /** - * @description Allows you to update or delete a gist file and rename gist files. Files from the previous version of the gist that aren't explicitly changed during an edit are unchanged. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Disables the ability to restrict who can push to this branch. * - * @tags gists - * @name GistsUpdate - * @summary Update a gist - * @request PATCH:/gists/{gist_id} + * @tags repos + * @name ReposDeleteAccessRestrictions + * @summary Delete access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions */ - gistsUpdate: ( - gistId: string, - data: null & { - /** - * Description of the gist - * @example "Example Ruby script" - */ - description?: string; - /** - * Names of files to be updated - * @example {"hello.rb":{"content":"blah","filename":"goodbye.rb"}} - */ - files?: Record< - string, - (object | null) & { - /** The new content of the file */ - content?: string; - /** The new filename for the file */ - filename?: string | null; - } - >; - }, + reposDeleteAccessRestrictions: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions\`, + method: "DELETE", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. + * + * @tags repos + * @name ReposGetAppsWithAccessToProtectedBranch + * @summary Get apps with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + */ + reposGetAppsWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "GET", format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified apps push access for this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsDelete - * @summary Delete a gist - * @request DELETE:/gists/{gist_id} + * @tags repos + * @name ReposAddAppAccessRestrictions + * @summary Add app access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps */ - gistsDelete: (gistId: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}`, - method: "DELETE", + reposAddAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** apps parameter */ + apps: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of apps that have push access to this branch. This removes all apps that previously had push access and grants push access to the new list of apps. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsListComments - * @summary List gist comments - * @request GET:/gists/{gist_id}/comments + * @tags repos + * @name ReposSetAppAccessRestrictions + * @summary Set app access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps */ - gistsListComments: ( - gistId: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + reposSetAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** apps parameter */ + apps: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}/comments`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of an app to push to this branch. Only installed GitHub Apps with \`write\` access to the \`contents\` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | The GitHub Apps that have push access to this branch. Use the app's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsCreateComment - * @summary Create a gist comment - * @request POST:/gists/{gist_id}/comments + * @tags repos + * @name ReposRemoveAppAccessRestrictions + * @summary Remove app access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps */ - gistsCreateComment: ( - gistId: string, + reposRemoveAppAccessRestrictions: ( + owner: string, + repo: string, + branch: string, data: { - /** - * The comment text. - * @maxLength 65535 - * @example "Body of the attachment" - */ - body: string; + /** apps parameter */ + apps: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}/comments`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/apps\`, + method: "DELETE", body: data, type: ContentType.Json, format: "json", @@ -10912,57 +24896,47 @@ export class Api extends HttpClient - this.request< - GistComment, - | { - block?: { - created_at?: string; - html_url?: string | null; - reason?: string; - }; - documentation_url?: string; - message?: string; - } - | BasicError - >({ - path: `/gists/${gistId}/comments/${commentId}`, + reposGetTeamsWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, method: "GET", format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified teams push access for this branch. You can also give push access to child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | \`array\` | The teams that can have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsUpdateComment - * @summary Update a gist comment - * @request PATCH:/gists/{gist_id}/comments/{comment_id} + * @tags repos + * @name ReposAddTeamAccessRestrictions + * @summary Add team access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams */ - gistsUpdateComment: ( - gistId: string, - commentId: number, + reposAddTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, data: { - /** - * The comment text. - * @maxLength 65535 - * @example "Body of the attachment" - */ - body: string; + /** teams parameter */ + teams: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}/comments/${commentId}`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -10970,280 +24944,461 @@ export class Api extends HttpClient - this.request({ - path: `/gists/${gistId}/comments/${commentId}`, - method: "DELETE", + reposSetTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** teams parameter */ + teams: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a team to push to this branch. You can also remove push access for child teams. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Teams that should no longer have push access. Use the team's \`slug\`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsListCommits - * @summary List gist commits - * @request GET:/gists/{gist_id}/commits + * @tags repos + * @name ReposRemoveTeamAccessRestrictions + * @summary Remove team access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams */ - gistsListCommits: ( - gistId: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + reposRemoveTeamAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** teams parameter */ + teams: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}/commits`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/teams\`, + method: "DELETE", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the people who have push access to this branch. * - * @tags gists - * @name GistsListForks - * @summary List gist forks - * @request GET:/gists/{gist_id}/forks + * @tags repos + * @name ReposGetUsersWithAccessToProtectedBranch + * @summary Get users with access to the protected branch + * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users */ - gistsListForks: ( - gistId: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, + reposGetUsersWithAccessToProtectedBranch: ( + owner: string, + repo: string, + branch: string, params: RequestParams = {}, ) => - this.request({ - path: `/gists/${gistId}/forks`, + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description **Note**: This was previously `/gists/:gist_id/fork`. + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified people push access for this branch. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsFork - * @summary Fork a gist - * @request POST:/gists/{gist_id}/forks + * @tags repos + * @name ReposAddUserAccessRestrictions + * @summary Add user access restrictions + * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users */ - gistsFork: (gistId: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}/forks`, + reposAddUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** users parameter */ + users: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description - * - * @tags gists - * @name GistsCheckIsStarred - * @summary Check if a gist is starred - * @request GET:/gists/{gist_id}/star - */ - gistsCheckIsStarred: (gistId: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}/star`, - method: "GET", - ...params, - }), - - /** - * @description Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of people that have push access to this branch. This removes all people that previously had push access and grants push access to the new list of people. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsStar - * @summary Star a gist - * @request PUT:/gists/{gist_id}/star + * @tags repos + * @name ReposSetUserAccessRestrictions + * @summary Set user access restrictions + * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users */ - gistsStar: (gistId: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}/star`, + reposSetUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** users parameter */ + users: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, method: "PUT", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a user to push to this branch. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | \`array\` | Usernames of the people who should no longer have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | * - * @tags gists - * @name GistsUnstar - * @summary Unstar a gist - * @request DELETE:/gists/{gist_id}/star + * @tags repos + * @name ReposRemoveUserAccessRestrictions + * @summary Remove user access restrictions + * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users */ - gistsUnstar: (gistId: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}/star`, + reposRemoveUserAccessRestrictions: ( + owner: string, + repo: string, + branch: string, + data: { + /** users parameter */ + users: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/protection/restrictions/users\`, method: "DELETE", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Renames a branch in a repository. **Note:** Although the API responds immediately, the branch rename process might take some extra time to complete in the background. You won't be able to push to the old branch name while the rename process is in progress. For more information, see "[Renaming a branch](https://docs.github.com/github/administering-a-repository/renaming-a-branch)". The permissions required to use this endpoint depends on whether you are renaming the default branch. To rename a non-default branch: * Users must have push access. * GitHub Apps must have the \`contents:write\` repository permission. To rename the default branch: * Users must have admin or owner permissions. * GitHub Apps must have the \`administration:write\` repository permission. * - * @tags gists - * @name GistsGetRevision - * @summary Get a gist revision - * @request GET:/gists/{gist_id}/{sha} + * @tags repos + * @name ReposRenameBranch + * @summary Rename a branch + * @request POST:/repos/{owner}/{repo}/branches/{branch}/rename */ - gistsGetRevision: (gistId: string, sha: string, params: RequestParams = {}) => - this.request({ - path: `/gists/${gistId}/${sha}`, - method: "GET", + reposRenameBranch: ( + owner: string, + repo: string, + branch: string, + data: { + /** The new name of the branch. */ + new_name: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/branches/\${branch}/rename\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), - }; - gitignore = { + /** - * @description List all templates available to pass as an option when [creating a repository](https://docs.github.com/rest/reference/repos#create-a-repository-for-the-authenticated-user). + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Creates a new check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to create check runs. In a check suite, GitHub limits the number of check runs with the same name to 1000. Once these check runs exceed 1000, GitHub will start to automatically delete older check runs. * - * @tags gitignore - * @name GitignoreGetAllTemplates - * @summary Get all gitignore templates - * @request GET:/gitignore/templates + * @tags checks + * @name ChecksCreate + * @summary Create a check run + * @request POST:/repos/{owner}/{repo}/check-runs */ - gitignoreGetAllTemplates: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", + checksCreate: ( + owner: string, + repo: string, + data: ( + | { + status?: "completed"; + [key: string]: any; + } + | { + status?: "queued" | "in_progress"; + [key: string]: any; + } + ) & { + /** + * Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [\`check_run.requested_action\` webhook](https://docs.github.com/webhooks/event-payloads/#check_run) to your app. Each action includes a \`label\`, \`identifier\` and \`description\`. A maximum of three actions are accepted. See the [\`actions\` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." + * @maxItems 3 + */ + actions?: { + /** + * A short explanation of what this action would do. The maximum size is 40 characters. + * @maxLength 40 + */ + description: string; + /** + * A reference for the action on the integrator's system. The maximum size is 20 characters. + * @maxLength 20 + */ + identifier: string; + /** + * The text to be displayed on a button in the web UI. The maximum size is 20 characters. + * @maxLength 20 + */ + label: string; + }[]; + /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + completed_at?: string; + /** + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. When the conclusion is \`action_required\`, additional details should be provided on the site specified by \`details_url\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. + */ + conclusion?: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required"; + /** The URL of the integrator's site that has the full details of the check. If the integrator does not provide this, then the homepage of the GitHub app is used. */ + details_url?: string; + /** A reference for the run on the integrator's system. */ + external_id?: string; + /** The SHA of the commit. */ + head_sha: string; + /** The name of the check. For example, "code-coverage". */ + name: string; + /** Check runs can accept a variety of data in the \`output\` object, including a \`title\` and \`summary\` and can optionally provide descriptive details about the run. See the [\`output\` object](https://docs.github.com/rest/reference/checks#output-object) description. */ + output?: { + /** + * Adds information from your analysis to specific lines of code. Annotations are visible on GitHub in the **Checks** and **Files changed** tab of the pull request. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about how you can view annotations on GitHub, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [\`annotations\` object](https://docs.github.com/rest/reference/checks#annotations-object) description for details about how to use this parameter. + * @maxItems 50 + */ + annotations?: { + /** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ + annotation_level: "notice" | "warning" | "failure"; + /** The end column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + end_column?: number; + /** The end line of the annotation. */ + end_line: number; + /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ + message: string; + /** The path of the file to add an annotation to. For example, \`assets/css/main.css\`. */ + path: string; + /** Details about this annotation. The maximum size is 64 KB. */ + raw_details?: string; + /** The start column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + start_column?: number; + /** The start line of the annotation. */ + start_line: number; + /** The title that represents the annotation. The maximum size is 255 characters. */ + title?: string; + }[]; + /** Adds images to the output displayed in the GitHub pull request UI. See the [\`images\` object](https://docs.github.com/rest/reference/checks#images-object) description for details. */ + images?: { + /** The alternative text for the image. */ + alt: string; + /** A short image description. */ + caption?: string; + /** The full URL of the image. */ + image_url: string; + }[]; + /** + * The summary of the check run. This parameter supports Markdown. + * @maxLength 65535 + */ + summary: string; + /** + * The details of the check run. This parameter supports Markdown. + * @maxLength 65535 + */ + text?: string; + /** The title of the check run. */ + title: string; + }; + /** The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + started_at?: string; + /** + * The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. + * @default "queued" + */ + status?: "queued" | "in_progress" | "completed"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description The API also allows fetching the source of a single template. Use the raw [media type](https://docs.github.com/rest/overview/media-types/) to get the raw contents. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Gets a single check run using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. * - * @tags gitignore - * @name GitignoreGetTemplate - * @summary Get a gitignore template - * @request GET:/gitignore/templates/{name} + * @tags checks + * @name ChecksGet + * @summary Get a check run + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id} */ - gitignoreGetTemplate: (name: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${name}`, + checksGet: (owner: string, repo: string, checkRunId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}\`, method: "GET", format: "json", ...params, }), - }; - installation = { + /** - * @description List repositories that an app installation can access. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Updates a check run for a specific commit in a repository. Your GitHub App must have the \`checks:write\` permission to edit check runs. * - * @tags apps - * @name AppsListReposAccessibleToInstallation - * @summary List repositories accessible to the app installation - * @request GET:/installation/repositories + * @tags checks + * @name ChecksUpdate + * @summary Update a check run + * @request PATCH:/repos/{owner}/{repo}/check-runs/{check_run_id} */ - appsListReposAccessibleToInstallation: ( - query?: { + checksUpdate: ( + owner: string, + repo: string, + checkRunId: number, + data: ( + | { + status?: "completed"; + [key: string]: any; + } + | { + status?: "queued" | "in_progress"; + [key: string]: any; + } + ) & { /** - * Page number of the results to fetch. - * @default 1 + * Possible further actions the integrator can perform, which a user may trigger. Each action includes a \`label\`, \`identifier\` and \`description\`. A maximum of three actions are accepted. See the [\`actions\` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." + * @maxItems 3 */ - page?: number; + actions?: { + /** + * A short explanation of what this action would do. The maximum size is 40 characters. + * @maxLength 40 + */ + description: string; + /** + * A reference for the action on the integrator's system. The maximum size is 20 characters. + * @maxLength 20 + */ + identifier: string; + /** + * The text to be displayed on a button in the web UI. The maximum size is 20 characters. + * @maxLength 20 + */ + label: string; + }[]; + /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + completed_at?: string; /** - * Results per page (max 100) - * @default 30 + * **Required if you provide \`completed_at\` or a \`status\` of \`completed\`**. The final conclusion of the check. Can be one of \`success\`, \`failure\`, \`neutral\`, \`cancelled\`, \`skipped\`, \`timed_out\`, or \`action_required\`. + * **Note:** Providing \`conclusion\` will automatically set the \`status\` parameter to \`completed\`. Only GitHub can change a check run conclusion to \`stale\`. */ - per_page?: number; + conclusion?: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required"; + /** The URL of the integrator's site that has the full details of the check. */ + details_url?: string; + /** A reference for the run on the integrator's system. */ + external_id?: string; + /** The name of the check. For example, "code-coverage". */ + name?: string; + /** Check runs can accept a variety of data in the \`output\` object, including a \`title\` and \`summary\` and can optionally provide descriptive details about the run. See the [\`output\` object](https://docs.github.com/rest/reference/checks#output-object-1) description. */ + output?: { + /** + * Adds information from your analysis to specific lines of code. Annotations are visible in GitHub's pull request UI. Annotations are visible in GitHub's pull request UI. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about annotations in the UI, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [\`annotations\` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. + * @maxItems 50 + */ + annotations?: { + /** The level of the annotation. Can be one of \`notice\`, \`warning\`, or \`failure\`. */ + annotation_level: "notice" | "warning" | "failure"; + /** The end column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + end_column?: number; + /** The end line of the annotation. */ + end_line: number; + /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ + message: string; + /** The path of the file to add an annotation to. For example, \`assets/css/main.css\`. */ + path: string; + /** Details about this annotation. The maximum size is 64 KB. */ + raw_details?: string; + /** The start column of the annotation. Annotations only support \`start_column\` and \`end_column\` on the same line. Omit this parameter if \`start_line\` and \`end_line\` have different values. */ + start_column?: number; + /** The start line of the annotation. */ + start_line: number; + /** The title that represents the annotation. The maximum size is 255 characters. */ + title?: string; + }[]; + /** Adds images to the output displayed in the GitHub pull request UI. See the [\`images\` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. */ + images?: { + /** The alternative text for the image. */ + alt: string; + /** A short image description. */ + caption?: string; + /** The full URL of the image. */ + image_url: string; + }[]; + /** + * Can contain Markdown. + * @maxLength 65535 + */ + summary: string; + /** + * Can contain Markdown. + * @maxLength 65535 + */ + text?: string; + /** **Required**. */ + title?: string; + }; + /** This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + started_at?: string; + /** The current status. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: "queued" | "in_progress" | "completed"; }, params: RequestParams = {}, ) => - this.request< - { - repositories: Repository[]; - /** @example "selected" */ - repository_selection?: string; - total_count: number; - }, - BasicError - >({ - path: `/installation/repositories`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Revokes the installation token you're using to authenticate as an installation and access this endpoint. Once an installation token is revoked, the token is invalidated and cannot be used. Other endpoints that require the revoked installation token must have a new installation token to work. You can create a new token using the "[Create an installation access token for an app](https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app)" endpoint. You must use an [installation access token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation) to access this endpoint. - * - * @tags apps - * @name AppsRevokeInstallationAccessToken - * @summary Revoke an installation access token - * @request DELETE:/installation/token - */ - appsRevokeInstallationAccessToken: (params: RequestParams = {}) => - this.request({ - path: `/installation/token`, - method: "DELETE", - ...params, - }), - }; - issues = { - /** - * @description List issues assigned to the authenticated user across all visible repositories including owned repositories, member repositories, and organization repositories. You can use the `filter` query parameter to fetch issues that are not necessarily assigned to you. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @description Lists annotations for a check run using the annotation \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get annotations for a check run. OAuth Apps and authenticated users must have the \`repo\` scope to get annotations for a check run in a private repository. * - * @tags issues - * @name IssuesList - * @summary List issues assigned to the authenticated user - * @request GET:/issues + * @tags checks + * @name ChecksListAnnotations + * @summary List check run annotations + * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations */ - issuesList: ( + checksListAnnotations: ( + owner: string, + repo: string, + checkRunId: number, query?: { - collab?: boolean; - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Indicates which sorts of issues to return. Can be one of: - * \* `assigned`: Issues assigned to you - * \* `created`: Issues created by you - * \* `mentioned`: Issues mentioning you - * \* `subscribed`: Issues you're subscribed to updates for - * \* `all`: All issues the authenticated user can see, regardless of participation or creation - * @default "assigned" - */ - filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** A list of comma separated label names. Example: `bug,ui,@high` */ - labels?: string; - orgs?: boolean; - owned?: boolean; /** * Page number of the results to fetch. * @default 1 @@ -11254,150 +25409,113 @@ export class Api extends HttpClient - this.request({ - path: `/issues`, + this.request({ + path: \`/repos/\${owner}/\${repo}/check-runs/\${checkRunId}/annotations\`, method: "GET", query: query, format: "json", ...params, }), - }; - licenses = { + /** - * No description + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. By default, check suites are automatically created when you create a [check run](https://docs.github.com/rest/reference/checks#check-runs). You only need to use this endpoint for manually creating check suites when you've disabled automatic creation using "[Update repository preferences for check suites](https://docs.github.com/rest/reference/checks#update-repository-preferences-for-check-suites)". Your GitHub App must have the \`checks:write\` permission to create check suites. * - * @tags licenses - * @name LicensesGetAllCommonlyUsed - * @summary Get all commonly used licenses - * @request GET:/licenses + * @tags checks + * @name ChecksCreateSuite + * @summary Create a check suite + * @request POST:/repos/{owner}/{repo}/check-suites */ - licensesGetAllCommonlyUsed: ( - query?: { - featured?: boolean; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + checksCreateSuite: ( + owner: string, + repo: string, + data: { + /** The sha of the head commit. */ + head_sha: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/licenses`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description - * - * @tags licenses - * @name LicensesGet - * @summary Get a license - * @request GET:/licenses/{license} - */ - licensesGet: (license: string, params: RequestParams = {}) => - this.request({ - path: `/licenses/${license}`, - method: "GET", - format: "json", - ...params, - }), - }; - markdown = { - /** - * No description + * @description Changes the default automatic flow when creating check suites. By default, a check suite is automatically created each time code is pushed to a repository. When you disable the automatic creation of check suites, you can manually [Create a check suite](https://docs.github.com/rest/reference/checks#create-a-check-suite). You must have admin permissions in the repository to set preferences for check suites. * - * @tags markdown - * @name MarkdownRender - * @summary Render a Markdown document - * @request POST:/markdown + * @tags checks + * @name ChecksSetSuitesPreferences + * @summary Update repository preferences for check suites + * @request PATCH:/repos/{owner}/{repo}/check-suites/preferences */ - markdownRender: ( + checksSetSuitesPreferences: ( + owner: string, + repo: string, data: { - /** The repository context to use when creating references in `gfm` mode. */ - context?: string; - /** - * The rendering mode. - * @default "markdown" - * @example "markdown" - */ - mode?: "markdown" | "gfm"; - /** The Markdown text to render in HTML. */ - text: string; + /** Enables or disables automatic creation of CheckSuite events upon pushes to the repository. Enabled by default. See the [\`auto_trigger_checks\` object](https://docs.github.com/rest/reference/checks#auto_trigger_checks-object) description for details. */ + auto_trigger_checks?: { + /** The \`id\` of the GitHub App. */ + app_id: number; + /** + * Set to \`true\` to enable automatic creation of CheckSuite events upon pushes to the repository, or \`false\` to disable them. + * @default true + */ + setting: boolean; + }[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/markdown`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/preferences\`, + method: "PATCH", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description You must send Markdown as plain text (using a `Content-Type` header of `text/plain` or `text/x-markdown`) to this endpoint, rather than using JSON format. In raw mode, [GitHub Flavored Markdown](https://github.github.com/gfm/) is not supported and Markdown will be rendered in plain format like a README.md file. Markdown content must be 400 KB or less. - * - * @tags markdown - * @name MarkdownRenderRaw - * @summary Render a Markdown document in raw mode - * @request POST:/markdown/raw - */ - markdownRenderRaw: (data: WebhookConfigUrl, params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - body: data, - type: ContentType.Text, - ...params, - }), - }; - marketplaceListing = { - /** - * @description Shows whether the user or organization account actively subscribes to a plan listed by the authenticated GitHub App. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Gets a single check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. * - * @tags apps - * @name AppsGetSubscriptionPlanForAccount - * @summary Get a subscription plan for an account - * @request GET:/marketplace_listing/accounts/{account_id} + * @tags checks + * @name ChecksGetSuite + * @summary Get a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id} */ - appsGetSubscriptionPlanForAccount: (accountId: number, params: RequestParams = {}) => - this.request({ - path: `/marketplace_listing/accounts/${accountId}`, + checksGetSuite: (owner: string, repo: string, checkSuiteId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}\`, method: "GET", format: "json", ...params, }), /** - * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a check suite using its \`id\`. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. * - * @tags apps - * @name AppsListPlans - * @summary List plans - * @request GET:/marketplace_listing/plans + * @tags checks + * @name ChecksListForSuite + * @summary List check runs in a check suite + * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs */ - appsListPlans: ( + checksListForSuite: ( + owner: string, + repo: string, + checkSuiteId: number, query?: { + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: "latest" | "all"; /** * Page number of the results to fetch. * @default 1 @@ -11408,11 +25526,19 @@ export class Api extends HttpClient - this.request({ - path: `/marketplace_listing/plans`, + this.request< + { + check_runs: CheckRun[]; + total_count: number; + }, + any + >({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}/check-runs\`, method: "GET", query: query, format: "json", @@ -11420,38 +25546,48 @@ export class Api extends HttpClient + this.request({ + path: \`/repos/\${owner}/\${repo}/check-suites/\${checkSuiteId}/rerequest\`, + method: "POST", + ...params, + }), + + /** + * @description Lists all open code scanning alerts for the default branch (usually \`main\` or \`master\`). You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. + * + * @tags code-scanning + * @name CodeScanningListAlertsForRepo + * @summary List code scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/alerts + */ + codeScanningListAlertsForRepo: ( + owner: string, + repo: string, query?: { - /** To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter. */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" - */ - sort?: "created" | "updated"; + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAlertRef; + /** Set to \`open\`, \`fixed\`, or \`dismissed\` to list code scanning alerts in a specific state. */ + state?: CodeScanningAlertState; }, params: RequestParams = {}, ) => - this.request({ - path: `/marketplace_listing/plans/${planId}/accounts`, + this.request< + CodeScanningAlertCodeScanningAlertItems[], + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts\`, method: "GET", query: query, format: "json", @@ -11459,182 +25595,164 @@ export class Api extends HttpClient - this.request({ - path: `/marketplace_listing/stubbed/accounts/${accountId}`, + codeScanningGetAlert: (owner: string, repo: string, alertNumber: number, params: RequestParams = {}) => + this.request< + CodeScanningAlertCodeScanningAlert, + | void + | BasicError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts/\${alertNumber}\`, method: "GET", format: "json", ...params, }), /** - * @description Lists all plans that are part of your GitHub Marketplace listing. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @description Updates the status of a single code scanning alert. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. * - * @tags apps - * @name AppsListPlansStubbed - * @summary List plans (stubbed) - * @request GET:/marketplace_listing/stubbed/plans + * @tags code-scanning + * @name CodeScanningUpdateAlert + * @summary Update a code scanning alert + * @request PATCH:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} */ - appsListPlansStubbed: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + codeScanningUpdateAlert: ( + owner: string, + repo: string, + alertNumber: AlertNumber, + data: { + /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: \`false positive\`, \`won't fix\`, and \`used in tests\`. */ + dismissed_reason?: CodeScanningAlertDismissedReason; + /** Sets the state of the code scanning alert. Can be one of \`open\` or \`dismissed\`. You must provide \`dismissed_reason\` when you set the state to \`dismissed\`. */ + state: CodeScanningAlertSetState; }, params: RequestParams = {}, ) => - this.request({ - path: `/marketplace_listing/stubbed/plans`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/alerts/\${alertNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Returns repository and organization accounts associated with the specified plan, including free plans. For per-seat pricing, you see the list of accounts that have purchased the plan, including the number of seats purchased. When someone submits a plan change that won't be processed until the end of their billing cycle, you will also see the upcoming pending change. GitHub Apps must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. OAuth Apps must use [basic authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication) with their client ID and client secret to access this endpoint. + * @description List the details of recent code scanning analyses for a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` read permission to use this endpoint. * - * @tags apps - * @name AppsListAccountsForPlanStubbed - * @summary List accounts for a plan (stubbed) - * @request GET:/marketplace_listing/stubbed/plans/{plan_id}/accounts + * @tags code-scanning + * @name CodeScanningListRecentAnalyses + * @summary List recent code scanning analyses for a repository + * @request GET:/repos/{owner}/{repo}/code-scanning/analyses */ - appsListAccountsForPlanStubbed: ( - planId: number, + codeScanningListRecentAnalyses: ( + owner: string, + repo: string, query?: { - /** To return the oldest accounts first, set to `asc`. Can be one of `asc` or `desc`. Ignored without the `sort` parameter. */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" - */ - sort?: "created" | "updated"; + /** Set a full Git reference to list alerts for a specific branch. The \`ref\` must be formatted as \`refs/heads/\`. */ + ref?: CodeScanningAnalysisRef; + /** Set a single code scanning tool name to filter alerts by tool. */ + tool_name?: CodeScanningAnalysisToolName; }, params: RequestParams = {}, ) => - this.request({ - path: `/marketplace_listing/stubbed/plans/${planId}/accounts`, + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/analyses\`, method: "GET", query: query, format: "json", ...params, }), - }; - meta = { - /** - * @description Returns meta information about GitHub, including a list of GitHub's IP addresses. For more information, see "[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/)." **Note:** The IP addresses shown in the documentation's response are only example values. You must always query the API directly to get the latest list of IP addresses. - * - * @tags meta - * @name MetaGet - * @summary Get GitHub meta information - * @request GET:/meta - */ - metaGet: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { + /** - * No description + * @description Upload a SARIF file containing the results of a code scanning analysis to make the results available in a repository. You must use an access token with the \`security_events\` scope to use this endpoint. GitHub Apps must have the \`security_events\` write permission to use this endpoint. * - * @tags activity - * @name ActivityListPublicEventsForRepoNetwork - * @summary List public events for a network of repositories - * @request GET:/networks/{owner}/{repo}/events + * @tags code-scanning + * @name CodeScanningUploadSarif + * @summary Upload a SARIF file + * @request POST:/repos/{owner}/{repo}/code-scanning/sarifs */ - activityListPublicEventsForRepoNetwork: ( + codeScanningUploadSarif: ( owner: string, repo: string, - query?: { + data: { /** - * Page number of the results to fetch. - * @default 1 + * The base directory used in the analysis, as it appears in the SARIF file. + * This property is used to convert file paths from absolute to relative, so that alerts can be mapped to their correct location in the repository. + * @format uri + * @example "file:///github/workspace/" */ - page?: number; + checkout_uri?: string; + /** The commit SHA of the code scanning analysis file. */ + commit_sha: CodeScanningAnalysisCommitSha; + /** The full Git reference of the code scanning analysis file, formatted as \`refs/heads/\`. */ + ref: CodeScanningAnalysisRef; + /** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [\`gzip\`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ + sarif: CodeScanningAnalysisSarifFile; /** - * Results per page (max 100) - * @default 30 + * The time that the analysis run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. + * @format date */ - per_page?: number; + started_at?: string; + /** The name of the tool used to generate the code scanning analysis alert. */ + tool_name: CodeScanningAnalysisToolName; }, params: RequestParams = {}, ) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - query: query, - format: "json", + this.request({ + path: \`/repos/\${owner}/\${repo}/code-scanning/sarifs\`, + method: "POST", + body: data, + type: ContentType.Json, ...params, }), - }; - notifications = { + /** - * @description List all notifications for the current user, sorted by most recently updated. + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. * - * @tags activity - * @name ActivityListNotificationsForAuthenticatedUser - * @summary List notifications for the authenticated user - * @request GET:/notifications + * @tags repos + * @name ReposListCollaborators + * @summary List repository collaborators + * @request GET:/repos/{owner}/{repo}/collaborators */ - activityListNotificationsForAuthenticatedUser: ( + reposListCollaborators: ( + owner: string, + repo: string, query?: { /** - * If `true`, show notifications marked as read. - * @default false + * Filter collaborators returned by their affiliation. Can be one of: + * \\* \`outside\`: All outside collaborators of an organization-owned repository. + * \\* \`direct\`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. + * \\* \`all\`: All collaborators the authenticated user can see. + * @default "all" */ - all?: boolean; - /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - before?: string; + affiliation?: "outside" | "direct" | "all"; /** * Page number of the results to fetch. * @default 1 */ page?: number; - /** - * If `true`, only shows notifications in which the user is directly participating or mentioned. - * @default false - */ - participating?: boolean; /** * Results per page (max 100) * @default 30 */ per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/notifications`, + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", query: query, format: "json", @@ -11642,107 +25760,50 @@ export class Api extends HttpClient - this.request< - { - message?: string; - }, - BasicError - >({ - path: `/notifications`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags activity - * @name ActivityGetThread - * @summary Get a thread - * @request GET:/notifications/threads/{thread_id} - */ - activityGetThread: (threadId: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${threadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @tags activity - * @name ActivityMarkThreadAsRead - * @summary Mark a thread as read - * @request PATCH:/notifications/threads/{thread_id} - */ - activityMarkThreadAsRead: (threadId: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${threadId}`, - method: "PATCH", - ...params, - }), - - /** - * @description This checks to see if the current user is subscribed to a thread. You can also [get a repository subscription](https://docs.github.com/rest/reference/activity#get-a-repository-subscription). Note that subscriptions are only generated if a user is participating in a conversation--for example, they've replied to the thread, were **@mentioned**, or manually subscribe to a thread. + * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. * - * @tags activity - * @name ActivityGetThreadSubscriptionForAuthenticatedUser - * @summary Get a thread subscription for the authenticated user - * @request GET:/notifications/threads/{thread_id}/subscription + * @tags repos + * @name ReposCheckCollaborator + * @summary Check if a user is a repository collaborator + * @request GET:/repos/{owner}/{repo}/collaborators/{username} */ - activityGetThreadSubscriptionForAuthenticatedUser: (threadId: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${threadId}/subscription`, + reposCheckCollaborator: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, method: "GET", - format: "json", ...params, }), /** - * @description If you are watching a repository, you receive notifications for all threads by default. Use this endpoint to ignore future notifications for threads until you comment on the thread or get an **@mention**. You can also use this endpoint to subscribe to threads that you are currently not receiving notifications for or to subscribed to threads that you have previously ignored. Unsubscribing from a conversation in a repository that you are not watching is functionally equivalent to the [Delete a thread subscription](https://docs.github.com/rest/reference/activity#delete-a-thread-subscription) endpoint. + * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. For more information the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." The invitee will receive a notification that they have been invited to the repository, which they must accept or decline. They may do this via the notifications page, the email they receive, or by using the [repository invitations API endpoints](https://docs.github.com/rest/reference/repos#invitations). **Rate limits** To prevent abuse, you are limited to sending 50 invitations to a repository per 24 hour period. Note there is no limit if you are inviting organization members to an organization repository. * - * @tags activity - * @name ActivitySetThreadSubscription - * @summary Set a thread subscription - * @request PUT:/notifications/threads/{thread_id}/subscription + * @tags repos + * @name ReposAddCollaborator + * @summary Add a repository collaborator + * @request PUT:/repos/{owner}/{repo}/collaborators/{username} */ - activitySetThreadSubscription: ( - threadId: number, + reposAddCollaborator: ( + owner: string, + repo: string, + username: string, data: { /** - * Whether to block all notifications from a thread. - * @default false + * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of: + * \\* \`pull\` - can pull, but not push to or administer this repository. + * \\* \`push\` - can pull and push, but not administer this repository. + * \\* \`admin\` - can pull, push and administer this repository. + * \\* \`maintain\` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions. + * \\* \`triage\` - Recommended for contributors who need to proactively manage issues and pull requests without write access. + * @default "push" */ - ignored?: boolean; + permission?: "pull" | "push" | "admin" | "maintain" | "triage"; + /** @example ""push"" */ + permissions?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/notifications/threads/${threadId}/subscription`, + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, method: "PUT", body: data, type: ContentType.Json, @@ -11751,394 +25812,483 @@ export class Api extends HttpClient - this.request({ - path: `/notifications/threads/${threadId}/subscription`, + reposRemoveCollaborator: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}\`, method: "DELETE", ...params, }), - }; - octocat = { + /** - * @description Get the octocat as ASCII art + * @description Checks the repository permission of a collaborator. The possible repository permissions are \`admin\`, \`write\`, \`read\`, and \`none\`. * - * @tags meta - * @name MetaGetOctocat - * @summary Get Octocat - * @request GET:/octocat + * @tags repos + * @name ReposGetCollaboratorPermissionLevel + * @summary Get repository permissions for a user + * @request GET:/repos/{owner}/{repo}/collaborators/{username}/permission */ - metaGetOctocat: ( - query?: { - /** The words to show in Octocat's speech bubble */ - s?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/octocat`, + reposGetCollaboratorPermissionLevel: (owner: string, repo: string, username: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/collaborators/\${username}/permission\`, method: "GET", - query: query, + format: "json", ...params, }), - }; - organizations = { + /** - * @description Lists all organizations, in the order that they were created on GitHub. **Note:** Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of organizations. + * @description Commit Comments use [these custom media types](https://docs.github.com/rest/reference/repos#custom-media-types). You can read more about the use of media types in the API [here](https://docs.github.com/rest/overview/media-types/). Comments are ordered by ascending ID. * - * @tags orgs - * @name OrgsList - * @summary List organizations - * @request GET:/organizations + * @tags repos + * @name ReposListCommitCommentsForRepo + * @summary List commit comments for a repository + * @request GET:/repos/{owner}/{repo}/comments */ - orgsList: ( + reposListCommitCommentsForRepo: ( + owner: string, + repo: string, query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; /** * Results per page (max 100) * @default 30 */ per_page?: number; - /** An organization ID. Only return organizations with an ID greater than this ID. */ - since?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/organizations`, + this.request({ + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", query: query, format: "json", ...params, }), - }; - orgs = { + /** - * @description To see many of the organization response values, you need to be an authenticated organization owner with the `admin:org` scope. When the value of `two_factor_requirement_enabled` is `true`, the organization requires all members, billing managers, and outside collaborators to enable [two-factor authentication](https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/). GitHub Apps with the `Organization plan` permission can use this endpoint to retrieve information about an organization's GitHub plan. See "[Authenticating with GitHub Apps](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/)" for details. For an example response, see 'Response with GitHub plan information' below." + * No description * - * @tags orgs - * @name OrgsGet - * @summary Get an organization - * @request GET:/orgs/{org} + * @tags repos + * @name ReposGetCommitComment + * @summary Get a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id} */ - orgsGet: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, + reposGetCommitComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, }), /** - * @description **Parameter Deprecation Notice:** GitHub will replace and discontinue `members_allowed_repository_creation_type` in favor of more granular permissions. The new input parameters are `members_can_create_public_repositories`, `members_can_create_private_repositories` for all organizations and `members_can_create_internal_repositories` for organizations associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. For more information, see the [blog post](https://developer.github.com/changes/2019-12-03-internal-visibility-changes). Enables an authenticated organization owner with the `admin:org` scope to update the organization's profile and member privileges. + * No description * - * @tags orgs - * @name OrgsUpdate - * @summary Update an organization - * @request PATCH:/orgs/{org} + * @tags repos + * @name ReposUpdateCommitComment + * @summary Update a commit comment + * @request PATCH:/repos/{owner}/{repo}/comments/{comment_id} */ - orgsUpdate: ( - org: string, + reposUpdateCommitComment: ( + owner: string, + repo: string, + commentId: number, data: { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - /** @example ""http://github.blog"" */ - blog?: string; - /** The company name. */ - company?: string; - /** - * Default permission level members have for organization repositories: - * \* `read` - can pull, but not push to or administer this repository. - * \* `write` - can pull and push, but not administer this repository. - * \* `admin` - can pull, push, and administer this repository. - * \* `none` - no permissions granted by default. - * @default "read" - */ - default_repository_permission?: "read" | "write" | "admin" | "none"; - /** The description of the company. */ - description?: string; - /** The publicly visible email address. */ - email?: string; - /** Toggles whether an organization can use organization projects. */ - has_organization_projects?: boolean; - /** Toggles whether repositories that belong to the organization can use repository projects. */ - has_repository_projects?: boolean; - /** The location. */ - location?: string; - /** - * Specifies which types of repositories non-admin organization members can create. Can be one of: - * \* `all` - all organization members can create public and private repositories. - * \* `private` - members can create private repositories. This option is only available to repositories that are part of an organization on GitHub Enterprise Cloud. - * \* `none` - only admin members can create repositories. - * **Note:** This parameter is deprecated and will be removed in the future. Its return value ignores internal repositories. Using this parameter overrides values set in `members_can_create_repositories`. See the parameter deprecation notice in the operation description for details. - */ - members_allowed_repository_creation_type?: "all" | "private" | "none"; - /** - * Toggles whether organization members can create internal repositories, which are visible to all enterprise members. You can only allow members to create internal repositories if your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+. Can be one of: - * \* `true` - all organization members can create internal repositories. - * \* `false` - only organization owners can create internal repositories. - * Default: `true`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. - */ - members_can_create_internal_repositories?: boolean; - /** - * Toggles whether organization members can create GitHub Pages sites. Can be one of: - * \* `true` - all organization members can create GitHub Pages sites. - * \* `false` - no organization members can create GitHub Pages sites. Existing published sites will not be impacted. - * @default true - */ - members_can_create_pages?: boolean; - /** - * Toggles whether organization members can create private GitHub Pages sites. Can be one of: - * \* `true` - all organization members can create private GitHub Pages sites. - * \* `false` - no organization members can create private GitHub Pages sites. Existing published sites will not be impacted. - * @default true - */ - members_can_create_private_pages?: boolean; - /** - * Toggles whether organization members can create private repositories, which are visible to organization members with permission. Can be one of: - * \* `true` - all organization members can create private repositories. - * \* `false` - only organization owners can create private repositories. - * Default: `true`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. - */ - members_can_create_private_repositories?: boolean; - /** - * Toggles whether organization members can create public GitHub Pages sites. Can be one of: - * \* `true` - all organization members can create public GitHub Pages sites. - * \* `false` - no organization members can create public GitHub Pages sites. Existing published sites will not be impacted. - * @default true - */ - members_can_create_public_pages?: boolean; + /** The contents of the comment */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposDeleteCommitComment + * @summary Delete a commit comment + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id} + */ + reposDeleteCommitComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, + method: "DELETE", + ...params, + }), + + /** + * @description List the reactions to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * + * @tags reactions + * @name ReactionsListForCommitComment + * @summary List reactions for a commit comment + * @request GET:/repos/{owner}/{repo}/comments/{comment_id}/reactions + */ + reactionsListForCommitComment: ( + owner: string, + repo: string, + commentId: number, + query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** - * Toggles whether organization members can create public repositories, which are visible to anyone. Can be one of: - * \* `true` - all organization members can create public repositories. - * \* `false` - only organization owners can create public repositories. - * Default: `true`. For more information, see "[Restricting repository creation in your organization](https://help.github.com/github/setting-up-and-managing-organizations-and-teams/restricting-repository-creation-in-your-organization)" in the GitHub Help documentation. + * Page number of the results to fetch. + * @default 1 */ - members_can_create_public_repositories?: boolean; + page?: number; /** - * Toggles the ability of non-admin organization members to create repositories. Can be one of: - * \* `true` - all organization members can create repositories. - * \* `false` - only organization owners can create repositories. - * Default: `true` - * **Note:** A parameter can override this parameter. See `members_allowed_repository_creation_type` in this table for details. **Note:** A parameter can override this parameter. See `members_allowed_repository_creation_type` in this table for details. - * @default true + * Results per page (max 100) + * @default 30 */ - members_can_create_repositories?: boolean; - /** The shorthand name of the company. */ - name?: string; - /** The Twitter username of the company. */ - twitter_username?: string; + per_page?: number; }, params: RequestParams = {}, ) => this.request< - OrganizationFull, + Reaction[], | BasicError | { documentation_url: string; message: string; } - | (ValidationError | ValidationErrorSimple) >({ - path: `/orgs/${org}`, - method: "PATCH", - body: data, - type: ContentType.Json, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Gets the GitHub Actions permissions policy for repositories and allowed actions in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description Create a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). A response with a \`Status: 200 OK\` means that you already added the reaction type to this commit comment. * - * @tags actions - * @name ActionsGetGithubActionsPermissionsOrganization - * @summary Get GitHub Actions permissions for an organization - * @request GET:/orgs/{org}/actions/permissions + * @tags reactions + * @name ReactionsCreateForCommitComment + * @summary Create reaction for a commit comment + * @request POST:/repos/{owner}/{repo}/comments/{comment_id}/reactions */ - actionsGetGithubActionsPermissionsOrganization: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/permissions`, - method: "GET", + reactionsCreateForCommitComment: ( + owner: string, + repo: string, + commentId: number, + data: { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the commit comment. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + }, + params: RequestParams = {}, + ) => + this.request< + Reaction, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Sets the GitHub Actions permissions policy for repositories and allowed actions in an organization. If the organization belongs to an enterprise that has set restrictive permissions at the enterprise level, such as `allowed_actions` to `selected` actions, then you cannot override them for the organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). * - * @tags actions - * @name ActionsSetGithubActionsPermissionsOrganization - * @summary Set GitHub Actions permissions for an organization - * @request PUT:/orgs/{org}/actions/permissions + * @tags reactions + * @name ReactionsDeleteForCommitComment + * @summary Delete a commit comment reaction + * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id} */ - actionsSetGithubActionsPermissionsOrganization: ( - org: string, - data: { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions?: AllowedActions; - /** The policy that controls the repositories in the organization that are allowed to run GitHub Actions. Can be one of: `all`, `none`, or `selected`. */ - enabled_repositories: EnabledRepositories; - }, + reactionsDeleteForCommitComment: ( + owner: string, + repo: string, + commentId: number, + reactionId: number, params: RequestParams = {}, ) => this.request({ - path: `/orgs/${org}/actions/permissions`, - method: "PUT", - body: data, - type: ContentType.Json, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", ...params, }), /** - * @description Lists the selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for `enabled_repositories` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags actions - * @name ActionsListSelectedRepositoriesEnabledGithubActionsOrganization - * @summary List selected repositories enabled for GitHub Actions in an organization - * @request GET:/orgs/{org}/actions/permissions/repositories + * @tags repos + * @name ReposListCommits + * @summary List commits + * @request GET:/repos/{owner}/{repo}/commits */ - actionsListSelectedRepositoriesEnabledGithubActionsOrganization: ( - org: string, + reposListCommits: ( + owner: string, + repo: string, query?: { + /** GitHub login or email address by which to filter by commit author. */ + author?: string; /** * Page number of the results to fetch. * @default 1 */ page?: number; + /** Only commits containing this file path will be returned. */ + path?: string; /** * Results per page (max 100) * @default 30 */ per_page?: number; + /** SHA or branch to start listing commits from. Default: the repository’s default branch (usually \`master\`). */ + sha?: string; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + until?: string; }, params: RequestParams = {}, ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Returns all branches where the given commit SHA is the HEAD, or latest commit for the branch. + * + * @tags repos + * @name ReposListBranchesForHeadCommit + * @summary List branches for HEAD commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head + */ + reposListBranchesForHeadCommit: (owner: string, repo: string, commitSha: string, params: RequestParams = {}) => this.request< - { - repositories: Repository[]; - total_count: number; - }, - any + BranchShort[], + | { + documentation_url: string; + message: string; + } + | ValidationError >({ - path: `/orgs/${org}/actions/permissions/repositories`, + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/branches-where-head\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Replaces the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for `enabled_repositories` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description Use the \`:commit_sha\` to specify the commit that will have its comments listed. * - * @tags actions - * @name ActionsSetSelectedRepositoriesEnabledGithubActionsOrganization - * @summary Set selected repositories enabled for GitHub Actions in an organization - * @request PUT:/orgs/{org}/actions/permissions/repositories + * @tags repos + * @name ReposListCommentsForCommit + * @summary List commit comments + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/comments */ - actionsSetSelectedRepositoriesEnabledGithubActionsOrganization: ( - org: string, - data: { - /** List of repository IDs to enable for GitHub Actions. */ - selected_repository_ids: number[]; + reposListCommentsForCommit: ( + owner: string, + repo: string, + commitSha: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/permissions/repositories`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/comments\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for `enabled_repositories` must be must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description Create a comment for a commit using its \`:commit_sha\`. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. * - * @tags actions - * @name ActionsEnableSelectedRepositoryGithubActionsOrganization - * @summary Enable a selected repository for GitHub Actions in an organization - * @request PUT:/orgs/{org}/actions/permissions/repositories/{repository_id} + * @tags repos + * @name ReposCreateCommitComment + * @summary Create a commit comment + * @request POST:/repos/{owner}/{repo}/commits/{commit_sha}/comments */ - actionsEnableSelectedRepositoryGithubActionsOrganization: ( - org: string, - repositoryId: number, + reposCreateCommitComment: ( + owner: string, + repo: string, + commitSha: string, + data: { + /** The contents of the comment. */ + body: string; + /** **Deprecated**. Use **position** parameter instead. Line number in the file to comment on. */ + line?: number; + /** Relative path of the file to comment on. */ + path?: string; + /** Line index in the diff to comment on. */ + position?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/permissions/repositories/${repositoryId}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Removes a repository from the list of selected repositories that are enabled for GitHub Actions in an organization. To use this endpoint, the organization permission policy for `enabled_repositories` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description Lists all pull requests containing the provided commit SHA, which can be from any point in the commit history. The results will include open and closed pull requests. Additional preview headers may be required to see certain details for associated pull requests, such as whether a pull request is in a draft state. For more information about previews that might affect this endpoint, see the [List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests) endpoint. * - * @tags actions - * @name ActionsDisableSelectedRepositoryGithubActionsOrganization - * @summary Disable a selected repository for GitHub Actions in an organization - * @request DELETE:/orgs/{org}/actions/permissions/repositories/{repository_id} + * @tags repos + * @name ReposListPullRequestsAssociatedWithCommit + * @summary List pull requests associated with a commit + * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/pulls */ - actionsDisableSelectedRepositoryGithubActionsOrganization: ( - org: string, - repositoryId: number, + reposListPullRequestsAssociatedWithCommit: ( + owner: string, + repo: string, + commitSha: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/permissions/repositories/${repositoryId}`, - method: "DELETE", + this.request< + PullRequestSimple[], + { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/commits/\${commitSha}/pulls\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Gets the selected actions that are allowed in an organization. To use this endpoint, the organization permission policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)."" You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description Returns the contents of a single commit reference. You must have \`read\` access for the repository to use this endpoint. **Note:** If there are more than 300 files in the commit diff, the response will include pagination link headers for the remaining files, up to a limit of 3000 files. Each page contains the static commit information, and the only changes are to the file listing. You can pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch \`diff\` and \`patch\` formats. Diffs with binary data will have no \`patch\` property. To return only the SHA-1 hash of the commit reference, you can provide the \`sha\` custom [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) in the \`Accept\` header. You can use this endpoint to check if a remote reference's SHA-1 hash is the same as your local reference's SHA-1 hash by providing the local SHA-1 reference as the ETag. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags actions - * @name ActionsGetAllowedActionsOrganization - * @summary Get allowed actions for an organization - * @request GET:/orgs/{org}/actions/permissions/selected-actions + * @tags repos + * @name ReposGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/commits/{ref} */ - actionsGetAllowedActionsOrganization: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/permissions/selected-actions`, + reposGetCommit: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}\`, method: "GET", format: "json", ...params, }), /** - * @description Sets the actions that are allowed in an organization. To use this endpoint, the organization permission policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for an organization](#set-github-actions-permissions-for-an-organization)." If the organization belongs to an enterprise that has `selected` actions set at the enterprise level, then you cannot override any of the enterprise's allowed actions settings. To use the `patterns_allowed` setting for private repositories, the organization must belong to an enterprise. If the organization does not belong to an enterprise, then the `patterns_allowed` setting only applies to public repositories in the organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `administration` organization permission to use this API. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array. Lists check runs for a commit ref. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the \`repo\` scope to get check runs in a private repository. * - * @tags actions - * @name ActionsSetAllowedActionsOrganization - * @summary Set allowed actions for an organization - * @request PUT:/orgs/{org}/actions/permissions/selected-actions + * @tags checks + * @name ChecksListForRef + * @summary List check runs for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-runs */ - actionsSetAllowedActionsOrganization: (org: string, data: SelectedActions, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/permissions/selected-actions`, - method: "PUT", - body: data, - type: ContentType.Json, + checksListForRef: ( + owner: string, + repo: string, + ref: string, + query?: { + /** Returns check runs with the specified \`name\`. */ + check_name?: string; + /** + * Filters check runs by their \`completed_at\` timestamp. Can be one of \`latest\` (returning the most recent check runs) or \`all\`. + * @default "latest" + */ + filter?: "latest" | "all"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Returns check runs with the specified \`status\`. Can be one of \`queued\`, \`in_progress\`, or \`completed\`. */ + status?: "queued" | "in_progress" | "completed"; + }, + params: RequestParams = {}, + ) => + this.request< + { + check_runs: CheckRun[]; + total_count: number; + }, + any + >({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/check-runs\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists all self-hosted runner groups configured in an organization and inherited from an enterprise. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty \`pull_requests\` array and a \`null\` value for \`head_branch\`. Lists check suites for a commit \`ref\`. The \`ref\` can be a SHA, branch name, or a tag name. GitHub Apps must have the \`checks:read\` permission on a private repository or pull access to a public repository to list check suites. OAuth Apps and authenticated users must have the \`repo\` scope to get check suites in a private repository. * - * @tags actions - * @name ActionsListSelfHostedRunnerGroupsForOrg - * @summary List self-hosted runner groups for an organization - * @request GET:/orgs/{org}/actions/runner-groups + * @tags checks + * @name ChecksListSuitesForRef + * @summary List check suites for a Git reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-suites */ - actionsListSelfHostedRunnerGroupsForOrg: ( - org: string, + checksListSuitesForRef: ( + owner: string, + repo: string, + ref: string, query?: { + /** + * Filters check suites by GitHub App \`id\`. + * @example 1 + */ + app_id?: number; + /** Returns check runs with the specified \`name\`. */ + check_name?: string; /** * Page number of the results to fetch. * @default 1 @@ -12154,12 +26304,12 @@ export class Api extends HttpClient this.request< { - runner_groups: RunnerGroupsOrg[]; + check_suites: CheckSuite[]; total_count: number; }, any >({ - path: `/orgs/${org}/actions/runner-groups`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/check-suites\`, method: "GET", query: query, format: "json", @@ -12167,201 +26317,286 @@ export class Api extends HttpClient + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Users with pull access in a repository can view commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. Statuses are returned in reverse chronological order. The first status in the list will be the latest one. This resource is also available via a legacy route: \`GET /repos/:owner/:repo/statuses/:ref\`. + * + * @tags repos + * @name ReposListCommitStatusesForRef + * @summary List commit statuses for a reference + * @request GET:/repos/{owner}/{repo}/commits/{ref}/statuses + */ + reposListCommitStatusesForRef: ( + owner: string, + repo: string, + ref: string, + query?: { /** - * Visibility of a runner group. You can select all repositories, select individual repositories, or limit access to private repositories. Can be one of: `all`, `selected`, or `private`. - * @default "all" + * Page number of the results to fetch. + * @default 1 */ - visibility?: "selected" | "all" | "private"; + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups`, - method: "POST", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/statuses\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Gets a specific self-hosted runner group for an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Returns the contents of the repository's code of conduct file, if one is detected. A code of conduct is detected if there is a file named \`CODE_OF_CONDUCT\` in the root directory of the repository. GitHub detects which code of conduct it is using fuzzy matching. * - * @tags actions - * @name ActionsGetSelfHostedRunnerGroupForOrg - * @summary Get a self-hosted runner group for an organization - * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id} + * @tags codes-of-conduct + * @name CodesOfConductGetForRepo + * @summary Get the code of conduct for a repository + * @request GET:/repos/{owner}/{repo}/community/code_of_conduct */ - actionsGetSelfHostedRunnerGroupForOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}`, + codesOfConductGetForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/community/code_of_conduct\`, method: "GET", format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Updates the `name` and `visibility` of a self-hosted runner group in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description This endpoint will return all community profile metrics, including an overall health score, repository description, the presence of documentation, detected code of conduct, detected license, and the presence of ISSUE\\_TEMPLATE, PULL\\_REQUEST\\_TEMPLATE, README, and CONTRIBUTING files. The \`health_percentage\` score is defined as a percentage of how many of these four documents are present: README, CONTRIBUTING, LICENSE, and CODE_OF_CONDUCT. For example, if all four documents are present, then the \`health_percentage\` is \`100\`. If only one is present, then the \`health_percentage\` is \`25\`. \`content_reports_enabled\` is only returned for organization-owned repositories. * - * @tags actions - * @name ActionsUpdateSelfHostedRunnerGroupForOrg - * @summary Update a self-hosted runner group for an organization - * @request PATCH:/orgs/{org}/actions/runner-groups/{runner_group_id} + * @tags repos + * @name ReposGetCommunityProfileMetrics + * @summary Get community profile metrics + * @request GET:/repos/{owner}/{repo}/community/profile */ - actionsUpdateSelfHostedRunnerGroupForOrg: ( - org: string, - runnerGroupId: number, - data: { - /** Name of the runner group. */ - name?: string; - /** Visibility of a runner group. You can select all repositories, select individual repositories, or all private repositories. Can be one of: `all`, `selected`, or `private`. */ - visibility?: "selected" | "all" | "private"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + reposGetCommunityProfileMetrics: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/community/profile\`, + method: "GET", format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Deletes a self-hosted runner group for an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Both \`:base\` and \`:head\` must be branch names in \`:repo\`. To compare branches across other repositories in the same network as \`:repo\`, use the format \`:branch\`. The response from the API is equivalent to running the \`git log base..head\` command; however, commits are returned in chronological order. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. The response also includes details on the files that were changed between the two commits. This includes the status of the change (for example, if a file was added, removed, modified, or renamed), and details of the change itself. For example, files with a \`renamed\` status have a \`previous_filename\` field showing the previous filename of the file, and files with a \`modified\` status have a \`patch\` field showing the changes made to the file. **Working with large comparisons** The response will include a comparison of up to 250 commits. If you are working with a larger commit range, you can use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) to enumerate all commits in the range. For comparisons with extremely large diffs, you may receive an error response indicating that the diff took too long to generate. You can typically resolve this error by using a smaller commit range. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags actions - * @name ActionsDeleteSelfHostedRunnerGroupFromOrg - * @summary Delete a self-hosted runner group from an organization - * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id} + * @tags repos + * @name ReposCompareCommits + * @summary Compare two commits + * @request GET:/repos/{owner}/{repo}/compare/{base}...{head} */ - actionsDeleteSelfHostedRunnerGroupFromOrg: (org: string, runnerGroupId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}`, - method: "DELETE", + reposCompareCommits: (owner: string, repo: string, base: string, head: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/compare/\${base}...\${head}\`, + method: "GET", + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud and GitHub Enterprise Server. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists the repositories with access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Gets the contents of a file or directory in a repository. Specify the file path or directory in \`:path\`. If you omit \`:path\`, you will receive the contents of the repository's root directory. See the description below regarding what the API response includes for directories. Files and symlinks support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML (when supported). All content types support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) to ensure the content is returned in a consistent object format. **Note**: * To get a repository's contents recursively, you can [recursively get the tree](https://docs.github.com/rest/reference/git#trees). * This API has an upper limit of 1,000 files for a directory. If you need to retrieve more files, use the [Git Trees API](https://docs.github.com/rest/reference/git#get-a-tree). * This API supports files up to 1 megabyte in size. #### If the content is a directory The response will be an array of objects, one object for each item in the directory. When listing the contents of a directory, submodules have their "type" specified as "file". Logically, the value _should_ be "submodule". This behavior exists in API v3 [for backwards compatibility purposes](https://git.io/v1YCW). In the next major version of the API, the type will be returned as "submodule". #### If the content is a symlink If the requested \`:path\` points to a symlink, and the symlink's target is a normal file in the repository, then the API responds with the content of the file (in the format shown in the example. Otherwise, the API responds with an object describing the symlink itself. #### If the content is a submodule The \`submodule_git_url\` identifies the location of the submodule repository, and the \`sha\` identifies a specific commit within the submodule repository. Git uses the given URL when cloning the submodule repository, and checks out the submodule at that specific commit. If the submodule repository is not hosted on github.com, the Git URLs (\`git_url\` and \`_links["git"]\`) and the github.com URLs (\`html_url\` and \`_links["html"]\`) will have null values. * - * @tags actions - * @name ActionsListRepoAccessToSelfHostedRunnerGroupInOrg - * @summary List repository access to a self-hosted runner group in an organization - * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + * @tags repos + * @name ReposGetContent + * @summary Get repository content + * @request GET:/repos/{owner}/{repo}/contents/{path} */ - actionsListRepoAccessToSelfHostedRunnerGroupInOrg: ( - org: string, - runnerGroupId: number, + reposGetContent: ( + owner: string, + repo: string, + path: string, + query?: { + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + }, params: RequestParams = {}, ) => - this.request< - { - repositories: Repository[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/repositories`, + this.request({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Replaces the list of repositories that have access to a self-hosted runner group configured in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Creates a new file or replaces an existing file in a repository. * - * @tags actions - * @name ActionsSetRepoAccessToSelfHostedRunnerGroupInOrg - * @summary Set repository access for a self-hosted runner group in an organization - * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories + * @tags repos + * @name ReposCreateOrUpdateFileContents + * @summary Create or update file contents + * @request PUT:/repos/{owner}/{repo}/contents/{path} */ - actionsSetRepoAccessToSelfHostedRunnerGroupInOrg: ( - org: string, - runnerGroupId: number, + reposCreateOrUpdateFileContents: ( + owner: string, + repo: string, + path: string, data: { - /** List of repository IDs that can access the runner group. */ - selected_repository_ids: number[]; + /** The author of the file. Default: The \`committer\` or the authenticated user if you omit \`committer\`. */ + author?: { + /** @example ""2013-01-15T17:13:22+05:00"" */ + date?: string; + /** The email of the author or committer of the commit. You'll receive a \`422\` status code if \`email\` is omitted. */ + email: string; + /** The name of the author or committer of the commit. You'll receive a \`422\` status code if \`name\` is omitted. */ + name: string; + }; + /** The branch name. Default: the repository’s default branch (usually \`master\`) */ + branch?: string; + /** The person that committed the file. Default: the authenticated user. */ + committer?: { + /** @example ""2013-01-05T13:13:22+05:00"" */ + date?: string; + /** The email of the author or committer of the commit. You'll receive a \`422\` status code if \`email\` is omitted. */ + email: string; + /** The name of the author or committer of the commit. You'll receive a \`422\` status code if \`name\` is omitted. */ + name: string; + }; + /** The new file content, using Base64 encoding. */ + content: string; + /** The commit message. */ + message: string; + /** **Required if you are updating a file**. The blob SHA of the file being replaced. */ + sha?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/repositories`, + this.request({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a repository to the list of selected repositories that can access a self-hosted runner group. The runner group must have `visibility` set to `selected`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Deletes a file in a repository. You can provide an additional \`committer\` parameter, which is an object containing information about the committer. Or, you can provide an \`author\` parameter, which is an object containing information about the author. The \`author\` section is optional and is filled in with the \`committer\` information if omitted. If the \`committer\` information is omitted, the authenticated user's information is used. You must provide values for both \`name\` and \`email\`, whether you choose to use \`author\` or \`committer\`. Otherwise, you'll receive a \`422\` status code. * - * @tags actions - * @name ActionsAddRepoAccessToSelfHostedRunnerGroupInOrg - * @summary Add repository access to a self-hosted runner group in an organization - * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + * @tags repos + * @name ReposDeleteFile + * @summary Delete a file + * @request DELETE:/repos/{owner}/{repo}/contents/{path} */ - actionsAddRepoAccessToSelfHostedRunnerGroupInOrg: ( - org: string, - runnerGroupId: number, - repositoryId: number, + reposDeleteFile: ( + owner: string, + repo: string, + path: string, + data: { + /** object containing information about the author. */ + author?: { + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The branch name. Default: the repository’s default branch (usually \`master\`) */ + branch?: string; + /** object containing information about the committer. */ + committer?: { + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The commit message. */ + message: string; + /** The blob SHA of the file being replaced. */ + sha: string; + }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/repositories/${repositoryId}`, - method: "PUT", + this.request< + FileCommit, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, + method: "DELETE", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a repository from the list of selected repositories that can access a self-hosted runner group. The runner group must have `visibility` set to `selected`. For more information, see "[Create a self-hosted runner group for an organization](#create-a-self-hosted-runner-group-for-an-organization)." You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Lists contributors to the specified repository and sorts them by the number of commits per contributor in descending order. This endpoint may return information that is a few hours old because the GitHub REST API v3 caches contributor data to improve performance. GitHub identifies contributors by author email address. This endpoint groups contribution counts by GitHub user, which includes all associated email addresses. To improve performance, only the first 500 author email addresses in the repository link to GitHub users. The rest will appear as anonymous contributors without associated GitHub user information. * - * @tags actions - * @name ActionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg - * @summary Remove repository access to a self-hosted runner group in an organization - * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} + * @tags repos + * @name ReposListContributors + * @summary List repository contributors + * @request GET:/repos/{owner}/{repo}/contributors */ - actionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg: ( - org: string, - runnerGroupId: number, - repositoryId: number, + reposListContributors: ( + owner: string, + repo: string, + query?: { + /** Set to \`1\` or \`true\` to include anonymous contributors in results. */ + anon?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/repositories/${repositoryId}`, - method: "DELETE", + this.request({ + path: \`/repos/\${owner}/\${repo}/contributors\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Lists self-hosted runners that are in a specific organization group. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Simple filtering of deployments is available via query parameters: * - * @tags actions - * @name ActionsListSelfHostedRunnersInGroupForOrg - * @summary List self-hosted runners in a group for an organization - * @request GET:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners + * @tags repos + * @name ReposListDeployments + * @summary List deployments + * @request GET:/repos/{owner}/{repo}/deployments */ - actionsListSelfHostedRunnersInGroupForOrg: ( - org: string, - runnerGroupId: number, + reposListDeployments: ( + owner: string, + repo: string, query?: { + /** + * The name of the environment that was deployed to (e.g., \`staging\` or \`production\`). + * @default "none" + */ + environment?: string; /** * Page number of the results to fetch. * @default 1 @@ -12372,17 +26607,26 @@ export class Api extends HttpClient - this.request< - { - runners: Runner[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/runners`, + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", query: query, format: "json", @@ -12390,80 +26634,119 @@ export class Api extends HttpClient | string; + /** + * Specifies if the given environment is one that end-users directly interact with. Default: \`true\` when \`environment\` is \`production\` and \`false\` otherwise. + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + */ + production_environment?: boolean; + /** The ref to deploy. This can be a branch, tag, or SHA. */ + ref: string; + /** The [status](https://docs.github.com/rest/reference/repos#statuses) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts. */ + required_contexts?: string[]; + /** + * Specifies a task to execute (e.g., \`deploy\` or \`deploy:migrations\`). + * @default "deploy" + */ + task?: string; + /** + * Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: \`false\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default false + */ + transient_environment?: boolean; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/runners`, - method: "PUT", + this.request< + Deployment, + | { + /** @example ""https://docs.github.com/rest/reference/repos#create-a-deployment"" */ + documentation_url?: string; + message?: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/deployments\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Adds a self-hosted runner to a runner group configured in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * No description * - * @tags actions - * @name ActionsAddSelfHostedRunnerToGroupForOrg - * @summary Add a self-hosted runner to a group for an organization - * @request PUT:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + * @tags repos + * @name ReposGetDeployment + * @summary Get a deployment + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id} */ - actionsAddSelfHostedRunnerToGroupForOrg: ( - org: string, - runnerGroupId: number, - runnerId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/runners/${runnerId}`, - method: "PUT", + reposGetDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}\`, + method: "GET", + format: "json", ...params, }), /** - * @description The self-hosted runner groups REST API is available with GitHub Enterprise Cloud. For more information, see "[GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products)." Removes a self-hosted runner from a group configured in an organization. The runner is then returned to the default group. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description To ensure there can always be an active deployment, you can only delete an _inactive_ deployment. Anyone with \`repo\` or \`repo_deployment\` scopes can delete an inactive deployment. To set a deployment as inactive, you must: * Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment. * Mark the active deployment as inactive by adding any non-successful deployment status. For more information, see "[Create a deployment](https://docs.github.com/rest/reference/repos/#create-a-deployment)" and "[Create a deployment status](https://docs.github.com/rest/reference/repos#create-a-deployment-status)." * - * @tags actions - * @name ActionsRemoveSelfHostedRunnerFromGroupForOrg - * @summary Remove a self-hosted runner from a group for an organization - * @request DELETE:/orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} + * @tags repos + * @name ReposDeleteDeployment + * @summary Delete a deployment + * @request DELETE:/repos/{owner}/{repo}/deployments/{deployment_id} */ - actionsRemoveSelfHostedRunnerFromGroupForOrg: ( - org: string, - runnerGroupId: number, - runnerId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/actions/runner-groups/${runnerGroupId}/runners/${runnerId}`, + reposDeleteDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}\`, method: "DELETE", ...params, }), /** - * @description Lists all self-hosted runners configured in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Users with pull access can view deployment statuses for a deployment: * - * @tags actions - * @name ActionsListSelfHostedRunnersForOrg - * @summary List self-hosted runners for an organization - * @request GET:/orgs/{org}/actions/runners + * @tags repos + * @name ReposListDeploymentStatuses + * @summary List deployment statuses + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses */ - actionsListSelfHostedRunnersForOrg: ( - org: string, + reposListDeploymentStatuses: ( + owner: string, + repo: string, + deploymentId: number, query?: { /** * Page number of the results to fetch. @@ -12478,14 +26761,8 @@ export class Api extends HttpClient - this.request< - { - runners: Runner[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/actions/runners`, + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses\`, method: "GET", query: query, format: "json", @@ -12493,94 +26770,129 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/actions/runners/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Returns a token that you can pass to the `config` script. The token expires after one hour. You must authenticate using an access token with the `admin:org` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing `TOKEN` with the registration token provided by this endpoint. ``` ./config.sh --url https://github.com/octo-org --token TOKEN ``` - * - * @tags actions - * @name ActionsCreateRegistrationTokenForOrg - * @summary Create a registration token for an organization - * @request POST:/orgs/{org}/actions/runners/registration-token - */ - actionsCreateRegistrationTokenForOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runners/registration-token`, - method: "POST", - format: "json", - ...params, - }), - - /** - * @description Returns a token that you can pass to the `config` script to remove a self-hosted runner from an organization. The token expires after one hour. You must authenticate using an access token with the `admin:org` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from an organization, replace `TOKEN` with the remove token provided by this endpoint. ``` ./config.sh remove --token TOKEN ``` + * @description Users with \`push\` access can create deployment statuses for a given deployment. GitHub Apps require \`read & write\` access to "Deployments" and \`read-only\` access to "Repo contents" (for private repos). OAuth Apps require the \`repo_deployment\` scope. * - * @tags actions - * @name ActionsCreateRemoveTokenForOrg - * @summary Create a remove token for an organization - * @request POST:/orgs/{org}/actions/runners/remove-token + * @tags repos + * @name ReposCreateDeploymentStatus + * @summary Create a deployment status + * @request POST:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses */ - actionsCreateRemoveTokenForOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runners/remove-token`, + reposCreateDeploymentStatus: ( + owner: string, + repo: string, + deploymentId: number, + data: { + /** + * Adds a new \`inactive\` status to all prior non-transient, non-production environment deployments with the same repository and \`environment\` name as the created status's deployment. An \`inactive\` status is only added to deployments that had a \`success\` state. Default: \`true\` + * **Note:** To add an \`inactive\` status to \`production\` environments, you must use the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + */ + auto_inactive?: boolean; + /** + * A short description of the status. The maximum description length is 140 characters. + * @default "" + */ + description?: string; + /** Name for the target deployment environment, which can be changed when setting a deploy status. For example, \`production\`, \`staging\`, or \`qa\`. **Note:** This parameter requires you to use the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. */ + environment?: "production" | "staging" | "qa"; + /** + * Sets the URL for accessing your environment. Default: \`""\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default "" + */ + environment_url?: string; + /** + * The full URL of the deployment's output. This parameter replaces \`target_url\`. We will continue to accept \`target_url\` to support legacy uses, but we recommend replacing \`target_url\` with \`log_url\`. Setting \`log_url\` will automatically set \`target_url\` to the same value. Default: \`""\` + * **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. + * @default "" + */ + log_url?: string; + /** The state of the status. Can be one of \`error\`, \`failure\`, \`inactive\`, \`in_progress\`, \`queued\` \`pending\`, or \`success\`. **Note:** To use the \`inactive\` state, you must provide the [\`application/vnd.github.ant-man-preview+json\`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. To use the \`in_progress\` and \`queued\` states, you must provide the [\`application/vnd.github.flash-preview+json\`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. When you set a transient deployment to \`inactive\`, the deployment will be shown as \`destroyed\` in GitHub. */ + state: "error" | "failure" | "inactive" | "in_progress" | "queued" | "pending" | "success"; + /** + * The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the \`log_url\` parameter, which replaces \`target_url\`. + * @default "" + */ + target_url?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses\`, method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Gets a specific self-hosted runner configured in an organization. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description Users with pull access can view a deployment status for a deployment: * - * @tags actions - * @name ActionsGetSelfHostedRunnerForOrg - * @summary Get a self-hosted runner for an organization - * @request GET:/orgs/{org}/actions/runners/{runner_id} - */ - actionsGetSelfHostedRunnerForOrg: (org: string, runnerId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runners/${runnerId}`, + * @tags repos + * @name ReposGetDeploymentStatus + * @summary Get a deployment status + * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id} + */ + reposGetDeploymentStatus: ( + owner: string, + repo: string, + deploymentId: number, + statusId: number, + params: RequestParams = {}, + ) => + this.request< + DeploymentStatus, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/deployments/\${deploymentId}/statuses/\${statusId}\`, method: "GET", format: "json", ...params, }), /** - * @description Forces the removal of a self-hosted runner from an organization. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the `admin:org` scope to use this endpoint. + * @description You can use this endpoint to trigger a webhook event called \`repository_dispatch\` when you want activity that happens outside of GitHub to trigger a GitHub Actions workflow or GitHub App webhook. You must configure your GitHub Actions workflow or GitHub App to run when the \`repository_dispatch\` event occurs. For an example \`repository_dispatch\` webhook payload, see "[RepositoryDispatchEvent](https://docs.github.com/webhooks/event-payloads/#repository_dispatch)." The \`client_payload\` parameter is available for any extra information that your workflow might need. This parameter is a JSON payload that will be passed on when the webhook event is dispatched. For example, the \`client_payload\` can include a message that a user would like to send using a GitHub Actions workflow. Or the \`client_payload\` can be used as a test to debug your workflow. This endpoint requires write access to the repository by providing either: - Personal access tokens with \`repo\` scope. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)" in the GitHub Help documentation. - GitHub Apps with both \`metadata:read\` and \`contents:read&write\` permissions. This input example shows how you can use the \`client_payload\` as a test to debug your workflow. * - * @tags actions - * @name ActionsDeleteSelfHostedRunnerFromOrg - * @summary Delete a self-hosted runner from an organization - * @request DELETE:/orgs/{org}/actions/runners/{runner_id} + * @tags repos + * @name ReposCreateDispatchEvent + * @summary Create a repository dispatch event + * @request POST:/repos/{owner}/{repo}/dispatches */ - actionsDeleteSelfHostedRunnerFromOrg: (org: string, runnerId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/runners/${runnerId}`, - method: "DELETE", + reposCreateDispatchEvent: ( + owner: string, + repo: string, + data: { + /** JSON payload with extra information about the webhook event that your action or worklow may use. */ + client_payload?: Record; + /** A custom webhook event name. */ + event_type: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/dispatches\`, + method: "POST", + body: data, + type: ContentType.Json, ...params, }), /** - * @description Lists all secrets available in an organization without revealing their encrypted values. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. + * No description * - * @tags actions - * @name ActionsListOrgSecrets - * @summary List organization secrets - * @request GET:/orgs/{org}/actions/secrets + * @tags activity + * @name ActivityListRepoEvents + * @summary List repository events + * @request GET:/repos/{owner}/{repo}/events */ - actionsListOrgSecrets: ( - org: string, + activityListRepoEvents: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -12595,14 +26907,8 @@ export class Api extends HttpClient - this.request< - { - secrets: OrganizationActionsSecret[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/actions/secrets`, + this.request({ + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", query: query, format: "json", @@ -12610,218 +26916,210 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/actions/secrets/public-key`, + reposListForks: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * The sort order. Can be either \`newest\`, \`oldest\`, or \`stargazers\`. + * @default "newest" + */ + sort?: "newest" | "oldest" | "stargazers"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Gets a single organization secret without revealing its encrypted value. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. + * @description Create a fork for the authenticated user. **Note**: Forking a Repository happens asynchronously. You may have to wait a short period of time before you can access the git objects. If this takes longer than 5 minutes, be sure to contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com). * - * @tags actions - * @name ActionsGetOrgSecret - * @summary Get an organization secret - * @request GET:/orgs/{org}/actions/secrets/{secret_name} + * @tags repos + * @name ReposCreateFork + * @summary Create a fork + * @request POST:/repos/{owner}/{repo}/forks */ - actionsGetOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}`, - method: "GET", + reposCreateFork: ( + owner: string, + repo: string, + data: { + /** Optional parameter to specify the organization name if forking into an organization. */ + organization?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/forks\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Creates or updates an organization secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. ``` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); ``` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. ``` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") ``` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. ``` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); ``` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. ```ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) ``` + * No description * - * @tags actions - * @name ActionsCreateOrUpdateOrgSecret - * @summary Create or update an organization secret - * @request PUT:/orgs/{org}/actions/secrets/{secret_name} + * @tags git + * @name GitCreateBlob + * @summary Create a blob + * @request POST:/repos/{owner}/{repo}/git/blobs */ - actionsCreateOrUpdateOrgSecret: ( - org: string, - secretName: string, + gitCreateBlob: ( + owner: string, + repo: string, data: { - /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get an organization public key](https://docs.github.com/rest/reference/actions#get-an-organization-public-key) endpoint. */ - encrypted_value?: string; - /** ID of the key you used to encrypt the secret. */ - key_id?: string; - /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the `visibility` is set to `selected`. You can manage the list of selected repositories using the [List selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#list-selected-repositories-for-an-organization-secret), [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret), and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ - selected_repository_ids?: string[]; + /** The new blob's content. */ + content: string; /** - * Configures the access that repositories have to the organization secret. Can be one of: - * \- `all` - All repositories in an organization can access the secret. - * \- `private` - Private repositories in an organization can access the secret. - * \- `selected` - Only specific repositories can access the secret. + * The encoding used for \`content\`. Currently, \`"utf-8"\` and \`"base64"\` are supported. + * @default "utf-8" */ - visibility?: "all" | "private" | "selected"; + encoding?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/git/blobs\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Deletes a secret in an organization using the secret name. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. - * - * @tags actions - * @name ActionsDeleteOrgSecret - * @summary Delete an organization secret - * @request DELETE:/orgs/{org}/actions/secrets/{secret_name} - */ - actionsDeleteOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}`, - method: "DELETE", - ...params, - }), - - /** - * @description Lists all repositories that have been selected when the `visibility` for repository access to a secret is set to `selected`. You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. + * @description The \`content\` in the response will always be Base64 encoded. _Note_: This API supports blobs up to 100 megabytes in size. * - * @tags actions - * @name ActionsListSelectedReposForOrgSecret - * @summary List selected repositories for an organization secret - * @request GET:/orgs/{org}/actions/secrets/{secret_name}/repositories + * @tags git + * @name GitGetBlob + * @summary Get a blob + * @request GET:/repos/{owner}/{repo}/git/blobs/{file_sha} */ - actionsListSelectedReposForOrgSecret: (org: string, secretName: string, params: RequestParams = {}) => - this.request< - { - repositories: MinimalRepository[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/actions/secrets/${secretName}/repositories`, + gitGetBlob: (owner: string, repo: string, fileSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/blobs/\${fileSha}\`, method: "GET", format: "json", ...params, }), /** - * @description Replaces all repositories for an organization secret when the `visibility` for repository access is set to `selected`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. + * @description Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags actions - * @name ActionsSetSelectedReposForOrgSecret - * @summary Set selected repositories for an organization secret - * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories + * @tags git + * @name GitCreateCommit + * @summary Create a commit + * @request POST:/repos/{owner}/{repo}/git/commits */ - actionsSetSelectedReposForOrgSecret: ( - org: string, - secretName: string, + gitCreateCommit: ( + owner: string, + repo: string, data: { - /** An array of repository ids that can access the organization secret. You can only provide a list of repository ids when the `visibility` is set to `selected`. You can add and remove individual repositories using the [Set selected repositories for an organization secret](https://docs.github.com/rest/reference/actions#set-selected-repositories-for-an-organization-secret) and [Remove selected repository from an organization secret](https://docs.github.com/rest/reference/actions#remove-selected-repository-from-an-organization-secret) endpoints. */ - selected_repository_ids?: number[]; + /** Information about the author of the commit. By default, the \`author\` will be the authenticated user and the current date. See the \`author\` and \`committer\` object below for details. */ + author?: { + /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** Information about the person who is making the commit. By default, \`committer\` will use the information set in \`author\`. See the \`author\` and \`committer\` object below for details. */ + committer?: { + /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author (or committer) of the commit */ + email?: string; + /** The name of the author (or committer) of the commit */ + name?: string; + }; + /** The commit message */ + message: string; + /** The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided. */ + parents?: string[]; + /** The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the \`gpgsig\` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a \`signature\` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits. */ + signature?: string; + /** The SHA of the tree object this commit points to */ + tree: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}/repositories`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/git/commits\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Adds a repository to an organization secret when the `visibility` for repository access is set to `selected`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. - * - * @tags actions - * @name ActionsAddSelectedRepoToOrgSecret - * @summary Add selected repository to an organization secret - * @request PUT:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} - */ - actionsAddSelectedRepoToOrgSecret: ( - org: string, - secretName: string, - repositoryId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}/repositories/${repositoryId}`, - method: "PUT", - ...params, - }), - - /** - * @description Removes a repository from an organization secret when the `visibility` for repository access is set to `selected`. The visibility is set when you [Create or update an organization secret](https://docs.github.com/rest/reference/actions#create-or-update-an-organization-secret). You must authenticate using an access token with the `admin:org` scope to use this endpoint. GitHub Apps must have the `secrets` organization permission to use this endpoint. + * @description Gets a Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags actions - * @name ActionsRemoveSelectedRepoFromOrgSecret - * @summary Remove selected repository from an organization secret - * @request DELETE:/orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id} + * @tags git + * @name GitGetCommit + * @summary Get a commit + * @request GET:/repos/{owner}/{repo}/git/commits/{commit_sha} */ - actionsRemoveSelectedRepoFromOrgSecret: ( - org: string, - secretName: string, - repositoryId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/actions/secrets/${secretName}/repositories/${repositoryId}`, - method: "DELETE", + gitGetCommit: (owner: string, repo: string, commitSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/commits/\${commitSha}\`, + method: "GET", + format: "json", ...params, }), /** - * @description **Note:** The audit log REST API is currently in beta and is subject to change. Gets the audit log for an organization. For more information, see "[Reviewing the audit log for your organization](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization)." To use this endpoint, you must be an organization owner, and you must use an access token with the `admin:org` scope. GitHub Apps must have the `organization_administration` read permission to use this endpoint. + * @description Returns an array of references from your Git database that match the supplied name. The \`:ref\` in the URL must be formatted as \`heads/\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't exist in the repository, but existing refs start with \`:ref\`, they will be returned as an array. When you use this endpoint without providing a \`:ref\`, it will return an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just \`heads\` and \`tags\`. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". If you request matching references for a branch named \`feature\` but the branch \`feature\` doesn't exist, the response can still include other matching head refs that start with the word \`feature\`, such as \`featureA\` and \`featureB\`. * - * @tags orgs - * @name OrgsGetAuditLog - * @summary Get the audit log for an organization - * @request GET:/orgs/{org}/audit-log + * @tags git + * @name GitListMatchingRefs + * @summary List matching references + * @request GET:/repos/{owner}/{repo}/git/matching-refs/{ref} */ - orgsGetAuditLog: ( - org: string, + gitListMatchingRefs: ( + owner: string, + repo: string, + ref: string, query?: { - /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events after this cursor. */ - after?: string; - /** A cursor, as given in the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header). If specified, the query only searches for events before this cursor. */ - before?: string; - /** - * The event types to include: - * - * - `web` - returns web (non-Git) events - * - `git` - returns Git events - * - `all` - returns both web and Git events - * - * The default is `web`. - */ - include?: "web" | "git" | "all"; /** - * The order of audit log events. To list newest events first, specify `desc`. To list oldest events first, specify `asc`. - * - * The default is `desc`. + * Page number of the results to fetch. + * @default 1 */ - order?: "desc" | "asc"; + page?: number; /** * Results per page (max 100) * @default 30 */ per_page?: number; - /** A search phrase. For more information, see [Searching the audit log](https://docs.github.com/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log). */ - phrase?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/audit-log`, + this.request({ + path: \`/repos/\${owner}/\${repo}/git/matching-refs/\${ref}\`, method: "GET", query: query, format: "json", @@ -12829,161 +27127,225 @@ export class Api extends HttpClient\` for branches and \`tags/\` for tags. If the \`:ref\` doesn't match an existing ref, a \`404\` is returned. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". * - * @tags orgs - * @name OrgsListBlockedUsers - * @summary List users blocked by an organization - * @request GET:/orgs/{org}/blocks + * @tags git + * @name GitGetRef + * @summary Get a reference + * @request GET:/repos/{owner}/{repo}/git/ref/{ref} */ - orgsListBlockedUsers: (org: string, params: RequestParams = {}) => - this.request< - SimpleUser[], - { - documentation_url: string; - message: string; - } - >({ - path: `/orgs/${org}/blocks`, + gitGetRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/ref/\${ref}\`, method: "GET", format: "json", ...params, }), /** - * No description + * @description Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches. * - * @tags orgs - * @name OrgsCheckBlockedUser - * @summary Check if a user is blocked by an organization - * @request GET:/orgs/{org}/blocks/{username} + * @tags git + * @name GitCreateRef + * @summary Create a reference + * @request POST:/repos/{owner}/{repo}/git/refs */ - orgsCheckBlockedUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/blocks/${username}`, - method: "GET", + gitCreateRef: ( + owner: string, + repo: string, + data: { + /** @example ""refs/heads/newbranch"" */ + key?: string; + /** The name of the fully qualified reference (ie: \`refs/heads/master\`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected. */ + ref: string; + /** The SHA1 value for this reference. */ + sha: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** * No description * - * @tags orgs - * @name OrgsBlockUser - * @summary Block a user from an organization - * @request PUT:/orgs/{org}/blocks/{username} + * @tags git + * @name GitUpdateRef + * @summary Update a reference + * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} */ - orgsBlockUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/blocks/${username}`, - method: "PUT", + gitUpdateRef: ( + owner: string, + repo: string, + ref: string, + data: { + /** + * Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to \`false\` will make sure you're not overwriting work. + * @default false + */ + force?: boolean; + /** The SHA1 value to set this reference to */ + sha: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** * No description * - * @tags orgs - * @name OrgsUnblockUser - * @summary Unblock a user from an organization - * @request DELETE:/orgs/{org}/blocks/{username} + * @tags git + * @name GitDeleteRef + * @summary Delete a reference + * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} */ - orgsUnblockUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/blocks/${username}`, + gitDeleteRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), /** - * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the `read:org` scope can list all credential authorizations for an organization that uses SAML single sign-on (SSO). The credentials are either personal access tokens or SSH keys that organization members have authorized for the organization. For more information, see [About authentication with SAML single sign-on](https://help.github.com/en/articles/about-authentication-with-saml-single-sign-on). + * @description Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then [create](https://docs.github.com/rest/reference/git#create-a-reference) the \`refs/tags/[tag]\` reference. If you want to create a lightweight tag, you only have to [create](https://docs.github.com/rest/reference/git#create-a-reference) the tag reference - this call would be unnecessary. **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags orgs - * @name OrgsListSamlSsoAuthorizations - * @summary List SAML SSO authorizations for an organization - * @request GET:/orgs/{org}/credential-authorizations + * @tags git + * @name GitCreateTag + * @summary Create a tag object + * @request POST:/repos/{owner}/{repo}/git/tags */ - orgsListSamlSsoAuthorizations: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/credential-authorizations`, - method: "GET", + gitCreateTag: ( + owner: string, + repo: string, + data: { + /** The tag message. */ + message: string; + /** The SHA of the git object this is tagging. */ + object: string; + /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ + tag: string; + /** An object with information about the individual creating the tag. */ + tagger?: { + /** When this object was tagged. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + date?: string; + /** The email of the author of the tag */ + email?: string; + /** The name of the author of the tag */ + name?: string; + }; + /** The type of the object we're tagging. Normally this is a \`commit\` but it can also be a \`tree\` or a \`blob\`. */ + type: "commit" | "tree" | "blob"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/tags\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Listing and deleting credential authorizations is available to organizations with GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products). An authenticated organization owner with the `admin:org` scope can remove a credential authorization for an organization that uses SAML SSO. Once you remove someone's credential authorization, they will need to create a new personal access token or SSH key and authorize it for the organization they want to access. + * @description **Signature verification object** The response will include a \`verification\` object that describes the result of verifying the commit's signature. The following fields are included in the \`verification\` object: | Name | Type | Description | | ---- | ---- | ----------- | | \`verified\` | \`boolean\` | Indicates whether GitHub considers the signature in this commit to be verified. | | \`reason\` | \`string\` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | \`signature\` | \`string\` | The signature that was extracted from the commit. | | \`payload\` | \`string\` | The value that was signed. | These are the possible values for \`reason\` in the \`verification\` object: | Value | Description | | ----- | ----------- | | \`expired_key\` | The key that made the signature is expired. | | \`not_signing_key\` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | \`gpgverify_error\` | There was an error communicating with the signature verification service. | | \`gpgverify_unavailable\` | The signature verification service is currently unavailable. | | \`unsigned\` | The object does not include a signature. | | \`unknown_signature_type\` | A non-PGP signature was found in the commit. | | \`no_user\` | No user was associated with the \`committer\` email address in the commit. | | \`unverified_email\` | The \`committer\` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | \`bad_email\` | The \`committer\` email address in the commit is not included in the identities of the PGP key that made the signature. | | \`unknown_key\` | The key that made the signature has not been registered with any user's account. | | \`malformed_signature\` | There was an error parsing the signature. | | \`invalid\` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | \`valid\` | None of the above errors applied, so the signature is considered to be verified. | * - * @tags orgs - * @name OrgsRemoveSamlSsoAuthorization - * @summary Remove a SAML SSO authorization for an organization - * @request DELETE:/orgs/{org}/credential-authorizations/{credential_id} + * @tags git + * @name GitGetTag + * @summary Get a tag + * @request GET:/repos/{owner}/{repo}/git/tags/{tag_sha} */ - orgsRemoveSamlSsoAuthorization: (org: string, credentialId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/credential-authorizations/${credentialId}`, - method: "DELETE", + gitGetTag: (owner: string, repo: string, tagSha: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/git/tags/\${tagSha}\`, + method: "GET", + format: "json", ...params, }), /** - * No description + * @description The tree creation API accepts nested entries. If you specify both a tree and a nested path modifying that tree, this endpoint will overwrite the contents of the tree with the new path contents, and create a new tree structure. If you use this endpoint to add, delete, or modify the file contents in a tree, you will need to commit the tree and then update a branch to point to the commit. For more information see "[Create a commit](https://docs.github.com/rest/reference/git#create-a-commit)" and "[Update a reference](https://docs.github.com/rest/reference/git#update-a-reference)." * - * @tags activity - * @name ActivityListPublicOrgEvents - * @summary List public organization events - * @request GET:/orgs/{org}/events + * @tags git + * @name GitCreateTree + * @summary Create a tree + * @request POST:/repos/{owner}/{repo}/git/trees */ - activityListPublicOrgEvents: ( - org: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + gitCreateTree: ( + owner: string, + repo: string, + data: { /** - * Results per page (max 100) - * @default 30 + * The SHA1 of an existing Git tree object which will be used as the base for the new tree. If provided, a new Git tree object will be created from entries in the Git tree object pointed to by \`base_tree\` and entries defined in the \`tree\` parameter. Entries defined in the \`tree\` parameter will overwrite items from \`base_tree\` with the same \`path\`. If you're creating new changes on a branch, then normally you'd set \`base_tree\` to the SHA1 of the Git tree object of the current latest commit on the branch you're working on. + * If not provided, GitHub will create a new Git tree object from only the entries defined in the \`tree\` parameter. If you create a new commit pointing to such a tree, then all files which were a part of the parent commit's tree and were not defined in the \`tree\` parameter will be listed as deleted by the new commit. */ - per_page?: number; + base_tree?: string; + /** Objects (of \`path\`, \`mode\`, \`type\`, and \`sha\`) specifying a tree structure. */ + tree: { + /** + * The content you want this file to have. GitHub will write this blob out and use that SHA for this entry. Use either this, or \`tree.sha\`. + * + * **Note:** Use either \`tree.sha\` or \`content\` to specify the contents of the entry. Using both \`tree.sha\` and \`content\` will return an error. + */ + content?: string; + /** The file mode; one of \`100644\` for file (blob), \`100755\` for executable (blob), \`040000\` for subdirectory (tree), \`160000\` for submodule (commit), or \`120000\` for a blob that specifies the path of a symlink. */ + mode?: "100644" | "100755" | "040000" | "160000" | "120000"; + /** The file referenced in the tree. */ + path?: string; + /** + * The SHA1 checksum ID of the object in the tree. Also called \`tree.sha\`. If the value is \`null\` then the file will be deleted. + * + * **Note:** Use either \`tree.sha\` or \`content\` to specify the contents of the entry. Using both \`tree.sha\` and \`content\` will return an error. + */ + sha?: string | null; + /** Either \`blob\`, \`tree\`, or \`commit\`. */ + type?: "blob" | "tree" | "commit"; + }[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/git/trees\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description The return hash contains `failed_at` and `failed_reason` fields which represent the time at which the invitation failed and the reason for the failure. + * @description Returns a single tree using the SHA1 value for that tree. If \`truncated\` is \`true\` in the response then the number of items in the \`tree\` array exceeded our maximum limit. If you need to fetch more items, use the non-recursive method of fetching trees, and fetch one sub-tree at a time. * - * @tags orgs - * @name OrgsListFailedInvitations - * @summary List failed organization invitations - * @request GET:/orgs/{org}/failed_invitations + * @tags git + * @name GitGetTree + * @summary Get a tree + * @request GET:/repos/{owner}/{repo}/git/trees/{tree_sha} */ - orgsListFailedInvitations: ( - org: string, + gitGetTree: ( + owner: string, + repo: string, + treeSha: string, query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + /** Setting this parameter to any value returns the objects or subtrees referenced by the tree specified in \`:tree_sha\`. For example, setting \`recursive\` to any of the following will enable returning objects or subtrees: \`0\`, \`1\`, \`"true"\`, and \`"false"\`. Omit this parameter to prevent recursively returning objects or subtrees. */ + recursive?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/failed_invitations`, + this.request({ + path: \`/repos/\${owner}/\${repo}/git/trees/\${treeSha}\`, method: "GET", query: query, format: "json", @@ -12993,13 +27355,14 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/orgs/${org}/hooks`, + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", query: query, format: "json", @@ -13023,48 +27386,49 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/hooks`, + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: data, type: ContentType.Json, @@ -13073,61 +27437,68 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/hooks/${hookId}`, + reposGetWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, }), /** - * @description Updates a webhook configured in an organization. When you update a webhook, the `secret` will be overwritten. If you previously had a `secret` set, you must provide the same `secret` or set a new `secret` or the secret will be removed. If you are only updating individual webhook `config` properties, use "[Update a webhook configuration for an organization](/rest/reference/orgs#update-a-webhook-configuration-for-an-organization)." + * @description Updates a webhook configured in a repository. If you previously had a \`secret\` set, you must provide the same \`secret\` or set a new \`secret\` or the secret will be removed. If you are only updating individual webhook \`config\` properties, use "[Update a webhook configuration for a repository](/rest/reference/repos#update-a-webhook-configuration-for-a-repository)." * - * @tags orgs - * @name OrgsUpdateWebhook - * @summary Update an organization webhook - * @request PATCH:/orgs/{org}/hooks/{hook_id} + * @tags repos + * @name ReposUpdateWebhook + * @summary Update a repository webhook + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id} */ - orgsUpdateWebhook: ( - org: string, + reposUpdateWebhook: ( + owner: string, + repo: string, hookId: number, data: { /** - * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications. + * Determines if notifications are sent when the webhook is triggered. Set to \`true\` to send notifications. * @default true */ active?: boolean; - /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/orgs#update-hook-config-params). */ + /** Determines a list of events to be added to the list of events that the Hook triggers for. */ + add_events?: string[]; + /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/repos#create-hook-config-params). */ config?: { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ + /** @example ""bar@example.com"" */ + address?: string; + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ insecure_ssl?: WebhookConfigInsecureSsl; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + /** @example ""The Serious Room"" */ + room?: string; + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ secret?: WebhookConfigSecret; /** The URL to which the payloads will be delivered. */ url: WebhookConfigUrl; }; /** - * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. + * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. This replaces the entire array of events. * @default ["push"] */ events?: string[]; - /** @example ""web"" */ - name?: string; + /** Determines a list of events to be removed from the list of events that the Hook triggers for. */ + remove_events?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/hooks/${hookId}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -13138,51 +27509,52 @@ export class Api extends HttpClient + reposDeleteWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.request({ - path: `/orgs/${org}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), /** - * @description Returns the webhook configuration for an organization. To get more information about the webhook, including the `active` state and `events`, use "[Get an organization webhook ](/rest/reference/orgs#get-an-organization-webhook)." Access tokens must have the `admin:org_hook` scope, and GitHub Apps must have the `organization_hooks:read` permission. + * @description Returns the webhook configuration for a repository. To get more information about the webhook, including the \`active\` state and \`events\`, use "[Get a repository webhook](/rest/reference/orgs#get-a-repository-webhook)." Access tokens must have the \`read:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:read\` permission. * - * @tags orgs - * @name OrgsGetWebhookConfigForOrg - * @summary Get a webhook configuration for an organization - * @request GET:/orgs/{org}/hooks/{hook_id}/config + * @tags repos + * @name ReposGetWebhookConfigForRepo + * @summary Get a webhook configuration for a repository + * @request GET:/repos/{owner}/{repo}/hooks/{hook_id}/config */ - orgsGetWebhookConfigForOrg: (org: string, hookId: number, params: RequestParams = {}) => + reposGetWebhookConfigForRepo: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.request({ - path: `/orgs/${org}/hooks/${hookId}/config`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/config\`, method: "GET", format: "json", ...params, }), /** - * @description Updates the webhook configuration for an organization. To update more information about the webhook, including the `active` state and `events`, use "[Update an organization webhook ](/rest/reference/orgs#update-an-organization-webhook)." Access tokens must have the `admin:org_hook` scope, and GitHub Apps must have the `organization_hooks:write` permission. + * @description Updates the webhook configuration for a repository. To update more information about the webhook, including the \`active\` state and \`events\`, use "[Update a repository webhook](/rest/reference/orgs#update-a-repository-webhook)." Access tokens must have the \`write:repo_hook\` or \`repo\` scope, and GitHub Apps must have the \`repository_hooks:write\` permission. * - * @tags orgs - * @name OrgsUpdateWebhookConfigForOrg - * @summary Update a webhook configuration for an organization - * @request PATCH:/orgs/{org}/hooks/{hook_id}/config + * @tags repos + * @name ReposUpdateWebhookConfigForRepo + * @summary Update a webhook configuration for a repository + * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id}/config */ - orgsUpdateWebhookConfigForOrg: ( - org: string, + reposUpdateWebhookConfigForRepo: ( + owner: string, + repo: string, hookId: number, data: { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ + /** The media type used to serialize the payloads. Supported values include \`json\` and \`form\`. The default is \`form\`. */ content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ + /** Determines whether the SSL certificate of the host for \`url\` will be verified when delivering payloads. Supported values include \`0\` (verification is performed) and \`1\` (verification is not performed). The default is \`0\`. **We strongly recommend not setting this to \`1\` as you are subject to man-in-the-middle and other attacks.** */ insecure_ssl?: WebhookConfigInsecureSsl; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ + /** If provided, the \`secret\` will be used as the \`key\` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ secret?: WebhookConfigSecret; /** The URL to which the payloads will be delivered. */ url?: WebhookConfigUrl; @@ -13190,7 +27562,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/hooks/${hookId}/config`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/config\`, method: "PATCH", body: data, type: ContentType.Json, @@ -13201,184 +27573,77 @@ export class Api extends HttpClient + reposPingWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.request({ - path: `/orgs/${org}/hooks/${hookId}/pings`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/pings\`, method: "POST", ...params, }), /** - * @description Enables an authenticated GitHub App to find the organization's installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. - * - * @tags apps - * @name AppsGetOrgInstallation - * @summary Get an organization installation for the authenticated app - * @request GET:/orgs/{org}/installation - */ - appsGetOrgInstallation: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/installation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Lists all GitHub Apps in an organization. The installation count includes all GitHub Apps installed on repositories in the organization. You must be an organization owner with `admin:read` scope to use this endpoint. - * - * @tags orgs - * @name OrgsListAppInstallations - * @summary List app installations for an organization - * @request GET:/orgs/{org}/installations - */ - orgsListAppInstallations: ( - org: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - installations: Installation[]; - total_count: number; - }, - any - >({ - path: `/orgs/${org}/installations`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Shows which type of GitHub user can interact with this organization and when the restriction expires. If there is no restrictions, you will see an empty response. - * - * @tags interactions - * @name InteractionsGetRestrictionsForOrg - * @summary Get interaction restrictions for an organization - * @request GET:/orgs/{org}/interaction-limits - */ - interactionsGetRestrictionsForOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/interaction-limits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Temporarily restricts interactions to a certain type of GitHub user in any public repository in the given organization. You must be an organization owner to set these restrictions. Setting the interaction limit at the organization level will overwrite any interaction limits that are set for individual repositories owned by the organization. - * - * @tags interactions - * @name InteractionsSetRestrictionsForOrg - * @summary Set interaction restrictions for an organization - * @request PUT:/orgs/{org}/interaction-limits - */ - interactionsSetRestrictionsForOrg: (org: string, data: InteractionLimit, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/interaction-limits`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Removes all interaction restrictions from public repositories in the given organization. You must be an organization owner to remove restrictions. + * @description This will trigger the hook with the latest push to the current repository if the hook is subscribed to \`push\` events. If the hook is not subscribed to \`push\` events, the server will respond with 204 but no test POST will be generated. **Note**: Previously \`/repos/:owner/:repo/hooks/:hook_id/test\` * - * @tags interactions - * @name InteractionsRemoveRestrictionsForOrg - * @summary Remove interaction restrictions for an organization - * @request DELETE:/orgs/{org}/interaction-limits + * @tags repos + * @name ReposTestPushWebhook + * @summary Test the push repository webhook + * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/tests */ - interactionsRemoveRestrictionsForOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/interaction-limits`, - method: "DELETE", + reposTestPushWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, + method: "POST", ...params, }), /** - * @description The return hash contains a `role` field which refers to the Organization Invitation role and will be one of the following values: `direct_member`, `admin`, `billing_manager`, `hiring_manager`, or `reinstate`. If the invitee is not a GitHub member, the `login` field in the return hash will be `null`. + * @description View the progress of an import. **Import status** This section includes details about the possible values of the \`status\` field of the Import Progress response. An import that does not have errors will progress through these steps: * \`detecting\` - the "detection" step of the import is in progress because the request did not include a \`vcs\` parameter. The import is identifying the type of source control present at the URL. * \`importing\` - the "raw" step of the import is in progress. This is where commit data is fetched from the original repository. The import progress response will include \`commit_count\` (the total number of raw commits that will be imported) and \`percent\` (0 - 100, the current progress through the import). * \`mapping\` - the "rewrite" step of the import is in progress. This is where SVN branches are converted to Git branches, and where author updates are applied. The import progress response does not include progress information. * \`pushing\` - the "push" step of the import is in progress. This is where the importer updates the repository on GitHub. The import progress response will include \`push_percent\`, which is the percent value reported by \`git push\` when it is "Writing objects". * \`complete\` - the import is complete, and the repository is ready on GitHub. If there are problems, you will see one of these in the \`status\` field: * \`auth_failed\` - the import requires authentication in order to connect to the original repository. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`error\` - the import encountered an error. The import progress response will include the \`failed_step\` and an error message. Contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com) for more information. * \`detection_needs_auth\` - the importer requires authentication for the originating repository to continue detection. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * \`detection_found_nothing\` - the importer didn't recognize any source control at the URL. To resolve, [Cancel the import](https://docs.github.com/rest/reference/migrations#cancel-an-import) and [retry](https://docs.github.com/rest/reference/migrations#start-an-import) with the correct URL. * \`detection_found_multiple\` - the importer found several projects or repositories at the provided URL. When this is the case, the Import Progress response will also include a \`project_choices\` field with the possible project choices as values. To update project choice, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. **The project_choices field** When multiple projects are found at the provided URL, the response hash will include a \`project_choices\` field, the value of which is an array of hashes each representing a project choice. The exact key/value pairs of the project hashes will differ depending on the version control type. **Git LFS related fields** This section includes details about Git LFS related fields that may be present in the Import Progress response. * \`use_lfs\` - describes whether the import has been opted in or out of using Git LFS. The value can be \`opt_in\`, \`opt_out\`, or \`undecided\` if no action has been taken. * \`has_large_files\` - the boolean value describing whether files larger than 100MB were found during the \`importing\` step. * \`large_files_size\` - the total size in gigabytes of files larger than 100MB found in the originating repository. * \`large_files_count\` - the total number of files larger than 100MB found in the originating repository. To see a list of these files, make a "Get Large Files" request. * - * @tags orgs - * @name OrgsListPendingInvitations - * @summary List pending organization invitations - * @request GET:/orgs/{org}/invitations + * @tags migrations + * @name MigrationsGetImportStatus + * @summary Get an import status + * @request GET:/repos/{owner}/{repo}/import */ - orgsListPendingInvitations: ( - org: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/invitations`, + migrationsGetImportStatus: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Invite people to an organization by using their GitHub user ID or their email address. In order to create invitations in an organization, the authenticated user must be an organization owner. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @description Start a source import to a GitHub repository using GitHub Importer. * - * @tags orgs - * @name OrgsCreateInvitation - * @summary Create an organization invitation - * @request POST:/orgs/{org}/invitations + * @tags migrations + * @name MigrationsStartImport + * @summary Start an import + * @request PUT:/repos/{owner}/{repo}/import */ - orgsCreateInvitation: ( - org: string, + migrationsStartImport: ( + owner: string, + repo: string, data: { - /** **Required unless you provide `invitee_id`**. Email address of the person you are inviting, which can be an existing GitHub user. */ - email?: string; - /** **Required unless you provide `email`**. GitHub user ID for the person you are inviting. */ - invitee_id?: number; - /** - * Specify role for new member. Can be one of: - * \* `admin` - Organization owners with full administrative rights to the organization and complete access to all repositories and teams. - * \* `direct_member` - Non-owner organization members with ability to see other members and join teams by invitation. - * \* `billing_manager` - Non-owner organization members with ability to manage the billing settings of your organization. - * @default "direct_member" - */ - role?: "admin" | "direct_member" | "billing_manager"; - /** Specify IDs for the teams you want to invite new members to. */ - team_ids?: number[]; + /** For a tfvc import, the name of the project that is being imported. */ + tfvc_project?: string; + /** The originating VCS type. Can be one of \`subversion\`, \`git\`, \`mercurial\`, or \`tfvc\`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response. */ + vcs?: "subversion" | "git" | "mercurial" | "tfvc"; + /** If authentication is required, the password to provide to \`vcs_url\`. */ + vcs_password?: string; + /** The URL of the originating repository. */ + vcs_url: string; + /** If authentication is required, the username to provide to \`vcs_url\`. */ + vcs_username?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/invitations`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -13386,232 +27651,31 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/invitations/${invitationId}`, - method: "DELETE", - ...params, - }), - - /** - * @description List all teams associated with an invitation. In order to see invitations in an organization, the authenticated user must be an organization owner. - * - * @tags orgs - * @name OrgsListInvitationTeams - * @summary List organization invitation teams - * @request GET:/orgs/{org}/invitations/{invitation_id}/teams - */ - orgsListInvitationTeams: ( - org: string, - invitationId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/invitations/${invitationId}/teams`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List issues in an organization assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. - * - * @tags issues - * @name IssuesListForOrg - * @summary List organization issues assigned to the authenticated user - * @request GET:/orgs/{org}/issues - */ - issuesListForOrg: ( - org: string, - query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Indicates which sorts of issues to return. Can be one of: - * \* `assigned`: Issues assigned to you - * \* `created`: Issues created by you - * \* `mentioned`: Issues mentioning you - * \* `subscribed`: Issues you're subscribed to updates for - * \* `all`: All issues the authenticated user can see, regardless of participation or creation - * @default "assigned" - */ - filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** A list of comma separated label names. Example: `bug,ui,@high` */ - labels?: string; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; - /** - * What to sort results by. Can be either `created`, `updated`, `comments`. - * @default "created" - */ - sort?: "created" | "updated" | "comments"; - /** - * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`. - * @default "open" - */ - state?: "open" | "closed" | "all"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List all users who are members of an organization. If the authenticated user is also a member of this organization then both concealed and public members will be returned. - * - * @tags orgs - * @name OrgsListMembers - * @summary List organization members - * @request GET:/orgs/{org}/members - */ - orgsListMembers: ( - org: string, - query?: { - /** - * Filter members returned in the list. Can be one of: - * \* `2fa_disabled` - Members without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. Available for organization owners. - * \* `all` - All members the authenticated user can see. - * @default "all" - */ - filter?: "2fa_disabled" | "all"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * Filter members returned by their role. Can be one of: - * \* `all` - All members of the organization, regardless of role. - * \* `admin` - Organization owners. - * \* `member` - Non-owner organization members. - * @default "all" - */ - role?: "all" | "admin" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @tags orgs - * @name OrgsCheckMembershipForUser - * @summary Check organization membership for a user - * @request GET:/orgs/{org}/members/{username} - */ - orgsCheckMembershipForUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @tags orgs - * @name OrgsRemoveMember - * @summary Remove an organization member - * @request DELETE:/orgs/{org}/members/{username} - */ - orgsRemoveMember: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description In order to get a user's membership with an organization, the authenticated user must be an organization member. - * - * @tags orgs - * @name OrgsGetMembershipForUser - * @summary Get organization membership for a user - * @request GET:/orgs/{org}/memberships/{username} - */ - orgsGetMembershipForUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Only authenticated organization owners can add a member to the organization or update the member's role. * If the authenticated user is _adding_ a member to the organization, the invited user will receive an email inviting them to the organization. The user's [membership status](https://docs.github.com/rest/reference/orgs#get-organization-membership-for-a-user) will be `pending` until they accept the invitation. * Authenticated users can _update_ a user's membership by passing the `role` parameter. If the authenticated user changes a member's role to `admin`, the affected user will receive an email notifying them that they've been made an organization owner. If the authenticated user changes an owner's role to `member`, no email will be sent. **Rate limits** To prevent abuse, the authenticated user is limited to 50 organization invitations per 24 hour period. If the organization is more than one month old or on a paid plan, the limit is 500 invitations per 24 hour period. + * @description An import can be updated with credentials or a project choice by passing in the appropriate parameters in this API request. If no parameters are provided, the import will be restarted. * - * @tags orgs - * @name OrgsSetMembershipForUser - * @summary Set organization membership for a user - * @request PUT:/orgs/{org}/memberships/{username} + * @tags migrations + * @name MigrationsUpdateImport + * @summary Update an import + * @request PATCH:/repos/{owner}/{repo}/import */ - orgsSetMembershipForUser: ( - org: string, - username: string, + migrationsUpdateImport: ( + owner: string, + repo: string, data: { - /** - * The role to give the user in the organization. Can be one of: - * \* `admin` - The user will become an owner of the organization. - * \* `member` - The user will become a non-owner member of the organization. - * @default "member" - */ - role?: "admin" | "member"; + /** @example ""project1"" */ + tfvc_project?: string; + /** @example ""git"" */ + vcs?: string; + /** The password to provide to the originating repository. */ + vcs_password?: string; + /** The username to provide to the originating repository. */ + vcs_username?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/memberships/${username}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -13619,46 +27683,39 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/memberships/${username}`, + migrationsCancelImport: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import\`, method: "DELETE", ...params, }), /** - * @description Lists the most recent migrations. + * @description Each type of source control system represents authors in a different way. For example, a Git commit author has a display name and an email address, but a Subversion commit author just has a username. The GitHub Importer will make the author information valid, but the author might not be correct. For example, it will change the bare Subversion username \`hubot\` into something like \`hubot \`. This endpoint and the [Map a commit author](https://docs.github.com/rest/reference/migrations#map-a-commit-author) endpoint allow you to provide correct Git author information. * * @tags migrations - * @name MigrationsListForOrg - * @summary List organization migrations - * @request GET:/orgs/{org}/migrations + * @name MigrationsGetCommitAuthors + * @summary Get commit authors + * @request GET:/repos/{owner}/{repo}/import/authors */ - migrationsListForOrg: ( - org: string, + migrationsGetCommitAuthors: ( + owner: string, + repo: string, query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/migrations`, + this.request({ + path: \`/repos/\${owner}/\${repo}/import/authors\`, method: "GET", query: query, format: "json", @@ -13666,35 +27723,30 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/migrations`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/import/authors/\${authorId}\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -13702,117 +27754,129 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/migrations/${migrationId}`, + migrationsGetLargeFiles: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/large_files\`, method: "GET", format: "json", ...params, }), /** - * @description Fetches the URL to a migration archive. + * @description You can import repositories from Subversion, Mercurial, and TFS that include files larger than 100MB. This ability is powered by [Git LFS](https://git-lfs.github.com). You can learn more about our LFS feature and working with large files [on our help site](https://help.github.com/articles/versioning-large-files/). * * @tags migrations - * @name MigrationsDownloadArchiveForOrg - * @summary Download an organization migration archive - * @request GET:/orgs/{org}/migrations/{migration_id}/archive + * @name MigrationsSetLfsPreference + * @summary Update Git LFS preference + * @request PATCH:/repos/{owner}/{repo}/import/lfs */ - migrationsDownloadArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/migrations/${migrationId}/archive`, - method: "GET", + migrationsSetLfsPreference: ( + owner: string, + repo: string, + data: { + /** Can be one of \`opt_in\` (large files will be stored using Git LFS) or \`opt_out\` (large files will be removed during the import). */ + use_lfs: "opt_in" | "opt_out"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/import/lfs\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Deletes a previous migration archive. Migration archives are automatically deleted after seven days. + * @description Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. * - * @tags migrations - * @name MigrationsDeleteArchiveForOrg - * @summary Delete an organization migration archive - * @request DELETE:/orgs/{org}/migrations/{migration_id}/archive + * @tags apps + * @name AppsGetRepoInstallation + * @summary Get a repository installation for the authenticated app + * @request GET:/repos/{owner}/{repo}/installation */ - migrationsDeleteArchiveForOrg: (org: string, migrationId: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/migrations/${migrationId}/archive`, - method: "DELETE", + appsGetRepoInstallation: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/installation\`, + method: "GET", + format: "json", ...params, }), /** - * @description Unlocks a repository that was locked for migration. You should unlock each migrated repository and [delete them](https://docs.github.com/rest/reference/repos#delete-a-repository) when the migration is complete and you no longer need the source data. + * @description Shows which type of GitHub user can interact with this repository and when the restriction expires. If there are no restrictions, you will see an empty response. * - * @tags migrations - * @name MigrationsUnlockRepoForOrg - * @summary Unlock an organization repository - * @request DELETE:/orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock + * @tags interactions + * @name InteractionsGetRestrictionsForRepo + * @summary Get interaction restrictions for a repository + * @request GET:/repos/{owner}/{repo}/interaction-limits */ - migrationsUnlockRepoForOrg: (org: string, migrationId: number, repoName: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/migrations/${migrationId}/repos/${repoName}/lock`, - method: "DELETE", + interactionsGetRestrictionsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "GET", + format: "json", ...params, }), /** - * @description List all the repositories for this organization migration. + * @description Temporarily restricts interactions to a certain type of GitHub user within the given repository. You must have owner or admin access to set these restrictions. If an interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. * - * @tags migrations - * @name MigrationsListReposForOrg - * @summary List repositories in an organization migration - * @request GET:/orgs/{org}/migrations/{migration_id}/repositories + * @tags interactions + * @name InteractionsSetRestrictionsForRepo + * @summary Set interaction restrictions for a repository + * @request PUT:/repos/{owner}/{repo}/interaction-limits */ - migrationsListReposForOrg: ( - org: string, - migrationId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, + interactionsSetRestrictionsForRepo: ( + owner: string, + repo: string, + data: InteractionLimit, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/migrations/${migrationId}/repositories`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description List all users who are outside collaborators of an organization. + * @description Removes all interaction restrictions from the given repository. You must have owner or admin access to remove restrictions. If the interaction limit is set for the user or organization that owns this repository, you will receive a \`409 Conflict\` response and will not be able to use this endpoint to change the interaction limit for a single repository. * - * @tags orgs - * @name OrgsListOutsideCollaborators - * @summary List outside collaborators for an organization - * @request GET:/orgs/{org}/outside_collaborators + * @tags interactions + * @name InteractionsRemoveRestrictionsForRepo + * @summary Remove interaction restrictions for a repository + * @request DELETE:/repos/{owner}/{repo}/interaction-limits */ - orgsListOutsideCollaborators: ( - org: string, + interactionsRemoveRestrictionsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/interaction-limits\`, + method: "DELETE", + ...params, + }), + + /** + * @description When authenticating as a user with admin rights to a repository, this endpoint will list all currently open repository invitations. + * + * @tags repos + * @name ReposListInvitations + * @summary List repository invitations + * @request GET:/repos/{owner}/{repo}/invitations + */ + reposListInvitations: ( + owner: string, + repo: string, query?: { - /** - * Filter the list of outside collaborators. Can be one of: - * \* `2fa_disabled`: Outside collaborators without [two-factor authentication](https://github.com/blog/1614-two-factor-authentication) enabled. - * \* `all`: All outside collaborators. - * @default "all" - */ - filter?: "2fa_disabled" | "all"; /** * Page number of the results to fetch. * @default 1 @@ -13826,8 +27890,8 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/outside_collaborators`, + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations\`, method: "GET", query: query, format: "json", @@ -13835,59 +27899,74 @@ export class Api extends HttpClient - this.request< - void, - | { - documentation_url?: string; - message?: string; - } - | BasicError - >({ - path: `/orgs/${org}/outside_collaborators/${username}`, - method: "PUT", + reposUpdateInvitation: ( + owner: string, + repo: string, + invitationId: number, + data: { + /** The permissions that the associated user will have on the repository. Valid values are \`read\`, \`write\`, \`maintain\`, \`triage\`, and \`admin\`. */ + permissions?: "read" | "write" | "maintain" | "triage" | "admin"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations/\${invitationId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Removing a user from this list will remove them from all the organization's repositories. + * No description * - * @tags orgs - * @name OrgsRemoveOutsideCollaborator - * @summary Remove outside collaborator from an organization - * @request DELETE:/orgs/{org}/outside_collaborators/{username} + * @tags repos + * @name ReposDeleteInvitation + * @summary Delete a repository invitation + * @request DELETE:/repos/{owner}/{repo}/invitations/{invitation_id} */ - orgsRemoveOutsideCollaborator: (org: string, username: string, params: RequestParams = {}) => - this.request< - void, - { - documentation_url?: string; - message?: string; - } - >({ - path: `/orgs/${org}/outside_collaborators/${username}`, + reposDeleteInvitation: (owner: string, repo: string, invitationId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/invitations/\${invitationId}\`, method: "DELETE", ...params, }), /** - * @description Lists the projects in an organization. Returns a `404 Not Found` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned. + * @description List issues in a repository. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. * - * @tags projects - * @name ProjectsListForOrg - * @summary List organization projects - * @request GET:/orgs/{org}/projects + * @tags issues + * @name IssuesListForRepo + * @summary List repository issues + * @request GET:/repos/{owner}/{repo}/issues */ - projectsListForOrg: ( - org: string, + issuesListForRepo: ( + owner: string, + repo: string, query?: { + /** Can be the name of a user. Pass in \`none\` for issues with no assigned user, and \`*\` for issues assigned to any user. */ + assignee?: string; + /** The user that created the issue. */ + creator?: string; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** A user that's mentioned in the issue. */ + mentioned?: string; + /** If an \`integer\` is passed, it should refer to a milestone by its \`number\` field. If the string \`*\` is passed, issues with any milestone are accepted. If the string \`none\` is passed, issues without milestones are returned. */ + milestone?: string; /** * Page number of the results to fetch. * @default 1 @@ -13898,16 +27977,23 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/projects`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -13915,25 +28001,51 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/projects`, + this.request< + Issue, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: data, type: ContentType.Json, @@ -13942,94 +28054,18 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags orgs - * @name OrgsCheckPublicMembershipForUser - * @summary Check public organization membership for a user - * @request GET:/orgs/{org}/public_members/{username} - */ - orgsCheckPublicMembershipForUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description The user can publicize their own membership. (A user cannot publicize the membership for another user.) Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - * - * @tags orgs - * @name OrgsSetPublicMembershipForAuthenticatedUser - * @summary Set public organization membership for the authenticated user - * @request PUT:/orgs/{org}/public_members/{username} - */ - orgsSetPublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @tags orgs - * @name OrgsRemovePublicMembershipForAuthenticatedUser - * @summary Remove public organization membership for the authenticated user - * @request DELETE:/orgs/{org}/public_members/{username} - */ - orgsRemovePublicMembershipForAuthenticatedUser: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Lists repositories for the specified organization. + * @description By default, Issue Comments are ordered by ascending ID. * - * @tags repos - * @name ReposListForOrg - * @summary List organization repositories - * @request GET:/orgs/{org}/repos + * @tags issues + * @name IssuesListCommentsForRepo + * @summary List issue comments for a repository + * @request GET:/repos/{owner}/{repo}/issues/comments */ - reposListForOrg: ( - org: string, + issuesListCommentsForRepo: ( + owner: string, + repo: string, query?: { - /** Can be one of `asc` or `desc`. Default: when using `full_name`: `asc`, otherwise `desc` */ + /** Either \`asc\` or \`desc\`. Ignored without the \`sort\` parameter. */ direction?: "asc" | "desc"; /** * Page number of the results to fetch. @@ -14041,18 +28077,18 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/repos`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -14060,154 +28096,78 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the `repo` or `admin:org` scope. + * No description * - * @tags billing - * @name BillingGetGithubActionsBillingOrg - * @summary Get GitHub Actions billing for an organization - * @request GET:/orgs/{org}/settings/billing/actions + * @tags issues + * @name IssuesGetComment + * @summary Get an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id} */ - billingGetGithubActionsBillingOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/settings/billing/actions`, + issuesGetComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, }), /** - * @description Gets the free and paid storage usued for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the `repo` or `admin:org` scope. + * No description * - * @tags billing - * @name BillingGetGithubPackagesBillingOrg - * @summary Get GitHub Packages billing for an organization - * @request GET:/orgs/{org}/settings/billing/packages + * @tags issues + * @name IssuesUpdateComment + * @summary Update an issue comment + * @request PATCH:/repos/{owner}/{repo}/issues/comments/{comment_id} */ - billingGetGithubPackagesBillingOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/settings/billing/packages`, - method: "GET", + issuesUpdateComment: ( + owner: string, + repo: string, + commentId: number, + data: { + /** The contents of the comment. */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the `repo` or `admin:org` scope. + * No description * - * @tags billing - * @name BillingGetSharedStorageBillingOrg - * @summary Get shared storage billing for an organization - * @request GET:/orgs/{org}/settings/billing/shared-storage + * @tags issues + * @name IssuesDeleteComment + * @summary Delete an issue comment + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id} */ - billingGetSharedStorageBillingOrg: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/settings/billing/shared-storage`, - method: "GET", - format: "json", + issuesDeleteComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, + method: "DELETE", ...params, }), /** - * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups available in an organization. You can limit your page results using the `per_page` parameter. GitHub generates a url-encoded `page` token using a cursor value for where the next page begins. For more information on cursor pagination, see "[Offset and Cursor Pagination explained](https://dev.to/jackmarchant/offset-and-cursor-pagination-explained-b89)." The `per_page` parameter provides pagination for a list of IdP groups the authenticated user can access in an organization. For example, if the user `octocat` wants to see two groups per page in `octo-org` via cURL, it would look like this: + * @description List the reactions to an [issue comment](https://docs.github.com/rest/reference/issues#comments). * - * @tags teams - * @name TeamsListIdpGroupsForOrg - * @summary List IdP groups for an organization - * @request GET:/orgs/{org}/team-sync/groups + * @tags reactions + * @name ReactionsListForIssueComment + * @summary List reactions for an issue comment + * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions */ - teamsListIdpGroupsForOrg: ( - org: string, + reactionsListForIssueComment: ( + owner: string, + repo: string, + commentId: number, query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** * Page number of the results to fetch. * @default 1 @@ -14221,8 +28181,15 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/team-sync/groups`, + this.request< + Reaction[], + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions\`, method: "GET", query: query, format: "json", @@ -14230,15 +28197,71 @@ export class Api extends HttpClient + this.request< + Reaction, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE delete /repositories/:repository_id/issues/comments/:comment_id/reactions/:reaction_id\`. Delete a reaction to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * + * @tags reactions + * @name ReactionsDeleteForIssueComment + * @summary Delete an issue comment reaction + * @request DELETE:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id} + */ + reactionsDeleteForIssueComment: ( + owner: string, + repo: string, + commentId: number, + reactionId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListEventsForRepo + * @summary List issue events for a repository + * @request GET:/repos/{owner}/{repo}/issues/events + */ + issuesListEventsForRepo: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -14253,8 +28276,8 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", query: query, format: "json", @@ -14262,113 +28285,86 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: data, - type: ContentType.Json, + issuesGetEvent: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, + method: "GET", format: "json", ...params, }), /** - * @description Gets a team using the team's `slug`. GitHub generates the `slug` from the team `name`. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}`. + * @description The API returns a [\`301 Moved Permanently\` status](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-redirects-redirects) if the issue was [transferred](https://help.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API returns a \`404 Not Found\` status. If the issue was deleted from a repository where the authenticated user has read access, the API returns a \`410 Gone\` status. To receive webhook events for transferred and deleted issues, subscribe to the [\`issues\`](https://docs.github.com/webhooks/event-payloads/#issues) webhook. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. * - * @tags teams - * @name TeamsGetByName - * @summary Get a team by name - * @request GET:/orgs/{org}/teams/{team_slug} + * @tags issues + * @name IssuesGet + * @summary Get an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number} */ - teamsGetByName: (org: string, teamSlug: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}`, + issuesGet: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}\`, method: "GET", format: "json", ...params, }), /** - * @description To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** You can also specify a team by `org_id` and `team_id` using the route `PATCH /organizations/{org_id}/team/{team_id}`. + * @description Issue owners and users with push access can edit an issue. * - * @tags teams - * @name TeamsUpdateInOrg - * @summary Update a team - * @request PATCH:/orgs/{org}/teams/{team_slug} + * @tags issues + * @name IssuesUpdate + * @summary Update an issue + * @request PATCH:/repos/{owner}/{repo}/issues/{issue_number} */ - teamsUpdateInOrg: ( - org: string, - teamSlug: string, + issuesUpdate: ( + owner: string, + repo: string, + issueNumber: number, data: { - /** The description of the team. */ - description?: string; - /** The name of the team. */ - name: string; - /** The ID of a team to set as the parent team. */ - parent_team_id?: number; - /** - * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: - * \* `pull` - team members can pull, but not push to or administer newly-added repositories. - * \* `push` - team members can pull and push, but not administer newly-added repositories. - * \* `admin` - team members can pull, push and administer newly-added repositories. - * @default "pull" - */ - permission?: "pull" | "push" | "admin"; - /** - * The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. When a team is nested, the `privacy` for parent teams cannot be `secret`. The options are: - * **For a non-nested team:** - * \* `secret` - only visible to organization owners and members of this team. - * \* `closed` - visible to all members of this organization. - * **For a parent or child team:** - * \* `closed` - visible to all members of this organization. - */ - privacy?: "secret" | "closed"; + /** Login for the user that this issue should be assigned to. **This field is deprecated.** */ + assignee?: string | null; + /** Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (\`[]\`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._ */ + assignees?: string[]; + /** The contents of the issue. */ + body?: string; + /** Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (\`[]\`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._ */ + labels?: ( + | string + | { + color?: string | null; + description?: string | null; + id?: number; + name?: string; + } + )[]; + /** The \`number\` of the milestone to associate this issue with or \`null\` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._ */ + milestone?: string | number | null; + /** State of the issue. Either \`open\` or \`closed\`. */ + state?: "open" | "closed"; + /** The title of the issue. */ + title?: string | number; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}`, + this.request< + Issue, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -14377,37 +28373,72 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}`, + issuesAddAssignees: ( + owner: string, + repo: string, + issueNumber: number, + data: { + /** Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._ */ + assignees?: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/assignees\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * @description Removes one or more assignees from an issue. + * + * @tags issues + * @name IssuesRemoveAssignees + * @summary Remove assignees from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/assignees + */ + issuesRemoveAssignees: ( + owner: string, + repo: string, + issueNumber: number, + data: { + /** Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._ */ + assignees?: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/assignees\`, method: "DELETE", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description List all discussions on a team's page. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/discussions`. + * @description Issue Comments are ordered by ascending ID. * - * @tags teams - * @name TeamsListDiscussionsInOrg - * @summary List discussions - * @request GET:/orgs/{org}/teams/{team_slug}/discussions + * @tags issues + * @name IssuesListComments + * @summary List issue comments + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/comments */ - teamsListDiscussionsInOrg: ( - org: string, - teamSlug: string, + issuesListComments: ( + owner: string, + repo: string, + issueNumber: number, query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -14418,11 +28449,13 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/comments\`, method: "GET", query: query, format: "json", @@ -14430,31 +28463,25 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/comments\`, method: "POST", body: data, type: ContentType.Json, @@ -14463,83 +28490,52 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}`. + * No description * - * @tags teams - * @name TeamsUpdateDiscussionInOrg - * @summary Update a discussion - * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} + * @tags issues + * @name IssuesListEvents + * @summary List issue events + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/events */ - teamsUpdateDiscussionInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, - data: { - /** The discussion post's body text. */ - body?: string; - /** The discussion post's title. */ - title?: string; + issuesListEvents: ( + owner: string, + repo: string, + issueNumber: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/events\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Delete a discussion from a team's page. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `DELETE /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}`. - * - * @tags teams - * @name TeamsDeleteDiscussionInOrg - * @summary Delete a discussion - * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number} - */ - teamsDeleteDiscussionInOrg: (org: string, teamSlug: string, discussionNumber: number, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}`, - method: "DELETE", - ...params, - }), - - /** - * @description List all comments on a team discussion. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments`. + * No description * - * @tags teams - * @name TeamsListDiscussionCommentsInOrg - * @summary List discussion comments - * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments + * @tags issues + * @name IssuesListLabelsOnIssue + * @summary List labels for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/labels */ - teamsListDiscussionCommentsInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, + issuesListLabelsOnIssue: ( + owner: string, + repo: string, + issueNumber: number, query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -14553,8 +28549,8 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, method: "GET", query: query, format: "json", @@ -14562,25 +28558,25 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments`, + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, method: "POST", body: data, type: ContentType.Json, @@ -14589,49 +28585,26 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edits the body text of a discussion comment. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `PATCH /organizations/{org_id}/team/{team_id}/discussions/{discussion_number}/comments/{comment_number}`. + * @description Removes any previous labels and sets the new labels for an issue. * - * @tags teams - * @name TeamsUpdateDiscussionCommentInOrg - * @summary Update a discussion comment - * @request PATCH:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number} + * @tags issues + * @name IssuesSetLabels + * @summary Set labels for an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/labels */ - teamsUpdateDiscussionCommentInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, - commentNumber: number, + issuesSetLabels: ( + owner: string, + repo: string, + issueNumber: number, data: { - /** The discussion comment's body text. */ - body: string; + /** The names of the labels to add to the issue. You can pass an empty array to remove all labels. **Note:** Alternatively, you can pass a single label as a \`string\` or an \`array\` of labels directly, but GitHub recommends passing an object with the \`labels\` key. */ + labels?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -14639,127 +28612,97 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}`, + issuesRemoveAllLabels: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels\`, method: "DELETE", ...params, }), /** - * @description List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments/). OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions`. + * @description Removes the specified label from the issue, and returns the remaining labels on the issue. This endpoint returns a \`404 Not Found\` status if the label does not exist. * - * @tags reactions - * @name ReactionsListForTeamDiscussionCommentInOrg - * @summary List reactions for a team discussion comment - * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @tags issues + * @name IssuesRemoveLabel + * @summary Remove a label from an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels/{name} */ - reactionsListForTeamDiscussionCommentInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, - commentNumber: number, - query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}/reactions`, - method: "GET", - query: query, + issuesRemoveLabel: (owner: string, repo: string, issueNumber: number, name: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/labels/\${name}\`, + method: "DELETE", format: "json", ...params, }), /** - * @description Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a `Status: 200 OK` means that you already added the reaction type to this team discussion comment. **Note:** You can also specify a team by `org_id` and `team_id` using the route `POST /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions`. + * @description Users with push access can lock an issue or pull request's conversation. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." * - * @tags reactions - * @name ReactionsCreateForTeamDiscussionCommentInOrg - * @summary Create reaction for a team discussion comment - * @request POST:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @tags issues + * @name IssuesLock + * @summary Lock an issue + * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/lock */ - reactionsCreateForTeamDiscussionCommentInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, - commentNumber: number, + issuesLock: ( + owner: string, + repo: string, + issueNumber: number, data: { - /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - }, + /** + * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons: + * \\* \`off-topic\` + * \\* \`too heated\` + * \\* \`resolved\` + * \\* \`spam\` + */ + lock_reason?: "off-topic" | "too heated" | "resolved" | "spam"; + } | null, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}/reactions`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/lock\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** - * @description **Note:** You can also specify a team or organization with `team_id` and `org_id` using the route `DELETE /organizations/:org_id/team/:team_id/discussions/:discussion_number/comments/:comment_number/reactions/:reaction_id`. Delete a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description Users with push access can unlock an issue's conversation. * - * @tags reactions - * @name ReactionsDeleteForTeamDiscussionComment - * @summary Delete team discussion comment reaction - * @request DELETE:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id} + * @tags issues + * @name IssuesUnlock + * @summary Unlock an issue + * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/lock */ - reactionsDeleteForTeamDiscussionComment: ( - org: string, - teamSlug: string, - discussionNumber: number, - commentNumber: number, - reactionId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/comments/${commentNumber}/reactions/${reactionId}`, + issuesUnlock: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/lock\`, method: "DELETE", ...params, }), /** - * @description List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/:org_id/team/:team_id/discussions/:discussion_number/reactions`. + * @description List the reactions to an [issue](https://docs.github.com/rest/reference/issues). * * @tags reactions - * @name ReactionsListForTeamDiscussionInOrg - * @summary List reactions for a team discussion - * @request GET:/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions + * @name ReactionsListForIssue + * @summary List reactions for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/reactions */ - reactionsListForTeamDiscussionInOrg: ( - org: string, - teamSlug: string, - discussionNumber: number, + reactionsListForIssue: ( + owner: string, + repo: string, + issueNumber: number, query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** * Page number of the results to fetch. @@ -14774,8 +28717,15 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/reactions`, + this.request< + Reaction[], + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions\`, method: "GET", query: query, format: "json", @@ -14783,25 +28733,32 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/reactions`, + this.request< + Reaction, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions\`, method: "POST", body: data, type: ContentType.Json, @@ -14810,37 +28767,38 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams/${teamSlug}/discussions/${discussionNumber}/reactions/${reactionId}`, + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/reactions/\${reactionId}\`, method: "DELETE", ...params, }), /** - * @description The return hash contains a `role` field which refers to the Organization Invitation role and will be one of the following values: `direct_member`, `admin`, `billing_manager`, `hiring_manager`, or `reinstate`. If the invitee is not a GitHub member, the `login` field in the return hash will be `null`. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/invitations`. + * No description * - * @tags teams - * @name TeamsListPendingInvitationsInOrg - * @summary List pending team invitations - * @request GET:/orgs/{org}/teams/{team_slug}/invitations + * @tags issues + * @name IssuesListEventsForTimeline + * @summary List timeline events for an issue + * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/timeline */ - teamsListPendingInvitationsInOrg: ( - org: string, - teamSlug: string, + issuesListEventsForTimeline: ( + owner: string, + repo: string, + issueNumber: number, query?: { /** * Page number of the results to fetch. @@ -14855,8 +28813,15 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/invitations`, + this.request< + IssueEventForIssue[], + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/issues/\${issueNumber}/timeline\`, method: "GET", query: query, format: "json", @@ -14864,16 +28829,16 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/members`, + this.request({ + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", query: query, format: "json", @@ -14905,57 +28862,33 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adds an organization member to a team. An authenticated organization owner or team maintainer can add organization members to a team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." An organization owner can add someone who is not part of the team's organization to a team. When an organization owner adds someone to a team who is not an organization member, this endpoint will send an invitation to the person via email. This newly-created membership will be in the "pending" state until the person accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. **Note:** You can also specify a team by `org_id` and `team_id` using the route `PUT /organizations/{org_id}/team/{team_id}/memberships/{username}`. + * @description You can create a read-only deploy key. * - * @tags teams - * @name TeamsAddOrUpdateMembershipForUserInOrg - * @summary Add or update team membership for a user - * @request PUT:/orgs/{org}/teams/{team_slug}/memberships/{username} + * @tags repos + * @name ReposCreateDeployKey + * @summary Create a deploy key + * @request POST:/repos/{owner}/{repo}/keys */ - teamsAddOrUpdateMembershipForUserInOrg: ( - org: string, - teamSlug: string, - username: string, + reposCreateDeployKey: ( + owner: string, + repo: string, data: { + /** The contents of the key. */ + key: string; /** - * The role that this user should have in the team. Can be one of: - * \* `member` - a normal member of the team. - * \* `maintainer` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. - * @default "member" + * If \`true\`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write. + * + * Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)" and "[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)." */ - role?: "member" | "maintainer"; + read_only?: boolean; + /** A name for the key. */ + title?: string; }, params: RequestParams = {}, ) => - this.request< - TeamMembership, - void | { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; - } - >({ - path: `/orgs/${org}/teams/${teamSlug}/memberships/${username}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/keys\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -14963,31 +28896,47 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/memberships/${username}`, + reposGetDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Deploy keys are immutable. If you need to update a key, remove the key and create a new one instead. + * + * @tags repos + * @name ReposDeleteDeployKey + * @summary Delete a deploy key + * @request DELETE:/repos/{owner}/{repo}/keys/{key_id} + */ + reposDeleteDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), /** - * @description Lists the organization projects for a team. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/projects`. + * No description * - * @tags teams - * @name TeamsListProjectsInOrg - * @summary List team projects - * @request GET:/orgs/{org}/teams/{team_slug}/projects + * @tags issues + * @name IssuesListLabelsForRepo + * @summary List labels for a repository + * @request GET:/repos/{owner}/{repo}/labels */ - teamsListProjectsInOrg: ( - org: string, - teamSlug: string, + issuesListLabelsForRepo: ( + owner: string, + repo: string, query?: { /** * Page number of the results to fetch. @@ -15002,8 +28951,8 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/projects`, + this.request({ + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", query: query, format: "json", @@ -15011,227 +28960,296 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/projects/${projectId}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/labels\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesGetLabel + * @summary Get a label + * @request GET:/repos/{owner}/{repo}/labels/{name} + */ + issuesGetLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, }), /** - * @description Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have `admin` permissions for the project. The project and team must be part of the same organization. **Note:** You can also specify a team by `org_id` and `team_id` using the route `PUT /organizations/{org_id}/team/{team_id}/projects/{project_id}`. + * No description * - * @tags teams - * @name TeamsAddOrUpdateProjectPermissionsInOrg - * @summary Add or update team project permissions - * @request PUT:/orgs/{org}/teams/{team_slug}/projects/{project_id} + * @tags issues + * @name IssuesUpdateLabel + * @summary Update a label + * @request PATCH:/repos/{owner}/{repo}/labels/{name} */ - teamsAddOrUpdateProjectPermissionsInOrg: ( - org: string, - teamSlug: string, - projectId: number, + issuesUpdateLabel: ( + owner: string, + repo: string, + name: string, data: { - /** - * The permission to grant to the team for this project. Can be one of: - * \* `read` - team members can read, but not write to or administer this project. - * \* `write` - team members can read and write, but not administer this project. - * \* `admin` - team members can read, write and administer this project. - * Default: the team's `permission` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - */ - permission?: "read" | "write" | "admin"; + /** The [hexadecimal color code](http://www.color-hex.com/) for the label, without the leading \`#\`. */ + color?: string; + /** A short description of the label. */ + description?: string; + /** The new name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing \`:strawberry:\` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png ":strawberry:"). For a full list of available emoji and codes, see [emoji-cheat-sheet.com](http://emoji-cheat-sheet.com/). */ + new_name?: string; }, params: RequestParams = {}, ) => - this.request< - void, - { - documentation_url?: string; - message?: string; - } - >({ - path: `/orgs/${org}/teams/${teamSlug}/projects/${projectId}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, + method: "PATCH", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have `read` access to both the team and project, or `admin` access to the team or project. This endpoint removes the project from the team, but does not delete the project. **Note:** You can also specify a team by `org_id` and `team_id` using the route `DELETE /organizations/{org_id}/team/{team_id}/projects/{project_id}`. + * No description * - * @tags teams - * @name TeamsRemoveProjectInOrg - * @summary Remove a project from a team - * @request DELETE:/orgs/{org}/teams/{team_slug}/projects/{project_id} + * @tags issues + * @name IssuesDeleteLabel + * @summary Delete a label + * @request DELETE:/repos/{owner}/{repo}/labels/{name} */ - teamsRemoveProjectInOrg: (org: string, teamSlug: string, projectId: number, params: RequestParams = {}) => + issuesDeleteLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => this.request({ - path: `/orgs/${org}/teams/${teamSlug}/projects/${projectId}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), /** - * @description Lists a team's repositories visible to the authenticated user. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/repos`. + * @description Lists languages for the specified repository. The value shown for each language is the number of bytes of code written in that language. * - * @tags teams - * @name TeamsListReposInOrg - * @summary List team repositories - * @request GET:/orgs/{org}/teams/{team_slug}/repos + * @tags repos + * @name ReposListLanguages + * @summary List repository languages + * @request GET:/repos/{owner}/{repo}/languages */ - teamsListReposInOrg: ( - org: string, - teamSlug: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + reposListLanguages: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/languages\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description This method returns the contents of the repository's license file, if one is detected. Similar to [Get repository content](https://docs.github.com/rest/reference/repos#get-repository-content), this method also supports [custom media types](https://docs.github.com/rest/overview/media-types) for retrieving the raw license content or rendered license HTML. + * + * @tags licenses + * @name LicensesGetForRepo + * @summary Get the license for a repository + * @request GET:/repos/{owner}/{repo}/license + */ + licensesGetForRepo: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/license\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags repos + * @name ReposMerge + * @summary Merge a branch + * @request POST:/repos/{owner}/{repo}/merges + */ + reposMerge: ( + owner: string, + repo: string, + data: { + /** The name of the base branch that the head will be merged into. */ + base: string; + /** Commit message to use for the merge commit. If omitted, a default message will be used. */ + commit_message?: string; + /** The head to merge. This can be a branch name or a commit SHA1. */ + head: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/repos`, - method: "GET", - query: query, + this.request< + Commit, + | BasicError + | { + /** @example ""https://docs.github.com/rest/reference/repos#perform-a-merge"" */ + documentation_url?: string; + message?: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/merges\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Checks whether a team has `admin`, `push`, `maintain`, `triage`, or `pull` permission for a repository. Repositories inherited through a parent team will also be checked. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the `application/vnd.github.v3.repository+json` accept header. If a team doesn't have permission for the repository, you will receive a `404 Not Found` response status. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}`. + * No description * - * @tags teams - * @name TeamsCheckPermissionsForRepoInOrg - * @summary Check team permissions for a repository - * @request GET:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + * @tags issues + * @name IssuesListMilestones + * @summary List milestones + * @request GET:/repos/{owner}/{repo}/milestones */ - teamsCheckPermissionsForRepoInOrg: ( - org: string, - teamSlug: string, + issuesListMilestones: ( owner: string, repo: string, + query?: { + /** + * The direction of the sort. Either \`asc\` or \`desc\`. + * @default "asc" + */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * What to sort results by. Either \`due_on\` or \`completeness\`. + * @default "due_on" + */ + sort?: "due_on" | "completeness"; + /** + * The state of the milestone. Either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; + }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/repos/${owner}/${repo}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a `422 Unprocessable Entity` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." **Note:** You can also specify a team by `org_id` and `team_id` using the route `PUT /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}`. For more information about the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". + * No description * - * @tags teams - * @name TeamsAddOrUpdateRepoPermissionsInOrg - * @summary Add or update team repository permissions - * @request PUT:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} + * @tags issues + * @name IssuesCreateMilestone + * @summary Create a milestone + * @request POST:/repos/{owner}/{repo}/milestones */ - teamsAddOrUpdateRepoPermissionsInOrg: ( - org: string, - teamSlug: string, + issuesCreateMilestone: ( owner: string, repo: string, data: { + /** A description of the milestone. */ + description?: string; + /** The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + due_on?: string; /** - * The permission to grant the team on this repository. Can be one of: - * \* `pull` - team members can pull, but not push to or administer this repository. - * \* `push` - team members can pull and push, but not administer this repository. - * \* `admin` - team members can pull, push and administer this repository. - * \* `maintain` - team members can manage the repository without access to sensitive or destructive actions. Recommended for project managers. Only applies to repositories owned by organizations. - * \* `triage` - team members can proactively manage issues and pull requests without write access. Recommended for contributors who triage a repository. Only applies to repositories owned by organizations. - * - * If no permission is specified, the team's `permission` attribute will be used to determine what permission to grant the team on this repository. + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" */ - permission?: "pull" | "push" | "admin" | "maintain" | "triage"; + state?: "open" | "closed"; + /** The title of the milestone. */ + title: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/repos/${owner}/${repo}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. This does not delete the repository, it just removes it from the team. **Note:** You can also specify a team by `org_id` and `team_id` using the route `DELETE /organizations/{org_id}/team/{team_id}/repos/{owner}/{repo}`. - * - * @tags teams - * @name TeamsRemoveRepoInOrg - * @summary Remove a repository from a team - * @request DELETE:/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} - */ - teamsRemoveRepoInOrg: (org: string, teamSlug: string, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. **Note:** You can also specify a team by `org_id` and `team_id` using the route `GET /organizations/{org_id}/team/{team_id}/team-sync/group-mappings`. + * No description * - * @tags teams - * @name TeamsListIdpGroupsInOrg - * @summary List IdP groups for a team - * @request GET:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + * @tags issues + * @name IssuesGetMilestone + * @summary Get a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number} */ - teamsListIdpGroupsInOrg: (org: string, teamSlug: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/team-sync/group-mappings`, + issuesGetMilestone: (owner: string, repo: string, milestoneNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, method: "GET", format: "json", ...params, }), /** - * @description Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty `groups` array will remove all connections for a team. **Note:** You can also specify a team by `org_id` and `team_id` using the route `PATCH /organizations/{org_id}/team/{team_id}/team-sync/group-mappings`. + * No description * - * @tags teams - * @name TeamsCreateOrUpdateIdpGroupConnectionsInOrg - * @summary Create or update IdP group connections - * @request PATCH:/orgs/{org}/teams/{team_slug}/team-sync/group-mappings + * @tags issues + * @name IssuesUpdateMilestone + * @summary Update a milestone + * @request PATCH:/repos/{owner}/{repo}/milestones/{milestone_number} */ - teamsCreateOrUpdateIdpGroupConnectionsInOrg: ( - org: string, - teamSlug: string, + issuesUpdateMilestone: ( + owner: string, + repo: string, + milestoneNumber: number, data: { - /** The IdP groups you want to connect to a GitHub team. When updating, the new `groups` object will replace the original one. You must include any existing groups that you don't want to remove. */ - groups: { - /** Description of the IdP group. */ - group_description: string; - /** ID of the IdP group. */ - group_id: string; - /** Name of the IdP group. */ - group_name: string; - }[]; + /** A description of the milestone. */ + description?: string; + /** The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + due_on?: string; + /** + * The state of the milestone. Either \`open\` or \`closed\`. + * @default "open" + */ + state?: "open" | "closed"; + /** The title of the milestone. */ + title?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/team-sync/group-mappings`, + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -15240,16 +29258,32 @@ export class Api extends HttpClient + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags issues + * @name IssuesListLabelsForMilestone + * @summary List labels for issues in a milestone + * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number}/labels + */ + issuesListLabelsForMilestone: ( + owner: string, + repo: string, + milestoneNumber: number, query?: { /** * Page number of the results to fetch. @@ -15264,137 +29298,137 @@ export class Api extends HttpClient - this.request({ - path: `/orgs/${org}/teams/${teamSlug}/teams`, + this.request({ + path: \`/repos/\${owner}/\${repo}/milestones/\${milestoneNumber}/labels\`, method: "GET", query: query, format: "json", ...params, }), - }; - projects = { + /** - * No description + * @description List all notifications for the current user. * - * @tags projects - * @name ProjectsGetCard - * @summary Get a project card - * @request GET:/projects/columns/cards/{card_id} + * @tags activity + * @name ActivityListRepoNotificationsForAuthenticatedUser + * @summary List repository notifications for the authenticated user + * @request GET:/repos/{owner}/{repo}/notifications */ - projectsGetCard: (cardId: number, params: RequestParams = {}) => - this.request({ - path: `/projects/columns/cards/${cardId}`, + activityListRepoNotificationsForAuthenticatedUser: ( + owner: string, + repo: string, + query?: { + /** + * If \`true\`, show notifications marked as read. + * @default false + */ + all?: boolean; + /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + before?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * If \`true\`, only shows notifications in which the user is directly participating or mentioned. + * @default false + */ + participating?: boolean; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", + query: query, format: "json", ...params, }), /** - * No description + * @description Marks all notifications in a repository as "read" removes them from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a \`202 Accepted\` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List repository notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-repository-notifications-for-the-authenticated-user) endpoint and pass the query parameter \`all=false\`. * - * @tags projects - * @name ProjectsUpdateCard - * @summary Update an existing project card - * @request PATCH:/projects/columns/cards/{card_id} + * @tags activity + * @name ActivityMarkRepoNotificationsAsRead + * @summary Mark repository notifications as read + * @request PUT:/repos/{owner}/{repo}/notifications */ - projectsUpdateCard: ( - cardId: number, + activityMarkRepoNotificationsAsRead: ( + owner: string, + repo: string, data: { - /** - * Whether or not the card is archived - * @example false - */ - archived?: boolean; - /** - * The project card's note - * @example "Update all gems" - */ - note?: string | null; + /** Describes the last point that notifications were checked. Anything updated since this time will not be marked as read. If you omit this parameter, all notifications are marked as read. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. Default: The current timestamp. */ + last_read_at?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/projects/columns/cards/${cardId}`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/notifications\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** * No description * - * @tags projects - * @name ProjectsDeleteCard - * @summary Delete a project card - * @request DELETE:/projects/columns/cards/{card_id} + * @tags repos + * @name ReposGetPages + * @summary Get a GitHub Pages site + * @request GET:/repos/{owner}/{repo}/pages */ - projectsDeleteCard: (cardId: number, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url?: string; - errors?: string[]; - message?: string; - } - >({ - path: `/projects/columns/cards/${cardId}`, - method: "DELETE", + reposGetPages: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "GET", + format: "json", ...params, }), /** - * No description + * @description Configures a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages)." * - * @tags projects - * @name ProjectsMoveCard - * @summary Move a project card - * @request POST:/projects/columns/cards/{card_id}/moves + * @tags repos + * @name ReposCreatePagesSite + * @summary Create a GitHub Pages site + * @request POST:/repos/{owner}/{repo}/pages */ - projectsMoveCard: ( - cardId: number, + reposCreatePagesSite: ( + owner: string, + repo: string, data: { - /** - * The unique identifier of the column the card should be moved to - * @example 42 - */ - column_id?: number; - /** - * The position of the card in a column - * @pattern ^(?:top|bottom|after:\d+)$ - * @example "bottom" - */ - position: string; + /** The source branch and directory used to publish your Pages site. */ + source: { + /** The repository branch used to publish your site's source files. */ + branch: string; + /** + * The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. Default: \`/\` + * @default "/" + */ + path?: "/" | "/docs"; + }; }, params: RequestParams = {}, ) => this.request< - object, + Page, | BasicError | { - documentation_url?: string; - errors?: { - code?: string; - field?: string; - message?: string; - resource?: string; - }[]; - message?: string; + documentation_url: string; + message: string; } | ValidationError - | { - code?: string; - documentation_url?: string; - errors?: { - code?: string; - message?: string; - }[]; - message?: string; - } >({ - path: `/projects/columns/cards/${cardId}/moves`, + path: \`/repos/\${owner}/\${repo}/pages\`, method: "POST", body: data, type: ContentType.Json, @@ -15403,60 +29437,62 @@ export class Api extends HttpClient - this.request({ - path: `/projects/columns/${columnId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description + * @description Updates information for a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages). * - * @tags projects - * @name ProjectsUpdateColumn - * @summary Update an existing project column - * @request PATCH:/projects/columns/{column_id} + * @tags repos + * @name ReposUpdateInformationAboutPagesSite + * @summary Update information about a GitHub Pages site + * @request PUT:/repos/{owner}/{repo}/pages */ - projectsUpdateColumn: ( - columnId: number, + reposUpdateInformationAboutPagesSite: ( + owner: string, + repo: string, data: { - /** - * Name of the project column - * @example "Remaining tasks" - */ - name: string; + /** Specify a custom domain for the repository. Sending a \`null\` value will remove the custom domain. For more about custom domains, see "[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/)." */ + cname?: string | null; + /** Configures access controls for the GitHub Pages site. If public is set to \`true\`, the site is accessible to anyone on the internet. If set to \`false\`, the site will only be accessible to users who have at least \`read\` access to the repository that published the site. This includes anyone in your Enterprise if the repository is set to \`internal\` visibility. This feature is only available to repositories in an organization on an Enterprise plan. */ + public?: boolean; + /** Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory \`/docs\`. Possible values are \`"gh-pages"\`, \`"master"\`, and \`"master /docs"\`. */ + source: + | "gh-pages" + | "master" + | "master /docs" + | { + /** The repository branch used to publish your site's source files. */ + branch: string; + /** The repository directory that includes the source files for the Pages site. Allowed paths are \`/\` or \`/docs\`. */ + path: "/" | "/docs"; + }; }, params: RequestParams = {}, ) => - this.request({ - path: `/projects/columns/${columnId}`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/pages\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** * No description * - * @tags projects - * @name ProjectsDeleteColumn - * @summary Delete a project column - * @request DELETE:/projects/columns/{column_id} + * @tags repos + * @name ReposDeletePagesSite + * @summary Delete a GitHub Pages site + * @request DELETE:/repos/{owner}/{repo}/pages */ - projectsDeleteColumn: (columnId: number, params: RequestParams = {}) => - this.request({ - path: `/projects/columns/${columnId}`, + reposDeletePagesSite: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + void, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pages\`, method: "DELETE", ...params, }), @@ -15464,19 +29500,15 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/projects/columns/${columnId}/cards`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds\`, method: "GET", query: query, format: "json", @@ -15499,55 +29531,17 @@ export class Api extends HttpClient - this.request< - ProjectCard, - | BasicError - | (ValidationError | ValidationErrorSimple) - | { - code?: string; - documentation_url?: string; - errors?: { - code?: string; - message?: string; - }[]; - message?: string; - } - >({ - path: `/projects/columns/${columnId}/cards`, + reposRequestPagesBuild: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds\`, method: "POST", - body: data, - type: ContentType.Json, format: "json", ...params, }), @@ -15555,142 +29549,47 @@ export class Api extends HttpClient - this.request({ - path: `/projects/columns/${columnId}/moves`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Gets a project by its `id`. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned. - * - * @tags projects - * @name ProjectsGet - * @summary Get a project - * @request GET:/projects/{project_id} - */ - projectsGet: (projectId: number, params: RequestParams = {}) => - this.request({ - path: `/projects/${projectId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Updates a project board's information. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned. - * - * @tags projects - * @name ProjectsUpdate - * @summary Update a project - * @request PATCH:/projects/{project_id} - */ - projectsUpdate: ( - projectId: number, - data: { - /** - * Body of the project - * @example "This project represents the sprint of the first week in January" - */ - body?: string | null; - /** - * Name of the project - * @example "Week One Sprint" - */ - name?: string; - /** The baseline permission that all organization members have on this project */ - organization_permission?: "read" | "write" | "admin" | "none"; - /** Whether or not this project can be seen by everyone. */ - private?: boolean; - /** - * State of the project; either 'open' or 'closed' - * @example "open" - */ - state?: string; - }, - params: RequestParams = {}, - ) => - this.request< - Project, - | BasicError - | { - documentation_url?: string; - errors?: string[]; - message?: string; - } - | void - | ValidationErrorSimple - >({ - path: `/projects/${projectId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + * @tags repos + * @name ReposGetLatestPagesBuild + * @summary Get latest Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/latest + */ + reposGetLatestPagesBuild: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds/latest\`, + method: "GET", format: "json", ...params, }), /** - * @description Deletes a project board. Returns a `404 Not Found` status if projects are disabled. + * No description * - * @tags projects - * @name ProjectsDelete - * @summary Delete a project - * @request DELETE:/projects/{project_id} + * @tags repos + * @name ReposGetPagesBuild + * @summary Get GitHub Pages build + * @request GET:/repos/{owner}/{repo}/pages/builds/{build_id} */ - projectsDelete: (projectId: number, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url?: string; - errors?: string[]; - message?: string; - } - >({ - path: `/projects/${projectId}`, - method: "DELETE", + reposGetPagesBuild: (owner: string, repo: string, buildId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pages/builds/\${buildId}\`, + method: "GET", + format: "json", ...params, }), /** - * @description Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project `admin` to list collaborators. + * @description Lists the projects in a repository. Returns a \`404 Not Found\` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a \`401 Unauthorized\` or \`410 Gone\` status is returned. * * @tags projects - * @name ProjectsListCollaborators - * @summary List project collaborators - * @request GET:/projects/{project_id}/collaborators + * @name ProjectsListForRepo + * @summary List repository projects + * @request GET:/repos/{owner}/{repo}/projects */ - projectsListCollaborators: ( - projectId: number, + projectsListForRepo: ( + owner: string, + repo: string, query?: { - /** - * Filters the collaborators by their affiliation. Can be one of: - * \* `outside`: Outside collaborators of a project that are not a member of the project's organization. - * \* `direct`: Collaborators with permissions to a project, regardless of organization membership status. - * \* `all`: All collaborators the authenticated user can see. - * @default "all" - */ - affiliation?: "outside" | "direct" | "all"; /** * Page number of the results to fetch. * @default 1 @@ -15701,19 +29600,16 @@ export class Api extends HttpClient - this.request< - SimpleUser[], - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/projects/${projectId}/collaborators`, + this.request({ + path: \`/repos/\${owner}/\${repo}/projects\`, method: "GET", query: query, format: "json", @@ -15721,100 +29617,51 @@ export class Api extends HttpClient - this.request< - void, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/projects/${projectId}/collaborators/${username}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/projects\`, + method: "POST", body: data, type: ContentType.Json, - ...params, - }), - - /** - * @description Removes a collaborator from an organization project. You must be an organization owner or a project `admin` to remove a collaborator. - * - * @tags projects - * @name ProjectsRemoveCollaborator - * @summary Remove user as a collaborator - * @request DELETE:/projects/{project_id}/collaborators/{username} - */ - projectsRemoveCollaborator: (projectId: number, username: string, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/projects/${projectId}/collaborators/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Returns the collaborator's permission level for an organization project. Possible values for the `permission` key: `admin`, `write`, `read`, `none`. You must be an organization owner or a project `admin` to review a user's permission level. - * - * @tags projects - * @name ProjectsGetPermissionForUser - * @summary Get project permission for a user - * @request GET:/projects/{project_id}/collaborators/{username}/permission - */ - projectsGetPermissionForUser: (projectId: number, username: string, params: RequestParams = {}) => - this.request< - RepositoryCollaboratorPermission, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/projects/${projectId}/collaborators/${username}/permission`, - method: "GET", format: "json", ...params, }), /** - * No description + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. * - * @tags projects - * @name ProjectsListColumns - * @summary List project columns - * @request GET:/projects/{project_id}/columns + * @tags pulls + * @name PullsList + * @summary List pull requests + * @request GET:/repos/{owner}/{repo}/pulls */ - projectsListColumns: ( - projectId: number, + pullsList: ( + owner: string, + repo: string, query?: { + /** Filter pulls by base branch name. Example: \`gh-pages\`. */ + base?: string; + /** The direction of the sort. Can be either \`asc\` or \`desc\`. Default: \`desc\` when sort is \`created\` or sort is not specified, otherwise \`asc\`. */ + direction?: "asc" | "desc"; + /** Filter pulls by head user or head organization and branch name in the format of \`user:ref-name\` or \`organization:ref-name\`. For example: \`github:new-script-format\` or \`octocat:test-branch\`. */ + head?: string; /** * Page number of the results to fetch. * @default 1 @@ -15825,11 +29672,21 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/columns`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -15837,169 +29694,121 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/columns`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), - }; - rateLimit = { + /** - * @description **Note:** Accessing this endpoint does not count against your REST API rate limit. **Note:** The `rate` object is deprecated. If you're writing new API client code or updating existing code, you should use the `core` object instead of the `rate` object. The `core` object contains the same information that is present in the `rate` object. + * @description Lists review comments for all pull requests in a repository. By default, review comments are in ascending order by ID. * - * @tags rate-limit - * @name RateLimitGet - * @summary Get rate limit status for the authenticated user - * @request GET:/rate_limit + * @tags pulls + * @name PullsListReviewCommentsForRepo + * @summary List review comments in a repository + * @request GET:/repos/{owner}/{repo}/pulls/comments */ - rateLimitGet: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, + pullsListReviewCommentsForRepo: ( + owner: string, + repo: string, + query?: { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: "created" | "updated"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", + query: query, format: "json", ...params, }), - }; - reactions = { - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Reactions API. We recommend migrating your existing code to use the new delete reactions endpoints. For more information, see this [blog post](https://developer.github.com/changes/2020-02-26-new-delete-reactions-endpoints/). OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), when deleting a [team discussion](https://docs.github.com/rest/reference/teams#discussions) or [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). - * - * @tags reactions - * @name ReactionsDeleteLegacy - * @summary Delete a reaction (Legacy) - * @request DELETE:/reactions/{reaction_id} - * @deprecated - */ - reactionsDeleteLegacy: (reactionId: number, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/reactions/${reactionId}`, - method: "DELETE", - ...params, - }), - }; - repos = { + /** - * @description When you pass the `scarlet-witch-preview` media type, requests to get a repository will also return the repository's code of conduct if it can be detected from the repository's code of conduct file. The `parent` and `source` objects are present when the repository is a fork. `parent` is the repository this repository was forked from, `source` is the ultimate source for the network. + * @description Provides details for a review comment. * - * @tags repos - * @name ReposGet - * @summary Get a repository - * @request GET:/repos/{owner}/{repo} + * @tags pulls + * @name PullsGetReviewComment + * @summary Get a review comment for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id} */ - reposGet: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, + pullsGetReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, }), /** - * @description **Note**: To edit a repository's topics, use the [Replace all repository topics](https://docs.github.com/rest/reference/repos#replace-all-repository-topics) endpoint. + * @description Enables you to edit a review comment. * - * @tags repos - * @name ReposUpdate - * @summary Update a repository - * @request PATCH:/repos/{owner}/{repo} + * @tags pulls + * @name PullsUpdateReviewComment + * @summary Update a review comment for a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{comment_id} */ - reposUpdate: ( + pullsUpdateReviewComment: ( owner: string, repo: string, + commentId: number, data: { - /** - * Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits. - * @default true - */ - allow_merge_commit?: boolean; - /** - * Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. - * @default true - */ - allow_rebase_merge?: boolean; - /** - * Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. - * @default true - */ - allow_squash_merge?: boolean; - /** - * `true` to archive this repository. **Note**: You cannot unarchive repositories through the API. - * @default false - */ - archived?: boolean; - /** Updates the default branch for this repository. */ - default_branch?: string; - /** - * Either `true` to allow automatically deleting head branches when pull requests are merged, or `false` to prevent automatic deletion. - * @default false - */ - delete_branch_on_merge?: boolean; - /** A short description of the repository. */ - description?: string; - /** - * Either `true` to enable issues for this repository or `false` to disable them. - * @default true - */ - has_issues?: boolean; - /** - * Either `true` to enable projects for this repository or `false` to disable them. **Note:** If you're creating a repository in an organization that has disabled repository projects, the default is `false`, and if you pass `true`, the API returns an error. - * @default true - */ - has_projects?: boolean; - /** - * Either `true` to enable the wiki for this repository or `false` to disable it. - * @default true - */ - has_wiki?: boolean; - /** A URL with more information about the repository. */ - homepage?: string; - /** - * Either `true` to make this repo available as a template repository or `false` to prevent it. - * @default false - */ - is_template?: boolean; - /** The name of the repository. */ - name?: string; - /** - * Either `true` to make the repository private or `false` to make it public. Default: `false`. - * **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. **Note**: You will get a `422` error if the organization restricts [changing repository visibility](https://help.github.com/articles/repository-permission-levels-for-an-organization#changing-the-visibility-of-repositories) to organization owners and a non-owner tries to change the value of private. - * @default false - */ - private?: boolean; - /** Can be `public` or `private`. If your organization is associated with an enterprise account using GitHub Enterprise Cloud or GitHub Enterprise Server 2.20+, `visibility` can also be `internal`. The `visibility` parameter overrides the `private` parameter when you use both along with the `nebula-preview` preview header. */ - visibility?: "public" | "private" | "visibility" | "internal"; + /** The text of the reply to the review comment. */ + body: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -16008,39 +29817,35 @@ export class Api extends HttpClient - this.request< - void, - | { - documentation_url?: string; - message?: string; - } - | BasicError - >({ - path: `/repos/${owner}/${repo}`, + pullsDeleteReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), /** - * @description Lists all artifacts for a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description List the reactions to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). * - * @tags actions - * @name ActionsListArtifactsForRepo - * @summary List artifacts for a repository - * @request GET:/repos/{owner}/{repo}/actions/artifacts + * @tags reactions + * @name ReactionsListForPullRequestReviewComment + * @summary List reactions for a pull request review comment + * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions */ - actionsListArtifactsForRepo: ( + reactionsListForPullRequestReviewComment: ( owner: string, repo: string, + commentId: number, query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** * Page number of the results to fetch. * @default 1 @@ -16055,13 +29860,14 @@ export class Api extends HttpClient this.request< - { - artifacts: Artifact[]; - total_count: number; - }, - any + Reaction[], + | BasicError + | { + documentation_url: string; + message: string; + } >({ - path: `/repos/${owner}/${repo}/actions/artifacts`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions\`, method: "GET", query: query, format: "json", @@ -16069,180 +29875,271 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/artifacts/${artifactId}`, - method: "GET", + reactionsCreateForPullRequestReviewComment: ( + owner: string, + repo: string, + commentId: number, + data: { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the pull request review comment. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + }, + params: RequestParams = {}, + ) => + this.request< + Reaction, + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Deletes an artifact for a workflow run. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. - * - * @tags actions - * @name ActionsDeleteArtifact - * @summary Delete an artifact - * @request DELETE:/repos/{owner}/{repo}/actions/artifacts/{artifact_id} - */ - actionsDeleteArtifact: (owner: string, repo: string, artifactId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/artifacts/${artifactId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Gets a redirect URL to download an archive for a repository. This URL expires after 1 minute. Look for `Location:` in the response header to find the URL for the download. The `:archive_format` must be `zip`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description **Note:** You can also specify a repository by \`repository_id\` using the route \`DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.\` Delete a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). * - * @tags actions - * @name ActionsDownloadArtifact - * @summary Download an artifact - * @request GET:/repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format} + * @tags reactions + * @name ReactionsDeleteForPullRequestComment + * @summary Delete a pull request comment reaction + * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id} */ - actionsDownloadArtifact: ( + reactionsDeleteForPullRequestComment: ( owner: string, repo: string, - artifactId: number, - archiveFormat: string, + commentId: number, + reactionId: number, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/artifacts/${artifactId}/${archiveFormat}`, - method: "GET", + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}/reactions/\${reactionId}\`, + method: "DELETE", ...params, }), /** - * @description Gets a specific job in a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists details of a pull request by providing its number. When you get, [create](https://docs.github.com/rest/reference/pulls/#create-a-pull-request), or [edit](https://docs.github.com/rest/reference/pulls#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the \`mergeable\` key. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". The value of the \`mergeable\` attribute can be \`true\`, \`false\`, or \`null\`. If the value is \`null\`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-\`null\` value for the \`mergeable\` attribute in the response. If \`mergeable\` is \`true\`, then \`merge_commit_sha\` will be the SHA of the _test_ merge commit. The value of the \`merge_commit_sha\` attribute changes depending on the state of the pull request. Before merging a pull request, the \`merge_commit_sha\` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the \`merge_commit_sha\` attribute changes depending on how you merged the pull request: * If merged as a [merge commit](https://help.github.com/articles/about-merge-methods-on-github/), \`merge_commit_sha\` represents the SHA of the merge commit. * If merged via a [squash](https://help.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), \`merge_commit_sha\` represents the SHA of the squashed commit on the base branch. * If [rebased](https://help.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), \`merge_commit_sha\` represents the commit that the base branch was updated to. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. * - * @tags actions - * @name ActionsGetJobForWorkflowRun - * @summary Get a job for a workflow run - * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id} + * @tags pulls + * @name PullsGet + * @summary Get a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number} */ - actionsGetJobForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/jobs/${jobId}`, + pullsGet: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}\`, method: "GET", format: "json", ...params, }), /** - * @description Gets a redirect URL to download a plain text file of logs for a workflow job. This link expires after 1 minute. Look for `Location:` in the response header to find the URL for the download. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. * - * @tags actions - * @name ActionsDownloadJobLogsForWorkflowRun - * @summary Download job logs for a workflow run - * @request GET:/repos/{owner}/{repo}/actions/jobs/{job_id}/logs + * @tags pulls + * @name PullsUpdate + * @summary Update a pull request + * @request PATCH:/repos/{owner}/{repo}/pulls/{pull_number} */ - actionsDownloadJobLogsForWorkflowRun: (owner: string, repo: string, jobId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/jobs/${jobId}/logs`, - method: "GET", + pullsUpdate: ( + owner: string, + repo: string, + pullNumber: number, + data: { + /** The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository. */ + base?: string; + /** The contents of the pull request. */ + body?: string; + /** Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ + maintainer_can_modify?: boolean; + /** State of this Pull Request. Either \`open\` or \`closed\`. */ + state?: "open" | "closed"; + /** The title of the pull request. */ + title?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Gets the GitHub Actions permissions policy for a repository, including whether GitHub Actions is enabled and the actions allowed to run in the repository. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `administration` repository permission to use this API. + * @description Lists all review comments for a pull request. By default, review comments are in ascending order by ID. * - * @tags actions - * @name ActionsGetGithubActionsPermissionsRepository - * @summary Get GitHub Actions permissions for a repository - * @request GET:/repos/{owner}/{repo}/actions/permissions + * @tags pulls + * @name PullsListReviewComments + * @summary List review comments on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/comments */ - actionsGetGithubActionsPermissionsRepository: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/permissions`, + pullsListReviewComments: ( + owner: string, + repo: string, + pullNumber: number, + query?: { + /** Can be either \`asc\` or \`desc\`. Ignored without \`sort\` parameter. */ + direction?: "asc" | "desc"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * One of \`created\` (when the repository was starred) or \`updated\` (when it was last pushed to). + * @default "created" + */ + sort?: "created" | "updated"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Sets the GitHub Actions permissions policy for enabling GitHub Actions and allowed actions in the repository. If the repository belongs to an organization or enterprise that has set restrictive permissions at the organization or enterprise levels, such as `allowed_actions` to `selected` actions, then you cannot override them for the repository. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `administration` repository permission to use this API. + * @description Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Create an issue comment](https://docs.github.com/rest/reference/issues#create-an-issue-comment)." We recommend creating a review comment using \`line\`, \`side\`, and optionally \`start_line\` and \`start_side\` if your comment applies to more than one line in the pull request diff. You can still create a review comment using the \`position\` parameter. When you use \`position\`, the \`line\`, \`side\`, \`start_line\`, and \`start_side\` parameters are not required. For more information, see the [\`comfort-fade\` preview notice](https://docs.github.com/rest/reference/pulls#create-a-review-comment-for-a-pull-request-preview-notices). **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. * - * @tags actions - * @name ActionsSetGithubActionsPermissionsRepository - * @summary Set GitHub Actions permissions for a repository - * @request PUT:/repos/{owner}/{repo}/actions/permissions + * @tags pulls + * @name PullsCreateReviewComment + * @summary Create a review comment for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments */ - actionsSetGithubActionsPermissionsRepository: ( + pullsCreateReviewComment: ( owner: string, repo: string, + pullNumber: number, data: { - /** The permissions policy that controls the actions that are allowed to run. Can be one of: `all`, `local_only`, or `selected`. */ - allowed_actions?: AllowedActions; - /** Whether GitHub Actions is enabled on the repository. */ - enabled: ActionsEnabled; + /** The text of the review comment. */ + body: string; + /** The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the \`position\`. */ + commit_id?: string; + /** @example 2 */ + in_reply_to?: number; + /** **Required with \`comfort-fade\` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. */ + line?: number; + /** The relative path to the file that necessitates a comment. */ + path: string; + /** **Required without \`comfort-fade\` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above. */ + position?: number; + /** **Required with \`comfort-fade\` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be \`LEFT\` or \`RIGHT\`. Use \`LEFT\` for deletions that appear in red. Use \`RIGHT\` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation. */ + side?: "LEFT" | "RIGHT"; + /** **Required when using multi-line comments**. To create multi-line comments, you must use the \`comfort-fade\` preview header. The \`start_line\` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. */ + start_line?: number; + /** **Required when using multi-line comments**. To create multi-line comments, you must use the \`comfort-fade\` preview header. The \`start_side\` is the starting side of the diff that the comment applies to. Can be \`LEFT\` or \`RIGHT\`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See \`side\` in this table for additional context. */ + start_side?: "LEFT" | "RIGHT" | "side"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/permissions`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments\`, + method: "POST", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Gets the settings for selected actions that are allowed in a repository. To use this endpoint, the repository policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `administration` repository permission to use this API. + * @description Creates a reply to a review comment for a pull request. For the \`comment_id\`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. * - * @tags actions - * @name ActionsGetAllowedActionsRepository - * @summary Get allowed actions for a repository - * @request GET:/repos/{owner}/{repo}/actions/permissions/selected-actions + * @tags pulls + * @name PullsCreateReplyForReviewComment + * @summary Create a reply for a review comment + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies */ - actionsGetAllowedActionsRepository: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/permissions/selected-actions`, - method: "GET", + pullsCreateReplyForReviewComment: ( + owner: string, + repo: string, + pullNumber: number, + commentId: number, + data: { + /** The text of the review comment. */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/comments/\${commentId}/replies\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Sets the actions that are allowed in a repository. To use this endpoint, the repository permission policy for `allowed_actions` must be configured to `selected`. For more information, see "[Set GitHub Actions permissions for a repository](#set-github-actions-permissions-for-a-repository)." If the repository belongs to an organization or enterprise that has `selected` actions set at the organization or enterprise levels, then you cannot override any of the allowed actions settings. To use the `patterns_allowed` setting for private repositories, the repository must belong to an enterprise. If the repository does not belong to an enterprise, then the `patterns_allowed` setting only applies to public repositories. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `administration` repository permission to use this API. + * @description Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) endpoint. * - * @tags actions - * @name ActionsSetAllowedActionsRepository - * @summary Set allowed actions for a repository - * @request PUT:/repos/{owner}/{repo}/actions/permissions/selected-actions + * @tags pulls + * @name PullsListCommits + * @summary List commits on a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/commits */ - actionsSetAllowedActionsRepository: ( + pullsListCommits: ( owner: string, repo: string, - data: SelectedActions, + pullNumber: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/permissions/selected-actions`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/commits\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Lists all self-hosted runners configured in a repository. You must authenticate using an access token with the `repo` scope to use this endpoint. + * @description **Note:** Responses include a maximum of 3000 files. The paginated response returns 30 files per page by default. * - * @tags actions - * @name ActionsListSelfHostedRunnersForRepo - * @summary List self-hosted runners for a repository - * @request GET:/repos/{owner}/{repo}/actions/runners + * @tags pulls + * @name PullsListFiles + * @summary List pull requests files + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/files */ - actionsListSelfHostedRunnersForRepo: ( + pullsListFiles: ( owner: string, repo: string, + pullNumber: number, query?: { /** * Page number of the results to fetch. @@ -16257,14 +30154,8 @@ export class Api extends HttpClient - this.request< - { - runners: Runner[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/runners`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/files\`, method: "GET", query: query, format: "json", @@ -16272,107 +30163,165 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/runners/downloads`, + pullsCheckIfMerged: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/merge\`, method: "GET", - format: "json", ...params, }), /** - * @description Returns a token that you can pass to the `config` script. The token expires after one hour. You must authenticate using an access token with the `repo` scope to use this endpoint. #### Example using registration token Configure your self-hosted runner, replacing `TOKEN` with the registration token provided by this endpoint. ``` ./config.sh --url https://github.com/octo-org/octo-repo-artifacts --token TOKEN ``` + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. * - * @tags actions - * @name ActionsCreateRegistrationTokenForRepo - * @summary Create a registration token for a repository - * @request POST:/repos/{owner}/{repo}/actions/runners/registration-token + * @tags pulls + * @name PullsMerge + * @summary Merge a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/merge */ - actionsCreateRegistrationTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runners/registration-token`, - method: "POST", + pullsMerge: ( + owner: string, + repo: string, + pullNumber: number, + data: { + /** Extra detail to append to automatic commit message. */ + commit_message?: string; + /** Title for the automatic commit message. */ + commit_title?: string; + /** Merge method to use. Possible values are \`merge\`, \`squash\` or \`rebase\`. Default is \`merge\`. */ + merge_method?: "merge" | "squash" | "rebase"; + /** SHA that pull request head must match to allow merge. */ + sha?: string; + } | null, + params: RequestParams = {}, + ) => + this.request< + PullRequestMergeResult, + | BasicError + | { + documentation_url?: string; + message?: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/merge\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Returns a token that you can pass to remove a self-hosted runner from a repository. The token expires after one hour. You must authenticate using an access token with the `repo` scope to use this endpoint. #### Example using remove token To remove your self-hosted runner from a repository, replace TOKEN with the remove token provided by this endpoint. ``` ./config.sh remove --token TOKEN ``` + * No description * - * @tags actions - * @name ActionsCreateRemoveTokenForRepo - * @summary Create a remove token for a repository - * @request POST:/repos/{owner}/{repo}/actions/runners/remove-token + * @tags pulls + * @name PullsListRequestedReviewers + * @summary List requested reviewers for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers */ - actionsCreateRemoveTokenForRepo: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runners/remove-token`, - method: "POST", + pullsListRequestedReviewers: ( + owner: string, + repo: string, + pullNumber: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Gets a specific self-hosted runner configured in a repository. You must authenticate using an access token with the `repo` scope to use this endpoint. + * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. * - * @tags actions - * @name ActionsGetSelfHostedRunnerForRepo - * @summary Get a self-hosted runner for a repository - * @request GET:/repos/{owner}/{repo}/actions/runners/{runner_id} + * @tags pulls + * @name PullsRequestReviewers + * @summary Request reviewers for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers */ - actionsGetSelfHostedRunnerForRepo: (owner: string, repo: string, runnerId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runners/${runnerId}`, - method: "GET", + pullsRequestReviewers: ( + owner: string, + repo: string, + pullNumber: number, + data: { + /** An array of user \`login\`s that will be requested. */ + reviewers?: string[]; + /** An array of team \`slug\`s that will be requested. */ + team_reviewers?: string[]; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Forces the removal of a self-hosted runner from a repository. You can use this endpoint to completely remove the runner when the machine you were using no longer exists. You must authenticate using an access token with the `repo` scope to use this endpoint. + * No description * - * @tags actions - * @name ActionsDeleteSelfHostedRunnerFromRepo - * @summary Delete a self-hosted runner from a repository - * @request DELETE:/repos/{owner}/{repo}/actions/runners/{runner_id} + * @tags pulls + * @name PullsRemoveRequestedReviewers + * @summary Remove requested reviewers from a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers */ - actionsDeleteSelfHostedRunnerFromRepo: ( + pullsRemoveRequestedReviewers: ( owner: string, repo: string, - runnerId: number, + pullNumber: number, + data: { + /** An array of user \`login\`s that will be removed. */ + reviewers?: string[]; + /** An array of team \`slug\`s that will be removed. */ + team_reviewers?: string[]; + }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runners/${runnerId}`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/requested_reviewers\`, method: "DELETE", + body: data, + type: ContentType.Json, ...params, }), /** - * @description Lists all workflow runs for a repository. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description The list of reviews returns in chronological order. * - * @tags actions - * @name ActionsListWorkflowRunsForRepo - * @summary List workflow runs for a repository - * @request GET:/repos/{owner}/{repo}/actions/runs + * @tags pulls + * @name PullsListReviews + * @summary List reviews for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews */ - actionsListWorkflowRunsForRepo: ( + pullsListReviews: ( owner: string, repo: string, + pullNumber: number, query?: { - /** Returns someone's workflow runs. Use the login for the user who created the `push` associated with the check suite or workflow run. */ - actor?: string; - /** Returns workflow runs associated with a branch. Use the name of the branch of the `push`. */ - branch?: string; - /** Returns workflow run triggered by the event you specify. For example, `push`, `pull_request` or `issue`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ - event?: string; /** * Page number of the results to fetch. * @default 1 @@ -16383,19 +30332,11 @@ export class Api extends HttpClient - this.request< - { - total_count: number; - workflow_runs: WorkflowRun[]; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/runs`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews\`, method: "GET", query: query, format: "json", @@ -16403,111 +30344,133 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}`, - method: "GET", + pullsCreateReview: ( + owner: string, + repo: string, + pullNumber: number, + data: { + /** **Required** when using \`REQUEST_CHANGES\` or \`COMMENT\` for the \`event\` parameter. The body text of the pull request review. */ + body?: string; + /** Use the following table to specify the location, destination, and contents of the draft review comment. */ + comments?: { + /** Text of the review comment. */ + body: string; + /** @example 28 */ + line?: number; + /** The relative path to the file that necessitates a review comment. */ + path: string; + /** The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note below. */ + position?: number; + /** @example "RIGHT" */ + side?: string; + /** @example 26 */ + start_line?: number; + /** @example "LEFT" */ + start_side?: string; + }[]; + /** The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the \`position\`. Defaults to the most recent commit in the pull request when you do not specify a value. */ + commit_id?: string; + /** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. By leaving this blank, you set the review action state to \`PENDING\`, which means you will need to [submit the pull request review](https://docs.github.com/rest/reference/pulls#submit-a-review-for-a-pull-request) when you are ready. */ + event?: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Delete a specific workflow run. Anyone with write access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:write` permission to use this endpoint. + * No description * - * @tags actions - * @name ActionsDeleteWorkflowRun - * @summary Delete a workflow run - * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id} + * @tags pulls + * @name PullsGetReview + * @summary Get a review for a pull request + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} */ - actionsDeleteWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}`, - method: "DELETE", + pullsGetReview: (owner: string, repo: string, pullNumber: number, reviewId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "GET", + format: "json", ...params, }), /** - * @description Lists artifacts for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description Update the review summary comment with new text. * - * @tags actions - * @name ActionsListWorkflowRunArtifacts - * @summary List workflow run artifacts - * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/artifacts + * @tags pulls + * @name PullsUpdateReview + * @summary Update a review for a pull request + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} */ - actionsListWorkflowRunArtifacts: ( + pullsUpdateReview: ( owner: string, repo: string, - runId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + pullNumber: number, + reviewId: number, + data: { + /** The body text of the pull request review. */ + body: string; }, params: RequestParams = {}, ) => - this.request< - { - artifacts: Artifact[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/artifacts`, - method: "GET", - query: query, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "PUT", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Cancels a workflow run using its `id`. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. + * No description * - * @tags actions - * @name ActionsCancelWorkflowRun - * @summary Cancel a workflow run - * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/cancel + * @tags pulls + * @name PullsDeletePendingReview + * @summary Delete a pending review for a pull request + * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} */ - actionsCancelWorkflowRun: (owner: string, repo: string, runId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/cancel`, - method: "POST", + pullsDeletePendingReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}\`, + method: "DELETE", + format: "json", ...params, }), /** - * @description Lists jobs for a workflow run. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). + * @description List comments for a specific pull request review. * - * @tags actions - * @name ActionsListJobsForWorkflowRun - * @summary List jobs for a workflow run - * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/jobs + * @tags pulls + * @name PullsListCommentsForReview + * @summary List comments for a pull request review + * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments */ - actionsListJobsForWorkflowRun: ( + pullsListCommentsForReview: ( owner: string, repo: string, - runId: number, + pullNumber: number, + reviewId: number, query?: { - /** - * Filters jobs by their `completed_at` timestamp. Can be one of: - * \* `latest`: Returns jobs from the most recent execution of the workflow run. - * \* `all`: Returns all jobs for a workflow run, including from old executions of the workflow run. - * @default "latest" - */ - filter?: "latest" | "all"; /** * Page number of the results to fetch. * @default 1 @@ -16521,14 +30484,8 @@ export class Api extends HttpClient - this.request< - { - jobs: Job[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/jobs`, + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/comments\`, method: "GET", query: query, format: "json", @@ -16536,75 +30493,137 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/logs`, - method: "GET", + pullsDismissReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + data: { + /** @example ""APPROVE"" */ + event?: string; + /** The message for the pull request review dismissal */ + message: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/dismissals\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Deletes all logs for a workflow run. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. + * No description * - * @tags actions - * @name ActionsDeleteWorkflowRunLogs - * @summary Delete workflow run logs - * @request DELETE:/repos/{owner}/{repo}/actions/runs/{run_id}/logs + * @tags pulls + * @name PullsSubmitReview + * @summary Submit a review for a pull request + * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events */ - actionsDeleteWorkflowRunLogs: (owner: string, repo: string, runId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/logs`, - method: "DELETE", + pullsSubmitReview: ( + owner: string, + repo: string, + pullNumber: number, + reviewId: number, + data: { + /** The body text of the pull request review */ + body?: string; + /** The review action you want to perform. The review actions include: \`APPROVE\`, \`REQUEST_CHANGES\`, or \`COMMENT\`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to \`PENDING\`, which means you will need to re-submit the pull request review using a review action. */ + event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/reviews/\${reviewId}/events\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Re-runs your workflow run using its `id`. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. + * @description Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch. * - * @tags actions - * @name ActionsReRunWorkflow - * @summary Re-run a workflow - * @request POST:/repos/{owner}/{repo}/actions/runs/{run_id}/rerun + * @tags pulls + * @name PullsUpdateBranch + * @summary Update a pull request branch + * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/update-branch */ - actionsReRunWorkflow: (owner: string, repo: string, runId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/rerun`, - method: "POST", + pullsUpdateBranch: ( + owner: string, + repo: string, + pullNumber: number, + data: { + /** The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a \`422 Unprocessable Entity\` status. You can use the "[List commits](https://docs.github.com/rest/reference/repos#list-commits)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref. */ + expected_head_sha?: string; + } | null, + params: RequestParams = {}, + ) => + this.request< + { + message?: string; + url?: string; + }, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/repos/\${owner}/\${repo}/pulls/\${pullNumber}/update-branch\`, + method: "PUT", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Gets the number of billable minutes and total run time for a specific workflow run. Billable minutes only apply to workflows in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description Gets the preferred README for a repository. READMEs support [custom media types](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML. * - * @tags actions - * @name ActionsGetWorkflowRunUsage - * @summary Get workflow run usage - * @request GET:/repos/{owner}/{repo}/actions/runs/{run_id}/timing + * @tags repos + * @name ReposGetReadme + * @summary Get a repository README + * @request GET:/repos/{owner}/{repo}/readme */ - actionsGetWorkflowRunUsage: (owner: string, repo: string, runId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/runs/${runId}/timing`, + reposGetReadme: ( + owner: string, + repo: string, + query?: { + /** The name of the commit/branch/tag. Default: the repository’s default branch (usually \`master\`) */ + ref?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Lists all secrets available in a repository without revealing their encrypted values. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `secrets` repository permission to use this endpoint. + * @description This returns a list of releases, which does not include regular Git tags that have not been associated with a release. To get a list of Git tags, use the [Repository Tags API](https://docs.github.com/rest/reference/repos#list-repository-tags). Information about published releases are available to everyone. Only users with push access will receive listings for draft releases. * - * @tags actions - * @name ActionsListRepoSecrets - * @summary List repository secrets - * @request GET:/repos/{owner}/{repo}/actions/secrets + * @tags repos + * @name ReposListReleases + * @summary List releases + * @request GET:/repos/{owner}/{repo}/releases */ - actionsListRepoSecrets: ( + reposListReleases: ( owner: string, repo: string, query?: { @@ -16621,14 +30640,8 @@ export class Api extends HttpClient - this.request< - { - secrets: ActionsSecret[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/secrets`, + this.request({ + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", query: query, format: "json", @@ -16636,212 +30649,229 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/secrets/public-key`, - method: "GET", + reposCreateRelease: ( + owner: string, + repo: string, + data: { + /** Text describing the contents of the tag. */ + body?: string; + /** + * \`true\` to create a draft (unpublished) release, \`false\` to create a published one. + * @default false + */ + draft?: boolean; + /** The name of the release. */ + name?: string; + /** + * \`true\` to identify the release as a prerelease. \`false\` to identify the release as a full release. + * @default false + */ + prerelease?: boolean; + /** The name of the tag. */ + tag_name: string; + /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually \`master\`). */ + target_commitish?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Gets a single repository secret without revealing its encrypted value. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `secrets` repository permission to use this endpoint. + * @description To download the asset's binary content, set the \`Accept\` header of the request to [\`application/octet-stream\`](https://docs.github.com/rest/overview/media-types). The API will either redirect the client to the location, or stream it directly if possible. API clients should handle both a \`200\` or \`302\` response. * - * @tags actions - * @name ActionsGetRepoSecret - * @summary Get a repository secret - * @request GET:/repos/{owner}/{repo}/actions/secrets/{secret_name} + * @tags repos + * @name ReposGetReleaseAsset + * @summary Get a release asset + * @request GET:/repos/{owner}/{repo}/releases/assets/{asset_id} */ - actionsGetRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/secrets/${secretName}`, + reposGetReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => + this.request< + ReleaseAsset, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, method: "GET", format: "json", ...params, }), /** - * @description Creates or updates a repository secret with an encrypted value. Encrypt your secret using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages). You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `secrets` repository permission to use this endpoint. #### Example encrypting a secret using Node.js Encrypt your secret using the [tweetsodium](https://github.com/github/tweetsodium) library. ``` const sodium = require('tweetsodium'); const key = "base64-encoded-public-key"; const value = "plain-text-secret"; // Convert the message and key to Uint8Array's (Buffer implements that interface) const messageBytes = Buffer.from(value); const keyBytes = Buffer.from(key, 'base64'); // Encrypt using LibSodium. const encryptedBytes = sodium.seal(messageBytes, keyBytes); // Base64 the encrypted secret const encrypted = Buffer.from(encryptedBytes).toString('base64'); console.log(encrypted); ``` #### Example encrypting a secret using Python Encrypt your secret using [pynacl](https://pynacl.readthedocs.io/en/stable/public/#nacl-public-sealedbox) with Python 3. ``` from base64 import b64encode from nacl import encoding, public def encrypt(public_key: str, secret_value: str) -> str: """Encrypt a Unicode string using the public key.""" public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder()) sealed_box = public.SealedBox(public_key) encrypted = sealed_box.encrypt(secret_value.encode("utf-8")) return b64encode(encrypted).decode("utf-8") ``` #### Example encrypting a secret using C# Encrypt your secret using the [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) package. ``` var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret"); var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="); var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey); Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox)); ``` #### Example encrypting a secret using Ruby Encrypt your secret using the [rbnacl](https://github.com/RubyCrypto/rbnacl) gem. ```ruby require "rbnacl" require "base64" key = Base64.decode64("+ZYvJDZMHUfBkJdyq5Zm9SKqeuBQ4sj+6sfjlH4CgG0=") public_key = RbNaCl::PublicKey.new(key) box = RbNaCl::Boxes::Sealed.from_public_key(public_key) encrypted_secret = box.encrypt("my_secret") # Print the base64 encoded secret puts Base64.strict_encode64(encrypted_secret) ``` + * @description Users with push access to the repository can edit a release asset. * - * @tags actions - * @name ActionsCreateOrUpdateRepoSecret - * @summary Create or update a repository secret - * @request PUT:/repos/{owner}/{repo}/actions/secrets/{secret_name} + * @tags repos + * @name ReposUpdateReleaseAsset + * @summary Update a release asset + * @request PATCH:/repos/{owner}/{repo}/releases/assets/{asset_id} */ - actionsCreateOrUpdateRepoSecret: ( + reposUpdateReleaseAsset: ( owner: string, repo: string, - secretName: string, + assetId: number, data: { - /** Value for your secret, encrypted with [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) using the public key retrieved from the [Get a repository public key](https://docs.github.com/rest/reference/actions#get-a-repository-public-key) endpoint. */ - encrypted_value?: string; - /** ID of the key you used to encrypt the secret. */ - key_id?: string; + /** An alternate short description of the asset. Used in place of the filename. */ + label?: string; + /** The file name of the asset. */ + name?: string; + /** @example ""uploaded"" */ + state?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/secrets/${secretName}`, - method: "PUT", + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, + method: "PATCH", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Deletes a secret in a repository using the secret name. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `secrets` repository permission to use this endpoint. + * No description * - * @tags actions - * @name ActionsDeleteRepoSecret - * @summary Delete a repository secret - * @request DELETE:/repos/{owner}/{repo}/actions/secrets/{secret_name} + * @tags repos + * @name ReposDeleteReleaseAsset + * @summary Delete a release asset + * @request DELETE:/repos/{owner}/{repo}/releases/assets/{asset_id} */ - actionsDeleteRepoSecret: (owner: string, repo: string, secretName: string, params: RequestParams = {}) => + reposDeleteReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/actions/secrets/${secretName}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${assetId}\`, method: "DELETE", ...params, }), /** - * @description Lists the workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description View the latest published full release for the repository. The latest release is the most recent non-prerelease, non-draft release, sorted by the \`created_at\` attribute. The \`created_at\` attribute is the date of the commit used for the release, and not the date when the release was drafted or published. * - * @tags actions - * @name ActionsListRepoWorkflows - * @summary List repository workflows - * @request GET:/repos/{owner}/{repo}/actions/workflows + * @tags repos + * @name ReposGetLatestRelease + * @summary Get the latest release + * @request GET:/repos/{owner}/{repo}/releases/latest */ - actionsListRepoWorkflows: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - total_count: number; - workflows: Workflow[]; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/workflows`, + reposGetLatestRelease: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/latest\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Gets a specific workflow. You can replace `workflow_id` with the workflow file name. For example, you could use `main.yaml`. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. GitHub Apps must have the `actions:read` permission to use this endpoint. + * @description Get a published release with the specified tag. * - * @tags actions - * @name ActionsGetWorkflow - * @summary Get a workflow - * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id} + * @tags repos + * @name ReposGetReleaseByTag + * @summary Get a release by tag name + * @request GET:/repos/{owner}/{repo}/releases/tags/{tag} */ - actionsGetWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}`, + reposGetReleaseByTag: (owner: string, repo: string, tag: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/tags/\${tag}\`, method: "GET", format: "json", ...params, }), /** - * @description Disables a workflow and sets the `state` of the workflow to `disabled_manually`. You can replace `workflow_id` with the workflow file name. For example, you could use `main.yaml`. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. + * @description **Note:** This returns an \`upload_url\` key corresponding to the endpoint for uploading release assets. This key is a [hypermedia resource](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia). * - * @tags actions - * @name ActionsDisableWorkflow - * @summary Disable a workflow - * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable + * @tags repos + * @name ReposGetRelease + * @summary Get a release + * @request GET:/repos/{owner}/{repo}/releases/{release_id} */ - actionsDisableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}/disable`, - method: "PUT", + reposGetRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "GET", + format: "json", ...params, }), /** - * @description You can use this endpoint to manually trigger a GitHub Actions workflow run. You can replace `workflow_id` with the workflow file name. For example, you could use `main.yaml`. You must configure your GitHub Actions workflow to run when the [`workflow_dispatch` webhook](/developers/webhooks-and-events/webhook-events-and-payloads#workflow_dispatch) event occurs. The `inputs` are configured in the workflow file. For more information about how to configure the `workflow_dispatch` event in the workflow file, see "[Events that trigger workflows](/actions/reference/events-that-trigger-workflows#workflow_dispatch)." You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)." + * @description Users with push access to the repository can edit a release. * - * @tags actions - * @name ActionsCreateWorkflowDispatch - * @summary Create a workflow dispatch event - * @request POST:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches + * @tags repos + * @name ReposUpdateRelease + * @summary Update a release + * @request PATCH:/repos/{owner}/{repo}/releases/{release_id} */ - actionsCreateWorkflowDispatch: ( + reposUpdateRelease: ( owner: string, repo: string, - workflowId: number | string, + releaseId: number, data: { - /** Input keys and values configured in the workflow file. The maximum number of properties is 10. Any default properties configured in the workflow file will be used when `inputs` are omitted. */ - inputs?: Record; - /** The git reference for the workflow. The reference can be a branch or tag name. */ - ref: string; + /** Text describing the contents of the tag. */ + body?: string; + /** \`true\` makes the release a draft, and \`false\` publishes the release. */ + draft?: boolean; + /** The name of the release. */ + name?: string; + /** \`true\` to identify the release as a prerelease, \`false\` to identify the release as a full release. */ + prerelease?: boolean; + /** The name of the tag. */ + tag_name?: string; + /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually \`master\`). */ + target_commitish?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}/dispatches`, - method: "POST", + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "PATCH", body: data, type: ContentType.Json, + format: "json", ...params, }), /** - * @description Enables a workflow and sets the `state` of the workflow to `active`. You can replace `workflow_id` with the workflow file name. For example, you could use `main.yaml`. You must authenticate using an access token with the `repo` scope to use this endpoint. GitHub Apps must have the `actions:write` permission to use this endpoint. + * @description Users with push access to the repository can delete a release. * - * @tags actions - * @name ActionsEnableWorkflow - * @summary Enable a workflow - * @request PUT:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable + * @tags repos + * @name ReposDeleteRelease + * @summary Delete a release + * @request DELETE:/repos/{owner}/{repo}/releases/{release_id} */ - actionsEnableWorkflow: (owner: string, repo: string, workflowId: number | string, params: RequestParams = {}) => + reposDeleteRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}/enable`, - method: "PUT", + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}\`, + method: "DELETE", ...params, }), /** - * @description List all workflow runs for a workflow. You can replace `workflow_id` with the workflow file name. For example, you could use `main.yaml`. You can use parameters to narrow the list of results. For more information about using parameters, see [Parameters](https://docs.github.com/rest/overview/resources-in-the-rest-api#parameters). Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the `repo` scope. + * No description * - * @tags actions - * @name ActionsListWorkflowRuns - * @summary List workflow runs - * @request GET:/repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs + * @tags repos + * @name ReposListReleaseAssets + * @summary List release assets + * @request GET:/repos/{owner}/{repo}/releases/{release_id}/assets */ - actionsListWorkflowRuns: ( + reposListReleaseAssets: ( owner: string, repo: string, - workflowId: number | string, + releaseId: number, query?: { - /** Returns someone's workflow runs. Use the login for the user who created the `push` associated with the check suite or workflow run. */ - actor?: string; - /** Returns workflow runs associated with a branch. Use the name of the branch of the `push`. */ - branch?: string; - /** Returns workflow run triggered by the event you specify. For example, `push`, `pull_request` or `issue`. For more information, see "[Events that trigger workflows](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows)." */ - event?: string; /** * Page number of the results to fetch. * @default 1 @@ -16852,19 +30882,11 @@ export class Api extends HttpClient - this.request< - { - total_count: number; - workflow_runs: WorkflowRun[]; - }, - any - >({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}/runs`, + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}/assets\`, method: "GET", query: query, format: "json", @@ -16872,30 +30894,42 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/actions/workflows/${workflowId}/timing`, - method: "GET", + reposUploadReleaseAsset: ( + owner: string, + repo: string, + releaseId: number, + data: WebhookConfigUrl, + query?: { + label?: string; + name?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/releases/\${releaseId}/assets\`, + method: "POST", + query: query, + body: data, format: "json", ...params, }), /** - * @description Lists the [available assignees](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/) for issues in a repository. + * @description Lists all secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` read permission to use this endpoint. * - * @tags issues - * @name IssuesListAssignees - * @summary List assignees - * @request GET:/repos/{owner}/{repo}/assignees + * @tags secret-scanning + * @name SecretScanningListAlertsForRepo + * @summary List secret scanning alerts for a repository + * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts */ - issuesListAssignees: ( + secretScanningListAlertsForRepo: ( owner: string, repo: string, query?: { @@ -16909,11 +30943,20 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/assignees`, + this.request< + SecretScanningAlert[], + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts\`, method: "GET", query: query, format: "json", @@ -16921,59 +30964,73 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + secretScanningGetAlert: (owner: string, repo: string, alertNumber: AlertNumber, params: RequestParams = {}) => + this.request< + SecretScanningAlert, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts/\${alertNumber}\`, method: "GET", + format: "json", ...params, }), /** - * @description Enables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". - * - * @tags repos - * @name ReposEnableAutomatedSecurityFixes - * @summary Enable automated security fixes - * @request PUT:/repos/{owner}/{repo}/automated-security-fixes - */ - reposEnableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/automated-security-fixes`, - method: "PUT", - ...params, - }), - - /** - * @description Disables automated security fixes for a repository. The authenticated user must have admin access to the repository. For more information, see "[Configuring automated security fixes](https://help.github.com/en/articles/configuring-automated-security-fixes)". + * @description Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the \`repo\` scope or \`security_events\` scope. GitHub Apps must have the \`secret_scanning_alerts\` write permission to use this endpoint. * - * @tags repos - * @name ReposDisableAutomatedSecurityFixes - * @summary Disable automated security fixes - * @request DELETE:/repos/{owner}/{repo}/automated-security-fixes + * @tags secret-scanning + * @name SecretScanningUpdateAlert + * @summary Update a secret scanning alert + * @request PATCH:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} */ - reposDisableAutomatedSecurityFixes: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/automated-security-fixes`, - method: "DELETE", + secretScanningUpdateAlert: ( + owner: string, + repo: string, + alertNumber: AlertNumber, + data: { + /** **Required when the \`state\` is \`resolved\`.** The reason for resolving the alert. Can be one of \`false_positive\`, \`wont_fix\`, \`revoked\`, or \`used_in_tests\`. */ + resolution?: SecretScanningAlertResolution; + /** Sets the state of the secret scanning alert. Can be either \`open\` or \`resolved\`. You must provide \`resolution\` when you set the state to \`resolved\`. */ + state: SecretScanningAlertState; + }, + params: RequestParams = {}, + ) => + this.request< + SecretScanningAlert, + void | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/secret-scanning/alerts/\${alertNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Lists the people that have starred the repository. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: * - * @tags repos - * @name ReposListBranches - * @summary List branches - * @request GET:/repos/{owner}/{repo}/branches + * @tags activity + * @name ActivityListStargazersForRepo + * @summary List stargazers + * @request GET:/repos/{owner}/{repo}/stargazers */ - reposListBranches: ( + activityListStargazersForRepo: ( owner: string, repo: string, query?: { @@ -16987,13 +31044,11 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches`, + this.request({ + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", query: query, format: "json", @@ -17001,227 +31056,196 @@ export class Api extends HttpClient - this.request< - BranchWithProtection, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + reposGetCodeFrequencyStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Returns the last year of commit activity grouped by week. The \`days\` array is a group of commits per day, starting on \`Sunday\`. * * @tags repos - * @name ReposGetBranchProtection - * @summary Get branch protection - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection + * @name ReposGetCommitActivityStats + * @summary Get the last year of commit activity + * @request GET:/repos/{owner}/{repo}/stats/commit_activity */ - reposGetBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection`, + reposGetCommitActivityStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Protecting a branch requires admin or owner permissions to the repository. **Note**: Passing new arrays of `users` and `teams` replaces their previous values. **Note**: The list of users, apps, and teams in total is limited to 100 items. + * @description Returns the \`total\` number of commits authored by the contributor. In addition, the response includes a Weekly Hash (\`weeks\` array) with the following information: * \`w\` - Start of the week, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). * \`a\` - Number of additions * \`d\` - Number of deletions * \`c\` - Number of commits * * @tags repos - * @name ReposUpdateBranchProtection - * @summary Update branch protection - * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection + * @name ReposGetContributorsStats + * @summary Get all contributor commit activity + * @request GET:/repos/{owner}/{repo}/stats/contributors */ - reposUpdateBranchProtection: ( - owner: string, - repo: string, - branch: string, - data: { - /** Allows deletion of the protected branch by anyone with write access to the repository. Set to `false` to prevent deletion of the protected branch. Default: `false`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation. */ - allow_deletions?: boolean; - /** Permits force pushes to the protected branch by anyone with write access to the repository. Set to `true` to allow force pushes. Set to `false` or `null` to block force pushes. Default: `false`. For more information, see "[Enabling force pushes to a protected branch](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)" in the GitHub Help documentation." */ - allow_force_pushes?: boolean | null; - /** Enforce all configured restrictions for administrators. Set to `true` to enforce required status checks for repository administrators. Set to `null` to disable. */ - enforce_admins: boolean | null; - /** Enforces a linear commit Git history, which prevents anyone from pushing merge commits to a branch. Set to `true` to enforce a linear commit history. Set to `false` to disable a linear commit Git history. Your repository must allow squash merging or rebase merging before you can enable a linear commit history. Default: `false`. For more information, see "[Requiring a linear commit history](https://help.github.com/github/administering-a-repository/requiring-a-linear-commit-history)" in the GitHub Help documentation. */ - required_linear_history?: boolean; - /** Require at least one approving review on a pull request, before merging. Set to `null` to disable. */ - required_pull_request_reviews: { - /** Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ - dismiss_stale_reviews?: boolean; - /** Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ - dismissal_restrictions?: { - /** The list of team `slug`s with dismissal access */ - teams?: string[]; - /** The list of user `login`s with dismissal access */ - users?: string[]; - }; - /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) review them. */ - require_code_owner_reviews?: boolean; - /** Specify the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ - required_approving_review_count?: number; - } | null; - /** Require status checks to pass before merging. Set to `null` to disable. */ - required_status_checks: { - /** The list of status checks to require in order to merge into this branch */ - contexts: string[]; - /** Require branches to be up to date before merging. */ - strict: boolean; - } | null; - /** Restrict who can push to the protected branch. User, app, and team `restrictions` are only available for organization-owned repositories. Set to `null` to disable. */ - restrictions: { - /** The list of app `slug`s with push access */ - apps?: string[]; - /** The list of team `slug`s with push access */ - teams: string[]; - /** The list of user `login`s with push access */ - users: string[]; - } | null; - }, - params: RequestParams = {}, - ) => - this.request< - ProtectedBranch, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationErrorSimple - >({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection`, - method: "PUT", - body: data, - type: ContentType.Json, + reposGetContributorsStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, + method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Returns the total commit counts for the \`owner\` and total commit counts in \`all\`. \`all\` is everyone combined, including the \`owner\` in the last 52 weeks. If you'd like to get the commit counts for non-owners, you can subtract \`owner\` from \`all\`. The array order is oldest week (index 0) to most recent week. * * @tags repos - * @name ReposDeleteBranchProtection - * @summary Delete branch protection - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection - */ - reposDeleteBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection`, - method: "DELETE", + * @name ReposGetParticipationStats + * @summary Get the weekly commit count + * @request GET:/repos/{owner}/{repo}/stats/participation + */ + reposGetParticipationStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/participation\`, + method: "GET", + format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Each array contains the day number, hour number, and number of commits: * \`0-6\`: Sunday - Saturday * \`0-23\`: Hour of day * Number of commits For example, \`[2, 14, 25]\` indicates that there were 25 total commits, during the 2:00pm hour on Tuesdays. All times are based on the time zone of individual commits. * * @tags repos - * @name ReposGetAdminBranchProtection - * @summary Get admin branch protection - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + * @name ReposGetPunchCardStats + * @summary Get the hourly commit count for each day + * @request GET:/repos/{owner}/{repo}/stats/punch_card */ - reposGetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/enforce_admins`, + reposGetPunchCardStats: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Adding admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * @description Users with push access in a repository can create commit statuses for a given SHA. Note: there is a limit of 1000 statuses per \`sha\` and \`context\` within a repository. Attempts to create more than 1000 statuses will result in a validation error. * * @tags repos - * @name ReposSetAdminBranchProtection - * @summary Set admin branch protection - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + * @name ReposCreateCommitStatus + * @summary Create a commit status + * @request POST:/repos/{owner}/{repo}/statuses/{sha} */ - reposSetAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/enforce_admins`, + reposCreateCommitStatus: ( + owner: string, + repo: string, + sha: string, + data: { + /** + * A string label to differentiate this status from the status of other systems. This field is case-insensitive. + * @default "default" + */ + context?: string; + /** A short description of the status. */ + description?: string; + /** The state of the status. Can be one of \`error\`, \`failure\`, \`pending\`, or \`success\`. */ + state: "error" | "failure" | "pending" | "success"; + /** + * The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status. + * For example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA: + * \`http://ci.example.com/user/repo/build/sha\` + */ + target_url?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/statuses/\${sha}\`, method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removing admin enforcement requires admin or owner permissions to the repository and branch protection to be enabled. + * @description Lists the people watching the specified repository. * - * @tags repos - * @name ReposDeleteAdminBranchProtection - * @summary Delete admin branch protection - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins + * @tags activity + * @name ActivityListWatchersForRepo + * @summary List watchers + * @request GET:/repos/{owner}/{repo}/subscribers */ - reposDeleteAdminBranchProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/enforce_admins`, - method: "DELETE", + activityListWatchersForRepo: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscribers\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * No description * - * @tags repos - * @name ReposGetPullRequestReviewProtection - * @summary Get pull request review protection - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + * @tags activity + * @name ActivityGetRepoSubscription + * @summary Get a repository subscription + * @request GET:/repos/{owner}/{repo}/subscription */ - reposGetPullRequestReviewProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_pull_request_reviews`, + activityGetRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating pull request review enforcement requires admin or owner permissions to the repository and branch protection to be enabled. **Note**: Passing new arrays of `users` and `teams` replaces their previous values. + * @description If you would like to watch a repository, set \`subscribed\` to \`true\`. If you would like to ignore notifications made within a repository, set \`ignored\` to \`true\`. If you would like to stop watching a repository, [delete the repository's subscription](https://docs.github.com/rest/reference/activity#delete-a-repository-subscription) completely. * - * @tags repos - * @name ReposUpdatePullRequestReviewProtection - * @summary Update pull request review protection - * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews + * @tags activity + * @name ActivitySetRepoSubscription + * @summary Set a repository subscription + * @request PUT:/repos/{owner}/{repo}/subscription */ - reposUpdatePullRequestReviewProtection: ( + activitySetRepoSubscription: ( owner: string, repo: string, - branch: string, data: { - /** Set to `true` if you want to automatically dismiss approving reviews when someone pushes a new commit. */ - dismiss_stale_reviews?: boolean; - /** Specify which users and teams can dismiss pull request reviews. Pass an empty `dismissal_restrictions` object to disable. User and team `dismissal_restrictions` are only available for organization-owned repositories. Omit this parameter for personal repositories. */ - dismissal_restrictions?: { - /** The list of team `slug`s with dismissal access */ - teams?: string[]; - /** The list of user `login`s with dismissal access */ - users?: string[]; - }; - /** Blocks merging pull requests until [code owners](https://help.github.com/articles/about-code-owners/) have reviewed. */ - require_code_owner_reviews?: boolean; - /** Specifies the number of reviewers required to approve pull requests. Use a number between 1 and 6. */ - required_approving_review_count?: number; + /** Determines if all notifications should be blocked from this repository. */ + ignored?: boolean; + /** Determines if notifications should be received from this repository. */ + subscribed?: boolean; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_pull_request_reviews`, - method: "PATCH", + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -17229,106 +31253,152 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_pull_request_reviews`, + activityDeleteRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to check whether a branch requires signed commits. An enabled status of `true` indicates you must sign commits on this branch. For more information, see [Signing commits with GPG](https://help.github.com/articles/signing-commits-with-gpg) in GitHub Help. **Note**: You must enable branch protection to require signed commits. + * No description * * @tags repos - * @name ReposGetCommitSignatureProtection - * @summary Get commit signature protection - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + * @name ReposListTags + * @summary List repository tags + * @request GET:/repos/{owner}/{repo}/tags */ - reposGetCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_signatures`, + reposListTags: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to require signed commits on a branch. You must enable branch protection to require signed commits. + * @description Gets a redirect URL to download a tar archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. * * @tags repos - * @name ReposCreateCommitSignatureProtection - * @summary Create commit signature protection - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + * @name ReposDownloadTarballArchive + * @summary Download a repository archive (tar) + * @request GET:/repos/{owner}/{repo}/tarball/{ref} */ - reposCreateCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_signatures`, - method: "POST", - format: "json", + reposDownloadTarballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/tarball/\${ref}\`, + method: "GET", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. When authenticated with admin or owner permissions to the repository, you can use this endpoint to disable required signed commits on a branch. You must enable branch protection to require signed commits. + * No description * * @tags repos - * @name ReposDeleteCommitSignatureProtection - * @summary Delete commit signature protection - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures + * @name ReposListTeams + * @summary List repository teams + * @request GET:/repos/{owner}/{repo}/teams */ - reposDeleteCommitSignatureProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_signatures`, - method: "DELETE", + reposListTeams: ( + owner: string, + repo: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/teams\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * No description * * @tags repos - * @name ReposGetStatusChecksProtection - * @summary Get status checks protection - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + * @name ReposGetAllTopics + * @summary Get all repository topics + * @request GET:/repos/{owner}/{repo}/topics */ - reposGetStatusChecksProtection: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks`, + reposGetAllTopics: (owner: string, repo: string, params: RequestParams = {}) => + this.request< + Topic, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/repos/\${owner}/\${repo}/topics\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Updating required status checks requires admin or owner permissions to the repository and branch protection to be enabled. + * No description * * @tags repos - * @name ReposUpdateStatusCheckProtection - * @summary Update status check protection - * @request PATCH:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks + * @name ReposReplaceAllTopics + * @summary Replace all repository topics + * @request PUT:/repos/{owner}/{repo}/topics */ - reposUpdateStatusCheckProtection: ( + reposReplaceAllTopics: ( owner: string, repo: string, - branch: string, data: { - /** The list of status checks to require in order to merge into this branch */ - contexts?: string[]; - /** Require branches to be up to date before merging. */ - strict?: boolean; + /** An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (\`[]\`) to clear all topics from the repository. **Note:** Topic \`names\` cannot contain uppercase letters. */ + names: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks`, - method: "PATCH", + this.request< + Topic, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/repos/\${owner}/\${repo}/topics\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -17336,111 +31406,115 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks`, - method: "DELETE", + reposGetClones: ( + owner: string, + repo: string, + query?: { + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: "day" | "week"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/clones\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Get the top 10 popular contents over the last 14 days. * * @tags repos - * @name ReposGetAllStatusCheckContexts - * @summary Get all status check contexts - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + * @name ReposGetTopPaths + * @summary Get top referral paths + * @request GET:/repos/{owner}/{repo}/traffic/popular/paths */ - reposGetAllStatusCheckContexts: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks/contexts`, + reposGetTopPaths: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/popular/paths\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Get the top 10 referrers over the last 14 days. * * @tags repos - * @name ReposAddStatusCheckContexts - * @summary Add status check contexts - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + * @name ReposGetTopReferrers + * @summary Get top referral sources + * @request GET:/repos/{owner}/{repo}/traffic/popular/referrers */ - reposAddStatusCheckContexts: ( - owner: string, - repo: string, - branch: string, - data: { - /** contexts parameter */ - contexts: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks/contexts`, - method: "POST", - body: data, - type: ContentType.Json, + reposGetTopReferrers: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/popular/referrers\`, + method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Get the total number of views and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. * * @tags repos - * @name ReposSetStatusCheckContexts - * @summary Set status check contexts - * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + * @name ReposGetViews + * @summary Get page views + * @request GET:/repos/{owner}/{repo}/traffic/views */ - reposSetStatusCheckContexts: ( + reposGetViews: ( owner: string, repo: string, - branch: string, - data: { - /** contexts parameter */ - contexts: string[]; + query?: { + /** + * Must be one of: \`day\`, \`week\`. + * @default "day" + */ + per?: "day" | "week"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks/contexts`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repos/\${owner}/\${repo}/traffic/views\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description A transfer request will need to be accepted by the new owner when transferring a personal repository to another user. The response will contain the original \`owner\`, and the transfer will continue asynchronously. For more details on the requirements to transfer personal and organization-owned repositories, see [about repository transfers](https://help.github.com/articles/about-repository-transfers/). * * @tags repos - * @name ReposRemoveStatusCheckContexts - * @summary Remove status check contexts - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts + * @name ReposTransfer + * @summary Transfer a repository + * @request POST:/repos/{owner}/{repo}/transfer */ - reposRemoveStatusCheckContexts: ( + reposTransfer: ( owner: string, repo: string, - branch: string, data: { - /** contexts parameter */ - contexts: string[]; + /** The username or organization name the repository will be transferred to. */ + new_owner: string; + /** ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories. */ + team_ids?: number[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks/contexts`, - method: "DELETE", + this.request({ + path: \`/repos/\${owner}/\${repo}/transfer\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -17448,132 +31522,181 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions`, + reposCheckVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, method: "GET", - format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Disables the ability to restrict who can push to this branch. + * @description Enables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". * * @tags repos - * @name ReposDeleteAccessRestrictions - * @summary Delete access restrictions - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions + * @name ReposEnableVulnerabilityAlerts + * @summary Enable vulnerability alerts + * @request PUT:/repos/{owner}/{repo}/vulnerability-alerts */ - reposDeleteAccessRestrictions: (owner: string, repo: string, branch: string, params: RequestParams = {}) => + reposEnableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, + method: "PUT", + ...params, + }), + + /** + * @description Disables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * + * @tags repos + * @name ReposDisableVulnerabilityAlerts + * @summary Disable vulnerability alerts + * @request DELETE:/repos/{owner}/{repo}/vulnerability-alerts + */ + reposDisableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions`, + path: \`/repos/\${owner}/\${repo}/vulnerability-alerts\`, method: "DELETE", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the GitHub Apps that have push access to this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch. + * @description Gets a redirect URL to download a zip archive for a repository. If you omit \`:ref\`, the repository’s default branch (usually \`master\`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the \`Location\` header to make a second \`GET\` request. **Note**: For private repositories, these links are temporary and expire after five minutes. * * @tags repos - * @name ReposGetAppsWithAccessToProtectedBranch - * @summary Get apps with access to the protected branch - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + * @name ReposDownloadZipballArchive + * @summary Download a repository archive (zip) + * @request GET:/repos/{owner}/{repo}/zipball/{ref} */ - reposGetAppsWithAccessToProtectedBranch: ( - owner: string, - repo: string, - branch: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/apps`, + reposDownloadZipballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => + this.request({ + path: \`/repos/\${owner}/\${repo}/zipball/\${ref}\`, method: "GET", - format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified apps push access for this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description Creates a new repository using a repository template. Use the \`template_owner\` and \`template_repo\` route parameters to specify the repository to use as the template. The authenticated user must own or be a member of an organization that owns the repository. To check if a repository is available to use as a template, get the repository's information using the [Get a repository](https://docs.github.com/rest/reference/repos#get-a-repository) endpoint and check that the \`is_template\` key is \`true\`. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * \`public_repo\` scope or \`repo\` scope to create a public repository * \`repo\` scope to create a private repository * * @tags repos - * @name ReposAddAppAccessRestrictions - * @summary Add app access restrictions - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + * @name ReposCreateUsingTemplate + * @summary Create a repository using a template + * @request POST:/repos/{template_owner}/{template_repo}/generate */ - reposAddAppAccessRestrictions: ( - owner: string, - repo: string, - branch: string, + reposCreateUsingTemplate: ( + templateOwner: string, + templateRepo: string, data: { - /** apps parameter */ - apps: string[]; + /** A short description of the new repository. */ + description?: string; + /** + * Set to \`true\` to include the directory structure and files from all branches in the template repository, and not just the default branch. Default: \`false\`. + * @default false + */ + include_all_branches?: boolean; + /** The name of the new repository. */ + name: string; + /** The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization. */ + owner?: string; + /** + * Either \`true\` to create a new private repository or \`false\` to create a new public one. + * @default false + */ + private?: boolean; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/apps`, + this.request({ + path: \`/repos/\${templateOwner}/\${templateRepo}/generate\`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), - + }; + repositories = { /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Replaces the list of apps that have push access to this branch. This removes all apps that previously had push access and grants push access to the new list of apps. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description Lists all public repositories in the order that they were created. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of repositories. * * @tags repos - * @name ReposSetAppAccessRestrictions - * @summary Set app access restrictions - * @request PUT:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + * @name ReposListPublic + * @summary List public repositories + * @request GET:/repositories */ - reposSetAppAccessRestrictions: ( - owner: string, - repo: string, - branch: string, - data: { - /** apps parameter */ - apps: string[]; + reposListPublic: ( + query?: { + /** A repository ID. Only return repositories with an ID greater than this ID. */ + since?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/apps`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/repositories\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + }; + scim = { + /** + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedGroupsEnterprise + * @summary List provisioned SCIM groups for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Groups + */ + enterpriseAdminListProvisionedGroupsEnterprise: ( + enterprise: string, + query?: { + /** Used for pagination: the number of results to return. */ + count?: number; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of an app to push to this branch. Only installed GitHub Apps with `write` access to the `contents` permission can be added as authorized actors on a protected branch. | Type | Description | | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `array` | The GitHub Apps that have push access to this branch. Use the app's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision an enterprise group, and invite users to the group. This sends invitation emails to the email address of the invited users to join the GitHub organization that the SCIM group corresponds to. * - * @tags repos - * @name ReposRemoveAppAccessRestrictions - * @summary Remove app access restrictions - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseGroup + * @summary Provision a SCIM enterprise group and invite users + * @request POST:/scim/v2/enterprises/{enterprise}/Groups */ - reposRemoveAppAccessRestrictions: ( - owner: string, - repo: string, - branch: string, + enterpriseAdminProvisionAndInviteEnterpriseGroup: ( + enterprise: string, data: { - /** apps parameter */ - apps: string[]; + /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ + displayName: string; + members?: { + /** The SCIM user ID for a user. */ + value: string; + }[]; + /** The SCIM schema URIs. */ + schemas: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/apps`, - method: "DELETE", + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -17581,47 +31704,51 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/teams`, + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified teams push access for this branch. You can also give push access to child teams. | Type | Description | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `array` | The teams that can have push access. Use the team's `slug`. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned group’s information. You must provide all the information required for the group as if you were provisioning it for the first time. Any existing group information that you don't provide will be removed, including group membership. If you want to only update a specific attribute, use the [Update an attribute for a SCIM enterprise group](#update-an-attribute-for-a-scim-enterprise-group) endpoint instead. * - * @tags repos - * @name ReposAddTeamAccessRestrictions - * @summary Add team access restrictions - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseGroup + * @summary Set SCIM information for a provisioned enterprise group + * @request PUT:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} */ - reposAddTeamAccessRestrictions: ( - owner: string, - repo: string, - branch: string, + enterpriseAdminSetInformationForProvisionedEnterpriseGroup: ( + enterprise: string, + scimGroupId: string, data: { - /** teams parameter */ - teams: string[]; + /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ + displayName: string; + members?: { + /** The SCIM user ID for a user. */ + value: string; + }[]; + /** The SCIM schema URIs. */ + schemas: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/teams`, - method: "POST", + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -17629,26 +31756,27 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/teams`, - method: "PUT", + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -17656,73 +31784,89 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/teams`, + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Groups/\${scimGroupId}\`, method: "DELETE", - body: data, - type: ContentType.Json, - format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists the people who have push access to this branch. + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Retrieves a paginated list of all provisioned enterprise members, including pending invitations. When a user with a SAML-provisioned external identity leaves (or is removed from) an enterprise, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an enterprise, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub enterprise. 1. The user attempts to access the GitHub enterprise and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub enterprise, and the external identity \`null\` entry remains in place. * - * @tags repos - * @name ReposGetUsersWithAccessToProtectedBranch - * @summary Get users with access to the protected branch - * @request GET:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + * @tags enterprise-admin + * @name EnterpriseAdminListProvisionedIdentitiesEnterprise + * @summary List SCIM provisioned identities for an enterprise + * @request GET:/scim/v2/enterprises/{enterprise}/Users */ - reposGetUsersWithAccessToProtectedBranch: ( - owner: string, - repo: string, - branch: string, + enterpriseAdminListProvisionedIdentitiesEnterprise: ( + enterprise: string, + query?: { + /** Used for pagination: the number of results to return. */ + count?: number; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; + }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/users`, + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Grants the specified people push access for this branch. | Type | Description | | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | `array` | Usernames for people who can have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision enterprise membership for a user, and send organization invitation emails to the email address. You can optionally include the groups a user will be invited to join. If you do not provide a list of \`groups\`, the user is provisioned for the enterprise, but no organization invitation emails will be sent. * - * @tags repos - * @name ReposAddUserAccessRestrictions - * @summary Add user access restrictions - * @request POST:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + * @tags enterprise-admin + * @name EnterpriseAdminProvisionAndInviteEnterpriseUser + * @summary Provision and invite a SCIM enterprise user + * @request POST:/scim/v2/enterprises/{enterprise}/Users */ - reposAddUserAccessRestrictions: ( - owner: string, - repo: string, - branch: string, + enterpriseAdminProvisionAndInviteEnterpriseUser: ( + enterprise: string, data: { - /** users parameter */ - users: string[]; + /** List of user emails. */ + emails: { + /** Whether this email address is the primary address. */ + primary: boolean; + /** The type of email address. */ + type: string; + /** The email address. */ + value: string; + }[]; + /** List of SCIM group IDs the user is a member of. */ + groups?: { + value?: string; + }[]; + name: { + /** The last name of the user. */ + familyName: string; + /** The first name of the user. */ + givenName: string; + }; + /** The SCIM schema URIs. */ + schemas: string[]; + /** The username for the user. */ + userName: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/users`, + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users\`, method: "POST", body: data, type: ContentType.Json, @@ -17731,53 +31875,66 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/users`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "GET", format: "json", ...params, }), /** - * @description Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Removes the ability of a user to push to this branch. | Type | Description | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `array` | Usernames of the people who should no longer have push access. **Note**: The list of users, apps, and teams in total is limited to 100 items. | + * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](#update-an-attribute-for-an-enterprise-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the enterprise, deletes the external identity, and deletes the associated \`{scim_user_id}\`. * - * @tags repos - * @name ReposRemoveUserAccessRestrictions - * @summary Remove user access restrictions - * @request DELETE:/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users + * @tags enterprise-admin + * @name EnterpriseAdminSetInformationForProvisionedEnterpriseUser + * @summary Set SCIM information for a provisioned enterprise user + * @request PUT:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} */ - reposRemoveUserAccessRestrictions: ( - owner: string, - repo: string, - branch: string, + enterpriseAdminSetInformationForProvisionedEnterpriseUser: ( + enterprise: string, + scimUserId: string, data: { - /** users parameter */ - users: string[]; + /** List of user emails. */ + emails: { + /** Whether this email address is the primary address. */ + primary: boolean; + /** The type of email address. */ + type: string; + /** The email address. */ + value: string; + }[]; + /** List of SCIM group IDs the user is a member of. */ + groups?: { + value?: string; + }[]; + name: { + /** The last name of the user. */ + familyName: string; + /** The first name of the user. */ + givenName: string; + }; + /** The SCIM schema URIs. */ + schemas: string[]; + /** The username for the user. */ + userName: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/protection/restrictions/users`, - method: "DELETE", + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -17785,150 +31942,27 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}/rename`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array. Creates a new check run for a specific commit in a repository. Your GitHub App must have the `checks:write` permission to create check runs. In a check suite, GitHub limits the number of check runs with the same name to 1000. Once these check runs exceed 1000, GitHub will start to automatically delete older check runs. - * - * @tags checks - * @name ChecksCreate - * @summary Create a check run - * @request POST:/repos/{owner}/{repo}/check-runs - */ - checksCreate: ( - owner: string, - repo: string, - data: ( - | { - status?: "completed"; - [key: string]: any; - } - | { - status?: "queued" | "in_progress"; - [key: string]: any; - } - ) & { - /** - * Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [`check_run.requested_action` webhook](https://docs.github.com/webhooks/event-payloads/#check_run) to your app. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." - * @maxItems 3 - */ - actions?: { - /** - * A short explanation of what this action would do. The maximum size is 40 characters. - * @maxLength 40 - */ - description: string; - /** - * A reference for the action on the integrator's system. The maximum size is 20 characters. - * @maxLength 20 - */ - identifier: string; - /** - * The text to be displayed on a button in the web UI. The maximum size is 20 characters. - * @maxLength 20 - */ - label: string; - }[]; - /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - completed_at?: string; - /** - * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `skipped`, `timed_out`, or `action_required`. When the conclusion is `action_required`, additional details should be provided on the site specified by `details_url`. - * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`. Only GitHub can change a check run conclusion to `stale`. - */ - conclusion?: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required"; - /** The URL of the integrator's site that has the full details of the check. If the integrator does not provide this, then the homepage of the GitHub app is used. */ - details_url?: string; - /** A reference for the run on the integrator's system. */ - external_id?: string; - /** The SHA of the commit. */ - head_sha: string; - /** The name of the check. For example, "code-coverage". */ - name: string; - /** Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://docs.github.com/rest/reference/checks#output-object) description. */ - output?: { - /** - * Adds information from your analysis to specific lines of code. Annotations are visible on GitHub in the **Checks** and **Files changed** tab of the pull request. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about how you can view annotations on GitHub, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [`annotations` object](https://docs.github.com/rest/reference/checks#annotations-object) description for details about how to use this parameter. - * @maxItems 50 - */ - annotations?: { - /** The level of the annotation. Can be one of `notice`, `warning`, or `failure`. */ - annotation_level: "notice" | "warning" | "failure"; - /** The end column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values. */ - end_column?: number; - /** The end line of the annotation. */ - end_line: number; - /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ - message: string; - /** The path of the file to add an annotation to. For example, `assets/css/main.css`. */ - path: string; - /** Details about this annotation. The maximum size is 64 KB. */ - raw_details?: string; - /** The start column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values. */ - start_column?: number; - /** The start line of the annotation. */ - start_line: number; - /** The title that represents the annotation. The maximum size is 255 characters. */ - title?: string; - }[]; - /** Adds images to the output displayed in the GitHub pull request UI. See the [`images` object](https://docs.github.com/rest/reference/checks#images-object) description for details. */ - images?: { - /** The alternative text for the image. */ - alt: string; - /** A short image description. */ - caption?: string; - /** The full URL of the image. */ - image_url: string; - }[]; - /** - * The summary of the check run. This parameter supports Markdown. - * @maxLength 65535 - */ - summary: string; - /** - * The details of the check run. This parameter supports Markdown. - * @maxLength 65535 - */ - text?: string; - /** The title of the check run. */ - title: string; - }; - /** The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - started_at?: string; - /** - * The current status. Can be one of `queued`, `in_progress`, or `completed`. - * @default "queued" - */ - status?: "queued" | "in_progress" | "completed"; + /** Array of [SCIM operations](https://tools.ietf.org/html/rfc7644#section-3.5.2). */ + Operations: object[]; + /** The SCIM schema URIs. */ + schemas: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/check-runs`, - method: "POST", + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -17936,195 +31970,173 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/check-runs/${checkRunId}`, - method: "GET", - format: "json", + enterpriseAdminDeleteUserFromEnterprise: (enterprise: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/enterprises/\${enterprise}/Users/\${scimUserId}\`, + method: "DELETE", ...params, }), /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array. Updates a check run for a specific commit in a repository. Your GitHub App must have the `checks:write` permission to edit check runs. + * @description Retrieves a paginated list of all provisioned organization members, including pending invitations. If you provide the \`filter\` parameter, the resources for all matching provisions members are returned. When a user with a SAML-provisioned external identity leaves (or is removed from) an organization, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an organization, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a \`null\` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub organization. 1. The user attempts to access the GitHub organization and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the \`null\` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub organization, and the external identity \`null\` entry remains in place. * - * @tags checks - * @name ChecksUpdate - * @summary Update a check run - * @request PATCH:/repos/{owner}/{repo}/check-runs/{check_run_id} + * @tags scim + * @name ScimListProvisionedIdentities + * @summary List SCIM provisioned identities + * @request GET:/scim/v2/organizations/{org}/Users */ - checksUpdate: ( - owner: string, - repo: string, - checkRunId: number, - data: ( - | { - status?: "completed"; - [key: string]: any; - } - | { - status?: "queued" | "in_progress"; - [key: string]: any; - } - ) & { - /** - * Possible further actions the integrator can perform, which a user may trigger. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. See the [`actions` object](https://docs.github.com/rest/reference/checks#actions-object) description. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/reference/checks#check-runs-and-requested-actions)." - * @maxItems 3 - */ - actions?: { - /** - * A short explanation of what this action would do. The maximum size is 40 characters. - * @maxLength 40 - */ - description: string; - /** - * A reference for the action on the integrator's system. The maximum size is 20 characters. - * @maxLength 20 - */ - identifier: string; - /** - * The text to be displayed on a button in the web UI. The maximum size is 20 characters. - * @maxLength 20 - */ - label: string; - }[]; - /** The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - completed_at?: string; + scimListProvisionedIdentities: ( + org: string, + query?: { + /** Used for pagination: the number of results to return. */ + count?: number; /** - * **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. Can be one of `success`, `failure`, `neutral`, `cancelled`, `skipped`, `timed_out`, or `action_required`. - * **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`. Only GitHub can change a check run conclusion to `stale`. + * Filters results using the equals query parameter operator (\`eq\`). You can filter results that are equal to \`id\`, \`userName\`, \`emails\`, and \`external_id\`. For example, to search for an identity with the \`userName\` Octocat, you would use this query: + * + * \`?filter=userName%20eq%20\\"Octocat\\"\`. + * + * To filter results for the identity with the email \`octocat@github.com\`, you would use this query: + * + * \`?filter=emails%20eq%20\\"octocat@github.com\\"\`. */ - conclusion?: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required"; - /** The URL of the integrator's site that has the full details of the check. */ - details_url?: string; - /** A reference for the run on the integrator's system. */ - external_id?: string; - /** The name of the check. For example, "code-coverage". */ - name?: string; - /** Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. See the [`output` object](https://docs.github.com/rest/reference/checks#output-object-1) description. */ - output?: { - /** - * Adds information from your analysis to specific lines of code. Annotations are visible in GitHub's pull request UI. Annotations are visible in GitHub's pull request UI. The Checks API limits the number of annotations to a maximum of 50 per API request. To create more than 50 annotations, you have to make multiple requests to the [Update a check run](https://docs.github.com/rest/reference/checks#update-a-check-run) endpoint. Each time you update the check run, annotations are appended to the list of annotations that already exist for the check run. For details about annotations in the UI, see "[About status checks](https://help.github.com/articles/about-status-checks#checks)". See the [`annotations` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. - * @maxItems 50 - */ - annotations?: { - /** The level of the annotation. Can be one of `notice`, `warning`, or `failure`. */ - annotation_level: "notice" | "warning" | "failure"; - /** The end column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values. */ - end_column?: number; - /** The end line of the annotation. */ - end_line: number; - /** A short description of the feedback for these lines of code. The maximum size is 64 KB. */ - message: string; - /** The path of the file to add an annotation to. For example, `assets/css/main.css`. */ - path: string; - /** Details about this annotation. The maximum size is 64 KB. */ - raw_details?: string; - /** The start column of the annotation. Annotations only support `start_column` and `end_column` on the same line. Omit this parameter if `start_line` and `end_line` have different values. */ - start_column?: number; - /** The start line of the annotation. */ - start_line: number; - /** The title that represents the annotation. The maximum size is 255 characters. */ - title?: string; - }[]; - /** Adds images to the output displayed in the GitHub pull request UI. See the [`images` object](https://docs.github.com/rest/reference/checks#annotations-object-1) description for details. */ - images?: { - /** The alternative text for the image. */ - alt: string; - /** A short image description. */ - caption?: string; - /** The full URL of the image. */ - image_url: string; - }[]; - /** - * Can contain Markdown. - * @maxLength 65535 - */ - summary: string; - /** - * Can contain Markdown. - * @maxLength 65535 - */ - text?: string; - /** **Required**. */ - title?: string; - }; - /** This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - started_at?: string; - /** The current status. Can be one of `queued`, `in_progress`, or `completed`. */ - status?: "queued" | "in_progress" | "completed"; + filter?: string; + /** Used for pagination: the index of the first result to return. */ + startIndex?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/check-runs/${checkRunId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/scim/v2/organizations/\${org}/Users\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Lists annotations for a check run using the annotation `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get annotations for a check run. OAuth Apps and authenticated users must have the `repo` scope to get annotations for a check run in a private repository. + * @description Provision organization membership for a user, and send an activation email to the email address. * - * @tags checks - * @name ChecksListAnnotations - * @summary List check run annotations - * @request GET:/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations + * @tags scim + * @name ScimProvisionAndInviteUser + * @summary Provision and invite a SCIM user + * @request POST:/scim/v2/organizations/{org}/Users */ - checksListAnnotations: ( - owner: string, - repo: string, - checkRunId: number, - query?: { + scimProvisionAndInviteUser: ( + org: string, + data: { + active?: boolean; /** - * Page number of the results to fetch. - * @default 1 + * The name of the user, suitable for display to end-users + * @example "Jon Doe" */ - page?: number; + displayName?: string; /** - * Results per page (max 100) - * @default 30 + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] */ - per_page?: number; + emails: { + primary?: boolean; + type?: string; + value: string; + }[]; + externalId?: string; + groups?: string[]; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string; + formatted?: string; + givenName: string; + }; + schemas?: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/check-runs/${checkRunId}/annotations`, + this.request({ + path: \`/scim/v2/organizations/\${org}/Users\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags scim + * @name ScimGetProvisioningInformationForUser + * @summary Get SCIM provisioning information for a user + * @request GET:/scim/v2/organizations/{org}/Users/{scim_user_id} + */ + scimGetProvisioningInformationForUser: (org: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array and a `null` value for `head_branch`. By default, check suites are automatically created when you create a [check run](https://docs.github.com/rest/reference/checks#check-runs). You only need to use this endpoint for manually creating check suites when you've disabled automatic creation using "[Update repository preferences for check suites](https://docs.github.com/rest/reference/checks#update-repository-preferences-for-check-suites)". Your GitHub App must have the `checks:write` permission to create check suites. + * @description Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](https://docs.github.com/rest/reference/scim#update-an-attribute-for-a-scim-user) endpoint instead. You must at least provide the required values for the user: \`userName\`, \`name\`, and \`emails\`. **Warning:** Setting \`active: false\` removes the user from the organization, deletes the external identity, and deletes the associated \`{scim_user_id}\`. * - * @tags checks - * @name ChecksCreateSuite - * @summary Create a check suite - * @request POST:/repos/{owner}/{repo}/check-suites + * @tags scim + * @name ScimSetInformationForProvisionedUser + * @summary Update a provisioned organization membership + * @request PUT:/scim/v2/organizations/{org}/Users/{scim_user_id} */ - checksCreateSuite: ( - owner: string, - repo: string, + scimSetInformationForProvisionedUser: ( + org: string, + scimUserId: string, data: { - /** The sha of the head commit. */ - head_sha: string; + active?: boolean; + /** + * The name of the user, suitable for display to end-users + * @example "Jon Doe" + */ + displayName?: string; + /** + * user emails + * @minItems 1 + * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] + */ + emails: { + primary?: boolean; + type?: string; + value: string; + }[]; + externalId?: string; + groups?: string[]; + /** @example {"givenName":"Jane","familyName":"User"} */ + name: { + familyName: string; + formatted?: string; + givenName: string; + }; + schemas?: string[]; + /** + * Configured by the admin. Could be an email, login, or username + * @example "someone@example.com" + */ + userName: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/check-suites`, - method: "POST", + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -18132,32 +32144,45 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/check-suites/preferences`, + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -18166,41 +32191,36 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/check-suites/${checkSuiteId}`, - method: "GET", - format: "json", + scimDeleteUserFromOrg: (org: string, scimUserId: string, params: RequestParams = {}) => + this.request({ + path: \`/scim/v2/organizations/\${org}/Users/\${scimUserId}\`, + method: "DELETE", ...params, }), - + }; + search = { /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array. Lists check runs for a check suite using its `id`. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the `repo` scope to get check runs in a private repository. + * @description Searches for query terms inside of a file. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for code, you can get text match metadata for the file **content** and file **path** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the definition of the \`addClass\` function inside [jQuery](https://github.com/jquery/jquery) repository, your query would look something like this: \`q=addClass+in:file+language:js+repo:jquery/jquery\` This query searches for the keyword \`addClass\` within a file's contents. The query limits the search to files where the language is JavaScript in the \`jquery/jquery\` repository. #### Considerations for code search Due to the complexity of searching code, there are a few restrictions on how searches are performed: * Only the _default branch_ is considered. In most cases, this will be the \`master\` branch. * Only files smaller than 384 KB are searchable. * You must always include at least one search term when searching source code. For example, searching for [\`language:go\`](https://github.com/search?utf8=%E2%9C%93&q=language%3Ago&type=Code) is not valid, while [\`amazing language:go\`](https://github.com/search?utf8=%E2%9C%93&q=amazing+language%3Ago&type=Code) is. * - * @tags checks - * @name ChecksListForSuite - * @summary List check runs in a check suite - * @request GET:/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs + * @tags search + * @name SearchCode + * @summary Search code + * @request GET:/search/code */ - checksListForSuite: ( - owner: string, - repo: string, - checkSuiteId: number, - query?: { - /** Returns check runs with the specified `name`. */ - check_name?: string; + searchCode: ( + query: { /** - * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`. - * @default "latest" + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" */ - filter?: "latest" | "all"; + order?: "desc" | "asc"; /** * Page number of the results to fetch. * @default 1 @@ -18211,149 +32231,28 @@ export class Api extends HttpClient this.request< { - check_runs: CheckRun[]; + incomplete_results: boolean; + items: CodeSearchResultItem[]; total_count: number; }, - any - >({ - path: `/repos/${owner}/${repo}/check-suites/${checkSuiteId}/check-runs`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Triggers GitHub to rerequest an existing check suite, without pushing new code to a repository. This endpoint will trigger the [`check_suite` webhook](https://docs.github.com/webhooks/event-payloads/#check_suite) event with the action `rerequested`. When a check suite is `rerequested`, its `status` is reset to `queued` and the `conclusion` is cleared. To rerequest a check suite, your GitHub App must have the `checks:read` permission on a private repository or pull access to a public repository. - * - * @tags checks - * @name ChecksRerequestSuite - * @summary Rerequest a check suite - * @request POST:/repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest - */ - checksRerequestSuite: (owner: string, repo: string, checkSuiteId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/check-suites/${checkSuiteId}/rerequest`, - method: "POST", - ...params, - }), - - /** - * @description Lists all open code scanning alerts for the default branch (usually `main` or `master`). You must use an access token with the `security_events` scope to use this endpoint. GitHub Apps must have the `security_events` read permission to use this endpoint. - * - * @tags code-scanning - * @name CodeScanningListAlertsForRepo - * @summary List code scanning alerts for a repository - * @request GET:/repos/{owner}/{repo}/code-scanning/alerts - */ - codeScanningListAlertsForRepo: ( - owner: string, - repo: string, - query?: { - /** Set a full Git reference to list alerts for a specific branch. The `ref` must be formatted as `refs/heads/`. */ - ref?: CodeScanningAlertRef; - /** Set to `open`, `fixed`, or `dismissed` to list code scanning alerts in a specific state. */ - state?: CodeScanningAlertState; - }, - params: RequestParams = {}, - ) => - this.request< - CodeScanningAlertCodeScanningAlertItems[], - void | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/code-scanning/alerts`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Gets a single code scanning alert. You must use an access token with the `security_events` scope to use this endpoint. GitHub Apps must have the `security_events` read permission to use this endpoint. The security `alert_number` is found at the end of the security alert's URL. For example, the security alert ID for `https://github.com/Octo-org/octo-repo/security/code-scanning/88` is `88`. - * - * @tags code-scanning - * @name CodeScanningGetAlert - * @summary Get a code scanning alert - * @request GET:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} - */ - codeScanningGetAlert: (owner: string, repo: string, alertNumber: number, params: RequestParams = {}) => - this.request< - CodeScanningAlertCodeScanningAlert, - | void | BasicError + | ValidationError | { code?: string; documentation_url?: string; message?: string; } >({ - path: `/repos/${owner}/${repo}/code-scanning/alerts/${alertNumber}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Updates the status of a single code scanning alert. You must use an access token with the `security_events` scope to use this endpoint. GitHub Apps must have the `security_events` write permission to use this endpoint. - * - * @tags code-scanning - * @name CodeScanningUpdateAlert - * @summary Update a code scanning alert - * @request PATCH:/repos/{owner}/{repo}/code-scanning/alerts/{alert_number} - */ - codeScanningUpdateAlert: ( - owner: string, - repo: string, - alertNumber: AlertNumber, - data: { - /** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ - dismissed_reason?: CodeScanningAlertDismissedReason; - /** Sets the state of the code scanning alert. Can be one of `open` or `dismissed`. You must provide `dismissed_reason` when you set the state to `dismissed`. */ - state: CodeScanningAlertSetState; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/code-scanning/alerts/${alertNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List the details of recent code scanning analyses for a repository. You must use an access token with the `security_events` scope to use this endpoint. GitHub Apps must have the `security_events` read permission to use this endpoint. - * - * @tags code-scanning - * @name CodeScanningListRecentAnalyses - * @summary List recent code scanning analyses for a repository - * @request GET:/repos/{owner}/{repo}/code-scanning/analyses - */ - codeScanningListRecentAnalyses: ( - owner: string, - repo: string, - query?: { - /** Set a full Git reference to list alerts for a specific branch. The `ref` must be formatted as `refs/heads/`. */ - ref?: CodeScanningAnalysisRef; - /** Set a single code scanning tool name to filter alerts by tool. */ - tool_name?: CodeScanningAnalysisToolName; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/code-scanning/analyses`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -18361,68 +32260,70 @@ export class Api extends HttpClient`. */ - ref: CodeScanningAnalysisRef; - /** A Base64 string representing the SARIF file to upload. You must first compress your SARIF file using [`gzip`](http://www.gnu.org/software/gzip/manual/gzip.html) and then translate the contents of the file into a Base64 encoding string. */ - sarif: CodeScanningAnalysisSarifFile; + order?: "desc" | "asc"; /** - * The time that the analysis run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. - * @format date + * Page number of the results to fetch. + * @default 1 */ - started_at?: string; - /** The name of the tool used to generate the code scanning analysis alert. */ - tool_name: CodeScanningAnalysisToolName; + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers. */ + q: string; + /** Sorts the results of your query by \`author-date\` or \`committer-date\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: "author-date" | "committer-date"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/code-scanning/sarifs`, - method: "POST", - body: data, - type: ContentType.Json, + this.request< + { + incomplete_results: boolean; + items: CommitSearchResultItem[]; + total_count: number; + }, + { + documentation_url: string; + message: string; + } + >({ + path: \`/search/commits\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * @description For organization-owned repositories, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. Team members will include the members of child teams. + * @description Find issues by state and keyword. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this. \`q=windows+label:bug+language:python+state:open&sort=created&order=asc\` This query searches for the keyword \`windows\`, within any open issue that is labeled as \`bug\`. The search runs across repositories whose primary language is Python. The results are sorted by creation date in ascending order, which means the oldest issues appear first in the search results. **Note:** For [user-to-server](https://docs.github.com/developers/apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) GitHub App requests, you can't retrieve a combination of issues and pull requests in a single query. Requests that don't include the \`is:issue\` or \`is:pull-request\` qualifier will receive an HTTP \`422 Unprocessable Entity\` response. To get results for both issues and pull requests, you must send separate queries for issues and pull requests. For more information about the \`is\` qualifier, see "[Searching only issues or pull requests](https://docs.github.com/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-only-issues-or-pull-requests)." * - * @tags repos - * @name ReposListCollaborators - * @summary List repository collaborators - * @request GET:/repos/{owner}/{repo}/collaborators + * @tags search + * @name SearchIssuesAndPullRequests + * @summary Search issues and pull requests + * @request GET:/search/issues */ - reposListCollaborators: ( - owner: string, - repo: string, - query?: { + searchIssuesAndPullRequests: ( + query: { /** - * Filter collaborators returned by their affiliation. Can be one of: - * \* `outside`: All outside collaborators of an organization-owned repository. - * \* `direct`: All collaborators with permissions to an organization-owned repository, regardless of organization membership status. - * \* `all`: All collaborators the authenticated user can see. - * @default "all" + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" */ - affiliation?: "outside" | "direct" | "all"; + order?: "desc" | "asc"; /** * Page number of the results to fetch. * @default 1 @@ -18433,11 +32334,39 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + this.request< + { + incomplete_results: boolean; + items: IssueSearchResultItem[]; + total_count: number; + }, + | BasicError + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -18445,100 +32374,59 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${username}`, - method: "GET", - ...params, - }), - - /** - * @description This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. For more information the permission levels, see "[Repository permission levels for an organization](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-levels-for-repositories-owned-by-an-organization)". Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." The invitee will receive a notification that they have been invited to the repository, which they must accept or decline. They may do this via the notifications page, the email they receive, or by using the [repository invitations API endpoints](https://docs.github.com/rest/reference/repos#invitations). **Rate limits** To prevent abuse, you are limited to sending 50 invitations to a repository per 24 hour period. Note there is no limit if you are inviting organization members to an organization repository. + * @description Find labels in a repository with names or descriptions that match search keywords. Returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for labels, you can get text match metadata for the label **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find labels in the \`linguist\` repository that match \`bug\`, \`defect\`, or \`enhancement\`. Your query might look like this: \`q=bug+defect+enhancement&repository_id=64778136\` The labels that best match the query appear first in the search results. * - * @tags repos - * @name ReposAddCollaborator - * @summary Add a repository collaborator - * @request PUT:/repos/{owner}/{repo}/collaborators/{username} + * @tags search + * @name SearchLabels + * @summary Search labels + * @request GET:/search/labels */ - reposAddCollaborator: ( - owner: string, - repo: string, - username: string, - data: { + searchLabels: ( + query: { /** - * The permission to grant the collaborator. **Only valid on organization-owned repositories.** Can be one of: - * \* `pull` - can pull, but not push to or administer this repository. - * \* `push` - can pull and push, but not administer this repository. - * \* `admin` - can pull, push and administer this repository. - * \* `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions. - * \* `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access. - * @default "push" + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" */ - permission?: "pull" | "push" | "admin" | "maintain" | "triage"; - /** @example ""push"" */ - permissions?: string; + order?: "desc" | "asc"; + /** The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; + /** The id of the repository. */ + repository_id: number; + /** Sorts the results of your query by when the label was \`created\` or \`updated\`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ + sort?: "created" | "updated"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${username}`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags repos - * @name ReposRemoveCollaborator - * @summary Remove a repository collaborator - * @request DELETE:/repos/{owner}/{repo}/collaborators/{username} - */ - reposRemoveCollaborator: (owner: string, repo: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Checks the repository permission of a collaborator. The possible repository permissions are `admin`, `write`, `read`, and `none`. - * - * @tags repos - * @name ReposGetCollaboratorPermissionLevel - * @summary Get repository permissions for a user - * @request GET:/repos/{owner}/{repo}/collaborators/{username}/permission - */ - reposGetCollaboratorPermissionLevel: (owner: string, repo: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${username}/permission`, + this.request< + { + incomplete_results: boolean; + items: LabelSearchResultItem[]; + total_count: number; + }, + BasicError | ValidationError + >({ + path: \`/search/labels\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Commit Comments use [these custom media types](https://docs.github.com/rest/reference/repos#custom-media-types). You can read more about the use of media types in the API [here](https://docs.github.com/rest/overview/media-types/). Comments are ordered by ascending ID. + * @description Find repositories via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for repositories, you can get text match metadata for the **name** and **description** fields when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for popular Tetris repositories written in assembly code, your query might look like this: \`q=tetris+language:assembly&sort=stars&order=desc\` This query searches for repositories with the word \`tetris\` in the name, the description, or the README. The results are limited to repositories where the primary language is assembly. The results are sorted by stars in descending order, so that the most popular repositories appear first in the search results. When you include the \`mercy\` preview header, you can also search for multiple topics by adding more \`topic:\` instances. For example, your query might look like this: \`q=topic:ruby+topic:rails\` * - * @tags repos - * @name ReposListCommitCommentsForRepo - * @summary List commit comments for a repository - * @request GET:/repos/{owner}/{repo}/comments + * @tags search + * @name SearchRepos + * @summary Search repositories + * @request GET:/search/repositories */ - reposListCommitCommentsForRepo: ( - owner: string, - repo: string, - query?: { + searchRepos: ( + query: { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: "desc" | "asc"; /** * Page number of the results to fetch. * @default 1 @@ -18549,11 +32437,27 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/comments`, + this.request< + { + incomplete_results: boolean; + items: RepoSearchResultItem[]; + total_count: number; + }, + | ValidationError + | { + code?: string; + documentation_url?: string; + message?: string; + } + >({ + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -18561,78 +32465,53 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description + * @description Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). See "[Searching topics](https://help.github.com/articles/searching-topics/)" for a detailed list of qualifiers. When searching for topics, you can get text match metadata for the topic's **short\\_description**, **description**, **name**, or **display\\_name** field when you pass the \`text-match\` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for topics related to Ruby that are featured on https://github.com/topics. Your query might look like this: \`q=ruby+is:featured\` This query searches for topics with the keyword \`ruby\` and limits the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results. * - * @tags repos - * @name ReposUpdateCommitComment - * @summary Update a commit comment - * @request PATCH:/repos/{owner}/{repo}/comments/{comment_id} + * @tags search + * @name SearchTopics + * @summary Search topics + * @request GET:/search/topics */ - reposUpdateCommitComment: ( - owner: string, - repo: string, - commentId: number, - data: { - /** The contents of the comment */ - body: string; + searchTopics: ( + query: { + /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ + q: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request< + { + incomplete_results: boolean; + items: TopicSearchResultItem[]; + total_count: number; + }, + { + documentation_url: string; + message: string; + } + >({ + path: \`/search/topics\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * No description - * - * @tags repos - * @name ReposDeleteCommitComment - * @summary Delete a commit comment - * @request DELETE:/repos/{owner}/{repo}/comments/{comment_id} - */ - reposDeleteCommitComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description List the reactions to a [commit comment](https://docs.github.com/rest/reference/repos#comments). + * @description Find users via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for users, you can get text match metadata for the issue **login**, **email**, and **name** fields when you pass the \`text-match\` media type. For more details about highlighting search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you're looking for a list of popular users, you might try this query: \`q=tom+repos:%3E42+followers:%3E1000\` This query searches for users with the name \`tom\`. The results are restricted to users with more than 42 repositories and over 1,000 followers. * - * @tags reactions - * @name ReactionsListForCommitComment - * @summary List reactions for a commit comment - * @request GET:/repos/{owner}/{repo}/comments/{comment_id}/reactions + * @tags search + * @name SearchUsers + * @summary Search users + * @request GET:/search/users */ - reactionsListForCommitComment: ( - owner: string, - repo: string, - commentId: number, - query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + searchUsers: ( + query: { + /** + * Determines whether the first search result returned is the highest number of matches (\`desc\`) or lowest number of matches (\`asc\`). This parameter is ignored unless you provide \`sort\`. + * @default "desc" + */ + order?: "desc" | "asc"; /** * Page number of the results to fetch. * @default 1 @@ -18643,52 +32522,92 @@ export class Api extends HttpClient this.request< - Reaction[], - | BasicError + { + incomplete_results: boolean; + items: UserSearchResultItem[]; + total_count: number; + }, + | ValidationError | { - documentation_url: string; - message: string; + code?: string; + documentation_url?: string; + message?: string; } >({ - path: `/repos/${owner}/${repo}/comments/${commentId}/reactions`, + path: \`/search/users\`, method: "GET", query: query, format: "json", ...params, }), + }; + teams = { + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the [Get a team by name](https://docs.github.com/rest/reference/teams#get-a-team-by-name) endpoint. + * + * @tags teams + * @name TeamsGetLegacy + * @summary Get a team (Legacy) + * @request GET:/teams/{team_id} + * @deprecated + */ + teamsGetLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}\`, + method: "GET", + format: "json", + ...params, + }), /** - * @description Create a reaction to a [commit comment](https://docs.github.com/rest/reference/repos#comments). A response with a `Status: 200 OK` means that you already added the reaction type to this commit comment. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a team](https://docs.github.com/rest/reference/teams#update-a-team) endpoint. To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** With nested teams, the \`privacy\` for parent teams cannot be \`secret\`. * - * @tags reactions - * @name ReactionsCreateForCommitComment - * @summary Create reaction for a commit comment - * @request POST:/repos/{owner}/{repo}/comments/{comment_id}/reactions + * @tags teams + * @name TeamsUpdateLegacy + * @summary Update a team (Legacy) + * @request PATCH:/teams/{team_id} + * @deprecated */ - reactionsCreateForCommitComment: ( - owner: string, - repo: string, - commentId: number, + teamsUpdateLegacy: ( + teamId: number, data: { - /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the commit comment. */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** The description of the team. */ + description?: string; + /** The name of the team. */ + name: string; + /** The ID of a team to set as the parent team. */ + parent_team_id?: number | null; + /** + * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer newly-added repositories. + * \\* \`push\` - team members can pull and push, but not administer newly-added repositories. + * \\* \`admin\` - team members can pull, push and administer newly-added repositories. + * @default "pull" + */ + permission?: "pull" | "push" | "admin"; + /** + * The level of privacy this team should have. Editing teams without specifying this parameter leaves \`privacy\` intact. The options are: + * **For a non-nested team:** + * \\* \`secret\` - only visible to organization owners and members of this team. + * \\* \`closed\` - visible to all members of this organization. + * **For a parent or child team:** + * \\* \`closed\` - visible to all members of this organization. + */ + privacy?: "secret" | "closed"; }, params: RequestParams = {}, ) => - this.request< - Reaction, - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/comments/${commentId}/reactions`, - method: "POST", + this.request({ + path: \`/teams/\${teamId}\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -18696,63 +32615,53 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}/reactions/${reactionId}`, + teamsDeleteLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), /** - * @description **Signature verification object** The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object: | Name | Type | Description | | ---- | ---- | ----------- | | `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. | | `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | `signature` | `string` | The signature that was extracted from the commit. | | `payload` | `string` | The value that was signed. | These are the possible values for `reason` in the `verification` object: | Value | Description | | ----- | ----------- | | `expired_key` | The key that made the signature is expired. | | `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | `gpgverify_error` | There was an error communicating with the signature verification service. | | `gpgverify_unavailable` | The signature verification service is currently unavailable. | | `unsigned` | The object does not include a signature. | | `unknown_signature_type` | A non-PGP signature was found in the commit. | | `no_user` | No user was associated with the `committer` email address in the commit. | | `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. | | `unknown_key` | The key that made the signature has not been registered with any user's account. | | `malformed_signature` | There was an error parsing the signature. | | `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | `valid` | None of the above errors applied, so the signature is considered to be verified. | + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List discussions\`](https://docs.github.com/rest/reference/teams#list-discussions) endpoint. List all discussions on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposListCommits - * @summary List commits - * @request GET:/repos/{owner}/{repo}/commits + * @tags teams + * @name TeamsListDiscussionsLegacy + * @summary List discussions (Legacy) + * @request GET:/teams/{team_id}/discussions + * @deprecated */ - reposListCommits: ( - owner: string, - repo: string, + teamsListDiscussionsLegacy: ( + teamId: number, query?: { - /** GitHub login or email address by which to filter by commit author. */ - author?: string; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 */ page?: number; - /** Only commits containing this file path will be returned. */ - path?: string; /** * Results per page (max 100) * @default 30 */ per_page?: number; - /** SHA or branch to start listing commits from. Default: the repository’s default branch (usually `master`). */ - sha?: string; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; - /** Only commits before this date will be returned. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - until?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, + this.request({ + path: \`/teams/\${teamId}/discussions\`, method: "GET", query: query, format: "json", @@ -18760,89 +32669,78 @@ export class Api extends HttpClient - this.request< - BranchShort[], - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/commits/${commitSha}/branches-where-head`, - method: "GET", + teamsCreateDiscussionLegacy: ( + teamId: number, + data: { + /** The discussion post's body text. */ + body: string; + /** + * Private posts are only visible to team members, organization owners, and team maintainers. Public posts are visible to all members of the organization. Set to \`true\` to create a private post. + * @default false + */ + private?: boolean; + /** The discussion post's title. */ + title: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Use the `:commit_sha` to specify the commit that will have its comments listed. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion](https://docs.github.com/rest/reference/teams#get-a-discussion) endpoint. Get a specific discussion on a team's page. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposListCommentsForCommit - * @summary List commit comments - * @request GET:/repos/{owner}/{repo}/commits/{commit_sha}/comments + * @tags teams + * @name TeamsGetDiscussionLegacy + * @summary Get a discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number} + * @deprecated */ - reposListCommentsForCommit: ( - owner: string, - repo: string, - commitSha: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${commitSha}/comments`, + teamsGetDiscussionLegacy: (teamId: number, discussionNumber: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Create a comment for a commit using its `:commit_sha`. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion](https://docs.github.com/rest/reference/teams#update-a-discussion) endpoint. Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposCreateCommitComment - * @summary Create a commit comment - * @request POST:/repos/{owner}/{repo}/commits/{commit_sha}/comments + * @tags teams + * @name TeamsUpdateDiscussionLegacy + * @summary Update a discussion (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number} + * @deprecated */ - reposCreateCommitComment: ( - owner: string, - repo: string, - commitSha: string, + teamsUpdateDiscussionLegacy: ( + teamId: number, + discussionNumber: number, data: { - /** The contents of the comment. */ - body: string; - /** **Deprecated**. Use **position** parameter instead. Line number in the file to comment on. */ - line?: number; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; + /** The discussion post's body text. */ + body?: string; + /** The discussion post's title. */ + title?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${commitSha}/comments`, - method: "POST", + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -18850,18 +32748,39 @@ export class Api extends HttpClient + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List discussion comments](https://docs.github.com/rest/reference/teams#list-discussion-comments) endpoint. List all comments on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags teams + * @name TeamsListDiscussionCommentsLegacy + * @summary List discussion comments (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments + * @deprecated + */ + teamsListDiscussionCommentsLegacy: ( + teamId: number, + discussionNumber: number, query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -18875,14 +32794,8 @@ export class Api extends HttpClient - this.request< - PullRequestSimple[], - { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/commits/${commitSha}/pulls`, + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments\`, method: "GET", query: query, format: "json", @@ -18890,146 +32803,119 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}`, - method: "GET", + teamsCreateDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + data: { + /** The discussion comment's body text. */ + body: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array. Lists check runs for a commit ref. The `ref` can be a SHA, branch name, or a tag name. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to get check runs. OAuth Apps and authenticated users must have the `repo` scope to get check runs in a private repository. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion comment](https://docs.github.com/rest/reference/teams#get-a-discussion-comment) endpoint. Get a specific comment on a team discussion. OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags checks - * @name ChecksListForRef - * @summary List check runs for a Git reference - * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-runs + * @tags teams + * @name TeamsGetDiscussionCommentLegacy + * @summary Get a discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated */ - checksListForRef: ( - owner: string, - repo: string, - ref: string, - query?: { - /** Returns check runs with the specified `name`. */ - check_name?: string; - /** - * Filters check runs by their `completed_at` timestamp. Can be one of `latest` (returning the most recent check runs) or `all`. - * @default "latest" - */ - filter?: "latest" | "all"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Returns check runs with the specified `status`. Can be one of `queued`, `in_progress`, or `completed`. */ - status?: "queued" | "in_progress" | "completed"; - }, + teamsGetDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, params: RequestParams = {}, ) => - this.request< - { - check_runs: CheckRun[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/commits/${ref}/check-runs`, + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description **Note:** The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty `pull_requests` array and a `null` value for `head_branch`. Lists check suites for a commit `ref`. The `ref` can be a SHA, branch name, or a tag name. GitHub Apps must have the `checks:read` permission on a private repository or pull access to a public repository to list check suites. OAuth Apps and authenticated users must have the `repo` scope to get check suites in a private repository. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion comment](https://docs.github.com/rest/reference/teams#update-a-discussion-comment) endpoint. Edits the body text of a discussion comment. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags checks - * @name ChecksListSuitesForRef - * @summary List check suites for a Git reference - * @request GET:/repos/{owner}/{repo}/commits/{ref}/check-suites + * @tags teams + * @name TeamsUpdateDiscussionCommentLegacy + * @summary Update a discussion comment (Legacy) + * @request PATCH:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated */ - checksListSuitesForRef: ( - owner: string, - repo: string, - ref: string, - query?: { - /** - * Filters check suites by GitHub App `id`. - * @example 1 - */ - app_id?: number; - /** Returns check runs with the specified `name`. */ - check_name?: string; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + teamsUpdateDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + data: { + /** The discussion comment's body text. */ + body: string; }, - params: RequestParams = {}, - ) => - this.request< - { - check_suites: CheckSuite[]; - total_count: number; - }, - any - >({ - path: `/repos/${owner}/${repo}/commits/${ref}/check-suites`, - method: "GET", - query: query, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Users with pull access in a repository can access a combined view of commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. The most recent status for each context is returned, up to 100. This field [paginates](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination) if there are over 100 contexts. Additionally, a combined `state` is returned. The `state` is one of: * **failure** if any of the contexts report as `error` or `failure` * **pending** if there are no statuses or a context is `pending` * **success** if the latest status for all contexts is `success` + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a discussion comment](https://docs.github.com/rest/reference/teams#delete-a-discussion-comment) endpoint. Deletes a comment on a team discussion. OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposGetCombinedStatusForRef - * @summary Get the combined status for a specific reference - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status + * @tags teams + * @name TeamsDeleteDiscussionCommentLegacy + * @summary Delete a discussion comment (Legacy) + * @request DELETE:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} + * @deprecated */ - reposGetCombinedStatusForRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", + teamsDeleteDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + params: RequestParams = {}, + ) => + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}\`, + method: "DELETE", ...params, }), /** - * @description Users with pull access in a repository can view commit statuses for a given ref. The ref can be a SHA, a branch name, or a tag name. Statuses are returned in reverse chronological order. The first status in the list will be the latest one. This resource is also available via a legacy route: `GET /repos/:owner/:repo/statuses/:ref`. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion comment\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion-comment) endpoint. List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposListCommitStatusesForRef - * @summary List commit statuses for a reference - * @request GET:/repos/{owner}/{repo}/commits/{ref}/statuses + * @tags reactions + * @name ReactionsListForTeamDiscussionCommentLegacy + * @summary List reactions for a team discussion comment (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated */ - reposListCommitStatusesForRef: ( - owner: string, - repo: string, - ref: string, + reactionsListForTeamDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** * Page number of the results to fetch. * @default 1 @@ -19043,8 +32929,8 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/statuses`, + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, method: "GET", query: query, format: "json", @@ -19052,178 +32938,90 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/community/code_of_conduct`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This endpoint will return all community profile metrics, including an overall health score, repository description, the presence of documentation, detected code of conduct, detected license, and the presence of ISSUE\_TEMPLATE, PULL\_REQUEST\_TEMPLATE, README, and CONTRIBUTING files. The `health_percentage` score is defined as a percentage of how many of these four documents are present: README, CONTRIBUTING, LICENSE, and CODE_OF_CONDUCT. For example, if all four documents are present, then the `health_percentage` is `100`. If only one is present, then the `health_percentage` is `25`. `content_reports_enabled` is only returned for organization-owned repositories. - * - * @tags repos - * @name ReposGetCommunityProfileMetrics - * @summary Get community profile metrics - * @request GET:/repos/{owner}/{repo}/community/profile - */ - reposGetCommunityProfileMetrics: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/community/profile`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Both `:base` and `:head` must be branch names in `:repo`. To compare branches across other repositories in the same network as `:repo`, use the format `:branch`. The response from the API is equivalent to running the `git log base..head` command; however, commits are returned in chronological order. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. The response also includes details on the files that were changed between the two commits. This includes the status of the change (for example, if a file was added, removed, modified, or renamed), and details of the change itself. For example, files with a `renamed` status have a `previous_filename` field showing the previous filename of the file, and files with a `modified` status have a `patch` field showing the changes made to the file. **Working with large comparisons** The response will include a comparison of up to 250 commits. If you are working with a larger commit range, you can use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) to enumerate all commits in the range. For comparisons with extremely large diffs, you may receive an error response indicating that the diff took too long to generate. You can typically resolve this error by using a smaller commit range. **Signature verification object** The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object: | Name | Type | Description | | ---- | ---- | ----------- | | `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. | | `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | `signature` | `string` | The signature that was extracted from the commit. | | `payload` | `string` | The value that was signed. | These are the possible values for `reason` in the `verification` object: | Value | Description | | ----- | ----------- | | `expired_key` | The key that made the signature is expired. | | `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | `gpgverify_error` | There was an error communicating with the signature verification service. | | `gpgverify_unavailable` | The signature verification service is currently unavailable. | | `unsigned` | The object does not include a signature. | | `unknown_signature_type` | A non-PGP signature was found in the commit. | | `no_user` | No user was associated with the `committer` email address in the commit. | | `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. | | `unknown_key` | The key that made the signature has not been registered with any user's account. | | `malformed_signature` | There was an error parsing the signature. | | `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | `valid` | None of the above errors applied, so the signature is considered to be verified. | - * - * @tags repos - * @name ReposCompareCommits - * @summary Compare two commits - * @request GET:/repos/{owner}/{repo}/compare/{base}...{head} - */ - reposCompareCommits: (owner: string, repo: string, base: string, head: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${base}...${head}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Gets the contents of a file or directory in a repository. Specify the file path or directory in `:path`. If you omit `:path`, you will receive the contents of the repository's root directory. See the description below regarding what the API response includes for directories. Files and symlinks support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML (when supported). All content types support [a custom media type](https://docs.github.com/rest/reference/repos#custom-media-types) to ensure the content is returned in a consistent object format. **Note**: * To get a repository's contents recursively, you can [recursively get the tree](https://docs.github.com/rest/reference/git#trees). * This API has an upper limit of 1,000 files for a directory. If you need to retrieve more files, use the [Git Trees API](https://docs.github.com/rest/reference/git#get-a-tree). * This API supports files up to 1 megabyte in size. #### If the content is a directory The response will be an array of objects, one object for each item in the directory. When listing the contents of a directory, submodules have their "type" specified as "file". Logically, the value _should_ be "submodule". This behavior exists in API v3 [for backwards compatibility purposes](https://git.io/v1YCW). In the next major version of the API, the type will be returned as "submodule". #### If the content is a symlink If the requested `:path` points to a symlink, and the symlink's target is a normal file in the repository, then the API responds with the content of the file (in the format shown in the example. Otherwise, the API responds with an object describing the symlink itself. #### If the content is a submodule The `submodule_git_url` identifies the location of the submodule repository, and the `sha` identifies a specific commit within the submodule repository. Git uses the given URL when cloning the submodule repository, and checks out the submodule at that specific commit. If the submodule repository is not hosted on github.com, the Git URLs (`git_url` and `_links["git"]`) and the github.com URLs (`html_url` and `_links["html"]`) will have null values. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Create reaction for a team discussion comment](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion-comment)" endpoint. Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion comment. * - * @tags repos - * @name ReposGetContent - * @summary Get repository content - * @request GET:/repos/{owner}/{repo}/contents/{path} + * @tags reactions + * @name ReactionsCreateForTeamDiscussionCommentLegacy + * @summary Create reaction for a team discussion comment (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions + * @deprecated */ - reposGetContent: ( - owner: string, - repo: string, - path: string, - query?: { - /** The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`) */ - ref?: string; + reactionsCreateForTeamDiscussionCommentLegacy: ( + teamId: number, + discussionNumber: number, + commentNumber: number, + data: { + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/comments/\${commentNumber}/reactions\`, + method: "POST", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Creates a new file or replaces an existing file in a repository. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List reactions for a team discussion\`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion) endpoint. List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`read:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags repos - * @name ReposCreateOrUpdateFileContents - * @summary Create or update file contents - * @request PUT:/repos/{owner}/{repo}/contents/{path} + * @tags reactions + * @name ReactionsListForTeamDiscussionLegacy + * @summary List reactions for a team discussion (Legacy) + * @request GET:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated */ - reposCreateOrUpdateFileContents: ( - owner: string, - repo: string, - path: string, - data: { - /** The author of the file. Default: The `committer` or the authenticated user if you omit `committer`. */ - author?: { - /** @example ""2013-01-15T17:13:22+05:00"" */ - date?: string; - /** The email of the author or committer of the commit. You'll receive a `422` status code if `email` is omitted. */ - email: string; - /** The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted. */ - name: string; - }; - /** The branch name. Default: the repository’s default branch (usually `master`) */ - branch?: string; - /** The person that committed the file. Default: the authenticated user. */ - committer?: { - /** @example ""2013-01-05T13:13:22+05:00"" */ - date?: string; - /** The email of the author or committer of the commit. You'll receive a `422` status code if `email` is omitted. */ - email: string; - /** The name of the author or committer of the commit. You'll receive a `422` status code if `name` is omitted. */ - name: string; - }; - /** The new file content, using Base64 encoding. */ - content: string; - /** The commit message. */ - message: string; - /** **Required if you are updating a file**. The blob SHA of the file being replaced. */ - sha?: string; + reactionsListForTeamDiscussionLegacy: ( + teamId: number, + discussionNumber: number, + query?: { + /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/reactions\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Deletes a file in a repository. You can provide an additional `committer` parameter, which is an object containing information about the committer. Or, you can provide an `author` parameter, which is an object containing information about the author. The `author` section is optional and is filled in with the `committer` information if omitted. If the `committer` information is omitted, the authenticated user's information is used. You must provide values for both `name` and `email`, whether you choose to use `author` or `committer`. Otherwise, you'll receive a `422` status code. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create reaction for a team discussion\`](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion) endpoint. Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the \`write:discussion\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a \`Status: 200 OK\` means that you already added the reaction type to this team discussion. * - * @tags repos - * @name ReposDeleteFile - * @summary Delete a file - * @request DELETE:/repos/{owner}/{repo}/contents/{path} + * @tags reactions + * @name ReactionsCreateForTeamDiscussionLegacy + * @summary Create reaction for a team discussion (Legacy) + * @request POST:/teams/{team_id}/discussions/{discussion_number}/reactions + * @deprecated */ - reposDeleteFile: ( - owner: string, - repo: string, - path: string, + reactionsCreateForTeamDiscussionLegacy: ( + teamId: number, + discussionNumber: number, data: { - /** object containing information about the author. */ - author?: { - /** The email of the author (or committer) of the commit */ - email?: string; - /** The name of the author (or committer) of the commit */ - name?: string; - }; - /** The branch name. Default: the repository’s default branch (usually `master`) */ - branch?: string; - /** object containing information about the committer. */ - committer?: { - /** The email of the author (or committer) of the commit */ - email?: string; - /** The name of the author (or committer) of the commit */ - name?: string; - }; - /** The commit message. */ - message: string; - /** The blob SHA of the file being replaced. */ - sha: string; + /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; }, params: RequestParams = {}, ) => - this.request< - FileCommit, - | BasicError - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", + this.request({ + path: \`/teams/\${teamId}/discussions/\${discussionNumber}/reactions\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -19231,19 +33029,17 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/contributors`, + this.request({ + path: \`/teams/\${teamId}/invitations\`, method: "GET", query: query, format: "json", @@ -19266,22 +33062,17 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/deployments`, + this.request({ + path: \`/teams/\${teamId}/members\`, method: "GET", query: query, format: "json", @@ -19319,192 +33103,124 @@ export class Api extends HttpClient | string; - /** - * Specifies if the given environment is one that end-users directly interact with. Default: `true` when `environment` is `production` and `false` otherwise. - * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. - */ - production_environment?: boolean; - /** The ref to deploy. This can be a branch, tag, or SHA. */ - ref: string; - /** The [status](https://docs.github.com/rest/reference/repos#statuses) contexts to verify against commit status checks. If you omit this parameter, GitHub verifies all unique contexts before creating a deployment. To bypass checking entirely, pass an empty array. Defaults to all unique contexts. */ - required_contexts?: string[]; - /** - * Specifies a task to execute (e.g., `deploy` or `deploy:migrations`). - * @default "deploy" - */ - task?: string; - /** - * Specifies if the given environment is specific to the deployment and will no longer exist at some point in the future. Default: `false` - * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. - * @default false - */ - transient_environment?: boolean; - }, - params: RequestParams = {}, - ) => - this.request< - Deployment, - | { - /** @example ""https://docs.github.com/rest/reference/repos#create-a-deployment"" */ - documentation_url?: string; - message?: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", + teamsGetMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members/\${username}\`, + method: "GET", ...params, }), /** - * No description + * @description The "Add team member" endpoint (described below) is deprecated. We recommend using the [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint instead. It allows you to invite new organization members to your teams. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To add someone to a team, the authenticated user must be an organization owner or a team maintainer in the team they're changing. The person being added to the team must be a member of the team's organization. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." * - * @tags repos - * @name ReposGetDeployment - * @summary Get a deployment - * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id} + * @tags teams + * @name TeamsAddMemberLegacy + * @summary Add team member (Legacy) + * @request PUT:/teams/{team_id}/members/{username} + * @deprecated */ - reposGetDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${deploymentId}`, - method: "GET", - format: "json", + teamsAddMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request< + void, + | BasicError + | void + | { + /** @example ""https://docs.github.com/rest"" */ + documentation_url?: string; + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; + } + >({ + path: \`/teams/\${teamId}/members/\${username}\`, + method: "PUT", ...params, }), /** - * @description To ensure there can always be an active deployment, you can only delete an _inactive_ deployment. Anyone with `repo` or `repo_deployment` scopes can delete an inactive deployment. To set a deployment as inactive, you must: * Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment. * Mark the active deployment as inactive by adding any non-successful deployment status. For more information, see "[Create a deployment](https://docs.github.com/rest/reference/repos/#create-a-deployment)" and "[Create a deployment status](https://docs.github.com/rest/reference/repos#create-a-deployment-status)." + * @description The "Remove team member" endpoint (described below) is deprecated. We recommend using the [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint instead. It allows you to remove both active and pending memberships. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a team member, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. Removing a team member does not delete the user, it just removes them from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." * - * @tags repos - * @name ReposDeleteDeployment - * @summary Delete a deployment - * @request DELETE:/repos/{owner}/{repo}/deployments/{deployment_id} + * @tags teams + * @name TeamsRemoveMemberLegacy + * @summary Remove team member (Legacy) + * @request DELETE:/teams/{team_id}/members/{username} + * @deprecated */ - reposDeleteDeployment: (owner: string, repo: string, deploymentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${deploymentId}`, + teamsRemoveMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), /** - * @description Users with pull access can view deployment statuses for a deployment: + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint. Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** The \`role\` for organization owners returns as \`maintainer\`. For more information about \`maintainer\` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). * - * @tags repos - * @name ReposListDeploymentStatuses - * @summary List deployment statuses - * @request GET:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + * @tags teams + * @name TeamsGetMembershipForUserLegacy + * @summary Get team membership for a user (Legacy) + * @request GET:/teams/{team_id}/memberships/{username} + * @deprecated */ - reposListDeploymentStatuses: ( - owner: string, - repo: string, - deploymentId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${deploymentId}/statuses`, + teamsGetMembershipForUserLegacy: (teamId: number, username: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Users with `push` access can create deployment statuses for a given deployment. GitHub Apps require `read & write` access to "Deployments" and `read-only` access to "Repo contents" (for private repos). OAuth Apps require the `repo_deployment` scope. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. If the user is already a member of the team's organization, this endpoint will add the user to the team. To add a membership between an organization member and a team, the authenticated user must be an organization owner or a team maintainer. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." If the user is unaffiliated with the team's organization, this endpoint will send an invitation to the user via email. This newly-created membership will be in the "pending" state until the user accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. To add a membership between an unaffiliated user and a team, the authenticated user must be an organization owner. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. * - * @tags repos - * @name ReposCreateDeploymentStatus - * @summary Create a deployment status - * @request POST:/repos/{owner}/{repo}/deployments/{deployment_id}/statuses + * @tags teams + * @name TeamsAddOrUpdateMembershipForUserLegacy + * @summary Add or update team membership for a user (Legacy) + * @request PUT:/teams/{team_id}/memberships/{username} + * @deprecated */ - reposCreateDeploymentStatus: ( - owner: string, - repo: string, - deploymentId: number, + teamsAddOrUpdateMembershipForUserLegacy: ( + teamId: number, + username: string, data: { /** - * Adds a new `inactive` status to all prior non-transient, non-production environment deployments with the same repository and `environment` name as the created status's deployment. An `inactive` status is only added to deployments that had a `success` state. Default: `true` - * **Note:** To add an `inactive` status to `production` environments, you must use the [`application/vnd.github.flash-preview+json`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. - * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. - */ - auto_inactive?: boolean; - /** - * A short description of the status. The maximum description length is 140 characters. - * @default "" - */ - description?: string; - /** Name for the target deployment environment, which can be changed when setting a deploy status. For example, `production`, `staging`, or `qa`. **Note:** This parameter requires you to use the [`application/vnd.github.flash-preview+json`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. */ - environment?: "production" | "staging" | "qa"; - /** - * Sets the URL for accessing your environment. Default: `""` - * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. - * @default "" - */ - environment_url?: string; - /** - * The full URL of the deployment's output. This parameter replaces `target_url`. We will continue to accept `target_url` to support legacy uses, but we recommend replacing `target_url` with `log_url`. Setting `log_url` will automatically set `target_url` to the same value. Default: `""` - * **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. **Note:** This parameter requires you to use the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. - * @default "" - */ - log_url?: string; - /** The state of the status. Can be one of `error`, `failure`, `inactive`, `in_progress`, `queued` `pending`, or `success`. **Note:** To use the `inactive` state, you must provide the [`application/vnd.github.ant-man-preview+json`](https://docs.github.com/rest/overview/api-previews#enhanced-deployments) custom media type. To use the `in_progress` and `queued` states, you must provide the [`application/vnd.github.flash-preview+json`](https://docs.github.com/rest/overview/api-previews#deployment-statuses) custom media type. When you set a transient deployment to `inactive`, the deployment will be shown as `destroyed` in GitHub. */ - state: "error" | "failure" | "inactive" | "in_progress" | "queued" | "pending" | "success"; - /** - * The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. **Note:** It's recommended to use the `log_url` parameter, which replaces `target_url`. - * @default "" + * The role that this user should have in the team. Can be one of: + * \\* \`member\` - a normal member of the team. + * \\* \`maintainer\` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. + * @default "member" */ - target_url?: string; + role?: "member" | "maintainer"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${deploymentId}/statuses`, - method: "POST", + this.request< + TeamMembership, + | void + | BasicError + | { + /** @example ""https://help.github.com/articles/github-and-trade-controls"" */ + documentation_url?: string; + errors?: { + code?: string; + field?: string; + resource?: string; + }[]; + message?: string; + } + >({ + path: \`/teams/\${teamId}/memberships/\${username}\`, + method: "PUT", body: data, type: ContentType.Json, format: "json", @@ -19512,105 +33228,163 @@ export class Api extends HttpClient + this.request({ + path: \`/teams/\${teamId}/memberships/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List team projects\`](https://docs.github.com/rest/reference/teams#list-team-projects) endpoint. Lists the organization projects for a team. + * + * @tags teams + * @name TeamsListProjectsLegacy + * @summary List team projects (Legacy) + * @request GET:/teams/{team_id}/projects + * @deprecated + */ + teamsListProjectsLegacy: ( + teamId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, params: RequestParams = {}, ) => this.request< - DeploymentStatus, + TeamProject[], | BasicError | { documentation_url: string; message: string; } >({ - path: `/repos/${owner}/${repo}/deployments/${deploymentId}/statuses/${statusId}`, + path: \`/teams/\${teamId}/projects\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description You can use this endpoint to trigger a webhook event called `repository_dispatch` when you want activity that happens outside of GitHub to trigger a GitHub Actions workflow or GitHub App webhook. You must configure your GitHub Actions workflow or GitHub App to run when the `repository_dispatch` event occurs. For an example `repository_dispatch` webhook payload, see "[RepositoryDispatchEvent](https://docs.github.com/webhooks/event-payloads/#repository_dispatch)." The `client_payload` parameter is available for any extra information that your workflow might need. This parameter is a JSON payload that will be passed on when the webhook event is dispatched. For example, the `client_payload` can include a message that a user would like to send using a GitHub Actions workflow. Or the `client_payload` can be used as a test to debug your workflow. This endpoint requires write access to the repository by providing either: - Personal access tokens with `repo` scope. For more information, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line)" in the GitHub Help documentation. - GitHub Apps with both `metadata:read` and `contents:read&write` permissions. This input example shows how you can use the `client_payload` as a test to debug your workflow. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a project](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-project) endpoint. Checks whether a team has \`read\`, \`write\`, or \`admin\` permissions for an organization project. The response includes projects inherited from a parent team. * - * @tags repos - * @name ReposCreateDispatchEvent - * @summary Create a repository dispatch event - * @request POST:/repos/{owner}/{repo}/dispatches + * @tags teams + * @name TeamsCheckPermissionsForProjectLegacy + * @summary Check team permissions for a project (Legacy) + * @request GET:/teams/{team_id}/projects/{project_id} + * @deprecated */ - reposCreateDispatchEvent: ( - owner: string, - repo: string, + teamsCheckPermissionsForProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => + this.request< + TeamProject, + void | { + documentation_url: string; + message: string; + } + >({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team project permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-project-permissions) endpoint. Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have \`admin\` permissions for the project. The project and team must be part of the same organization. + * + * @tags teams + * @name TeamsAddOrUpdateProjectPermissionsLegacy + * @summary Add or update team project permissions (Legacy) + * @request PUT:/teams/{team_id}/projects/{project_id} + * @deprecated + */ + teamsAddOrUpdateProjectPermissionsLegacy: ( + teamId: number, + projectId: number, data: { - /** JSON payload with extra information about the webhook event that your action or worklow may use. */ - client_payload?: Record; - /** A custom webhook event name. */ - event_type: string; + /** + * The permission to grant to the team for this project. Can be one of: + * \\* \`read\` - team members can read, but not write to or administer this project. + * \\* \`write\` - team members can read and write, but not administer this project. + * \\* \`admin\` - team members can read, write and administer this project. + * Default: the team's \`permission\` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + */ + permission?: "read" | "write" | "admin"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/dispatches`, - method: "POST", + this.request< + void, + | { + documentation_url?: string; + message?: string; + } + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "PUT", body: data, type: ContentType.Json, ...params, }), /** - * No description + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a project from a team](https://docs.github.com/rest/reference/teams#remove-a-project-from-a-team) endpoint. Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have \`read\` access to both the team and project, or \`admin\` access to the team or project. **Note:** This endpoint removes the project from the team, but does not delete it. * - * @tags activity - * @name ActivityListRepoEvents - * @summary List repository events - * @request GET:/repos/{owner}/{repo}/events + * @tags teams + * @name TeamsRemoveProjectLegacy + * @summary Remove a project from a team (Legacy) + * @request DELETE:/teams/{team_id}/projects/{project_id} + * @deprecated */ - activityListRepoEvents: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - query: query, - format: "json", + teamsRemoveProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => + this.request< + void, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationError + >({ + path: \`/teams/\${teamId}/projects/\${projectId}\`, + method: "DELETE", ...params, }), /** - * No description + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List team repositories](https://docs.github.com/rest/reference/teams#list-team-repositories) endpoint. * - * @tags repos - * @name ReposListForks - * @summary List forks - * @request GET:/repos/{owner}/{repo}/forks + * @tags teams + * @name TeamsListReposLegacy + * @summary List team repositories (Legacy) + * @request GET:/teams/{team_id}/repos + * @deprecated */ - reposListForks: ( - owner: string, - repo: string, + teamsListReposLegacy: ( + teamId: number, query?: { /** * Page number of the results to fetch. @@ -19622,16 +33396,11 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/teams/\${teamId}/repos\`, method: "GET", query: query, format: "json", @@ -19639,122 +33408,124 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: data, - type: ContentType.Json, + teamsCheckPermissionsForRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "GET", format: "json", ...params, }), /** - * No description + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Add or update team repository permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-repository-permissions)" endpoint. To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a \`422 Unprocessable Entity\` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." * - * @tags git - * @name GitCreateBlob - * @summary Create a blob - * @request POST:/repos/{owner}/{repo}/git/blobs + * @tags teams + * @name TeamsAddOrUpdateRepoPermissionsLegacy + * @summary Add or update team repository permissions (Legacy) + * @request PUT:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated */ - gitCreateBlob: ( + teamsAddOrUpdateRepoPermissionsLegacy: ( + teamId: number, owner: string, repo: string, data: { - /** The new blob's content. */ - content: string; /** - * The encoding used for `content`. Currently, `"utf-8"` and `"base64"` are supported. - * @default "utf-8" + * The permission to grant the team on this repository. Can be one of: + * \\* \`pull\` - team members can pull, but not push to or administer this repository. + * \\* \`push\` - team members can pull and push, but not administer this repository. + * \\* \`admin\` - team members can pull, push and administer this repository. + * + * If no permission is specified, the team's \`permission\` attribute will be used to determine what permission to grant the team on this repository. */ - encoding?: string; + permission?: "pull" | "push" | "admin"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "PUT", body: data, type: ContentType.Json, - format: "json", ...params, }), /** - * @description The `content` in the response will always be Base64 encoded. _Note_: This API supports blobs up to 100 megabytes in size. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a repository from a team](https://docs.github.com/rest/reference/teams#remove-a-repository-from-a-team) endpoint. If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. NOTE: This does not delete the repository, it just removes it from the team. * - * @tags git - * @name GitGetBlob - * @summary Get a blob - * @request GET:/repos/{owner}/{repo}/git/blobs/{file_sha} + * @tags teams + * @name TeamsRemoveRepoLegacy + * @summary Remove a repository from a team (Legacy) + * @request DELETE:/teams/{team_id}/repos/{owner}/{repo} + * @deprecated */ - gitGetBlob: (owner: string, repo: string, fileSha: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${fileSha}`, + teamsRemoveRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List IdP groups for a team\`](https://docs.github.com/rest/reference/teams#list-idp-groups-for-a-team) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. + * + * @tags teams + * @name TeamsListIdpGroupsForLegacy + * @summary List IdP groups for a team (Legacy) + * @request GET:/teams/{team_id}/team-sync/group-mappings + * @deprecated + */ + teamsListIdpGroupsForLegacy: (teamId: number, params: RequestParams = {}) => + this.request({ + path: \`/teams/\${teamId}/team-sync/group-mappings\`, method: "GET", format: "json", ...params, }), /** - * @description Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects). **Signature verification object** The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object: | Name | Type | Description | | ---- | ---- | ----------- | | `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. | | `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | `signature` | `string` | The signature that was extracted from the commit. | | `payload` | `string` | The value that was signed. | These are the possible values for `reason` in the `verification` object: | Value | Description | | ----- | ----------- | | `expired_key` | The key that made the signature is expired. | | `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | `gpgverify_error` | There was an error communicating with the signature verification service. | | `gpgverify_unavailable` | The signature verification service is currently unavailable. | | `unsigned` | The object does not include a signature. | | `unknown_signature_type` | A non-PGP signature was found in the commit. | | `no_user` | No user was associated with the `committer` email address in the commit. | | `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. | | `unknown_key` | The key that made the signature has not been registered with any user's account. | | `malformed_signature` | There was an error parsing the signature. | | `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | `valid` | None of the above errors applied, so the signature is considered to be verified. | + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`Create or update IdP group connections\`](https://docs.github.com/rest/reference/teams#create-or-update-idp-group-connections) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty \`groups\` array will remove all connections for a team. * - * @tags git - * @name GitCreateCommit - * @summary Create a commit - * @request POST:/repos/{owner}/{repo}/git/commits + * @tags teams + * @name TeamsCreateOrUpdateIdpGroupConnectionsLegacy + * @summary Create or update IdP group connections (Legacy) + * @request PATCH:/teams/{team_id}/team-sync/group-mappings + * @deprecated */ - gitCreateCommit: ( - owner: string, - repo: string, + teamsCreateOrUpdateIdpGroupConnectionsLegacy: ( + teamId: number, data: { - /** Information about the author of the commit. By default, the `author` will be the authenticated user and the current date. See the `author` and `committer` object below for details. */ - author?: { - /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - date?: string; - /** The email of the author (or committer) of the commit */ - email?: string; - /** The name of the author (or committer) of the commit */ - name?: string; - }; - /** Information about the person who is making the commit. By default, `committer` will use the information set in `author`. See the `author` and `committer` object below for details. */ - committer?: { - /** Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - date?: string; - /** The email of the author (or committer) of the commit */ - email?: string; - /** The name of the author (or committer) of the commit */ + /** The IdP groups you want to connect to a GitHub team. When updating, the new \`groups\` object will replace the original one. You must include any existing groups that you don't want to remove. */ + groups: { + /** @example ""moar cheese pleese"" */ + description?: string; + /** Description of the IdP group. */ + group_description: string; + /** ID of the IdP group. */ + group_id: string; + /** Name of the IdP group. */ + group_name: string; + /** @example ""caceab43fc9ffa20081c"" */ + id?: string; + /** @example ""external-team-6c13e7288ef7"" */ name?: string; - }; - /** The commit message */ - message: string; - /** The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided. */ - parents?: string[]; - /** The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the `gpgsig` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a `signature` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits. */ - signature?: string; - /** The SHA of the tree object this commit points to */ - tree: string; + }[]; + /** @example ""I am not a timestamp"" */ + synced_at?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", + this.request({ + path: \`/teams/\${teamId}/team-sync/group-mappings\`, + method: "PATCH", body: data, type: ContentType.Json, format: "json", @@ -19762,33 +33533,16 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${commitSha}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Returns an array of references from your Git database that match the supplied name. The `:ref` in the URL must be formatted as `heads/` for branches and `tags/` for tags. If the `:ref` doesn't exist in the repository, but existing refs start with `:ref`, they will be returned as an array. When you use this endpoint without providing a `:ref`, it will return an array of all the references from your Git database, including notes and stashes if they exist on the server. Anything in the namespace is returned, not just `heads` and `tags`. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". If you request matching references for a branch named `feature` but the branch `feature` doesn't exist, the response can still include other matching head refs that start with the word `feature`, such as `featureA` and `featureB`. + * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [\`List child teams\`](https://docs.github.com/rest/reference/teams#list-child-teams) endpoint. * - * @tags git - * @name GitListMatchingRefs - * @summary List matching references - * @request GET:/repos/{owner}/{repo}/git/matching-refs/{ref} + * @tags teams + * @name TeamsListChildLegacy + * @summary List child teams (Legacy) + * @request GET:/teams/{team_id}/teams + * @deprecated */ - gitListMatchingRefs: ( - owner: string, - repo: string, - ref: string, + teamsListChildLegacy: ( + teamId: number, query?: { /** * Page number of the results to fetch. @@ -19803,85 +33557,80 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/git/matching-refs/${ref}`, + this.request({ + path: \`/teams/\${teamId}/teams\`, method: "GET", query: query, format: "json", ...params, }), - + }; + user = { /** - * @description Returns a single reference from your Git database. The `:ref` in the URL must be formatted as `heads/` for branches and `tags/` for tags. If the `:ref` doesn't match an existing ref, a `404` is returned. **Note:** You need to explicitly [request a pull request](https://docs.github.com/rest/reference/pulls#get-a-pull-request) to trigger a test merge commit, which checks the mergeability of pull requests. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". + * @description If the authenticated user is authenticated through basic authentication or OAuth with the \`user\` scope, then the response lists public and private profile information. If the authenticated user is authenticated through OAuth without the \`user\` scope, then the response lists only public profile information. * - * @tags git - * @name GitGetRef - * @summary Get a reference - * @request GET:/repos/{owner}/{repo}/git/ref/{ref} + * @tags users + * @name UsersGetAuthenticated + * @summary Get the authenticated user + * @request GET:/user */ - gitGetRef: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/ref/${ref}`, + usersGetAuthenticated: (params: RequestParams = {}) => + this.request({ + path: \`/user\`, method: "GET", format: "json", ...params, }), /** - * @description Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches. - * - * @tags git - * @name GitCreateRef - * @summary Create a reference - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitCreateRef: ( - owner: string, - repo: string, - data: { - /** @example ""refs/heads/newbranch"" */ - key?: string; - /** The name of the fully qualified reference (ie: `refs/heads/master`). If it doesn't start with 'refs' and have at least two slashes, it will be rejected. */ - ref: string; - /** The SHA1 value for this reference. */ - sha: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description + * @description **Note:** If your email is set to private and you send an \`email\` parameter as part of this request to update your profile, your privacy settings are still enforced: the email address will not be displayed on your public profile or via the API. * - * @tags git - * @name GitUpdateRef - * @summary Update a reference - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} + * @tags users + * @name UsersUpdateAuthenticated + * @summary Update the authenticated user + * @request PATCH:/user */ - gitUpdateRef: ( - owner: string, - repo: string, - ref: string, + usersUpdateAuthenticated: ( data: { + /** The new short biography of the user. */ + bio?: string; /** - * Indicates whether to force the update or to make sure the update is a fast-forward update. Leaving this out or setting it to `false` will make sure you're not overwriting work. - * @default false + * The new blog URL of the user. + * @example "blog.example.com" */ - force?: boolean; - /** The SHA1 value to set this reference to */ - sha: string; + blog?: string; + /** + * The new company of the user. + * @example "Acme corporation" + */ + company?: string; + /** + * The publicly visible email address of the user. + * @example "omar@example.com" + */ + email?: string; + /** The new hiring availability of the user. */ + hireable?: boolean; + /** + * The new location of the user. + * @example "Berlin, Germany" + */ + location?: string; + /** + * The new name of the user. + * @example "Omar Jahandar" + */ + name?: string; + /** + * The new Twitter username of the user. + * @example "therealomarj" + */ + twitter_username?: string | null; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + this.request({ + path: \`/user\`, method: "PATCH", body: data, type: ContentType.Json, @@ -19890,164 +33639,111 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * @description Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then [create](https://docs.github.com/rest/reference/git#create-a-reference) the `refs/tags/[tag]` reference. If you want to create a lightweight tag, you only have to [create](https://docs.github.com/rest/reference/git#create-a-reference) the tag reference - this call would be unnecessary. **Signature verification object** The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object: | Name | Type | Description | | ---- | ---- | ----------- | | `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. | | `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | `signature` | `string` | The signature that was extracted from the commit. | | `payload` | `string` | The value that was signed. | These are the possible values for `reason` in the `verification` object: | Value | Description | | ----- | ----------- | | `expired_key` | The key that made the signature is expired. | | `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | `gpgverify_error` | There was an error communicating with the signature verification service. | | `gpgverify_unavailable` | The signature verification service is currently unavailable. | | `unsigned` | The object does not include a signature. | | `unknown_signature_type` | A non-PGP signature was found in the commit. | | `no_user` | No user was associated with the `committer` email address in the commit. | | `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. | | `unknown_key` | The key that made the signature has not been registered with any user's account. | | `malformed_signature` | There was an error parsing the signature. | | `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | `valid` | None of the above errors applied, so the signature is considered to be verified. | + * @description List the users you've blocked on your personal account. * - * @tags git - * @name GitCreateTag - * @summary Create a tag object - * @request POST:/repos/{owner}/{repo}/git/tags + * @tags users + * @name UsersListBlockedByAuthenticated + * @summary List users blocked by the authenticated user + * @request GET:/user/blocks */ - gitCreateTag: ( - owner: string, - repo: string, - data: { - /** The tag message. */ - message: string; - /** The SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - /** An object with information about the individual creating the tag. */ - tagger?: { - /** When this object was tagged. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - date?: string; - /** The email of the author of the tag */ - email?: string; - /** The name of the author of the tag */ - name?: string; - }; - /** The type of the object we're tagging. Normally this is a `commit` but it can also be a `tree` or a `blob`. */ - type: "commit" | "tree" | "blob"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: data, - type: ContentType.Json, + usersListBlockedByAuthenticated: (params: RequestParams = {}) => + this.request< + SimpleUser[], + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/user/blocks\`, + method: "GET", format: "json", ...params, }), /** - * @description **Signature verification object** The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object: | Name | Type | Description | | ---- | ---- | ----------- | | `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. | | `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. | | `signature` | `string` | The signature that was extracted from the commit. | | `payload` | `string` | The value that was signed. | These are the possible values for `reason` in the `verification` object: | Value | Description | | ----- | ----------- | | `expired_key` | The key that made the signature is expired. | | `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. | | `gpgverify_error` | There was an error communicating with the signature verification service. | | `gpgverify_unavailable` | The signature verification service is currently unavailable. | | `unsigned` | The object does not include a signature. | | `unknown_signature_type` | A non-PGP signature was found in the commit. | | `no_user` | No user was associated with the `committer` email address in the commit. | | `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. | | `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. | | `unknown_key` | The key that made the signature has not been registered with any user's account. | | `malformed_signature` | There was an error parsing the signature. | | `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. | | `valid` | None of the above errors applied, so the signature is considered to be verified. | + * No description * - * @tags git - * @name GitGetTag - * @summary Get a tag - * @request GET:/repos/{owner}/{repo}/git/tags/{tag_sha} + * @tags users + * @name UsersCheckBlocked + * @summary Check if a user is blocked by the authenticated user + * @request GET:/user/blocks/{username} */ - gitGetTag: (owner: string, repo: string, tagSha: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${tagSha}`, + usersCheckBlocked: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, method: "GET", - format: "json", ...params, }), /** - * @description The tree creation API accepts nested entries. If you specify both a tree and a nested path modifying that tree, this endpoint will overwrite the contents of the tree with the new path contents, and create a new tree structure. If you use this endpoint to add, delete, or modify the file contents in a tree, you will need to commit the tree and then update a branch to point to the commit. For more information see "[Create a commit](https://docs.github.com/rest/reference/git#create-a-commit)" and "[Update a reference](https://docs.github.com/rest/reference/git#update-a-reference)." + * No description * - * @tags git - * @name GitCreateTree - * @summary Create a tree - * @request POST:/repos/{owner}/{repo}/git/trees + * @tags users + * @name UsersBlock + * @summary Block a user + * @request PUT:/user/blocks/{username} */ - gitCreateTree: ( - owner: string, - repo: string, - data: { - /** - * The SHA1 of an existing Git tree object which will be used as the base for the new tree. If provided, a new Git tree object will be created from entries in the Git tree object pointed to by `base_tree` and entries defined in the `tree` parameter. Entries defined in the `tree` parameter will overwrite items from `base_tree` with the same `path`. If you're creating new changes on a branch, then normally you'd set `base_tree` to the SHA1 of the Git tree object of the current latest commit on the branch you're working on. - * If not provided, GitHub will create a new Git tree object from only the entries defined in the `tree` parameter. If you create a new commit pointing to such a tree, then all files which were a part of the parent commit's tree and were not defined in the `tree` parameter will be listed as deleted by the new commit. - */ - base_tree?: string; - /** Objects (of `path`, `mode`, `type`, and `sha`) specifying a tree structure. */ - tree: { - /** - * The content you want this file to have. GitHub will write this blob out and use that SHA for this entry. Use either this, or `tree.sha`. - * - * **Note:** Use either `tree.sha` or `content` to specify the contents of the entry. Using both `tree.sha` and `content` will return an error. - */ - content?: string; - /** The file mode; one of `100644` for file (blob), `100755` for executable (blob), `040000` for subdirectory (tree), `160000` for submodule (commit), or `120000` for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - /** The file referenced in the tree. */ - path?: string; - /** - * The SHA1 checksum ID of the object in the tree. Also called `tree.sha`. If the value is `null` then the file will be deleted. - * - * **Note:** Use either `tree.sha` or `content` to specify the contents of the entry. Using both `tree.sha` and `content` will return an error. - */ - sha?: string | null; - /** Either `blob`, `tree`, or `commit`. */ - type?: "blob" | "tree" | "commit"; - }[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", + usersBlock: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, + method: "PUT", ...params, }), /** - * @description Returns a single tree using the SHA1 value for that tree. If `truncated` is `true` in the response then the number of items in the `tree` array exceeded our maximum limit. If you need to fetch more items, use the non-recursive method of fetching trees, and fetch one sub-tree at a time. + * No description * - * @tags git - * @name GitGetTree - * @summary Get a tree - * @request GET:/repos/{owner}/{repo}/git/trees/{tree_sha} + * @tags users + * @name UsersUnblock + * @summary Unblock a user + * @request DELETE:/user/blocks/{username} */ - gitGetTree: ( - owner: string, - repo: string, - treeSha: string, - query?: { - /** Setting this parameter to any value returns the objects or subtrees referenced by the tree specified in `:tree_sha`. For example, setting `recursive` to any of the following will enable returning objects or subtrees: `0`, `1`, `"true"`, and `"false"`. Omit this parameter to prevent recursively returning objects or subtrees. */ - recursive?: string; + usersUnblock: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/blocks/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Sets the visibility for your primary email addresses. + * + * @tags users + * @name UsersSetPrimaryEmailVisibilityForAuthenticated + * @summary Set primary email visibility for the authenticated user + * @request PATCH:/user/email/visibility + */ + usersSetPrimaryEmailVisibilityForAuthenticated: ( + data: { + /** + * An email address associated with the GitHub user account to manage. + * @example "org@example.com" + */ + email: string; + /** Denotes whether an email is publically visible. */ + visibility: "public" | "private"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${treeSha}`, - method: "GET", - query: query, + this.request({ + path: \`/user/email/visibility\`, + method: "PATCH", + body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * No description + * @description Lists all of your email addresses, and specifies which one is visible to the public. This endpoint is accessible with the \`user:email\` scope. * - * @tags repos - * @name ReposListWebhooks - * @summary List repository webhooks - * @request GET:/repos/{owner}/{repo}/hooks + * @tags users + * @name UsersListEmailsForAuthenticated + * @summary List email addresses for the authenticated user + * @request GET:/user/emails */ - reposListWebhooks: ( - owner: string, - repo: string, + usersListEmailsForAuthenticated: ( query?: { /** * Page number of the results to fetch. @@ -20062,8 +33758,8 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/hooks`, + this.request({ + path: \`/user/emails\`, method: "GET", query: query, format: "json", @@ -20071,49 +33767,28 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/hooks`, + this.request({ + path: \`/user/emails\`, method: "POST", body: data, type: ContentType.Json, @@ -20122,213 +33797,187 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", + usersDeleteEmailForAuthenticated: ( + data: + | { + /** Email addresses associated with the GitHub user account. */ + emails: string[]; + } + | string[] + | string, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/emails\`, + method: "DELETE", + body: data, + type: ContentType.Json, ...params, }), /** - * @description Updates a webhook configured in a repository. If you previously had a `secret` set, you must provide the same `secret` or set a new `secret` or the secret will be removed. If you are only updating individual webhook `config` properties, use "[Update a webhook configuration for a repository](/rest/reference/repos#update-a-webhook-configuration-for-a-repository)." + * @description Lists the people following the authenticated user. * - * @tags repos - * @name ReposUpdateWebhook - * @summary Update a repository webhook - * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id} + * @tags users + * @name UsersListFollowersForAuthenticatedUser + * @summary List followers of the authenticated user + * @request GET:/user/followers */ - reposUpdateWebhook: ( - owner: string, - repo: string, - hookId: number, - data: { + usersListFollowersForAuthenticatedUser: ( + query?: { /** - * Determines if notifications are sent when the webhook is triggered. Set to `true` to send notifications. - * @default true + * Page number of the results to fetch. + * @default 1 */ - active?: boolean; - /** Determines a list of events to be added to the list of events that the Hook triggers for. */ - add_events?: string[]; - /** Key/value pairs to provide settings for this webhook. [These are defined below](https://docs.github.com/rest/reference/repos#create-hook-config-params). */ - config?: { - /** @example ""bar@example.com"" */ - address?: string; - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ - content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ - insecure_ssl?: WebhookConfigInsecureSsl; - /** @example ""The Serious Room"" */ - room?: string; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ - secret?: WebhookConfigSecret; - /** The URL to which the payloads will be delivered. */ - url: WebhookConfigUrl; - }; + page?: number; /** - * Determines what [events](https://docs.github.com/webhooks/event-payloads) the hook is triggered for. This replaces the entire array of events. - * @default ["push"] + * Results per page (max 100) + * @default 30 */ - events?: string[]; - /** Determines a list of events to be removed from the list of events that the Hook triggers for. */ - remove_events?: string[]; + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/user/followers\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * No description - * - * @tags repos - * @name ReposDeleteWebhook - * @summary Delete a repository webhook - * @request DELETE:/repos/{owner}/{repo}/hooks/{hook_id} - */ - reposDeleteWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Returns the webhook configuration for a repository. To get more information about the webhook, including the `active` state and `events`, use "[Get a repository webhook](/rest/reference/orgs#get-a-repository-webhook)." Access tokens must have the `read:repo_hook` or `repo` scope, and GitHub Apps must have the `repository_hooks:read` permission. + * @description Lists the people who the authenticated user follows. * - * @tags repos - * @name ReposGetWebhookConfigForRepo - * @summary Get a webhook configuration for a repository - * @request GET:/repos/{owner}/{repo}/hooks/{hook_id}/config + * @tags users + * @name UsersListFollowedByAuthenticated + * @summary List the people the authenticated user follows + * @request GET:/user/following */ - reposGetWebhookConfigForRepo: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/config`, + usersListFollowedByAuthenticated: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/following\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Updates the webhook configuration for a repository. To update more information about the webhook, including the `active` state and `events`, use "[Update a repository webhook](/rest/reference/orgs#update-a-repository-webhook)." Access tokens must have the `write:repo_hook` or `repo` scope, and GitHub Apps must have the `repository_hooks:write` permission. + * No description * - * @tags repos - * @name ReposUpdateWebhookConfigForRepo - * @summary Update a webhook configuration for a repository - * @request PATCH:/repos/{owner}/{repo}/hooks/{hook_id}/config + * @tags users + * @name UsersCheckPersonIsFollowedByAuthenticated + * @summary Check if a person is followed by the authenticated user + * @request GET:/user/following/{username} */ - reposUpdateWebhookConfigForRepo: ( - owner: string, - repo: string, - hookId: number, - data: { - /** The media type used to serialize the payloads. Supported values include `json` and `form`. The default is `form`. */ - content_type?: WebhookConfigContentType; - /** Determines whether the SSL certificate of the host for `url` will be verified when delivering payloads. Supported values include `0` (verification is performed) and `1` (verification is not performed). The default is `0`. **We strongly recommend not setting this to `1` as you are subject to man-in-the-middle and other attacks.** */ - insecure_ssl?: WebhookConfigInsecureSsl; - /** If provided, the `secret` will be used as the `key` to generate the HMAC hex digest value for [delivery signature headers](https://docs.github.com/webhooks/event-payloads/#delivery-headers). */ - secret?: WebhookConfigSecret; - /** The URL to which the payloads will be delivered. */ - url?: WebhookConfigUrl; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/config`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", + usersCheckPersonIsFollowedByAuthenticated: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/following/\${username}\`, + method: "GET", ...params, }), /** - * @description This will trigger a [ping event](https://docs.github.com/webhooks/#ping-event) to be sent to the hook. + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. * - * @tags repos - * @name ReposPingWebhook - * @summary Ping a repository webhook - * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/pings + * @tags users + * @name UsersFollow + * @summary Follow a user + * @request PUT:/user/following/{username} */ - reposPingWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + usersFollow: (username: string, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/pings`, - method: "POST", + path: \`/user/following/\${username}\`, + method: "PUT", ...params, }), /** - * @description This will trigger the hook with the latest push to the current repository if the hook is subscribed to `push` events. If the hook is not subscribed to `push` events, the server will respond with 204 but no test POST will be generated. **Note**: Previously `/repos/:owner/:repo/hooks/:hook_id/test` + * @description Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the \`user:follow\` scope. * - * @tags repos - * @name ReposTestPushWebhook - * @summary Test the push repository webhook - * @request POST:/repos/{owner}/{repo}/hooks/{hook_id}/tests + * @tags users + * @name UsersUnfollow + * @summary Unfollow a user + * @request DELETE:/user/following/{username} */ - reposTestPushWebhook: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => + usersUnfollow: (username: string, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", + path: \`/user/following/\${username}\`, + method: "DELETE", ...params, }), /** - * @description View the progress of an import. **Import status** This section includes details about the possible values of the `status` field of the Import Progress response. An import that does not have errors will progress through these steps: * `detecting` - the "detection" step of the import is in progress because the request did not include a `vcs` parameter. The import is identifying the type of source control present at the URL. * `importing` - the "raw" step of the import is in progress. This is where commit data is fetched from the original repository. The import progress response will include `commit_count` (the total number of raw commits that will be imported) and `percent` (0 - 100, the current progress through the import). * `mapping` - the "rewrite" step of the import is in progress. This is where SVN branches are converted to Git branches, and where author updates are applied. The import progress response does not include progress information. * `pushing` - the "push" step of the import is in progress. This is where the importer updates the repository on GitHub. The import progress response will include `push_percent`, which is the percent value reported by `git push` when it is "Writing objects". * `complete` - the import is complete, and the repository is ready on GitHub. If there are problems, you will see one of these in the `status` field: * `auth_failed` - the import requires authentication in order to connect to the original repository. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * `error` - the import encountered an error. The import progress response will include the `failed_step` and an error message. Contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com) for more information. * `detection_needs_auth` - the importer requires authentication for the originating repository to continue detection. To update authentication for the import, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. * `detection_found_nothing` - the importer didn't recognize any source control at the URL. To resolve, [Cancel the import](https://docs.github.com/rest/reference/migrations#cancel-an-import) and [retry](https://docs.github.com/rest/reference/migrations#start-an-import) with the correct URL. * `detection_found_multiple` - the importer found several projects or repositories at the provided URL. When this is the case, the Import Progress response will also include a `project_choices` field with the possible project choices as values. To update project choice, please see the [Update an import](https://docs.github.com/rest/reference/migrations#update-an-import) section. **The project_choices field** When multiple projects are found at the provided URL, the response hash will include a `project_choices` field, the value of which is an array of hashes each representing a project choice. The exact key/value pairs of the project hashes will differ depending on the version control type. **Git LFS related fields** This section includes details about Git LFS related fields that may be present in the Import Progress response. * `use_lfs` - describes whether the import has been opted in or out of using Git LFS. The value can be `opt_in`, `opt_out`, or `undecided` if no action has been taken. * `has_large_files` - the boolean value describing whether files larger than 100MB were found during the `importing` step. * `large_files_size` - the total size in gigabytes of files larger than 100MB found in the originating repository. * `large_files_count` - the total number of files larger than 100MB found in the originating repository. To see a list of these files, make a "Get Large Files" request. + * @description Lists the current user's GPG keys. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags migrations - * @name MigrationsGetImportStatus - * @summary Get an import status - * @request GET:/repos/{owner}/{repo}/import + * @tags users + * @name UsersListGpgKeysForAuthenticated + * @summary List GPG keys for the authenticated user + * @request GET:/user/gpg_keys */ - migrationsGetImportStatus: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/import`, + usersListGpgKeysForAuthenticated: ( + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/gpg_keys\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description Start a source import to a GitHub repository using GitHub Importer. + * @description Adds a GPG key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least \`write:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags migrations - * @name MigrationsStartImport - * @summary Start an import - * @request PUT:/repos/{owner}/{repo}/import + * @tags users + * @name UsersCreateGpgKeyForAuthenticated + * @summary Create a GPG key for the authenticated user + * @request POST:/user/gpg_keys */ - migrationsStartImport: ( - owner: string, - repo: string, + usersCreateGpgKeyForAuthenticated: ( data: { - /** For a tfvc import, the name of the project that is being imported. */ - tfvc_project?: string; - /** The originating VCS type. Can be one of `subversion`, `git`, `mercurial`, or `tfvc`. Please be aware that without this parameter, the import job will take additional time to detect the VCS type before beginning the import. This detection step will be reflected in the response. */ - vcs?: "subversion" | "git" | "mercurial" | "tfvc"; - /** If authentication is required, the password to provide to `vcs_url`. */ - vcs_password?: string; - /** The URL of the originating repository. */ - vcs_url: string; - /** If authentication is required, the username to provide to `vcs_url`. */ - vcs_username?: string; + /** A GPG key in ASCII-armored format. */ + armored_public_key: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/import`, - method: "PUT", + this.request({ + path: \`/user/gpg_keys\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -20336,71 +33985,71 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/import`, - method: "PATCH", - body: data, - type: ContentType.Json, + usersGetGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys/\${gpgKeyId}\`, + method: "GET", format: "json", ...params, }), /** - * @description Stop an import for a repository. + * @description Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:gpg_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). * - * @tags migrations - * @name MigrationsCancelImport - * @summary Cancel an import - * @request DELETE:/repos/{owner}/{repo}/import + * @tags users + * @name UsersDeleteGpgKeyForAuthenticated + * @summary Delete a GPG key for the authenticated user + * @request DELETE:/user/gpg_keys/{gpg_key_id} */ - migrationsCancelImport: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/import`, + usersDeleteGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/gpg_keys/\${gpgKeyId}\`, method: "DELETE", ...params, }), /** - * @description Each type of source control system represents authors in a different way. For example, a Git commit author has a display name and an email address, but a Subversion commit author just has a username. The GitHub Importer will make the author information valid, but the author might not be correct. For example, it will change the bare Subversion username `hubot` into something like `hubot `. This endpoint and the [Map a commit author](https://docs.github.com/rest/reference/migrations#map-a-commit-author) endpoint allow you to provide correct Git author information. + * @description Lists installations of your GitHub App that the authenticated user has explicit permission (\`:read\`, \`:write\`, or \`:admin\`) to access. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You can find the permissions for the installation under the \`permissions\` key. * - * @tags migrations - * @name MigrationsGetCommitAuthors - * @summary Get commit authors - * @request GET:/repos/{owner}/{repo}/import/authors + * @tags apps + * @name AppsListInstallationsForAuthenticatedUser + * @summary List app installations accessible to the user access token + * @request GET:/user/installations */ - migrationsGetCommitAuthors: ( - owner: string, - repo: string, + appsListInstallationsForAuthenticatedUser: ( query?: { - /** A user ID. Only return users with an ID greater than this ID. */ - since?: number; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/import/authors`, + this.request< + { + installations: Installation[]; + total_count: number; + }, + | BasicError + | { + documentation_url: string; + message: string; + } + >({ + path: \`/user/installations\`, method: "GET", query: query, format: "json", @@ -20408,126 +34057,101 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/import/authors/${authorId}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List files larger than 100MB found during the import - * - * @tags migrations - * @name MigrationsGetLargeFiles - * @summary Get large files - * @request GET:/repos/{owner}/{repo}/import/large_files - */ - migrationsGetLargeFiles: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/import/large_files`, + this.request< + { + repositories: Repository[]; + repository_selection?: string; + total_count: number; + }, + BasicError + >({ + path: \`/user/installations/\${installationId}/repositories\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description You can import repositories from Subversion, Mercurial, and TFS that include files larger than 100MB. This ability is powered by [Git LFS](https://git-lfs.github.com). You can learn more about our LFS feature and working with large files [on our help site](https://help.github.com/articles/versioning-large-files/). + * @description Add a single repository to an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. * - * @tags migrations - * @name MigrationsSetLfsPreference - * @summary Update Git LFS preference - * @request PATCH:/repos/{owner}/{repo}/import/lfs + * @tags apps + * @name AppsAddRepoToInstallation + * @summary Add a repository to an app installation + * @request PUT:/user/installations/{installation_id}/repositories/{repository_id} */ - migrationsSetLfsPreference: ( - owner: string, - repo: string, - data: { - /** Can be one of `opt_in` (large files will be stored using Git LFS) or `opt_out` (large files will be removed during the import). */ - use_lfs: "opt_in" | "opt_out"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/import/lfs`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", + appsAddRepoToInstallation: (installationId: number, repositoryId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/installations/\${installationId}/repositories/\${repositoryId}\`, + method: "PUT", ...params, }), /** - * @description Enables an authenticated GitHub App to find the repository's installation information. The installation's account type will be either an organization or a user account, depending which account the repository belongs to. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. + * @description Remove a single repository from an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. * * @tags apps - * @name AppsGetRepoInstallation - * @summary Get a repository installation for the authenticated app - * @request GET:/repos/{owner}/{repo}/installation - */ - appsGetRepoInstallation: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/installation`, - method: "GET", - format: "json", + * @name AppsRemoveRepoFromInstallation + * @summary Remove a repository from an app installation + * @request DELETE:/user/installations/{installation_id}/repositories/{repository_id} + */ + appsRemoveRepoFromInstallation: (installationId: number, repositoryId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/installations/\${installationId}/repositories/\${repositoryId}\`, + method: "DELETE", ...params, }), /** - * @description Shows which type of GitHub user can interact with this repository and when the restriction expires. If there are no restrictions, you will see an empty response. + * @description Shows which type of GitHub user can interact with your public repositories and when the restriction expires. If there are no restrictions, you will see an empty response. * * @tags interactions - * @name InteractionsGetRestrictionsForRepo - * @summary Get interaction restrictions for a repository - * @request GET:/repos/{owner}/{repo}/interaction-limits + * @name InteractionsGetRestrictionsForAuthenticatedUser + * @summary Get interaction restrictions for your public repositories + * @request GET:/user/interaction-limits */ - interactionsGetRestrictionsForRepo: (owner: string, repo: string, params: RequestParams = {}) => + interactionsGetRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/interaction-limits`, + path: \`/user/interaction-limits\`, method: "GET", format: "json", ...params, }), /** - * @description Temporarily restricts interactions to a certain type of GitHub user within the given repository. You must have owner or admin access to set these restrictions. If an interaction limit is set for the user or organization that owns this repository, you will receive a `409 Conflict` response and will not be able to use this endpoint to change the interaction limit for a single repository. + * @description Temporarily restricts which type of GitHub user can interact with your public repositories. Setting the interaction limit at the user level will overwrite any interaction limits that are set for individual repositories owned by the user. * * @tags interactions - * @name InteractionsSetRestrictionsForRepo - * @summary Set interaction restrictions for a repository - * @request PUT:/repos/{owner}/{repo}/interaction-limits + * @name InteractionsSetRestrictionsForAuthenticatedUser + * @summary Set interaction restrictions for your public repositories + * @request PUT:/user/interaction-limits */ - interactionsSetRestrictionsForRepo: ( - owner: string, - repo: string, - data: InteractionLimit, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/interaction-limits`, + interactionsSetRestrictionsForAuthenticatedUser: (data: InteractionLimit, params: RequestParams = {}) => + this.request({ + path: \`/user/interaction-limits\`, method: "PUT", body: data, type: ContentType.Json, @@ -20536,31 +34160,89 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/interaction-limits`, + interactionsRemoveRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/interaction-limits\`, method: "DELETE", ...params, }), /** - * @description When authenticating as a user with admin rights to a repository, this endpoint will list all currently open repository invitations. + * @description List issues across owned and member repositories assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the \`pull_request\` key. Be aware that the \`id\` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. * - * @tags repos - * @name ReposListInvitations - * @summary List repository invitations - * @request GET:/repos/{owner}/{repo}/invitations + * @tags issues + * @name IssuesListForAuthenticatedUser + * @summary List user account issues assigned to the authenticated user + * @request GET:/user/issues */ - reposListInvitations: ( - owner: string, - repo: string, + issuesListForAuthenticatedUser: ( + query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; + /** + * Indicates which sorts of issues to return. Can be one of: + * \\* \`assigned\`: Issues assigned to you + * \\* \`created\`: Issues created by you + * \\* \`mentioned\`: Issues mentioning you + * \\* \`subscribed\`: Issues you're subscribed to updates for + * \\* \`all\`: All issues the authenticated user can see, regardless of participation or creation + * @default "assigned" + */ + filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; + /** A list of comma separated label names. Example: \`bug,ui,@high\` */ + labels?: string; + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: \`YYYY-MM-DDTHH:MM:SSZ\`. */ + since?: string; + /** + * What to sort results by. Can be either \`created\`, \`updated\`, \`comments\`. + * @default "created" + */ + sort?: "created" | "updated" | "comments"; + /** + * Indicates the state of the issues to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/user/issues\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * @description Lists the public SSH keys for the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`read:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersListPublicSshKeysForAuthenticated + * @summary List public SSH keys for the authenticated user + * @request GET:/user/keys + */ + usersListPublicSshKeysForAuthenticated: ( query?: { /** * Page number of the results to fetch. @@ -20575,8 +34257,8 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/invitations`, + this.request({ + path: \`/user/keys\`, method: "GET", query: query, format: "json", @@ -20584,26 +34266,31 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/invitations/${invitationId}`, - method: "PATCH", + this.request({ + path: \`/user/keys\`, + method: "POST", body: data, type: ContentType.Json, format: "json", @@ -20611,47 +34298,46 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/invitations/${invitationId}`, + usersGetPublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/keys/\${keyId}\`, + method: "GET", + format: "json", + ...params, + }), + + /** + * @description Removes a public SSH key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least \`admin:public_key\` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * + * @tags users + * @name UsersDeletePublicSshKeyForAuthenticated + * @summary Delete a public SSH key for the authenticated user + * @request DELETE:/user/keys/{key_id} + */ + usersDeletePublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), /** - * @description List issues in a repository. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). * - * @tags issues - * @name IssuesListForRepo - * @summary List repository issues - * @request GET:/repos/{owner}/{repo}/issues + * @tags apps + * @name AppsListSubscriptionsForAuthenticatedUser + * @summary List subscriptions for the authenticated user + * @request GET:/user/marketplace_purchases */ - issuesListForRepo: ( - owner: string, - repo: string, + appsListSubscriptionsForAuthenticatedUser: ( query?: { - /** Can be the name of a user. Pass in `none` for issues with no assigned user, and `*` for issues assigned to any user. */ - assignee?: string; - /** The user that created the issue. */ - creator?: string; - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** A list of comma separated label names. Example: `bug,ui,@high` */ - labels?: string; - /** A user that's mentioned in the issue. */ - mentioned?: string; - /** If an `integer` is passed, it should refer to a milestone by its `number` field. If the string `*` is passed, issues with any milestone are accepted. If the string `none` is passed, issues without milestones are returned. */ - milestone?: string; /** * Page number of the results to fetch. * @default 1 @@ -20662,23 +34348,11 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues`, + this.request({ + path: \`/user/marketplace_purchases\`, method: "GET", query: query, format: "json", @@ -20686,72 +34360,46 @@ export class Api extends HttpClient - this.request< - Issue, - | BasicError - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: data, - type: ContentType.Json, + this.request({ + path: \`/user/marketplace_purchases/stubbed\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description By default, Issue Comments are ordered by ascending ID. + * No description * - * @tags issues - * @name IssuesListCommentsForRepo - * @summary List issue comments for a repository - * @request GET:/repos/{owner}/{repo}/issues/comments + * @tags orgs + * @name OrgsListMembershipsForAuthenticatedUser + * @summary List organization memberships for the authenticated user + * @request GET:/user/memberships/orgs */ - issuesListCommentsForRepo: ( - owner: string, - repo: string, + orgsListMembershipsForAuthenticatedUser: ( query?: { - /** Either `asc` or `desc`. Ignored without the `sort` parameter. */ - direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -20762,18 +34410,13 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + this.request({ + path: \`/user/memberships/orgs\`, method: "GET", query: query, format: "json", @@ -20783,14 +34426,14 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + orgsGetMembershipForAuthenticatedUser: (org: string, params: RequestParams = {}) => + this.request({ + path: \`/user/memberships/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -20799,23 +34442,21 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + this.request({ + path: \`/user/memberships/orgs/\${org}\`, method: "PATCH", body: data, type: ContentType.Json, @@ -20824,35 +34465,15 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description List the reactions to an [issue comment](https://docs.github.com/rest/reference/issues#comments). + * @description Lists all migrations a user has started. * - * @tags reactions - * @name ReactionsListForIssueComment - * @summary List reactions for an issue comment - * @request GET:/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions + * @tags migrations + * @name MigrationsListForAuthenticatedUser + * @summary List user migrations + * @request GET:/user/migrations */ - reactionsListForIssueComment: ( - owner: string, - repo: string, - commentId: number, + migrationsListForAuthenticatedUser: ( query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; /** * Page number of the results to fetch. * @default 1 @@ -20866,15 +34487,8 @@ export class Api extends HttpClient - this.request< - Reaction[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}/reactions`, + this.request({ + path: \`/user/migrations\`, method: "GET", query: query, format: "json", @@ -20882,32 +34496,36 @@ export class Api extends HttpClient - this.request< - Reaction, - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}/reactions`, + this.request({ + path: \`/user/migrations\`, method: "POST", body: data, type: ContentType.Json, @@ -20916,53 +34534,22 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}/reactions/${reactionId}`, - method: "DELETE", - ...params, - }), - - /** - * No description + * @description Fetches a single user migration. The response includes the \`state\` of the migration, which can be one of the following values: * \`pending\` - the migration hasn't started yet. * \`exporting\` - the migration is in progress. * \`exported\` - the migration finished successfully. * \`failed\` - the migration failed. Once the migration has been \`exported\` you can [download the migration archive](https://docs.github.com/rest/reference/migrations#download-a-user-migration-archive). * - * @tags issues - * @name IssuesListEventsForRepo - * @summary List issue events for a repository - * @request GET:/repos/{owner}/{repo}/issues/events + * @tags migrations + * @name MigrationsGetStatusForAuthenticatedUser + * @summary Get a user migration status + * @request GET:/user/migrations/{migration_id} */ - issuesListEventsForRepo: ( - owner: string, - repo: string, + migrationsGetStatusForAuthenticatedUser: ( + migrationId: number, query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + exclude?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + this.request({ + path: \`/user/migrations/\${migrationId}\`, method: "GET", query: query, format: "json", @@ -20970,159 +34557,91 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description The API returns a [`301 Moved Permanently` status](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-redirects-redirects) if the issue was [transferred](https://help.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API returns a `404 Not Found` status. If the issue was deleted from a repository where the authenticated user has read access, the API returns a `410 Gone` status. To receive webhook events for transferred and deleted issues, subscribe to the [`issues`](https://docs.github.com/webhooks/event-payloads/#issues) webhook. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @description Fetches the URL to download the migration archive as a \`tar.gz\` file. Depending on the resources your repository uses, the migration archive can contain JSON files with data for these objects: * attachments * bases * commit\\_comments * issue\\_comments * issue\\_events * issues * milestones * organizations * projects * protected\\_branches * pull\\_request\\_reviews * pull\\_requests * releases * repositories * review\\_comments * schema * users The archive will also contain an \`attachments\` directory that includes all attachment files uploaded to GitHub.com and a \`repositories\` directory that contains the repository's Git data. * - * @tags issues - * @name IssuesGet - * @summary Get an issue - * @request GET:/repos/{owner}/{repo}/issues/{issue_number} + * @tags migrations + * @name MigrationsGetArchiveForAuthenticatedUser + * @summary Download a user migration archive + * @request GET:/user/migrations/{migration_id}/archive */ - issuesGet: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}`, + migrationsGetArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/archive\`, method: "GET", - format: "json", ...params, }), /** - * @description Issue owners and users with push access can edit an issue. - * - * @tags issues - * @name IssuesUpdate - * @summary Update an issue - * @request PATCH:/repos/{owner}/{repo}/issues/{issue_number} - */ - issuesUpdate: ( - owner: string, - repo: string, - issueNumber: number, - data: { - /** Login for the user that this issue should be assigned to. **This field is deprecated.** */ - assignee?: string | null; - /** Logins for Users to assign to this issue. Pass one or more user logins to _replace_ the set of assignees on this Issue. Send an empty array (`[]`) to clear all assignees from the Issue. _NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise._ */ - assignees?: string[]; - /** The contents of the issue. */ - body?: string; - /** Labels to associate with this issue. Pass one or more Labels to _replace_ the set of Labels on this Issue. Send an empty array (`[]`) to clear all Labels from the Issue. _NOTE: Only users with push access can set labels for issues. Labels are silently dropped otherwise._ */ - labels?: ( - | string - | { - color?: string | null; - description?: string | null; - id?: number; - name?: string; - } - )[]; - /** The `number` of the milestone to associate this issue with or `null` to remove current. _NOTE: Only users with push access can set the milestone for issues. The milestone is silently dropped otherwise._ */ - milestone?: string | number | null; - /** State of the issue. Either `open` or `closed`. */ - state?: "open" | "closed"; - /** The title of the issue. */ - title?: string | number; - }, - params: RequestParams = {}, - ) => - this.request< - Issue, - | BasicError - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", + * @description Deletes a previous migration archive. Downloadable migration archives are automatically deleted after seven days. Migration metadata, which is returned in the [List user migrations](https://docs.github.com/rest/reference/migrations#list-user-migrations) and [Get a user migration status](https://docs.github.com/rest/reference/migrations#get-a-user-migration-status) endpoints, will continue to be available even after an archive is deleted. + * + * @tags migrations + * @name MigrationsDeleteArchiveForAuthenticatedUser + * @summary Delete a user migration archive + * @request DELETE:/user/migrations/{migration_id}/archive + */ + migrationsDeleteArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/archive\`, + method: "DELETE", ...params, }), /** - * @description Adds up to 10 assignees to an issue. Users already assigned to an issue are not replaced. + * @description Unlocks a repository. You can lock repositories when you [start a user migration](https://docs.github.com/rest/reference/migrations#start-a-user-migration). Once the migration is complete you can unlock each repository to begin using it again or [delete the repository](https://docs.github.com/rest/reference/repos#delete-a-repository) if you no longer need the source data. Returns a status of \`404 Not Found\` if the repository is not locked. * - * @tags issues - * @name IssuesAddAssignees - * @summary Add assignees to an issue - * @request POST:/repos/{owner}/{repo}/issues/{issue_number}/assignees + * @tags migrations + * @name MigrationsUnlockRepoForAuthenticatedUser + * @summary Unlock a user repository + * @request DELETE:/user/migrations/{migration_id}/repos/{repo_name}/lock */ - issuesAddAssignees: ( - owner: string, - repo: string, - issueNumber: number, - data: { - /** Usernames of people to assign this issue to. _NOTE: Only users with push access can add assignees to an issue. Assignees are silently ignored otherwise._ */ - assignees?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/assignees`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", + migrationsUnlockRepoForAuthenticatedUser: (migrationId: number, repoName: string, params: RequestParams = {}) => + this.request({ + path: \`/user/migrations/\${migrationId}/repos/\${repoName}/lock\`, + method: "DELETE", ...params, }), /** - * @description Removes one or more assignees from an issue. + * @description Lists all the repositories for this user migration. * - * @tags issues - * @name IssuesRemoveAssignees - * @summary Remove assignees from an issue - * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/assignees + * @tags migrations + * @name MigrationsListReposForUser + * @summary List repositories for a user migration + * @request GET:/user/migrations/{migration_id}/repositories */ - issuesRemoveAssignees: ( - owner: string, - repo: string, - issueNumber: number, - data: { - /** Usernames of assignees to remove from an issue. _NOTE: Only users with push access can remove assignees from an issue. Assignees are silently ignored otherwise._ */ - assignees?: string[]; + migrationsListReposForUser: ( + migrationId: number, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/assignees`, - method: "DELETE", - body: data, - type: ContentType.Json, + this.request({ + path: \`/user/migrations/\${migrationId}/repositories\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Issue Comments are ordered by ascending ID. + * @description List organizations for the authenticated user. **OAuth scope requirements** This only lists organizations that your authorization allows you to operate on in some way (e.g., you can list teams with \`read:org\` scope, you can publicize your organization membership with \`user\` scope, etc.). Therefore, this API requires at least \`user\` or \`read:org\` scope. OAuth requests with insufficient scope receive a \`403 Forbidden\` response. * - * @tags issues - * @name IssuesListComments - * @summary List issue comments - * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/comments + * @tags orgs + * @name OrgsListForAuthenticatedUser + * @summary List organizations for the authenticated user + * @request GET:/user/orgs */ - issuesListComments: ( - owner: string, - repo: string, - issueNumber: number, + orgsListForAuthenticatedUser: ( query?: { /** * Page number of the results to fetch. @@ -21134,13 +34653,11 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/comments`, + this.request({ + path: \`/user/orgs\`, method: "GET", query: query, format: "json", @@ -21148,25 +34665,38 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/comments`, + this.request< + Project, + | BasicError + | { + documentation_url: string; + message: string; + } + | ValidationErrorSimple + >({ + path: \`/user/projects\`, method: "POST", body: data, type: ContentType.Json, @@ -21175,17 +34705,14 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/events`, + this.request({ + path: \`/user/public_emails\`, method: "GET", query: query, format: "json", @@ -21209,18 +34736,27 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/labels`, + this.request({ + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -21243,25 +34798,105 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/labels`, + this.request({ + path: \`/user/repos\`, method: "POST", body: data, type: ContentType.Json, @@ -21270,28 +34905,32 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/labels`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/user/repository_invitations\`, + method: "GET", + query: query, format: "json", ...params, }), @@ -21299,96 +34938,48 @@ export class Api extends HttpClient + reposAcceptInvitation: (invitationId: number, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/labels`, - method: "DELETE", - ...params, - }), - - /** - * @description Removes the specified label from the issue, and returns the remaining labels on the issue. This endpoint returns a `404 Not Found` status if the label does not exist. - * - * @tags issues - * @name IssuesRemoveLabel - * @summary Remove a label from an issue - * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/labels/{name} - */ - issuesRemoveLabel: (owner: string, repo: string, issueNumber: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/labels/${name}`, - method: "DELETE", - format: "json", - ...params, - }), - - /** - * @description Users with push access can lock an issue or pull request's conversation. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - * - * @tags issues - * @name IssuesLock - * @summary Lock an issue - * @request PUT:/repos/{owner}/{repo}/issues/{issue_number}/lock - */ - issuesLock: ( - owner: string, - repo: string, - issueNumber: number, - data: { - /** - * The reason for locking the issue or pull request conversation. Lock will fail if you don't use one of these reasons: - * \* `off-topic` - * \* `too heated` - * \* `resolved` - * \* `spam` - */ - lock_reason?: "off-topic" | "too heated" | "resolved" | "spam"; - } | null, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/lock`, - method: "PUT", - body: data, - type: ContentType.Json, + path: \`/user/repository_invitations/\${invitationId}\`, + method: "PATCH", ...params, }), /** - * @description Users with push access can unlock an issue's conversation. + * No description * - * @tags issues - * @name IssuesUnlock - * @summary Unlock an issue - * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/lock + * @tags repos + * @name ReposDeclineInvitation + * @summary Decline a repository invitation + * @request DELETE:/user/repository_invitations/{invitation_id} */ - issuesUnlock: (owner: string, repo: string, issueNumber: number, params: RequestParams = {}) => + reposDeclineInvitation: (invitationId: number, params: RequestParams = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/lock`, + path: \`/user/repository_invitations/\${invitationId}\`, method: "DELETE", ...params, }), /** - * @description List the reactions to an [issue](https://docs.github.com/rest/reference/issues). + * @description Lists repositories the authenticated user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: * - * @tags reactions - * @name ReactionsListForIssue - * @summary List reactions for an issue - * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/reactions + * @tags activity + * @name ActivityListReposStarredByAuthenticatedUser + * @summary List repositories starred by the authenticated user + * @request GET:/user/starred */ - reactionsListForIssue: ( - owner: string, - repo: string, - issueNumber: number, + activityListReposStarredByAuthenticatedUser: ( query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -21399,18 +34990,16 @@ export class Api extends HttpClient - this.request< - Reaction[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/reactions`, + this.request({ + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -21418,72 +35007,59 @@ export class Api extends HttpClient - this.request< - Reaction, - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/reactions`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", + activityCheckRepoIsStarredByAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "GET", ...params, }), /** - * @description **Note:** You can also specify a repository by `repository_id` using the route `DELETE /repositories/:repository_id/issues/:issue_number/reactions/:reaction_id`. Delete a reaction to an [issue](https://docs.github.com/rest/reference/issues/). + * @description Note that you'll need to set \`Content-Length\` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." * - * @tags reactions - * @name ReactionsDeleteForIssue - * @summary Delete an issue reaction - * @request DELETE:/repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id} + * @tags activity + * @name ActivityStarRepoForAuthenticatedUser + * @summary Star a repository for the authenticated user + * @request PUT:/user/starred/{owner}/{repo} */ - reactionsDeleteForIssue: ( - owner: string, - repo: string, - issueNumber: number, - reactionId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/reactions/${reactionId}`, - method: "DELETE", + activityStarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "PUT", ...params, }), /** * No description * - * @tags issues - * @name IssuesListEventsForTimeline - * @summary List timeline events for an issue - * @request GET:/repos/{owner}/{repo}/issues/{issue_number}/timeline + * @tags activity + * @name ActivityUnstarRepoForAuthenticatedUser + * @summary Unstar a repository for the authenticated user + * @request DELETE:/user/starred/{owner}/{repo} */ - issuesListEventsForTimeline: ( - owner: string, - repo: string, - issueNumber: number, + activityUnstarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => + this.request({ + path: \`/user/starred/\${owner}/\${repo}\`, + method: "DELETE", + ...params, + }), + + /** + * @description Lists repositories the authenticated user is watching. + * + * @tags activity + * @name ActivityListWatchedReposForAuthenticatedUser + * @summary List repositories watched by the authenticated user + * @request GET:/user/subscriptions + */ + activityListWatchedReposForAuthenticatedUser: ( query?: { /** * Page number of the results to fetch. @@ -21498,15 +35074,8 @@ export class Api extends HttpClient - this.request< - IssueEventForIssue[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/issues/${issueNumber}/timeline`, + this.request({ + path: \`/user/subscriptions\`, method: "GET", query: query, format: "json", @@ -21514,16 +35083,14 @@ export class Api extends HttpClient extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/keys`, + this.request({ + path: \`/user/teams\`, method: "GET", query: query, format: "json", ...params, }), - + }; + users = { /** - * @description You can create a read-only deploy key. + * @description Lists all users, in the order that they signed up on GitHub. This list includes personal user accounts and organization accounts. Note: Pagination is powered exclusively by the \`since\` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of users. * - * @tags repos - * @name ReposCreateDeployKey - * @summary Create a deploy key - * @request POST:/repos/{owner}/{repo}/keys + * @tags users + * @name UsersList + * @summary List users + * @request GET:/users */ - reposCreateDeployKey: ( - owner: string, - repo: string, - data: { - /** The contents of the key. */ - key: string; + usersList: ( + query?: { /** - * If `true`, the key will only be able to read repository contents. Otherwise, the key will be able to read and write. - * - * Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)" and "[Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)." + * Results per page (max 100) + * @default 30 */ - read_only?: boolean; - /** A name for the key. */ - title?: string; + per_page?: number; + /** A user ID. Only return users with an ID greater than this ID. */ + since?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: data, - type: ContentType.Json, + this.request({ + path: \`/users\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * No description + * @description Provides publicly available information about someone with a GitHub account. GitHub Apps with the \`Plan\` user permission can use this endpoint to retrieve information about a user's GitHub plan. The GitHub App must be authenticated as a user. See "[Identifying and authorizing users for GitHub Apps](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)" for details about authentication. For an example response, see 'Response with GitHub plan information' below" The \`email\` key in the following response is the publicly visible email address from your GitHub [profile page](https://github.com/settings/profile). When setting up your profile, you can select a primary email address to be “public” which provides an email entry for this endpoint. If you do not set a public email address for \`email\`, then it will have a value of \`null\`. You only see publicly visible email addresses when authenticated with GitHub. For more information, see [Authentication](https://docs.github.com/rest/overview/resources-in-the-rest-api#authentication). The Emails API enables you to list all of your email addresses, and toggle a primary email to be visible publicly. For more information, see "[Emails API](https://docs.github.com/rest/reference/users#emails)". * - * @tags repos - * @name ReposGetDeployKey - * @summary Get a deploy key - * @request GET:/repos/{owner}/{repo}/keys/{key_id} + * @tags users + * @name UsersGetByUsername + * @summary Get a user + * @request GET:/users/{username} */ - reposGetDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + usersGetByUsername: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, }), /** - * @description Deploy keys are immutable. If you need to update a key, remove the key and create a new one instead. - * - * @tags repos - * @name ReposDeleteDeployKey - * @summary Delete a deploy key - * @request DELETE:/repos/{owner}/{repo}/keys/{key_id} - */ - reposDeleteDeployKey: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description + * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. * - * @tags issues - * @name IssuesListLabelsForRepo - * @summary List labels for a repository - * @request GET:/repos/{owner}/{repo}/labels + * @tags activity + * @name ActivityListEventsForAuthenticatedUser + * @summary List events for the authenticated user + * @request GET:/users/{username}/events */ - issuesListLabelsForRepo: ( - owner: string, - repo: string, + activityListEventsForAuthenticatedUser: ( + username: string, query?: { /** * Page number of the results to fetch. @@ -21636,8 +35182,8 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/labels`, + this.request({ + path: \`/users/\${username}/events\`, method: "GET", query: query, format: "json", @@ -21645,47 +35191,34 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags issues - * @name IssuesGetLabel - * @summary Get a label - * @request GET:/repos/{owner}/{repo}/labels/{name} - */ - issuesGetLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + this.request({ + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", + query: query, format: "json", ...params, }), @@ -21693,77 +35226,95 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/users/\${username}/events/public\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * No description - * - * @tags issues - * @name IssuesDeleteLabel - * @summary Delete a label - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - issuesDeleteLabel: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Lists languages for the specified repository. The value shown for each language is the number of bytes of code written in that language. + * @description Lists the people following the specified user. * - * @tags repos - * @name ReposListLanguages - * @summary List repository languages - * @request GET:/repos/{owner}/{repo}/languages + * @tags users + * @name UsersListFollowersForUser + * @summary List followers of a user + * @request GET:/users/{username}/followers */ - reposListLanguages: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, + usersListFollowersForUser: ( + username: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/followers\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description This method returns the contents of the repository's license file, if one is detected. Similar to [Get repository content](https://docs.github.com/rest/reference/repos#get-repository-content), this method also supports [custom media types](https://docs.github.com/rest/overview/media-types) for retrieving the raw license content or rendered license HTML. + * @description Lists the people who the specified user follows. * - * @tags licenses - * @name LicensesGetForRepo - * @summary Get the license for a repository - * @request GET:/repos/{owner}/{repo}/license + * @tags users + * @name UsersListFollowingForUser + * @summary List the people a user follows + * @request GET:/users/{username}/following */ - licensesGetForRepo: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/license`, + usersListFollowingForUser: ( + username: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/following\`, method: "GET", + query: query, format: "json", ...params, }), @@ -21771,59 +35322,29 @@ export class Api extends HttpClient - this.request< - Commit, - | BasicError - | { - /** @example ""https://docs.github.com/rest/reference/repos#perform-a-merge"" */ - documentation_url?: string; - message?: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", + usersCheckFollowingForUser: (username: string, targetUser: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/following/\${targetUser}\`, + method: "GET", ...params, }), /** - * No description + * @description Lists public gists for the specified user: * - * @tags issues - * @name IssuesListMilestones - * @summary List milestones - * @request GET:/repos/{owner}/{repo}/milestones + * @tags gists + * @name GistsListForUser + * @summary List gists for a user + * @request GET:/users/{username}/gists */ - issuesListMilestones: ( - owner: string, - repo: string, + gistsListForUser: ( + username: string, query?: { - /** - * The direction of the sort. Either `asc` or `desc`. - * @default "asc" - */ - direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -21834,21 +35355,13 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/milestones`, + this.request({ + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -21856,119 +35369,89 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags issues - * @name IssuesGetMilestone - * @summary Get a milestone - * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number} - */ - issuesGetMilestone: (owner: string, repo: string, milestoneNumber: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${milestoneNumber}`, + this.request({ + path: \`/users/\${username}/gpg_keys\`, method: "GET", + query: query, format: "json", ...params, }), /** - * No description + * @description Provides hovercard information when authenticated through basic auth or OAuth with the \`repo\` scope. You can find out more about someone in relation to their pull requests, issues, repositories, and organizations. The \`subject_type\` and \`subject_id\` parameters provide context for the person's hovercard, which returns more information than without the parameters. For example, if you wanted to find out more about \`octocat\` who owns the \`Spoon-Knife\` repository via cURL, it would look like this: \`\`\`shell curl -u username:token https://api.github.com/users/octocat/hovercard?subject_type=repository&subject_id=1300192 \`\`\` * - * @tags issues - * @name IssuesUpdateMilestone - * @summary Update a milestone - * @request PATCH:/repos/{owner}/{repo}/milestones/{milestone_number} + * @tags users + * @name UsersGetContextForUser + * @summary Get contextual information for a user + * @request GET:/users/{username}/hovercard */ - issuesUpdateMilestone: ( - owner: string, - repo: string, - milestoneNumber: number, - data: { - /** A description of the milestone. */ - description?: string; - /** The milestone due date. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - due_on?: string; - /** - * The state of the milestone. Either `open` or `closed`. - * @default "open" - */ - state?: "open" | "closed"; - /** The title of the milestone. */ - title?: string; + usersGetContextForUser: ( + username: string, + query?: { + /** Uses the ID for the \`subject_type\` you specified. **Required** when using \`subject_type\`. */ + subject_id?: string; + /** Identifies which additional information you'd like to receive about the person's hovercard. Can be \`organization\`, \`repository\`, \`issue\`, \`pull_request\`. **Required** when using \`subject_id\`. */ + subject_type?: "organization" | "repository" | "issue" | "pull_request"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${milestoneNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/users/\${username}/hovercard\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * No description + * @description Enables an authenticated GitHub App to find the user’s installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. * - * @tags issues - * @name IssuesDeleteMilestone - * @summary Delete a milestone - * @request DELETE:/repos/{owner}/{repo}/milestones/{milestone_number} + * @tags apps + * @name AppsGetUserInstallation + * @summary Get a user installation for the authenticated app + * @request GET:/users/{username}/installation */ - issuesDeleteMilestone: (owner: string, repo: string, milestoneNumber: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${milestoneNumber}`, - method: "DELETE", + appsGetUserInstallation: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/installation\`, + method: "GET", + format: "json", ...params, }), /** - * No description + * @description Lists the _verified_ public SSH keys for a user. This is accessible by anyone. * - * @tags issues - * @name IssuesListLabelsForMilestone - * @summary List labels for issues in a milestone - * @request GET:/repos/{owner}/{repo}/milestones/{milestone_number}/labels + * @tags users + * @name UsersListPublicKeysForUser + * @summary List public keys for a user + * @request GET:/users/{username}/keys */ - issuesListLabelsForMilestone: ( - owner: string, - repo: string, - milestoneNumber: number, + usersListPublicKeysForUser: ( + username: string, query?: { /** * Page number of the results to fetch. @@ -21983,8 +35466,8 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/milestones/${milestoneNumber}/labels`, + this.request({ + path: \`/users/\${username}/keys\`, method: "GET", query: query, format: "json", @@ -21992,208 +35475,158 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/notifications`, + this.request({ + path: \`/users/\${username}/orgs\`, method: "GET", query: query, format: "json", ...params, }), - /** - * @description Marks all notifications in a repository as "read" removes them from the [default view on GitHub](https://github.com/notifications). If the number of notifications is too large to complete in one request, you will receive a `202 Accepted` status and GitHub will run an asynchronous process to mark notifications as "read." To check whether any "unread" notifications remain, you can use the [List repository notifications for the authenticated user](https://docs.github.com/rest/reference/activity#list-repository-notifications-for-the-authenticated-user) endpoint and pass the query parameter `all=false`. - * - * @tags activity - * @name ActivityMarkRepoNotificationsAsRead - * @summary Mark repository notifications as read - * @request PUT:/repos/{owner}/{repo}/notifications - */ - activityMarkRepoNotificationsAsRead: ( - owner: string, - repo: string, - data: { - /** Describes the last point that notifications were checked. Anything updated since this time will not be marked as read. If you omit this parameter, all notifications are marked as read. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. Default: The current timestamp. */ - last_read_at?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: data, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags repos - * @name ReposGetPages - * @summary Get a GitHub Pages site - * @request GET:/repos/{owner}/{repo}/pages - */ - reposGetPages: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Configures a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages)." - * - * @tags repos - * @name ReposCreatePagesSite - * @summary Create a GitHub Pages site - * @request POST:/repos/{owner}/{repo}/pages + /** + * No description + * + * @tags projects + * @name ProjectsListForUser + * @summary List user projects + * @request GET:/users/{username}/projects */ - reposCreatePagesSite: ( - owner: string, - repo: string, - data: { - /** The source branch and directory used to publish your Pages site. */ - source: { - /** The repository branch used to publish your site's source files. */ - branch: string; - /** - * The repository directory that includes the source files for the Pages site. Allowed paths are `/` or `/docs`. Default: `/` - * @default "/" - */ - path?: "/" | "/docs"; - }; + projectsListForUser: ( + username: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + /** + * Indicates the state of the projects to return. Can be either \`open\`, \`closed\`, or \`all\`. + * @default "open" + */ + state?: "open" | "closed" | "all"; }, params: RequestParams = {}, ) => this.request< - Page, - | BasicError + Project[], | { documentation_url: string; message: string; } | ValidationError >({ - path: `/repos/${owner}/${repo}/pages`, - method: "POST", - body: data, - type: ContentType.Json, + path: \`/users/\${username}/projects\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description Updates information for a GitHub Pages site. For more information, see "[About GitHub Pages](/github/working-with-github-pages/about-github-pages). + * @description These are events that you've received by watching repos and following users. If you are authenticated as the given user, you will see private events. Otherwise, you'll only see public events. * - * @tags repos - * @name ReposUpdateInformationAboutPagesSite - * @summary Update information about a GitHub Pages site - * @request PUT:/repos/{owner}/{repo}/pages + * @tags activity + * @name ActivityListReceivedEventsForUser + * @summary List events received by the authenticated user + * @request GET:/users/{username}/received_events */ - reposUpdateInformationAboutPagesSite: ( - owner: string, - repo: string, - data: { - /** Specify a custom domain for the repository. Sending a `null` value will remove the custom domain. For more about custom domains, see "[Using a custom domain with GitHub Pages](https://help.github.com/articles/using-a-custom-domain-with-github-pages/)." */ - cname?: string | null; - /** Configures access controls for the GitHub Pages site. If public is set to `true`, the site is accessible to anyone on the internet. If set to `false`, the site will only be accessible to users who have at least `read` access to the repository that published the site. This includes anyone in your Enterprise if the repository is set to `internal` visibility. This feature is only available to repositories in an organization on an Enterprise plan. */ - public?: boolean; - /** Update the source for the repository. Must include the branch name, and may optionally specify the subdirectory `/docs`. Possible values are `"gh-pages"`, `"master"`, and `"master /docs"`. */ - source: - | "gh-pages" - | "master" - | "master /docs" - | { - /** The repository branch used to publish your site's source files. */ - branch: string; - /** The repository directory that includes the source files for the Pages site. Allowed paths are `/` or `/docs`. */ - path: "/" | "/docs"; - }; + activityListReceivedEventsForUser: ( + username: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pages`, - method: "PUT", - body: data, - type: ContentType.Json, + this.request({ + path: \`/users/\${username}/received_events\`, + method: "GET", + query: query, + format: "json", ...params, }), /** * No description * - * @tags repos - * @name ReposDeletePagesSite - * @summary Delete a GitHub Pages site - * @request DELETE:/repos/{owner}/{repo}/pages + * @tags activity + * @name ActivityListReceivedPublicEventsForUser + * @summary List public events received by a user + * @request GET:/users/{username}/received_events/public */ - reposDeletePagesSite: (owner: string, repo: string, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/pages`, - method: "DELETE", + activityListReceivedPublicEventsForUser: ( + username: string, + query?: { + /** + * Page number of the results to fetch. + * @default 1 + */ + page?: number; + /** + * Results per page (max 100) + * @default 30 + */ + per_page?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/users/\${username}/received_events/public\`, + method: "GET", + query: query, + format: "json", ...params, }), /** - * No description + * @description Lists public repositories for the specified user. * * @tags repos - * @name ReposListPagesBuilds - * @summary List GitHub Pages builds - * @request GET:/repos/{owner}/{repo}/pages/builds + * @name ReposListForUser + * @summary List repositories for a user + * @request GET:/users/{username}/repos */ - reposListPagesBuilds: ( - owner: string, - repo: string, + reposListForUser: ( + username: string, query?: { + /** Can be one of \`asc\` or \`desc\`. Default: \`asc\` when using \`full_name\`, otherwise \`desc\` */ + direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -22204,11 +35637,21 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pages/builds`, + this.request({ + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -22216,65 +35659,69 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pages/builds`, - method: "POST", + billingGetGithubActionsBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/actions\`, + method: "GET", format: "json", ...params, }), /** - * No description + * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. * - * @tags repos - * @name ReposGetLatestPagesBuild - * @summary Get latest Pages build - * @request GET:/repos/{owner}/{repo}/pages/builds/latest + * @tags billing + * @name BillingGetGithubPackagesBillingUser + * @summary Get GitHub Packages billing for a user + * @request GET:/users/{username}/settings/billing/packages */ - reposGetLatestPagesBuild: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pages/builds/latest`, + billingGetGithubPackagesBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/packages\`, method: "GET", format: "json", ...params, }), /** - * No description + * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the \`user\` scope. * - * @tags repos - * @name ReposGetPagesBuild - * @summary Get GitHub Pages build - * @request GET:/repos/{owner}/{repo}/pages/builds/{build_id} + * @tags billing + * @name BillingGetSharedStorageBillingUser + * @summary Get shared storage billing for a user + * @request GET:/users/{username}/settings/billing/shared-storage */ - reposGetPagesBuild: (owner: string, repo: string, buildId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pages/builds/${buildId}`, + billingGetSharedStorageBillingUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${username}/settings/billing/shared-storage\`, method: "GET", format: "json", ...params, }), /** - * @description Lists the projects in a repository. Returns a `404 Not Found` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned. + * @description Lists repositories a user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the \`Accept\` header: * - * @tags projects - * @name ProjectsListForRepo - * @summary List repository projects - * @request GET:/repos/{owner}/{repo}/projects + * @tags activity + * @name ActivityListReposStarredByUser + * @summary List repositories starred by a user + * @request GET:/users/{username}/starred */ - projectsListForRepo: ( - owner: string, - repo: string, + activityListReposStarredByUser: ( + username: string, query?: { + /** + * One of \`asc\` (ascending) or \`desc\` (descending). + * @default "desc" + */ + direction?: "asc" | "desc"; /** * Page number of the results to fetch. * @default 1 @@ -22286,15 +35733,15 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/projects`, + this.request({ + path: \`/users/\${username}/starred\`, method: "GET", query: query, format: "json", @@ -22302,51 +35749,16 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/projects`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * @description Lists repositories a user is watching. * - * @tags pulls - * @name PullsList - * @summary List pull requests - * @request GET:/repos/{owner}/{repo}/pulls + * @tags activity + * @name ActivityListReposWatchedByUser + * @summary List repositories watched by a user + * @request GET:/users/{username}/subscriptions */ - pullsList: ( - owner: string, - repo: string, + activityListReposWatchedByUser: ( + username: string, query?: { - /** Filter pulls by base branch name. Example: `gh-pages`. */ - base?: string; - /** The direction of the sort. Can be either `asc` or `desc`. Default: `desc` when sort is `created` or sort is not specified, otherwise `asc`. */ - direction?: "asc" | "desc"; - /** Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. For example: `github:new-script-format` or `octocat:test-branch`. */ - head?: string; /** * Page number of the results to fetch. * @default 1 @@ -22357,611 +35769,1529 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pulls`, + this.request({ + path: \`/users/\${username}/subscriptions\`, method: "GET", query: query, format: "json", ...params, }), - + }; + zen = { /** - * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. You can create a new pull request. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @description Get a random sentence from the Zen of GitHub * - * @tags pulls - * @name PullsCreate - * @summary Create a pull request - * @request POST:/repos/{owner}/{repo}/pulls + * @tags meta + * @name MetaGetZen + * @summary Get the Zen of GitHub + * @request GET:/zen */ - pullsCreate: ( - owner: string, - repo: string, - data: { - /** The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository. */ - base: string; - /** The contents of the pull request. */ - body?: string; - /** Indicates whether the pull request is a draft. See "[Draft Pull Requests](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests)" in the GitHub Help documentation to learn more. */ - draft?: boolean; - /** The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace `head` with a user like this: `username:branch`. */ - head: string; - /** @example 1 */ - issue?: number; - /** Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ - maintainer_can_modify?: boolean; - /** The title of the new pull request. */ - title?: string; + metaGetZen: (params: RequestParams = {}) => + this.request({ + path: \`/zen\`, + method: "GET", + ...params, + }), + }; +} +" +`; + +exports[`simple > 'furkot-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Step { + /** address of the stop */ + address?: string; + /** + * arrival at the stop in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + arrival?: string; + /** geographical coordinates of the stop */ + coordinates?: { + /** + * latitude + * @format float + */ + lat?: number; + /** + * longitude + * @format float + */ + lon?: number; + }; + /** + * departure from the stop in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + departure?: string; + /** name of the stop */ + name?: string; + /** + * number of nights + * @format int64 + */ + nights?: number; + /** route leading to the stop */ + route?: { + /** + * route distance in meters + * @format int64 + */ + distance?: number; + /** + * route duration in seconds + * @format int64 + */ + duration?: number; + /** travel mode */ + mode?: "car" | "motorcycle" | "bicycle" | "walk" | "other"; + /** route path compatible with Google polyline encoding algorithm */ + polyline?: string; + }; + /** url of the page with more information about the stop */ + url?: string; +} + +export interface Trip { + /** + * begin of the trip in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + begin?: string; + /** description of the trip (truncated to 200 characters) */ + description?: string; + /** + * end of the trip in its local timezone as YYYY-MM-DDThh:mm + * @format date-time + */ + end?: string; + /** Unique ID of the trip */ + id?: string; + /** name of the trip */ + name?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://trips.furkot.com/pub/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Furkot Trips + * @version 1.0.0 + * @baseUrl https://trips.furkot.com/pub/api + * @externalDocs https://help.furkot.com/widgets/furkot-api.html + * @contact + * + * Furkot provides Rest API to access user trip data. + * Using Furkot API an application can list user trips and display stops for a specific trip. + * Furkot API uses OAuth2 protocol to authorize applications to access data on behalf of users. + */ +export class Api extends HttpClient { + trip = { /** - * @description Lists review comments for all pull requests in a repository. By default, review comments are in ascending order by ID. + * @description list user's trips * - * @tags pulls - * @name PullsListReviewCommentsForRepo - * @summary List review comments in a repository - * @request GET:/repos/{owner}/{repo}/pulls/comments + * @name TripList + * @request GET:/trip + * @secure */ - pullsListReviewCommentsForRepo: ( - owner: string, - repo: string, - query?: { - /** Can be either `asc` or `desc`. Ignored without `sort` parameter. */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; - /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" - */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + tripList: (params: RequestParams = {}) => + this.request({ + path: \`/trip\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Provides details for a review comment. + * @description list stops for a trip identified by {trip_id} * - * @tags pulls - * @name PullsGetReviewComment - * @summary Get a review comment for a pull request - * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id} + * @name StopDetail + * @request GET:/trip/{trip_id}/stop + * @secure */ - pullsGetReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + stopDetail: (tripId: string, params: RequestParams = {}) => + this.request({ + path: \`/trip/\${tripId}/stop\`, method: "GET", + secure: true, format: "json", ...params, }), + }; +} +" +`; - /** - * @description Enables you to edit a review comment. - * - * @tags pulls - * @name PullsUpdateReviewComment - * @summary Update a review comment for a pull request - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{comment_id} - */ - pullsUpdateReviewComment: ( - owner: string, - repo: string, - commentId: number, - data: { - /** The text of the reply to the review comment. */ - body: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +exports[`simple > 'giphy' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description Deletes a review comment. - * - * @tags pulls - * @name PullsDeleteReviewComment - * @summary Delete a review comment for a pull request - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id} - */ - pullsDeleteReviewComment: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), +export interface Gif { + /** + * The unique bit.ly URL for this GIF + * @example "http://gph.is/1gsWDcL" + */ + bitly_url?: string; + /** Currently unused */ + content_url?: string; + /** + * The date this GIF was added to the GIPHY database. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + create_datetime?: string; + /** + * A URL used for embedding this GIF + * @example "http://giphy.com/embed/YsTs5ltWtEhnq" + */ + embded_url?: string; + /** An array of featured tags for this GIF (Note: Not available when using the Public Beta Key) */ + featured_tags?: string[]; + /** + * This GIF's unique ID + * @example "YsTs5ltWtEhnq" + */ + id?: string; + /** An object containing data for various available formats and sizes of this GIF. */ + images?: { + /** Data surrounding a version of this GIF downsized to be under 2mb. */ + downsized?: Image; + /** Data surrounding a version of this GIF downsized to be under 8mb. */ + downsized_large?: Image; + /** Data surrounding a version of this GIF downsized to be under 5mb. */ + downsized_medium?: Image; + /** Data surrounding a version of this GIF downsized to be under 200kb. */ + downsized_small?: Image; + /** Data surrounding a static preview image of the downsized version of this GIF. */ + downsized_still?: Image; + /** Data surrounding versions of this GIF with a fixed height of 200 pixels. Good for mobile use. */ + fixed_height?: Image; + /** Data surrounding versions of this GIF with a fixed height of 200 pixels and the number of frames reduced to 6. */ + fixed_height_downsampled?: Image; + /** Data surrounding versions of this GIF with a fixed height of 100 pixels. Good for mobile keyboards. */ + fixed_height_small?: Image; + /** Data surrounding a static image of this GIF with a fixed height of 100 pixels. */ + fixed_height_small_still?: Image; + /** Data surrounding a static image of this GIF with a fixed height of 200 pixels. */ + fixed_height_still?: Image; + /** Data surrounding versions of this GIF with a fixed width of 200 pixels. Good for mobile use. */ + fixed_width?: Image; + /** Data surrounding versions of this GIF with a fixed width of 200 pixels and the number of frames reduced to 6. */ + fixed_width_downsampled?: Image; + /** Data surrounding versions of this GIF with a fixed width of 100 pixels. Good for mobile keyboards. */ + fixed_width_small?: Image; + /** Data surrounding a static image of this GIF with a fixed width of 100 pixels. */ + fixed_width_small_still?: Image; + /** Data surrounding a static image of this GIF with a fixed width of 200 pixels. */ + fixed_width_still?: Image; + /** Data surrounding a version of this GIF set to loop for 15 seconds. */ + looping?: Image; + /** Data surrounding the original version of this GIF. Good for desktop use. */ + original?: Image; + /** Data surrounding a static preview image of the original GIF. */ + original_still?: Image; + /** Data surrounding a version of this GIF in .MP4 format limited to 50kb that displays the first 1-2 seconds of the GIF. */ + preview?: Image; + /** Data surrounding a version of this GIF limited to 50kb that displays the first 1-2 seconds of the GIF. */ + preview_gif?: Image; + }; + /** + * The creation or upload date from this GIF's source. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + import_datetime?: string; + /** + * The MPAA-style rating for this content. Examples include Y, G, PG, PG-13 and R + * @example "g" + */ + rating?: string; + /** + * The unique slug used in this GIF's URL + * @example "confused-flying-YsTs5ltWtEhnq" + */ + slug?: string; + /** + * The page on which this GIF was found + * @example "http://www.reddit.com/r/reactiongifs/comments/1xpyaa/superman_goes_to_hollywood/" + */ + source?: string; + /** + * The URL of the webpage on which this GIF was found. + * @example "http://cheezburger.com/5282328320" + */ + source_post_url?: string; + /** + * The top level domain of the source URL. + * @example "cheezburger.com" + */ + source_tld?: string; + /** An array of tags for this GIF (Note: Not available when using the Public Beta Key) */ + tags?: string[]; + /** + * The date on which this gif was marked trending, if applicable. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + trending_datetime?: string; + /** + * Type of the gif. By default, this is almost always gif + * @default "gif" + */ + type?: "gif"; + /** + * The date on which this GIF was last updated. + * @format date-time + * @example "2013-08-01 12:41:48" + */ + update_datetime?: string; + /** + * The unique URL for this GIF + * @example "http://giphy.com/gifs/confused-flying-YsTs5ltWtEhnq" + */ + url?: string; + /** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ + user?: User; + /** + * The username this GIF is attached to, if applicable + * @example "JoeCool4000" + */ + username?: string; +} - /** - * @description List the reactions to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). - * - * @tags reactions - * @name ReactionsListForPullRequestReviewComment - * @summary List reactions for a pull request review comment - * @request GET:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions - */ - reactionsListForPullRequestReviewComment: ( - owner: string, - repo: string, - commentId: number, - query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; +export interface Image { + /** + * The URL for this GIF in .MP4 format. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.mp4" + */ + mp4?: string; + /** + * The size in bytes of the .MP4 file corresponding to this GIF. + * @example "25123" + */ + mp4_size?: string; + /** + * The number of frames in this GIF. + * @example "15" + */ + frames?: string; + /** + * The height of this GIF in pixels. + * @example "200" + */ + height?: string; + /** + * The size of this GIF in bytes. + * @example "32381" + */ + size?: string; + /** + * The publicly-accessible direct URL for this GIF. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/200.gif" + */ + url?: string; + /** + * The URL for this GIF in .webp format. + * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.webp" + */ + webp?: string; + /** + * The size in bytes of the .webp file corresponding to this GIF. + * @example "12321" + */ + webp_size?: string; + /** + * The width of this GIF in pixels. + * @example "320" + */ + width?: string; +} + +/** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ +export interface Meta { + /** + * HTTP Response Message + * @example "OK" + */ + msg?: string; + /** + * A unique ID paired with this response from the API. + * @example "57eea03c72381f86e05c35d2" + */ + response_id?: string; + /** + * HTTP Response Code + * @format int32 + * @example 200 + */ + status?: number; +} + +/** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ +export interface Pagination { + /** + * Total number of items returned. + * @format int32 + * @example 25 + */ + count?: number; + /** + * Position in pagination. + * @format int32 + * @example 75 + */ + offset?: number; + /** + * Total number of items available. + * @format int32 + * @example 250 + */ + total_count?: number; +} + +/** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ +export interface User { + /** + * The URL for this user's avatar image. + * @example "https://media1.giphy.com/avatars/election2016/XwYrZi5H87o6.gif" + */ + avatar_url?: string; + /** + * The URL for the banner image that appears atop this user's profile page. + * @example "https://media4.giphy.com/avatars/cheezburger/XkuejOhoGLE6.jpg" + */ + banner_url?: string; + /** + * The display name associated with this user (contains formatting the base username might not). + * @example "JoeCool4000" + */ + display_name?: string; + /** + * The URL for this user's profile. + * @example "https://giphy.com/cheezburger/" + */ + profile_url?: string; + /** + * The Twitter username associated with this user, if applicable. + * @example "@joecool4000" + */ + twitter?: string; + /** + * The username associated with this user. + * @example "joecool4000" + */ + username?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.giphy.com/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request< - Reaction[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}/reactions`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * @description Create a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#comments). A response with a `Status: 200 OK` means that you already added the reaction type to this pull request review comment. - * - * @tags reactions - * @name ReactionsCreateForPullRequestReviewComment - * @summary Create reaction for a pull request review comment - * @request POST:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions - */ - reactionsCreateForPullRequestReviewComment: ( - owner: string, - repo: string, - commentId: number, - data: { - /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the pull request review comment. */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request< - Reaction, - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}/reactions`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Note:** You can also specify a repository by `repository_id` using the route `DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.` Delete a reaction to a [pull request review comment](https://docs.github.com/rest/reference/pulls#review-comments). - * - * @tags reactions - * @name ReactionsDeleteForPullRequestComment - * @summary Delete a pull request comment reaction - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id} - */ - reactionsDeleteForPullRequestComment: ( - owner: string, - repo: string, - commentId: number, - reactionId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}/reactions/${reactionId}`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Giphy + * @version 1.0 + * @termsOfService https://developers.giphy.com/ + * @baseUrl https://api.giphy.com/v1 + * @externalDocs https://developers.giphy.com/docs/ + * @contact + * + * Giphy API + */ +export class Api extends HttpClient { + gifs = { /** - * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Lists details of a pull request by providing its number. When you get, [create](https://docs.github.com/rest/reference/pulls/#create-a-pull-request), or [edit](https://docs.github.com/rest/reference/pulls#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the `mergeable` key. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". The value of the `mergeable` attribute can be `true`, `false`, or `null`. If the value is `null`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-`null` value for the `mergeable` attribute in the response. If `mergeable` is `true`, then `merge_commit_sha` will be the SHA of the _test_ merge commit. The value of the `merge_commit_sha` attribute changes depending on the state of the pull request. Before merging a pull request, the `merge_commit_sha` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the `merge_commit_sha` attribute changes depending on how you merged the pull request: * If merged as a [merge commit](https://help.github.com/articles/about-merge-methods-on-github/), `merge_commit_sha` represents the SHA of the merge commit. * If merged via a [squash](https://help.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), `merge_commit_sha` represents the SHA of the squashed commit on the base branch. * If [rebased](https://help.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), `merge_commit_sha` represents the commit that the base branch was updated to. Pass the appropriate [media type](https://docs.github.com/rest/overview/media-types/#commits-commit-comparison-and-pull-requests) to fetch diff and patch formats. + * @description A multiget version of the get GIF by ID endpoint. * - * @tags pulls - * @name PullsGet - * @summary Get a pull request - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number} + * @tags gifs + * @name GetGifsById + * @summary Get GIFs by ID + * @request GET:/gifs + * @secure */ - pullsGet: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}`, + getGifsById: ( + query?: { + /** Filters results by specified GIF IDs, separated by commas. */ + ids?: string; + }, + params: RequestParams = {}, + ) => + this.request< + { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; + }, + any + >({ + path: \`/gifs\`, method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. * - * @tags pulls - * @name PullsUpdate - * @summary Update a pull request - * @request PATCH:/repos/{owner}/{repo}/pulls/{pull_number} + * @tags gifs + * @name RandomGif + * @summary Random GIF + * @request GET:/gifs/random + * @secure */ - pullsUpdate: ( - owner: string, - repo: string, - pullNumber: number, - data: { - /** The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository. */ - base?: string; - /** The contents of the pull request. */ - body?: string; - /** Indicates whether [maintainers can modify](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ - maintainer_can_modify?: boolean; - /** State of this Pull Request. Either `open` or `closed`. */ - state?: "open" | "closed"; - /** The title of the pull request. */ - title?: string; + randomGif: ( + query?: { + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request< + { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + }, + any + >({ + path: \`/gifs/random\`, + method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * @description Lists all review comments for a pull request. By default, review comments are in ascending order by ID. + * @description Search all GIPHY GIFs for a word or phrase. Punctuation will be stripped and ignored. Use a plus or url encode for phrases. Example paul+rudd, ryan+gosling or american+psycho. * - * @tags pulls - * @name PullsListReviewComments - * @summary List review comments on a pull request - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/comments + * @tags gifs + * @name SearchGifs + * @summary Search GIFs + * @request GET:/gifs/search + * @secure */ - pullsListReviewComments: ( - owner: string, - repo: string, - pullNumber: number, - query?: { - /** Can be either `asc` or `desc`. Ignored without `sort` parameter. */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + searchGifs: ( + query: { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; /** - * Results per page (max 100) - * @default 30 + * The maximum number of records to return. + * @format int32 + * @default 25 */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; + limit?: number; /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" + * An optional results offset. + * @format int32 + * @default 0 */ - sort?: "created" | "updated"; + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/comments`, + this.request< + { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; + }, + any + >({ + path: \`/gifs/search\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * @description Creates a review comment in the pull request diff. To add a regular comment to a pull request timeline, see "[Create an issue comment](https://docs.github.com/rest/reference/issues#create-an-issue-comment)." We recommend creating a review comment using `line`, `side`, and optionally `start_line` and `start_side` if your comment applies to more than one line in the pull request diff. You can still create a review comment using the `position` parameter. When you use `position`, the `line`, `side`, `start_line`, and `start_side` parameters are not required. For more information, see the [`comfort-fade` preview notice](https://docs.github.com/rest/reference/pulls#create-a-review-comment-for-a-pull-request-preview-notices). **Note:** The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIF * - * @tags pulls - * @name PullsCreateReviewComment - * @summary Create a review comment for a pull request - * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments + * @tags gifs + * @name TranslateGif + * @summary Translate phrase to GIF + * @request GET:/gifs/translate + * @secure */ - pullsCreateReviewComment: ( - owner: string, - repo: string, - pullNumber: number, - data: { - /** The text of the review comment. */ - body: string; - /** The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`. */ - commit_id?: string; - /** @example 2 */ - in_reply_to?: number; - /** **Required with `comfort-fade` preview**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. */ - line?: number; - /** The relative path to the file that necessitates a comment. */ - path: string; - /** **Required without `comfort-fade` preview**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. For help finding the position value, read the note above. */ - position?: number; - /** **Required with `comfort-fade` preview**. In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://help.github.com/en/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation. */ - side?: "LEFT" | "RIGHT"; - /** **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. */ - start_line?: number; - /** **Required when using multi-line comments**. To create multi-line comments, you must use the `comfort-fade` preview header. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://help.github.com/en/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context. */ - start_side?: "LEFT" | "RIGHT" | "side"; + translateGif: ( + query: { + /** Search term. */ + s: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/comments`, - method: "POST", - body: data, - type: ContentType.Json, + this.request< + { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + }, + any + >({ + path: \`/gifs/translate\`, + method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * @description Creates a reply to a review comment for a pull request. For the `comment_id`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. + * @description Fetch GIFs currently trending online. Hand curated by the GIPHY editorial team. The data returned mirrors the GIFs showcased on the GIPHY homepage. Returns 25 results by default. * - * @tags pulls - * @name PullsCreateReplyForReviewComment - * @summary Create a reply for a review comment - * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies + * @tags gifs + * @name TrendingGifs + * @summary Trending GIFs + * @request GET:/gifs/trending + * @secure */ - pullsCreateReplyForReviewComment: ( - owner: string, - repo: string, - pullNumber: number, - commentId: number, - data: { - /** The text of the review comment. */ - body: string; + trendingGifs: ( + query?: { + /** + * The maximum number of records to return. + * @format int32 + * @default 25 + */ + limit?: number; + /** + * An optional results offset. + * @format int32 + * @default 0 + */ + offset?: number; + /** Filters results by specified rating. */ + rating?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/comments/${commentId}/replies`, - method: "POST", - body: data, - type: ContentType.Json, + this.request< + { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; + }, + any + >({ + path: \`/gifs/trending\`, + method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * @description Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the [List commits](https://docs.github.com/rest/reference/repos#list-commits) endpoint. + * @description Returns a GIF given that GIF's unique ID * - * @tags pulls - * @name PullsListCommits - * @summary List commits on a pull request - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/commits + * @tags gifs + * @name GetGifById + * @summary Get GIF by Id + * @request GET:/gifs/{gifId} + * @secure */ - pullsListCommits: ( - owner: string, - repo: string, - pullNumber: number, + getGifById: (gifId: number, params: RequestParams = {}) => + this.request< + { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + }, + any + >({ + path: \`/gifs/\${gifId}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + }; + stickers = { + /** + * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. + * + * @tags stickers + * @name RandomSticker + * @summary Random Sticker + * @request GET:/stickers/random + * @secure + */ + randomSticker: ( query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + /** Filters results by specified rating. */ + rating?: string; + /** Filters results by specified tag. */ + tag?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/commits`, + this.request< + { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + }, + any + >({ + path: \`/stickers/random\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * @description **Note:** Responses include a maximum of 3000 files. The paginated response returns 30 files per page by default. + * @description Replicates the functionality and requirements of the classic GIPHY search, but returns animated stickers rather than GIFs. * - * @tags pulls - * @name PullsListFiles - * @summary List pull requests files - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/files + * @tags stickers + * @name SearchStickers + * @summary Search Stickers + * @request GET:/stickers/search + * @secure */ - pullsListFiles: ( - owner: string, - repo: string, - pullNumber: number, - query?: { + searchStickers: ( + query: { + /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ + lang?: string; /** - * Page number of the results to fetch. - * @default 1 + * The maximum number of records to return. + * @format int32 + * @default 25 */ - page?: number; + limit?: number; /** - * Results per page (max 100) - * @default 30 + * An optional results offset. + * @format int32 + * @default 0 */ - per_page?: number; + offset?: number; + /** Search query term or prhase. */ + q: string; + /** Filters results by specified rating. */ + rating?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/files`, + this.request< + { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; + }, + any + >({ + path: \`/stickers/search\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * No description - * - * @tags pulls - * @name PullsCheckIfMerged - * @summary Check if a pull request has been merged - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/merge - */ - pullsCheckIfMerged: (owner: string, repo: string, pullNumber: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/merge`, - method: "GET", - ...params, - }), - - /** - * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * @description The translate API draws on search, but uses the GIPHY \`special sauce\` to handle translating from one vocabulary to another. In this case, words and phrases to GIFs. * - * @tags pulls - * @name PullsMerge - * @summary Merge a pull request - * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/merge + * @tags stickers + * @name TranslateSticker + * @summary Translate phrase to Sticker + * @request GET:/stickers/translate + * @secure */ - pullsMerge: ( - owner: string, - repo: string, - pullNumber: number, - data: { - /** Extra detail to append to automatic commit message. */ - commit_message?: string; - /** Title for the automatic commit message. */ - commit_title?: string; - /** Merge method to use. Possible values are `merge`, `squash` or `rebase`. Default is `merge`. */ - merge_method?: "merge" | "squash" | "rebase"; - /** SHA that pull request head must match to allow merge. */ - sha?: string; - } | null, + translateSticker: ( + query: { + /** Search term. */ + s: string; + }, params: RequestParams = {}, ) => this.request< - PullRequestMergeResult, - | BasicError - | { - documentation_url?: string; - message?: string; - } - | ValidationError + { + data?: Gif; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + }, + any >({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/merge`, - method: "PUT", - body: data, - type: ContentType.Json, + path: \`/stickers/translate\`, + method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * No description + * @description Fetch Stickers currently trending online. Hand curated by the GIPHY editorial team. Returns 25 results by default. * - * @tags pulls - * @name PullsListRequestedReviewers - * @summary List requested reviewers for a pull request - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + * @tags stickers + * @name TrendingStickers + * @summary Trending Stickers + * @request GET:/stickers/trending + * @secure */ - pullsListRequestedReviewers: ( - owner: string, - repo: string, - pullNumber: number, + trendingStickers: ( query?: { /** - * Page number of the results to fetch. - * @default 1 + * The maximum number of records to return. + * @format int32 + * @default 25 */ - page?: number; + limit?: number; /** - * Results per page (max 100) - * @default 30 + * An optional results offset. + * @format int32 + * @default 0 */ - per_page?: number; + offset?: number; + /** Filters results by specified rating. */ + rating?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/requested_reviewers`, + this.request< + { + data?: Gif[]; + /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check \`responses\` to see a description of types of response codes the API might give you under different cirumstances. */ + meta?: Meta; + /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ + pagination?: Pagination; + }, + any + >({ + path: \`/stickers/trending\`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), + }; +} +" +`; + +exports[`simple > 'link-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Pullrequest { + author?: User; + id?: number; + repository?: Repository; + title?: string; +} + +export interface Repository { + owner?: User; + slug?: string; +} + +export interface User { + username?: string; + uuid?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Link Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + v20 = { + /** + * No description + * + * @name GetUserByName + * @request GET:/2.0/users/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/users/\${username}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits)" for details. + * No description * - * @tags pulls - * @name PullsRequestReviewers - * @summary Request reviewers for a pull request - * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} */ - pullsRequestReviewers: ( - owner: string, - repo: string, - pullNumber: number, - data: { - /** An array of user `login`s that will be requested. */ - reviewers?: string[]; - /** An array of team `slug`s that will be requested. */ - team_reviewers?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/requested_reviewers`, - method: "POST", - body: data, - type: ContentType.Json, + getRepositoriesByOwner: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}\`, + method: "GET", format: "json", ...params, }), @@ -22969,59 +37299,33 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/requested_reviewers`, - method: "DELETE", - body: data, - type: ContentType.Json, + getRepository: (username: string, slug: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}\`, + method: "GET", + format: "json", ...params, }), /** - * @description The list of reviews returns in chronological order. + * No description * - * @tags pulls - * @name PullsListReviews - * @summary List reviews for a pull request - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests */ - pullsListReviews: ( - owner: string, - repo: string, - pullNumber: number, + getPullRequestsByRepository: ( + username: string, + slug: string, query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + state?: "open" | "merged" | "declined"; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews`, + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests\`, method: "GET", query: query, format: "json", @@ -23029,49 +37333,15 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews`, - method: "POST", - body: data, - type: ContentType.Json, + getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}\`, + method: "GET", format: "json", ...params, }), @@ -23079,1099 +37349,2278 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}`, - method: "GET", - format: "json", + mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}/merge\`, + method: "POST", ...params, }), + }; +} +" +`; + +exports[`simple > 'no-definitions-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface BasicErrorModel { + /** + * @min 100 + * @max 600 + */ + code: number; + field?: string | null; + message: string; +} + +export type ExtendedErrorModel = BasicErrorModel & { + rootCause: string; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Empty schema example + * @version 1.0.0 + */ +export class Api extends HttpClient {} +" +`; + +exports[`simple > 'oneof-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Cat { + age?: number; + hunts?: boolean; +} + +export interface Dog { + bark?: boolean; + breed?: "Dingo" | "Husky" | "Retriever" | "Shepherd"; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; - /** - * @description Update the review summary comment with new text. - * - * @tags pulls - * @name PullsUpdateReview - * @summary Update a review for a pull request - * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} - */ - pullsUpdateReview: ( - owner: string, - repo: string, - pullNumber: number, - reviewId: number, - data: { - /** The body text of the pull request review. */ - body: string; + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * No description - * - * @tags pulls - * @name PullsDeletePendingReview - * @summary Delete a pending review for a pull request - * @request DELETE:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} - */ - pullsDeletePendingReview: ( - owner: string, - repo: string, - pullNumber: number, - reviewId: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}`, - method: "DELETE", - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); - /** - * @description List comments for a specific pull request review. - * - * @tags pulls - * @name PullsListCommentsForReview - * @summary List comments for a pull request review - * @request GET:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments - */ - pullsListCommentsForReview: ( - owner: string, - repo: string, - pullNumber: number, - reviewId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } - /** - * @description **Note:** To dismiss a pull request review on a [protected branch](https://docs.github.com/rest/reference/repos#branches), you must be a repository administrator or be included in the list of people or teams who can dismiss pull request reviews. - * - * @tags pulls - * @name PullsDismissReview - * @summary Dismiss a review for a pull request - * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals - */ - pullsDismissReview: ( - owner: string, - repo: string, - pullNumber: number, - reviewId: number, - data: { - /** @example ""APPROVE"" */ - event?: string; - /** The message for the pull request review dismissal */ - message: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}/dismissals`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Oneof Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + pets = { /** * No description * - * @tags pulls - * @name PullsSubmitReview - * @summary Submit a review for a pull request - * @request POST:/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events + * @name PetsPartialUpdate + * @request PATCH:/pets */ - pullsSubmitReview: ( - owner: string, - repo: string, - pullNumber: number, - reviewId: number, - data: { - /** The body text of the pull request review */ - body?: string; - /** The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action. */ - event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/reviews/${reviewId}/events`, - method: "POST", + petsPartialUpdate: (data: Cat | Dog, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "PATCH", body: data, type: ContentType.Json, - format: "json", ...params, }), + }; +} +" +`; - /** - * @description Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch. - * - * @tags pulls - * @name PullsUpdateBranch - * @summary Update a pull request branch - * @request PUT:/repos/{owner}/{repo}/pulls/{pull_number}/update-branch - */ - pullsUpdateBranch: ( - owner: string, - repo: string, - pullNumber: number, - data: { - /** The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a `422 Unprocessable Entity` status. You can use the "[List commits](https://docs.github.com/rest/reference/repos#list-commits)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref. */ - expected_head_sha?: string; - } | null, - params: RequestParams = {}, - ) => - this.request< - { - message?: string; - url?: string; - }, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/repos/${owner}/${repo}/pulls/${pullNumber}/update-branch`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +exports[`simple > 'path-args' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description Gets the preferred README for a repository. READMEs support [custom media types](https://docs.github.com/rest/reference/repos#custom-media-types) for retrieving the raw content or rendered HTML. - * - * @tags repos - * @name ReposGetReadme - * @summary Get a repository README - * @request GET:/repos/{owner}/{repo}/readme - */ - reposGetReadme: ( - owner: string, - repo: string, - query?: { - /** The name of the commit/branch/tag. Default: the repository’s default branch (usually `master`) */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; - /** - * @description This returns a list of releases, which does not include regular Git tags that have not been associated with a release. To get a list of Git tags, use the [Repository Tags API](https://docs.github.com/rest/reference/repos#list-repository-tags). Information about published releases are available to everyone. Only users with push access will receive listings for draft releases. - * - * @tags repos - * @name ReposListReleases - * @summary List releases - * @request GET:/repos/{owner}/{repo}/releases - */ - reposListReleases: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - query: query, - format: "json", - ...params, - }), +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} - /** - * @description Users with push access to the repository can create a release. This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. - * - * @tags repos - * @name ReposCreateRelease - * @summary Create a release - * @request POST:/repos/{owner}/{repo}/releases - */ - reposCreateRelease: ( - owner: string, - repo: string, - data: { - /** Text describing the contents of the tag. */ - body?: string; - /** - * `true` to create a draft (unpublished) release, `false` to create a published one. - * @default false - */ - draft?: boolean; - /** The name of the release. */ - name?: string; - /** - * `true` to identify the release as a prerelease. `false` to identify the release as a full release. - * @default false - */ - prerelease?: boolean; - /** The name of the tag. */ - tag_name: string; - /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`). */ - target_commitish?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +export type RequestParams = Omit; - /** - * @description To download the asset's binary content, set the `Accept` header of the request to [`application/octet-stream`](https://docs.github.com/rest/overview/media-types). The API will either redirect the client to the location, or stream it directly if possible. API clients should handle both a `200` or `302` response. - * - * @tags repos - * @name ReposGetReleaseAsset - * @summary Get a release asset - * @request GET:/repos/{owner}/{repo}/releases/assets/{asset_id} - */ - reposGetReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => - this.request< - ReleaseAsset, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/releases/assets/${assetId}`, - method: "GET", - format: "json", - ...params, - }), +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} - /** - * @description Users with push access to the repository can edit a release asset. - * - * @tags repos - * @name ReposUpdateReleaseAsset - * @summary Update a release asset - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{asset_id} - */ - reposUpdateReleaseAsset: ( - owner: string, - repo: string, - assetId: number, - data: { - /** An alternate short description of the asset. Used in place of the filename. */ - label?: string; - /** The file name of the asset. */ - name?: string; - /** @example ""uploaded"" */ - state?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${assetId}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +export interface HttpResponse extends Response { + data: D; + error: E; +} - /** - * No description - * - * @tags repos - * @name ReposDeleteReleaseAsset - * @summary Delete a release asset - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{asset_id} - */ - reposDeleteReleaseAsset: (owner: string, repo: string, assetId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${assetId}`, - method: "DELETE", - ...params, - }), +type CancelToken = Symbol | string | number; - /** - * @description View the latest published full release for the repository. The latest release is the most recent non-prerelease, non-draft release, sorted by the `created_at` attribute. The `created_at` attribute is the date of the commit used for the release, and not the date when the release was drafted or published. - * - * @tags repos - * @name ReposGetLatestRelease - * @summary Get the latest release - * @request GET:/repos/{owner}/{repo}/releases/latest - */ - reposGetLatestRelease: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/latest`, - method: "GET", - format: "json", - ...params, - }), +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://unknown.io/v666"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description Get a published release with the specified tag. - * - * @tags repos - * @name ReposGetReleaseByTag - * @summary Get a release by tag name - * @request GET:/repos/{owner}/{repo}/releases/tags/{tag} - */ - reposGetReleaseByTag: (owner: string, repo: string, tag: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/tags/${tag}`, - method: "GET", - format: "json", - ...params, - }), + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; - /** - * @description **Note:** This returns an `upload_url` key corresponding to the endpoint for uploading release assets. This key is a [hypermedia resource](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia). - * - * @tags repos - * @name ReposGetRelease - * @summary Get a release - * @request GET:/repos/{owner}/{repo}/releases/{release_id} - */ - reposGetRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${releaseId}`, - method: "GET", - format: "json", - ...params, - }), + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); - /** - * @description Users with push access to the repository can edit a release. - * - * @tags repos - * @name ReposUpdateRelease - * @summary Update a release - * @request PATCH:/repos/{owner}/{repo}/releases/{release_id} - */ - reposUpdateRelease: ( - owner: string, - repo: string, - releaseId: number, - data: { - /** Text describing the contents of the tag. */ - body?: string; - /** `true` makes the release a draft, and `false` publishes the release. */ - draft?: boolean; - /** The name of the release. */ - name?: string; - /** `true` to identify the release as a prerelease, `false` to identify the release as a full release. */ - prerelease?: boolean; - /** The name of the tag. */ - tag_name?: string; - /** Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually `master`). */ - target_commitish?: string; + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${releaseId}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description Users with push access to the repository can delete a release. - * - * @tags repos - * @name ReposDeleteRelease - * @summary Delete a release - * @request DELETE:/repos/{owner}/{repo}/releases/{release_id} - */ - reposDeleteRelease: (owner: string, repo: string, releaseId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${releaseId}`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Path Args + * @version 1.0.0 + * @license MIT + * @baseUrl http://unknown.io/v666 + */ +export class Api extends HttpClient { + pets = { /** * No description * - * @tags repos - * @name ReposListReleaseAssets - * @summary List release assets - * @request GET:/repos/{owner}/{repo}/releases/{release_id}/assets + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets/{param1}/{param2}/{param3} */ - reposListReleaseAssets: ( - owner: string, - repo: string, - releaseId: number, + listPets: ( + param3: number, + param1?: number, + param2?: number, query?: { /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * How many items to return at one time (max 100) + * @format int32 */ - per_page?: number; + queryParam?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${releaseId}/assets`, + this.request({ + path: \`/pets/\${param1}/\${param2}/\${param3}\`, method: "GET", query: query, format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'personal-api-example' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type AuthUserType = OmitIdUserType; + +export type ExtractedProjectType = OmitProjectTypeJob & { + /** Information about job */ + job: JobType; +}; + +/** Information about job */ +export interface FooBar { + kind?: JobKind; +} + +/** Information about job */ +export interface FooBarBaz { + id?: string; + kind?: JobKind; + link?: string; + name?: string; + [key: string]: any; +} + +/** Information about job */ +export interface FooBaz { + link?: string; + name?: string; +} + +/** + * FooBar + * @format int32 + */ +export enum IntEnumWithNames { + Unknown = 0, + String = 1, + Int32 = 2, + Int64 = 3, + Double = 4, + DateTime = 5, + Test2 = 6, + Test23 = 7, + Tess44 = 8, + BooFar = 9, +} + +export enum JobKind { + COMPANY = "COMPANY", + PERSONAL = "PERSONAL", + FREELANCE = "FREELANCE", + OPEN_SOURCE = "OPEN_SOURCE", +} + +/** Information about job */ +export interface JobType { + /** web site address */ + address?: string; + /** + * Exist only in open source jobs + * Format: \`\${username}/\${projectName}\` + */ + github?: string; + id: string; + /** + * Exist only in open source jobs + * Means project is dev. tool (like swagger code generator) + */ + isTool?: boolean; + kind: JobKind; + link?: string; + name?: string; + /** + * Exist only in open source jobs + * Format: \`\${orgname}/\${projectName}\` + */ + npm?: string; +} + +export type JobUpdateType = OmitIdJobType; + +export interface NullableEnum { + /** @format int64 */ + id?: number; + legalCategory?: "SARL" | "ASSOCIATION" | null; +} + +export type OmitIdJobType = OmitJobTypeIdOrId; + +export type OmitIdProjectType = OmitProjectTypeIdOrId; + +export type OmitIdUserType = OmitUserTypeIdOrId; + +export type OmitJobTypeIdOrId = PickJobTypeExcludeKeysIdOrId; + +export type OmitProjectTypeIdOrId = PickProjectTypeExcludeKeysIdOrId; + +export type OmitProjectTypeJob = PickProjectTypeExcludeKeysJob; + +export type OmitUserTypeIdOrId = PickUserTypeExcludeKeysIdOrId; + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobTypeExcludeKeysIdOrId { + /** web site address */ + address?: string; + /** + * Exist only in open source jobs + * Format: \`\${username}/\${projectName}\` + */ + github?: string; + /** + * Exist only in open source jobs + * Means project is dev. tool (like swagger code generator) + */ + isTool?: boolean; + kind: JobKind; + link?: string; + name?: string; + /** + * Exist only in open source jobs + * Format: \`\${orgname}/\${projectName}\` + */ + npm?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectTypeExcludeKeysIdOrId { + description: string; + job: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectTypeExcludeKeysJob { + description: string; + id: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickUserTypeExcludeKeysIdOrId { + password: string; + username: string; +} + +export interface ProjectType { + description: string; + id: string; + job: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export type ProjectUpdateType = OmitIdProjectType; + +export type TestAllOfDc = (FooBarBaz & FooBar) & { + prop?: string; +}; + +export type TestAllOfDc2 = FooBarBaz & { + prop?: string; +}; + +export type TestAnyOfDc = (FooBarBaz | FooBar) & { + prop?: string; +}; + +export type TestOneOfDc = (FooBarBaz | FooBar) & { + prop?: string; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://localhost:8080/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title No title + * @baseUrl http://localhost:8080/api/v1 + */ +export class Api extends HttpClient { + auth = { /** - * @description This endpoint makes use of [a Hypermedia relation](https://docs.github.com/rest/overview/resources-in-the-rest-api#hypermedia) to determine which URL to access. The endpoint you call to upload release assets is specific to your release. Use the `upload_url` returned in the response of the [Create a release endpoint](https://docs.github.com/rest/reference/repos#create-a-release) to upload a release asset. You need to use an HTTP client which supports [SNI](http://en.wikipedia.org/wiki/Server_Name_Indication) to make calls to this endpoint. Most libraries will set the required `Content-Length` header automatically. Use the required `Content-Type` header to provide the media type of the asset. For a list of media types, see [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). For example: `application/zip` GitHub expects the asset data in its raw binary form, rather than JSON. You will send the raw binary content of the asset as the request body. Everything else about the endpoint is the same as the rest of the API. For example, you'll still need to pass your authentication to be able to upload an asset. When an upstream failure occurs, you will receive a `502 Bad Gateway` status. This may leave an empty asset with a state of `starter`. It can be safely deleted. **Notes:** * GitHub renames asset filenames that have special characters, non-alphanumeric characters, and leading or trailing periods. The "[List assets for a release](https://docs.github.com/rest/reference/repos#list-assets-for-a-release)" endpoint lists the renamed filenames. For more information and help, contact [GitHub Support](https://support.github.com/contact). * If you upload an asset with the same filename as another uploaded asset, you'll receive an error and must delete the old file before you can re-upload the new asset. + * No description * - * @tags repos - * @name ReposUploadReleaseAsset - * @summary Upload a release asset - * @request POST:/repos/{owner}/{repo}/releases/{release_id}/assets + * @tags Auth + * @name Login + * @request POST:/auth */ - reposUploadReleaseAsset: ( - owner: string, - repo: string, - releaseId: number, - data: WebhookConfigUrl, - query?: { - label?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${releaseId}/assets`, + login: (data: AuthUserType, params: RequestParams = {}) => + this.request({ + path: \`/auth\`, method: "POST", - query: query, body: data, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Lists all secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the `repo` scope or `security_events` scope. GitHub Apps must have the `secret_scanning_alerts` read permission to use this endpoint. + * No description * - * @tags secret-scanning - * @name SecretScanningListAlertsForRepo - * @summary List secret scanning alerts for a repository - * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure */ - secretScanningListAlertsForRepo: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Set to `open` or `resolved` to only list secret scanning alerts in a specific state. */ - state?: "open" | "resolved"; - }, - params: RequestParams = {}, - ) => - this.request< - SecretScanningAlert[], - void | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/secret-scanning/alerts`, - method: "GET", - query: query, + refresh: (params: RequestParams = {}) => + this.request({ + path: \`/auth/refresh\`, + method: "POST", + secure: true, format: "json", ...params, }), - + }; + jobs = { /** - * @description Gets a single secret scanning alert detected in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the `repo` scope or `security_events` scope. GitHub Apps must have the `secret_scanning_alerts` read permission to use this endpoint. + * No description * - * @tags secret-scanning - * @name SecretScanningGetAlert - * @summary Get a secret scanning alert - * @request GET:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure */ - secretScanningGetAlert: (owner: string, repo: string, alertNumber: AlertNumber, params: RequestParams = {}) => - this.request< - SecretScanningAlert, - void | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/secret-scanning/alerts/${alertNumber}`, + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, method: "GET", + secure: true, format: "json", ...params, }), /** - * @description Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the `repo` scope or `security_events` scope. GitHub Apps must have the `secret_scanning_alerts` write permission to use this endpoint. + * No description * - * @tags secret-scanning - * @name SecretScanningUpdateAlert - * @summary Update a secret scanning alert - * @request PATCH:/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure */ - secretScanningUpdateAlert: ( - owner: string, - repo: string, - alertNumber: AlertNumber, - data: { - /** **Required when the `state` is `resolved`.** The reason for resolving the alert. Can be one of `false_positive`, `wont_fix`, `revoked`, or `used_in_tests`. */ - resolution?: SecretScanningAlertResolution; - /** Sets the state of the secret scanning alert. Can be either `open` or `resolved`. You must provide `resolution` when you set the state to `resolved`. */ - state: SecretScanningAlertState; - }, - params: RequestParams = {}, - ) => - this.request< - SecretScanningAlert, - void | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/repos/${owner}/${repo}/secret-scanning/alerts/${alertNumber}`, - method: "PATCH", + addJob: (data: JobUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "POST", body: data, + secure: true, type: ContentType.Json, format: "json", ...params, }), /** - * @description Lists the people that have starred the repository. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the `Accept` header: + * No description * - * @tags activity - * @name ActivityListStargazersForRepo - * @summary List stargazers - * @request GET:/repos/{owner}/{repo}/stargazers + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure */ - activityListStargazersForRepo: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + getJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Returns a weekly aggregate of the number of additions and deletions pushed to a repository. + * No description * - * @tags repos - * @name ReposGetCodeFrequencyStats - * @summary Get the weekly commit activity - * @request GET:/repos/{owner}/{repo}/stats/code_frequency + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure */ - reposGetCodeFrequencyStats: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", + updateJob: (id: string, params: JobUpdateType, requestParams: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "PATCH", + body: params, + secure: true, + type: ContentType.Json, format: "json", - ...params, + ...requestParams, }), /** - * @description Returns the last year of commit activity grouped by week. The `days` array is a group of commits per day, starting on `Sunday`. + * No description * - * @tags repos - * @name ReposGetCommitActivityStats - * @summary Get the last year of commit activity - * @request GET:/repos/{owner}/{repo}/stats/commit_activity + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure */ - reposGetCommitActivityStats: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + deleteJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), + }; + projects = { + /** + * No description + * + * @tags Projects + * @name GetProjects + * @request GET:/projects + */ + getProjects: (params: RequestParams = {}) => + this.request({ + path: \`/projects\`, method: "GET", format: "json", ...params, }), /** - * @description Returns the `total` number of commits authored by the contributor. In addition, the response includes a Weekly Hash (`weeks` array) with the following information: * `w` - Start of the week, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time). * `a` - Number of additions * `d` - Number of deletions * `c` - Number of commits + * No description * - * @tags repos - * @name ReposGetContributorsStats - * @summary Get all contributor commit activity - * @request GET:/repos/{owner}/{repo}/stats/contributors + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure */ - reposGetContributorsStats: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", + addProjects: (data: ProjectUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Returns the total commit counts for the `owner` and total commit counts in `all`. `all` is everyone combined, including the `owner` in the last 52 weeks. If you'd like to get the commit counts for non-owners, you can subtract `owner` from `all`. The array order is oldest week (index 0) to most recent week. + * No description * - * @tags repos - * @name ReposGetParticipationStats - * @summary Get the weekly commit count - * @request GET:/repos/{owner}/{repo}/stats/participation + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure */ - reposGetParticipationStats: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", + updateProject: (id: string, data: ProjectUpdateType, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, format: "json", ...params, }), /** - * @description Each array contains the day number, hour number, and number of commits: * `0-6`: Sunday - Saturday * `0-23`: Hour of day * Number of commits For example, `[2, 14, 25]` indicates that there were 25 total commits, during the 2:00pm hour on Tuesdays. All times are based on the time zone of individual commits. + * No description * - * @tags repos - * @name ReposGetPunchCardStats - * @summary Get the hourly commit count for each day - * @request GET:/repos/{owner}/{repo}/stats/punch_card + * @tags Projects + * @name DeleteProject + * @request DELETE:/projects/{id} */ - reposGetPunchCardStats: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", + deleteProject: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "DELETE", format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'petstore' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export interface Pet { + /** @format int64 */ + id: number; + name: string; + tag?: string; +} + +export type Pets = Pet[]; + +export type StringNullable = string | null; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @baseUrl http://petstore.swagger.io/v1 + */ +export class Api extends HttpClient { + pets = { /** - * @description Users with push access in a repository can create commit statuses for a given SHA. Note: there is a limit of 1000 statuses per `sha` and `context` within a repository. Attempts to create more than 1000 statuses will result in a validation error. + * No description * - * @tags repos - * @name ReposCreateCommitStatus - * @summary Create a commit status - * @request POST:/repos/{owner}/{repo}/statuses/{sha} + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets */ - reposCreateCommitStatus: ( - owner: string, - repo: string, - sha: string, - data: { - /** - * A string label to differentiate this status from the status of other systems. This field is case-insensitive. - * @default "default" - */ - context?: string; - /** A short description of the status. */ - description?: string; - /** The state of the status. Can be one of `error`, `failure`, `pending`, or `success`. */ - state: "error" | "failure" | "pending" | "success"; + listPets: ( + query?: { /** - * The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the source of the status. - * For example, if your continuous integration system is posting build status, you would want to provide the deep link for the build output for this specific SHA: - * `http://ci.example.com/user/repo/build/sha` + * How many items to return at one time (max 100) + * @format int32 */ - target_url?: string; + limit?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${sha}`, + this.request({ + path: \`/pets\`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets + */ + createPets: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, method: "POST", - body: data, - type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} + */ + showPetById: (petId: string, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${petId}\`, + method: "GET", format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'petstore' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export interface Pet { + /** @format int64 */ + id: number; + name: string; + tag?: string; +} + +export type Pets = Pet[]; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; - /** - * @description Lists the people watching the specified repository. - * - * @tags activity - * @name ActivityListWatchersForRepo - * @summary List watchers - * @request GET:/repos/{owner}/{repo}/subscribers - */ - activityListWatchersForRepo: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * No description - * - * @tags activity - * @name ActivityGetRepoSubscription - * @summary Get a repository subscription - * @request GET:/repos/{owner}/{repo}/subscription - */ - activityGetRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description If you would like to watch a repository, set `subscribed` to `true`. If you would like to ignore notifications made within a repository, set `ignored` to `true`. If you would like to stop watching a repository, [delete the repository's subscription](https://docs.github.com/rest/reference/activity#delete-a-repository-subscription) completely. - * - * @tags activity - * @name ActivitySetRepoSubscription - * @summary Set a repository subscription - * @request PUT:/repos/{owner}/{repo}/subscription - */ - activitySetRepoSubscription: ( - owner: string, - repo: string, - data: { - /** Determines if all notifications should be blocked from this repository. */ - ignored?: boolean; - /** Determines if notifications should be received from this repository. */ - subscribed?: boolean; + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description This endpoint should only be used to stop watching a repository. To control whether or not you wish to receive notifications from a repository, [set the repository's subscription manually](https://docs.github.com/rest/reference/activity#set-a-repository-subscription). - * - * @tags activity - * @name ActivityDeleteRepoSubscription - * @summary Delete a repository subscription - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - activityDeleteRepoSubscription: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @baseUrl http://petstore.swagger.io/v1 + */ +export class Api extends HttpClient { + pets = { /** * No description * - * @tags repos - * @name ReposListTags - * @summary List repository tags - * @request GET:/repos/{owner}/{repo}/tags + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/pets */ - reposListTags: ( - owner: string, - repo: string, + listPets: ( query?: { /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * How many items to return at one time (max 100) + * @format int32 */ - per_page?: number; + limit?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, + this.request({ + path: \`/pets\`, method: "GET", query: query, format: "json", ...params, }), - /** - * @description Gets a redirect URL to download a tar archive for a repository. If you omit `:ref`, the repository’s default branch (usually `master`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the `Location` header to make a second `GET` request. **Note**: For private repositories, these links are temporary and expire after five minutes. - * - * @tags repos - * @name ReposDownloadTarballArchive - * @summary Download a repository archive (tar) - * @request GET:/repos/{owner}/{repo}/tarball/{ref} - */ - reposDownloadTarballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tarball/${ref}`, - method: "GET", - ...params, - }), - /** * No description * - * @tags repos - * @name ReposListTeams - * @summary List repository teams - * @request GET:/repos/{owner}/{repo}/teams + * @tags pets + * @name CreatePets + * @summary Create a pet + * @request POST:/pets */ - reposListTeams: ( - owner: string, - repo: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - query: query, - format: "json", + createPets: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", ...params, }), /** * No description * - * @tags repos - * @name ReposGetAllTopics - * @summary Get all repository topics - * @request GET:/repos/{owner}/{repo}/topics + * @tags pets + * @name ShowPetById + * @summary Info for a specific pet + * @request GET:/pets/{petId} */ - reposGetAllTopics: (owner: string, repo: string, params: RequestParams = {}) => - this.request< - Topic, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/repos/${owner}/${repo}/topics`, + showPetById: (petId: string, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${petId}\`, method: "GET", format: "json", ...params, }), + }; +} +" +`; - /** - * No description - * - * @tags repos - * @name ReposReplaceAllTopics - * @summary Replace all repository topics - * @request PUT:/repos/{owner}/{repo}/topics - */ - reposReplaceAllTopics: ( - owner: string, - repo: string, - data: { - /** An array of topics to add to the repository. Pass one or more topics to _replace_ the set of existing topics. Send an empty array (`[]`) to clear all topics from the repository. **Note:** Topic `names` cannot contain uppercase letters. */ - names: string[]; +exports[`simple > 'petstore-expanded' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request< - Topic, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationErrorSimple - >({ - path: `/repos/${owner}/${repo}/topics`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + }; + } - /** - * @description Get the total number of clones and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. - * - * @tags repos - * @name ReposGetClones - * @summary Get repository clones - * @request GET:/repos/{owner}/{repo}/traffic/clones - */ - reposGetClones: ( - owner: string, - repo: string, - query?: { - /** - * Must be one of: `day`, `week`. - * @default "day" - */ - per?: "day" | "week"; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/traffic/clones`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); - /** - * @description Get the top 10 popular contents over the last 14 days. - * - * @tags repos - * @name ReposGetTopPaths - * @summary Get top referral paths - * @request GET:/repos/{owner}/{repo}/traffic/popular/paths - */ - reposGetTopPaths: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/traffic/popular/paths`, - method: "GET", - format: "json", - ...params, - }), + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } - /** - * @description Get the top 10 referrers over the last 14 days. - * - * @tags repos - * @name ReposGetTopReferrers - * @summary Get top referral sources - * @request GET:/repos/{owner}/{repo}/traffic/popular/referrers - */ - reposGetTopReferrers: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/traffic/popular/referrers`, - method: "GET", - format: "json", - ...params, - }), + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification + */ +export class Api extends HttpClient { + pets = { /** - * @description Get the total number of views and breakdown per day or week for the last 14 days. Timestamps are aligned to UTC midnight of the beginning of the day or week. Week begins on Monday. + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. * - * @tags repos - * @name ReposGetViews - * @summary Get page views - * @request GET:/repos/{owner}/{repo}/traffic/views + * @name FindPets + * @request GET:/pets */ - reposGetViews: ( - owner: string, - repo: string, + findPets: ( query?: { /** - * Must be one of: `day`, `week`. - * @default "day" + * maximum number of results to return + * @format int32 */ - per?: "day" | "week"; + limit?: number; + /** tags to filter by */ + tags?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/repos/${owner}/${repo}/traffic/views`, + this.request({ + path: \`/pets\`, method: "GET", query: query, format: "json", @@ -24179,26 +39628,14 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/transfer`, + addPet: (data: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, method: "POST", body: data, type: ContentType.Json, @@ -24207,1146 +39644,1944 @@ export class Api extends HttpClient - this.request({ - path: `/repos/${owner}/${repo}/vulnerability-alerts`, + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "GET", + format: "json", ...params, }), /** - * @description Enables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". - * - * @tags repos - * @name ReposEnableVulnerabilityAlerts - * @summary Enable vulnerability alerts - * @request PUT:/repos/{owner}/{repo}/vulnerability-alerts - */ - reposEnableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/vulnerability-alerts`, - method: "PUT", - ...params, - }), - - /** - * @description Disables dependency alerts and the dependency graph for a repository. The authenticated user must have admin access to the repository. For more information, see "[About security alerts for vulnerable dependencies](https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies)". + * @description deletes a single pet based on the ID supplied * - * @tags repos - * @name ReposDisableVulnerabilityAlerts - * @summary Disable vulnerability alerts - * @request DELETE:/repos/{owner}/{repo}/vulnerability-alerts + * @name DeletePet + * @request DELETE:/pets/{id} */ - reposDisableVulnerabilityAlerts: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/vulnerability-alerts`, + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "DELETE", ...params, }), + }; +} +" +`; - /** - * @description Gets a redirect URL to download a zip archive for a repository. If you omit `:ref`, the repository’s default branch (usually `master`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use the `Location` header to make a second `GET` request. **Note**: For private repositories, these links are temporary and expire after five minutes. - * - * @tags repos - * @name ReposDownloadZipballArchive - * @summary Download a repository archive (zip) - * @request GET:/repos/{owner}/{repo}/zipball/{ref} - */ - reposDownloadZipballArchive: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/zipball/${ref}`, - method: "GET", - ...params, - }), +exports[`simple > 'petstore-expanded' 2`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description Creates a new repository using a repository template. Use the `template_owner` and `template_repo` route parameters to specify the repository to use as the template. The authenticated user must own or be a member of an organization that owns the repository. To check if a repository is available to use as a template, get the repository's information using the [Get a repository](https://docs.github.com/rest/reference/repos#get-a-repository) endpoint and check that the `is_template` key is `true`. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * `public_repo` scope or `repo` scope to create a public repository * `repo` scope to create a private repository - * - * @tags repos - * @name ReposCreateUsingTemplate - * @summary Create a repository using a template - * @request POST:/repos/{template_owner}/{template_repo}/generate - */ - reposCreateUsingTemplate: ( - templateOwner: string, - templateRepo: string, - data: { - /** A short description of the new repository. */ - description?: string; - /** - * Set to `true` to include the directory structure and files from all branches in the template repository, and not just the default branch. Default: `false`. - * @default false - */ - include_all_branches?: boolean; - /** The name of the new repository. */ - name: string; - /** The organization or person who will own the new repository. To create a new repository in an organization, the authenticated user must be a member of the specified organization. */ - owner?: string; - /** - * Either `true` to create a new private repository or `false` to create a new public one. - * @default false - */ - private?: boolean; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${templateOwner}/${templateRepo}/generate`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +export interface Error { + /** @format int32 */ + code: number; + message: string; +} + +export interface NewPet { + name: string; + tag?: string; +} + +/** Page«TemplateResponseDto» */ +export interface PageTemplateResponseDto { + content?: any[]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** @format int32 */ + number?: number; + /** @format int32 */ + numberOfElements?: number; + pageable?: any; + /** @format int32 */ + size?: number; + sort?: any; + /** @format int64 */ + totalElements?: number; + /** @format int32 */ + totalPages?: number; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", }; - repositories = { - /** - * @description Lists all public repositories in the order that they were created. Note: Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of repositories. - * - * @tags repos - * @name ReposListPublic - * @summary List public repositories - * @request GET:/repositories - */ - reposListPublic: ( - query?: { - /** A repository ID. Only return repositories with an ID greater than this ID. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; }; - scim = { - /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. - * - * @tags enterprise-admin - * @name EnterpriseAdminListProvisionedGroupsEnterprise - * @summary List provisioned SCIM groups for an enterprise - * @request GET:/scim/v2/enterprises/{enterprise}/Groups - */ - enterpriseAdminListProvisionedGroupsEnterprise: ( - enterprise: string, - query?: { - /** Used for pagination: the number of results to return. */ - count?: number; - /** Used for pagination: the index of the first result to return. */ - startIndex?: number; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision an enterprise group, and invite users to the group. This sends invitation emails to the email address of the invited users to join the GitHub organization that the SCIM group corresponds to. - * - * @tags enterprise-admin - * @name EnterpriseAdminProvisionAndInviteEnterpriseGroup - * @summary Provision a SCIM enterprise group and invite users - * @request POST:/scim/v2/enterprises/{enterprise}/Groups - */ - enterpriseAdminProvisionAndInviteEnterpriseGroup: ( - enterprise: string, - data: { - /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ - displayName: string; - members?: { - /** The SCIM user ID for a user. */ - value: string; - }[]; - /** The SCIM schema URIs. */ - schemas: string[]; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. - * - * @tags enterprise-admin - * @name EnterpriseAdminGetProvisioningInformationForEnterpriseGroup - * @summary Get SCIM provisioning information for an enterprise group - * @request GET:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} - */ - enterpriseAdminGetProvisioningInformationForEnterpriseGroup: ( - enterprise: string, - scimGroupId: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups/${scimGroupId}`, - method: "GET", - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pathParams = { /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned group’s information. You must provide all the information required for the group as if you were provisioning it for the first time. Any existing group information that you don't provide will be removed, including group membership. If you want to only update a specific attribute, use the [Update an attribute for a SCIM enterprise group](#update-an-attribute-for-a-scim-enterprise-group) endpoint instead. + * No description * - * @tags enterprise-admin - * @name EnterpriseAdminSetInformationForProvisionedEnterpriseGroup - * @summary Set SCIM information for a provisioned enterprise group - * @request PUT:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + * @name PathParamFooBarBazList + * @request GET:/path-params/{path-param}/{foo-bar-baz} */ - enterpriseAdminSetInformationForProvisionedEnterpriseGroup: ( - enterprise: string, - scimGroupId: string, - data: { - /** The name of the SCIM group. This must match the GitHub organization that the group maps to. */ - displayName: string; - members?: { - /** The SCIM user ID for a user. */ - value: string; - }[]; - /** The SCIM schema URIs. */ - schemas: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups/${scimGroupId}`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", + pathParamFooBarBazList: (pathParam: string, fooBarBaz: string, params: RequestParams = {}) => + this.request({ + path: \`/path-params/\${pathParam}/\${fooBarBaz}\`, + method: "GET", ...params, }), - - /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned group’s individual attributes. To change a group’s values, you must provide a specific Operations JSON format that contains at least one of the add, remove, or replace operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). - * - * @tags enterprise-admin - * @name EnterpriseAdminUpdateAttributeForEnterpriseGroup - * @summary Update an attribute for a SCIM enterprise group - * @request PATCH:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} - */ - enterpriseAdminUpdateAttributeForEnterpriseGroup: ( - enterprise: string, - scimGroupId: string, - data: { - /** Array of [SCIM operations](https://tools.ietf.org/html/rfc7644#section-3.5.2). */ - Operations: object[]; - /** The SCIM schema URIs. */ - schemas: string[]; + }; + pets = { + /** + * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. + * + * @name FindPets + * @request GET:/pets + */ + findPets: ( + query?: { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups/${scimGroupId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + this.request({ + path: \`/pets\`, + method: "GET", + query: query, format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @description Creates a new pet in the store. Duplicates are allowed * - * @tags enterprise-admin - * @name EnterpriseAdminDeleteScimGroupFromEnterprise - * @summary Delete a SCIM group from an enterprise - * @request DELETE:/scim/v2/enterprises/{enterprise}/Groups/{scim_group_id} + * @name AddPet + * @request POST:/pets */ - enterpriseAdminDeleteScimGroupFromEnterprise: ( - enterprise: string, - scimGroupId: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Groups/${scimGroupId}`, - method: "DELETE", + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: pet, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Retrieves a paginated list of all provisioned enterprise members, including pending invitations. When a user with a SAML-provisioned external identity leaves (or is removed from) an enterprise, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an enterprise, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a `null` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub enterprise. 1. The user attempts to access the GitHub enterprise and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the `null` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub enterprise, and the external identity `null` entry remains in place. + * @description Returns a user based on a single ID, if the user does not have access to the pet * - * @tags enterprise-admin - * @name EnterpriseAdminListProvisionedIdentitiesEnterprise - * @summary List SCIM provisioned identities for an enterprise - * @request GET:/scim/v2/enterprises/{enterprise}/Users + * @name FindPetById + * @request GET:/pets/{id} */ - enterpriseAdminListProvisionedIdentitiesEnterprise: ( - enterprise: string, - query?: { - /** Used for pagination: the number of results to return. */ - count?: number; - /** Used for pagination: the index of the first result to return. */ - startIndex?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users`, + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Provision enterprise membership for a user, and send organization invitation emails to the email address. You can optionally include the groups a user will be invited to join. If you do not provide a list of `groups`, the user is provisioned for the enterprise, but no organization invitation emails will be sent. + * @description deletes a single pet based on the ID supplied * - * @tags enterprise-admin - * @name EnterpriseAdminProvisionAndInviteEnterpriseUser - * @summary Provision and invite a SCIM enterprise user - * @request POST:/scim/v2/enterprises/{enterprise}/Users + * @name DeletePet + * @request DELETE:/pets/{id} */ - enterpriseAdminProvisionAndInviteEnterpriseUser: ( - enterprise: string, - data: { - /** List of user emails. */ - emails: { - /** Whether this email address is the primary address. */ - primary: boolean; - /** The type of email address. */ - type: string; - /** The email address. */ - value: string; - }[]; - /** List of SCIM group IDs the user is a member of. */ - groups?: { - value?: string; - }[]; - name: { - /** The last name of the user. */ - familyName: string; - /** The first name of the user. */ - givenName: string; - }; - /** The SCIM schema URIs. */ - schemas: string[]; - /** The username for the user. */ - userName: string; + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "DELETE", + ...params, + }), + }; +} +" +`; + +exports[`simple > 'petstore-minimal' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Pet { + /** @format int64 */ + id: number; + multiple?: string | number; + name: string; + tag?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users`, - method: "POST", - body: data, - type: ContentType.Json, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { + /** + * @description Returns all pets from the system that the user has access to + * + * @name PetsList + * @request GET:/pets + */ + petsList: (params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "GET", format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'petstore-simple' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface ErrorModel { + /** @format int32 */ + code: number; + message: string; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +/** Description of Test type */ +export type Test = NewPet; + +export interface Test2 { + /** Field description */ + data?: NewPet; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license MIT + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @contact Swagger API Team + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @description Returns all pets from the system that the user has access to * - * @tags enterprise-admin - * @name EnterpriseAdminGetProvisioningInformationForEnterpriseUser - * @summary Get SCIM provisioning information for an enterprise user - * @request GET:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + * @name FindPets + * @request GET:/pets */ - enterpriseAdminGetProvisioningInformationForEnterpriseUser: ( - enterprise: string, - scimUserId: string, + findPets: ( + query?: { + /** + * maximum number of results to return + * @format int32 + */ + limit?: number; + /** tags to filter by */ + tags?: string[]; + }, params: RequestParams = {}, ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users/${scimUserId}`, + this.request({ + path: \`/pets\`, method: "GET", + query: query, format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](#update-an-attribute-for-an-enterprise-scim-user) endpoint instead. You must at least provide the required values for the user: `userName`, `name`, and `emails`. **Warning:** Setting `active: false` removes the user from the enterprise, deletes the external identity, and deletes the associated `{scim_user_id}`. + * @description Creates a new pet in the store. Duplicates are allowed * - * @tags enterprise-admin - * @name EnterpriseAdminSetInformationForProvisionedEnterpriseUser - * @summary Set SCIM information for a provisioned enterprise user - * @request PUT:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + * @name AddPet + * @request POST:/pets */ - enterpriseAdminSetInformationForProvisionedEnterpriseUser: ( - enterprise: string, - scimUserId: string, - data: { - /** List of user emails. */ - emails: { - /** Whether this email address is the primary address. */ - primary: boolean; - /** The type of email address. */ - type: string; - /** The email address. */ - value: string; - }[]; - /** List of SCIM group IDs the user is a member of. */ - groups?: { - value?: string; - }[]; - name: { - /** The last name of the user. */ - familyName: string; - /** The first name of the user. */ - givenName: string; - }; - /** The SCIM schema URIs. */ - schemas: string[]; - /** The username for the user. */ - userName: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users/${scimUserId}`, - method: "PUT", - body: data, + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, + method: "POST", + body: pet, type: ContentType.Json, format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific `Operations` JSON format that contains at least one of the `add`, `remove`, or `replace` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM `path` selectors that include filters are not supported. For example, a `path` selector defined as `"path": "emails[type eq \"work\"]"` will not work. **Warning:** If you set `active:false` using the `replace` operation (as shown in the JSON example below), it removes the user from the enterprise, deletes the external identity, and deletes the associated `:scim_user_id`. ``` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } ``` + * @description Returns a user based on a single ID, if the user does not have access to the pet * - * @tags enterprise-admin - * @name EnterpriseAdminUpdateAttributeForEnterpriseUser - * @summary Update an attribute for a SCIM enterprise user - * @request PATCH:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + * @name FindPetById + * @request GET:/pets/{id} */ - enterpriseAdminUpdateAttributeForEnterpriseUser: ( - enterprise: string, - scimUserId: string, - data: { - /** Array of [SCIM operations](https://tools.ietf.org/html/rfc7644#section-3.5.2). */ - Operations: object[]; - /** The SCIM schema URIs. */ - schemas: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users/${scimUserId}`, - method: "PATCH", - body: data, - type: ContentType.Json, + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, + method: "GET", format: "json", ...params, }), /** - * @description **Note:** The SCIM API endpoints for enterprise accounts are currently in beta and are subject to change. + * @description deletes a single pet based on the ID supplied * - * @tags enterprise-admin - * @name EnterpriseAdminDeleteUserFromEnterprise - * @summary Delete a SCIM user from an enterprise - * @request DELETE:/scim/v2/enterprises/{enterprise}/Users/{scim_user_id} + * @name DeletePet + * @request DELETE:/pets/{id} */ - enterpriseAdminDeleteUserFromEnterprise: (enterprise: string, scimUserId: string, params: RequestParams = {}) => - this.request({ - path: `/scim/v2/enterprises/${enterprise}/Users/${scimUserId}`, + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "DELETE", ...params, }), + }; +} +" +`; + +exports[`simple > 'petstore-swagger-io' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface ApiResponse { + /** @format int32 */ + code?: number; + message?: string; + type?: string; +} + +export interface Category { + /** @format int64 */ + id?: number; + name?: string; +} + +export interface Order { + complete?: boolean; + /** @format int64 */ + id?: number; + /** @format int64 */ + petId?: number; + /** @format int32 */ + quantity?: number; + /** @format date-time */ + shipDate?: string; + /** Order Status */ + status?: "placed" | "approved" | "delivered"; +} + +export interface Pet { + category?: Category; + /** @format int64 */ + id?: number; + /** @example "doggie" */ + name: string; + photoUrls: string[]; + /** pet status in the store */ + status?: "available" | "pending" | "sold"; + tags?: Tag[]; +} + +export interface Tag { + /** @format int64 */ + id?: number; + name?: string; +} + +export interface User { + email?: string; + firstName?: string; + /** @format int64 */ + id?: number; + lastName?: string; + password?: string; + phone?: string; + /** + * User Status + * @format int32 + */ + userStatus?: number; + username?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://petstore.swagger.io/v2"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Swagger Petstore + * @version 1.0.3 + * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl https://petstore.swagger.io/v2 + * @externalDocs http://swagger.io + * @contact + * + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. + */ +export class Api extends HttpClient { + pet = { /** - * @description Retrieves a paginated list of all provisioned organization members, including pending invitations. If you provide the `filter` parameter, the resources for all matching provisions members are returned. When a user with a SAML-provisioned external identity leaves (or is removed from) an organization, the account's metadata is immediately removed. However, the returned list of user accounts might not always match the organization or enterprise member list you see on GitHub. This can happen in certain cases where an external identity associated with an organization will not match an organization member: - When a user with a SCIM-provisioned external identity is removed from an organization, the account's metadata is preserved to allow the user to re-join the organization in the future. - When inviting a user to join an organization, you can expect to see their external identity in the results before they accept the invitation, or if the invitation is cancelled (or never accepted). - When a user is invited over SCIM, an external identity is created that matches with the invitee's email address. However, this identity is only linked to a user account when the user accepts the invitation by going through SAML SSO. The returned list of external identities can include an entry for a `null` user. These are unlinked SAML identities that are created when a user goes through the following Single Sign-On (SSO) process but does not sign in to their GitHub account after completing SSO: 1. The user is granted access by the IdP and is not a member of the GitHub organization. 1. The user attempts to access the GitHub organization and initiates the SAML SSO process, and is not currently signed in to their GitHub account. 1. After successfully authenticating with the SAML SSO IdP, the `null` external identity entry is created and the user is prompted to sign in to their GitHub account: - If the user signs in, their GitHub account is linked to this entry. - If the user does not sign in (or does not create a new account when prompted), they are not added to the GitHub organization, and the external identity `null` entry remains in place. + * @description Returns a single pet * - * @tags scim - * @name ScimListProvisionedIdentities - * @summary List SCIM provisioned identities - * @request GET:/scim/v2/organizations/{org}/Users + * @tags pet + * @name GetPetById + * @summary Find pet by ID + * @request GET:/pet/{petId} + * @secure */ - scimListProvisionedIdentities: ( - org: string, - query?: { - /** Used for pagination: the number of results to return. */ - count?: number; - /** - * Filters results using the equals query parameter operator (`eq`). You can filter results that are equal to `id`, `userName`, `emails`, and `external_id`. For example, to search for an identity with the `userName` Octocat, you would use this query: - * - * `?filter=userName%20eq%20\"Octocat\"`. - * - * To filter results for the identity with the email `octocat@github.com`, you would use this query: - * - * `?filter=emails%20eq%20\"octocat@github.com\"`. - */ - filter?: string; - /** Used for pagination: the index of the first result to return. */ - startIndex?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/organizations/${org}/Users`, + getPetById: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Provision organization membership for a user, and send an activation email to the email address. + * No description * - * @tags scim - * @name ScimProvisionAndInviteUser - * @summary Provision and invite a SCIM user - * @request POST:/scim/v2/organizations/{org}/Users + * @tags pet + * @name UpdatePetWithForm + * @summary Updates a pet in the store with form data + * @request POST:/pet/{petId} + * @secure */ - scimProvisionAndInviteUser: ( - org: string, + updatePetWithForm: ( + petId: number, data: { - active?: boolean; - /** - * The name of the user, suitable for display to end-users - * @example "Jon Doe" - */ - displayName?: string; - /** - * user emails - * @minItems 1 - * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] - */ - emails: { - primary?: boolean; - type?: string; - value: string; - }[]; - externalId?: string; - groups?: string[]; - /** @example {"givenName":"Jane","familyName":"User"} */ - name: { - familyName: string; - formatted?: string; - givenName: string; - }; - schemas?: string[]; - /** - * Configured by the admin. Could be an email, login, or username - * @example "someone@example.com" - */ - userName: string; + /** Updated name of the pet */ + name?: string; + /** Updated status of the pet */ + status?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/scim/v2/organizations/${org}/Users`, + this.request({ + path: \`/pet/\${petId}\`, method: "POST", body: data, - type: ContentType.Json, - format: "json", + secure: true, + type: ContentType.FormData, ...params, }), /** * No description * - * @tags scim - * @name ScimGetProvisioningInformationForUser - * @summary Get SCIM provisioning information for a user - * @request GET:/scim/v2/organizations/{org}/Users/{scim_user_id} + * @tags pet + * @name DeletePet + * @summary Deletes a pet + * @request DELETE:/pet/{petId} + * @secure */ - scimGetProvisioningInformationForUser: (org: string, scimUserId: string, params: RequestParams = {}) => - this.request({ - path: `/scim/v2/organizations/${org}/Users/${scimUserId}`, - method: "GET", - format: "json", + deletePet: (petId: number, params: RequestParams = {}) => + this.request({ + path: \`/pet/\${petId}\`, + method: "DELETE", + secure: true, ...params, }), /** - * @description Replaces an existing provisioned user's information. You must provide all the information required for the user as if you were provisioning them for the first time. Any existing user information that you don't provide will be removed. If you want to only update a specific attribute, use the [Update an attribute for a SCIM user](https://docs.github.com/rest/reference/scim#update-an-attribute-for-a-scim-user) endpoint instead. You must at least provide the required values for the user: `userName`, `name`, and `emails`. **Warning:** Setting `active: false` removes the user from the organization, deletes the external identity, and deletes the associated `{scim_user_id}`. + * No description * - * @tags scim - * @name ScimSetInformationForProvisionedUser - * @summary Update a provisioned organization membership - * @request PUT:/scim/v2/organizations/{org}/Users/{scim_user_id} + * @tags pet + * @name UploadFile + * @summary uploads an image + * @request POST:/pet/{petId}/uploadImage + * @secure */ - scimSetInformationForProvisionedUser: ( - org: string, - scimUserId: string, + uploadFile: ( + petId: number, data: { - active?: boolean; - /** - * The name of the user, suitable for display to end-users - * @example "Jon Doe" - */ - displayName?: string; - /** - * user emails - * @minItems 1 - * @example [{"value":"someone@example.com","primary":true},{"value":"another@example.com","primary":false}] - */ - emails: { - primary?: boolean; - type?: string; - value: string; - }[]; - externalId?: string; - groups?: string[]; - /** @example {"givenName":"Jane","familyName":"User"} */ - name: { - familyName: string; - formatted?: string; - givenName: string; - }; - schemas?: string[]; - /** - * Configured by the admin. Could be an email, login, or username - * @example "someone@example.com" - */ - userName: string; + /** Additional data to pass to server */ + additionalMetadata?: string; + /** file to upload */ + file?: File; }, params: RequestParams = {}, ) => - this.request({ - path: `/scim/v2/organizations/${org}/Users/${scimUserId}`, - method: "PUT", + this.request({ + path: \`/pet/\${petId}/uploadImage\`, + method: "POST", body: data, - type: ContentType.Json, + secure: true, + type: ContentType.FormData, format: "json", ...params, }), /** - * @description Allows you to change a provisioned user's individual attributes. To change a user's values, you must provide a specific `Operations` JSON format that contains at least one of the `add`, `remove`, or `replace` operations. For examples and more information on the SCIM operations format, see the [SCIM specification](https://tools.ietf.org/html/rfc7644#section-3.5.2). **Note:** Complicated SCIM `path` selectors that include filters are not supported. For example, a `path` selector defined as `"path": "emails[type eq \"work\"]"` will not work. **Warning:** If you set `active:false` using the `replace` operation (as shown in the JSON example below), it removes the user from the organization, deletes the external identity, and deletes the associated `:scim_user_id`. ``` { "Operations":[{ "op":"replace", "value":{ "active":false } }] } ``` + * No description * - * @tags scim - * @name ScimUpdateAttributeForUser - * @summary Update an attribute for a SCIM user - * @request PATCH:/scim/v2/organizations/{org}/Users/{scim_user_id} + * @tags pet + * @name AddPet + * @summary Add a new pet to the store + * @request POST:/pet + * @secure */ - scimUpdateAttributeForUser: ( - org: string, - scimUserId: string, - data: { - /** - * Set of operations to be performed - * @minItems 1 - * @example [{"op":"replace","value":{"active":false}}] - */ - Operations: { - op: "add" | "remove" | "replace"; - path?: string; - value?: - | { - active?: boolean | null; - externalId?: string | null; - familyName?: string | null; - givenName?: string | null; - userName?: string | null; - } - | { - primary?: boolean; - value?: string; - }[] - | string; - }[]; - schemas?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scim/v2/organizations/${org}/Users/${scimUserId}`, - method: "PATCH", - body: data, + addPet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "POST", + body: body, + secure: true, type: ContentType.Json, - format: "json", ...params, }), /** * No description * - * @tags scim - * @name ScimDeleteUserFromOrg - * @summary Delete a SCIM user from an organization - * @request DELETE:/scim/v2/organizations/{org}/Users/{scim_user_id} + * @tags pet + * @name UpdatePet + * @summary Update an existing pet + * @request PUT:/pet + * @secure */ - scimDeleteUserFromOrg: (org: string, scimUserId: string, params: RequestParams = {}) => - this.request({ - path: `/scim/v2/organizations/${org}/Users/${scimUserId}`, - method: "DELETE", + updatePet: (body: Pet, params: RequestParams = {}) => + this.request({ + path: \`/pet\`, + method: "PUT", + body: body, + secure: true, + type: ContentType.Json, ...params, }), - }; - search = { + /** - * @description Searches for query terms inside of a file. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for code, you can get text match metadata for the file **content** and file **path** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the definition of the `addClass` function inside [jQuery](https://github.com/jquery/jquery) repository, your query would look something like this: `q=addClass+in:file+language:js+repo:jquery/jquery` This query searches for the keyword `addClass` within a file's contents. The query limits the search to files where the language is JavaScript in the `jquery/jquery` repository. #### Considerations for code search Due to the complexity of searching code, there are a few restrictions on how searches are performed: * Only the _default branch_ is considered. In most cases, this will be the `master` branch. * Only files smaller than 384 KB are searchable. * You must always include at least one search term when searching source code. For example, searching for [`language:go`](https://github.com/search?utf8=%E2%9C%93&q=language%3Ago&type=Code) is not valid, while [`amazing language:go`](https://github.com/search?utf8=%E2%9C%93&q=amazing+language%3Ago&type=Code) is. + * @description Multiple status values can be provided with comma separated strings * - * @tags search - * @name SearchCode - * @summary Search code - * @request GET:/search/code + * @tags pet + * @name FindPetsByStatus + * @summary Finds Pets by status + * @request GET:/pet/findByStatus + * @secure */ - searchCode: ( + findPetsByStatus: ( query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching code](https://help.github.com/articles/searching-code/)" for a detailed list of qualifiers. */ - q: string; - /** Sorts the results of your query. Can only be `indexed`, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: "indexed"; + /** Status values that need to be considered for filter */ + status: ("available" | "pending" | "sold")[]; }, params: RequestParams = {}, ) => - this.request< - { - incomplete_results: boolean; - items: CodeSearchResultItem[]; - total_count: number; - }, - | BasicError - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/search/code`, + this.request({ + path: \`/pet/findByStatus\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * @description Find commits via various criteria on the default branch (usually `master`). This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for commits, you can get text match metadata for the **message** field when you provide the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find commits related to CSS in the [octocat/Spoon-Knife](https://github.com/octocat/Spoon-Knife) repository. Your query would look something like this: `q=repo:octocat/Spoon-Knife+css` + * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * - * @tags search - * @name SearchCommits - * @summary Search commits - * @request GET:/search/commits + * @tags pet + * @name FindPetsByTags + * @summary Finds Pets by tags + * @request GET:/pet/findByTags + * @deprecated + * @secure */ - searchCommits: ( + findPetsByTags: ( query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching commits](https://help.github.com/articles/searching-commits/)" for a detailed list of qualifiers. */ - q: string; - /** Sorts the results of your query by `author-date` or `committer-date`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: "author-date" | "committer-date"; + /** Tags to filter by */ + tags: string[]; }, params: RequestParams = {}, ) => - this.request< - { - incomplete_results: boolean; - items: CommitSearchResultItem[]; - total_count: number; - }, - { - documentation_url: string; - message: string; - } - >({ - path: `/search/commits`, + this.request({ + path: \`/pet/findByTags\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), - + }; + store = { /** - * @description Find issues by state and keyword. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this. `q=windows+label:bug+language:python+state:open&sort=created&order=asc` This query searches for the keyword `windows`, within any open issue that is labeled as `bug`. The search runs across repositories whose primary language is Python. The results are sorted by creation date in ascending order, which means the oldest issues appear first in the search results. **Note:** For [user-to-server](https://docs.github.com/developers/apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) GitHub App requests, you can't retrieve a combination of issues and pull requests in a single query. Requests that don't include the `is:issue` or `is:pull-request` qualifier will receive an HTTP `422 Unprocessable Entity` response. To get results for both issues and pull requests, you must send separate queries for issues and pull requests. For more information about the `is` qualifier, see "[Searching only issues or pull requests](https://docs.github.com/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-only-issues-or-pull-requests)." + * @description Returns a map of status codes to quantities * - * @tags search - * @name SearchIssuesAndPullRequests - * @summary Search issues and pull requests - * @request GET:/search/issues + * @tags store + * @name GetInventory + * @summary Returns pet inventories by status + * @request GET:/store/inventory + * @secure */ - searchIssuesAndPullRequests: ( - query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching issues and pull requests](https://help.github.com/articles/searching-issues-and-pull-requests/)" for a detailed list of qualifiers. */ - q: string; - /** Sorts the results of your query by the number of `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, or `interactions`. You can also sort results by how recently the items were `created` or `updated`, Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: - | "comments" - | "reactions" - | "reactions-+1" - | "reactions--1" - | "reactions-smile" - | "reactions-thinking_face" - | "reactions-heart" - | "reactions-tada" - | "interactions" - | "created" - | "updated"; - }, - params: RequestParams = {}, - ) => - this.request< - { - incomplete_results: boolean; - items: IssueSearchResultItem[]; - total_count: number; - }, - | BasicError - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/search/issues`, + getInventory: (params: RequestParams = {}) => + this.request, any>({ + path: \`/store/inventory\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Find labels in a repository with names or descriptions that match search keywords. Returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for labels, you can get text match metadata for the label **name** and **description** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to find labels in the `linguist` repository that match `bug`, `defect`, or `enhancement`. Your query might look like this: `q=bug+defect+enhancement&repository_id=64778136` The labels that best match the query appear first in the search results. + * @description For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions * - * @tags search - * @name SearchLabels - * @summary Search labels - * @request GET:/search/labels + * @tags store + * @name GetOrderById + * @summary Find purchase order by ID + * @request GET:/store/order/{orderId} */ - searchLabels: ( - query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The search keywords. This endpoint does not accept qualifiers in the query. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ - q: string; - /** The id of the repository. */ - repository_id: number; - /** Sorts the results of your query by when the label was `created` or `updated`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request< - { - incomplete_results: boolean; - items: LabelSearchResultItem[]; - total_count: number; - }, - BasicError | ValidationError - >({ - path: `/search/labels`, + getOrderById: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Find repositories via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for repositories, you can get text match metadata for the **name** and **description** fields when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for popular Tetris repositories written in assembly code, your query might look like this: `q=tetris+language:assembly&sort=stars&order=desc` This query searches for repositories with the word `tetris` in the name, the description, or the README. The results are limited to repositories where the primary language is assembly. The results are sorted by stars in descending order, so that the most popular repositories appear first in the search results. When you include the `mercy` preview header, you can also search for multiple topics by adding more `topic:` instances. For example, your query might look like this: `q=topic:ruby+topic:rails` + * @description For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors * - * @tags search - * @name SearchRepos - * @summary Search repositories - * @request GET:/search/repositories + * @tags store + * @name DeleteOrder + * @summary Delete purchase order by ID + * @request DELETE:/store/order/{orderId} */ - searchRepos: ( - query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching for repositories](https://help.github.com/articles/searching-for-repositories/)" for a detailed list of qualifiers. */ - q: string; - /** Sorts the results of your query by number of `stars`, `forks`, or `help-wanted-issues` or how recently the items were `updated`. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: "stars" | "forks" | "help-wanted-issues" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request< - { - incomplete_results: boolean; - items: RepoSearchResultItem[]; - total_count: number; - }, - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", + deleteOrder: (orderId: number, params: RequestParams = {}) => + this.request({ + path: \`/store/order/\${orderId}\`, + method: "DELETE", ...params, }), /** - * @description Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). See "[Searching topics](https://help.github.com/articles/searching-topics/)" for a detailed list of qualifiers. When searching for topics, you can get text match metadata for the topic's **short\_description**, **description**, **name**, or **display\_name** field when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you want to search for topics related to Ruby that are featured on https://github.com/topics. Your query might look like this: `q=ruby+is:featured` This query searches for topics with the keyword `ruby` and limits the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results. + * No description * - * @tags search - * @name SearchTopics - * @summary Search topics - * @request GET:/search/topics + * @tags store + * @name PlaceOrder + * @summary Place an order for a pet + * @request POST:/store/order */ - searchTopics: ( - query: { - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). */ - q: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - incomplete_results: boolean; - items: TopicSearchResultItem[]; - total_count: number; - }, - { - documentation_url: string; - message: string; - } - >({ - path: `/search/topics`, + placeOrder: (body: Order, params: RequestParams = {}) => + this.request({ + path: \`/store/order\`, + method: "POST", + body: body, + type: ContentType.Json, + format: "json", + ...params, + }), + }; + user = { + /** + * No description + * + * @tags user + * @name GetUserByName + * @summary Get user by user name + * @request GET:/user/{username} + */ + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description Find users via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). When searching for users, you can get text match metadata for the issue **login**, **email**, and **name** fields when you pass the `text-match` media type. For more details about highlighting search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata). For example, if you're looking for a list of popular users, you might try this query: `q=tom+repos:%3E42+followers:%3E1000` This query searches for users with the name `tom`. The results are restricted to users with more than 42 repositories and over 1,000 followers. + * @description This can only be done by the logged in user. * - * @tags search - * @name SearchUsers - * @summary Search users - * @request GET:/search/users + * @tags user + * @name UpdateUser + * @summary Updated user + * @request PUT:/user/{username} */ - searchUsers: ( + updateUser: (username: string, body: User, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "PUT", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name DeleteUser + * @summary Delete user + * @request DELETE:/user/{username} + */ + deleteUser: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/user/\${username}\`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags user + * @name LoginUser + * @summary Logs user into the system + * @request GET:/user/login + */ + loginUser: ( query: { - /** - * Determines whether the first search result returned is the highest number of matches (`desc`) or lowest number of matches (`asc`). This parameter is ignored unless you provide `sort`. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as GitHub.com. To learn more about the format of the query, see [Constructing a search query](https://docs.github.com/rest/reference/search#constructing-a-search-query). See "[Searching users](https://help.github.com/articles/searching-users/)" for a detailed list of qualifiers. */ - q: string; - /** Sorts the results of your query by number of `followers` or `repositories`, or when the person `joined` GitHub. Default: [best match](https://docs.github.com/rest/reference/search#ranking-search-results) */ - sort?: "followers" | "repositories" | "joined"; + /** The password for login in clear text */ + password: string; + /** The user name for login */ + username: string; }, params: RequestParams = {}, ) => - this.request< - { - incomplete_results: boolean; - items: UserSearchResultItem[]; - total_count: number; - }, - | ValidationError - | { - code?: string; - documentation_url?: string; - message?: string; - } - >({ - path: `/search/users`, + this.request({ + path: \`/user/login\`, method: "GET", query: query, format: "json", ...params, }), - }; - teams = { + /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the [Get a team by name](https://docs.github.com/rest/reference/teams#get-a-team-by-name) endpoint. + * No description * - * @tags teams - * @name TeamsGetLegacy - * @summary Get a team (Legacy) - * @request GET:/teams/{team_id} - * @deprecated + * @tags user + * @name LogoutUser + * @summary Logs out current logged in user session + * @request GET:/user/logout */ - teamsGetLegacy: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, + logoutUser: (params: RequestParams = {}) => + this.request({ + path: \`/user/logout\`, method: "GET", - format: "json", ...params, }), - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a team](https://docs.github.com/rest/reference/teams#update-a-team) endpoint. To edit a team, the authenticated user must either be an organization owner or a team maintainer. **Note:** With nested teams, the `privacy` for parent teams cannot be `secret`. - * - * @tags teams - * @name TeamsUpdateLegacy - * @summary Update a team (Legacy) - * @request PATCH:/teams/{team_id} - * @deprecated - */ - teamsUpdateLegacy: ( - teamId: number, - data: { - /** The description of the team. */ - description?: string; - /** The name of the team. */ - name: string; - /** The ID of a team to set as the parent team. */ - parent_team_id?: number | null; - /** - * **Deprecated**. The permission that new repositories will be added to the team with when none is specified. Can be one of: - * \* `pull` - team members can pull, but not push to or administer newly-added repositories. - * \* `push` - team members can pull and push, but not administer newly-added repositories. - * \* `admin` - team members can pull, push and administer newly-added repositories. - * @default "pull" - */ - permission?: "pull" | "push" | "admin"; - /** - * The level of privacy this team should have. Editing teams without specifying this parameter leaves `privacy` intact. The options are: - * **For a non-nested team:** - * \* `secret` - only visible to organization owners and members of this team. - * \* `closed` - visible to all members of this organization. - * **For a parent or child team:** - * \* `closed` - visible to all members of this organization. - */ - privacy?: "secret" | "closed"; + /** + * @description This can only be done by the logged in user. + * + * @tags user + * @name CreateUser + * @summary Create user + * @request POST:/user + */ + createUser: (body: User, params: RequestParams = {}) => + this.request({ + path: \`/user\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithArrayInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithArray + */ + createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithArray\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags user + * @name CreateUsersWithListInput + * @summary Creates list of users with given input array + * @request POST:/user/createWithList + */ + createUsersWithListInput: (body: User[], params: RequestParams = {}) => + this.request({ + path: \`/user/createWithList\`, + method: "POST", + body: body, + type: ContentType.Json, + ...params, + }), + }; +} +" +`; + +exports[`simple > 'petstore-with-external-docs' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface ErrorModel { + /** @format int32 */ + code: number; + message: string; +} + +export interface NewPet { + name: string; + tag?: string; +} + +export type Pet = NewPet & { + /** @format int64 */ + id: number; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://petstore.swagger.io/api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a team](https://docs.github.com/rest/reference/teams#delete-a-team) endpoint. To delete a team, the authenticated user must be an organization owner or team maintainer. If you are an organization owner, deleting a parent team will delete all of its child teams as well. - * - * @tags teams - * @name TeamsDeleteLegacy - * @summary Delete a team (Legacy) - * @request DELETE:/teams/{team_id} - * @deprecated - */ - teamsDeleteLegacy: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Swagger Petstore + * @version 1.0.0 + * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) + * @termsOfService http://swagger.io/terms/ + * @baseUrl http://petstore.swagger.io/api + * @externalDocs https://swagger.io/about + * @contact Swagger API Team (http://swagger.io) + * + * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + */ +export class Api extends HttpClient { + pets = { /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List discussions`](https://docs.github.com/rest/reference/teams#list-discussions) endpoint. List all discussions on a team's page. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description Returns all pets from the system that the user has access to * - * @tags teams - * @name TeamsListDiscussionsLegacy - * @summary List discussions (Legacy) - * @request GET:/teams/{team_id}/discussions - * @deprecated + * @name FindPets + * @request GET:/pets */ - teamsListDiscussionsLegacy: ( - teamId: number, + findPets: ( query?: { /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * maximum number of results to return + * @format int32 */ - per_page?: number; + limit?: number; + /** tags to filter by */ + tags?: string[]; }, params: RequestParams = {}, ) => - this.request({ - path: `/teams/${teamId}/discussions`, + this.request({ + path: \`/pets\`, method: "GET", query: query, format: "json", @@ -25354,1426 +41589,2082 @@ export class Api extends HttpClient - this.request({ - path: `/teams/${teamId}/discussions`, + addPet: (pet: NewPet, params: RequestParams = {}) => + this.request({ + path: \`/pets\`, method: "POST", - body: data, + body: pet, type: ContentType.Json, format: "json", ...params, }), /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion](https://docs.github.com/rest/reference/teams#get-a-discussion) endpoint. Get a specific discussion on a team's page. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description Returns a user based on a single ID, if the user does not have access to the pet * - * @tags teams - * @name TeamsGetDiscussionLegacy - * @summary Get a discussion (Legacy) - * @request GET:/teams/{team_id}/discussions/{discussion_number} - * @deprecated + * @name FindPetById + * @request GET:/pets/{id} */ - teamsGetDiscussionLegacy: (teamId: number, discussionNumber: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}`, + findPetById: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "GET", format: "json", ...params, }), /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion](https://docs.github.com/rest/reference/teams#update-a-discussion) endpoint. Edits the title and body text of a discussion post. Only the parameters you provide are updated. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags teams - * @name TeamsUpdateDiscussionLegacy - * @summary Update a discussion (Legacy) - * @request PATCH:/teams/{team_id}/discussions/{discussion_number} - * @deprecated - */ - teamsUpdateDiscussionLegacy: ( - teamId: number, - discussionNumber: number, - data: { - /** The discussion post's body text. */ - body?: string; - /** The discussion post's title. */ - title?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`Delete a discussion`](https://docs.github.com/rest/reference/teams#delete-a-discussion) endpoint. Delete a discussion from a team's page. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description deletes a single pet based on the ID supplied * - * @tags teams - * @name TeamsDeleteDiscussionLegacy - * @summary Delete a discussion (Legacy) - * @request DELETE:/teams/{team_id}/discussions/{discussion_number} - * @deprecated + * @name DeletePet + * @request DELETE:/pets/{id} */ - teamsDeleteDiscussionLegacy: (teamId: number, discussionNumber: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}`, + deletePet: (id: number, params: RequestParams = {}) => + this.request({ + path: \`/pets/\${id}\`, method: "DELETE", ...params, }), + }; +} +" +`; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List discussion comments](https://docs.github.com/rest/reference/teams#list-discussion-comments) endpoint. List all comments on a team discussion. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags teams - * @name TeamsListDiscussionCommentsLegacy - * @summary List discussion comments (Legacy) - * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments - * @deprecated - */ - teamsListDiscussionCommentsLegacy: ( - teamId: number, - discussionNumber: number, - query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), +exports[`simple > 'query-path-param' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Create a discussion comment](https://docs.github.com/rest/reference/teams#create-a-discussion-comment) endpoint. Creates a new comment on a team discussion. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). This endpoint triggers [notifications](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in abuse rate limiting. See "[Abuse rate limits](https://docs.github.com/rest/overview/resources-in-the-rest-api#abuse-rate-limits)" and "[Dealing with abuse rate limits](https://docs.github.com/rest/guides/best-practices-for-integrators#dealing-with-rate-limits)" for details. - * - * @tags teams - * @name TeamsCreateDiscussionCommentLegacy - * @summary Create a discussion comment (Legacy) - * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments - * @deprecated - */ - teamsCreateDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - data: { - /** The discussion comment's body text. */ - body: string; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://unknown.io/v666"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + }; + } - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get a discussion comment](https://docs.github.com/rest/reference/teams#get-a-discussion-comment) endpoint. Get a specific comment on a team discussion. OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags teams - * @name TeamsGetDiscussionCommentLegacy - * @summary Get a discussion comment (Legacy) - * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} - * @deprecated - */ - teamsGetDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - commentNumber: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments/${commentNumber}`, - method: "GET", - format: "json", - ...params, - }), + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Update a discussion comment](https://docs.github.com/rest/reference/teams#update-a-discussion-comment) endpoint. Edits the body text of a discussion comment. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags teams - * @name TeamsUpdateDiscussionCommentLegacy - * @summary Update a discussion comment (Legacy) - * @request PATCH:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} - * @deprecated - */ - teamsUpdateDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - commentNumber: number, - data: { - /** The discussion comment's body text. */ - body: string; + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments/${commentNumber}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Delete a discussion comment](https://docs.github.com/rest/reference/teams#delete-a-discussion-comment) endpoint. Deletes a comment on a team discussion. OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags teams - * @name TeamsDeleteDiscussionCommentLegacy - * @summary Delete a discussion comment (Legacy) - * @request DELETE:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number} - * @deprecated - */ - teamsDeleteDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - commentNumber: number, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments/${commentNumber}`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Query Path Param + * @version 1.0.0 + * @license MIT + * @baseUrl http://unknown.io/v666 + */ +export class Api extends HttpClient { + foobarbaz = { /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List reactions for a team discussion comment`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion-comment) endpoint. List the reactions to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * No description * - * @tags reactions - * @name ReactionsListForTeamDiscussionCommentLegacy - * @summary List reactions for a team discussion comment (Legacy) - * @request GET:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions - * @deprecated + * @tags pets + * @name ListPets + * @summary List all pets + * @request GET:/foobarbaz/{query} */ - reactionsListForTeamDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - commentNumber: number, - query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + listPets: ( + query?: number, + queryParams?: { /** - * Results per page (max 100) - * @default 30 + * How many items to return at one time (max 100) + * @format int32 */ - per_page?: number; + queryParam?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments/${commentNumber}/reactions`, + this.request({ + path: \`/foobarbaz/\${query}\`, method: "GET", - query: query, + query: queryParams, format: "json", ...params, }), + }; +} +" +`; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Create reaction for a team discussion comment](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion-comment)" endpoint. Create a reaction to a [team discussion comment](https://docs.github.com/rest/reference/teams#discussion-comments). OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a `Status: 200 OK` means that you already added the reaction type to this team discussion comment. - * - * @tags reactions - * @name ReactionsCreateForTeamDiscussionCommentLegacy - * @summary Create reaction for a team discussion comment (Legacy) - * @request POST:/teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions - * @deprecated - */ - reactionsCreateForTeamDiscussionCommentLegacy: ( - teamId: number, - discussionNumber: number, - commentNumber: number, - data: { - /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion comment. */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/comments/${commentNumber}/reactions`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +exports[`simple > 'recursive-schema' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List reactions for a team discussion`](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion) endpoint. List the reactions to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the `read:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags reactions - * @name ReactionsListForTeamDiscussionLegacy - * @summary List reactions for a team discussion (Legacy) - * @request GET:/teams/{team_id}/discussions/{discussion_number}/reactions - * @deprecated - */ - reactionsListForTeamDiscussionLegacy: ( - teamId: number, - discussionNumber: number, - query?: { - /** Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion. */ - content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/reactions`, - method: "GET", - query: query, - format: "json", - ...params, - }), +/** RECURSIVE */ +export interface RecursiveObject { + /** RECURSIVE */ + bar?: RecursiveObject; + /** + * Unique identifier of the GitHub app + * @example 37 + */ + id?: number; +} - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`Create reaction for a team discussion`](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion) endpoint. Create a reaction to a [team discussion](https://docs.github.com/rest/reference/teams#discussions). OAuth access tokens require the `write:discussion` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). A response with a `Status: 200 OK` means that you already added the reaction type to this team discussion. - * - * @tags reactions - * @name ReactionsCreateForTeamDiscussionLegacy - * @summary Create reaction for a team discussion (Legacy) - * @request POST:/teams/{team_id}/discussions/{discussion_number}/reactions - * @deprecated - */ - reactionsCreateForTeamDiscussionLegacy: ( - teamId: number, - discussionNumber: number, - data: { - /** The [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types) to add to the team discussion. */ - content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/discussions/${discussionNumber}/reactions`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + }; + } - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List pending team invitations`](https://docs.github.com/rest/reference/teams#list-pending-team-invitations) endpoint. The return hash contains a `role` field which refers to the Organization Invitation role and will be one of the following values: `direct_member`, `admin`, `billing_manager`, `hiring_manager`, or `reinstate`. If the invitee is not a GitHub member, the `login` field in the return hash will be `null`. - * - * @tags teams - * @name TeamsListPendingInvitationsLegacy - * @summary List pending team invitations (Legacy) - * @request GET:/teams/{team_id}/invitations - * @deprecated - */ - teamsListPendingInvitationsLegacy: ( - teamId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/invitations`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List team members`](https://docs.github.com/rest/reference/teams#list-team-members) endpoint. Team members will include the members of child teams. - * - * @tags teams - * @name TeamsListMembersLegacy - * @summary List team members (Legacy) - * @request GET:/teams/{team_id}/members - * @deprecated - */ - teamsListMembersLegacy: ( - teamId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * Filters members returned by their role in the team. Can be one of: - * \* `member` - normal members of the team. - * \* `maintainer` - team maintainers. - * \* `all` - all members of the team. - * @default "all" - */ - role?: "member" | "maintainer" | "all"; + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title No title + */ +export class Api extends HttpClient {} +" +`; + +exports[`simple > 'responses' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * @description The "Get team member" endpoint (described below) is deprecated. We recommend using the [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint instead. It allows you to get both active and pending memberships. To list members in a team, the team must be visible to the authenticated user. - * - * @tags teams - * @name TeamsGetMemberLegacy - * @summary Get team member (Legacy) - * @request GET:/teams/{team_id}/members/{username} - * @deprecated - */ - teamsGetMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description The "Add team member" endpoint (described below) is deprecated. We recommend using the [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint instead. It allows you to invite new organization members to your teams. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To add someone to a team, the authenticated user must be an organization owner or a team maintainer in the team they're changing. The person being added to the team must be a member of the team's organization. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - * - * @tags teams - * @name TeamsAddMemberLegacy - * @summary Add team member (Legacy) - * @request PUT:/teams/{team_id}/members/{username} - * @deprecated - */ - teamsAddMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => - this.request< - void, - | BasicError - | void - | { - /** @example ""https://docs.github.com/rest"" */ - documentation_url?: string; - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; - } - >({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; - /** - * @description The "Remove team member" endpoint (described below) is deprecated. We recommend using the [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint instead. It allows you to remove both active and pending memberships. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a team member, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. Removing a team member does not delete the user, it just removes them from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." - * - * @tags teams - * @name TeamsRemoveMemberLegacy - * @summary Remove team member (Legacy) - * @request DELETE:/teams/{team_id}/members/{username} - * @deprecated - */ - teamsRemoveMemberLegacy: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Get team membership for a user](https://docs.github.com/rest/reference/teams#get-team-membership-for-a-user) endpoint. Team members will include the members of child teams. To get a user's membership with a team, the team must be visible to the authenticated user. **Note:** The `role` for organization owners returns as `maintainer`. For more information about `maintainer` roles, see [Create a team](https://docs.github.com/rest/reference/teams#create-a-team). - * - * @tags teams - * @name TeamsGetMembershipForUserLegacy - * @summary Get team membership for a user (Legacy) - * @request GET:/teams/{team_id}/memberships/{username} - * @deprecated - */ - teamsGetMembershipForUserLegacy: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team membership for a user](https://docs.github.com/rest/reference/teams#add-or-update-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. If the user is already a member of the team's organization, this endpoint will add the user to the team. To add a membership between an organization member and a team, the authenticated user must be an organization owner or a team maintainer. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." If the user is unaffiliated with the team's organization, this endpoint will send an invitation to the user via email. This newly-created membership will be in the "pending" state until the user accepts the invitation, at which point the membership will transition to the "active" state and the user will be added as a member of the team. To add a membership between an unaffiliated user and a team, the authenticated user must be an organization owner. If the user is already a member of the team, this endpoint will update the role of the team member's role. To update the membership of a team member, the authenticated user must be an organization owner or a team maintainer. - * - * @tags teams - * @name TeamsAddOrUpdateMembershipForUserLegacy - * @summary Add or update team membership for a user (Legacy) - * @request PUT:/teams/{team_id}/memberships/{username} - * @deprecated - */ - teamsAddOrUpdateMembershipForUserLegacy: ( - teamId: number, - username: string, - data: { - /** - * The role that this user should have in the team. Can be one of: - * \* `member` - a normal member of the team. - * \* `maintainer` - a team maintainer. Able to add/remove other team members, promote other team members to team maintainer, and edit the team's name and description. - * @default "member" - */ - role?: "member" | "maintainer"; + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request< - TeamMembership, - | void - | BasicError - | { - /** @example ""https://help.github.com/articles/github-and-trade-controls"" */ - documentation_url?: string; - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; - } - >({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove team membership for a user](https://docs.github.com/rest/reference/teams#remove-team-membership-for-a-user) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. To remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. Removing team membership does not delete the user, it just removes their membership from the team. **Note:** When you have team synchronization set up for a team with your organization's identity provider (IdP), you will see an error if you attempt to use the API for making changes to the team's membership. If you have access to manage group membership in your IdP, you can manage GitHub team membership through your identity provider, which automatically adds and removes team members in an organization. For more information, see "[Synchronizing teams between your identity provider and GitHub](https://help.github.com/articles/synchronizing-teams-between-your-identity-provider-and-github/)." - * - * @tags teams - * @name TeamsRemoveMembershipForUserLegacy - * @summary Remove team membership for a user (Legacy) - * @request DELETE:/teams/{team_id}/memberships/{username} - * @deprecated - */ - teamsRemoveMembershipForUserLegacy: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List team projects`](https://docs.github.com/rest/reference/teams#list-team-projects) endpoint. Lists the organization projects for a team. - * - * @tags teams - * @name TeamsListProjectsLegacy - * @summary List team projects (Legacy) - * @request GET:/teams/{team_id}/projects - * @deprecated - */ - teamsListProjectsLegacy: ( - teamId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request< - TeamProject[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/teams/${teamId}/projects`, - method: "GET", - query: query, - format: "json", - ...params, - }), + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Title + * @version latest + * + * Description + */ +export class Api extends HttpClient { + api = { /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a project](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-project) endpoint. Checks whether a team has `read`, `write`, or `admin` permissions for an organization project. The response includes projects inherited from a parent team. + * No description * - * @tags teams - * @name TeamsCheckPermissionsForProjectLegacy - * @summary Check team permissions for a project (Legacy) - * @request GET:/teams/{team_id}/projects/{project_id} - * @deprecated + * @name GetData + * @request GET:/api */ - teamsCheckPermissionsForProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => + getData: (params: RequestParams = {}) => this.request< - TeamProject, - void | { - documentation_url: string; - message: string; - } + { + data?: string; + }, + any >({ - path: `/teams/${teamId}/projects/${projectId}`, + path: \`/api\`, method: "GET", format: "json", ...params, }), + }; +} +" +`; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Add or update team project permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-project-permissions) endpoint. Adds an organization project to a team. To add a project to a team or update the team's permission on a project, the authenticated user must have `admin` permissions for the project. The project and team must be part of the same organization. - * - * @tags teams - * @name TeamsAddOrUpdateProjectPermissionsLegacy - * @summary Add or update team project permissions (Legacy) - * @request PUT:/teams/{team_id}/projects/{project_id} - * @deprecated - */ - teamsAddOrUpdateProjectPermissionsLegacy: ( - teamId: number, - projectId: number, - data: { - /** - * The permission to grant to the team for this project. Can be one of: - * \* `read` - team members can read, but not write to or administer this project. - * \* `write` - team members can read and write, but not administer this project. - * \* `admin` - team members can read, write and administer this project. - * Default: the team's `permission` attribute will be used to determine what permission to grant the team on this project. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - */ - permission?: "read" | "write" | "admin"; +exports[`simple > 'swaggerhub-template' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request< - void, - | { - documentation_url?: string; - message?: string; - } - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/teams/${teamId}/projects/${projectId}`, - method: "PUT", - body: data, - type: ContentType.Json, - ...params, - }), + }; + } - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a project from a team](https://docs.github.com/rest/reference/teams#remove-a-project-from-a-team) endpoint. Removes an organization project from a team. An organization owner or a team maintainer can remove any project from the team. To remove a project from a team as an organization member, the authenticated user must have `read` access to both the team and project, or `admin` access to the team or project. **Note:** This endpoint removes the project from the team, but does not delete it. - * - * @tags teams - * @name TeamsRemoveProjectLegacy - * @summary Remove a project from a team (Legacy) - * @request DELETE:/teams/{team_id}/projects/{project_id} - * @deprecated - */ - teamsRemoveProjectLegacy: (teamId: number, projectId: number, params: RequestParams = {}) => - this.request< - void, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/teams/${teamId}/projects/${projectId}`, - method: "DELETE", - ...params, - }), + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [List team repositories](https://docs.github.com/rest/reference/teams#list-team-repositories) endpoint. - * - * @tags teams - * @name TeamsListReposLegacy - * @summary List team repositories (Legacy) - * @request GET:/teams/{team_id}/repos - * @deprecated - */ - teamsListReposLegacy: ( - teamId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description **Note**: Repositories inherited through a parent team will also be checked. **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Check team permissions for a repository](https://docs.github.com/rest/reference/teams#check-team-permissions-for-a-repository) endpoint. You can also get information about the specified repository, including what permissions the team grants on it, by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the `Accept` header: - * - * @tags teams - * @name TeamsCheckPermissionsForRepoLegacy - * @summary Check team permissions for a repository (Legacy) - * @request GET:/teams/{team_id}/repos/{owner}/{repo} - * @deprecated - */ - teamsCheckPermissionsForRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new "[Add or update team repository permissions](https://docs.github.com/rest/reference/teams#add-or-update-team-repository-permissions)" endpoint. To add a repository to a team or update the team's permission on a repository, the authenticated user must have admin access to the repository, and must be able to see the team. The repository must be owned by the organization, or a direct fork of a repository owned by the organization. You will get a `422 Unprocessable Entity` status if you attempt to add a repository to a team that is not owned by the organization. Note that, if you choose not to pass any parameters, you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." - * - * @tags teams - * @name TeamsAddOrUpdateRepoPermissionsLegacy - * @summary Add or update team repository permissions (Legacy) - * @request PUT:/teams/{team_id}/repos/{owner}/{repo} - * @deprecated - */ - teamsAddOrUpdateRepoPermissionsLegacy: ( - teamId: number, - owner: string, - repo: string, - data: { - /** - * The permission to grant the team on this repository. Can be one of: - * \* `pull` - team members can pull, but not push to or administer this repository. - * \* `push` - team members can pull and push, but not administer this repository. - * \* `admin` - team members can pull, push and administer this repository. - * - * If no permission is specified, the team's `permission` attribute will be used to determine what permission to grant the team on this repository. - */ - permission?: "pull" | "push" | "admin"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - body: data, - type: ContentType.Json, - ...params, - }), + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Sample Application Flow OAuth2 Project + * @version 1.0.0 + * @baseUrl https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0 + * + * This is an example of using OAuth2 Application Flow in a specification to describe security to your API. + */ +export class Api extends HttpClient { + example = { /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [Remove a repository from a team](https://docs.github.com/rest/reference/teams#remove-a-repository-from-a-team) endpoint. If the authenticated user is an organization owner or a team maintainer, they can remove any repositories from the team. To remove a repository from a team as an organization member, the authenticated user must have admin access to the repository and must be able to see the team. NOTE: This does not delete the repository, it just removes it from the team. + * @description This is an example operation to show how security is applied to the call. * - * @tags teams - * @name TeamsRemoveRepoLegacy - * @summary Remove a repository from a team (Legacy) - * @request DELETE:/teams/{team_id}/repos/{owner}/{repo} - * @deprecated + * @name ExampleList + * @summary Server example operation + * @request GET:/example + * @secure */ - teamsRemoveRepoLegacy: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => + exampleList: (params: RequestParams = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", + path: \`/example\`, + method: "GET", + secure: true, ...params, }), - + }; + ping = { /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List IdP groups for a team`](https://docs.github.com/rest/reference/teams#list-idp-groups-for-a-team) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. List IdP groups connected to a team on GitHub. + * @description This operation shows how to override the global security defined above, as we want to open it up for all users. * - * @tags teams - * @name TeamsListIdpGroupsForLegacy - * @summary List IdP groups for a team (Legacy) - * @request GET:/teams/{team_id}/team-sync/group-mappings - * @deprecated + * @name PingList + * @summary Server heartbeat operation + * @request GET:/ping */ - teamsListIdpGroupsForLegacy: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/team-sync/group-mappings`, + pingList: (params: RequestParams = {}) => + this.request({ + path: \`/ping\`, method: "GET", - format: "json", ...params, }), + }; +} +" +`; - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`Create or update IdP group connections`](https://docs.github.com/rest/reference/teams#create-or-update-idp-group-connections) endpoint. Team synchronization is available for organizations using GitHub Enterprise Cloud. For more information, see [GitHub's products](https://help.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. Creates, updates, or removes a connection between a team and an IdP group. When adding groups to a team, you must include all new and existing groups to avoid replacing existing groups with the new ones. Specifying an empty `groups` array will remove all connections for a team. - * - * @tags teams - * @name TeamsCreateOrUpdateIdpGroupConnectionsLegacy - * @summary Create or update IdP group connections (Legacy) - * @request PATCH:/teams/{team_id}/team-sync/group-mappings - * @deprecated - */ - teamsCreateOrUpdateIdpGroupConnectionsLegacy: ( - teamId: number, - data: { - /** The IdP groups you want to connect to a GitHub team. When updating, the new `groups` object will replace the original one. You must include any existing groups that you don't want to remove. */ - groups: { - /** @example ""moar cheese pleese"" */ - description?: string; - /** Description of the IdP group. */ - group_description: string; - /** ID of the IdP group. */ - group_id: string; - /** Name of the IdP group. */ - group_name: string; - /** @example ""caceab43fc9ffa20081c"" */ - id?: string; - /** @example ""external-team-6c13e7288ef7"" */ - name?: string; - }[]; - /** @example ""I am not a timestamp"" */ - synced_at?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/team-sync/group-mappings`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), +exports[`simple > 'tsoa-odd-types-3' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ - /** - * @description **Deprecation Notice:** This endpoint route is deprecated and will be removed from the Teams API. We recommend migrating your existing code to use the new [`List child teams`](https://docs.github.com/rest/reference/teams#list-child-teams) endpoint. - * - * @tags teams - * @name TeamsListChildLegacy - * @summary List child teams (Legacy) - * @request GET:/teams/{team_id}/teams - * @deprecated - */ - teamsListChildLegacy: ( - teamId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; +export interface AuthUser { + password: string; + username: string; +} + +export interface GetProfileBioDTO { + /** @format int32 */ + candidateId?: number; + cityName?: string | null; +} + +export interface Job { + address?: string | null; + github?: string | null; + id: string; + isTool?: boolean | null; + kind: Kind; + link?: string | null; + name?: string | null; + npm?: string | null; +} + +export type JobUpdate = OmitJobId | PickJobGithub | Record; + +export enum Kind { + COMPANY = "COMPANY", + PERSONAL = "PERSONAL", + FREELANCE = "FREELANCE", + OPEN_SOURCE = "OPEN_SOURCE", +} + +export type OmitJobId = PickJobExcludeKeysId; + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobExcludeKeysId { + address?: string; + github?: string; + isTool?: boolean; + kind: Kind; + link?: string; + name?: string; + npm?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickJobGithub { + github?: string; +} + +/** From T, pick a set of properties whose keys are in the union K */ +export interface PickProjectExcludeKeysIdOrjob { + description: string; + name?: string; + notImportant?: boolean; + prefix?: string; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface Project { + description: string; + id: string; + job: Job; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface ProjectUpdate { + description: string; + job: string; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export type UpdatedJob = Job; + +export interface UpdatedProject { + description: string; + id: string; + job: string; + name?: string | null; + notImportant?: boolean | null; + prefix?: string | null; + tags: string[]; + teamSize: string; + /** @format double */ + year: number; +} + +export interface User { + id: string; + username: string; +} + +export interface UserUpdate { + id?: string | null; + username?: string | null; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "http://localhost:8080/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/teams/${teamId}/teams`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; }; - user = { - /** - * @description If the authenticated user is authenticated through basic authentication or OAuth with the `user` scope, then the response lists public and private profile information. If the authenticated user is authenticated through OAuth without the `user` scope, then the response lists only public profile information. - * - * @tags users - * @name UsersGetAuthenticated - * @summary Get the authenticated user - * @request GET:/user - */ - usersGetAuthenticated: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - /** - * @description **Note:** If your email is set to private and you send an `email` parameter as part of this request to update your profile, your privacy settings are still enforced: the email address will not be displayed on your public profile or via the API. - * - * @tags users - * @name UsersUpdateAuthenticated - * @summary Update the authenticated user - * @request PATCH:/user - */ - usersUpdateAuthenticated: ( - data: { - /** The new short biography of the user. */ - bio?: string; - /** - * The new blog URL of the user. - * @example "blog.example.com" - */ - blog?: string; - /** - * The new company of the user. - * @example "Acme corporation" - */ - company?: string; - /** - * The publicly visible email address of the user. - * @example "omar@example.com" - */ - email?: string; - /** The new hiring availability of the user. */ - hireable?: boolean; - /** - * The new location of the user. - * @example "Berlin, Germany" - */ - location?: string; - /** - * The new name of the user. - * @example "Omar Jahandar" - */ - name?: string; - /** - * The new Twitter username of the user. - * @example "therealomarj" - */ - twitter_username?: string | null; + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description List the users you've blocked on your personal account. - * - * @tags users - * @name UsersListBlockedByAuthenticated - * @summary List users blocked by the authenticated user - * @request GET:/user/blocks - */ - usersListBlockedByAuthenticated: (params: RequestParams = {}) => - this.request< - SimpleUser[], - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/user/blocks`, - method: "GET", - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title No title + * @baseUrl http://localhost:8080/api/v1 + */ +export class Api extends HttpClient { + auth = { /** * No description * - * @tags users - * @name UsersCheckBlocked - * @summary Check if a user is blocked by the authenticated user - * @request GET:/user/blocks/{username} + * @tags Auth + * @name Login + * @request POST:/auth */ - usersCheckBlocked: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/blocks/${username}`, - method: "GET", + login: (data?: AuthUser, params: RequestParams = {}) => + this.request({ + path: \`/auth\`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", ...params, }), /** * No description * - * @tags users - * @name UsersBlock - * @summary Block a user - * @request PUT:/user/blocks/{username} + * @tags Auth + * @name Refresh + * @request POST:/auth/refresh + * @secure */ - usersBlock: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/blocks/${username}`, - method: "PUT", + refresh: (params: RequestParams = {}) => + this.request({ + path: \`/auth/refresh\`, + method: "POST", + secure: true, + format: "json", ...params, }), - + }; + jobs = { /** * No description * - * @tags users - * @name UsersUnblock - * @summary Unblock a user - * @request DELETE:/user/blocks/{username} + * @tags Jobs + * @name GetJobs + * @request GET:/jobs + * @secure */ - usersUnblock: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/blocks/${username}`, - method: "DELETE", + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "GET", + secure: true, + format: "json", ...params, }), /** - * @description Sets the visibility for your primary email addresses. + * No description * - * @tags users - * @name UsersSetPrimaryEmailVisibilityForAuthenticated - * @summary Set primary email visibility for the authenticated user - * @request PATCH:/user/email/visibility + * @tags Jobs + * @name AddJob + * @request POST:/jobs + * @secure */ - usersSetPrimaryEmailVisibilityForAuthenticated: ( - data: { - /** - * An email address associated with the GitHub user account to manage. - * @example "org@example.com" - */ - email: string; - /** Denotes whether an email is publically visible. */ - visibility: "public" | "private"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/email/visibility`, - method: "PATCH", + addJob: (data: PickJobGithub, params: RequestParams = {}) => + this.request({ + path: \`/jobs\`, + method: "POST", body: data, + secure: true, type: ContentType.Json, format: "json", ...params, }), /** - * @description Lists all of your email addresses, and specifies which one is visible to the public. This endpoint is accessible with the `user:email` scope. + * No description * - * @tags users - * @name UsersListEmailsForAuthenticated - * @summary List email addresses for the authenticated user - * @request GET:/user/emails + * @tags Jobs + * @name GetJob + * @request GET:/jobs/{id} + * @secure */ - usersListEmailsForAuthenticated: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/emails`, + getJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description This endpoint is accessible with the `user` scope. + * No description * - * @tags users - * @name UsersAddEmailForAuthenticated - * @summary Add an email address for the authenticated user - * @request POST:/user/emails + * @tags Jobs + * @name UpdateJob + * @request PATCH:/jobs/{id} + * @secure */ - usersAddEmailForAuthenticated: ( - data: - | { - /** - * Adds one or more email addresses to your GitHub account. Must contain at least one email address. **Note:** Alternatively, you can pass a single email address or an `array` of emails addresses directly, but we recommend that you pass an object using the `emails` key. - * @example [] - */ - emails: string[]; - } - | string[] - | string, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/emails`, - method: "POST", + updateJob: (id: string, data: JobUpdate, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, + method: "PATCH", body: data, + secure: true, type: ContentType.Json, format: "json", ...params, }), /** - * @description This endpoint is accessible with the `user` scope. + * No description * - * @tags users - * @name UsersDeleteEmailForAuthenticated - * @summary Delete an email address for the authenticated user - * @request DELETE:/user/emails + * @tags Jobs + * @name DeleteJob + * @request DELETE:/jobs/{id} + * @secure */ - usersDeleteEmailForAuthenticated: ( - data: - | { - /** Email addresses associated with the GitHub user account. */ - emails: string[]; - } - | string[] - | string, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/emails`, + deleteJob: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/jobs/\${id}\`, method: "DELETE", - body: data, - type: ContentType.Json, + secure: true, + format: "json", ...params, }), - + }; + xRoute = { /** - * @description Lists the people following the authenticated user. + * No description * - * @tags users - * @name UsersListFollowersForAuthenticatedUser - * @summary List followers of the authenticated user - * @request GET:/user/followers + * @tags Jobs + * @name GetJobs + * @request GET:x-route + * @secure */ - usersListFollowersForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/followers`, + getJobs: (params: RequestParams = {}) => + this.request({ + path: \`x-route\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Lists the people who the authenticated user follows. + * No description * - * @tags users - * @name UsersListFollowedByAuthenticated - * @summary List the people the authenticated user follows - * @request GET:/user/following + * @tags Jobs + * @name AddJob + * @request POST:x-route + * @secure */ - usersListFollowedByAuthenticated: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/following`, - method: "GET", - query: query, + addJob: (data: PickJobGithub, params: RequestParams = {}) => + this.request({ + path: \`x-route\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, format: "json", ...params, }), - + }; + projects = { /** * No description * - * @tags users - * @name UsersCheckPersonIsFollowedByAuthenticated - * @summary Check if a person is followed by the authenticated user - * @request GET:/user/following/{username} + * @tags Projects + * @name GetProjects + * @request GET:/projects */ - usersCheckPersonIsFollowedByAuthenticated: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, + getProjects: (params: RequestParams = {}) => + this.request({ + path: \`/projects\`, method: "GET", + format: "json", ...params, }), /** - * @description Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the `user:follow` scope. + * No description * - * @tags users - * @name UsersFollow - * @summary Follow a user - * @request PUT:/user/following/{username} + * @tags Projects + * @name AddProjects + * @request POST:/projects + * @secure */ - usersFollow: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", + addProjects: (data: ProjectUpdate, params: RequestParams = {}) => + this.request({ + path: \`/projects\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + format: "json", ...params, }), /** - * @description Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the `user:follow` scope. + * No description * - * @tags users - * @name UsersUnfollow - * @summary Unfollow a user - * @request DELETE:/user/following/{username} + * @tags Projects + * @name UpdateProject + * @request PATCH:/projects/{id} + * @secure */ - usersUnfollow: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", + updateProject: (id: string, data: ProjectUpdate, params: RequestParams = {}) => + this.request({ + path: \`/projects/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + format: "json", ...params, }), - + }; + users = { /** - * @description Lists the current user's GPG keys. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:gpg_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * No description * - * @tags users - * @name UsersListGpgKeysForAuthenticated - * @summary List GPG keys for the authenticated user - * @request GET:/user/gpg_keys + * @tags Users + * @name GetUsers + * @request GET:/users + * @secure */ - usersListGpgKeysForAuthenticated: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/gpg_keys`, + getUsers: (params: RequestParams = {}) => + this.request({ + path: \`/users\`, method: "GET", - query: query, + secure: true, format: "json", ...params, }), /** - * @description Adds a GPG key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least `write:gpg_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * No description * - * @tags users - * @name UsersCreateGpgKeyForAuthenticated - * @summary Create a GPG key for the authenticated user - * @request POST:/user/gpg_keys + * @tags Users + * @name AddUser + * @request POST:/users + * @secure */ - usersCreateGpgKeyForAuthenticated: ( - data: { - /** A GPG key in ASCII-armored format. */ - armored_public_key: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/gpg_keys`, + addUser: (data: AuthUser, params: RequestParams = {}) => + this.request({ + path: \`/users\`, method: "POST", body: data, + secure: true, type: ContentType.Json, format: "json", ...params, }), /** - * @description View extended details for a single GPG key. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:gpg_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * No description * - * @tags users - * @name UsersGetGpgKeyForAuthenticated - * @summary Get a GPG key for the authenticated user - * @request GET:/user/gpg_keys/{gpg_key_id} + * @tags Users + * @name DeleteUser + * @request DELETE:/users/{id} + * @secure */ - usersGetGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/gpg_keys/${gpgKeyId}`, - method: "GET", + deleteUser: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/users/\${id}\`, + method: "DELETE", + secure: true, format: "json", ...params, }), /** - * @description Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `admin:gpg_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * No description * - * @tags users - * @name UsersDeleteGpgKeyForAuthenticated - * @summary Delete a GPG key for the authenticated user - * @request DELETE:/user/gpg_keys/{gpg_key_id} + * @tags Users + * @name UpdateUser + * @request PATCH:/users/{id} + * @secure */ - usersDeleteGpgKeyForAuthenticated: (gpgKeyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/gpg_keys/${gpgKeyId}`, - method: "DELETE", + updateUser: (id: string, data: UserUpdate, params: RequestParams = {}) => + this.request({ + path: \`/users/\${id}\`, + method: "PATCH", + body: data, + secure: true, + type: ContentType.Json, + format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'uber' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface Activities { + /** + * Total number of items available. + * @format int32 + */ + count?: number; + history?: Activity[]; + /** + * Number of items to retrieve (100 max). + * @format int32 + */ + limit?: number; + /** + * Position in pagination. + * @format int32 + */ + offset?: number; +} + +export interface Activity { + /** Unique identifier for the activity */ + uuid?: string; +} + +export interface Error { + /** @format int32 */ + code?: number; + fields?: string; + message?: string; +} + +export interface PriceEstimate { + /** [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code. */ + currency_code?: string; + /** Display name of product. */ + display_name?: string; + /** Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or "Metered" for TAXI. */ + estimate?: string; + /** Upper bound of the estimated price. */ + high_estimate?: number; + /** Lower bound of the estimated price. */ + low_estimate?: number; + /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles */ + product_id?: string; + /** Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier. */ + surge_multiplier?: number; +} + +export interface Product { + /** Capacity of product. For example, 4 people. */ + capacity?: number; + /** Description of product. */ + description?: string; + /** Display name of product. */ + display_name?: string; + /** Image URL representing the product. */ + image?: string; + /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles. */ + product_id?: string; +} + +export interface ProductList { + /** Contains the list of products */ + products?: Product[]; +} + +export interface Profile { + /** Email address of the Uber user */ + email?: string; + /** First name of the Uber user. */ + first_name?: string; + /** Last name of the Uber user. */ + last_name?: string; + /** Image URL of the Uber user. */ + picture?: string; + /** Promo code of the Uber user. */ + promo_code?: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.uber.com/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + }, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Uber API + * @version 1.0.0 + * @baseUrl https://api.uber.com/v1 + * + * Move your app forward with the Uber API + */ +export class Api extends HttpClient { + products = { /** - * @description Lists installations of your GitHub App that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You can find the permissions for the installation under the `permissions` key. + * @description The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. * - * @tags apps - * @name AppsListInstallationsForAuthenticatedUser - * @summary List app installations accessible to the user access token - * @request GET:/user/installations + * @tags Products + * @name ProductsList + * @summary Product Types + * @request GET:/products + * @secure */ - appsListInstallationsForAuthenticatedUser: ( - query?: { + productsList: ( + query: { /** - * Page number of the results to fetch. - * @default 1 + * Latitude component of location. + * @format double */ - page?: number; + latitude: number; /** - * Results per page (max 100) - * @default 30 + * Longitude component of location. + * @format double */ - per_page?: number; + longitude: number; }, params: RequestParams = {}, ) => - this.request< - { - installations: Installation[]; - total_count: number; - }, - | BasicError - | { - documentation_url: string; - message: string; - } - >({ - path: `/user/installations`, + this.request({ + path: \`/products\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), - + }; + estimates = { /** - * @description List repositories that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access for an installation. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. The access the user has to each repository is included in the hash under the `permissions` key. + * @description The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. * - * @tags apps - * @name AppsListInstallationReposForAuthenticatedUser - * @summary List repositories accessible to the user access token - * @request GET:/user/installations/{installation_id}/repositories + * @tags Estimates + * @name PriceList + * @summary Price Estimates + * @request GET:/estimates/price */ - appsListInstallationReposForAuthenticatedUser: ( - installationId: number, - query?: { + priceList: ( + query: { /** - * Page number of the results to fetch. - * @default 1 + * Latitude component of end location. + * @format double */ - page?: number; + end_latitude?: number; /** - * Results per page (max 100) - * @default 30 + * Longitude component of end location. + * @format double */ - per_page?: number; + end_longitude: number; + /** + * Latitude component of start location. + * @format double + */ + start_latitude: number; + /** + * Longitude component of start location. + * @format double + */ + start_longitude: number; }, params: RequestParams = {}, ) => - this.request< - { - repositories: Repository[]; - repository_selection?: string; - total_count: number; - }, - BasicError - >({ - path: `/user/installations/${installationId}/repositories`, + this.request({ + path: \`/estimates/price\`, method: "GET", query: query, format: "json", @@ -26781,1652 +43672,2428 @@ export class Api extends HttpClient - this.request({ - path: `/user/installations/${installationId}/repositories/${repositoryId}`, - method: "PUT", - ...params, - }), - - /** - * @description Remove a single repository from an installation. The authenticated user must have admin access to the repository. You must use a personal access token (which you can create via the [command line](https://docs.github.com/github/authenticating-to-github/creating-a-personal-access-token) or [Basic Authentication](https://docs.github.com/rest/overview/other-authentication-methods#basic-authentication)) to access this endpoint. - * - * @tags apps - * @name AppsRemoveRepoFromInstallation - * @summary Remove a repository from an app installation - * @request DELETE:/user/installations/{installation_id}/repositories/{repository_id} - */ - appsRemoveRepoFromInstallation: (installationId: number, repositoryId: number, params: RequestParams = {}) => - this.request({ - path: `/user/installations/${installationId}/repositories/${repositoryId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Shows which type of GitHub user can interact with your public repositories and when the restriction expires. If there are no restrictions, you will see an empty response. - * - * @tags interactions - * @name InteractionsGetRestrictionsForAuthenticatedUser - * @summary Get interaction restrictions for your public repositories - * @request GET:/user/interaction-limits - */ - interactionsGetRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => - this.request({ - path: `/user/interaction-limits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Temporarily restricts which type of GitHub user can interact with your public repositories. Setting the interaction limit at the user level will overwrite any interaction limits that are set for individual repositories owned by the user. - * - * @tags interactions - * @name InteractionsSetRestrictionsForAuthenticatedUser - * @summary Set interaction restrictions for your public repositories - * @request PUT:/user/interaction-limits - */ - interactionsSetRestrictionsForAuthenticatedUser: (data: InteractionLimit, params: RequestParams = {}) => - this.request({ - path: `/user/interaction-limits`, - method: "PUT", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Removes any interaction restrictions from your public repositories. - * - * @tags interactions - * @name InteractionsRemoveRestrictionsForAuthenticatedUser - * @summary Remove interaction restrictions from your public repositories - * @request DELETE:/user/interaction-limits - */ - interactionsRemoveRestrictionsForAuthenticatedUser: (params: RequestParams = {}) => - this.request({ - path: `/user/interaction-limits`, - method: "DELETE", - ...params, - }), - - /** - * @description List issues across owned and member repositories assigned to the authenticated user. **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint. + * @description The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. * - * @tags issues - * @name IssuesListForAuthenticatedUser - * @summary List user account issues assigned to the authenticated user - * @request GET:/user/issues + * @tags Estimates + * @name TimeList + * @summary Time Estimates + * @request GET:/estimates/time */ - issuesListForAuthenticatedUser: ( - query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Indicates which sorts of issues to return. Can be one of: - * \* `assigned`: Issues assigned to you - * \* `created`: Issues created by you - * \* `mentioned`: Issues mentioning you - * \* `subscribed`: Issues you're subscribed to updates for - * \* `all`: All issues the authenticated user can see, regardless of participation or creation - * @default "assigned" - */ - filter?: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** A list of comma separated label names. Example: `bug,ui,@high` */ - labels?: string; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + timeList: ( + query: { /** - * Results per page (max 100) - * @default 30 + * Unique customer identifier to be used for experience customization. + * @format uuid */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; + customer_uuid?: string; + /** Unique identifier representing a specific product for a given latitude & longitude. */ + product_id?: string; /** - * What to sort results by. Can be either `created`, `updated`, `comments`. - * @default "created" + * Latitude component of start location. + * @format double */ - sort?: "created" | "updated" | "comments"; + start_latitude: number; /** - * Indicates the state of the issues to return. Can be either `open`, `closed`, or `all`. - * @default "open" + * Longitude component of start location. + * @format double */ - state?: "open" | "closed" | "all"; + start_longitude: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/issues`, + this.request({ + path: \`/estimates/time\`, method: "GET", query: query, format: "json", ...params, }), - + }; + me = { /** - * @description Lists the public SSH keys for the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:public_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description The User Profile endpoint returns information about the Uber user that has authorized with the application. * - * @tags users - * @name UsersListPublicSshKeysForAuthenticated - * @summary List public SSH keys for the authenticated user - * @request GET:/user/keys + * @tags User + * @name GetMe + * @summary User Profile + * @request GET:/me */ - usersListPublicSshKeysForAuthenticated: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/keys`, + getMe: (params: RequestParams = {}) => + this.request({ + path: \`/me\`, method: "GET", - query: query, format: "json", ...params, }), - + }; + history = { /** - * @description Adds a public SSH key to the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth, or OAuth with at least `write:public_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). + * @description The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. * - * @tags users - * @name UsersCreatePublicSshKeyForAuthenticated - * @summary Create a public SSH key for the authenticated user - * @request POST:/user/keys + * @tags User + * @name HistoryList + * @summary User Activity + * @request GET:/history */ - usersCreatePublicSshKeyForAuthenticated: ( - data: { + historyList: ( + query?: { /** - * The public SSH key to add to your GitHub account. - * @pattern ^ssh-(rsa|dss|ed25519) |^ecdsa-sha2-nistp(256|384|521) + * Number of items to retrieve. Default is 5, maximum is 100. + * @format int32 */ - key: string; + limit?: number; /** - * A descriptive name for the new key. - * @example "Personal MacBook Air" + * Offset the list of returned results by this amount. Default is zero. + * @format int32 */ - title?: string; + offset?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/keys`, - method: "POST", - body: data, - type: ContentType.Json, + this.request({ + path: \`/history\`, + method: "GET", + query: query, format: "json", ...params, }), + }; +} +" +`; + +exports[`simple > 'up-banking' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ +/** Provides information about an Up bank account. */ +export interface AccountResource { + attributes: { + /** The bank account type of this account. */ + accountType: AccountTypeEnum; /** - * @description View extended details for a single public SSH key. Requires that you are authenticated via Basic Auth or via OAuth with at least `read:public_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags users - * @name UsersGetPublicSshKeyForAuthenticated - * @summary Get a public SSH key for the authenticated user - * @request GET:/user/keys/{key_id} + * The available balance of the account, taking into account any amounts + * that are currently on hold. */ - usersGetPublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), + balance: MoneyObject; + /** + * The date-time at which this account was first opened. + * @format date-time + */ + createdAt: string; + /** The name associated with the account in the Up application. */ + displayName: string; + }; + /** The unique identifier for this account. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + transactions: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`accounts\` */ + type: string; +} + +/** + * Specifies the type of bank account. Currently returned values are \`SAVER\` + * and \`TRANSACTIONAL\`. + */ +export enum AccountTypeEnum { + SAVER = "SAVER", + TRANSACTIONAL = "TRANSACTIONAL", +} + +/** + * Provides information about an instant reimbursement in the form of + * cashback. + */ +export interface CashbackObject { + /** The total amount of cashback paid, represented as a positive value. */ + amount: MoneyObject; + /** A brief description of why this cashback was paid. */ + description: string; +} + +/** Provides information about a category and its ancestry. */ +export interface CategoryResource { + attributes: { + /** The name of this category as seen in the Up application. */ + name: string; + }; + /** + * The unique identifier for this category. This is a human-readable but + * URL-safe value. + */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + children: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + }[]; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + parent: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`categories\` */ + type: string; +} + +/** + * Request to create a new webhook. This currently only requires a \`url\` + * attribute. + */ +export interface CreateWebhookRequest { + /** The webhook resource to create. */ + data: WebhookInputResource; +} + +/** Successful response after creating a webhook. */ +export interface CreateWebhookResponse { + /** The webhook that was created. */ + data: WebhookResource; +} +/** Provides information about an error processing a request. */ +export interface ErrorObject { + /** + * A detailed description of this error. This should be considered unique + * to individual occurrences of an error and subject to change. It is + * useful for debugging purposes. + */ + detail: string; + /** + * If applicable, location in the request that this error relates to. This + * may be a parameter in the query string, or a an attribute in the + * request body. + */ + source?: { /** - * @description Removes a public SSH key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least `admin:public_key` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/). - * - * @tags users - * @name UsersDeletePublicSshKeyForAuthenticated - * @summary Delete a public SSH key for the authenticated user - * @request DELETE:/user/keys/{key_id} + * If this error relates to a query parameter, the name of the + * parameter. */ - usersDeletePublicSshKeyForAuthenticated: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), + parameter?: string; + /** + * If this error relates to an attribute in the request body, a + * rfc-6901 JSON pointer to the attribute. + */ + pointer?: string; + }; + /** + * The HTTP status code associated with this error. This can also be + * obtained from the response headers. The status indicates the broad type + * of error according to HTTP semantics. + */ + status: string; + /** + * A short description of this error. This should be stable across + * multiple occurrences of this type of error and typically expands on the + * reason for the status code. + */ + title: string; +} + +/** Generic error response that returns one or more errors. */ +export interface ErrorResponse { + /** The list of errors returned in this response. */ + errors: ErrorObject[]; +} + +/** Successful response to get a single account. */ +export interface GetAccountResponse { + /** The account returned in this response. */ + data: AccountResource; +} + +/** Successful response to get a single category and its ancestry. */ +export interface GetCategoryResponse { + /** The category returned in this response. */ + data: CategoryResource; +} + +/** Successful response to get a single transaction. */ +export interface GetTransactionResponse { + /** The transaction returned in this response. */ + data: TransactionResource; +} +/** Successful response to get a single webhook. */ +export interface GetWebhookResponse { + /** The webhook returned in this response. */ + data: WebhookResource; +} + +/** + * Provides information about the amount at which a transaction was in the + * \`HELD\` status. + */ +export interface HoldInfoObject { + /** + * The amount of this transaction while in the \`HELD\` status, in + * Australian dollars. + */ + amount: MoneyObject; + /** + * The foreign currency amount of this transaction while in the \`HELD\` + * status. This field will be \`null\` for domestic transactions. The amount + * was converted to the AUD amount reflected in the \`amount\` field. + */ + foreignAmount: MoneyObject | null; +} + +/** + * Successful response to get all accounts. This returns a paginated list of + * accounts, which can be scrolled by following the \`prev\` and \`next\` links + * if present. + */ +export interface ListAccountsResponse { + /** The list of accounts returned in this response. */ + data: AccountResource[]; + links: { /** - * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). - * - * @tags apps - * @name AppsListSubscriptionsForAuthenticatedUser - * @summary List subscriptions for the authenticated user - * @request GET:/user/marketplace_purchases + * The link to the next page in the results. If this value is \`null\` + * there is no next page. */ - appsListSubscriptionsForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/marketplace_purchases`, - method: "GET", - query: query, - format: "json", - ...params, - }), + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all categories and their ancestry. The + * returned list is not paginated. + */ +export interface ListCategoriesResponse { + /** The list of categories returned in this response. */ + data: CategoryResource[]; +} +/** + * Successful response to get all tags. This returns a paginated list of + * tags, which can be scrolled by following the \`prev\` and \`next\` links if + * present. + */ +export interface ListTagsResponse { + /** The list of tags returned in this response. */ + data: TagResource[]; + links: { /** - * @description Lists the active subscriptions for the authenticated user. You must use a [user-to-server OAuth access token](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-users-on-your-site), created for a user who has authorized your GitHub App, to access this endpoint. . OAuth Apps must authenticate using an [OAuth token](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/). - * - * @tags apps - * @name AppsListSubscriptionsForAuthenticatedUserStubbed - * @summary List subscriptions for the authenticated user (stubbed) - * @request GET:/user/marketplace_purchases/stubbed + * The link to the next page in the results. If this value is \`null\` + * there is no next page. */ - appsListSubscriptionsForAuthenticatedUserStubbed: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/marketplace_purchases/stubbed`, - method: "GET", - query: query, - format: "json", - ...params, - }), + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} +/** + * Successful response to get all transactions. This returns a paginated + * list of transactions, which can be scrolled by following the \`prev\` and + * \`next\` links if present. + */ +export interface ListTransactionsResponse { + /** The list of transactions returned in this response. */ + data: TransactionResource[]; + links: { /** - * No description - * - * @tags orgs - * @name OrgsListMembershipsForAuthenticatedUser - * @summary List organization memberships for the authenticated user - * @request GET:/user/memberships/orgs + * The link to the next page in the results. If this value is \`null\` + * there is no next page. */ - orgsListMembershipsForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all delivery logs for a webhook. This returns + * a paginated list of delivery logs, which can be scrolled by following the + * \`next\` and \`prev\` links if present. + */ +export interface ListWebhookDeliveryLogsResponse { + /** The list of delivery logs returned in this response. */ + data: WebhookDeliveryLogResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** + * Successful response to get all webhooks. This returns a paginated list of + * webhooks, which can be scrolled by following the \`prev\` and \`next\` links + * if present. + */ +export interface ListWebhooksResponse { + /** The list of webhooks returned in this response. */ + data: WebhookResource[]; + links: { + /** + * The link to the next page in the results. If this value is \`null\` + * there is no next page. + */ + next: string | null; + /** + * The link to the previous page in the results. If this value is \`null\` + * there is no previous page. + */ + prev: string | null; + }; +} + +/** Provides information about a value of money. */ +export interface MoneyObject { + /** The ISO 4217 currency code. */ + currencyCode: string; + /** + * The amount of money, formatted as a string in the relevant currency. + * For example, for an Australian dollar value of $10.56, this field will + * be \`"10.56"\`. The currency symbol is not included in the string. + */ + value: string; + /** + * The amount of money in the smallest denomination for the currency, as a + * 64-bit integer. For example, for an Australian dollar value of $10.56, + * this field will be \`1056\`. + */ + valueInBaseUnits: number; +} + +/** Basic ping response to verify authentication. */ +export interface PingResponse { + meta: { + /** The unique identifier of the authenticated customer. */ + id: string; + /** A cute emoji that represents the response status. */ + statusEmoji: string; + }; +} + +/** + * Provides information about how a Round Up was applied, such as whether or + * not a boost was included in the Round Up. + */ +export interface RoundUpObject { + /** + * The total amount of this Round Up, including any boosts, represented as + * a negative value. + */ + amount: MoneyObject; + /** + * The portion of the Round Up \`amount\` owing to boosted Round Ups, + * represented as a negative value. If no boost was added to the Round Up + * this field will be \`null\`. + */ + boostPortion: MoneyObject | null; +} + +/** Bla bla bla foo bar baz */ +export enum SomeEnumName { + Foo = "Foo", + Bar = "Bar", + Baz = "Baz", + Bad = "Bad", +} + +/** Uniquely identifies a single tag in the API. */ +export interface TagInputResourceIdentifier { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + /** The type of this resource: \`tags\` */ + type: string; +} + +/** Provides information about a tag. */ +export interface TagResource { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + relationships: { + transactions: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`tags\` */ + type: string; +} + +export interface TransactionResource { + attributes: { + /** + * The amount of this transaction in Australian dollars. For + * transactions that were once \`HELD\` but are now \`SETTLED\`, refer to + * the \`holdInfo\` field for the original \`amount\` the transaction was + * \`HELD\` at. + */ + amount: MoneyObject; + /** + * If all or part of this transaction was instantly reimbursed in the + * form of cashback, details of the reimbursement. + */ + cashback: CashbackObject | null; + /** + * The date-time at which this transaction was first encountered. + * @format date-time + */ + createdAt: string; + /** + * A short description for this transaction. Usually the merchant name + * for purchases. + */ + description: string; + /** + * The foreign currency amount of this transaction. This field will be + * \`null\` for domestic transactions. The amount was converted to the AUD + * amount reflected in the \`amount\` of this transaction. Refer to the + * \`holdInfo\` field for the original \`foreignAmount\` the transaction was + * \`HELD\` at. + */ + foreignAmount: MoneyObject | null; + /** + * If this transaction is currently in the \`HELD\` status, or was ever in + * the \`HELD\` status, the \`amount\` and \`foreignAmount\` of the + * transaction while \`HELD\`. + */ + holdInfo: HoldInfoObject | null; + /** + * Attached message for this transaction, such as a payment message, or a + * transfer note. + */ + message: string | null; + /** + * The original, unprocessed text of the transaction. This is often not + * a perfect indicator of the actual merchant, but it is useful for + * reconciliation purposes in some cases. + */ + rawText: string | null; + /** + * Details of how this transaction was rounded-up. If no Round Up was + * applied this field will be \`null\`. + */ + roundUp: RoundUpObject | null; + /** + * The date-time at which this transaction settled. This field will be + * \`null\` for transactions that are currently in the \`HELD\` status. + * @format date-time + */ + settledAt: string | null; + /** + * The current processing status of this transaction, according to + * whether or not this transaction has settled or is still held. + */ + status: TransactionStatusEnum; + }; + /** The unique identifier for this transaction. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + account: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`accounts\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + category: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + parentCategory: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`categories\` */ + type: string; + } | null; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + tags: { + data: { + /** The label of the tag, which also acts as the tag’s unique identifier. */ + id: string; + /** The type of this resource: \`tags\` */ + type: string; + }[]; + links?: { /** - * Results per page (max 100) - * @default 30 + * The link to retrieve or modify linkage between this resources and the + * related resource(s) in this relationship. */ - per_page?: number; - /** Indicates the state of the memberships to return. Can be either `active` or `pending`. If not specified, the API returns both active and pending memberships. */ - state?: "active" | "pending"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/memberships/orgs`, - method: "GET", - query: query, - format: "json", - ...params, - }), + self: string; + }; + }; + }; + /** The type of this resource: \`transactions\` */ + type: string; +} - /** - * No description - * - * @tags orgs - * @name OrgsGetMembershipForAuthenticatedUser - * @summary Get an organization membership for the authenticated user - * @request GET:/user/memberships/orgs/{org} - */ - orgsGetMembershipForAuthenticatedUser: (org: string, params: RequestParams = {}) => - this.request({ - path: `/user/memberships/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), +/** + * Specifies which stage of processing a transaction is currently at. + * Currently returned values are \`HELD\` and \`SETTLED\`. When a transaction is + * held, its account’s \`availableBalance\` is affected. When a transaction is + * settled, its account’s \`currentBalance\` is affected. + */ +export enum TransactionStatusEnum { + HELD = "HELD", + SETTLED = "SETTLED", +} + +/** Request to add or remove tags associated with a transaction. */ +export interface UpdateTransactionTagsRequest { + /** The tags to add to or remove from the transaction. */ + data: TagInputResourceIdentifier[]; +} +/** + * Provides historical webhook event delivery information for analysis and + * debugging purposes. + */ +export interface WebhookDeliveryLogResource { + attributes: { /** - * No description - * - * @tags orgs - * @name OrgsUpdateMembershipForAuthenticatedUser - * @summary Update an organization membership for the authenticated user - * @request PATCH:/user/memberships/orgs/{org} + * The date-time at which this log entry was created. + * @format date-time */ - orgsUpdateMembershipForAuthenticatedUser: ( - org: string, + createdAt: string; + /** The success or failure status of this delivery attempt. */ + deliveryStatus: WebhookDeliveryStatusEnum; + /** Information about the request that was sent to the webhook URL. */ + request: { + /** The payload that was sent in the request body. */ + body: string; + }; + /** Information about the response that was received from the webhook URL. */ + response: { + /** The payload that was received in the response body. */ + body: string; + /** The HTTP status code received in the response. */ + statusCode: number; + } | null; + }; + /** The unique identifier for this log entry. */ + id: string; + relationships: { + webhookEvent: { data: { - /** The state that the membership should be in. Only `"active"` will be accepted. */ - state: "active"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/memberships/orgs/${org}`, - method: "PATCH", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`webhook-events\` */ + type: string; + }; + }; + }; + /** The type of this resource: \`webhook-delivery-logs\` */ + type: string; +} + +/** + * Specifies the nature of the success or failure of a webhook delivery + * attempt to the subscribed webhook URL. The currently returned values are + * described below: + * + * - **\`DELIVERED\`**: The event was delivered to the webhook URL + * successfully and a \`200\` response was received. + * - **\`UNDELIVERABLE\`**: The webhook URL was not reachable, or timed out. + * - **\`BAD_RESPONSE_CODE\`**: The event was delivered to the webhook URL + * but a non-\`200\` response was received. + */ +export enum WebhookDeliveryStatusEnum { + DELIVERED = "DELIVERED", + UNDELIVERABLE = "UNDELIVERABLE", + BAD_RESPONSE_CODE = "BAD_RESPONSE_CODE", +} + +/** Asynchronous callback request used for webhook event delivery. */ +export interface WebhookEventCallback { + /** The webhook event data sent to the subscribed webhook. */ + data: WebhookEventResource; +} +/** + * Provides the event data used in asynchronous webhook event callbacks to + * subscribed endpoints. Webhooks events have defined \`eventType\`s and may + * optionally relate to other resources within the Up API. + */ +export interface WebhookEventResource { + attributes: { /** - * @description Lists all migrations a user has started. - * - * @tags migrations - * @name MigrationsListForAuthenticatedUser - * @summary List user migrations - * @request GET:/user/migrations + * The date-time at which this event was generated. + * @format date-time */ - migrationsListForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/migrations`, - method: "GET", - query: query, - format: "json", - ...params, - }), - + createdAt: string; /** - * @description Initiates the generation of a user migration archive. - * - * @tags migrations - * @name MigrationsStartForAuthenticatedUser - * @summary Start a user migration - * @request POST:/user/migrations + * The type of this event. This can be used to determine what action to + * take in response to the event. */ - migrationsStartForAuthenticatedUser: ( + eventType: WebhookEventTypeEnum; + }; + /** + * The unique identifier for this event. This will remain constant across + * delivery retries. + */ + id: string; + relationships: { + transaction?: { data: { - /** - * Exclude attributes from the API response to improve performance - * @example ["repositories"] - */ - exclude?: "repositories"[]; - /** - * Do not include attachments in the migration - * @example true - */ - exclude_attachments?: boolean; - /** - * Lock the repositories being migrated at the start of the migration - * @example true - */ - lock_repositories?: boolean; - repositories: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/migrations`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`transactions\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + webhook: { + data: { + /** The unique identifier of the resource within its type. */ + id: string; + /** The type of this resource: \`webhooks\` */ + type: string; + }; + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`webhook-events\` */ + type: string; +} - /** - * @description Fetches a single user migration. The response includes the `state` of the migration, which can be one of the following values: * `pending` - the migration hasn't started yet. * `exporting` - the migration is in progress. * `exported` - the migration finished successfully. * `failed` - the migration failed. Once the migration has been `exported` you can [download the migration archive](https://docs.github.com/rest/reference/migrations#download-a-user-migration-archive). - * - * @tags migrations - * @name MigrationsGetStatusForAuthenticatedUser - * @summary Get a user migration status - * @request GET:/user/migrations/{migration_id} - */ - migrationsGetStatusForAuthenticatedUser: ( - migrationId: number, - query?: { - exclude?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/migrations/${migrationId}`, - method: "GET", - query: query, - format: "json", - ...params, - }), +/** + * Specifies the type of a webhook event. This can be used to determine what + * action to take in response to the event, such as which relationships to + * expect. + */ +export enum WebhookEventTypeEnum { + TRANSACTION_CREATED = "TRANSACTION_CREATED", + TRANSACTION_SETTLED = "TRANSACTION_SETTLED", + TRANSACTION_DELETED = "TRANSACTION_DELETED", + PING = "PING", +} +/** Represents a webhook specified as request input. */ +export interface WebhookInputResource { + attributes: { /** - * @description Fetches the URL to download the migration archive as a `tar.gz` file. Depending on the resources your repository uses, the migration archive can contain JSON files with data for these objects: * attachments * bases * commit\_comments * issue\_comments * issue\_events * issues * milestones * organizations * projects * protected\_branches * pull\_request\_reviews * pull\_requests * releases * repositories * review\_comments * schema * users The archive will also contain an `attachments` directory that includes all attachment files uploaded to GitHub.com and a `repositories` directory that contains the repository's Git data. - * - * @tags migrations - * @name MigrationsGetArchiveForAuthenticatedUser - * @summary Download a user migration archive - * @request GET:/user/migrations/{migration_id}/archive + * An optional description for this webhook, up to 64 characters in + * length. */ - migrationsGetArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => - this.request({ - path: `/user/migrations/${migrationId}/archive`, - method: "GET", - ...params, - }), - + description?: string | null; /** - * @description Deletes a previous migration archive. Downloadable migration archives are automatically deleted after seven days. Migration metadata, which is returned in the [List user migrations](https://docs.github.com/rest/reference/migrations#list-user-migrations) and [Get a user migration status](https://docs.github.com/rest/reference/migrations#get-a-user-migration-status) endpoints, will continue to be available even after an archive is deleted. - * - * @tags migrations - * @name MigrationsDeleteArchiveForAuthenticatedUser - * @summary Delete a user migration archive - * @request DELETE:/user/migrations/{migration_id}/archive + * The URL that this webhook should post events to. This must be a valid + * HTTP or HTTPS URL that does not exceed 300 characters in length. + * @format uri */ - migrationsDeleteArchiveForAuthenticatedUser: (migrationId: number, params: RequestParams = {}) => - this.request({ - path: `/user/migrations/${migrationId}/archive`, - method: "DELETE", - ...params, - }), + url: string; + }; +} +/** Provides information about a webhook. */ +export interface WebhookResource { + attributes: { /** - * @description Unlocks a repository. You can lock repositories when you [start a user migration](https://docs.github.com/rest/reference/migrations#start-a-user-migration). Once the migration is complete you can unlock each repository to begin using it again or [delete the repository](https://docs.github.com/rest/reference/repos#delete-a-repository) if you no longer need the source data. Returns a status of `404 Not Found` if the repository is not locked. - * - * @tags migrations - * @name MigrationsUnlockRepoForAuthenticatedUser - * @summary Unlock a user repository - * @request DELETE:/user/migrations/{migration_id}/repos/{repo_name}/lock + * The date-time at which this webhook was created. + * @format date-time */ - migrationsUnlockRepoForAuthenticatedUser: (migrationId: number, repoName: string, params: RequestParams = {}) => - this.request({ - path: `/user/migrations/${migrationId}/repos/${repoName}/lock`, - method: "DELETE", - ...params, - }), - + createdAt: string; /** - * @description Lists all the repositories for this user migration. - * - * @tags migrations - * @name MigrationsListReposForUser - * @summary List repositories for a user migration - * @request GET:/user/migrations/{migration_id}/repositories + * An optional description that was provided at the time the webhook was + * created. */ - migrationsListReposForUser: ( - migrationId: number, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/migrations/${migrationId}/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - + description: string | null; /** - * @description List organizations for the authenticated user. **OAuth scope requirements** This only lists organizations that your authorization allows you to operate on in some way (e.g., you can list teams with `read:org` scope, you can publicize your organization membership with `user` scope, etc.). Therefore, this API requires at least `user` or `read:org` scope. OAuth requests with insufficient scope receive a `403 Forbidden` response. + * A shared secret key used to sign all webhook events sent to the + * configured webhook URL. This field is returned only once, upon the + * initial creation of the webhook. If lost, create a new webhook and + * delete this webhook. * - * @tags orgs - * @name OrgsListForAuthenticatedUser - * @summary List organizations for the authenticated user - * @request GET:/user/orgs + * The webhook URL receives a request with a + * \`X-Up-Authenticity-Signature\` header, which is the SHA-256 HMAC of + * the entire raw request body signed using this \`secretKey\`. It is + * advised to compute and check this signature to verify the + * authenticity of requests sent to the webhook URL. See + * [Handling webhook events](#callback_post_webhookURL) for full + * details. */ - orgsListForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + secretKey?: string; + /** The URL that this webhook is configured to \`POST\` events to. */ + url: string; + }; + /** The unique identifier for this webhook. */ + id: string; + links?: { + /** The canonical link to this resource within the API. */ + self: string; + }; + relationships: { + logs: { + links?: { + /** The link to retrieve the related resource(s) in this relationship. */ + related: string; + }; + }; + }; + /** The type of this resource: \`webhooks\` */ + type: string; +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "https://api.up.com.au/api/v1"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/orgs`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * No description - * - * @tags projects - * @name ProjectsCreateForAuthenticatedUser - * @summary Create a user project - * @request POST:/user/projects - */ - projectsCreateForAuthenticatedUser: ( - data: { - /** - * Body of the project - * @example "This project represents the sprint of the first week in January" - */ - body?: string | null; - /** - * Name of the project - * @example "Week One Sprint" - */ - name: string; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request< - Project, - | BasicError - | { - documentation_url: string; - message: string; - } - | ValidationErrorSimple - >({ - path: `/user/projects`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Up API + * @version v1 + * @baseUrl https://api.up.com.au/api/v1 + * @contact API Specification and Support (https://github.com/up-banking/api) + * + * The Up API gives you programmatic access to your balances and + * transaction data. You can request past transactions or set up + * webhooks to receive real-time events when new transactions hit your + * account. It’s new, it’s exciting and it’s just the beginning. + */ +export class Api extends HttpClient { + accounts = { /** - * @description Lists your publicly visible email address, which you can set with the [Set primary email visibility for the authenticated user](https://docs.github.com/rest/reference/users#set-primary-email-visibility-for-the-authenticated-user) endpoint. This endpoint is accessible with the `user:email` scope. + * @description Retrieve a paginated list of all accounts for the currently authenticated user. The returned list is paginated and can be scrolled by following the \`prev\` and \`next\` links where present. * - * @tags users - * @name UsersListPublicEmailsForAuthenticated - * @summary List public email addresses for the authenticated user - * @request GET:/user/public_emails + * @tags Accounts + * @name AccountsList + * @summary List accounts + * @request GET:/accounts + * @secure */ - usersListPublicEmailsForAuthenticated: ( + accountsList: ( query?: { /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * The number of records to return in each page. + * @example 30 */ - per_page?: number; + "page[size]"?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/public_emails`, + this.request({ + path: \`/accounts\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * @description Lists repositories that the authenticated user has explicit permission (`:read`, `:write`, or `:admin`) to access. The authenticated user has explicit permission to access repositories they own, repositories where they are a collaborator, and repositories that they can access through an organization membership. + * @description Retrieve a specific account by providing its unique identifier. * - * @tags repos - * @name ReposListForAuthenticatedUser - * @summary List repositories for the authenticated user - * @request GET:/user/repos + * @tags Accounts + * @name AccountsDetail + * @summary Retrieve account + * @request GET:/accounts/{id} + * @secure */ - reposListForAuthenticatedUser: ( + accountsDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/accounts/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * @description Retrieve a list of all transactions for a specific account. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. + * + * @tags Transactions + * @name TransactionsDetail + * @summary List transactions by account + * @request GET:/accounts/{accountId}/transactions + * @secure + */ + transactionsDetail: ( + accountId: string, query?: { /** - * Comma-separated list of values. Can include: - * \* `owner`: Repositories that are owned by the authenticated user. - * \* `collaborator`: Repositories that the user has been added to as a collaborator. - * \* `organization_member`: Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on. - * @default "owner,collaborator,organization_member" + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" */ - affiliation?: string; - /** Only show notifications updated before the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - before?: string; - /** Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc` */ - direction?: "asc" | "desc"; + "filter[category]"?: string; /** - * Page number of the results to fetch. - * @default 1 + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" */ - page?: number; + "filter[since]"?: string; /** - * Results per page (max 100) - * @default 30 + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; + "filter[status]"?: TransactionStatusEnum; /** - * Can be one of `created`, `updated`, `pushed`, `full_name`. - * @default "full_name" + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" */ - sort?: "created" | "updated" | "pushed" | "full_name"; + "filter[tag]"?: string; /** - * Can be one of `all`, `owner`, `public`, `private`, `member`. Default: `all` - * - * Will cause a `422` error if used in the same request as **visibility** or **affiliation**. Will cause a `422` error if used in the same request as **visibility** or **affiliation**. - * @default "all" + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" */ - type?: "all" | "owner" | "public" | "private" | "member"; + "filter[until]"?: string; /** - * Can be one of `all`, `public`, or `private`. - * @default "all" + * The number of records to return in each page. + * @example 30 */ - visibility?: "all" | "public" | "private"; + "page[size]"?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/repos`, + this.request({ + path: \`/accounts/\${accountId}/transactions\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), - + }; + categories = { /** - * @description Creates a new repository for the authenticated user. **OAuth scope requirements** When using [OAuth](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/), authorizations must include: * `public_repo` scope or `repo` scope to create a public repository * `repo` scope to create a private repository + * @description Retrieve a list of all categories and their ancestry. The returned list is not paginated. * - * @tags repos - * @name ReposCreateForAuthenticatedUser - * @summary Create a repository for the authenticated user - * @request POST:/user/repos + * @tags Categories + * @name CategoriesList + * @summary List categories + * @request GET:/categories + * @secure */ - reposCreateForAuthenticatedUser: ( - data: { - /** - * Whether to allow merge commits for pull requests. - * @default true - * @example true - */ - allow_merge_commit?: boolean; - /** - * Whether to allow rebase merges for pull requests. - * @default true - * @example true - */ - allow_rebase_merge?: boolean; - /** - * Whether to allow squash merges for pull requests. - * @default true - * @example true - */ - allow_squash_merge?: boolean; - /** - * Whether the repository is initialized with a minimal README. - * @default false - */ - auto_init?: boolean; - /** - * Whether to delete head branches when pull requests are merged - * @default false - * @example false - */ - delete_branch_on_merge?: boolean; - /** A short description of the repository. */ - description?: string; - /** - * The desired language or platform to apply to the .gitignore. - * @example "Haskell" - */ - gitignore_template?: string; - /** - * Whether downloads are enabled. - * @default true - * @example true - */ - has_downloads?: boolean; - /** - * Whether issues are enabled. - * @default true - * @example true - */ - has_issues?: boolean; - /** - * Whether projects are enabled. - * @default true - * @example true - */ - has_projects?: boolean; - /** - * Whether the wiki is enabled. - * @default true - * @example true - */ - has_wiki?: boolean; - /** A URL with more information about the repository. */ - homepage?: string; - /** - * Whether this repository acts as a template that can be used to generate new repositories. - * @default false - * @example true - */ - is_template?: boolean; - /** - * The license keyword of the open source license for this repository. - * @example "mit" - */ - license_template?: string; - /** - * The name of the repository. - * @example "Team Environment" - */ - name: string; + categoriesList: ( + query?: { /** - * Whether the repository is private or public. - * @default false + * The unique identifier of a parent category for which to + * return only its children. Providing an invalid category + * identifier results in a \`404\` response. + * @example "good-life" */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization. */ - team_id?: number; + "filter[parent]"?: string; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/repos`, - method: "POST", - body: data, - type: ContentType.Json, + this.request({ + path: \`/categories\`, + method: "GET", + query: query, + secure: true, format: "json", ...params, }), /** - * @description When authenticating as a user, this endpoint will list all currently open repository invitations for that user. + * @description Retrieve a specific category by providing its unique identifier. * - * @tags repos - * @name ReposListInvitationsForAuthenticatedUser - * @summary List repository invitations for the authenticated user - * @request GET:/user/repository_invitations + * @tags Categories + * @name CategoriesDetail + * @summary Retrieve category + * @request GET:/categories/{id} + * @secure */ - reposListInvitationsForAuthenticatedUser: ( + categoriesDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/categories/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + }; + util = { + /** + * @description Make a basic ping request to the API. This is useful to verify that authentication is functioning correctly. On authentication success an HTTP \`200\` status is returned. On failure an HTTP \`401\` error response is returned. + * + * @tags Utility endpoints + * @name PingList + * @summary Ping + * @request GET:/util/ping + * @secure + */ + pingList: (params: RequestParams = {}) => + this.request({ + path: \`/util/ping\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + }; + tags = { + /** + * @description Retrieve a list of all tags currently in use. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered lexicographically. The \`transactions\` relationship for each tag exposes a link to get the transactions with the given tag. + * + * @tags Tags + * @name TagsList + * @summary List tags + * @request GET:/tags + * @secure + */ + tagsList: ( query?: { /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * The number of records to return in each page. + * @example 50 */ - per_page?: number; + "page[size]"?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/repository_invitations`, + this.request({ + path: \`/tags\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), - + }; + transactions = { /** - * No description + * @description Associates one or more tags with a specific transaction. No more than 6 tags may be present on any single transaction. Duplicate tags are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. * - * @tags repos - * @name ReposAcceptInvitation - * @summary Accept a repository invitation - * @request PATCH:/user/repository_invitations/{invitation_id} + * @tags Tags + * @name RelationshipsTagsCreate + * @summary Add tags to transaction + * @request POST:/transactions/{transactionId}/relationships/tags + * @secure */ - reposAcceptInvitation: (invitationId: number, params: RequestParams = {}) => - this.request({ - path: `/user/repository_invitations/${invitationId}`, - method: "PATCH", + relationshipsTagsCreate: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${transactionId}/relationships/tags\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, ...params, }), /** - * No description + * @description Disassociates one or more tags from a specific transaction. Tags that are not associated are silently ignored. An HTTP \`204\` is returned on success. The associated tags, along with this request URL, are also exposed via the \`tags\` relationship on the transaction resource returned from \`/transactions/{id}\`. * - * @tags repos - * @name ReposDeclineInvitation - * @summary Decline a repository invitation - * @request DELETE:/user/repository_invitations/{invitation_id} + * @tags Tags + * @name RelationshipsTagsDelete + * @summary Remove tags from transaction + * @request DELETE:/transactions/{transactionId}/relationships/tags + * @secure */ - reposDeclineInvitation: (invitationId: number, params: RequestParams = {}) => - this.request({ - path: `/user/repository_invitations/${invitationId}`, + relationshipsTagsDelete: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${transactionId}/relationships/tags\`, method: "DELETE", + body: data, + secure: true, + type: ContentType.Json, ...params, }), /** - * @description Lists repositories the authenticated user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the `Accept` header: + * @description Retrieve a list of all transactions across all accounts for the currently authenticated user. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. To narrow the results to a specific date range pass one or both of \`filter[since]\` and \`filter[until]\` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. * - * @tags activity - * @name ActivityListReposStarredByAuthenticatedUser - * @summary List repositories starred by the authenticated user - * @request GET:/user/starred + * @tags Transactions + * @name TransactionsList + * @summary List transactions + * @request GET:/transactions + * @secure */ - activityListReposStarredByAuthenticatedUser: ( + transactionsList: ( query?: { /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" + * The category identifier for which to filter transactions. + * Both parent and child categories can be filtered through + * this parameter. Providing an invalid category identifier + * results in a \`404\` response. + * @example "good-life" */ - direction?: "asc" | "desc"; + "filter[category]"?: string; /** - * Page number of the results to fetch. - * @default 1 + * The start date-time from which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-01-01T01:02:03+10:00" */ - page?: number; + "filter[since]"?: string; /** - * Results per page (max 100) - * @default 30 + * The transaction status for which to return records. This + * can be used to filter \`HELD\` transactions from those + * that are \`SETTLED\`. + * @example "HELD" */ - per_page?: number; + "filter[status]"?: TransactionStatusEnum; /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" + * A transaction tag to filter for which to return records. + * If the tag does not exist, zero records are returned and + * a success response is given. + * @example "Holiday" */ - sort?: "created" | "updated"; + "filter[tag]"?: string; + /** + * The end date-time up to which to return records, + * formatted according to rfc-3339. Not to be used for + * pagination purposes. + * @format date-time + * @example "2020-02-01T01:02:03+10:00" + */ + "filter[until]"?: string; + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + /** Blablabla bla */ + someEnumName?: SomeEnumName; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/starred`, + this.request({ + path: \`/transactions\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), /** - * No description + * @description Retrieve a specific transaction by providing its unique identifier. * - * @tags activity - * @name ActivityCheckRepoIsStarredByAuthenticatedUser - * @summary Check if a repository is starred by the authenticated user - * @request GET:/user/starred/{owner}/{repo} + * @tags Transactions + * @name TransactionsDetail + * @summary Retrieve transaction + * @request GET:/transactions/{id} + * @secure */ - activityCheckRepoIsStarredByAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, + transactionsDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/transactions/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + }; + webhooks = { + /** + * @description Retrieve a list of configured webhooks. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered oldest first to newest last. + * + * @tags Webhooks + * @name WebhooksList + * @summary List webhooks + * @request GET:/webhooks + * @secure + */ + webhooksList: ( + query?: { + /** + * The number of records to return in each page. + * @example 30 + */ + "page[size]"?: number; + }, + params: RequestParams = {}, + ) => + this.request({ + path: \`/webhooks\`, method: "GET", + query: query, + secure: true, + format: "json", ...params, }), /** - * @description Note that you'll need to set `Content-Length` to zero when calling out to this endpoint. For more information, see "[HTTP verbs](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-verbs)." + * @description Create a new webhook with a given URL. The URL will receive webhook events as JSON-encoded \`POST\` requests. The URL must respond with a HTTP \`200\` status on success. There is currently a limit of 10 webhooks at any given time. Once this limit is reached, existing webhooks will need to be deleted before new webhooks can be created. Event delivery is retried with exponential backoff if the URL is unreachable or it does not respond with a \`200\` status. The response includes a \`secretKey\` attribute, which is used to sign requests sent to the webhook URL. It will not be returned from any other endpoints within the Up API. If the \`secretKey\` is lost, simply create a new webhook with the same URL, capture its \`secretKey\` and then delete the original webhook. See [Handling webhook events](#callback_post_webhookURL) for details on how to process webhook events. It is probably a good idea to test the webhook by [sending it a \`PING\` event](#post_webhooks_webhookId_ping) after creating it. * - * @tags activity - * @name ActivityStarRepoForAuthenticatedUser - * @summary Star a repository for the authenticated user - * @request PUT:/user/starred/{owner}/{repo} + * @tags Webhooks + * @name WebhooksCreate + * @summary Create webhook + * @request POST:/webhooks + * @secure */ - activityStarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", + webhooksCreate: (data: CreateWebhookRequest, params: RequestParams = {}) => + this.request({ + path: \`/webhooks\`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + format: "json", ...params, }), /** - * No description + * @description Retrieve a specific webhook by providing its unique identifier. * - * @tags activity - * @name ActivityUnstarRepoForAuthenticatedUser - * @summary Unstar a repository for the authenticated user - * @request DELETE:/user/starred/{owner}/{repo} + * @tags Webhooks + * @name WebhooksDetail + * @summary Retrieve webhook + * @request GET:/webhooks/{id} + * @secure */ - activityUnstarRepoForAuthenticatedUser: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, + webhooksDetail: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${id}\`, + method: "GET", + secure: true, + format: "json", + ...params, + }), + + /** + * @description Delete a specific webhook by providing its unique identifier. Once deleted, webhook events will no longer be sent to the configured URL. + * + * @tags Webhooks + * @name WebhooksDelete + * @summary Delete webhook + * @request DELETE:/webhooks/{id} + * @secure + */ + webhooksDelete: (id: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${id}\`, method: "DELETE", + secure: true, ...params, }), /** - * @description Lists repositories the authenticated user is watching. + * @description Send a \`PING\` event to a webhook by providing its unique identifier. This is useful for testing and debugging purposes. The event is delivered asynchronously and its data is returned in the response to this request. * - * @tags activity - * @name ActivityListWatchedReposForAuthenticatedUser - * @summary List repositories watched by the authenticated user - * @request GET:/user/subscriptions + * @tags Webhooks + * @name PingCreate + * @summary Ping webhook + * @request POST:/webhooks/{webhookId}/ping + * @secure */ - activityListWatchedReposForAuthenticatedUser: ( - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - query: query, + pingCreate: (webhookId: string, params: RequestParams = {}) => + this.request({ + path: \`/webhooks/\${webhookId}/ping\`, + method: "POST", + secure: true, format: "json", ...params, }), /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires `user`, `repo`, or `read:org` [scope](https://docs.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/) when authenticating via [OAuth](https://docs.github.com/apps/building-oauth-apps/). + * @description Retrieve a list of delivery logs for a webhook by providing its unique identifier. This is useful for analysis and debugging purposes. The returned list is [paginated](#pagination) and can be scrolled by following the \`next\` and \`prev\` links where present. Results are ordered newest first to oldest last. Logs may be automatically purged after a period of time. * - * @tags teams - * @name TeamsListForAuthenticatedUser - * @summary List teams for the authenticated user - * @request GET:/user/teams + * @tags Webhooks + * @name LogsDetail + * @summary List webhook logs + * @request GET:/webhooks/{webhookId}/logs + * @secure */ - teamsListForAuthenticatedUser: ( + logsDetail: ( + webhookId: string, query?: { /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 + * The number of records to return in each page. + * @example 30 */ - per_page?: number; + "page[size]"?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/user/teams`, + this.request({ + path: \`/webhooks/\${webhookId}/logs\`, method: "GET", query: query, + secure: true, format: "json", ...params, }), }; - users = { +} +" +`; + +exports[`simple > 'uspto' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface DataSetList { + apis?: { /** - * @description Lists all users, in the order that they signed up on GitHub. This list includes personal user accounts and organization accounts. Note: Pagination is powered exclusively by the `since` parameter. Use the [Link header](https://docs.github.com/rest/overview/resources-in-the-rest-api#link-header) to get the URL for the next page of users. - * - * @tags users - * @name UsersList - * @summary List users - * @request GET:/users + * A URL to the API console for each API + * @format uriref */ - usersList: ( - query?: { - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** A user ID. Only return users with an ID greater than this ID. */ - since?: number; + apiDocumentationUrl?: string; + /** To be used as a dataset parameter value */ + apiKey?: string; + /** + * The URL describing the dataset's fields + * @format uriref + */ + apiUrl?: string; + /** To be used as a version parameter value */ + apiVersionNumber?: string; + }[]; + total?: number; +} + +export enum SomeEnum { + Foo = "Foo", + Bar = "Bar", + FooBar = "Foo Bar", +} + +export enum Status { + Resolved = "resolved", + New = "new", + InProgress = "in progress", +} + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = "{scheme}://developer.uspto.gov/ds-api"; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description Provides publicly available information about someone with a GitHub account. GitHub Apps with the `Plan` user permission can use this endpoint to retrieve information about a user's GitHub plan. The GitHub App must be authenticated as a user. See "[Identifying and authorizing users for GitHub Apps](https://docs.github.com/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)" for details about authentication. For an example response, see 'Response with GitHub plan information' below" The `email` key in the following response is the publicly visible email address from your GitHub [profile page](https://github.com/settings/profile). When setting up your profile, you can select a primary email address to be “public” which provides an email entry for this endpoint. If you do not set a public email address for `email`, then it will have a value of `null`. You only see publicly visible email addresses when authenticated with GitHub. For more information, see [Authentication](https://docs.github.com/rest/overview/resources-in-the-rest-api#authentication). The Emails API enables you to list all of your email addresses, and toggle a primary email to be visible publicly. For more information, see "[Emails API](https://docs.github.com/rest/reference/users#emails)". - * - * @tags users - * @name UsersGetByUsername - * @summary Get a user - * @request GET:/users/{username} - */ - usersGetByUsername: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title USPTO Data Set API + * @version 1.0.0 + * @baseUrl {scheme}://developer.uspto.gov/ds-api + * @contact Open Data Portal (https://developer.uspto.gov) + * + * The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters. + */ +export class Api extends HttpClient { + /** + * No description + * + * @tags metadata + * @name ListDataSets + * @summary List available data sets + * @request GET:/ + */ + listDataSets = (params: RequestParams = {}) => + this.request({ + path: \`/\`, + method: "GET", + format: "json", + ...params, + }); + dataset = { /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. + * @description This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below. * - * @tags activity - * @name ActivityListEventsForAuthenticatedUser - * @summary List events for the authenticated user - * @request GET:/users/{username}/events + * @tags metadata + * @name ListSearchableFields + * @summary Provides the general information about the API and the list of fields that can be used to query the dataset. + * @request GET:/{dataset}/{version}/fields */ - activityListEventsForAuthenticatedUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/events`, + listSearchableFields: (dataset: string, version: string, params: RequestParams = {}) => + this.request({ + path: \`/\${dataset}/\${version}/fields\`, method: "GET", - query: query, format: "json", ...params, }), /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. + * @description This API is based on Solr/Lucense Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api. * - * @tags activity - * @name ActivityListOrgEventsForAuthenticatedUser - * @summary List organization events for the authenticated user - * @request GET:/users/{username}/events/orgs/{org} + * @tags search + * @name PerformSearch + * @summary Provides search capability for the data set with the given search criteria. + * @request POST:/{dataset}/{version}/records */ - activityListOrgEventsForAuthenticatedUser: ( - username: string, - org: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; + performSearch: ( + version: string, + dataset: string, + data: { /** - * Results per page (max 100) - * @default 30 + * Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values. + * @default "*:*" */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags activity - * @name ActivityListPublicEventsForUser - * @summary List public events for a user - * @request GET:/users/{username}/events/public - */ - activityListPublicEventsForUser: ( - username: string, - query?: { + criteria: string; /** - * Page number of the results to fetch. - * @default 1 + * Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset. + * @default 100 */ - page?: number; + rows?: number; /** - * Results per page (max 100) - * @default 30 + * Starting record number. Default value is 0. + * @default 0 */ - per_page?: number; + start?: number; }, params: RequestParams = {}, ) => - this.request({ - path: `/users/${username}/events/public`, - method: "GET", - query: query, + this.request[], void>({ + path: \`/\${dataset}/\${version}/records\`, + method: "POST", + body: data, + type: ContentType.UrlEncoded, format: "json", ...params, }), + }; +} +" +`; - /** - * @description Lists the people following the specified user. - * - * @tags users - * @name UsersListFollowersForUser - * @summary List followers of a user - * @request GET:/users/{username}/followers - */ - usersListFollowersForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; +exports[`simple > 'wrong-enum-subtypes' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export type Test = { + x?: "A-B"[]; +} & { + y?: string; +}; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } + + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * @description Lists the people who the specified user follows. - * - * @tags users - * @name UsersListFollowingForUser - * @summary List the people a user follows - * @request GET:/users/{username}/following - */ - usersListFollowingForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/following`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title Test + * @version test + */ +export class Api extends HttpClient {} +" +`; + +exports[`simple > 'wrong-schema-names' 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** + * Not found response + * @example "Not found" + */ +export type DF = string; + +/** + * Not found response + * @example "Not found" + */ +export type Type404 = string; + +/** + * Not found response + * @example "Not found" + */ +export type Type405 = string; + +/** + * Not found response + * @example "Not found" + */ +export type TypeFF = string; + +export type QueryParamsType = Record; +export type ResponseFormat = keyof Omit; + +export interface FullRequestParams extends Omit { + /** set parameter to \`true\` for call \`securityWorker\` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit; + +export interface ApiConfig { + baseUrl?: string; + baseApiParams?: Omit; + securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private abortControllers = new Map(); + private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } - /** - * No description - * - * @tags users - * @name UsersCheckFollowingForUser - * @summary Check if a user follows another user - * @request GET:/users/{username}/following/{target_user} - */ - usersCheckFollowingForUser: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } - /** - * @description Lists public gists for the specified user: - * - * @tags gists - * @name GistsListForUser - * @summary List gists for a user - * @request GET:/users/{username}/gists - */ - gistsListForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** Only show notifications updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); + return keys + .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) + .join("&"); + } - /** - * @description Lists the GPG keys for a user. This information is accessible by anyone. - * - * @tags users - * @name UsersListGpgKeysForUser - * @summary List GPG keys for a user - * @request GET:/users/{username}/gpg_keys - */ - usersListGpgKeysForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gpg_keys`, - method: "GET", - query: query, - format: "json", - ...params, - }), + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? \`?\${queryString}\` : ""; + } - /** - * @description Provides hovercard information when authenticated through basic auth or OAuth with the `repo` scope. You can find out more about someone in relation to their pull requests, issues, repositories, and organizations. The `subject_type` and `subject_id` parameters provide context for the person's hovercard, which returns more information than without the parameters. For example, if you wanted to find out more about `octocat` who owns the `Spoon-Knife` repository via cURL, it would look like this: ```shell curl -u username:token https://api.github.com/users/octocat/hovercard?subject_type=repository&subject_id=1300192 ``` - * - * @tags users - * @name UsersGetContextForUser - * @summary Get contextual information for a user - * @request GET:/users/{username}/hovercard - */ - usersGetContextForUser: ( - username: string, - query?: { - /** Uses the ID for the `subject_type` you specified. **Required** when using `subject_type`. */ - subject_id?: string; - /** Identifies which additional information you'd like to receive about the person's hovercard. Can be `organization`, `repository`, `issue`, `pull_request`. **Required** when using `subject_id`. */ - subject_type?: "organization" | "repository" | "issue" | "pull_request"; + private contentFormatters: Record any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, + [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : \`\${property}\`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/hovercard`, - method: "GET", - query: query, - format: "json", - ...params, - }), + }; + } - /** - * @description Enables an authenticated GitHub App to find the user’s installation information. You must use a [JWT](https://docs.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app) to access this endpoint. - * - * @tags apps - * @name AppsGetUserInstallation - * @summary Get a user installation for the authenticated app - * @request GET:/users/{username}/installation - */ - appsGetUserInstallation: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/installation`, - method: "GET", - format: "json", - ...params, - }), + protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } - /** - * @description Lists the _verified_ public SSH keys for a user. This is accessible by anyone. - * - * @tags users - * @name UsersListPublicKeysForUser - * @summary List public keys for a user - * @request GET:/users/{username}/keys - */ - usersListPublicKeysForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - query: query, - format: "json", - ...params, - }), + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; - /** - * @description List [public organization memberships](https://help.github.com/articles/publicizing-or-concealing-organization-membership) for the specified user. This method only lists _public_ memberships, regardless of authentication. If you need to fetch all of the organization memberships (public and private) for the authenticated user, use the [List organizations for the authenticated user](https://docs.github.com/rest/reference/orgs#list-organizations-for-the-authenticated-user) API instead. - * - * @tags orgs - * @name OrgsListForUser - * @summary List organizations for a user - * @request GET:/users/{username}/orgs - */ - orgsListForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - query: query, - format: "json", - ...params, - }), + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); - /** - * No description - * - * @tags projects - * @name ProjectsListForUser - * @summary List user projects - * @request GET:/users/{username}/projects - */ - projectsListForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * Indicates the state of the projects to return. Can be either `open`, `closed`, or `all`. - * @default "open" - */ - state?: "open" | "closed" | "all"; - }, - params: RequestParams = {}, - ) => - this.request< - Project[], - | { - documentation_url: string; - message: string; - } - | ValidationError - >({ - path: `/users/${username}/projects`, - method: "GET", - query: query, - format: "json", - ...params, - }), + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; - /** - * @description These are events that you've received by watching repos and following users. If you are authenticated as the given user, you will see private events. Otherwise, you'll only see public events. - * - * @tags activity - * @name ActivityListReceivedEventsForUser - * @summary List events received by the authenticated user - * @request GET:/users/{username}/received_events - */ - activityListReceivedEventsForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - query: query, - format: "json", - ...params, - }), + public request = async ({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; - /** - * No description - * - * @tags activity - * @name ActivityListReceivedPublicEventsForUser - * @summary List public events received by a user - * @request GET:/users/{username}/received_events/public - */ - activityListReceivedPublicEventsForUser: ( - username: string, - query?: { - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, + body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), + }).then(async (response) => { + const r = response.clone() as HttpResponse; + r.data = null as unknown as T; + r.error = null as unknown as E; - /** - * @description Lists public repositories for the specified user. - * - * @tags repos - * @name ReposListForUser - * @summary List repositories for a user - * @request GET:/users/{username}/repos - */ - reposListForUser: ( - username: string, - query?: { - /** Can be one of `asc` or `desc`. Default: `asc` when using `full_name`, otherwise `desc` */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * Can be one of `created`, `updated`, `pushed`, `full_name`. - * @default "full_name" - */ - sort?: "created" | "updated" | "pushed" | "full_name"; - /** - * Can be one of `all`, `owner`, `member`. - * @default "owner" - */ - type?: "all" | "owner" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} +/** + * @title Link Example + * @version 1.0.0 + */ +export class Api extends HttpClient { + v20 = { /** - * @description Gets the summary of the free and paid GitHub Actions minutes used. Paid minutes only apply to workflows in private repositories that use GitHub-hosted runners. Minutes used is listed for each GitHub-hosted runner operating system. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see "[Managing billing for GitHub Actions](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions)". Access tokens must have the `user` scope. + * No description * - * @tags billing - * @name BillingGetGithubActionsBillingUser - * @summary Get GitHub Actions billing for a user - * @request GET:/users/{username}/settings/billing/actions + * @name GetUserByName + * @request GET:/2.0/users/{username} */ - billingGetGithubActionsBillingUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/settings/billing/actions`, + getUserByName: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/users/\${username}\`, method: "GET", format: "json", ...params, }), /** - * @description Gets the free and paid storage used for GitHub Packages in gigabytes. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the `user` scope. + * No description * - * @tags billing - * @name BillingGetGithubPackagesBillingUser - * @summary Get GitHub Packages billing for a user - * @request GET:/users/{username}/settings/billing/packages + * @name GetRepositoriesByOwner + * @request GET:/2.0/repositories/{username} */ - billingGetGithubPackagesBillingUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/settings/billing/packages`, + getRepositoriesByOwner: (username: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}\`, method: "GET", format: "json", ...params, }), /** - * @description Gets the estimated paid and estimated total storage used for GitHub Actions and Github Packages. Paid minutes only apply to packages stored for private repositories. For more information, see "[Managing billing for GitHub Packages](https://help.github.com/github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-packages)." Access tokens must have the `user` scope. + * No description * - * @tags billing - * @name BillingGetSharedStorageBillingUser - * @summary Get shared storage billing for a user - * @request GET:/users/{username}/settings/billing/shared-storage + * @name GetRepository + * @request GET:/2.0/repositories/{username}/{slug} */ - billingGetSharedStorageBillingUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/settings/billing/shared-storage`, + getRepository: (username: string, slug: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}\`, method: "GET", format: "json", ...params, }), /** - * @description Lists repositories a user has starred. You can also find out _when_ stars were created by passing the following custom [media type](https://docs.github.com/rest/overview/media-types/) via the `Accept` header: + * No description * - * @tags activity - * @name ActivityListReposStarredByUser - * @summary List repositories starred by a user - * @request GET:/users/{username}/starred + * @name GetPullRequestsByRepository + * @request GET:/2.0/repositories/{username}/{slug}/pullrequests */ - activityListReposStarredByUser: ( + getPullRequestsByRepository: ( username: string, + slug: string, query?: { - /** - * One of `asc` (ascending) or `desc` (descending). - * @default "desc" - */ - direction?: "asc" | "desc"; - /** - * Page number of the results to fetch. - * @default 1 - */ - page?: number; - /** - * Results per page (max 100) - * @default 30 - */ - per_page?: number; - /** - * One of `created` (when the repository was starred) or `updated` (when it was last pushed to). - * @default "created" - */ - sort?: "created" | "updated"; + state?: "open" | "merged" | "declined"; }, params: RequestParams = {}, ) => - this.request({ - path: `/users/${username}/starred`, + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests\`, method: "GET", query: query, format: "json", @@ -28434,51 +46101,32 @@ export class Api extends HttpClient - this.request({ - path: `/users/${username}/subscriptions`, + getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}\`, method: "GET", - query: query, format: "json", ...params, }), - }; - zen = { + /** - * @description Get a random sentence from the Zen of GitHub + * No description * - * @tags meta - * @name MetaGetZen - * @summary Get the Zen of GitHub - * @request GET:/zen + * @name MergePullRequest + * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge */ - metaGetZen: (params: RequestParams = {}) => - this.request({ - path: `/zen`, - method: "GET", + mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => + this.request({ + path: \`/2.0/repositories/\${username}/\${slug}/pullrequests/\${pid}/merge\`, + method: "POST", ...params, }), }; } +" +`; diff --git a/tests/allSchemas.js b/tests/allSchemas.js deleted file mode 100644 index b94af4a7..00000000 --- a/tests/allSchemas.js +++ /dev/null @@ -1,46 +0,0 @@ -const { resolve } = require("node:path"); -const dotenv = require("dotenv"); -const createSchemaInfos = require("./helpers/createSchemaInfos"); - -dotenv.config(); - -let allSchemas = [ - ...createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./schemas/v2.0"), - absoluteOutputPath: resolve(__dirname, "./generated/v2.0"), - }), - ...createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./schemas/v3.0"), - absoluteOutputPath: resolve(__dirname, "./generated/v3.0"), - }), -]; - -if (process.env.TEST_FILE_NAME) { - allSchemas = allSchemas.filter( - (schema) => schema.apiFileName === process.env.TEST_FILE_NAME, - ); - console.warn( - "TEST ONLY", - process.env.TEST_FILE_NAME, - "found:", - allSchemas.map((it) => it.apiFileName).join(", ") || "", - ); -} - -if (process.env.TEST_SCHEMA_VERSION) { - allSchemas = allSchemas.filter((schema) => - schema.outputPath.endsWith(process.env.TEST_SCHEMA_VERSION), - ); - console.warn( - "TEST ONLY", - process.env.TEST_SCHEMA_VERSION, - "found:", - allSchemas.map((it) => it.apiFileName).join(", ") || "", - ); -} - -if (!allSchemas.length) { - console.warn("TEST SCHEMES NOT FOUND"); -} - -module.exports = allSchemas; diff --git a/tests/extended.test.ts b/tests/extended.test.ts new file mode 100644 index 00000000..f9d36b8d --- /dev/null +++ b/tests/extended.test.ts @@ -0,0 +1,48 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../src/index.js"; +import { collectAllSchemas } from "./utils.js"; + +describe("extended", async () => { + let tmpdir: string; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + const schemas = await collectAllSchemas(); + + test.each(schemas)("$name", async (schema) => { + // @ts-expect-error + await generateApi({ + name: schema.name, + input: schema.filePath, + output: tmpdir, + silent: true, + extractEnums: true, + extractRequestBody: true, + extractRequestParams: true, + extractResponseBody: true, + extractResponseError: true, + extractResponses: true, + generateClient: true, + generateRouteTypes: true, + sortRoutes: true, + sortTypes: true, + }); + + const content = await fs.readFile(path.join(tmpdir, `${schema.name}.ts`), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/schemas/v2.0/adafruit.yaml b/tests/fixtures/schemas/v2.0/adafruit.yaml similarity index 100% rename from tests/schemas/v2.0/adafruit.yaml rename to tests/fixtures/schemas/v2.0/adafruit.yaml diff --git a/tests/schemas/v2.0/another-example.json b/tests/fixtures/schemas/v2.0/another-example.json similarity index 100% rename from tests/schemas/v2.0/another-example.json rename to tests/fixtures/schemas/v2.0/another-example.json diff --git a/tests/schemas/v2.0/another-schema.json b/tests/fixtures/schemas/v2.0/another-schema.json similarity index 100% rename from tests/schemas/v2.0/another-schema.json rename to tests/fixtures/schemas/v2.0/another-schema.json diff --git a/tests/schemas/v2.0/api-with-examples.yaml b/tests/fixtures/schemas/v2.0/api-with-examples.yaml similarity index 100% rename from tests/schemas/v2.0/api-with-examples.yaml rename to tests/fixtures/schemas/v2.0/api-with-examples.yaml diff --git a/tests/schemas/v2.0/authentiq.json b/tests/fixtures/schemas/v2.0/authentiq.json similarity index 100% rename from tests/schemas/v2.0/authentiq.json rename to tests/fixtures/schemas/v2.0/authentiq.json diff --git a/tests/schemas/v2.0/enums.json b/tests/fixtures/schemas/v2.0/enums.json similarity index 100% rename from tests/schemas/v2.0/enums.json rename to tests/fixtures/schemas/v2.0/enums.json diff --git a/tests/schemas/v2.0/example1.json b/tests/fixtures/schemas/v2.0/example1.json similarity index 100% rename from tests/schemas/v2.0/example1.json rename to tests/fixtures/schemas/v2.0/example1.json diff --git a/tests/schemas/v2.0/file-formdata-example.json b/tests/fixtures/schemas/v2.0/file-formdata-example.json similarity index 100% rename from tests/schemas/v2.0/file-formdata-example.json rename to tests/fixtures/schemas/v2.0/file-formdata-example.json diff --git a/tests/schemas/v2.0/furkot-example.yaml b/tests/fixtures/schemas/v2.0/furkot-example.yaml similarity index 100% rename from tests/schemas/v2.0/furkot-example.yaml rename to tests/fixtures/schemas/v2.0/furkot-example.yaml diff --git a/tests/schemas/v2.0/giphy.yaml b/tests/fixtures/schemas/v2.0/giphy.yaml similarity index 100% rename from tests/schemas/v2.0/giphy.yaml rename to tests/fixtures/schemas/v2.0/giphy.yaml diff --git a/tests/schemas/v2.0/path-args.yaml b/tests/fixtures/schemas/v2.0/path-args.yaml similarity index 100% rename from tests/schemas/v2.0/path-args.yaml rename to tests/fixtures/schemas/v2.0/path-args.yaml diff --git a/tests/schemas/v2.0/petstore-expanded.json b/tests/fixtures/schemas/v2.0/petstore-expanded.json similarity index 100% rename from tests/schemas/v2.0/petstore-expanded.json rename to tests/fixtures/schemas/v2.0/petstore-expanded.json diff --git a/tests/schemas/v2.0/petstore-minimal.json b/tests/fixtures/schemas/v2.0/petstore-minimal.json similarity index 100% rename from tests/schemas/v2.0/petstore-minimal.json rename to tests/fixtures/schemas/v2.0/petstore-minimal.json diff --git a/tests/schemas/v2.0/petstore-simple.yaml b/tests/fixtures/schemas/v2.0/petstore-simple.yaml similarity index 100% rename from tests/schemas/v2.0/petstore-simple.yaml rename to tests/fixtures/schemas/v2.0/petstore-simple.yaml diff --git a/tests/schemas/v2.0/petstore-swagger-io.json b/tests/fixtures/schemas/v2.0/petstore-swagger-io.json similarity index 100% rename from tests/schemas/v2.0/petstore-swagger-io.json rename to tests/fixtures/schemas/v2.0/petstore-swagger-io.json diff --git a/tests/schemas/v2.0/petstore-with-external-docs.yaml b/tests/fixtures/schemas/v2.0/petstore-with-external-docs.yaml similarity index 100% rename from tests/schemas/v2.0/petstore-with-external-docs.yaml rename to tests/fixtures/schemas/v2.0/petstore-with-external-docs.yaml diff --git a/tests/schemas/v2.0/petstore.yaml b/tests/fixtures/schemas/v2.0/petstore.yaml similarity index 100% rename from tests/schemas/v2.0/petstore.yaml rename to tests/fixtures/schemas/v2.0/petstore.yaml diff --git a/tests/schemas/v2.0/query-path-param.yaml b/tests/fixtures/schemas/v2.0/query-path-param.yaml similarity index 100% rename from tests/schemas/v2.0/query-path-param.yaml rename to tests/fixtures/schemas/v2.0/query-path-param.yaml diff --git a/tests/schemas/v2.0/uber.yaml b/tests/fixtures/schemas/v2.0/uber.yaml similarity index 100% rename from tests/schemas/v2.0/uber.yaml rename to tests/fixtures/schemas/v2.0/uber.yaml diff --git a/tests/schemas/v3.0/additional-properties.yaml b/tests/fixtures/schemas/v3.0/additional-properties.yaml similarity index 100% rename from tests/schemas/v3.0/additional-properties.yaml rename to tests/fixtures/schemas/v3.0/additional-properties.yaml diff --git a/tests/schemas/v3.0/additional-properties2.json b/tests/fixtures/schemas/v3.0/additional-properties2.json similarity index 100% rename from tests/schemas/v3.0/additional-properties2.json rename to tests/fixtures/schemas/v3.0/additional-properties2.json diff --git a/tests/schemas/v3.0/allof-example.yaml b/tests/fixtures/schemas/v3.0/allof-example.yaml similarity index 100% rename from tests/schemas/v3.0/allof-example.yaml rename to tests/fixtures/schemas/v3.0/allof-example.yaml diff --git a/tests/schemas/v3.0/anyof-example.yaml b/tests/fixtures/schemas/v3.0/anyof-example.yaml similarity index 100% rename from tests/schemas/v3.0/anyof-example.yaml rename to tests/fixtures/schemas/v3.0/anyof-example.yaml diff --git a/tests/schemas/v3.0/api-with-examples.yaml b/tests/fixtures/schemas/v3.0/api-with-examples.yaml similarity index 100% rename from tests/schemas/v3.0/api-with-examples.yaml rename to tests/fixtures/schemas/v3.0/api-with-examples.yaml diff --git a/tests/schemas/v3.0/callback-example.yaml b/tests/fixtures/schemas/v3.0/callback-example.yaml similarity index 100% rename from tests/schemas/v3.0/callback-example.yaml rename to tests/fixtures/schemas/v3.0/callback-example.yaml diff --git a/tests/schemas/v3.0/components-responses.yaml b/tests/fixtures/schemas/v3.0/components-responses.yaml similarity index 100% rename from tests/schemas/v3.0/components-responses.yaml rename to tests/fixtures/schemas/v3.0/components-responses.yaml diff --git a/tests/schemas/v3.0/explode-param-3.0.1.yaml b/tests/fixtures/schemas/v3.0/explode-param-3.yaml similarity index 100% rename from tests/schemas/v3.0/explode-param-3.0.1.yaml rename to tests/fixtures/schemas/v3.0/explode-param-3.yaml diff --git a/tests/schemas/v3.0/full-swagger-scheme.json b/tests/fixtures/schemas/v3.0/full-swagger-scheme.json similarity index 100% rename from tests/schemas/v3.0/full-swagger-scheme.json rename to tests/fixtures/schemas/v3.0/full-swagger-scheme.json diff --git a/tests/schemas/v3.0/link-example.yaml b/tests/fixtures/schemas/v3.0/link-example.yaml similarity index 100% rename from tests/schemas/v3.0/link-example.yaml rename to tests/fixtures/schemas/v3.0/link-example.yaml diff --git a/tests/schemas/v3.0/no-definitions-schema.yaml b/tests/fixtures/schemas/v3.0/no-definitions-schema.yaml similarity index 100% rename from tests/schemas/v3.0/no-definitions-schema.yaml rename to tests/fixtures/schemas/v3.0/no-definitions-schema.yaml diff --git a/tests/schemas/v3.0/oneof-example.yaml b/tests/fixtures/schemas/v3.0/oneof-example.yaml similarity index 100% rename from tests/schemas/v3.0/oneof-example.yaml rename to tests/fixtures/schemas/v3.0/oneof-example.yaml diff --git a/tests/schemas/v3.0/personal-api-example.json b/tests/fixtures/schemas/v3.0/personal-api-example.json similarity index 100% rename from tests/schemas/v3.0/personal-api-example.json rename to tests/fixtures/schemas/v3.0/personal-api-example.json diff --git a/tests/schemas/v3.0/petstore-expanded.yaml b/tests/fixtures/schemas/v3.0/petstore-expanded.yaml similarity index 100% rename from tests/schemas/v3.0/petstore-expanded.yaml rename to tests/fixtures/schemas/v3.0/petstore-expanded.yaml diff --git a/tests/schemas/v3.0/petstore.yaml b/tests/fixtures/schemas/v3.0/petstore.yaml similarity index 100% rename from tests/schemas/v3.0/petstore.yaml rename to tests/fixtures/schemas/v3.0/petstore.yaml diff --git a/tests/schemas/v3.0/recursive-schema.json b/tests/fixtures/schemas/v3.0/recursive-schema.json similarity index 100% rename from tests/schemas/v3.0/recursive-schema.json rename to tests/fixtures/schemas/v3.0/recursive-schema.json diff --git a/tests/schemas/v3.0/responses.yaml b/tests/fixtures/schemas/v3.0/responses.yaml similarity index 100% rename from tests/schemas/v3.0/responses.yaml rename to tests/fixtures/schemas/v3.0/responses.yaml diff --git a/tests/schemas/v3.0/swaggerhub-template.yaml b/tests/fixtures/schemas/v3.0/swaggerhub-template.yaml similarity index 100% rename from tests/schemas/v3.0/swaggerhub-template.yaml rename to tests/fixtures/schemas/v3.0/swaggerhub-template.yaml diff --git a/tests/schemas/v3.0/tsoa-odd-types-3.0.2.json b/tests/fixtures/schemas/v3.0/tsoa-odd-types-3.json similarity index 100% rename from tests/schemas/v3.0/tsoa-odd-types-3.0.2.json rename to tests/fixtures/schemas/v3.0/tsoa-odd-types-3.json diff --git a/tests/schemas/v3.0/up-banking.json b/tests/fixtures/schemas/v3.0/up-banking.json similarity index 100% rename from tests/schemas/v3.0/up-banking.json rename to tests/fixtures/schemas/v3.0/up-banking.json diff --git a/tests/schemas/v3.0/uspto.yaml b/tests/fixtures/schemas/v3.0/uspto.yaml similarity index 100% rename from tests/schemas/v3.0/uspto.yaml rename to tests/fixtures/schemas/v3.0/uspto.yaml diff --git a/tests/schemas/v3.0/wrong-enum-subtypes.yaml b/tests/fixtures/schemas/v3.0/wrong-enum-subtypes.yaml similarity index 100% rename from tests/schemas/v3.0/wrong-enum-subtypes.yaml rename to tests/fixtures/schemas/v3.0/wrong-enum-subtypes.yaml diff --git a/tests/schemas/v3.0/wrong-schema-names.yaml b/tests/fixtures/schemas/v3.0/wrong-schema-names.yaml similarity index 100% rename from tests/schemas/v3.0/wrong-schema-names.yaml rename to tests/fixtures/schemas/v3.0/wrong-schema-names.yaml diff --git a/tests/generate-extended.js b/tests/generate-extended.js deleted file mode 100644 index 4bb4ef6e..00000000 --- a/tests/generate-extended.js +++ /dev/null @@ -1,87 +0,0 @@ -const _ = require("lodash"); -const { resolve } = require("node:path"); -const dotenv = require("dotenv"); -const allSchemas = require("./allSchemas"); -const { generateApiForTest } = require("./helpers/generateApiForTest"); - -dotenv.config(); - -class GenerateExtendedError extends Error { - constructor(message, outputPath, fileName) { - super(message); - - const stackLines = _.split(this.stack, "\n"); - const realStack = stackLines.slice(1); - const stackLineExtraSpace = - (realStack[0] && realStack[0].split("at")[0]) || ""; - - this.stack = [ - stackLines[0], - `${stackLineExtraSpace}at ${resolve(outputPath, fileName)}`, - ...realStack, - ].join("\n"); - } -} - -allSchemas.forEach(async ({ absolutePath, apiFileName, outputPath }) => { - const name = apiFileName; - const input = absolutePath; - const output = outputPath; - - const typePrefix = "IMySuperPrefix"; - const typeSuffix = "MySuperSuffix"; - - await generateApiForTest({ - name: name, - input: input, - output: output, - generateClient: true, - generateRouteTypes: false, - silent: !process.env.TEST_WITH_DEBUG, - debug: process.env.TEST_WITH_DEBUG, - extractRequestBody: true, - extractResponseBody: true, - extractEnums: true, - extractRequestParams: true, - extractResponseError: true, - extractResponses: true, - typePrefix: typePrefix, - typeSuffix: typeSuffix, - sortTypes: true, - sortRoutes: true, - debugExtras: ["generate-extended", apiFileName], - }).then((result) => { - result.configuration.modelTypes.forEach((modelType) => { - if (modelType.name) { - if (modelType.name.startsWith(`${typePrefix}${typePrefix}`)) { - throw new GenerateExtendedError( - `[${outputPath}][${apiFileName}] modelType has prefix/suffix duplicates - ${modelType.name}`, - output, - name, - ); - } - if (!modelType.name.startsWith(typePrefix)) { - throw new GenerateExtendedError( - `[${outputPath}][${apiFileName}] modelType has not prefix/suffix - ${modelType.name}`, - output, - name, - ); - } - if (modelType.name.endsWith(`${typeSuffix}${typeSuffix}`)) { - throw new GenerateExtendedError( - `[${outputPath}][${apiFileName}] modelType has prefix/suffix duplicates - ${modelType.name}`, - output, - name, - ); - } - if (!modelType.name.endsWith(typeSuffix)) { - throw new GenerateExtendedError( - `[${outputPath}][${apiFileName}] modelType has not prefix/suffix - ${modelType.name}`, - output, - name, - ); - } - } - }); - }); -}); diff --git a/tests/generate.js b/tests/generate.js deleted file mode 100644 index 89309b11..00000000 --- a/tests/generate.js +++ /dev/null @@ -1,20 +0,0 @@ -const allSchemas = require("./allSchemas"); -const dotenv = require("dotenv"); -const { generateApiForTest } = require("./helpers/generateApiForTest"); - -dotenv.config(); - -allSchemas.forEach(({ absolutePath, apiFileName, outputPath }) => { - generateApiForTest({ - testName: "generate script", - name: apiFileName, - input: absolutePath, - output: outputPath, - generateClient: true, - generateRouteTypes: false, - silent: !process.env.TEST_WITH_DEBUG, - debug: process.env.TEST_WITH_DEBUG, - sortTypes: true, - debugExtras: ["generate", apiFileName], - }); -}); diff --git a/tests/generated/v2.0/adafruit.ts b/tests/generated/v2.0/adafruit.ts deleted file mode 100644 index 7be62365..00000000 --- a/tests/generated/v2.0/adafruit.ts +++ /dev/null @@ -1,2310 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Activity { - action?: string; - /** @format dateTime */ - created_at?: string; - data?: object; - id?: number; - model?: string; - /** @format dateTime */ - updated_at?: string; - user_id?: number; -} - -export interface Block { - block_feeds?: BlockFeed[]; - column?: number; - description?: string; - key?: string; - name?: string; - row?: number; - size_x?: number; - size_y?: number; - visual_type?: string; -} - -export interface BlockFeed { - feed?: Feed; - group?: Group; - id?: string; -} - -export interface Dashboard { - blocks?: Block[]; - description?: string; - key?: string; - name?: string; -} - -export interface Data { - completed_at?: string; - created_at?: string; - created_epoch?: number; - ele?: number; - expiration?: string; - feed_id?: number; - group_id?: number; - id?: string; - lat?: number; - lon?: number; - updated_at?: string; - value?: string; -} - -export interface DataResponse { - completed_at?: string; - created_at?: string; - created_epoch?: number; - ele?: number; - expiration?: string; - feed_id?: number; - group_id?: number; - id?: string; - lat?: number; - lon?: number; - updated_at?: string; - value?: string; -} - -export interface Error { - code?: string; - message?: string; -} - -export interface Feed { - created_at?: string; - description?: string; - /** Additional details about this feed. */ - details?: { - data?: { - /** Number of data points stored by this feed. */ - count?: number; - first?: Record; - last?: Record; - }; - /** Access control list for this feed */ - shared_with?: object[]; - }; - enabled?: boolean; - group?: Record; - groups?: ShallowGroup[]; - history?: boolean; - id?: number; - key?: string; - last_value?: string; - license?: string; - name?: string; - status?: string; - /** Is status notification active? */ - status_notify?: boolean; - /** Status notification timeout in minutes. */ - status_timeout?: number; - unit_symbol?: string; - unit_type?: string; - updated_at?: string; - /** @default "private" */ - visibility?: "private" | "public" | "in progress" | "out of access"; -} - -export interface Group { - created_at?: string; - description?: string; - feeds?: Feed[]; - id?: number; - name?: string; - updated_at?: string; -} - -export interface Permission { - created_at?: string; - id?: number; - /** @default "feed" */ - model?: "feed" | "group" | "dashboard"; - object_id?: number; - /** @default "public" */ - scope?: "secret" | "public" | "user" | "organization"; - scope_value?: string; - updated_at?: string; - user_id?: number; -} - -export interface ShallowGroup { - created_at?: string; - description?: string; - id?: number; - name?: string; - updated_at?: string; -} - -export interface Token { - token?: string; -} - -export interface Trigger { - name?: string; -} - -export interface User { - color?: string; - /** @format dateTime */ - created_at?: string; - id?: number; - name?: string; - time_zone?: string; - /** @format dateTime */ - updated_at?: string; - username?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://io.adafruit.com/api/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Adafruit IO - * @version 2.0.0 - * @baseUrl https://io.adafruit.com/api/v2 - * - * ### The Internet of Things for Everyone - * - * The Adafruit IO HTTP API provides access to your Adafruit IO data from any programming language or hardware environment that can speak HTTP. The easiest way to get started is with [an Adafruit IO learn guide](https://learn.adafruit.com/series/adafruit-io-basics) and [a simple Internet of Things capable device like the Feather Huzzah](https://www.adafruit.com/product/2821). - * - * This API documentation is hosted on GitHub Pages and is available at [https://github.com/adafruit/io-api](https://github.com/adafruit/io-api). For questions or comments visit the [Adafruit IO Forums](https://forums.adafruit.com/viewforum.php?f=56) or the [adafruit-io channel on the Adafruit Discord server](https://discord.gg/adafruit). - * - * #### Authentication - * - * Authentication for every API request happens through the `X-AIO-Key` header or query parameter and your IO API key. A simple cURL request to get all available feeds for a user with the username "io_username" and the key "io_key_12345" could look like this: - * - * $ curl -H "X-AIO-Key: io_key_12345" https://io.adafruit.com/api/v2/io_username/feeds - * - * Or like this: - * - * $ curl "https://io.adafruit.com/api/v2/io_username/feeds?X-AIO-Key=io_key_12345 - * - * Using the node.js [request](https://github.com/request/request) library, IO HTTP requests are as easy as: - * - * ```js - * var request = require('request'); - * - * var options = { - * url: 'https://io.adafruit.com/api/v2/io_username/feeds', - * headers: { - * 'X-AIO-Key': 'io_key_12345', - * 'Content-Type': 'application/json' - * } - * }; - * - * function callback(error, response, body) { - * if (!error && response.statusCode == 200) { - * var feeds = JSON.parse(body); - * console.log(feeds.length + " FEEDS AVAILABLE"); - * - * feeds.forEach(function (feed) { - * console.log(feed.name, feed.key); - * }) - * } - * } - * - * request(options, callback); - * ``` - * - * Using the ESP8266 Arduino HTTPClient library, an HTTPS GET request would look like this (replacing `---` with your own values in the appropriate locations): - * - * ```arduino - * /// based on - * /// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/Authorization/Authorization.ino - * - * #include - * #include - * #include - * #include - * - * ESP8266WiFiMulti WiFiMulti; - * - * const char* ssid = "---"; - * const char* password = "---"; - * - * const char* host = "io.adafruit.com"; - * - * const char* io_key = "---"; - * const char* path_with_username = "/api/v2/---/dashboards"; - * - * // Use web browser to view and copy - * // SHA1 fingerprint of the certificate - * const char* fingerprint = "77 00 54 2D DA E7 D8 03 27 31 23 99 EB 27 DB CB A5 4C 57 18"; - * - * void setup() { - * Serial.begin(115200); - * - * for(uint8_t t = 4; t > 0; t--) { - * Serial.printf("[SETUP] WAIT %d...\n", t); - * Serial.flush(); - * delay(1000); - * } - * - * WiFi.mode(WIFI_STA); - * WiFiMulti.addAP(ssid, password); - * - * // wait for WiFi connection - * while(WiFiMulti.run() != WL_CONNECTED) { - * Serial.print('.'); - * delay(1000); - * } - * - * Serial.println("[WIFI] connected!"); - * - * HTTPClient http; - * - * // start request with URL and TLS cert fingerprint for verification - * http.begin("https://" + String(host) + String(path_with_username), fingerprint); - * - * // IO API authentication - * http.addHeader("X-AIO-Key", io_key); - * - * // start connection and send HTTP header - * int httpCode = http.GET(); - * - * // httpCode will be negative on error - * if(httpCode > 0) { - * // HTTP header has been send and Server response header has been handled - * Serial.printf("[HTTP] GET response: %d\n", httpCode); - * - * // HTTP 200 OK - * if(httpCode == HTTP_CODE_OK) { - * String payload = http.getString(); - * Serial.println(payload); - * } - * - * http.end(); - * } - * } - * - * void loop() {} - * ``` - * - * #### Client Libraries - * - * We have client libraries to help you get started with your project: [Python](https://github.com/adafruit/io-client-python), [Ruby](https://github.com/adafruit/io-client-ruby), [Arduino C++](https://github.com/adafruit/Adafruit_IO_Arduino), [Javascript](https://github.com/adafruit/adafruit-io-node), and [Go](https://github.com/adafruit/io-client-go) are available. They're all open source, so if they don't already do what you want, you can fork and add any feature you'd like. - * - */ -export class Api extends HttpClient { - user = { - /** - * No description - * - * @tags Users - * @name CurrentUser - * @summary Get information about the current user - * @request GET:/user - * @secure - */ - currentUser: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; - webhooks = { - /** - * No description - * - * @tags Webhooks, Data - * @name CreateWebhookFeedData - * @summary Send data to a feed via webhook URL. - * @request POST:/webhooks/feed/:token - * @secure - */ - createWebhookFeedData: ( - token: string, - payload: { - value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/webhooks/feed/${token}`, - method: "POST", - body: payload, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The raw data webhook receiver accepts POST requests and stores the raw request body on your feed. This is useful when you don't have control of the webhook sender. If feed history is turned on, payloads will be truncated at 1024 bytes. If feed history is turned off, payloads will be truncated at 100KB. - * - * @tags Webhooks, Data - * @name CreateRawWebhookFeedData - * @summary Send arbitrary data to a feed via webhook URL. - * @request POST:/webhooks/feed/:token/raw - * @secure - */ - createRawWebhookFeedData: (token: string, params: RequestParams = {}) => - this.request({ - path: `/webhooks/feed/${token}/raw`, - method: "POST", - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - username = { - /** - * @description Delete all your activities. - * - * @tags Activities - * @name DestroyActivities - * @summary All activities for current user - * @request DELETE:/{username}/activities - * @secure - */ - destroyActivities: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/activities`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * @description The Activities endpoint returns information about the user's activities. - * - * @tags Activities - * @name AllActivities - * @summary All activities for current user - * @request GET:/{username}/activities - * @secure - */ - allActivities: ( - username: string, - query?: { - /** - * End time for filtering, returns records created before give time. - * @format date-time - */ - end_time?: string; - /** Limit the number of records returned. */ - limit?: number; - /** - * Start time for filtering, returns records created after given time. - * @format date-time - */ - start_time?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/activities`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description The Activities endpoint returns information about the user's activities. - * - * @tags Activities - * @name GetActivity - * @summary Get activities by type for current user - * @request GET:/{username}/activities/{type} - * @secure - */ - getActivity: ( - username: string, - type: string, - query?: { - /** - * End time for filtering, returns records created before give time. - * @format date-time - */ - end_time?: string; - /** Limit the number of records returned. */ - limit?: number; - /** - * Start time for filtering, returns records created after given time. - * @format date-time - */ - start_time?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/activities/${type}`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description The Dashboards endpoint returns information about the user's dashboards. - * - * @tags Dashboards - * @name AllDashboards - * @summary All dashboards for current user - * @request GET:/{username}/dashboards - * @secure - */ - allDashboards: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Dashboards - * @name CreateDashboard - * @summary Create a new Dashboard - * @request POST:/{username}/dashboards - * @secure - */ - createDashboard: (username: string, dashboard: Dashboard, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards`, - method: "POST", - body: dashboard, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Blocks endpoint returns information about the user's blocks. - * - * @tags Blocks - * @name AllBlocks - * @summary All blocks for current user - * @request GET:/{username}/dashboards/{dashboard_id}/blocks - * @secure - */ - allBlocks: (username: string, dashboardId: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Blocks - * @name CreateBlock - * @summary Create a new Block - * @request POST:/{username}/dashboards/{dashboard_id}/blocks - * @secure - */ - createBlock: (username: string, dashboardId: string, block: Block, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks`, - method: "POST", - body: block, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Blocks - * @name DestroyBlock - * @summary Delete an existing Block - * @request DELETE:/{username}/dashboards/{dashboard_id}/blocks/{id} - * @secure - */ - destroyBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Blocks - * @name GetBlock - * @summary Returns Block based on ID - * @request GET:/{username}/dashboards/{dashboard_id}/blocks/{id} - * @secure - */ - getBlock: (username: string, dashboardId: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Blocks - * @name UpdateBlock - * @summary Update properties of an existing Block - * @request PATCH:/{username}/dashboards/{dashboard_id}/blocks/{id} - * @secure - */ - updateBlock: ( - username: string, - dashboardId: string, - id: string, - block: { - block_feeds?: { - feed_id?: string; - group_id?: string; - }[]; - column?: number; - dashboard_id?: number; - description?: string; - key?: string; - name?: string; - properties?: object; - row?: number; - size_x?: number; - size_y?: number; - visual_type?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks/${id}`, - method: "PATCH", - body: block, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Blocks - * @name ReplaceBlock - * @summary Replace an existing Block - * @request PUT:/{username}/dashboards/{dashboard_id}/blocks/{id} - * @secure - */ - replaceBlock: ( - username: string, - dashboardId: string, - id: string, - block: { - block_feeds?: { - feed_id?: string; - group_id?: string; - }[]; - column?: number; - dashboard_id?: number; - description?: string; - key?: string; - name?: string; - properties?: object; - row?: number; - size_x?: number; - size_y?: number; - visual_type?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/dashboards/${dashboardId}/blocks/${id}`, - method: "PUT", - body: block, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Dashboards - * @name DestroyDashboard - * @summary Delete an existing Dashboard - * @request DELETE:/{username}/dashboards/{id} - * @secure - */ - destroyDashboard: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Dashboards - * @name GetDashboard - * @summary Returns Dashboard based on ID - * @request GET:/{username}/dashboards/{id} - * @secure - */ - getDashboard: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/dashboards/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Dashboards - * @name UpdateDashboard - * @summary Update properties of an existing Dashboard - * @request PATCH:/{username}/dashboards/{id} - * @secure - */ - updateDashboard: ( - username: string, - id: string, - dashboard: { - description?: string; - key?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/dashboards/${id}`, - method: "PATCH", - body: dashboard, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Dashboards - * @name ReplaceDashboard - * @summary Replace an existing Dashboard - * @request PUT:/{username}/dashboards/{id} - * @secure - */ - replaceDashboard: ( - username: string, - id: string, - dashboard: { - description?: string; - key?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/dashboards/${id}`, - method: "PUT", - body: dashboard, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed. - * - * @tags Feeds - * @name AllFeeds - * @summary All feeds for current user - * @request GET:/{username}/feeds - * @secure - */ - allFeeds: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Feeds - * @name CreateFeed - * @summary Create a new Feed - * @request POST:/{username}/feeds - * @secure - */ - createFeed: ( - username: string, - feed: Feed, - query?: { - group_key?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds`, - method: "POST", - query: query, - body: feed, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Feeds - * @name DestroyFeed - * @summary Delete an existing Feed - * @request DELETE:/{username}/feeds/{feed_key} - * @secure - */ - destroyFeed: (username: string, feedKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * @description Returns feed based on the feed key - * - * @tags Feeds - * @name GetFeed - * @summary Get feed by feed key - * @request GET:/{username}/feeds/{feed_key} - * @secure - */ - getFeed: (username: string, feedKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Feeds - * @name UpdateFeed - * @summary Update properties of an existing Feed - * @request PATCH:/{username}/feeds/{feed_key} - * @secure - */ - updateFeed: ( - username: string, - feedKey: string, - feed: { - description?: string; - key?: string; - license?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}`, - method: "PATCH", - body: feed, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Feeds - * @name ReplaceFeed - * @summary Replace an existing Feed - * @request PUT:/{username}/feeds/{feed_key} - * @secure - */ - replaceFeed: ( - username: string, - feedKey: string, - feed: { - description?: string; - key?: string; - license?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}`, - method: "PUT", - body: feed, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name AllData - * @summary Get all data for the given feed - * @request GET:/{username}/feeds/{feed_key}/data - * @secure - */ - allData: ( - username: string, - feedKey: string, - query?: { - /** - * End time for filtering, returns records created before give time. - * @format date-time - */ - end_time?: string; - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - /** Limit the number of records returned. */ - limit?: number; - /** - * Start time for filtering, returns records created after given time. - * @format date-time - */ - start_time?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Create new data records on the given feed. **NOTE:** when feed history is on, data `value` size is limited to 1KB, when feed history is turned off data value size is limited to 100KB. - * - * @tags Data - * @name CreateData - * @summary Create new Data - * @request POST:/{username}/feeds/{feed_key}/data - * @secure - */ - createData: ( - username: string, - feedKey: string, - datum: { - /** @format dateTime */ - created_at?: string; - ele?: string; - epoch?: number; - lat?: string; - lon?: string; - value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data`, - method: "POST", - body: datum, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name BatchCreateData - * @summary Create multiple new Data records - * @request POST:/{username}/feeds/{feed_key}/data/batch - * @secure - */ - batchCreateData: (username: string, feedKey: string, data: Data, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/batch`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Chart API is what we use on io.adafruit.com to populate charts over varying timespans with a consistent number of data points. The maximum number of points returned is 480. This API works by aggregating slices of time into a single value by averaging. All time-based parameters are optional, if none are given it will default to 1 hour at the finest-grained resolution possible. - * - * @tags Data - * @name ChartData - * @summary Chart data for current feed - * @request GET:/{username}/feeds/{feed_key}/data/chart - * @secure - */ - chartData: ( - username: string, - feedKey: string, - query?: { - /** - * End time for filtering, returns records created before give time. - * @format date-time - */ - end_time?: string; - /** - * The number of hours the chart should cover. - * @format int32 - */ - hours?: number; - /** - * A resolution size in minutes. By giving a resolution value you will get back grouped data points aggregated over resolution-sized intervals. NOTE: time span is preferred over resolution, so if you request a span of time that includes more than max limit points you may get a larger resolution than you requested. Valid resolutions are 1, 5, 10, 30, 60, and 120. - * @format int32 - */ - resolution?: number; - /** - * Start time for filtering, returns records created after given time. - * @format date-time - */ - start_time?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** The names of the columns returned as data. */ - columns?: string[]; - /** The actual chart data. */ - data?: string[][]; - feed?: { - id?: number; - key?: string; - name?: string; - }; - parameters?: object; - }, - void - >({ - path: `/${username}/feeds/${feedKey}/data/chart`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Get the oldest data point in the feed. This request sets the queue pointer to the beginning of the feed. - * - * @tags Data - * @name FirstData - * @summary First Data in Queue - * @request GET:/{username}/feeds/{feed_key}/data/first - * @secure - */ - firstData: ( - username: string, - feedKey: string, - query?: { - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/first`, - method: "GET", - query: query, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the most recent data point in the feed. This request sets the queue pointer to the end of the feed. - * - * @tags Data - * @name LastData - * @summary Last Data in Queue - * @request GET:/{username}/feeds/{feed_key}/data/last - * @secure - */ - lastData: ( - username: string, - feedKey: string, - query?: { - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/last`, - method: "GET", - query: query, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the next newest data point in the feed. If queue processing hasn't been started, the first data point in the feed will be returned. - * - * @tags Data - * @name NextData - * @summary Next Data in Queue - * @request GET:/{username}/feeds/{feed_key}/data/next - * @secure - */ - nextData: ( - username: string, - feedKey: string, - query?: { - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/next`, - method: "GET", - query: query, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the previously processed data point in the feed. NOTE: this method doesn't move the processing queue pointer. - * - * @tags Data - * @name PreviousData - * @summary Previous Data in Queue - * @request GET:/{username}/feeds/{feed_key}/data/previous - * @secure - */ - previousData: ( - username: string, - feedKey: string, - query?: { - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/previous`, - method: "GET", - query: query, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the most recent data point in the feed in an MQTT compatible CSV format: `value,lat,lon,ele` - * - * @tags Data - * @name RetainData - * @summary Last Data in MQTT CSV format - * @request GET:/{username}/feeds/{feed_key}/data/retain - * @secure - */ - retainData: (username: string, feedKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/retain`, - method: "GET", - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags Data - * @name DestroyData - * @summary Delete existing Data - * @request DELETE:/{username}/feeds/{feed_key}/data/{id} - * @secure - */ - destroyData: (username: string, feedKey: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name GetData - * @summary Returns data based on feed key - * @request GET:/{username}/feeds/{feed_key}/data/{id} - * @secure - */ - getData: ( - username: string, - feedKey: string, - id: string, - query?: { - /** List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`. */ - include?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/${id}`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name UpdateData - * @summary Update properties of existing Data - * @request PATCH:/{username}/feeds/{feed_key}/data/{id} - * @secure - */ - updateData: ( - username: string, - feedKey: string, - id: string, - datum: { - /** @format dateTime */ - created_at?: string; - ele?: string; - epoch?: number; - lat?: string; - lon?: string; - value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/${id}`, - method: "PATCH", - body: datum, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name ReplaceData - * @summary Replace existing Data - * @request PUT:/{username}/feeds/{feed_key}/data/{id} - * @secure - */ - replaceData: ( - username: string, - feedKey: string, - id: string, - datum: { - /** @format dateTime */ - created_at?: string; - ele?: string; - epoch?: number; - lat?: string; - lon?: string; - value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/feeds/${feedKey}/data/${id}`, - method: "PUT", - body: datum, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Returns more detailed feed record based on the feed key - * - * @tags Feeds - * @name GetFeedDetails - * @summary Get detailed feed by feed key - * @request GET:/{username}/feeds/{feed_key}/details - * @secure - */ - getFeedDetails: (username: string, feedKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/feeds/${feedKey}/details`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description The Groups endpoint returns information about the user's groups. The response includes the latest value of each feed in the group, and other metadata about the group. - * - * @tags Groups - * @name AllGroups - * @summary All groups for current user - * @request GET:/{username}/groups - * @secure - */ - allGroups: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/groups`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups - * @name CreateGroup - * @summary Create a new Group - * @request POST:/{username}/groups - * @secure - */ - createGroup: (username: string, group: Group, params: RequestParams = {}) => - this.request({ - path: `/${username}/groups`, - method: "POST", - body: group, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups - * @name DestroyGroup - * @summary Delete an existing Group - * @request DELETE:/{username}/groups/{group_key} - * @secure - */ - destroyGroup: (username: string, groupKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/groups/${groupKey}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups - * @name GetGroup - * @summary Returns Group based on ID - * @request GET:/{username}/groups/{group_key} - * @secure - */ - getGroup: (username: string, groupKey: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/groups/${groupKey}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups - * @name UpdateGroup - * @summary Update properties of an existing Group - * @request PATCH:/{username}/groups/{group_key} - * @secure - */ - updateGroup: ( - username: string, - groupKey: string, - group: { - description?: string; - key?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}`, - method: "PATCH", - body: group, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups - * @name ReplaceGroup - * @summary Replace an existing Group - * @request PUT:/{username}/groups/{group_key} - * @secure - */ - replaceGroup: ( - username: string, - groupKey: string, - group: { - description?: string; - key?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}`, - method: "PUT", - body: group, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups, Feeds - * @name AddFeedToGroup - * @summary Add an existing Feed to a Group - * @request POST:/{username}/groups/{group_key}/add - * @secure - */ - addFeedToGroup: ( - groupKey: string, - username: string, - query?: { - feed_key?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/add`, - method: "POST", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name CreateGroupData - * @summary Create new data for multiple feeds in a group - * @request POST:/{username}/groups/{group_key}/data - * @secure - */ - createGroupData: ( - username: string, - groupKey: string, - group_feed_data: { - /** Optional created_at timestamp which will be applied to all feed values created. */ - created_at?: string; - /** An array of feed data records with `key` and `value` properties. */ - feeds: { - key: string; - value: string; - }[]; - /** A location record with `lat`, `lon`, and [optional] `ele` properties. */ - location?: { - ele?: number; - lat: number; - lon: number; - }; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/data`, - method: "POST", - body: group_feed_data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Group Feeds endpoint returns information about the user's feeds. The response includes the latest value of each feed, and other metadata about each feed, but only for feeds within the given group. - * - * @tags Groups, Feeds - * @name AllGroupFeeds - * @summary All feeds for current user in a given group - * @request GET:/{username}/groups/{group_key}/feeds - * @secure - */ - allGroupFeeds: (groupKey: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/groups/${groupKey}/feeds`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Feeds - * @name CreateGroupFeed - * @summary Create a new Feed in a Group - * @request POST:/{username}/groups/{group_key}/feeds - * @secure - */ - createGroupFeed: ( - username: string, - groupKey: string, - feed: { - description?: string; - key?: string; - license?: string; - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/feeds`, - method: "POST", - body: feed, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name AllGroupFeedData - * @summary All data for current feed in a specific group - * @request GET:/{username}/groups/{group_key}/feeds/{feed_key}/data - * @secure - */ - allGroupFeedData: ( - username: string, - groupKey: string, - feedKey: string, - query?: { - /** - * End time for filtering data. Returns data created before give time. - * @format date-time - */ - end_time?: string; - /** Limit the number of records returned. */ - limit?: number; - /** - * Start time for filtering data. Returns data created after given time. - * @format date-time - */ - start_time?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/feeds/${feedKey}/data`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name CreateGroupFeedData - * @summary Create new Data in a feed belonging to a particular group - * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data - * @secure - */ - createGroupFeedData: ( - username: string, - groupKey: string, - feedKey: string, - datum: { - /** @format dateTime */ - created_at?: string; - ele?: string; - epoch?: number; - lat?: string; - lon?: string; - value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/feeds/${feedKey}/data`, - method: "POST", - body: datum, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Data - * @name BatchCreateGroupFeedData - * @summary Create multiple new Data records in a feed belonging to a particular group - * @request POST:/{username}/groups/{group_key}/feeds/{feed_key}/data/batch - * @secure - */ - batchCreateGroupFeedData: ( - username: string, - groupKey: string, - feedKey: string, - data: { - /** @format dateTime */ - created_at?: string; - ele?: string; - epoch?: number; - lat?: string; - lon?: string; - value?: string; - }[], - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/feeds/${feedKey}/data/batch`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Groups, Feeds - * @name RemoveFeedFromGroup - * @summary Remove a Feed from a Group - * @request POST:/{username}/groups/{group_key}/remove - * @secure - */ - removeFeedFromGroup: ( - groupKey: string, - username: string, - query?: { - feed_key?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/groups/${groupKey}/remove`, - method: "POST", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Users - * @name GetCurrentUserThrottle - * @summary Get the user's data rate limit and current activity level. - * @request GET:/{username}/throttle - * @secure - */ - getCurrentUserThrottle: (username: string, params: RequestParams = {}) => - this.request< - { - /** Actions taken inside the time window. */ - active_data_rate?: number; - /** Max possible actions inside the time window (usually 1 minute). */ - data_rate_limit?: number; - }, - void - >({ - path: `/${username}/throttle`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description The Tokens endpoint returns information about the user's tokens. - * - * @tags Tokens - * @name AllTokens - * @summary All tokens for current user - * @request GET:/{username}/tokens - * @secure - */ - allTokens: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/tokens`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Tokens - * @name CreateToken - * @summary Create a new Token - * @request POST:/{username}/tokens - * @secure - */ - createToken: (username: string, token: Token, params: RequestParams = {}) => - this.request({ - path: `/${username}/tokens`, - method: "POST", - body: token, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Tokens - * @name DestroyToken - * @summary Delete an existing Token - * @request DELETE:/{username}/tokens/{id} - * @secure - */ - destroyToken: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/tokens/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Tokens - * @name GetToken - * @summary Returns Token based on ID - * @request GET:/{username}/tokens/{id} - * @secure - */ - getToken: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/tokens/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Tokens - * @name UpdateToken - * @summary Update properties of an existing Token - * @request PATCH:/{username}/tokens/{id} - * @secure - */ - updateToken: ( - username: string, - id: string, - token: { - token?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/tokens/${id}`, - method: "PATCH", - body: token, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Tokens - * @name ReplaceToken - * @summary Replace an existing Token - * @request PUT:/{username}/tokens/{id} - * @secure - */ - replaceToken: ( - username: string, - id: string, - token: { - token?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/tokens/${id}`, - method: "PUT", - body: token, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Triggers endpoint returns information about the user's triggers. - * - * @tags Triggers - * @name AllTriggers - * @summary All triggers for current user - * @request GET:/{username}/triggers - * @secure - */ - allTriggers: (username: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/triggers`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Triggers - * @name CreateTrigger - * @summary Create a new Trigger - * @request POST:/{username}/triggers - * @secure - */ - createTrigger: (username: string, trigger: Trigger, params: RequestParams = {}) => - this.request({ - path: `/${username}/triggers`, - method: "POST", - body: trigger, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Triggers - * @name DestroyTrigger - * @summary Delete an existing Trigger - * @request DELETE:/{username}/triggers/{id} - * @secure - */ - destroyTrigger: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/triggers/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Triggers - * @name GetTrigger - * @summary Returns Trigger based on ID - * @request GET:/{username}/triggers/{id} - * @secure - */ - getTrigger: (username: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/triggers/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Triggers - * @name UpdateTrigger - * @summary Update properties of an existing Trigger - * @request PATCH:/{username}/triggers/{id} - * @secure - */ - updateTrigger: ( - username: string, - id: string, - trigger: { - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/triggers/${id}`, - method: "PATCH", - body: trigger, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Triggers - * @name ReplaceTrigger - * @summary Replace an existing Trigger - * @request PUT:/{username}/triggers/{id} - * @secure - */ - replaceTrigger: ( - username: string, - id: string, - trigger: { - name?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/triggers/${id}`, - method: "PUT", - body: trigger, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description The Permissions endpoint returns information about the user's permissions. - * - * @tags Permissions - * @name AllPermissions - * @summary All permissions for current user and type - * @request GET:/{username}/{type}/{type_id}/acl - * @secure - */ - allPermissions: (username: string, type: string, typeId: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/${type}/${typeId}/acl`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Permissions - * @name CreatePermission - * @summary Create a new Permission - * @request POST:/{username}/{type}/{type_id}/acl - * @secure - */ - createPermission: ( - username: string, - type: string, - typeId: string, - permission: Permission, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/${type}/${typeId}/acl`, - method: "POST", - body: permission, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Permissions - * @name DestroyPermission - * @summary Delete an existing Permission - * @request DELETE:/{username}/{type}/{type_id}/acl/{id} - * @secure - */ - destroyPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/${type}/${typeId}/acl/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Permissions - * @name GetPermission - * @summary Returns Permission based on ID - * @request GET:/{username}/{type}/{type_id}/acl/{id} - * @secure - */ - getPermission: (username: string, type: string, typeId: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/${username}/${type}/${typeId}/acl/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Permissions - * @name UpdatePermission - * @summary Update properties of an existing Permission - * @request PATCH:/{username}/{type}/{type_id}/acl/{id} - * @secure - */ - updatePermission: ( - username: string, - type: string, - typeId: string, - id: string, - permission: { - /** @default "r" */ - mode?: "r" | "w" | "rw"; - /** @default "public" */ - scope?: "secret" | "public" | "user" | "organization"; - scope_value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/${type}/${typeId}/acl/${id}`, - method: "PATCH", - body: permission, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Permissions - * @name ReplacePermission - * @summary Replace an existing Permission - * @request PUT:/{username}/{type}/{type_id}/acl/{id} - * @secure - */ - replacePermission: ( - username: string, - type: string, - typeId: string, - id: string, - permission: { - /** @default "r" */ - mode?: "r" | "w" | "rw"; - /** @default "public" */ - scope?: "secret" | "public" | "user" | "organization"; - scope_value?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${username}/${type}/${typeId}/acl/${id}`, - method: "PUT", - body: permission, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/another-example.ts b/tests/generated/v2.0/another-example.ts deleted file mode 100644 index e87e75d6..00000000 --- a/tests/generated/v2.0/another-example.ts +++ /dev/null @@ -1,831 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** some description */ -export interface Amount { - /** some description */ - currency: Currency; - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; -} - -/** - * An uploaded response - * Describes the result of uploading an image resource - * @example {"code":0,"type":"type","message":"message"} - */ -export interface ApiResponse { - /** @format int32 */ - code?: number; - message?: string; - type?: string; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface Category { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type Currency = string; - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface Order { - /** @default false */ - complete?: boolean; - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered" | null; -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface Pet { - /** A category for a pet */ - category?: Category; - /** @format int64 */ - id?: number; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; - tags?: Tag[]; -} - -export enum PetIds { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetIdsWithWrongEnum { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetNames { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", - UPPER_CASE = "UPPER_CASE", -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface Tag { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface User { - email?: string; - firstName?: string; - /** @format int64 */ - id?: number; - lastName?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; - username?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:/pet - * @secure - */ - addPet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:/pet - * @secure - */ - updatePet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name SingleFormUrlEncodedRequest - * @summary summary - * @request POST:/pet/single-form-url-encoded - */ - singleFormUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/single-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest - * @summary summary - * @request POST:/pet/form-url-encoded - */ - formUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest2 - * @summary summary - * @request POST:/pet/end-form-url-encoded - * @originalName formUrlEncodedRequest - * @duplicate - */ - formUrlEncodedRequest2: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/end-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:/store/order - */ - placeOrder: (body: Order, params: RequestParams = {}) => - this.request({ - path: `/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:/user - */ - createUser: (body: User, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithArray - */ - createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithList - */ - createUsersWithListInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:/user/login - */ - loginUser: ( - query: { - /** The password for login in clear text */ - password: string; - /** The user name for login */ - username: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:/user/{username} - */ - updateUser: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/another-schema.ts b/tests/generated/v2.0/another-schema.ts deleted file mode 100644 index 9520976d..00000000 --- a/tests/generated/v2.0/another-schema.ts +++ /dev/null @@ -1,301 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Bar { - A?: string; - /** @format int32 */ - B: number; - Baz?: Baz; - /** @format date-time */ - C: string; -} - -export interface Baz { - Color: Color; - /** @format decimal */ - D: number; -} - -export enum Color { - RED = 0, - GREEN = 1, - BLUE = 2, -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - */ -export class Api extends HttpClient { - api = { - /** - * No description - * - * @tags Foo - * @name FooGetBarDescriptions - * @request GET:/api/Foo/GetBarDescriptions - */ - fooGetBarDescriptions: (params: RequestParams = {}) => - this.request({ - path: `/api/Foo/GetBarDescriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Foo - * @name FooGetBar - * @request GET:/api/Foo/GetBar - */ - fooGetBar: ( - query: { - /** @format int32 */ - id: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/api/Foo/GetBar`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Foo - * @name FooSetBar - * @request POST:/api/Foo/SetBar - */ - fooSetBar: (value: Bar | null, params: RequestParams = {}) => - this.request({ - path: `/api/Foo/SetBar`, - method: "POST", - body: value, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/api-with-examples.ts b/tests/generated/v2.0/api-with-examples.ts deleted file mode 100644 index 0a830375..00000000 --- a/tests/generated/v2.0/api-with-examples.ts +++ /dev/null @@ -1,292 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Simple API overview - * @version v2 - */ -export class Api extends HttpClient { - /** - * @description multiple line 1 multiple line 2 multiple line 3 - * - * @name ListVersionsv2 - * @summary List API versions - * @request GET:/ - */ - listVersionsv2 = (params: RequestParams = {}) => - this.request({ - path: `/`, - method: "GET", - format: "json", - ...params, - }); - - v2 = { - /** - * No description - * - * @name GetVersionDetailsv2 - * @summary Show API version details - * @request GET:/v2 - */ - getVersionDetailsv2: (params: RequestParams = {}) => - this.request({ - path: `/v2`, - method: "GET", - format: "json", - ...params, - }), - }; - withCharset = { - /** - * @description consumes contains charset - * - * @name WithCharset - * @summary consumes contains charset - * @request POST:/with-charset/ - */ - withCharset: (someParm: string, params: RequestParams = {}) => - this.request({ - path: `/with-charset/`, - method: "POST", - body: someParm, - type: ContentType.Json, - ...params, - }), - }; - consumesPlainText = { - /** - * @description consumes plain text - * - * @name ConsumesPlainText - * @summary consumes plain text - * @request POST:/consumes-plain-text/ - */ - consumesPlainText: (someParm: string, params: RequestParams = {}) => - this.request({ - path: `/consumes-plain-text/`, - method: "POST", - body: someParm, - type: ContentType.Text, - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/authentiq.ts b/tests/generated/v2.0/authentiq.ts deleted file mode 100644 index 4b760c36..00000000 --- a/tests/generated/v2.0/authentiq.ts +++ /dev/null @@ -1,643 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf: number; - /** UUID and public signing key */ - sub: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class Api extends HttpClient { - wrongPathParams1 = { - /** - * @description DDD - * - * @tags key, delete - * @name WrongPathParams1 - * @request DELETE:/wrong-path-params1/{pathParam1}/{path_param2}/{path_param3}/:pathParam4 - */ - wrongPathParams1: ( - pathParam1: string, - pathParam2: string, - pathParam3: string, - pathParam4: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/wrong-path-params1/${pathParam1}/${pathParam2}/${pathParam3}/${pathParam4}`, - method: "DELETE", - ...params, - }), - }; - wrongPathParams2 = { - /** - * @description DDD - * - * @tags key, delete - * @name WrongPathParams2 - * @request DELETE:/wrong-path-params2 - */ - wrongPathParams2: (pathParam1: string, params: RequestParams = {}) => - this.request({ - path: `/wrong-path-params2`, - method: "DELETE", - ...params, - }), - }; - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** verification code sent by email */ - code?: string; - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params: RequestParams = {}, - ) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/enums.ts b/tests/generated/v2.0/enums.ts deleted file mode 100644 index 0a1b16d2..00000000 --- a/tests/generated/v2.0/enums.ts +++ /dev/null @@ -1,285 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** @format int32 */ -export enum EmptyEnum { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -/** @format int32 */ -export enum EnumWithMoreNames { - Bla = 1, - Blabla = "Blabla", - Boiler = "Boiler", -} - -export enum OnlyEnumNames { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -/** @format int32 */ -export enum SomeInterestEnum { - Bla = 6, - Blabla = 2, - Boiler = 1, - Bbabab = 67, - Nowadays = 88, - FAIL = 122, - Vvvvv = 88, - ASdasAS = 0, - ASDsacZX = 213, - Zook = 12378, - EnumMm = 123125, - VCsa = 32452, - Yuuu = 1111, - ASddd = 66666, - ASdsdsa = "ASdsdsa", - ASDds = "ASDds", - HSDFDS = "HSDFDS", -} - -export enum StringCompleteEnums { - Bla = "foo", - Blabla = "bar", - Boiler = "baz", -} - -export enum StringEnums { - Bla = "foo", - Blabla = "bar", - Boiler = "Boiler", -} - -export enum StringOnlyEnumNames { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://ffff.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl https://ffff.com - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v2.0/example1.ts b/tests/generated/v2.0/example1.ts deleted file mode 100644 index bae0a69c..00000000 --- a/tests/generated/v2.0/example1.ts +++ /dev/null @@ -1,295 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type Currency = string; - -/** A TDE certificate that can be uploaded into a server. */ -export type TdeCertificate = { - /** Resource ID. */ - id?: string; - /** Resource name. */ - name?: string; - /** Resource type. */ - type?: string; -} & { - /** Resource properties. */ - properties?: TdeCertificateProperties; -}; - -/** A TDE certificate that can be uploaded into a server. */ -export type TdeCertificate2 = { - /** Resource ID. */ - id?: string; - /** Resource name. */ - name?: string; - /** Resource type. */ - type?: string; -}; - -/** Properties of a TDE certificate. */ -export interface TdeCertificateProperties { - /** The certificate password. */ - certPassword?: string; - /** The base64 encoded certificate private blob. */ - privateBlob: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://management.azure.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title SqlManagementClient - * @version 2017-10-01-preview - * @baseUrl https://management.azure.com - * - * The Azure SQL Database management API provides a RESTful set of web APIs that interact with Azure SQL Database services to manage your databases. The API enables users to create, retrieve, update, and delete databases, servers, and other entities. - */ -export class Api extends HttpClient { - subscriptions = { - /** - * @description Creates a TDE certificate for a given server. - * - * @tags ManagedInstanceTdeCertificates - * @name ManagedInstanceTdeCertificatesCreate - * @request POST:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/tdeCertificates - */ - managedInstanceTdeCertificatesCreate: ( - resourceGroupName: string, - managedInstanceName: string, - subscriptionId: string, - query: { - /** The API version to use for the request. */ - "api-version": string; - }, - parameters: TdeCertificate, - params: RequestParams = {}, - ) => - this.request({ - path: `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Sql/managedInstances/${managedInstanceName}/tdeCertificates`, - method: "POST", - query: query, - body: parameters, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/file-formdata-example.ts b/tests/generated/v2.0/file-formdata-example.ts deleted file mode 100644 index 8c14477a..00000000 --- a/tests/generated/v2.0/file-formdata-example.ts +++ /dev/null @@ -1,256 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Title - * @version v0.1 - */ -export class Api extends HttpClient { - uploadFile = { - /** - * No description - * - * @tags tag - * @name UploadFile - * @summary Upload file - * @request POST:/upload-file - */ - uploadFile: ( - data: { - /** - * File description - * @format binary - */ - file?: File; - /** Boolean flag */ - someFlag?: boolean; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/upload-file`, - method: "POST", - body: data, - type: ContentType.FormData, - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/furkot-example.ts b/tests/generated/v2.0/furkot-example.ts deleted file mode 100644 index 9e6b9f0a..00000000 --- a/tests/generated/v2.0/furkot-example.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Step { - /** address of the stop */ - address?: string; - /** - * arrival at the stop in its local timezone as YYYY-MM-DDThh:mm - * @format date-time - */ - arrival?: string; - /** geographical coordinates of the stop */ - coordinates?: { - /** - * latitude - * @format float - */ - lat?: number; - /** - * longitude - * @format float - */ - lon?: number; - }; - /** - * departure from the stop in its local timezone as YYYY-MM-DDThh:mm - * @format date-time - */ - departure?: string; - /** name of the stop */ - name?: string; - /** - * number of nights - * @format int64 - */ - nights?: number; - /** route leading to the stop */ - route?: { - /** - * route distance in meters - * @format int64 - */ - distance?: number; - /** - * route duration in seconds - * @format int64 - */ - duration?: number; - /** travel mode */ - mode?: "car" | "motorcycle" | "bicycle" | "walk" | "other"; - /** route path compatible with Google polyline encoding algorithm */ - polyline?: string; - }; - /** url of the page with more information about the stop */ - url?: string; -} - -export interface Trip { - /** - * begin of the trip in its local timezone as YYYY-MM-DDThh:mm - * @format date-time - */ - begin?: string; - /** description of the trip (truncated to 200 characters) */ - description?: string; - /** - * end of the trip in its local timezone as YYYY-MM-DDThh:mm - * @format date-time - */ - end?: string; - /** Unique ID of the trip */ - id?: string; - /** name of the trip */ - name?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://trips.furkot.com/pub/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Furkot Trips - * @version 1.0.0 - * @baseUrl https://trips.furkot.com/pub/api - * @externalDocs https://help.furkot.com/widgets/furkot-api.html - * @contact - * - * Furkot provides Rest API to access user trip data. - * Using Furkot API an application can list user trips and display stops for a specific trip. - * Furkot API uses OAuth2 protocol to authorize applications to access data on behalf of users. - */ -export class Api extends HttpClient { - trip = { - /** - * @description list user's trips - * - * @name TripList - * @request GET:/trip - * @secure - */ - tripList: (params: RequestParams = {}) => - this.request({ - path: `/trip`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description list stops for a trip identified by {trip_id} - * - * @name StopDetail - * @request GET:/trip/{trip_id}/stop - * @secure - */ - stopDetail: (tripId: string, params: RequestParams = {}) => - this.request({ - path: `/trip/${tripId}/stop`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/giphy.ts b/tests/generated/v2.0/giphy.ts deleted file mode 100644 index e3be8b63..00000000 --- a/tests/generated/v2.0/giphy.ts +++ /dev/null @@ -1,875 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Gif { - /** - * The unique bit.ly URL for this GIF - * @example "http://gph.is/1gsWDcL" - */ - bitly_url?: string; - /** Currently unused */ - content_url?: string; - /** - * The date this GIF was added to the GIPHY database. - * @format date-time - * @example "2013-08-01 12:41:48" - */ - create_datetime?: string; - /** - * A URL used for embedding this GIF - * @example "http://giphy.com/embed/YsTs5ltWtEhnq" - */ - embded_url?: string; - /** An array of featured tags for this GIF (Note: Not available when using the Public Beta Key) */ - featured_tags?: string[]; - /** - * This GIF's unique ID - * @example "YsTs5ltWtEhnq" - */ - id?: string; - /** An object containing data for various available formats and sizes of this GIF. */ - images?: { - /** Data surrounding a version of this GIF downsized to be under 2mb. */ - downsized?: Image; - /** Data surrounding a version of this GIF downsized to be under 8mb. */ - downsized_large?: Image; - /** Data surrounding a version of this GIF downsized to be under 5mb. */ - downsized_medium?: Image; - /** Data surrounding a version of this GIF downsized to be under 200kb. */ - downsized_small?: Image; - /** Data surrounding a static preview image of the downsized version of this GIF. */ - downsized_still?: Image; - /** Data surrounding versions of this GIF with a fixed height of 200 pixels. Good for mobile use. */ - fixed_height?: Image; - /** Data surrounding versions of this GIF with a fixed height of 200 pixels and the number of frames reduced to 6. */ - fixed_height_downsampled?: Image; - /** Data surrounding versions of this GIF with a fixed height of 100 pixels. Good for mobile keyboards. */ - fixed_height_small?: Image; - /** Data surrounding a static image of this GIF with a fixed height of 100 pixels. */ - fixed_height_small_still?: Image; - /** Data surrounding a static image of this GIF with a fixed height of 200 pixels. */ - fixed_height_still?: Image; - /** Data surrounding versions of this GIF with a fixed width of 200 pixels. Good for mobile use. */ - fixed_width?: Image; - /** Data surrounding versions of this GIF with a fixed width of 200 pixels and the number of frames reduced to 6. */ - fixed_width_downsampled?: Image; - /** Data surrounding versions of this GIF with a fixed width of 100 pixels. Good for mobile keyboards. */ - fixed_width_small?: Image; - /** Data surrounding a static image of this GIF with a fixed width of 100 pixels. */ - fixed_width_small_still?: Image; - /** Data surrounding a static image of this GIF with a fixed width of 200 pixels. */ - fixed_width_still?: Image; - /** Data surrounding a version of this GIF set to loop for 15 seconds. */ - looping?: Image; - /** Data surrounding the original version of this GIF. Good for desktop use. */ - original?: Image; - /** Data surrounding a static preview image of the original GIF. */ - original_still?: Image; - /** Data surrounding a version of this GIF in .MP4 format limited to 50kb that displays the first 1-2 seconds of the GIF. */ - preview?: Image; - /** Data surrounding a version of this GIF limited to 50kb that displays the first 1-2 seconds of the GIF. */ - preview_gif?: Image; - }; - /** - * The creation or upload date from this GIF's source. - * @format date-time - * @example "2013-08-01 12:41:48" - */ - import_datetime?: string; - /** - * The MPAA-style rating for this content. Examples include Y, G, PG, PG-13 and R - * @example "g" - */ - rating?: string; - /** - * The unique slug used in this GIF's URL - * @example "confused-flying-YsTs5ltWtEhnq" - */ - slug?: string; - /** - * The page on which this GIF was found - * @example "http://www.reddit.com/r/reactiongifs/comments/1xpyaa/superman_goes_to_hollywood/" - */ - source?: string; - /** - * The URL of the webpage on which this GIF was found. - * @example "http://cheezburger.com/5282328320" - */ - source_post_url?: string; - /** - * The top level domain of the source URL. - * @example "cheezburger.com" - */ - source_tld?: string; - /** An array of tags for this GIF (Note: Not available when using the Public Beta Key) */ - tags?: string[]; - /** - * The date on which this gif was marked trending, if applicable. - * @format date-time - * @example "2013-08-01 12:41:48" - */ - trending_datetime?: string; - /** - * Type of the gif. By default, this is almost always gif - * @default "gif" - */ - type?: "gif"; - /** - * The date on which this GIF was last updated. - * @format date-time - * @example "2013-08-01 12:41:48" - */ - update_datetime?: string; - /** - * The unique URL for this GIF - * @example "http://giphy.com/gifs/confused-flying-YsTs5ltWtEhnq" - */ - url?: string; - /** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ - user?: User; - /** - * The username this GIF is attached to, if applicable - * @example "JoeCool4000" - */ - username?: string; -} - -export interface Image { - /** - * The URL for this GIF in .MP4 format. - * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.mp4" - */ - mp4?: string; - /** - * The size in bytes of the .MP4 file corresponding to this GIF. - * @example "25123" - */ - mp4_size?: string; - /** - * The number of frames in this GIF. - * @example "15" - */ - frames?: string; - /** - * The height of this GIF in pixels. - * @example "200" - */ - height?: string; - /** - * The size of this GIF in bytes. - * @example "32381" - */ - size?: string; - /** - * The publicly-accessible direct URL for this GIF. - * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/200.gif" - */ - url?: string; - /** - * The URL for this GIF in .webp format. - * @example "https://media1.giphy.com/media/cZ7rmKfFYOvYI/giphy.webp" - */ - webp?: string; - /** - * The size in bytes of the .webp file corresponding to this GIF. - * @example "12321" - */ - webp_size?: string; - /** - * The width of this GIF in pixels. - * @example "320" - */ - width?: string; -} - -/** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ -export interface Meta { - /** - * HTTP Response Message - * @example "OK" - */ - msg?: string; - /** - * A unique ID paired with this response from the API. - * @example "57eea03c72381f86e05c35d2" - */ - response_id?: string; - /** - * HTTP Response Code - * @format int32 - * @example 200 - */ - status?: number; -} - -/** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ -export interface Pagination { - /** - * Total number of items returned. - * @format int32 - * @example 25 - */ - count?: number; - /** - * Position in pagination. - * @format int32 - * @example 75 - */ - offset?: number; - /** - * Total number of items available. - * @format int32 - * @example 250 - */ - total_count?: number; -} - -/** The User Object contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, profile, and more. */ -export interface User { - /** - * The URL for this user's avatar image. - * @example "https://media1.giphy.com/avatars/election2016/XwYrZi5H87o6.gif" - */ - avatar_url?: string; - /** - * The URL for the banner image that appears atop this user's profile page. - * @example "https://media4.giphy.com/avatars/cheezburger/XkuejOhoGLE6.jpg" - */ - banner_url?: string; - /** - * The display name associated with this user (contains formatting the base username might not). - * @example "JoeCool4000" - */ - display_name?: string; - /** - * The URL for this user's profile. - * @example "https://giphy.com/cheezburger/" - */ - profile_url?: string; - /** - * The Twitter username associated with this user, if applicable. - * @example "@joecool4000" - */ - twitter?: string; - /** - * The username associated with this user. - * @example "joecool4000" - */ - username?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.giphy.com/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Giphy - * @version 1.0 - * @termsOfService https://developers.giphy.com/ - * @baseUrl https://api.giphy.com/v1 - * @externalDocs https://developers.giphy.com/docs/ - * @contact - * - * Giphy API - */ -export class Api extends HttpClient { - gifs = { - /** - * @description A multiget version of the get GIF by ID endpoint. - * - * @tags gifs - * @name GetGifsById - * @summary Get GIFs by ID - * @request GET:/gifs - * @secure - */ - getGifsById: ( - query?: { - /** Filters results by specified GIF IDs, separated by commas. */ - ids?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif[]; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ - pagination?: Pagination; - }, - any - >({ - path: `/gifs`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. - * - * @tags gifs - * @name RandomGif - * @summary Random GIF - * @request GET:/gifs/random - * @secure - */ - randomGif: ( - query?: { - /** Filters results by specified rating. */ - rating?: string; - /** Filters results by specified tag. */ - tag?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - }, - any - >({ - path: `/gifs/random`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Search all GIPHY GIFs for a word or phrase. Punctuation will be stripped and ignored. Use a plus or url encode for phrases. Example paul+rudd, ryan+gosling or american+psycho. - * - * @tags gifs - * @name SearchGifs - * @summary Search GIFs - * @request GET:/gifs/search - * @secure - */ - searchGifs: ( - query: { - /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ - lang?: string; - /** - * The maximum number of records to return. - * @format int32 - * @default 25 - */ - limit?: number; - /** - * An optional results offset. - * @format int32 - * @default 0 - */ - offset?: number; - /** Search query term or prhase. */ - q: string; - /** Filters results by specified rating. */ - rating?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif[]; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ - pagination?: Pagination; - }, - any - >({ - path: `/gifs/search`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description The translate API draws on search, but uses the GIPHY `special sauce` to handle translating from one vocabulary to another. In this case, words and phrases to GIF - * - * @tags gifs - * @name TranslateGif - * @summary Translate phrase to GIF - * @request GET:/gifs/translate - * @secure - */ - translateGif: ( - query: { - /** Search term. */ - s: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - }, - any - >({ - path: `/gifs/translate`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Fetch GIFs currently trending online. Hand curated by the GIPHY editorial team. The data returned mirrors the GIFs showcased on the GIPHY homepage. Returns 25 results by default. - * - * @tags gifs - * @name TrendingGifs - * @summary Trending GIFs - * @request GET:/gifs/trending - * @secure - */ - trendingGifs: ( - query?: { - /** - * The maximum number of records to return. - * @format int32 - * @default 25 - */ - limit?: number; - /** - * An optional results offset. - * @format int32 - * @default 0 - */ - offset?: number; - /** Filters results by specified rating. */ - rating?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif[]; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ - pagination?: Pagination; - }, - any - >({ - path: `/gifs/trending`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a GIF given that GIF's unique ID - * - * @tags gifs - * @name GetGifById - * @summary Get GIF by Id - * @request GET:/gifs/{gifId} - * @secure - */ - getGifById: (gifId: number, params: RequestParams = {}) => - this.request< - { - data?: Gif; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - }, - any - >({ - path: `/gifs/${gifId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; - stickers = { - /** - * @description Returns a random GIF, limited by tag. Excluding the tag parameter will return a random GIF from the GIPHY catalog. - * - * @tags stickers - * @name RandomSticker - * @summary Random Sticker - * @request GET:/stickers/random - * @secure - */ - randomSticker: ( - query?: { - /** Filters results by specified rating. */ - rating?: string; - /** Filters results by specified tag. */ - tag?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - }, - any - >({ - path: `/stickers/random`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Replicates the functionality and requirements of the classic GIPHY search, but returns animated stickers rather than GIFs. - * - * @tags stickers - * @name SearchStickers - * @summary Search Stickers - * @request GET:/stickers/search - * @secure - */ - searchStickers: ( - query: { - /** Specify default language for regional content; use a 2-letter ISO 639-1 language code. */ - lang?: string; - /** - * The maximum number of records to return. - * @format int32 - * @default 25 - */ - limit?: number; - /** - * An optional results offset. - * @format int32 - * @default 0 - */ - offset?: number; - /** Search query term or prhase. */ - q: string; - /** Filters results by specified rating. */ - rating?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif[]; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ - pagination?: Pagination; - }, - any - >({ - path: `/stickers/search`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description The translate API draws on search, but uses the GIPHY `special sauce` to handle translating from one vocabulary to another. In this case, words and phrases to GIFs. - * - * @tags stickers - * @name TranslateSticker - * @summary Translate phrase to Sticker - * @request GET:/stickers/translate - * @secure - */ - translateSticker: ( - query: { - /** Search term. */ - s: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - }, - any - >({ - path: `/stickers/translate`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Fetch Stickers currently trending online. Hand curated by the GIPHY editorial team. Returns 25 results by default. - * - * @tags stickers - * @name TrendingStickers - * @summary Trending Stickers - * @request GET:/stickers/trending - * @secure - */ - trendingStickers: ( - query?: { - /** - * The maximum number of records to return. - * @format int32 - * @default 25 - */ - limit?: number; - /** - * An optional results offset. - * @format int32 - * @default 0 - */ - offset?: number; - /** Filters results by specified rating. */ - rating?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - data?: Gif[]; - /** The Meta Object contains basic information regarding the request, whether it was successful, and the response given by the API. Check `responses` to see a description of types of response codes the API might give you under different cirumstances. */ - meta?: Meta; - /** The Pagination Object contains information relating to the number of total results available as well as the number of results fetched and their relative positions. */ - pagination?: Pagination; - }, - any - >({ - path: `/stickers/trending`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/github-swagger.ts b/tests/generated/v2.0/github-swagger.ts deleted file mode 100644 index d66f30d4..00000000 --- a/tests/generated/v2.0/github-swagger.ts +++ /dev/null @@ -1,6284 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** A GitHub organization */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** A GitHub user */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export class Api extends HttpClient { - someop = { - /** - * No description - * - * @tags someop - * @name SomeOp1 - * @request POST:/someop - */ - someOp1: ( - data: Events, - query?: { - /** - * description - * @default 0 - */ - queryParam1?: number; - /** - * description - * @default 20 - */ - queryParam2?: number; - /** description */ - queryParam3?: string[]; - /** - * description - * @default 0 - */ - queryParamBar3?: number; - /** - * description - * @default 0 - */ - fooBarBaz?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags someop - * @name SomeOp - * @request POST:/someop/{fooId}/bars/bar-bar - */ - someOp: ( - fooId: string, - data: Events, - query?: { - /** @default 0 */ - page?: number; - /** @default 20 */ - size?: number; - sort?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop/${fooId}/bars/bar-bar`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - }; - emojis = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params: RequestParams = {}) => - this.request({ - path: `/emojis`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "open" */ - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** Filter results by language */ - language?: string; - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - /** The page number to fetch */ - start_page?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - /** The page number to fetch */ - start_page?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "open" */ - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "open" */ - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "open" */ - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/path-args.ts b/tests/generated/v2.0/path-args.ts deleted file mode 100644 index e8c521c6..00000000 --- a/tests/generated/v2.0/path-args.ts +++ /dev/null @@ -1,259 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://unknown.io/v666"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Path Args - * @version 1.0.0 - * @license MIT - * @baseUrl http://unknown.io/v666 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @tags pets - * @name ListPets - * @summary List all pets - * @request GET:/pets/{param1}/{param2}/{param3} - */ - listPets: ( - param3: number, - param1?: number, - param2?: number, - query?: { - /** - * How many items to return at one time (max 100) - * @format int32 - */ - queryParam?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets/${param1}/${param2}/${param3}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore-expanded.ts b/tests/generated/v2.0/petstore-expanded.ts deleted file mode 100644 index f903f774..00000000 --- a/tests/generated/v2.0/petstore-expanded.ts +++ /dev/null @@ -1,353 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Error { - /** @format int32 */ - code: number; - message: string; -} - -export interface NewPet { - name: string; - tag?: string; -} - -/** Page«TemplateResponseDto» */ -export interface PageTemplateResponseDto { - content?: any[]; - empty?: boolean; - first?: boolean; - last?: boolean; - /** @format int32 */ - number?: number; - /** @format int32 */ - numberOfElements?: number; - pageable?: any; - /** @format int32 */ - size?: number; - sort?: any; - /** @format int64 */ - totalElements?: number; - /** @format int32 */ - totalPages?: number; -} - -export type Pet = NewPet & { - /** @format int64 */ - id: number; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team (http://swagger.io) - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pathParams = { - /** - * No description - * - * @name PathParamFooBarBazList - * @request GET:/path-params/{path-param}/{foo-bar-baz} - */ - pathParamFooBarBazList: (pathParam: string, fooBarBaz: string, params: RequestParams = {}) => - this.request({ - path: `/path-params/${pathParam}/${fooBarBaz}`, - method: "GET", - ...params, - }), - }; - pets = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - /** tags to filter by */ - tags?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Creates a new pet in the store. Duplicates are allowed - * - * @name AddPet - * @request POST:/pets - */ - addPet: (pet: NewPet, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - body: pet, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Returns a user based on a single ID, if the user does not have access to the pet - * - * @name FindPetById - * @request GET:/pets/{id} - */ - findPetById: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description deletes a single pet based on the ID supplied - * - * @name DeletePet - * @request DELETE:/pets/{id} - */ - deletePet: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore-minimal.ts b/tests/generated/v2.0/petstore-minimal.ts deleted file mode 100644 index 618242fb..00000000 --- a/tests/generated/v2.0/petstore-minimal.ts +++ /dev/null @@ -1,256 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Pet { - /** @format int64 */ - id: number; - multiple?: string | number; - name: string; - tag?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name PetsList - * @request GET:/pets - */ - petsList: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore-simple.ts b/tests/generated/v2.0/petstore-simple.ts deleted file mode 100644 index 952bd81f..00000000 --- a/tests/generated/v2.0/petstore-simple.ts +++ /dev/null @@ -1,327 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface ErrorModel { - /** @format int32 */ - code: number; - message: string; -} - -export interface NewPet { - name: string; - tag?: string; -} - -export type Pet = NewPet & { - /** @format int64 */ - id: number; -}; - -/** Description of Test type */ -export type Test = NewPet; - -export interface Test2 { - /** Field description */ - data?: NewPet; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - /** tags to filter by */ - tags?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Creates a new pet in the store. Duplicates are allowed - * - * @name AddPet - * @request POST:/pets - */ - addPet: (pet: NewPet, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - body: pet, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Returns a user based on a single ID, if the user does not have access to the pet - * - * @name FindPetById - * @request GET:/pets/{id} - */ - findPetById: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description deletes a single pet based on the ID supplied - * - * @name DeletePet - * @request DELETE:/pets/{id} - */ - deletePet: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore-swagger-io.ts b/tests/generated/v2.0/petstore-swagger-io.ts deleted file mode 100644 index a4a4ddb0..00000000 --- a/tests/generated/v2.0/petstore-swagger-io.ts +++ /dev/null @@ -1,685 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface ApiResponse { - /** @format int32 */ - code?: number; - message?: string; - type?: string; -} - -export interface Category { - /** @format int64 */ - id?: number; - name?: string; -} - -export interface Order { - complete?: boolean; - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered"; -} - -export interface Pet { - category?: Category; - /** @format int64 */ - id?: number; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; - tags?: Tag[]; -} - -export interface Tag { - /** @format int64 */ - id?: number; - name?: string; -} - -export interface User { - email?: string; - firstName?: string; - /** @format int64 */ - id?: number; - lastName?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; - username?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.3 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl https://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:/pet - * @secure - */ - addPet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:/pet - * @secure - */ - updatePet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:/store/order/{orderId} - */ - deleteOrder: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:/store/order - */ - placeOrder: (body: Order, params: RequestParams = {}) => - this.request({ - path: `/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - user = { - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:/user/{username} - */ - updateUser: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:/user/login - */ - loginUser: ( - query: { - /** The password for login in clear text */ - password: string; - /** The user name for login */ - username: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `/user/logout`, - method: "GET", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:/user - */ - createUser: (body: User, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithArray - */ - createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithList - */ - createUsersWithListInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore-with-external-docs.ts b/tests/generated/v2.0/petstore-with-external-docs.ts deleted file mode 100644 index 902d064b..00000000 --- a/tests/generated/v2.0/petstore-with-external-docs.ts +++ /dev/null @@ -1,320 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface ErrorModel { - /** @format int32 */ - code: number; - message: string; -} - -export interface NewPet { - name: string; - tag?: string; -} - -export type Pet = NewPet & { - /** @format int64 */ - id: number; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @externalDocs https://swagger.io/about - * @contact Swagger API Team (http://swagger.io) - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - /** tags to filter by */ - tags?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Creates a new pet in the store. Duplicates are allowed - * - * @name AddPet - * @request POST:/pets - */ - addPet: (pet: NewPet, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - body: pet, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Returns a user based on a single ID, if the user does not have access to the pet - * - * @name FindPetById - * @request GET:/pets/{id} - */ - findPetById: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description deletes a single pet based on the ID supplied - * - * @name DeletePet - * @request DELETE:/pets/{id} - */ - deletePet: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/petstore.ts b/tests/generated/v2.0/petstore.ts deleted file mode 100644 index 1a517200..00000000 --- a/tests/generated/v2.0/petstore.ts +++ /dev/null @@ -1,302 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Error { - /** @format int32 */ - code: number; - message: string; -} - -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; -} - -export type Pets = Pet[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @baseUrl http://petstore.swagger.io/v1 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @tags pets - * @name ListPets - * @summary List all pets - * @request GET:/pets - */ - listPets: ( - query?: { - /** - * How many items to return at one time (max 100) - * @format int32 - */ - limit?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pets - * @name CreatePets - * @summary Create a pet - * @request POST:/pets - */ - createPets: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @tags pets - * @name ShowPetById - * @summary Info for a specific pet - * @request GET:/pets/{petId} - */ - showPetById: (petId: string, params: RequestParams = {}) => - this.request({ - path: `/pets/${petId}`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/query-path-param.ts b/tests/generated/v2.0/query-path-param.ts deleted file mode 100644 index 24c57b78..00000000 --- a/tests/generated/v2.0/query-path-param.ts +++ /dev/null @@ -1,257 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://unknown.io/v666"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Query Path Param - * @version 1.0.0 - * @license MIT - * @baseUrl http://unknown.io/v666 - */ -export class Api extends HttpClient { - foobarbaz = { - /** - * No description - * - * @tags pets - * @name ListPets - * @summary List all pets - * @request GET:/foobarbaz/{query} - */ - listPets: ( - query?: number, - queryParams?: { - /** - * How many items to return at one time (max 100) - * @format int32 - */ - queryParam?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/foobarbaz/${query}`, - method: "GET", - query: queryParams, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v2.0/uber.ts b/tests/generated/v2.0/uber.ts deleted file mode 100644 index 68597934..00000000 --- a/tests/generated/v2.0/uber.ts +++ /dev/null @@ -1,472 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Activities { - /** - * Total number of items available. - * @format int32 - */ - count?: number; - history?: Activity[]; - /** - * Number of items to retrieve (100 max). - * @format int32 - */ - limit?: number; - /** - * Position in pagination. - * @format int32 - */ - offset?: number; -} - -export interface Activity { - /** Unique identifier for the activity */ - uuid?: string; -} - -export interface Error { - /** @format int32 */ - code?: number; - fields?: string; - message?: string; -} - -export interface PriceEstimate { - /** [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code. */ - currency_code?: string; - /** Display name of product. */ - display_name?: string; - /** Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or "Metered" for TAXI. */ - estimate?: string; - /** Upper bound of the estimated price. */ - high_estimate?: number; - /** Lower bound of the estimated price. */ - low_estimate?: number; - /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles */ - product_id?: string; - /** Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier. */ - surge_multiplier?: number; -} - -export interface Product { - /** Capacity of product. For example, 4 people. */ - capacity?: number; - /** Description of product. */ - description?: string; - /** Display name of product. */ - display_name?: string; - /** Image URL representing the product. */ - image?: string; - /** Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles. */ - product_id?: string; -} - -export interface ProductList { - /** Contains the list of products */ - products?: Product[]; -} - -export interface Profile { - /** Email address of the Uber user */ - email?: string; - /** First name of the Uber user. */ - first_name?: string; - /** Last name of the Uber user. */ - last_name?: string; - /** Image URL of the Uber user. */ - picture?: string; - /** Promo code of the Uber user. */ - promo_code?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.uber.com/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Uber API - * @version 1.0.0 - * @baseUrl https://api.uber.com/v1 - * - * Move your app forward with the Uber API - */ -export class Api extends HttpClient { - products = { - /** - * @description The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. - * - * @tags Products - * @name ProductsList - * @summary Product Types - * @request GET:/products - * @secure - */ - productsList: ( - query: { - /** - * Latitude component of location. - * @format double - */ - latitude: number; - /** - * Longitude component of location. - * @format double - */ - longitude: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/products`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; - estimates = { - /** - * @description The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. - * - * @tags Estimates - * @name PriceList - * @summary Price Estimates - * @request GET:/estimates/price - */ - priceList: ( - query: { - /** - * Latitude component of end location. - * @format double - */ - end_latitude?: number; - /** - * Longitude component of end location. - * @format double - */ - end_longitude: number; - /** - * Latitude component of start location. - * @format double - */ - start_latitude: number; - /** - * Longitude component of start location. - * @format double - */ - start_longitude: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/estimates/price`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. - * - * @tags Estimates - * @name TimeList - * @summary Time Estimates - * @request GET:/estimates/time - */ - timeList: ( - query: { - /** - * Unique customer identifier to be used for experience customization. - * @format uuid - */ - customer_uuid?: string; - /** Unique identifier representing a specific product for a given latitude & longitude. */ - product_id?: string; - /** - * Latitude component of start location. - * @format double - */ - start_latitude: number; - /** - * Longitude component of start location. - * @format double - */ - start_longitude: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/estimates/time`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - me = { - /** - * @description The User Profile endpoint returns information about the Uber user that has authorized with the application. - * - * @tags User - * @name GetMe - * @summary User Profile - * @request GET:/me - */ - getMe: (params: RequestParams = {}) => - this.request({ - path: `/me`, - method: "GET", - format: "json", - ...params, - }), - }; - history = { - /** - * @description The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. - * - * @tags User - * @name HistoryList - * @summary User Activity - * @request GET:/history - */ - historyList: ( - query?: { - /** - * Number of items to retrieve. Default is 5, maximum is 100. - * @format int32 - */ - limit?: number; - /** - * Offset the list of returned results by this amount. Default is zero. - * @format int32 - */ - offset?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/history`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/additional-properties.ts b/tests/generated/v3.0/additional-properties.ts deleted file mode 100644 index bbf18d8f..00000000 --- a/tests/generated/v3.0/additional-properties.ts +++ /dev/null @@ -1,233 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Message { - code?: number; - text?: string; -} - -export type Messages = Record; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Additional properties Example - * @version 1.0.0 - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v3.0/additional-properties2.ts b/tests/generated/v3.0/additional-properties2.ts deleted file mode 100644 index 84c93361..00000000 --- a/tests/generated/v3.0/additional-properties2.ts +++ /dev/null @@ -1,229 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Primitive = string | number | boolean | null; - -export type PrimitiveMap = Record; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v3.0/allof-example.ts b/tests/generated/v3.0/allof-example.ts deleted file mode 100644 index 8574e2ff..00000000 --- a/tests/generated/v3.0/allof-example.ts +++ /dev/null @@ -1,257 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Cat = Pet & { - age?: number; - hunts?: boolean; -}; - -export type Dog = Pet & { - bark?: boolean; - breed: "Dingo" | "Husky" | "Retriever" | "Shepherd"; -}; - -export interface Pet { - pet_type: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Allof Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @name PetsPartialUpdate - * @request PATCH:/pets - */ - petsPartialUpdate: (data: Cat | Dog, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "PATCH", - body: data, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/anyof-example.ts b/tests/generated/v3.0/anyof-example.ts deleted file mode 100644 index 7b952cdd..00000000 --- a/tests/generated/v3.0/anyof-example.ts +++ /dev/null @@ -1,253 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface PetByAge { - age: number; - nickname?: string; -} - -export interface PetByType { - hunts?: boolean; - pet_type: "Cat" | "Dog"; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Anyof Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @name PetsPartialUpdate - * @request PATCH:/pets - */ - petsPartialUpdate: (data: PetByAge | PetByType, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "PATCH", - body: data, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/api-with-examples.ts b/tests/generated/v3.0/api-with-examples.ts deleted file mode 100644 index af498c48..00000000 --- a/tests/generated/v3.0/api-with-examples.ts +++ /dev/null @@ -1,258 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Simple API overview - * @version 2.0.0 - */ -export class Api extends HttpClient { - /** - * No description - * - * @name ListVersionsv2 - * @summary List API versions - * @request GET:/ - */ - listVersionsv2 = (params: RequestParams = {}) => - this.request({ - path: `/`, - method: "GET", - format: "json", - ...params, - }); - - v2 = { - /** - * No description - * - * @name GetVersionDetailsv2 - * @summary Show API version details - * @request GET:/v2 - */ - getVersionDetailsv2: (params: RequestParams = {}) => - this.request({ - path: `/v2`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/callback-example.ts b/tests/generated/v3.0/callback-example.ts deleted file mode 100644 index 7ea2467f..00000000 --- a/tests/generated/v3.0/callback-example.ts +++ /dev/null @@ -1,263 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Callback Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - streams = { - /** - * @description subscribes a client to receive out-of-band data - * - * @name StreamsCreate - * @request POST:/streams - */ - streamsCreate: ( - query: { - /** - * the location where data will be sent. Must be network accessible - * by the source server - * @format uri - * @example "https://tonys-server.com" - */ - callbackUrl: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** - * this unique identifier allows management of the subscription - * @example "2531329f-fb09-4ef7-887e-84e648214436" - */ - subscriptionId: string; - }, - any - >({ - path: `/streams`, - method: "POST", - query: query, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/components-responses.ts b/tests/generated/v3.0/components-responses.ts deleted file mode 100644 index bb72ddfd..00000000 --- a/tests/generated/v3.0/components-responses.ts +++ /dev/null @@ -1,248 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Title - * @version latest - * - * Description - */ -export class Api extends HttpClient { - api = { - /** - * No description - * - * @name GetData - * @request GET:/api - */ - getData: (params: RequestParams = {}) => - this.request< - { - data?: string; - }, - any - >({ - path: `/api`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/explode-param-3.0.1.ts b/tests/generated/v3.0/explode-param-3.0.1.ts deleted file mode 100644 index b3c020cb..00000000 --- a/tests/generated/v3.0/explode-param-3.0.1.ts +++ /dev/null @@ -1,294 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Floop { - info?: string; -} - -export interface QueryParams { - /** - * Page size - * @format int32 - * @min 0 - */ - "page-size"?: number | null; - /** - * Page number - * @format int32 - * @min 0 - */ - page?: number | null; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title API - * @version 0.1 - * - * Documentation - */ -export class Api extends HttpClient { - user = { - /** - * No description - * - * @name CreateFile - * @summary Some summary - * @request POST:/{user}/foos - */ - createFile: ( - user: string, - data: { - /** @default "" */ - meme: string; - memeType?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/${user}/foos`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - something = { - /** - * No description - * - * @name Gets - * @request GET:/something/ - */ - gets: ( - query?: { - params?: QueryParams; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/something/`, - method: "GET", - query: query, - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/link-example.ts b/tests/generated/v3.0/link-example.ts deleted file mode 100644 index 127cd943..00000000 --- a/tests/generated/v3.0/link-example.ts +++ /dev/null @@ -1,336 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Pullrequest { - author?: User; - id?: number; - repository?: Repository; - title?: string; -} - -export interface Repository { - owner?: User; - slug?: string; -} - -export interface User { - username?: string; - uuid?: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Link Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - v20 = { - /** - * No description - * - * @name GetUserByName - * @request GET:/2.0/users/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetRepositoriesByOwner - * @request GET:/2.0/repositories/{username} - */ - getRepositoriesByOwner: (username: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetRepository - * @request GET:/2.0/repositories/{username}/{slug} - */ - getRepository: (username: string, slug: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetPullRequestsByRepository - * @request GET:/2.0/repositories/{username}/{slug}/pullrequests - */ - getPullRequestsByRepository: ( - username: string, - slug: string, - query?: { - state?: "open" | "merged" | "declined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetPullRequestsById - * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} - */ - getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests/${pid}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergePullRequest - * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge - */ - mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests/${pid}/merge`, - method: "POST", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/no-definitions-schema.ts b/tests/generated/v3.0/no-definitions-schema.ts deleted file mode 100644 index 6ae05ba1..00000000 --- a/tests/generated/v3.0/no-definitions-schema.ts +++ /dev/null @@ -1,240 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface BasicErrorModel { - /** - * @min 100 - * @max 600 - */ - code: number; - field?: string | null; - message: string; -} - -export type ExtendedErrorModel = BasicErrorModel & { - rootCause: string; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Empty schema example - * @version 1.0.0 - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v3.0/oneof-example.ts b/tests/generated/v3.0/oneof-example.ts deleted file mode 100644 index 5621d729..00000000 --- a/tests/generated/v3.0/oneof-example.ts +++ /dev/null @@ -1,253 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Cat { - age?: number; - hunts?: boolean; -} - -export interface Dog { - bark?: boolean; - breed?: "Dingo" | "Husky" | "Retriever" | "Shepherd"; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Oneof Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @name PetsPartialUpdate - * @request PATCH:/pets - */ - petsPartialUpdate: (data: Cat | Dog, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "PATCH", - body: data, - type: ContentType.Json, - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/personal-api-example.ts b/tests/generated/v3.0/personal-api-example.ts deleted file mode 100644 index 1e9454bc..00000000 --- a/tests/generated/v3.0/personal-api-example.ts +++ /dev/null @@ -1,606 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type AuthUserType = OmitIdUserType; - -export type ExtractedProjectType = OmitProjectTypeJob & { - /** Information about job */ - job: JobType; -}; - -/** Information about job */ -export interface FooBar { - kind?: JobKind; -} - -/** Information about job */ -export interface FooBarBaz { - id?: string; - kind?: JobKind; - link?: string; - name?: string; - [key: string]: any; -} - -/** Information about job */ -export interface FooBaz { - link?: string; - name?: string; -} - -/** - * FooBar - * @format int32 - */ -export enum IntEnumWithNames { - Unknown = 0, - String = 1, - Int32 = 2, - Int64 = 3, - Double = 4, - DateTime = 5, - Test2 = 6, - Test23 = 7, - Tess44 = 8, - BooFar = 9, -} - -export enum JobKind { - COMPANY = "COMPANY", - PERSONAL = "PERSONAL", - FREELANCE = "FREELANCE", - OPEN_SOURCE = "OPEN_SOURCE", -} - -/** Information about job */ -export interface JobType { - /** web site address */ - address?: string; - /** - * Exist only in open source jobs - * Format: `${username}/${projectName}` - */ - github?: string; - id: string; - /** - * Exist only in open source jobs - * Means project is dev. tool (like swagger code generator) - */ - isTool?: boolean; - kind: JobKind; - link?: string; - name?: string; - /** - * Exist only in open source jobs - * Format: `${orgname}/${projectName}` - */ - npm?: string; -} - -export type JobUpdateType = OmitIdJobType; - -export interface NullableEnum { - /** @format int64 */ - id?: number; - legalCategory?: "SARL" | "ASSOCIATION" | null; -} - -export type OmitIdJobType = OmitJobTypeIdOrId; - -export type OmitIdProjectType = OmitProjectTypeIdOrId; - -export type OmitIdUserType = OmitUserTypeIdOrId; - -export type OmitJobTypeIdOrId = PickJobTypeExcludeKeysIdOrId; - -export type OmitProjectTypeIdOrId = PickProjectTypeExcludeKeysIdOrId; - -export type OmitProjectTypeJob = PickProjectTypeExcludeKeysJob; - -export type OmitUserTypeIdOrId = PickUserTypeExcludeKeysIdOrId; - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickJobTypeExcludeKeysIdOrId { - /** web site address */ - address?: string; - /** - * Exist only in open source jobs - * Format: `${username}/${projectName}` - */ - github?: string; - /** - * Exist only in open source jobs - * Means project is dev. tool (like swagger code generator) - */ - isTool?: boolean; - kind: JobKind; - link?: string; - name?: string; - /** - * Exist only in open source jobs - * Format: `${orgname}/${projectName}` - */ - npm?: string; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickProjectTypeExcludeKeysIdOrId { - description: string; - job: string; - name?: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickProjectTypeExcludeKeysJob { - description: string; - id: string; - name?: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickUserTypeExcludeKeysIdOrId { - password: string; - username: string; -} - -export interface ProjectType { - description: string; - id: string; - job: string; - name?: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -export type ProjectUpdateType = OmitIdProjectType; - -export type TestAllOfDc = (FooBarBaz & FooBar) & { - prop?: string; -}; - -export type TestAllOfDc2 = FooBarBaz & { - prop?: string; -}; - -export type TestAnyOfDc = (FooBarBaz | FooBar) & { - prop?: string; -}; - -export type TestOneOfDc = (FooBarBaz | FooBar) & { - prop?: string; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://localhost:8080/api/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl http://localhost:8080/api/v1 - */ -export class Api extends HttpClient { - auth = { - /** - * No description - * - * @tags Auth - * @name Login - * @request POST:/auth - */ - login: (data: AuthUserType, params: RequestParams = {}) => - this.request({ - path: `/auth`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Auth - * @name Refresh - * @request POST:/auth/refresh - * @secure - */ - refresh: (params: RequestParams = {}) => - this.request({ - path: `/auth/refresh`, - method: "POST", - secure: true, - format: "json", - ...params, - }), - }; - jobs = { - /** - * No description - * - * @tags Jobs - * @name GetJobs - * @request GET:/jobs - * @secure - */ - getJobs: (params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name AddJob - * @request POST:/jobs - * @secure - */ - addJob: (data: JobUpdateType, params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name GetJob - * @request GET:/jobs/{id} - * @secure - */ - getJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name UpdateJob - * @request PATCH:/jobs/{id} - * @secure - */ - updateJob: (id: string, params: JobUpdateType, requestParams: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "PATCH", - body: params, - secure: true, - type: ContentType.Json, - format: "json", - ...requestParams, - }), - - /** - * No description - * - * @tags Jobs - * @name DeleteJob - * @request DELETE:/jobs/{id} - * @secure - */ - deleteJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - }; - projects = { - /** - * No description - * - * @tags Projects - * @name GetProjects - * @request GET:/projects - */ - getProjects: (params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name AddProjects - * @request POST:/projects - * @secure - */ - addProjects: (data: ProjectUpdateType, params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name UpdateProject - * @request PATCH:/projects/{id} - * @secure - */ - updateProject: (id: string, data: ProjectUpdateType, params: RequestParams = {}) => - this.request({ - path: `/projects/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name DeleteProject - * @request DELETE:/projects/{id} - */ - deleteProject: (id: string, params: RequestParams = {}) => - this.request({ - path: `/projects/${id}`, - method: "DELETE", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/petstore-expanded.ts b/tests/generated/v3.0/petstore-expanded.ts deleted file mode 100644 index 26ac904a..00000000 --- a/tests/generated/v3.0/petstore-expanded.ts +++ /dev/null @@ -1,319 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Error { - /** @format int32 */ - code: number; - message: string; -} - -export interface NewPet { - name: string; - tag?: string; -} - -export type Pet = NewPet & { - /** @format int64 */ - id: number; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team (http://swagger.io) - * - * A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - /** tags to filter by */ - tags?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Creates a new pet in the store. Duplicates are allowed - * - * @name AddPet - * @request POST:/pets - */ - addPet: (data: NewPet, params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Returns a user based on a single ID, if the user does not have access to the pet - * - * @name FindPetById - * @request GET:/pets/{id} - */ - findPetById: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description deletes a single pet based on the ID supplied - * - * @name DeletePet - * @request DELETE:/pets/{id} - */ - deletePet: (id: number, params: RequestParams = {}) => - this.request({ - path: `/pets/${id}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/petstore.ts b/tests/generated/v3.0/petstore.ts deleted file mode 100644 index 7ac4b9ef..00000000 --- a/tests/generated/v3.0/petstore.ts +++ /dev/null @@ -1,304 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Error { - /** @format int32 */ - code: number; - message: string; -} - -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; -} - -export type Pets = Pet[]; - -export type StringNullable = string | null; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @baseUrl http://petstore.swagger.io/v1 - */ -export class Api extends HttpClient { - pets = { - /** - * No description - * - * @tags pets - * @name ListPets - * @summary List all pets - * @request GET:/pets - */ - listPets: ( - query?: { - /** - * How many items to return at one time (max 100) - * @format int32 - */ - limit?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pets - * @name CreatePets - * @summary Create a pet - * @request POST:/pets - */ - createPets: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @tags pets - * @name ShowPetById - * @summary Info for a specific pet - * @request GET:/pets/{petId} - */ - showPetById: (petId: string, params: RequestParams = {}) => - this.request({ - path: `/pets/${petId}`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/recursive-schema.ts b/tests/generated/v3.0/recursive-schema.ts deleted file mode 100644 index 681923e1..00000000 --- a/tests/generated/v3.0/recursive-schema.ts +++ /dev/null @@ -1,236 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** RECURSIVE */ -export interface RecursiveObject { - /** RECURSIVE */ - bar?: RecursiveObject; - /** - * Unique identifier of the GitHub app - * @example 37 - */ - id?: number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v3.0/responses.ts b/tests/generated/v3.0/responses.ts deleted file mode 100644 index e192574f..00000000 --- a/tests/generated/v3.0/responses.ts +++ /dev/null @@ -1,249 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Title - * @version latest - * - * Description - */ -export class Api extends HttpClient { - api = { - /** - * No description - * - * @name GetData - * @request GET:/api - */ - getData: (params: RequestParams = {}) => - this.request< - { - data?: string; - }, - any - >({ - path: `/api`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/swaggerhub-template.ts b/tests/generated/v3.0/swaggerhub-template.ts deleted file mode 100644 index d84b0fbd..00000000 --- a/tests/generated/v3.0/swaggerhub-template.ts +++ /dev/null @@ -1,262 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Sample Application Flow OAuth2 Project - * @version 1.0.0 - * @baseUrl https://virtserver.swaggerhub.com/sdfsdfsffs/sdfff/1.0.0 - * - * This is an example of using OAuth2 Application Flow in a specification to describe security to your API. - */ -export class Api extends HttpClient { - example = { - /** - * @description This is an example operation to show how security is applied to the call. - * - * @name ExampleList - * @summary Server example operation - * @request GET:/example - * @secure - */ - exampleList: (params: RequestParams = {}) => - this.request({ - path: `/example`, - method: "GET", - secure: true, - ...params, - }), - }; - ping = { - /** - * @description This operation shows how to override the global security defined above, as we want to open it up for all users. - * - * @name PingList - * @summary Server heartbeat operation - * @request GET:/ping - */ - pingList: (params: RequestParams = {}) => - this.request({ - path: `/ping`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/tsoa-odd-types-3.0.2.ts b/tests/generated/v3.0/tsoa-odd-types-3.0.2.ts deleted file mode 100644 index f1b9f054..00000000 --- a/tests/generated/v3.0/tsoa-odd-types-3.0.2.ts +++ /dev/null @@ -1,627 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface AuthUser { - password: string; - username: string; -} - -export interface GetProfileBioDTO { - /** @format int32 */ - candidateId?: number; - cityName?: string | null; -} - -export interface Job { - address?: string | null; - github?: string | null; - id: string; - isTool?: boolean | null; - kind: Kind; - link?: string | null; - name?: string | null; - npm?: string | null; -} - -export type JobUpdate = OmitJobId | PickJobGithub | Record; - -export enum Kind { - COMPANY = "COMPANY", - PERSONAL = "PERSONAL", - FREELANCE = "FREELANCE", - OPEN_SOURCE = "OPEN_SOURCE", -} - -export type OmitJobId = PickJobExcludeKeysId; - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickJobExcludeKeysId { - address?: string; - github?: string; - isTool?: boolean; - kind: Kind; - link?: string; - name?: string; - npm?: string; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickJobGithub { - github?: string; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickProjectExcludeKeysIdOrjob { - description: string; - name?: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -export interface Project { - description: string; - id: string; - job: Job; - name?: string | null; - notImportant?: boolean | null; - prefix?: string | null; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -export interface ProjectUpdate { - description: string; - job: string; - name?: string | null; - notImportant?: boolean | null; - prefix?: string | null; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -export type UpdatedJob = Job; - -export interface UpdatedProject { - description: string; - id: string; - job: string; - name?: string | null; - notImportant?: boolean | null; - prefix?: string | null; - tags: string[]; - teamSize: string; - /** @format double */ - year: number; -} - -export interface User { - id: string; - username: string; -} - -export interface UserUpdate { - id?: string | null; - username?: string | null; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://localhost:8080/api/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl http://localhost:8080/api/v1 - */ -export class Api extends HttpClient { - auth = { - /** - * No description - * - * @tags Auth - * @name Login - * @request POST:/auth - */ - login: (data?: AuthUser, params: RequestParams = {}) => - this.request({ - path: `/auth`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Auth - * @name Refresh - * @request POST:/auth/refresh - * @secure - */ - refresh: (params: RequestParams = {}) => - this.request({ - path: `/auth/refresh`, - method: "POST", - secure: true, - format: "json", - ...params, - }), - }; - jobs = { - /** - * No description - * - * @tags Jobs - * @name GetJobs - * @request GET:/jobs - * @secure - */ - getJobs: (params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name AddJob - * @request POST:/jobs - * @secure - */ - addJob: (data: PickJobGithub, params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name GetJob - * @request GET:/jobs/{id} - * @secure - */ - getJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name UpdateJob - * @request PATCH:/jobs/{id} - * @secure - */ - updateJob: (id: string, data: JobUpdate, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name DeleteJob - * @request DELETE:/jobs/{id} - * @secure - */ - deleteJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - }; - xRoute = { - /** - * No description - * - * @tags Jobs - * @name GetJobs - * @request GET:x-route - * @secure - */ - getJobs: (params: RequestParams = {}) => - this.request({ - path: `x-route`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name AddJob - * @request POST:x-route - * @secure - */ - addJob: (data: PickJobGithub, params: RequestParams = {}) => - this.request({ - path: `x-route`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - projects = { - /** - * No description - * - * @tags Projects - * @name GetProjects - * @request GET:/projects - */ - getProjects: (params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name AddProjects - * @request POST:/projects - * @secure - */ - addProjects: (data: ProjectUpdate, params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name UpdateProject - * @request PATCH:/projects/{id} - * @secure - */ - updateProject: (id: string, data: ProjectUpdate, params: RequestParams = {}) => - this.request({ - path: `/projects/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - users = { - /** - * No description - * - * @tags Users - * @name GetUsers - * @request GET:/users - * @secure - */ - getUsers: (params: RequestParams = {}) => - this.request({ - path: `/users`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Users - * @name AddUser - * @request POST:/users - * @secure - */ - addUser: (data: AuthUser, params: RequestParams = {}) => - this.request({ - path: `/users`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Users - * @name DeleteUser - * @request DELETE:/users/{id} - * @secure - */ - deleteUser: (id: string, params: RequestParams = {}) => - this.request({ - path: `/users/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Users - * @name UpdateUser - * @request PATCH:/users/{id} - * @secure - */ - updateUser: (id: string, data: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/users/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/up-banking.ts b/tests/generated/v3.0/up-banking.ts deleted file mode 100644 index d4e8d26a..00000000 --- a/tests/generated/v3.0/up-banking.ts +++ /dev/null @@ -1,1443 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Provides information about an Up bank account. */ -export interface AccountResource { - attributes: { - /** The bank account type of this account. */ - accountType: AccountTypeEnum; - /** - * The available balance of the account, taking into account any amounts - * that are currently on hold. - */ - balance: MoneyObject; - /** - * The date-time at which this account was first opened. - * @format date-time - */ - createdAt: string; - /** The name associated with the account in the Up application. */ - displayName: string; - }; - /** The unique identifier for this account. */ - id: string; - links?: { - /** The canonical link to this resource within the API. */ - self: string; - }; - relationships: { - transactions: { - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - }; - /** The type of this resource: `accounts` */ - type: string; -} - -/** - * Specifies the type of bank account. Currently returned values are `SAVER` - * and `TRANSACTIONAL`. - */ -export enum AccountTypeEnum { - SAVER = "SAVER", - TRANSACTIONAL = "TRANSACTIONAL", -} - -/** - * Provides information about an instant reimbursement in the form of - * cashback. - */ -export interface CashbackObject { - /** The total amount of cashback paid, represented as a positive value. */ - amount: MoneyObject; - /** A brief description of why this cashback was paid. */ - description: string; -} - -/** Provides information about a category and its ancestry. */ -export interface CategoryResource { - attributes: { - /** The name of this category as seen in the Up application. */ - name: string; - }; - /** - * The unique identifier for this category. This is a human-readable but - * URL-safe value. - */ - id: string; - links?: { - /** The canonical link to this resource within the API. */ - self: string; - }; - relationships: { - children: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `categories` */ - type: string; - }[]; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - parent: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `categories` */ - type: string; - } | null; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - }; - /** The type of this resource: `categories` */ - type: string; -} - -/** - * Request to create a new webhook. This currently only requires a `url` - * attribute. - */ -export interface CreateWebhookRequest { - /** The webhook resource to create. */ - data: WebhookInputResource; -} - -/** Successful response after creating a webhook. */ -export interface CreateWebhookResponse { - /** The webhook that was created. */ - data: WebhookResource; -} - -/** Provides information about an error processing a request. */ -export interface ErrorObject { - /** - * A detailed description of this error. This should be considered unique - * to individual occurrences of an error and subject to change. It is - * useful for debugging purposes. - */ - detail: string; - /** - * If applicable, location in the request that this error relates to. This - * may be a parameter in the query string, or a an attribute in the - * request body. - */ - source?: { - /** - * If this error relates to a query parameter, the name of the - * parameter. - */ - parameter?: string; - /** - * If this error relates to an attribute in the request body, a - * rfc-6901 JSON pointer to the attribute. - */ - pointer?: string; - }; - /** - * The HTTP status code associated with this error. This can also be - * obtained from the response headers. The status indicates the broad type - * of error according to HTTP semantics. - */ - status: string; - /** - * A short description of this error. This should be stable across - * multiple occurrences of this type of error and typically expands on the - * reason for the status code. - */ - title: string; -} - -/** Generic error response that returns one or more errors. */ -export interface ErrorResponse { - /** The list of errors returned in this response. */ - errors: ErrorObject[]; -} - -/** Successful response to get a single account. */ -export interface GetAccountResponse { - /** The account returned in this response. */ - data: AccountResource; -} - -/** Successful response to get a single category and its ancestry. */ -export interface GetCategoryResponse { - /** The category returned in this response. */ - data: CategoryResource; -} - -/** Successful response to get a single transaction. */ -export interface GetTransactionResponse { - /** The transaction returned in this response. */ - data: TransactionResource; -} - -/** Successful response to get a single webhook. */ -export interface GetWebhookResponse { - /** The webhook returned in this response. */ - data: WebhookResource; -} - -/** - * Provides information about the amount at which a transaction was in the - * `HELD` status. - */ -export interface HoldInfoObject { - /** - * The amount of this transaction while in the `HELD` status, in - * Australian dollars. - */ - amount: MoneyObject; - /** - * The foreign currency amount of this transaction while in the `HELD` - * status. This field will be `null` for domestic transactions. The amount - * was converted to the AUD amount reflected in the `amount` field. - */ - foreignAmount: MoneyObject | null; -} - -/** - * Successful response to get all accounts. This returns a paginated list of - * accounts, which can be scrolled by following the `prev` and `next` links - * if present. - */ -export interface ListAccountsResponse { - /** The list of accounts returned in this response. */ - data: AccountResource[]; - links: { - /** - * The link to the next page in the results. If this value is `null` - * there is no next page. - */ - next: string | null; - /** - * The link to the previous page in the results. If this value is `null` - * there is no previous page. - */ - prev: string | null; - }; -} - -/** - * Successful response to get all categories and their ancestry. The - * returned list is not paginated. - */ -export interface ListCategoriesResponse { - /** The list of categories returned in this response. */ - data: CategoryResource[]; -} - -/** - * Successful response to get all tags. This returns a paginated list of - * tags, which can be scrolled by following the `prev` and `next` links if - * present. - */ -export interface ListTagsResponse { - /** The list of tags returned in this response. */ - data: TagResource[]; - links: { - /** - * The link to the next page in the results. If this value is `null` - * there is no next page. - */ - next: string | null; - /** - * The link to the previous page in the results. If this value is `null` - * there is no previous page. - */ - prev: string | null; - }; -} - -/** - * Successful response to get all transactions. This returns a paginated - * list of transactions, which can be scrolled by following the `prev` and - * `next` links if present. - */ -export interface ListTransactionsResponse { - /** The list of transactions returned in this response. */ - data: TransactionResource[]; - links: { - /** - * The link to the next page in the results. If this value is `null` - * there is no next page. - */ - next: string | null; - /** - * The link to the previous page in the results. If this value is `null` - * there is no previous page. - */ - prev: string | null; - }; -} - -/** - * Successful response to get all delivery logs for a webhook. This returns - * a paginated list of delivery logs, which can be scrolled by following the - * `next` and `prev` links if present. - */ -export interface ListWebhookDeliveryLogsResponse { - /** The list of delivery logs returned in this response. */ - data: WebhookDeliveryLogResource[]; - links: { - /** - * The link to the next page in the results. If this value is `null` - * there is no next page. - */ - next: string | null; - /** - * The link to the previous page in the results. If this value is `null` - * there is no previous page. - */ - prev: string | null; - }; -} - -/** - * Successful response to get all webhooks. This returns a paginated list of - * webhooks, which can be scrolled by following the `prev` and `next` links - * if present. - */ -export interface ListWebhooksResponse { - /** The list of webhooks returned in this response. */ - data: WebhookResource[]; - links: { - /** - * The link to the next page in the results. If this value is `null` - * there is no next page. - */ - next: string | null; - /** - * The link to the previous page in the results. If this value is `null` - * there is no previous page. - */ - prev: string | null; - }; -} - -/** Provides information about a value of money. */ -export interface MoneyObject { - /** The ISO 4217 currency code. */ - currencyCode: string; - /** - * The amount of money, formatted as a string in the relevant currency. - * For example, for an Australian dollar value of $10.56, this field will - * be `"10.56"`. The currency symbol is not included in the string. - */ - value: string; - /** - * The amount of money in the smallest denomination for the currency, as a - * 64-bit integer. For example, for an Australian dollar value of $10.56, - * this field will be `1056`. - */ - valueInBaseUnits: number; -} - -/** Basic ping response to verify authentication. */ -export interface PingResponse { - meta: { - /** The unique identifier of the authenticated customer. */ - id: string; - /** A cute emoji that represents the response status. */ - statusEmoji: string; - }; -} - -/** - * Provides information about how a Round Up was applied, such as whether or - * not a boost was included in the Round Up. - */ -export interface RoundUpObject { - /** - * The total amount of this Round Up, including any boosts, represented as - * a negative value. - */ - amount: MoneyObject; - /** - * The portion of the Round Up `amount` owing to boosted Round Ups, - * represented as a negative value. If no boost was added to the Round Up - * this field will be `null`. - */ - boostPortion: MoneyObject | null; -} - -/** Bla bla bla foo bar baz */ -export enum SomeEnumName { - Foo = "Foo", - Bar = "Bar", - Baz = "Baz", - Bad = "Bad", -} - -/** Uniquely identifies a single tag in the API. */ -export interface TagInputResourceIdentifier { - /** The label of the tag, which also acts as the tag’s unique identifier. */ - id: string; - /** The type of this resource: `tags` */ - type: string; -} - -/** Provides information about a tag. */ -export interface TagResource { - /** The label of the tag, which also acts as the tag’s unique identifier. */ - id: string; - relationships: { - transactions: { - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - }; - /** The type of this resource: `tags` */ - type: string; -} - -export interface TransactionResource { - attributes: { - /** - * The amount of this transaction in Australian dollars. For - * transactions that were once `HELD` but are now `SETTLED`, refer to - * the `holdInfo` field for the original `amount` the transaction was - * `HELD` at. - */ - amount: MoneyObject; - /** - * If all or part of this transaction was instantly reimbursed in the - * form of cashback, details of the reimbursement. - */ - cashback: CashbackObject | null; - /** - * The date-time at which this transaction was first encountered. - * @format date-time - */ - createdAt: string; - /** - * A short description for this transaction. Usually the merchant name - * for purchases. - */ - description: string; - /** - * The foreign currency amount of this transaction. This field will be - * `null` for domestic transactions. The amount was converted to the AUD - * amount reflected in the `amount` of this transaction. Refer to the - * `holdInfo` field for the original `foreignAmount` the transaction was - * `HELD` at. - */ - foreignAmount: MoneyObject | null; - /** - * If this transaction is currently in the `HELD` status, or was ever in - * the `HELD` status, the `amount` and `foreignAmount` of the - * transaction while `HELD`. - */ - holdInfo: HoldInfoObject | null; - /** - * Attached message for this transaction, such as a payment message, or a - * transfer note. - */ - message: string | null; - /** - * The original, unprocessed text of the transaction. This is often not - * a perfect indicator of the actual merchant, but it is useful for - * reconciliation purposes in some cases. - */ - rawText: string | null; - /** - * Details of how this transaction was rounded-up. If no Round Up was - * applied this field will be `null`. - */ - roundUp: RoundUpObject | null; - /** - * The date-time at which this transaction settled. This field will be - * `null` for transactions that are currently in the `HELD` status. - * @format date-time - */ - settledAt: string | null; - /** - * The current processing status of this transaction, according to - * whether or not this transaction has settled or is still held. - */ - status: TransactionStatusEnum; - }; - /** The unique identifier for this transaction. */ - id: string; - links?: { - /** The canonical link to this resource within the API. */ - self: string; - }; - relationships: { - account: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `accounts` */ - type: string; - }; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - category: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `categories` */ - type: string; - } | null; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - parentCategory: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `categories` */ - type: string; - } | null; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - tags: { - data: { - /** The label of the tag, which also acts as the tag’s unique identifier. */ - id: string; - /** The type of this resource: `tags` */ - type: string; - }[]; - links?: { - /** - * The link to retrieve or modify linkage between this resources and the - * related resource(s) in this relationship. - */ - self: string; - }; - }; - }; - /** The type of this resource: `transactions` */ - type: string; -} - -/** - * Specifies which stage of processing a transaction is currently at. - * Currently returned values are `HELD` and `SETTLED`. When a transaction is - * held, its account’s `availableBalance` is affected. When a transaction is - * settled, its account’s `currentBalance` is affected. - */ -export enum TransactionStatusEnum { - HELD = "HELD", - SETTLED = "SETTLED", -} - -/** Request to add or remove tags associated with a transaction. */ -export interface UpdateTransactionTagsRequest { - /** The tags to add to or remove from the transaction. */ - data: TagInputResourceIdentifier[]; -} - -/** - * Provides historical webhook event delivery information for analysis and - * debugging purposes. - */ -export interface WebhookDeliveryLogResource { - attributes: { - /** - * The date-time at which this log entry was created. - * @format date-time - */ - createdAt: string; - /** The success or failure status of this delivery attempt. */ - deliveryStatus: WebhookDeliveryStatusEnum; - /** Information about the request that was sent to the webhook URL. */ - request: { - /** The payload that was sent in the request body. */ - body: string; - }; - /** Information about the response that was received from the webhook URL. */ - response: { - /** The payload that was received in the response body. */ - body: string; - /** The HTTP status code received in the response. */ - statusCode: number; - } | null; - }; - /** The unique identifier for this log entry. */ - id: string; - relationships: { - webhookEvent: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `webhook-events` */ - type: string; - }; - }; - }; - /** The type of this resource: `webhook-delivery-logs` */ - type: string; -} - -/** - * Specifies the nature of the success or failure of a webhook delivery - * attempt to the subscribed webhook URL. The currently returned values are - * described below: - * - * - **`DELIVERED`**: The event was delivered to the webhook URL - * successfully and a `200` response was received. - * - **`UNDELIVERABLE`**: The webhook URL was not reachable, or timed out. - * - **`BAD_RESPONSE_CODE`**: The event was delivered to the webhook URL - * but a non-`200` response was received. - */ -export enum WebhookDeliveryStatusEnum { - DELIVERED = "DELIVERED", - UNDELIVERABLE = "UNDELIVERABLE", - BAD_RESPONSE_CODE = "BAD_RESPONSE_CODE", -} - -/** Asynchronous callback request used for webhook event delivery. */ -export interface WebhookEventCallback { - /** The webhook event data sent to the subscribed webhook. */ - data: WebhookEventResource; -} - -/** - * Provides the event data used in asynchronous webhook event callbacks to - * subscribed endpoints. Webhooks events have defined `eventType`s and may - * optionally relate to other resources within the Up API. - */ -export interface WebhookEventResource { - attributes: { - /** - * The date-time at which this event was generated. - * @format date-time - */ - createdAt: string; - /** - * The type of this event. This can be used to determine what action to - * take in response to the event. - */ - eventType: WebhookEventTypeEnum; - }; - /** - * The unique identifier for this event. This will remain constant across - * delivery retries. - */ - id: string; - relationships: { - transaction?: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `transactions` */ - type: string; - }; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - webhook: { - data: { - /** The unique identifier of the resource within its type. */ - id: string; - /** The type of this resource: `webhooks` */ - type: string; - }; - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - }; - /** The type of this resource: `webhook-events` */ - type: string; -} - -/** - * Specifies the type of a webhook event. This can be used to determine what - * action to take in response to the event, such as which relationships to - * expect. - */ -export enum WebhookEventTypeEnum { - TRANSACTION_CREATED = "TRANSACTION_CREATED", - TRANSACTION_SETTLED = "TRANSACTION_SETTLED", - TRANSACTION_DELETED = "TRANSACTION_DELETED", - PING = "PING", -} - -/** Represents a webhook specified as request input. */ -export interface WebhookInputResource { - attributes: { - /** - * An optional description for this webhook, up to 64 characters in - * length. - */ - description?: string | null; - /** - * The URL that this webhook should post events to. This must be a valid - * HTTP or HTTPS URL that does not exceed 300 characters in length. - * @format uri - */ - url: string; - }; -} - -/** Provides information about a webhook. */ -export interface WebhookResource { - attributes: { - /** - * The date-time at which this webhook was created. - * @format date-time - */ - createdAt: string; - /** - * An optional description that was provided at the time the webhook was - * created. - */ - description: string | null; - /** - * A shared secret key used to sign all webhook events sent to the - * configured webhook URL. This field is returned only once, upon the - * initial creation of the webhook. If lost, create a new webhook and - * delete this webhook. - * - * The webhook URL receives a request with a - * `X-Up-Authenticity-Signature` header, which is the SHA-256 HMAC of - * the entire raw request body signed using this `secretKey`. It is - * advised to compute and check this signature to verify the - * authenticity of requests sent to the webhook URL. See - * [Handling webhook events](#callback_post_webhookURL) for full - * details. - */ - secretKey?: string; - /** The URL that this webhook is configured to `POST` events to. */ - url: string; - }; - /** The unique identifier for this webhook. */ - id: string; - links?: { - /** The canonical link to this resource within the API. */ - self: string; - }; - relationships: { - logs: { - links?: { - /** The link to retrieve the related resource(s) in this relationship. */ - related: string; - }; - }; - }; - /** The type of this resource: `webhooks` */ - type: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.up.com.au/api/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Up API - * @version v1 - * @baseUrl https://api.up.com.au/api/v1 - * @contact API Specification and Support (https://github.com/up-banking/api) - * - * The Up API gives you programmatic access to your balances and - * transaction data. You can request past transactions or set up - * webhooks to receive real-time events when new transactions hit your - * account. It’s new, it’s exciting and it’s just the beginning. - */ -export class Api extends HttpClient { - accounts = { - /** - * @description Retrieve a paginated list of all accounts for the currently authenticated user. The returned list is paginated and can be scrolled by following the `prev` and `next` links where present. - * - * @tags Accounts - * @name AccountsList - * @summary List accounts - * @request GET:/accounts - * @secure - */ - accountsList: ( - query?: { - /** - * The number of records to return in each page. - * @example 30 - */ - "page[size]"?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/accounts`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Retrieve a specific account by providing its unique identifier. - * - * @tags Accounts - * @name AccountsDetail - * @summary Retrieve account - * @request GET:/accounts/{id} - * @secure - */ - accountsDetail: (id: string, params: RequestParams = {}) => - this.request({ - path: `/accounts/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description Retrieve a list of all transactions for a specific account. The returned list is [paginated](#pagination) and can be scrolled by following the `next` and `prev` links where present. To narrow the results to a specific date range pass one or both of `filter[since]` and `filter[until]` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. - * - * @tags Transactions - * @name TransactionsDetail - * @summary List transactions by account - * @request GET:/accounts/{accountId}/transactions - * @secure - */ - transactionsDetail: ( - accountId: string, - query?: { - /** - * The category identifier for which to filter transactions. - * Both parent and child categories can be filtered through - * this parameter. Providing an invalid category identifier - * results in a `404` response. - * @example "good-life" - */ - "filter[category]"?: string; - /** - * The start date-time from which to return records, - * formatted according to rfc-3339. Not to be used for - * pagination purposes. - * @format date-time - * @example "2020-01-01T01:02:03+10:00" - */ - "filter[since]"?: string; - /** - * The transaction status for which to return records. This - * can be used to filter `HELD` transactions from those - * that are `SETTLED`. - * @example "HELD" - */ - "filter[status]"?: TransactionStatusEnum; - /** - * A transaction tag to filter for which to return records. - * If the tag does not exist, zero records are returned and - * a success response is given. - * @example "Holiday" - */ - "filter[tag]"?: string; - /** - * The end date-time up to which to return records, - * formatted according to rfc-3339. Not to be used for - * pagination purposes. - * @format date-time - * @example "2020-02-01T01:02:03+10:00" - */ - "filter[until]"?: string; - /** - * The number of records to return in each page. - * @example 30 - */ - "page[size]"?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/accounts/${accountId}/transactions`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; - categories = { - /** - * @description Retrieve a list of all categories and their ancestry. The returned list is not paginated. - * - * @tags Categories - * @name CategoriesList - * @summary List categories - * @request GET:/categories - * @secure - */ - categoriesList: ( - query?: { - /** - * The unique identifier of a parent category for which to - * return only its children. Providing an invalid category - * identifier results in a `404` response. - * @example "good-life" - */ - "filter[parent]"?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/categories`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Retrieve a specific category by providing its unique identifier. - * - * @tags Categories - * @name CategoriesDetail - * @summary Retrieve category - * @request GET:/categories/{id} - * @secure - */ - categoriesDetail: (id: string, params: RequestParams = {}) => - this.request({ - path: `/categories/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; - util = { - /** - * @description Make a basic ping request to the API. This is useful to verify that authentication is functioning correctly. On authentication success an HTTP `200` status is returned. On failure an HTTP `401` error response is returned. - * - * @tags Utility endpoints - * @name PingList - * @summary Ping - * @request GET:/util/ping - * @secure - */ - pingList: (params: RequestParams = {}) => - this.request({ - path: `/util/ping`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; - tags = { - /** - * @description Retrieve a list of all tags currently in use. The returned list is [paginated](#pagination) and can be scrolled by following the `next` and `prev` links where present. Results are ordered lexicographically. The `transactions` relationship for each tag exposes a link to get the transactions with the given tag. - * - * @tags Tags - * @name TagsList - * @summary List tags - * @request GET:/tags - * @secure - */ - tagsList: ( - query?: { - /** - * The number of records to return in each page. - * @example 50 - */ - "page[size]"?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/tags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; - transactions = { - /** - * @description Associates one or more tags with a specific transaction. No more than 6 tags may be present on any single transaction. Duplicate tags are silently ignored. An HTTP `204` is returned on success. The associated tags, along with this request URL, are also exposed via the `tags` relationship on the transaction resource returned from `/transactions/{id}`. - * - * @tags Tags - * @name RelationshipsTagsCreate - * @summary Add tags to transaction - * @request POST:/transactions/{transactionId}/relationships/tags - * @secure - */ - relationshipsTagsCreate: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => - this.request({ - path: `/transactions/${transactionId}/relationships/tags`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Disassociates one or more tags from a specific transaction. Tags that are not associated are silently ignored. An HTTP `204` is returned on success. The associated tags, along with this request URL, are also exposed via the `tags` relationship on the transaction resource returned from `/transactions/{id}`. - * - * @tags Tags - * @name RelationshipsTagsDelete - * @summary Remove tags from transaction - * @request DELETE:/transactions/{transactionId}/relationships/tags - * @secure - */ - relationshipsTagsDelete: (transactionId: string, data: UpdateTransactionTagsRequest, params: RequestParams = {}) => - this.request({ - path: `/transactions/${transactionId}/relationships/tags`, - method: "DELETE", - body: data, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Retrieve a list of all transactions across all accounts for the currently authenticated user. The returned list is [paginated](#pagination) and can be scrolled by following the `next` and `prev` links where present. To narrow the results to a specific date range pass one or both of `filter[since]` and `filter[until]` in the query string. These filter parameters **should not** be used for pagination. Results are ordered newest first to oldest last. - * - * @tags Transactions - * @name TransactionsList - * @summary List transactions - * @request GET:/transactions - * @secure - */ - transactionsList: ( - query?: { - /** - * The category identifier for which to filter transactions. - * Both parent and child categories can be filtered through - * this parameter. Providing an invalid category identifier - * results in a `404` response. - * @example "good-life" - */ - "filter[category]"?: string; - /** - * The start date-time from which to return records, - * formatted according to rfc-3339. Not to be used for - * pagination purposes. - * @format date-time - * @example "2020-01-01T01:02:03+10:00" - */ - "filter[since]"?: string; - /** - * The transaction status for which to return records. This - * can be used to filter `HELD` transactions from those - * that are `SETTLED`. - * @example "HELD" - */ - "filter[status]"?: TransactionStatusEnum; - /** - * A transaction tag to filter for which to return records. - * If the tag does not exist, zero records are returned and - * a success response is given. - * @example "Holiday" - */ - "filter[tag]"?: string; - /** - * The end date-time up to which to return records, - * formatted according to rfc-3339. Not to be used for - * pagination purposes. - * @format date-time - * @example "2020-02-01T01:02:03+10:00" - */ - "filter[until]"?: string; - /** - * The number of records to return in each page. - * @example 30 - */ - "page[size]"?: number; - /** Blablabla bla */ - someEnumName?: SomeEnumName; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/transactions`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Retrieve a specific transaction by providing its unique identifier. - * - * @tags Transactions - * @name TransactionsDetail - * @summary Retrieve transaction - * @request GET:/transactions/{id} - * @secure - */ - transactionsDetail: (id: string, params: RequestParams = {}) => - this.request({ - path: `/transactions/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - }; - webhooks = { - /** - * @description Retrieve a list of configured webhooks. The returned list is [paginated](#pagination) and can be scrolled by following the `next` and `prev` links where present. Results are ordered oldest first to newest last. - * - * @tags Webhooks - * @name WebhooksList - * @summary List webhooks - * @request GET:/webhooks - * @secure - */ - webhooksList: ( - query?: { - /** - * The number of records to return in each page. - * @example 30 - */ - "page[size]"?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/webhooks`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Create a new webhook with a given URL. The URL will receive webhook events as JSON-encoded `POST` requests. The URL must respond with a HTTP `200` status on success. There is currently a limit of 10 webhooks at any given time. Once this limit is reached, existing webhooks will need to be deleted before new webhooks can be created. Event delivery is retried with exponential backoff if the URL is unreachable or it does not respond with a `200` status. The response includes a `secretKey` attribute, which is used to sign requests sent to the webhook URL. It will not be returned from any other endpoints within the Up API. If the `secretKey` is lost, simply create a new webhook with the same URL, capture its `secretKey` and then delete the original webhook. See [Handling webhook events](#callback_post_webhookURL) for details on how to process webhook events. It is probably a good idea to test the webhook by [sending it a `PING` event](#post_webhooks_webhookId_ping) after creating it. - * - * @tags Webhooks - * @name WebhooksCreate - * @summary Create webhook - * @request POST:/webhooks - * @secure - */ - webhooksCreate: (data: CreateWebhookRequest, params: RequestParams = {}) => - this.request({ - path: `/webhooks`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Retrieve a specific webhook by providing its unique identifier. - * - * @tags Webhooks - * @name WebhooksDetail - * @summary Retrieve webhook - * @request GET:/webhooks/{id} - * @secure - */ - webhooksDetail: (id: string, params: RequestParams = {}) => - this.request({ - path: `/webhooks/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * @description Delete a specific webhook by providing its unique identifier. Once deleted, webhook events will no longer be sent to the configured URL. - * - * @tags Webhooks - * @name WebhooksDelete - * @summary Delete webhook - * @request DELETE:/webhooks/{id} - * @secure - */ - webhooksDelete: (id: string, params: RequestParams = {}) => - this.request({ - path: `/webhooks/${id}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * @description Send a `PING` event to a webhook by providing its unique identifier. This is useful for testing and debugging purposes. The event is delivered asynchronously and its data is returned in the response to this request. - * - * @tags Webhooks - * @name PingCreate - * @summary Ping webhook - * @request POST:/webhooks/{webhookId}/ping - * @secure - */ - pingCreate: (webhookId: string, params: RequestParams = {}) => - this.request({ - path: `/webhooks/${webhookId}/ping`, - method: "POST", - secure: true, - format: "json", - ...params, - }), - - /** - * @description Retrieve a list of delivery logs for a webhook by providing its unique identifier. This is useful for analysis and debugging purposes. The returned list is [paginated](#pagination) and can be scrolled by following the `next` and `prev` links where present. Results are ordered newest first to oldest last. Logs may be automatically purged after a period of time. - * - * @tags Webhooks - * @name LogsDetail - * @summary List webhook logs - * @request GET:/webhooks/{webhookId}/logs - * @secure - */ - logsDetail: ( - webhookId: string, - query?: { - /** - * The number of records to return in each page. - * @example 30 - */ - "page[size]"?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/webhooks/${webhookId}/logs`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/uspto.ts b/tests/generated/v3.0/uspto.ts deleted file mode 100644 index e93ddeeb..00000000 --- a/tests/generated/v3.0/uspto.ts +++ /dev/null @@ -1,335 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface DataSetList { - apis?: { - /** - * A URL to the API console for each API - * @format uriref - */ - apiDocumentationUrl?: string; - /** To be used as a dataset parameter value */ - apiKey?: string; - /** - * The URL describing the dataset's fields - * @format uriref - */ - apiUrl?: string; - /** To be used as a version parameter value */ - apiVersionNumber?: string; - }[]; - total?: number; -} - -export enum SomeEnum { - Foo = "Foo", - Bar = "Bar", - FooBar = "Foo Bar", -} - -export enum Status { - Resolved = "resolved", - New = "new", - InProgress = "in progress", -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "{scheme}://developer.uspto.gov/ds-api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title USPTO Data Set API - * @version 1.0.0 - * @baseUrl {scheme}://developer.uspto.gov/ds-api - * @contact Open Data Portal (https://developer.uspto.gov) - * - * The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters. - */ -export class Api extends HttpClient { - /** - * No description - * - * @tags metadata - * @name ListDataSets - * @summary List available data sets - * @request GET:/ - */ - listDataSets = (params: RequestParams = {}) => - this.request({ - path: `/`, - method: "GET", - format: "json", - ...params, - }); - - dataset = { - /** - * @description This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below. - * - * @tags metadata - * @name ListSearchableFields - * @summary Provides the general information about the API and the list of fields that can be used to query the dataset. - * @request GET:/{dataset}/{version}/fields - */ - listSearchableFields: (dataset: string, version: string, params: RequestParams = {}) => - this.request({ - path: `/${dataset}/${version}/fields`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This API is based on Solr/Lucense Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api. - * - * @tags search - * @name PerformSearch - * @summary Provides search capability for the data set with the given search criteria. - * @request POST:/{dataset}/{version}/records - */ - performSearch: ( - version: string, - dataset: string, - data: { - /** - * Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values. - * @default "*:*" - */ - criteria: string; - /** - * Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset. - * @default 100 - */ - rows?: number; - /** - * Starting record number. Default value is 0. - * @default 0 - */ - start?: number; - }, - params: RequestParams = {}, - ) => - this.request[], void>({ - path: `/${dataset}/${version}/records`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - format: "json", - ...params, - }), - }; -} diff --git a/tests/generated/v3.0/wrong-enum-subtypes.ts b/tests/generated/v3.0/wrong-enum-subtypes.ts deleted file mode 100644 index 8ce02cf0..00000000 --- a/tests/generated/v3.0/wrong-enum-subtypes.ts +++ /dev/null @@ -1,232 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Test = { - x?: "A-B"[]; -} & { - y?: string; -}; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Test - * @version test - */ -export class Api extends HttpClient {} diff --git a/tests/generated/v3.0/wrong-schema-names.ts b/tests/generated/v3.0/wrong-schema-names.ts deleted file mode 100644 index cb66d710..00000000 --- a/tests/generated/v3.0/wrong-schema-names.ts +++ /dev/null @@ -1,343 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Not found response - * @example "Not found" - */ -export type DF = string; - -/** - * Not found response - * @example "Not found" - */ -export type Type404 = string; - -/** - * Not found response - * @example "Not found" - */ -export type Type405 = string; - -/** - * Not found response - * @example "Not found" - */ -export type TypeFF = string; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Link Example - * @version 1.0.0 - */ -export class Api extends HttpClient { - v20 = { - /** - * No description - * - * @name GetUserByName - * @request GET:/2.0/users/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetRepositoriesByOwner - * @request GET:/2.0/repositories/{username} - */ - getRepositoriesByOwner: (username: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetRepository - * @request GET:/2.0/repositories/{username}/{slug} - */ - getRepository: (username: string, slug: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetPullRequestsByRepository - * @request GET:/2.0/repositories/{username}/{slug}/pullrequests - */ - getPullRequestsByRepository: ( - username: string, - slug: string, - query?: { - state?: "open" | "merged" | "declined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GetPullRequestsById - * @request GET:/2.0/repositories/{username}/{slug}/pullrequests/{pid} - */ - getPullRequestsById: (username: string, slug: string, pid: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests/${pid}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergePullRequest - * @request POST:/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge - */ - mergePullRequest: (username: string, slug: string, pid: string, params: RequestParams = {}) => - this.request({ - path: `/2.0/repositories/${username}/${slug}/pullrequests/${pid}/merge`, - method: "POST", - ...params, - }), - }; -} diff --git a/tests/helpers/assertGeneratedModule.js b/tests/helpers/assertGeneratedModule.js deleted file mode 100644 index 2e24e282..00000000 --- a/tests/helpers/assertGeneratedModule.js +++ /dev/null @@ -1,109 +0,0 @@ -const fs = require("node:fs"); -const gitDiff = require("git-diff"); -const _ = require("lodash"); - -const assertGeneratedModule = (pathToModule1, pathToModule2) => { - if (process.env.UPDATE_SNAPSHOTS) { - const output = fs.readFileSync(pathToModule1).toString("utf8"); - fs.writeFileSync(pathToModule2, output, { encoding: "utf8" }); - } else { - const output = fs.readFileSync(pathToModule1).toString("utf8"); - const expected = fs.readFileSync(pathToModule2).toString("utf8"); - - const diff = gitDiff(expected, output, { - color: true, - flags: - "--diff-algorithm=default --ignore-space-at-eol --ignore-cr-at-eol --ignore-space-change --ignore-all-space", - }); - - if (diff && diff.length) { - const minusLinePrefix1 = "-"; - const minusLinePrefix2 = "-"; - const plusLinePrefix1 = "+"; - const plusLinePrefix2 = "+"; - const plusLinePrefix3 = "+"; - const lines = diff.split("\n"); - const lineStructs = []; - let deletedLines = 0; - let addedLines = 0; - const printPos = (pos) => { - const fills = lines.length.toString().length; - return `${pos + 1}`.padStart(fills, "0") + ": "; - }; - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - if ( - line.startsWith(minusLinePrefix1) || - line.startsWith(minusLinePrefix2) - ) { - lineStructs.push({ - pos: i, - id: Math.random().toString() + i, - deleted: true, - line: `${printPos(i + addedLines)}${line}`, - }); - ++deletedLines; - } else if ( - line.startsWith(plusLinePrefix1) || - line.startsWith(plusLinePrefix2) || - line.startsWith(plusLinePrefix3) - ) { - lineStructs.push({ - pos: i, - id: Math.random().toString() + i, - added: true, - line: `${printPos(i - deletedLines)}${line}`, - }); - ++addedLines; - } else { - lineStructs.push({ - pos: i, - id: Math.random().toString() + i, - line: `${printPos(i - deletedLines)}${line}`, - }); - addedLines = 0; - deletedLines = 0; - } - } - - const computedLines = []; - for (let i = 0; i < lineStructs.length; i++) { - const lineStruct = lineStructs[i]; - if (lineStruct.deleted) { - const sliced = lineStructs.slice(i - 5, i + 5); - computedLines.push(...sliced); - } else if (lineStruct.added) { - const sliced = lineStructs.slice(i, i + 5 + 5); - computedLines.push(...sliced); - } - } - - const sortedLines = _.sortBy(_.uniqBy(computedLines, "id"), "pos"); - const maxLine = ( - sortedLines.map((v) => v.line).sort((a, b) => b.length - a.length)[0] || - "" - ).length; - const fixedLines = sortedLines.reduce((acc, computedLine, i, arr) => { - const prev = arr[i - 1]; - if ((prev && computedLine.pos - prev.pos > 10) || !i) { - acc.push("".padEnd(maxLine, "-")); - } - acc.push(computedLine.line); - if (arr.length - 1 === i) { - acc.push("".padEnd(maxLine, "-")); - } - return acc; - }, []); - console.log("\n"); - fixedLines.forEach((line) => { - console.log(line); - }); - console.error(new Error("expected another output").stack); - process.exit(1); - } - } - - return void 0; -}; - -module.exports = assertGeneratedModule; diff --git a/tests/helpers/createGeneratedApiInfos.js b/tests/helpers/createGeneratedApiInfos.js deleted file mode 100644 index a3a22a5d..00000000 --- a/tests/helpers/createGeneratedApiInfos.js +++ /dev/null @@ -1,7 +0,0 @@ -const fs = require("node:fs"); -const { resolve } = require("node:path"); - -module.exports = (pathToApis) => - (fs.readdirSync(pathToApis) || []).map((fileName) => - resolve(pathToApis, fileName), - ); diff --git a/tests/helpers/createSchemaInfos.js b/tests/helpers/createSchemaInfos.js deleted file mode 100644 index a7ae4fd0..00000000 --- a/tests/helpers/createSchemaInfos.js +++ /dev/null @@ -1,70 +0,0 @@ -const _ = require("lodash"); -const fs = require("node:fs"); -const path = require("node:path"); - -/** - * - * @param {{ absolutePathToSchemas: string; absoluteOutputPath: string }} options - * @returns {{ - * absolutePath: string; - * schemaFileName: string; - * apiFileName: string; - * outputPath: string; - * Exception: typeof Error; - * }[]} - */ -const createSchemaInfos = ({ absolutePathToSchemas, absoluteOutputPath }) => { - return (fs.readdirSync(absolutePathToSchemas) || []).reduce( - (schemas, fileName) => { - if ( - fileName.endsWith(".yaml") || - fileName.endsWith(".json") || - fileName.endsWith(".yml") - ) { - const apiFileName = fileName.replace(/.(yaml|json|yml)/g, ".ts"); - const outputPath = absoluteOutputPath || path.resolve(__dirname, "./"); - - schemas.push({ - absolutePath: path.resolve(absolutePathToSchemas, fileName), - schemaFileName: fileName, - apiFileName: apiFileName, - outputPath: outputPath, - Exception: class TestError extends Error { - constructor(message, ...datas) { - super(message); - - const stackLines = _.split(this.stack, "\n"); - const realStack = stackLines.slice(1); - const stackLineExtraSpace = - (realStack[0] && realStack[0].split("at")[0]) || ""; - - this.stack = [ - stackLines[0], - `${stackLineExtraSpace}at ${path.resolve( - outputPath, - apiFileName, - )}`, - ...realStack, - ].join("\n"); - - console.error(stackLines[0], ...datas); - console.error( - `${stackLineExtraSpace}at ${path.resolve( - outputPath, - apiFileName, - )}`, - ); - console.error(realStack.join("\n")); - process.exit(1); - } - }, - }); - } - - return schemas; - }, - [], - ); -}; - -module.exports = createSchemaInfos; diff --git a/tests/helpers/generateApiForTest.js b/tests/helpers/generateApiForTest.js deleted file mode 100644 index 6109df3f..00000000 --- a/tests/helpers/generateApiForTest.js +++ /dev/null @@ -1,21 +0,0 @@ -const { generateApi } = require("../../src"); -const dotenv = require("dotenv"); - -dotenv.config(); - -/** - * - * @param options {import("../../index").GenerateApiParams & { testName?: string }} - * @returns {Promise} - */ -const generateApiForTest = (options) => - generateApi({ - ...options, - silent: !process.env.TEST_WITH_DEBUG, - debug: process.env.TEST_WITH_DEBUG, - debugExtras: options.debugExtras || ["spec", options.testName], - }); - -module.exports = { - generateApiForTest: generateApiForTest, -}; diff --git a/tests/helpers/specGenerateOptions.js b/tests/helpers/specGenerateOptions.js deleted file mode 100644 index f57b2c9f..00000000 --- a/tests/helpers/specGenerateOptions.js +++ /dev/null @@ -1,6 +0,0 @@ -const path = require("node:path"); - -module.exports = { - name: "Api.ts", - input: path.resolve(__dirname, "../schemas/v2.0/petstore-simple.yaml"), -}; diff --git a/tests/helpers/validateGeneratedModule.js b/tests/helpers/validateGeneratedModule.js deleted file mode 100644 index 2e796a8e..00000000 --- a/tests/helpers/validateGeneratedModule.js +++ /dev/null @@ -1,87 +0,0 @@ -const ts = require("typescript"); -const tsconfig = require("../../tsconfig.json"); - -/** @type {ts.CompilerOptions} */ -const compilerOptions = { - allowJs: true, - noEmitOnError: true, - noImplicitAny: true, - target: ts.ScriptTarget.ES2018, - module: ts.ModuleKind.CommonJS, - strict: true, - alwaysStrict: true, - noEmit: true, -}; - -function compile(fileNames) { - console.log(`compiling ${fileNames.join(", ")}`); - - let program = ts.createProgram(fileNames, compilerOptions); - let emitResult = program.emit(); - - let allDiagnostics = ts - .getPreEmitDiagnostics(program) - .concat(emitResult.diagnostics); - - allDiagnostics.forEach((diagnostic) => { - if (diagnostic.file) { - let { line, character } = ts.getLineAndCharacterOfPosition( - diagnostic.file, - diagnostic.start, - ); - let message = ts.flattenDiagnosticMessageText( - diagnostic.messageText, - "\n", - ); - console.error( - `${diagnostic.file.fileName} (${line + 1},${ - character + 1 - }): ${message}`, - ); - } else { - console.error( - ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"), - ); - } - }); - - let exitCode = allDiagnostics.length || emitResult.emitSkipped ? 1 : 0; - - if (exitCode) { - console.error(`Process exiting with code '${exitCode}'.`); - process.exit(exitCode); - throw "TS validation failed"; - } - - return { - code: exitCode, - diagnostics: allDiagnostics, - }; -} - -module.exports = (pathToFile) => { - const { diagnostics, code } = compile([pathToFile]); - // const relativePathToFile = relative("", pathToFile); - - // console.log(`validating ${relativePathToFile}: errors ${diagnostics.length}`); - // diagnostics.forEach(({ messageText, file, start }) => { - // var message = ts.flattenDiagnosticMessageText(messageText, "\n"); - // if (!file) { - // console.error(`${relativePathToFile}\r\n`, message); - // return; - // } - // var { line, character } = file.getLineAndCharacterOfPosition(start); - // console.error( - // `${relativePathToFile}\r\n`, - // `${file.fileName} (${line + 1},${character + 1}): ${message}`, - // ); - // }); - - if (diagnostics.length) { - console.error(diagnostics); - console.error(new Error("Failed").stack); - process.exit(1); - } - - return diagnostics; -}; diff --git a/tests/schemas/v2.0/github-swagger.json b/tests/schemas/v2.0/github-swagger.json deleted file mode 100644 index a31a3b89..00000000 --- a/tests/schemas/v2.0/github-swagger.json +++ /dev/null @@ -1,23825 +0,0 @@ -{ - "swagger": "2.0", - "schemes": ["https"], - "host": "api.github.com", - "basePath": "/", - "info": { - "description": "Powerful collaboration, code review, and code management for open source and private projects.\n", - "termsOfService": "https://help.github.com/articles/github-terms-of-service/#b-api-terms", - "title": "GitHub", - "version": "v3", - "x-apisguru-categories": ["collaboration", "developer_tools"], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_github_profile_image.jpeg" - }, - "x-origin": [ - { - "format": "swagger", - "url": "https://raw.githubusercontent.com/APIs-guru/unofficial_openapi_specs/master/github.com/v3/swagger.yaml", - "version": "2.0" - } - ], - "x-preferred": false, - "x-providerName": "github.com", - "x-unofficialSpec": true - }, - "externalDocs": { - "url": "https://developer.github.com/v3/" - }, - "consumes": ["application/json"], - "produces": ["application/json"], - "securityDefinitions": { - "oauth_2_0": { - "authorizationUrl": "https://github.com/login/oauth/authorize", - "description": "OAuth2 is a protocol that lets external apps request authorization to private\ndetails in a user's GitHub account without getting their password. This is\npreferred over Basic Authentication because tokens can be limited to specific\ntypes of data, and can be revoked by users at any time.\n", - "flow": "accessCode", - "scopes": { - "admin:org": "", - "admin:org_hook": "", - "admin:public_key": "", - "admin:repo_hook": "", - "delete_repo": "", - "gist": "", - "notifications": "", - "public_repo": "", - "read:org": "", - "read:public_key": "", - "read:repo_hook": "", - "repo": "", - "repo:status": "", - "repo_deployment": "", - "user": "", - "user:email": "", - "user:follow": "", - "write:org": "", - "write:public_key": "", - "write:repo_hook": "" - }, - "tokenUrl": "https://github.com/login/oauth/access_token", - "type": "oauth2" - } - }, - "paths": { - "/someop": { - "post": { - "tags": ["someop"], - "operationId": "someOp_1", - "parameters": [ - { - "name": "queryParam1", - "in": "query", - "description": "description", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "name": "foo.bar.baz", - "in": "query", - "description": "description", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "name": "queryParam2", - "in": "query", - "description": "description", - "schema": { - "type": "integer", - "default": 20 - } - }, - { - "name": "query.param.bar.3", - "in": "query", - "description": "description", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "name": "queryParam3", - "in": "query", - "description": "description", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/definitions/events" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/hal+json": { - "schema": { - "$ref": "#/definitions/events" - } - } - } - }, - "400": { - "description": "Bad Request" - } - } - } - }, - "/emojis": { - "get": { - "description": "Lists all the emojis available to use on GitHub.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/emojis" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/someop/{fooId}/bars/bar-bar": { - "post": { - "tags": ["someop"], - "operationId": "someOp", - "parameters": [ - { - "name": "page", - "in": "query", - "description": "", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "name": "size", - "in": "query", - "description": "", - "schema": { - "type": "integer", - "default": 20 - } - }, - { - "name": "sort", - "in": "query", - "description": "", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/definitions/events" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/hal+json": { - "schema": { - "$ref": "#/definitions/events" - } - } - } - }, - "400": { - "description": "Bad Request" - } - } - } - }, - "/events": { - "get": { - "description": "List public events.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/feeds": { - "get": { - "description": "List Feeds.\nGitHub provides several timeline resources in Atom format. The Feeds API\n lists all the feeds available to the authenticating user.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/feeds" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists": { - "get": { - "description": "List the authenticated user's gists or if called anonymously, this will\nreturn all public gists.\n", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a gist.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postGist" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/public": { - "get": { - "description": "List all public gists.", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/starred": { - "get": { - "description": "List the authenticated user's starred gists.", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}": { - "delete": { - "description": "Delete a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/patchGist" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/comments": { - "get": { - "description": "List comments on a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a commen", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/comment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/forks": { - "post": { - "description": "Fork a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/star": { - "delete": { - "description": "Unstar a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a gist is starred.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Star a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Starred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gitignore/templates": { - "get": { - "description": "Listing available templates.\nList all templates available to pass as an option when creating a repository.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gitignore/templates/{language}": { - "get": { - "description": "Get a single template.", - "parameters": [ - { - "in": "path", - "name": "language", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore-lang" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/issues": { - "get": { - "description": "List issues.\nList all issues across all the authenticated user's visible repositories.\n", - "parameters": [ - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/issues/search/{owner}/{repository}/{state}/{keyword}": { - "get": { - "deprecated": true, - "description": "Find issues by state and keyword.", - "parameters": [ - { - "description": "The search term.", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "description": "Indicates the state of the issues to return. Can be either open or closed.", - "enum": ["open", "closed"], - "in": "path", - "name": "state", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "repository", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-issues-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/repos/search/{keyword}": { - "get": { - "deprecated": true, - "description": "Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter.", - "parameters": [ - { - "description": "The search term", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Filter results by language", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "The page number to fetch", - "in": "query", - "name": "start_page", - "type": "string" - }, - { - "description": "The sort field. One of stars, forks, or updated. Default: results are sorted by best match.", - "enum": ["updated", "stars", "forks"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-repositories-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/user/email/{email}": { - "get": { - "deprecated": true, - "description": "This API call is added for compatibility reasons only.", - "parameters": [ - { - "description": "The email address", - "in": "path", - "name": "email", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-user-by-email" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/user/search/{keyword}": { - "get": { - "deprecated": true, - "description": "Find users by keyword.", - "parameters": [ - { - "description": "The search term", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The page number to fetch", - "in": "query", - "name": "start_page", - "type": "string" - }, - { - "description": "The sort field. One of stars, forks, or updated. Default: results are sorted by best match.", - "enum": ["updated", "stars", "forks"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-users-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/markdown": { - "post": { - "description": "Render an arbitrary Markdown document", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/markdown" - } - } - ], - "produces": ["text/html"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/markdown/raw": { - "post": { - "consumes": ["text/plain"], - "description": "Render a Markdown document in raw mode", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "produces": ["text/html"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/meta": { - "get": { - "description": "This gives some information about GitHub.com, the service.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/meta" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/networks/{owner}/{repo}/events": { - "get": { - "description": "List public events for a network of repositories.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications": { - "get": { - "description": "List your notifications.\nList all notifications for the current user, grouped by repository.\n", - "parameters": [ - { - "description": "True to show notifications marked as read.", - "in": "query", - "name": "all", - "type": "boolean" - }, - { - "description": "True to show only notifications in which the user is directly participating\nor mentioned.\n", - "in": "query", - "name": "participating", - "type": "boolean" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Mark as read.\nMarking a notification as \"read\" removes it from the default view on GitHub.com.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/notificationMarkRead" - } - } - ], - "responses": { - "205": { - "description": "Marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications/threads/{id}": { - "get": { - "description": "View a single thread.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Mark a thread as read", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "205": { - "description": "Thread marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications/threads/{id}/subscription": { - "delete": { - "description": "Delete a Thread Subscription.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Thread Subscription.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Set a Thread Subscription.\nThis lets you subscribe to a thread, or ignore it. Subscribing to a thread\nis unnecessary if the user is already subscribed to the repository. Ignoring\na thread will mute all future notifications (until you comment or get @mentioned).\n", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/putSubscription" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}": { - "get": { - "description": "Get an Organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organization" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit an Organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/patchOrg" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organization" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/events": { - "get": { - "description": "List public events for an organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/issues": { - "get": { - "description": "List issues.\nList all issues for a given organization for the authenticated user.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/members": { - "get": { - "description": "Members list.\nList all users who are members of an organization. A member is a user tha\nbelongs to at least 1 team in the organization. If the authenticated user\nis also an owner of this organization then both concealed and public members\nwill be returned. If the requester is not an owner of the organization the\nquery will be redirected to the public members list.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "302": { - "description": "Response if requester is not an organization member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/members/{username}": { - "delete": { - "description": "Remove a member.\nRemoving a user from this list will remove them from all teams and they\nwill no longer have any access to the organization's repositories.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a user is, publicly or privately, a member of the organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content. Response if requester is an organization member and user is a member\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "302": { - "description": "Found. Response if requester is not an organization member\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not Found.\na. Response if requester is an organization member and user is not a member\nb. Response if requester is not an organization member and is inquiring about themselves\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/public_members": { - "get": { - "description": "Public members list.\nMembers of an organization can choose to have their membership publicized\nor not.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/public_members/{username}": { - "delete": { - "description": "Conceal a user's membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Concealed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check public membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a public member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a public member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Publicize a user's membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Publicized.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/repos": { - "get": { - "description": "List repositories for the specified org.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a new repository for the authenticated user. OAuth users must supply\nrepo scope.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postRepo" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/teams": { - "get": { - "description": "List teams.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create team.\nIn order to create a team, the authenticated user must be an owner of organization.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/orgTeamsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/rate_limit": { - "get": { - "description": "Get your current rate limit status\nNote: Accessing this endpoint does not count against your rate limit.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/rate_limit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}": { - "delete": { - "description": "Delete a Repository.\nDeleting a repository requires admin access. If OAuth is used, the delete_repo\nscope is required.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repoEdit" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/assignees": { - "get": { - "description": "List assignees.\nThis call lists all the available assignees (owner + collaborators) to which\nissues may be assigned.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/assignees" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/assignees/{assignee}": { - "get": { - "description": "Check assignee.\nYou may also check to see if a particular user is an assignee for a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the assignee.", - "in": "path", - "name": "assignee", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is an assignee.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User isn't an assignee.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/branches": { - "get": { - "description": "Get list of branches", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/branches" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/branches/{branch}": { - "get": { - "description": "Get Branch", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the branch.", - "in": "path", - "name": "branch", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/branch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/collaborators": { - "get": { - "description": "List.\nWhen authenticating as an organization owner of an organization-owned\nrepository, all organization owners are included in the list of\ncollaborators. Otherwise, only users with access to the repository are\nreturned in the collaborators list.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/collaborators/{user}": { - "delete": { - "description": "Remove collaborator.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Collaborator removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if user is a collaborator", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a collaborator.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a collaborator.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Add collaborator.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Collaborator added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/comments": { - "get": { - "description": "List commit comments for a repository.\nComments are ordered by ascending ID.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/comments/{commentId}": { - "delete": { - "description": "Delete a commit comment", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits": { - "get": { - "description": "List commits on a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Sha or branch to start listing commits from.", - "in": "query", - "name": "sha", - "type": "string" - }, - { - "description": "Only commits containing this file path will be returned.", - "in": "query", - "name": "path", - "type": "string" - }, - { - "description": "GitHub login, name, or email by which to filter by commit author.", - "in": "query", - "name": "author", - "type": "string" - }, - { - "description": "ISO 8601 Date - Only commits before this date will be returned.", - "in": "query", - "name": "until", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{ref}/status": { - "get": { - "description": "Get the combined Status for a specific Ref\nThe Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details.\nTo access this endpoint during the preview period, you must provide a custom media type in the Accept header:\napplication/vnd.github.she-hulk-preview+json\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/refStatus" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{shaCode}": { - "get": { - "description": "Get a single commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{shaCode}/comments": { - "get": { - "description": "List comments for a single commitList comments for a single commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commitCommentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/compare/{baseId}...{headId}": { - "get": { - "description": "Compare two commits", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "baseId", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "headId", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/compare-commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/contents/{path}": { - "delete": { - "description": "Delete a file.\nThis method deletes a file in a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deleteFileBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deleteFile" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get contents.\nThis method returns the contents of a file or directory in a repository.\nFiles and symlinks support a custom media type for getting the raw content.\nDirectories and submodules do not support custom media types.\nNote: This API supports files up to 1 megabyte in size.\nHere can be many outcomes. For details see \"http://developer.github.com/v3/repos/contents/\"\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "The content path.", - "in": "query", - "name": "path", - "type": "string" - }, - { - "description": "The String name of the Commit/Branch/Tag. Defaults to 'master'.", - "in": "query", - "name": "ref", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contents-path" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Create a file.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/createFileBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/createFile" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/contributors": { - "get": { - "description": "Get list of contributors.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Set to 1 or true to include anonymous contributors in results.", - "in": "query", - "name": "anon", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/deployments": { - "get": { - "description": "Users with pull access can view deployments for a repository", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo-deployments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Users with push access can create a deployment for a given ref", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deployment" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deployment-resp" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/deployments/{id}/statuses": { - "get": { - "description": "Users with pull access can view deployment statuses for a deployment", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The Deployment ID to list the statuses from.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deployment-statuses" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Deployment Status\nUsers with push access can create deployment statuses for a given deployment:\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The Deployment ID to list the statuses from.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deployment-statuses-create" - } - } - ], - "responses": { - "201": { - "description": "ok", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/downloads": { - "get": { - "deprecated": true, - "description": "Deprecated. List downloads for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/downloads" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/downloads/{downloadId}": { - "delete": { - "deprecated": true, - "description": "Deprecated. Delete a download.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of download.", - "in": "path", - "name": "downloadId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "Deprecated. Get a single download.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of download.", - "in": "path", - "name": "downloadId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/download" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/events": { - "get": { - "description": "Get list of repository events.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/forks": { - "get": { - "description": "List forks.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "newes", - "enum": ["newes", "oldes", "watchers"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/forks" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a fork.\nForking a Repository happens asynchronously. Therefore, you may have to wai\na short period before accessing the git objects. If this takes longer than 5\nminutes, be sure to contact Support.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/forkBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/blobs": { - "post": { - "description": "Create a Blob.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/blob" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/blobs" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/blobs/{shaCode}": { - "get": { - "description": "Get a Blob.\nSince blobs can be any arbitrary binary data, the input and responses for\nthe blob API takes an encoding parameter that can be either utf-8 or\nbase64. If your data cannot be losslessly sent as a UTF-8 string, you can\nbase64 encode it.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/blob" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/commits": { - "post": { - "description": "Create a Commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repoCommitBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitCommit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/commits/{shaCode}": { - "get": { - "description": "Get a Commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoCommit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/refs": { - "get": { - "description": "Get all References", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/refs" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/refsBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/refs/{ref}": { - "delete": { - "description": "Delete a Reference\nExample: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a\nExample: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/gitRefPatch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/tags": { - "post": { - "description": "Create a Tag Object.\nNote that creating a tag object does not create the reference that makes a\ntag in Git. If you want to create an annotated tag in Git, you have to do\nthis call to create the tag object, and then create the refs/tags/[tag]\nreference. If you want to create a lightweight tag, you only have to create\nthe tag reference - this call would be unnecessary.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tagBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tag" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/tags/{shaCode}": { - "get": { - "description": "Get a Tag.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tag" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/trees": { - "post": { - "description": "Create a Tree.\nThe tree creation API will take nested entries as well. If both a tree and\na nested path modifying that tree are specified, it will overwrite the\ncontents of that tree with the new path contents and write a new tree out.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tree" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/trees" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/trees/{shaCode}": { - "get": { - "description": "Get a Tree.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Tree SHA.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Get a Tree Recursively. (0 or 1)", - "in": "query", - "name": "recursive", - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tree" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks": { - "get": { - "description": "Get list of hooks.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/hookBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks/{hookId}": { - "delete": { - "description": "Delete a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get single hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/hookBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks/{hookId}/tests": { - "post": { - "description": "Test a push hook.\nThis will trigger the hook with the latest push to the current repository\nif the hook is subscribed to push events. If the hook is not subscribed\nto push events, the server will respond with 204 but no test POST will\nbe generated.\nNote: Previously /repos/:owner/:repo/hooks/:id/tes\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Hook is triggered.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues": { - "get": { - "description": "List issues for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create an issue.\nAny user with pull access to a repository can create an issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/issue" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/comments": { - "get": { - "description": "List comments in a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/events": { - "get": { - "description": "List issue events for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvents" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/events/{eventId}": { - "get": { - "description": "Get a single event.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of the event.", - "in": "path", - "name": "eventId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvent" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}": { - "get": { - "description": "Get a single issue", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit an issue.\nIssue owners and users with push access can edit an issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/issue" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/comments": { - "get": { - "description": "List comments on an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/events": { - "get": { - "description": "List events for an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvents" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/labels": { - "delete": { - "description": "Remove all labels from an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "List labels on an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Add labels to an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Replace all labels for an issue.\nSending an empty array ([]) will remove all Labels from the Issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/labels/{name}": { - "delete": { - "description": "Remove a label from an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/keys": { - "get": { - "description": "Get list of keys.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/keys" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a key.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-keys-post" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/keys/{keyId}": { - "delete": { - "description": "Delete a key.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a key", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/labels": { - "get": { - "description": "List all labels for this repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/labels/{name}": { - "delete": { - "description": "Delete a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/languages": { - "get": { - "description": "List languages.\nList languages for the specified repository. The value on the right of a\nlanguage is the number of bytes of code written in that language.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/languages" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/merges": { - "post": { - "description": "Perform a merge.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mergesBody" - } - } - ], - "responses": { - "201": { - "description": "Successful Response (The resulting merge commit)", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesSuccessful" - } - }, - "204": { - "description": "No-op response (base already contains the head, nothing to merge)", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Missing base response or missing head response", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesConflict" - } - }, - "409": { - "description": "Merge conflict response.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesConflict" - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones": { - "get": { - "description": "List milestones for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "open", - "description": "String to filter by state.", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "default": "due_date", - "description": "", - "enum": ["due_date", "completeness"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/milestoneUpdate" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones/{number}": { - "delete": { - "description": "Delete a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/milestoneUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones/{number}/labels": { - "get": { - "description": "Get labels for every issue in a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/notifications": { - "get": { - "description": "List your notifications in a repository\nList all notifications for the current user.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "True to show notifications marked as read.", - "in": "query", - "name": "all", - "type": "boolean" - }, - { - "description": "True to show only notifications in which the user is directly participating\nor mentioned.\n", - "in": "query", - "name": "participating", - "type": "boolean" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Mark notifications as read in a repository.\nMarking all notifications in a repository as \"read\" removes them from the\ndefault view on GitHub.com.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/notificationMarkRead" - } - } - ], - "responses": { - "205": { - "description": "Marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls": { - "get": { - "description": "List pull requests.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "open", - "description": "String to filter by state.", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Filter pulls by head user and branch name in the format of 'user:ref-name'.\nExample: github:new-script-format.\n", - "in": "query", - "name": "head", - "type": "string" - }, - { - "description": "Filter pulls by base branch name. Example - gh-pages.", - "in": "query", - "name": "base", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/comments": { - "get": { - "description": "List comments in a repository.\nBy default, Review Comments are ordered by ascending ID.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}": { - "get": { - "description": "Get a single pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullRequest" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/comments": { - "get": { - "description": "List comments on a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a comment.\n #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ )\n description: |\n Alternative Input.\n Instead of passing commit_id, path, and position you can reply to an\n existing Pull Request Comment like this:\n\n body\n Required string\n in_reply_to\n Required number - Comment id to reply to.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullsCommentPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/commits": { - "get": { - "description": "List commits on a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/files": { - "get": { - "description": "List pull requests files.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/merge": { - "get": { - "description": "Get if a pull request has been merged.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Pull request has been merged.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Pull request has not been merged.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Merge a pull request (Merge Button's)", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mergePullBody" - } - } - ], - "responses": { - "200": { - "description": "Response if merge was successful.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/merge" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "405": { - "description": "Response if merge cannot be performed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/merge" - } - } - } - } - }, - "/repos/{owner}/{repo}/readme": { - "get": { - "description": "Get the README.\nThis method returns the preferred README for a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The String name of the Commit/Branch/Tag. Defaults to master.", - "in": "query", - "name": "ref", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contents-path" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases": { - "get": { - "description": "Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/releases" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a release\nUsers with push access to the repository can create a release.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/release-create" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/assets/{id}": { - "delete": { - "description": "Delete a release asset", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single release asset", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/asset" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a release asset\nUsers with push access to the repository can edit a release asset.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/assetPatch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/asset" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/{id}": { - "delete": { - "description": "Users with push access to the repository can delete a release.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Users with push access to the repository can edit a release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/release-create" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/{id}/assets": { - "get": { - "description": "List assets for a release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/assets" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stargazers": { - "get": { - "description": "List Stargazers.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/code_frequency": { - "get": { - "description": "Get the number of additions and deletions per week.\nReturns a weekly aggregate of the number of additions and deletions pushed\nto a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/codeFrequencyStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/commit_activity": { - "get": { - "description": "Get the last year of commit activity data.\nReturns the last year of commit activity grouped by week. The days array\nis a group of commits per day, starting on Sunday.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitActivityStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/contributors": { - "get": { - "description": "Get contributors list with additions, deletions, and commit counts.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contributorsStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/participation": { - "get": { - "description": "Get the weekly commit count for the repo owner and everyone else.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/participationStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/punch_card": { - "get": { - "description": "Get the number of commits per hour in each day.\nEach array contains the day number, hour number, and number of commits\n0-6 Sunday - Saturday\n0-23 Hour of day\nNumber of commits\n\nFor example, [2, 14, 25] indicates that there were 25 total commits, during\nthe 2.00pm hour on Tuesdays. All times are based on the time zone of\nindividual commits.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/codeFrequencyStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/statuses/{ref}": { - "get": { - "description": "List Statuses for a specific Ref.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ref to list the statuses from. It can be a SHA, a branch name, or a tag name.\n", - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/ref" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Status.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ref to list the statuses from. It can be a SHA, a branch name, or a tag name.\n", - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/headBranch" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/ref" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/subscribers": { - "get": { - "description": "List watchers.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/subscription": { - "delete": { - "description": "Delete a Repository Subscription.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Repository Subscription.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Set a Repository Subscription", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/subscriptionBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/tags": { - "get": { - "description": "Get list of tags.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tags" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/teams": { - "get": { - "description": "Get list of teams", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/watchers": { - "get": { - "description": "List Stargazers. New implementation.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/{archive_format}/{path}": { - "get": { - "description": "Get archive link.\nThis method will return a 302 to a URL to download a tarball or zipball\narchive for a repository. Please make sure your HTTP framework is\nconfigured to follow redirects or you will need to use the Location header\nto make a second GET request.\nNote: For private repositories, these links are temporary and expire quickly.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "enum": ["tarball", "zipball"], - "in": "path", - "name": "archive_format", - "required": true, - "type": "string" - }, - { - "description": "Valid Git reference, defaults to 'master'.", - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "302": { - "description": "Found.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repositories": { - "get": { - "description": "List all public repositories.\nThis provides a dump of every public repository, in the order that they\nwere created.\nNote: Pagination is powered exclusively by the since parameter. is the\nLink header to get the URL for the next page of repositories.\n", - "parameters": [ - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/code": { - "get": { - "description": "Search code.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported code\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier\nyou can restrict the search to just the file contents, the file path,\nor both.\n'Languages' Searches code based on the language it's written in.\n'Forks' Filters repositories based on the number of forks, and/or\nwhether code from forked repositories should be included in the results\nat all.\n'Size' Finds files that match a certain size (in bytes).\n'Path' Specifies the path that the resulting file must be at.\n'Extension' Matches files with a certain extension.\n'Users' or 'Repositories' Limits searches to a specific user or repository.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "Can only be 'indexed', which indicates how recently a file has been indexed\nby the GitHub search infrastructure. If not provided, results are sorted\nby best match.\n", - "enum": ["indexed"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-code" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/issues": { - "get": { - "description": "Find issues by state and keyword. (This method returns up to 100 results per page.)", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The q search term can also contain any combination of the supported issue search qualifiers:", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "The sort field. Can be comments, created, or updated. Default: results are sorted by best match.", - "enum": ["updated", "created", "comments"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/repositories": { - "get": { - "description": "Search repositories.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported repository\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier you\ncan restrict the search to just the repository name, description, readme,\nor any combination of these.\n'Size' Finds repositories that match a certain size (in kilobytes).\n'Forks' Filters repositories based on the number of forks, and/or whether\nforked repositories should be included in the results at all.\n'Created' and 'Last Updated' Filters repositories based on times of\ncreation, or when they were last updated.\n'Users or Repositories' Limits searches to a specific user or repository.\n'Languages' Searches repositories based on the language they are written in.\n'Stars' Searches repositories based on the number of stars.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "If not provided, results are sorted by best match.", - "enum": ["stars", "forks", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-repositories" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/users": { - "get": { - "description": "Search users.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported user\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier you\ncan restrict the search to just the username, public email, full name,\nlocation, or any combination of these.\n'Repository count' Filters users based on the number of repositories they\nhave.\n'Location' Filter users by the location indicated in their profile.\n'Language' Search for users that have repositories that match a certain\nlanguage.\n'Created' Filter users based on when they joined.\n'Followers' Filter users based on the number of followers they have.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "If not provided, results are sorted by best match.", - "enum": ["followers", "repositories", "joined"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}": { - "delete": { - "description": "Delete team.\nIn order to delete a team, the authenticated user must be an owner of the\norg that the team is associated with.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get team.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit team.\nIn order to edit a team, the authenticated user must be an owner of the org\nthat the team is associated with.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/editTeam" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/members": { - "get": { - "description": "List team members.\nIn order to list members in a team, the authenticated user must be a member\nof the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/members/{username}": { - "delete": { - "deprecated": true, - "description": "The \"Remove team member\" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships.\n\nRemove team member.\nIn order to remove a user from a team, the authenticated user must have 'admin'\npermissions to the team or be an owner of the org that the team is associated\nwith.\nNOTE This does not delete the user, it just remove them from the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "The \"Get team member\" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships.\n\nGet team member.\nIn order to get if a user is a member of a team, the authenticated user mus\nbe a member of the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "deprecated": true, - "description": "The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams.\n\nAdd team member.\nIn order to add a user to a team, the authenticated user must have 'admin'\npermissions to the team or be an owner of the org that the team is associated\nwith.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "422": { - "description": "If you attempt to add an organization to a team, you will get this.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organizationAsTeamMember" - } - } - } - } - }, - "/teams/{teamId}/memberships/{username}": { - "delete": { - "description": "Remove team membership.\nIn order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get team membership.\nIn order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "User is a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamMembership" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User has no membership with team", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Add team membership.\nIn order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with.\n\nIf the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team.\n\nIf the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "Team member added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamMembership" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "422": { - "description": "If you attempt to add an organization to a team, you will get this.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organizationAsTeamMember" - } - } - } - } - }, - "/teams/{teamId}/repos": { - "get": { - "description": "List team repos", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamRepos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/repos/{owner}/{repo}": { - "delete": { - "description": "In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a team manages a repository", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a organization.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user": { - "get": { - "description": "Get the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-update" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/emails": { - "delete": { - "description": "Delete email address(es).\nYou can include a single email address or an array of addresses.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-emails" - } - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "List email addresses for a user.\nIn the final version of the API, this method will return an array of hashes\nwith extended information for each email address indicating if the address\nhas been verified and if it's primary email address for GitHub.\nUntil API v3 is finalized, use the application/vnd.github.v3 media type to\nget other response format.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "produces": ["application/vnd.github.v3"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-emails" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Add email address(es).\nYou can post a single email address or an array of addresses.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/followers": { - "get": { - "description": "List the authenticated user's followers", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/following": { - "get": { - "description": "List who the authenticated user is following.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/following/{username}": { - "delete": { - "description": "Unfollow a user.\nUnfollowing a user requires the user to be logged in and authenticated with\nbasic auth or OAuth with the user:follow scope.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User unfollowed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if you are following a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Response if you are following this user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Response if you are not following this user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Follow a user.\nFollowing a user requires the user to be logged in and authenticated with\nbasic auth or OAuth with the user:follow scope.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "You are now following the user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/issues": { - "get": { - "description": "List issues.\nList all issues across owned and member repositories for the authenticated\nuser.\n", - "parameters": [ - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/keys": { - "get": { - "description": "List your public keys.\nLists the current user's keys. Management of public keys via the API requires\nthat you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a public key.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-keys-post" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/keys/{keyId}": { - "delete": { - "description": "Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope.", - "parameters": [ - { - "description": "ID of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single public key.", - "parameters": [ - { - "description": "ID of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/orgs": { - "get": { - "description": "List public and private organizations for the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/repos": { - "get": { - "description": "List repositories for the authenticated user. Note that this does not include\nrepositories owned by organizations which the user can access. You can lis\nuser organizations and list organization repositories separately.\n", - "parameters": [ - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a new repository for the authenticated user. OAuth users must supply\nrepo scope.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postRepo" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/starred": { - "get": { - "description": "List repositories being starred by the authenticated user.", - "parameters": [ - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "default": "created", - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/starred/{owner}/{repo}": { - "delete": { - "description": "Unstar a repository", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Unstarred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if you are starring a repository.", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "This repository is starred by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "This repository is not starred by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Star a repository.", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository starred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/subscriptions": { - "get": { - "description": "List repositories being watched by the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/subscriptions/{owner}/{repo}": { - "delete": { - "deprecated": true, - "description": "Stop watching a repository", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Unwatched.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "Check if you are watching a repository.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository is watched by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Repository is not watched by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "deprecated": true, - "description": "Watch a repository.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository is watched.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/teams": { - "get": { - "description": "List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams-list" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users": { - "get": { - "description": "Get all users.\nThis provides a dump of every user, in the order that they signed up for GitHub.\nNote: Pagination is powered exclusively by the since parameter. Use the Link\nheader to get the URL for the next page of users.\n", - "parameters": [ - { - "description": "The integer ID of the last user that you've seen.", - "in": "query", - "name": "since", - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}": { - "get": { - "description": "Get a single user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/events": { - "get": { - "description": "If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/events/orgs/{org}": { - "get": { - "description": "This is the user's organization dashboard. You must be authenticated as the user to view this.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/followers": { - "get": { - "description": "List a user's followers", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/following/{targetUser}": { - "get": { - "description": "Check if one user follows another.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Name of user.", - "in": "path", - "name": "targetUser", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Response if user follows target user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Response if user does not follow target user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/gists": { - "get": { - "description": "List a users gists.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/keys": { - "get": { - "description": "List public keys for a user.\nLists the verified public keys for a user. This is accessible by anyone.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/orgs": { - "get": { - "description": "List all public organizations for a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/received_events": { - "get": { - "description": "These are events that you'll only see public events.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/received_events/public": { - "get": { - "description": "List public events that a user has received", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/repos": { - "get": { - "description": "List public repositories for the specified user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/starred": { - "get": { - "description": "List repositories being starred by a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/subscriptions": { - "get": { - "description": "List repositories being watched by a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - } - }, - "definitions": { - "actor": { - "description": "A user or organization", - "properties": { - "avatar_url": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "blog": { - "description": "The website URL from the profile page", - "type": "string" - }, - "collaborators": { - "type": "integer" - }, - "company": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "disk_usage": { - "type": "integer" - }, - "email": { - "description": "Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile).", - "type": "string" - }, - "followers": { - "type": "integer" - }, - "followers_url": { - "type": "string" - }, - "following": { - "type": "integer" - }, - "following_url": { - "type": "string" - }, - "gists_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "location": { - "type": "string" - }, - "login": { - "description": "The account username", - "type": "string" - }, - "name": { - "description": "The full account name", - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "owned_private_repos": { - "type": "integer" - }, - "plan": { - "properties": { - "collaborators": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "private_repos": { - "type": "integer" - }, - "space": { - "type": "integer" - } - }, - "type": "object" - }, - "private_gists": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "public_repos": { - "type": "integer" - }, - "starred_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "total_private_repos": { - "type": "integer" - }, - "type": { - "enum": ["User", "Organization"] - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "asset": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "number" - }, - "id": { - "type": "number" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "number" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "assetPatch": { - "properties": { - "label": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "assets": { - "items": { - "$ref": "#/definitions/asset" - }, - "type": "array" - }, - "assignees": { - "items": { - "$ref": "#/definitions/user" - }, - "type": "array" - }, - "blob": { - "properties": { - "content": { - "type": "string" - }, - "encoding": { - "enum": ["utf-8", "base64"] - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - }, - "blobs": { - "properties": { - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "branch": { - "properties": { - "_links": { - "properties": { - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "branches": { - "items": { - "properties": { - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "codeFrequencyStats": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "comment": { - "properties": { - "body": { - "type": "string" - } - }, - "type": "object" - }, - "commentBody": { - "properties": { - "body": { - "type": "string" - } - }, - "required": ["body"], - "type": "object" - }, - "comments": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "files": { - "items": { - "properties": { - "additions": { - "type": "integer" - }, - "blob_url": { - "type": "string" - }, - "changes": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "patch": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "stats": { - "properties": { - "additions": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "commitActivityStats": { - "items": { - "properties": { - "days": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "total": { - "type": "integer" - }, - "week": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - }, - "commitComment": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "commitCommentBody": { - "properties": { - "body": { - "type": "string" - }, - "line": { - "description": "Deprecated - Use position parameter instead.", - "type": "string" - }, - "number": { - "description": "Line number in the file to comment on. Defaults to null.", - "type": "string" - }, - "path": { - "description": "Relative path of the file to comment on.", - "type": "string" - }, - "position": { - "description": "Line index in the diff to comment on.", - "type": "integer" - }, - "sha": { - "description": "SHA of the commit to comment on.", - "type": "string" - } - }, - "required": ["sha", "body"], - "type": "object" - }, - "commits": { - "items": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "compare-commits": { - "properties": { - "ahead_by": { - "type": "integer" - }, - "base_commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "behind_by": { - "type": "integer" - }, - "commits": { - "items": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "diff_url": { - "type": "string" - }, - "files": { - "items": { - "properties": { - "additions": { - "type": "integer" - }, - "blob_url": { - "type": "string" - }, - "changes": { - "type": "integer" - }, - "contents_url": { - "type": "string" - }, - "deletions": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "patch": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "permalink_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "total_commits": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "contents-path": { - "properties": { - "_links": { - "properties": { - "git": { - "type": "string" - }, - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "contributorsStats": { - "items": { - "properties": { - "author": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "total": { - "description": "The Total number of commits authored by the contributor.", - "type": "integer" - }, - "weeks": { - "items": { - "properties": { - "a": { - "description": "Number of additions.", - "type": "integer" - }, - "c": { - "description": "Number of commits.", - "type": "integer" - }, - "d": { - "description": "Number of deletions.", - "type": "integer" - }, - "w": { - "description": "Start of the week.", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "createFile": { - "properties": { - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "properties": { - "_links": { - "properties": { - "git": { - "type": "string" - }, - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "createFileBody": { - "properties": { - "committer": { - "properties": { - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "deleteFile": { - "properties": { - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "html_url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "parents": { - "properties": { - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - } - }, - "type": "object" - }, - "deleteFileBody": { - "properties": { - "committer": { - "properties": { - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "deployment": { - "properties": { - "description": { - "type": "string" - }, - "payload": { - "properties": { - "deploy_user": { - "type": "string" - }, - "environment": { - "type": "string" - }, - "room_id": { - "type": "number" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - } - }, - "type": "object" - }, - "deployment-resp": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "deployment-statuses": { - "items": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "deployment-statuses-create": { - "properties": { - "description": { - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - } - }, - "type": "object" - }, - "download": { - "properties": { - "content_type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "downloads": { - "items": { - "$ref": "#/definitions/download" - }, - "type": "array" - }, - "editTeam": { - "properties": { - "name": { - "type": "string" - }, - "permission": { - "enum": ["pull", "push", "admin"] - } - }, - "required": ["name"], - "type": "object" - }, - "emailsPost": { - "items": { - "type": "string" - }, - "type": "array" - }, - "emojis": { - "additionalProperties": { - "description": "A URL for an image representing this emoji", - "type": "string" - }, - "type": "object" - }, - "event": { - "properties": { - "actor": { - "$ref": "#/definitions/actor" - }, - "created_at": { - "type": "object" - }, - "id": { - "type": "integer" - }, - "org": { - "$ref": "#/definitions/organization" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "public": { - "type": "boolean" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "events": { - "items": { - "$ref": "#/definitions/event" - }, - "type": "array" - }, - "feeds": { - "properties": { - "_links": { - "properties": { - "current_user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_actor": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_organization": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_public": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "timeline": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - } - } - }, - "current_user_actor_url": { - "type": "string" - }, - "current_user_organization_url": { - "type": "string" - }, - "current_user_public": { - "type": "string" - }, - "current_user_url": { - "type": "string" - }, - "timeline_url": { - "type": "string" - }, - "user_url": { - "type": "string" - } - }, - "type": "object" - }, - "forkBody": { - "properties": { - "organization": { - "type": "string" - } - }, - "type": "object" - }, - "forks": { - "$ref": "#/definitions/repos" - }, - "gist": { - "properties": { - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "description": { - "type": "string" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "forks": { - "items": { - "properties": { - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "history": { - "items": { - "properties": { - "change_status": { - "properties": { - "additions": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "committed_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - }, - "version": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "gists": { - "items": { - "properties": { - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "gitCommit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "type": "string" - }, - "tree": { - "type": "string" - } - }, - "type": "object" - }, - "gitRefPatch": { - "properties": { - "force": { - "type": "boolean" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "gitignore": { - "items": {}, - "type": "array" - }, - "gitignore-lang": { - "properties": { - "name": { - "type": "string" - }, - "source": { - "type": "string" - } - }, - "type": "object" - }, - "headBranch": { - "properties": { - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "hook": { - "items": { - "properties": { - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "content_type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "events": { - "items": { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - }, - "type": "array" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "hookBody": { - "properties": { - "active": { - "type": "boolean" - }, - "add_events": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "issue": { - "properties": { - "assignee": { - "type": "string" - }, - "body": { - "type": "string" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "milestone": { - "type": "number" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "issueEvent": { - "properties": { - "actor": { - "$ref": "#/definitions/actor" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "event": { - "type": "string" - }, - "issue": { - "properties": { - "assignee": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "issueEvents": { - "items": { - "$ref": "#/definitions/issueEvent" - }, - "type": "array" - }, - "issues": { - "items": { - "properties": { - "assignee": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "issuesComment": { - "properties": { - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "issuesComments": { - "items": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "keys": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "label": { - "properties": { - "color": { - "maxLength": 6, - "minLength": 6, - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": { - "items": { - "properties": { - "color": { - "maxLength": 6, - "minLength": 6, - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "languages": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "markdown": { - "properties": { - "context": { - "type": "string" - }, - "mode": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "merge": { - "properties": { - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "mergePullBody": { - "properties": { - "commit_message": { - "type": "string" - } - }, - "type": "object" - }, - "mergesBody": { - "properties": { - "base": { - "type": "string" - }, - "commit_message": { - "type": "string" - }, - "head": { - "type": "string" - } - }, - "type": "object" - }, - "mergesConflict": { - "properties": { - "message": { - "description": "Error message", - "type": "string" - } - }, - "type": "object" - }, - "mergesSuccessful": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "comments_url": { - "type": "string" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "comment_count": { - "type": "integer" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "meta": { - "properties": { - "git": { - "items": { - "description": "An Array of IP addresses in CIDR format specifying the Git servers at GitHub.", - "type": "string" - }, - "type": "array" - }, - "hooks": { - "items": { - "description": "An Array of IP addresses in CIDR format specifying the addresses that incoming service hooks will originate from.", - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestoneUpdate": { - "properties": { - "description": { - "type": "string" - }, - "due_on": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "notificationMarkRead": { - "properties": { - "last_read_at": { - "type": "string" - } - }, - "type": "object" - }, - "notifications": { - "properties": { - "id": { - "type": "integer" - }, - "last_read_at": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "repository": { - "properties": { - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "full_name": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "private": { - "type": "boolean" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "subject": { - "properties": { - "latest_comment_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "unread": { - "type": "boolean" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "orgTeamsPost": { - "properties": { - "name": { - "type": "string" - }, - "permission": { - "enum": ["pull", "push", "admin"] - }, - "repo_names": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": ["name"], - "type": "object" - }, - "organization": { - "allOf": [ - { - "$ref": "#/definitions/actor" - }, - { - "description": "A GitHub organization" - } - ], - "type": "object" - }, - "organizationAsTeamMember": { - "properties": { - "errors": { - "items": { - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "resource": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "participationStats": { - "properties": { - "all": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "owner": { - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "patchGist": { - "properties": { - "description": { - "type": "string" - }, - "files": { - "properties": { - "delete_this_file.txt": { - "type": "string" - }, - "file1.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "new_file.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "old_name.txt": { - "properties": { - "content": { - "type": "string" - }, - "filename": { - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "type": "object" - }, - "patchOrg": { - "properties": { - "billing_email": { - "description": "Billing email address. This address is not publicized.", - "type": "string" - }, - "company": { - "type": "string" - }, - "email": { - "description": "Publicly visible email address.", - "type": "string" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "postGist": { - "properties": { - "description": { - "type": "string" - }, - "files": { - "properties": { - "file1.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "public": { - "type": "boolean" - } - }, - "type": "object" - }, - "postRepo": { - "properties": { - "auto_init": { - "description": "True to create an initial commit with empty README. Default is false.", - "type": "boolean" - }, - "description": { - "type": "string" - }, - "gitignore_template": { - "description": "Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, \"Haskell\" Ignored if auto_init parameter is not provided. ", - "type": "string" - }, - "has_downloads": { - "description": "True to enable downloads for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_issues": { - "description": "True to enable issues for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_wiki": { - "description": "True to enable the wiki for this repository, false to disable it. Default is true.", - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "name": { - "type": "string" - }, - "private": { - "description": "True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account.", - "type": "boolean" - }, - "team_id": { - "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.", - "type": "integer" - } - }, - "required": ["name"], - "type": "object" - }, - "pullRequest": { - "properties": { - "_links": { - "properties": { - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "additions": { - "type": "integer" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "changed_files": { - "type": "integer" - }, - "closed_at": { - "type": "string" - }, - "comments": { - "type": "integer" - }, - "commits": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "deletions": { - "type": "integer" - }, - "diff_url": { - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "merge_commit_sha": { - "type": "string" - }, - "mergeable": { - "type": "boolean" - }, - "merged": { - "type": "boolean" - }, - "merged_at": { - "type": "string" - }, - "merged_by": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "patch_url": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "pullUpdate": { - "properties": { - "body": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "pulls": { - "items": { - "properties": { - "_links": { - "properties": { - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "patch_url": { - "type": "string" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "pullsComment": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "pullsCommentPost": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "number" - } - }, - "type": "object" - }, - "pullsComments": { - "items": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "pullsPost": { - "properties": { - "base": { - "type": "string" - }, - "body": { - "type": "string" - }, - "head": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "putSubscription": { - "properties": { - "created_at": { - "type": "string" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "object" - }, - "subscribed": { - "type": "boolean" - }, - "thread_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "rate_limit": { - "properties": { - "rate": { - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset": { - "type": "integer" - } - } - } - }, - "type": "object" - }, - "ref": { - "items": { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "refStatus": { - "items": { - "properties": { - "commit_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "repository_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "state": { - "type": "string" - }, - "statuses": { - "items": { - "properties": { - "context": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "number" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "refs": { - "items": { - "properties": { - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "refsBody": { - "properties": { - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "release": { - "properties": { - "assets": { - "items": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "assets_url": { - "type": "string" - }, - "author": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "tag_name": { - "type": "string" - }, - "tarball_url": { - "type": "string" - }, - "target_commitish": { - "type": "string" - }, - "upload_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "zipball_url": { - "type": "string" - } - }, - "type": "object" - }, - "release-create": { - "properties": { - "body": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "tag_name": { - "type": "string" - }, - "target_commitish": { - "type": "string" - } - }, - "type": "object" - }, - "releases": { - "items": { - "properties": { - "assets": { - "items": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "assets_url": { - "type": "string" - }, - "author": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "tag_name": { - "type": "string" - }, - "tarball_url": { - "type": "string" - }, - "target_commitish": { - "type": "string" - }, - "upload_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "zipball_url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "repo": { - "properties": { - "clone_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "full_name": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "has_downloads": { - "type": "boolean" - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "master_branch": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "organization": { - "$ref": "#/definitions/organization" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "parent": { - "allOf": [ - { - "$ref": "#/definitions/repo" - }, - { - "description": "Is present when the repo is a fork. Parent is the repo this repo was forked from." - } - ] - }, - "private": { - "type": "boolean" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "size": { - "type": "integer" - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/repo" - }, - { - "description": "Is present when the repo is a fork. Source is the ultimate source for the network." - } - ] - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - } - }, - "type": "object" - }, - "repo-deployments": { - "items": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "repoComments": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "repoCommit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repoCommitBody": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "type": "string" - }, - "type": "array" - }, - "tree": { - "type": "string" - } - }, - "required": ["message", "parents", "tree"], - "type": "object" - }, - "repoEdit": { - "properties": { - "description": { - "type": "string" - }, - "has_downloads": { - "type": "boolean" - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "name": { - "type": "string" - }, - "private": { - "type": "boolean" - } - }, - "type": "object" - }, - "repos": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - }, - "search-code": { - "properties": { - "items": { - "items": { - "properties": { - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "repository": { - "properties": { - "archive_url": { - "type": "string" - }, - "assignees_url": { - "type": "string" - }, - "blobs_url": { - "type": "string" - }, - "branches_url": { - "type": "string" - }, - "collaborators_url": { - "type": "string" - }, - "comments_url": { - "type": "string" - }, - "commits_url": { - "type": "string" - }, - "compare_url": { - "type": "string" - }, - "contents_url": { - "type": "string" - }, - "contributors_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "downloads_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "forks_url": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "git_commits_url": { - "type": "string" - }, - "git_refs_url": { - "type": "string" - }, - "git_tags_url": { - "type": "string" - }, - "hooks_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "issue_comment_url": { - "type": "string" - }, - "issue_events_url": { - "type": "string" - }, - "issues_url": { - "type": "string" - }, - "keys_url": { - "type": "string" - }, - "labels_url": { - "type": "string" - }, - "languages_url": { - "type": "string" - }, - "merges_url": { - "type": "string" - }, - "milestones_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "notifications_url": { - "type": "string" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "private": { - "type": "boolean" - }, - "pulls_url": { - "type": "string" - }, - "stargazers_url": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "subscribers_url": { - "type": "string" - }, - "subscription_url": { - "type": "string" - }, - "tags_url": { - "type": "string" - }, - "teams_url": { - "type": "string" - }, - "trees_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "score": { - "type": "number" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-issues": { - "properties": { - "items": { - "items": { - "properties": { - "assignee": { - "type": "null" - }, - "body": { - "type": "string" - }, - "closed_at": { - "type": "null" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "labels_url": { - "type": "string" - }, - "milestone": { - "type": "null" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "null" - }, - "html_url": { - "type": "null" - }, - "patch_url": { - "type": "null" - } - }, - "type": "object" - }, - "score": { - "type": "number" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-issues-by-keyword": { - "properties": { - "issues": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "number": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "user": { - "type": "string" - }, - "votes": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "search-repositories": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-repositories-by-keyword": { - "properties": { - "repositories": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - } - }, - "type": "object" - }, - "search-user-by-email": { - "properties": { - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "search-users": { - "properties": { - "items": { - "$ref": "#/definitions/users" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-users-by-keyword": { - "properties": { - "users": { - "$ref": "#/definitions/users" - } - }, - "type": "object" - }, - "subscription": { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "repository_url": { - "type": "string" - }, - "subscribed": { - "type": "boolean" - }, - "thread_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "subscriptionBody": { - "properties": { - "ignored": { - "type": "boolean" - }, - "subscribed": { - "type": "boolean" - } - }, - "type": "object" - }, - "tag": { - "properties": { - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "description": "String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob.", - "enum": ["commit", "tree", "blob"] - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sha": { - "type": "string" - }, - "tag": { - "description": "The tag's name. This is typically a version (e.g., \"v0.0.1\").", - "type": "string" - }, - "tagger": { - "properties": { - "date": { - "description": "Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tagBody": { - "properties": { - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "description": "String of the SHA of the git object this is tagging.", - "type": "string" - }, - "tag": { - "description": "The tag's name. This is typically a version (e.g., \"v0.0.1\").", - "type": "string" - }, - "tagger": { - "properties": { - "date": { - "description": "Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - } - }, - "type": "object" - }, - "type": { - "description": "String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob.", - "enum": ["commit", "tree", "blob"] - } - }, - "required": ["tag", "message", "object", "type", "tagger"], - "type": "object" - }, - "tags": { - "items": { - "$ref": "#/definitions/tag" - }, - "type": "array" - }, - "team": { - "properties": { - "id": { - "type": "integer" - }, - "members_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "permission": { - "type": "string" - }, - "repos_count": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "teamMembership": { - "properties": { - "state": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "teamRepos": { - "$ref": "#/definitions/repos" - }, - "teams": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "teams-list": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "members_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "organization": { - "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "permission": { - "type": "string" - }, - "repos_count": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "tree": { - "items": { - "properties": { - "mode": { - "description": "One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink.", - "enum": ["100644", "100755", "040000", "160000", "120000"], - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "description": "SHA1 checksum ID of the object in the tree.", - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "enum": ["blob", "tree", "commit"], - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "trees": { - "properties": { - "base_tree": { - "type": "string" - }, - "sha": { - "description": "SHA1 checksum ID of the object in the tree.", - "type": "string" - }, - "tree": { - "items": { - "$ref": "#/definitions/tree" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/actor" - }, - { - "description": "A GitHub user" - } - ], - "type": "object" - }, - "user-emails": { - "items": { - "type": "string" - }, - "type": "array" - }, - "user-keys-keyId": { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "user-keys-post": { - "properties": { - "key": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "user-update": { - "properties": { - "bio": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "company": { - "type": "string" - }, - "email": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "users": { - "items": { - "$ref": "#/definitions/user" - }, - "type": "array" - } - } -} diff --git a/tests/simple.test.ts b/tests/simple.test.ts new file mode 100644 index 00000000..71d8b32e --- /dev/null +++ b/tests/simple.test.ts @@ -0,0 +1,41 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../src/index.js"; +import { collectAllSchemas } from "./utils.js"; + +describe("simple", async () => { + let tmpdir: string; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + const schemas = await collectAllSchemas(); + + test.each(schemas)("$name", async (schema) => { + // @ts-expect-error + await generateApi({ + name: schema.name, + input: schema.filePath, + output: tmpdir, + silent: true, + generateClient: true, + generateRouteTypes: false, + sortTypes: true, + }); + + const content = await fs.readFile(path.join(tmpdir, `${schema.name}.ts`), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/additional-properties-2.0/schema.ts b/tests/spec/additional-properties-2.0/__snapshots__/basic.test.ts.snap similarity index 84% rename from tests/spec/additional-properties-2.0/schema.ts rename to tests/spec/additional-properties-2.0/__snapshots__/basic.test.ts.snap index b4d1b105..e7fe4e5c 100644 --- a/tests/spec/additional-properties-2.0/schema.ts +++ b/tests/spec/additional-properties-2.0/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > additional properties 2.0 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -31,3 +34,5 @@ export type MyObject4 = Record< filename?: string | null; } >; +" +`; diff --git a/tests/spec/additional-properties-2.0/basic.test.ts b/tests/spec/additional-properties-2.0/basic.test.ts new file mode 100644 index 00000000..c301edc6 --- /dev/null +++ b/tests/spec/additional-properties-2.0/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("additional properties 2.0", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/additional-properties-2.0/expected.ts b/tests/spec/additional-properties-2.0/expected.ts deleted file mode 100644 index b4d1b105..00000000 --- a/tests/spec/additional-properties-2.0/expected.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface MyObject1 { - id?: string; - [key: string]: any; -} - -export interface MyObject2 { - id?: string; - [key: string]: any; -} - -export interface MyObject3 { - id?: string; - [key: string]: any; -} - -export type MyObject4 = Record< - string, - { - content?: string; - filename?: string | null; - } ->; diff --git a/tests/spec/additional-properties-2.0/test.js b/tests/spec/additional-properties-2.0/test.js deleted file mode 100644 index b4702dc7..00000000 --- a/tests/spec/additional-properties-2.0/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "additional properties 2.0 test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/another-array-type/expected.ts b/tests/spec/another-array-type/__snapshots__/basic.test.ts.snap similarity index 79% rename from tests/spec/another-array-type/expected.ts rename to tests/spec/another-array-type/__snapshots__/basic.test.ts.snap index f48c920c..a18ee3ef 100644 --- a/tests/spec/another-array-type/expected.ts +++ b/tests/spec/another-array-type/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --another-array-type 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -12,3 +15,5 @@ export type AnotherArrayType1 = Array; export type AnotherArrayType2 = Array; +" +`; diff --git a/tests/spec/another-array-type/basic.test.ts b/tests/spec/another-array-type/basic.test.ts new file mode 100644 index 00000000..269b1119 --- /dev/null +++ b/tests/spec/another-array-type/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--another-array-type", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + anotherArrayType: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/another-array-type/schema.ts b/tests/spec/another-array-type/schema.ts deleted file mode 100644 index f48c920c..00000000 --- a/tests/spec/another-array-type/schema.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type AnotherArrayType1 = Array; - -export type AnotherArrayType2 = Array; diff --git a/tests/spec/another-array-type/test.js b/tests/spec/another-array-type/test.js deleted file mode 100644 index 3ae98179..00000000 --- a/tests/spec/another-array-type/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--another-array-type option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: false, - anotherArrayType: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/another-query-params/expected.ts b/tests/spec/another-query-params/__snapshots__/basic.test.ts.snap similarity index 94% rename from tests/spec/another-query-params/expected.ts rename to tests/spec/another-query-params/__snapshots__/basic.test.ts.snap index 52df16d0..a7e14867 100644 --- a/tests/spec/another-query-params/expected.ts +++ b/tests/spec/another-query-params/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > another-query-params 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -41,7 +44,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -106,7 +109,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -128,7 +131,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -144,7 +147,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -208,7 +211,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -301,10 +304,12 @@ export class Api extends HttpClient this.request({ - path: `/api/sys/department`, + path: \`/api/sys/department\`, method: "GET", query: query, ...params, }), }; } +" +`; diff --git a/tests/spec/another-query-params/basic.test.ts b/tests/spec/another-query-params/basic.test.ts new file mode 100644 index 00000000..87eefd1e --- /dev/null +++ b/tests/spec/another-query-params/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("another-query-params", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/another-query-params/schema.ts b/tests/spec/another-query-params/schema.ts deleted file mode 100644 index 52df16d0..00000000 --- a/tests/spec/another-query-params/schema.ts +++ /dev/null @@ -1,310 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Sort */ -export interface Sort { - empty?: boolean; - sorted?: boolean; - unsorted?: boolean; -} - -/** - * R«object» - * 统一的api返回格式 - */ -export interface RObject { - /** - * 响应码 - * @format int32 - * @example 0 - */ - code: number; - /** 返回数据 */ - data: object; - /** - * 说明信息 - * @example "用户名或密码错误" - */ - msg: string; - success?: boolean; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "//localhost:8083"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title 系统 - * @version 1.6.3 - * @baseUrl //localhost:8083 - */ -export class Api extends HttpClient { - api = { - /** - * No description - * - * @tags 部门 - * @name List2 - * @summary 部门列表 - * @request GET:/api/sys/department{?children,createdTime,description,id,name,page,parent,size,sort,updatedTime,customField} - */ - list2: ( - query: { - /** - * 第page页,从0开始计数 - * @format int32 - */ - page?: number; - /** - * 每页数据数量 - * @format int32 - */ - size?: number; - /** 按属性排序,格式:属性,[asc|desc] */ - sort?: string[]; - /** querydsl自动生成 */ - children?: object[]; - /** - * querydsl自动生成 - * @format date-time - */ - createdTime?: string; - /** querydsl自动生成 */ - description?: string; - /** querydsl自动生成 */ - id?: string; - /** querydsl自动生成 */ - name?: string; - /** querydsl自动生成 */ - parent?: string; - /** - * querydsl自动生成 - * @format date-time - */ - updatedTime?: string; - customField: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/api/sys/department`, - method: "GET", - query: query, - ...params, - }), - }; -} diff --git a/tests/spec/another-query-params/test.js b/tests/spec/another-query-params/test.js deleted file mode 100644 index 4dda1565..00000000 --- a/tests/spec/another-query-params/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "another-query-params test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/axios/expected.ts b/tests/spec/axios/__snapshots__/basic.test.ts.snap similarity index 92% rename from tests/spec/axios/expected.ts rename to tests/spec/axios/__snapshots__/basic.test.ts.snap index 3be81f8e..d08e8ad8 100644 --- a/tests/spec/axios/expected.ts +++ b/tests/spec/axios/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --axios option 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -1913,7 +1916,7 @@ import axios from "axios"; export type QueryParamsType = Record; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1981,7 +1984,7 @@ export class HttpClient { if (typeof formItem === "object" && formItem !== null) { return JSON.stringify(formItem); } else { - return `${formItem}`; + return \`\${formItem}\`; } } @@ -2091,7 +2094,7 @@ export class Api extends HttpClient({ - path: `/some-test`, + path: \`/some-test\`, method: "GET", format: "json", ...params, @@ -2106,7 +2109,7 @@ export class Api extends HttpClient this.request({ - path: `/path-params`, + path: \`/path-params\`, method: "GET", format: "json", ...params, @@ -2121,7 +2124,7 @@ export class Api extends HttpClient this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2136,7 +2139,7 @@ export class Api extends HttpClient this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2160,7 +2163,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2175,7 +2178,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2200,7 +2203,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2224,7 +2227,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2239,7 +2242,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2252,7 +2255,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2266,7 +2269,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2282,7 +2285,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2296,7 +2299,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2311,7 +2314,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2326,7 +2329,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2340,7 +2343,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2356,7 +2359,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2369,7 +2372,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2382,7 +2385,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2395,7 +2398,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2409,7 +2412,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2423,7 +2426,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2461,7 +2464,7 @@ export class Api extends HttpClient this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2484,7 +2487,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2515,7 +2518,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2531,7 +2534,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2560,7 +2563,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2576,7 +2579,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2591,7 +2594,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2606,7 +2609,7 @@ export class Api extends HttpClient this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2621,7 +2624,7 @@ export class Api extends HttpClient this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2652,7 +2655,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2667,7 +2670,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2681,7 +2684,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2695,7 +2698,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2708,7 +2711,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2721,7 +2724,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2735,7 +2738,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2752,7 +2755,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2766,7 +2769,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2782,7 +2785,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2820,7 +2823,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2835,7 +2838,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2849,7 +2852,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2864,7 +2867,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2877,7 +2880,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2891,7 +2894,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2906,7 +2909,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2919,7 +2922,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2939,7 +2942,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2954,7 +2957,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -2969,7 +2972,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -2983,7 +2986,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -3000,7 +3003,7 @@ export class Api extends HttpClient this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -3015,7 +3018,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3028,7 +3031,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -3042,7 +3045,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3058,7 +3061,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -3074,7 +3077,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -3087,7 +3090,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -3103,7 +3106,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -3117,7 +3120,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3131,7 +3134,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3146,7 +3149,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3159,7 +3162,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3172,7 +3175,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3186,7 +3189,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3201,7 +3204,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3221,7 +3224,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3255,7 +3258,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3270,7 +3273,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3286,7 +3289,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3300,7 +3303,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3320,7 +3323,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3336,7 +3339,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3350,7 +3353,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3377,7 +3380,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3392,7 +3395,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3416,7 +3419,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3431,7 +3434,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3445,7 +3448,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3461,7 +3464,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3481,7 +3484,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3497,7 +3500,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3512,7 +3515,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3528,7 +3531,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3542,7 +3545,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3564,7 +3567,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3579,7 +3582,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3595,7 +3598,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3611,7 +3614,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3625,7 +3628,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3641,7 +3644,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3655,7 +3658,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3669,7 +3672,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3685,7 +3688,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3700,7 +3703,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3714,7 +3717,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3730,7 +3733,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3746,7 +3749,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3760,7 +3763,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3785,7 +3788,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3800,7 +3803,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -3814,7 +3817,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -3829,7 +3832,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -3844,7 +3847,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -3858,7 +3861,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -3873,7 +3876,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -3911,7 +3914,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -3926,7 +3929,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -3955,7 +3958,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -3970,7 +3973,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3985,7 +3988,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4005,7 +4008,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4020,7 +4023,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -4036,7 +4039,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -4052,7 +4055,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -4066,7 +4069,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4083,7 +4086,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4103,7 +4106,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -4120,7 +4123,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -4134,7 +4137,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -4147,7 +4150,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4161,7 +4164,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4176,7 +4179,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4193,7 +4196,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4206,7 +4209,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4220,7 +4223,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4235,7 +4238,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4250,7 +4253,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4264,7 +4267,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4278,7 +4281,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4293,7 +4296,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4308,7 +4311,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4322,7 +4325,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4337,7 +4340,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4351,7 +4354,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4382,7 +4385,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4397,7 +4400,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4412,7 +4415,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4427,7 +4430,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4447,7 +4450,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4462,7 +4465,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4494,7 +4497,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4509,7 +4512,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4541,7 +4544,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4556,7 +4559,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4586,7 +4589,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4601,7 +4604,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4616,7 +4619,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4636,7 +4639,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4653,7 +4656,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4667,7 +4670,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4685,7 +4688,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4705,7 +4708,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -4721,7 +4724,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -4735,7 +4738,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -4749,7 +4752,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -4762,7 +4765,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -4786,7 +4789,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -4801,7 +4804,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -4815,7 +4818,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -4830,7 +4833,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -4843,7 +4846,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -4863,7 +4866,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4879,7 +4882,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -4894,7 +4897,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -4908,7 +4911,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -4925,7 +4928,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -4939,7 +4942,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -4953,7 +4956,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -4967,7 +4970,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -4981,7 +4984,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -4995,7 +4998,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -5009,7 +5012,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -5023,7 +5026,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -5037,7 +5040,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -5053,7 +5056,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -5067,7 +5070,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -5080,7 +5083,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -5094,7 +5097,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -5110,7 +5113,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -5124,7 +5127,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -5138,7 +5141,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -5160,7 +5163,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -5183,7 +5186,7 @@ export class Api extends HttpClient this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5230,7 +5233,7 @@ export class Api extends HttpClient this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5258,7 +5261,7 @@ export class Api extends HttpClient this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5300,7 +5303,7 @@ export class Api extends HttpClient this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5341,7 +5344,7 @@ export class Api extends HttpClient this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5357,7 +5360,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5370,7 +5373,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5384,7 +5387,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5400,7 +5403,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5415,7 +5418,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5431,7 +5434,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5445,7 +5448,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5458,7 +5461,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5471,7 +5474,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5485,7 +5488,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5499,7 +5502,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5513,7 +5516,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5528,7 +5531,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5541,7 +5544,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5555,7 +5558,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5569,7 +5572,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5585,7 +5588,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -5600,7 +5603,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -5613,7 +5616,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -5627,7 +5630,7 @@ export class Api extends HttpClient this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -5641,7 +5644,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -5655,7 +5658,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -5668,7 +5671,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -5681,7 +5684,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -5717,7 +5720,7 @@ export class Api extends HttpClient this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -5732,7 +5735,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -5746,7 +5749,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -5761,7 +5764,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -5774,7 +5777,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -5788,7 +5791,7 @@ export class Api extends HttpClient this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -5808,7 +5811,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -5823,7 +5826,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -5846,7 +5849,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -5861,7 +5864,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5874,7 +5877,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5887,7 +5890,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5900,7 +5903,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -5915,7 +5918,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5929,7 +5932,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5943,7 +5946,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5956,7 +5959,7 @@ export class Api extends HttpClient this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -5977,7 +5980,7 @@ export class Api extends HttpClient this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -5992,7 +5995,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -6006,7 +6009,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -6019,7 +6022,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -6032,7 +6035,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -6046,7 +6049,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -6069,7 +6072,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -6084,7 +6087,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -6098,7 +6101,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -6112,7 +6115,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -6125,7 +6128,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -6145,7 +6148,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -6160,7 +6163,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -6173,9 +6176,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/axios/basic.test.ts b/tests/spec/axios/basic.test.ts new file mode 100644 index 00000000..9f470706 --- /dev/null +++ b/tests/spec/axios/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--axios option", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + httpClientType: "axios", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/axios/schema.ts b/tests/spec/axios/schema.ts deleted file mode 100644 index 3be81f8e..00000000 --- a/tests/spec/axios/schema.ts +++ /dev/null @@ -1,6181 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** A GitHub organization */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** A GitHub user */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType } from "axios"; -import axios from "axios"; - -export type QueryParamsType = Record; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseType; - /** request body */ - body?: unknown; -} - -export type RequestParams = Omit; - -export interface ApiConfig extends Omit { - securityWorker?: ( - securityData: SecurityDataType | null, - ) => Promise | AxiosRequestConfig | void; - secure?: boolean; - format?: ResponseType; -} - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public instance: AxiosInstance; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private secure?: boolean; - private format?: ResponseType; - - constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig = {}) { - this.instance = axios.create({ ...axiosConfig, baseURL: axiosConfig.baseURL || "https://api.github.com" }); - this.secure = secure; - this.format = format; - this.securityWorker = securityWorker; - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig { - const method = params1.method || (params2 && params2.method); - - return { - ...this.instance.defaults, - ...params1, - ...(params2 || {}), - headers: { - ...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected stringifyFormItem(formItem: unknown) { - if (typeof formItem === "object" && formItem !== null) { - return JSON.stringify(formItem); - } else { - return `${formItem}`; - } - } - - protected createFormData(input: Record): FormData { - return Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - const propertyContent: any[] = property instanceof Array ? property : [property]; - - for (const formItem of propertyContent) { - const isFileType = formItem instanceof Blob || formItem instanceof File; - formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem)); - } - - return formData; - }, new FormData()); - } - - public request = async ({ - secure, - path, - type, - query, - format, - body, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = format || this.format || undefined; - - if (type === ContentType.FormData && body && body !== null && typeof body === "object") { - body = this.createFormData(body as Record); - } - - if (type === ContentType.Text && body && body !== null && typeof body !== "string") { - body = JSON.stringify(body); - } - - return this.instance.request({ - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - params: query, - responseType: responseFormat, - data: body, - url: path, - }); - }; -} - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export class Api extends HttpClient { - someTest = { - /** - * @description This type should test bug https://github.com/acacode/swagger-typescript-api/issues/156 NOTE: all properties should be required - * - * @name SomeTestList - * @request GET:/some-test - */ - someTestList: (params: RequestParams = {}) => - this.request< - { - user: { - foo: number; - extra: { - id: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - }; - }; - }; - }; - }; - }; - }, - any - >({ - path: `/some-test`, - method: "GET", - format: "json", - ...params, - }), - }; - pathParams = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name PathParamsList - * @request GET:/path-params - */ - pathParamsList: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/path-params`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/axios/test.js b/tests/spec/axios/test.js deleted file mode 100644 index 8e84da14..00000000 --- a/tests/spec/axios/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--axios option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - httpClientType: "axios", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/axiosSingleHttpClient/schema.ts b/tests/spec/axiosSingleHttpClient/__snapshots__/basic.test.ts.snap similarity index 92% rename from tests/spec/axiosSingleHttpClient/schema.ts rename to tests/spec/axiosSingleHttpClient/__snapshots__/basic.test.ts.snap index 882da26b..1cda891f 100644 --- a/tests/spec/axiosSingleHttpClient/schema.ts +++ b/tests/spec/axiosSingleHttpClient/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --axios --single-http-client 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -1913,7 +1916,7 @@ import axios from "axios"; export type QueryParamsType = Record; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1981,7 +1984,7 @@ export class HttpClient { if (typeof formItem === "object" && formItem !== null) { return JSON.stringify(formItem); } else { - return `${formItem}`; + return \`\${formItem}\`; } } @@ -2097,7 +2100,7 @@ export class Api { }, any >({ - path: `/some-test`, + path: \`/some-test\`, method: "GET", format: "json", ...params, @@ -2112,7 +2115,7 @@ export class Api { */ pathParamsList: (petId: number, params: RequestParams = {}) => this.http.request({ - path: `/path-params`, + path: \`/path-params\`, method: "GET", format: "json", ...params, @@ -2127,7 +2130,7 @@ export class Api { */ eventsList: (params: RequestParams = {}) => this.http.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2142,7 +2145,7 @@ export class Api { */ feedsList: (params: RequestParams = {}) => this.http.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2166,7 +2169,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2181,7 +2184,7 @@ export class Api { */ gistsCreate: (body: PostGist, params: RequestParams = {}) => this.http.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2206,7 +2209,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2230,7 +2233,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2245,7 +2248,7 @@ export class Api { */ gistsDelete: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2258,7 +2261,7 @@ export class Api { */ gistsDetail: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2272,7 +2275,7 @@ export class Api { */ gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2288,7 +2291,7 @@ export class Api { */ commentsDetail: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2302,7 +2305,7 @@ export class Api { */ commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2317,7 +2320,7 @@ export class Api { */ commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2332,7 +2335,7 @@ export class Api { */ commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2346,7 +2349,7 @@ export class Api { */ commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2362,7 +2365,7 @@ export class Api { */ forksCreate: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2375,7 +2378,7 @@ export class Api { */ starDelete: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2388,7 +2391,7 @@ export class Api { */ starDetail: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2401,7 +2404,7 @@ export class Api { */ starUpdate: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2415,7 +2418,7 @@ export class Api { */ templatesList: (params: RequestParams = {}) => this.http.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2429,7 +2432,7 @@ export class Api { */ templatesDetail: (language: string, params: RequestParams = {}) => this.http.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2467,7 +2470,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2490,7 +2493,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2521,7 +2524,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2537,7 +2540,7 @@ export class Api { */ userEmailDetail: (email: string, params: RequestParams = {}) => this.http.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2566,7 +2569,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2582,7 +2585,7 @@ export class Api { */ markdownCreate: (body: Markdown, params: RequestParams = {}) => this.http.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2597,7 +2600,7 @@ export class Api { */ postMarkdown: (params: RequestParams = {}) => this.http.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2612,7 +2615,7 @@ export class Api { */ metaList: (params: RequestParams = {}) => this.http.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2627,7 +2630,7 @@ export class Api { */ eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2658,7 +2661,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2673,7 +2676,7 @@ export class Api { */ notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => this.http.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2687,7 +2690,7 @@ export class Api { */ threadsDetail: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2701,7 +2704,7 @@ export class Api { */ threadsPartialUpdate: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2714,7 +2717,7 @@ export class Api { */ threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2727,7 +2730,7 @@ export class Api { */ threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => this.http.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2741,7 +2744,7 @@ export class Api { */ threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => this.http.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2758,7 +2761,7 @@ export class Api { */ orgsDetail: (org: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2772,7 +2775,7 @@ export class Api { */ orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2788,7 +2791,7 @@ export class Api { */ eventsDetail: (org: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2826,7 +2829,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2841,7 +2844,7 @@ export class Api { */ membersDetail: (org: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2855,7 +2858,7 @@ export class Api { */ membersDelete: (org: string, username: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2870,7 +2873,7 @@ export class Api { */ membersDetail2: (org: string, username: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2883,7 +2886,7 @@ export class Api { */ publicMembersDetail: (org: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2897,7 +2900,7 @@ export class Api { */ publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2912,7 +2915,7 @@ export class Api { */ publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2925,7 +2928,7 @@ export class Api { */ publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2945,7 +2948,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2960,7 +2963,7 @@ export class Api { */ reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -2975,7 +2978,7 @@ export class Api { */ teamsDetail: (org: string, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -2989,7 +2992,7 @@ export class Api { */ teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => this.http.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -3006,7 +3009,7 @@ export class Api { */ rateLimitList: (params: RequestParams = {}) => this.http.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -3021,7 +3024,7 @@ export class Api { */ reposDelete: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3034,7 +3037,7 @@ export class Api { */ reposDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -3048,7 +3051,7 @@ export class Api { */ reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3064,7 +3067,7 @@ export class Api { */ assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -3080,7 +3083,7 @@ export class Api { */ assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -3093,7 +3096,7 @@ export class Api { */ branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -3109,7 +3112,7 @@ export class Api { */ branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -3123,7 +3126,7 @@ export class Api { */ collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3137,7 +3140,7 @@ export class Api { */ collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3152,7 +3155,7 @@ export class Api { */ collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3165,7 +3168,7 @@ export class Api { */ collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3178,7 +3181,7 @@ export class Api { */ commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3192,7 +3195,7 @@ export class Api { */ commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3207,7 +3210,7 @@ export class Api { */ commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3227,7 +3230,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3261,7 +3264,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3276,7 +3279,7 @@ export class Api { */ commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3292,7 +3295,7 @@ export class Api { */ commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3306,7 +3309,7 @@ export class Api { */ commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3326,7 +3329,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3342,7 +3345,7 @@ export class Api { */ compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3356,7 +3359,7 @@ export class Api { */ contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3383,7 +3386,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3398,7 +3401,7 @@ export class Api { */ contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3422,7 +3425,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3437,7 +3440,7 @@ export class Api { */ deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3451,7 +3454,7 @@ export class Api { */ deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3467,7 +3470,7 @@ export class Api { */ deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3487,7 +3490,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3503,7 +3506,7 @@ export class Api { */ downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3518,7 +3521,7 @@ export class Api { */ downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3534,7 +3537,7 @@ export class Api { */ downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3548,7 +3551,7 @@ export class Api { */ eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3570,7 +3573,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3585,7 +3588,7 @@ export class Api { */ forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3601,7 +3604,7 @@ export class Api { */ gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3617,7 +3620,7 @@ export class Api { */ gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3631,7 +3634,7 @@ export class Api { */ gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3647,7 +3650,7 @@ export class Api { */ gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3661,7 +3664,7 @@ export class Api { */ gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3675,7 +3678,7 @@ export class Api { */ gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3691,7 +3694,7 @@ export class Api { */ gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3706,7 +3709,7 @@ export class Api { */ gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3720,7 +3723,7 @@ export class Api { */ gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3736,7 +3739,7 @@ export class Api { */ gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3752,7 +3755,7 @@ export class Api { */ gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3766,7 +3769,7 @@ export class Api { */ gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3791,7 +3794,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3806,7 +3809,7 @@ export class Api { */ hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -3820,7 +3823,7 @@ export class Api { */ hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -3835,7 +3838,7 @@ export class Api { */ hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -3850,7 +3853,7 @@ export class Api { */ hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -3864,7 +3867,7 @@ export class Api { */ hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -3879,7 +3882,7 @@ export class Api { */ hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -3917,7 +3920,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -3932,7 +3935,7 @@ export class Api { */ issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -3961,7 +3964,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -3976,7 +3979,7 @@ export class Api { */ issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3991,7 +3994,7 @@ export class Api { */ issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4011,7 +4014,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4026,7 +4029,7 @@ export class Api { */ issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -4042,7 +4045,7 @@ export class Api { */ issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -4058,7 +4061,7 @@ export class Api { */ issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -4072,7 +4075,7 @@ export class Api { */ issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4089,7 +4092,7 @@ export class Api { */ issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4109,7 +4112,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -4126,7 +4129,7 @@ export class Api { */ issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -4140,7 +4143,7 @@ export class Api { */ issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -4153,7 +4156,7 @@ export class Api { */ issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4167,7 +4170,7 @@ export class Api { */ issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4182,7 +4185,7 @@ export class Api { */ issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4199,7 +4202,7 @@ export class Api { */ issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4212,7 +4215,7 @@ export class Api { */ keysDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4226,7 +4229,7 @@ export class Api { */ keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4241,7 +4244,7 @@ export class Api { */ keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4256,7 +4259,7 @@ export class Api { */ keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4270,7 +4273,7 @@ export class Api { */ labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4284,7 +4287,7 @@ export class Api { */ labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4299,7 +4302,7 @@ export class Api { */ labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4314,7 +4317,7 @@ export class Api { */ labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4328,7 +4331,7 @@ export class Api { */ labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4343,7 +4346,7 @@ export class Api { */ languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4357,7 +4360,7 @@ export class Api { */ mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4388,7 +4391,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4403,7 +4406,7 @@ export class Api { */ milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4418,7 +4421,7 @@ export class Api { */ milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4433,7 +4436,7 @@ export class Api { */ milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4453,7 +4456,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4468,7 +4471,7 @@ export class Api { */ milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4500,7 +4503,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4515,7 +4518,7 @@ export class Api { */ notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4547,7 +4550,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4562,7 +4565,7 @@ export class Api { */ pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4592,7 +4595,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4607,7 +4610,7 @@ export class Api { */ pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4622,7 +4625,7 @@ export class Api { */ pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4642,7 +4645,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4659,7 +4662,7 @@ export class Api { */ pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4673,7 +4676,7 @@ export class Api { */ pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4691,7 +4694,7 @@ export class Api { */ pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4711,7 +4714,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -4727,7 +4730,7 @@ export class Api { */ pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -4741,7 +4744,7 @@ export class Api { */ pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -4755,7 +4758,7 @@ export class Api { */ pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -4768,7 +4771,7 @@ export class Api { */ pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -4792,7 +4795,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -4807,7 +4810,7 @@ export class Api { */ releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -4821,7 +4824,7 @@ export class Api { */ releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -4836,7 +4839,7 @@ export class Api { */ releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -4849,7 +4852,7 @@ export class Api { */ releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -4869,7 +4872,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4885,7 +4888,7 @@ export class Api { */ releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -4900,7 +4903,7 @@ export class Api { */ releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -4914,7 +4917,7 @@ export class Api { */ releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -4931,7 +4934,7 @@ export class Api { */ releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -4945,7 +4948,7 @@ export class Api { */ stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -4959,7 +4962,7 @@ export class Api { */ statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -4973,7 +4976,7 @@ export class Api { */ statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -4987,7 +4990,7 @@ export class Api { */ statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -5001,7 +5004,7 @@ export class Api { */ statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -5015,7 +5018,7 @@ export class Api { */ statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -5029,7 +5032,7 @@ export class Api { */ statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -5043,7 +5046,7 @@ export class Api { */ statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -5059,7 +5062,7 @@ export class Api { */ subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -5073,7 +5076,7 @@ export class Api { */ subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -5086,7 +5089,7 @@ export class Api { */ subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -5100,7 +5103,7 @@ export class Api { */ subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -5116,7 +5119,7 @@ export class Api { */ tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -5130,7 +5133,7 @@ export class Api { */ teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -5144,7 +5147,7 @@ export class Api { */ watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -5166,7 +5169,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -5189,7 +5192,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5236,7 +5239,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5264,7 +5267,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5306,7 +5309,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5347,7 +5350,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5363,7 +5366,7 @@ export class Api { */ teamsDelete: (teamId: number, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5376,7 +5379,7 @@ export class Api { */ teamsDetail: (teamId: number, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5390,7 +5393,7 @@ export class Api { */ teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5406,7 +5409,7 @@ export class Api { */ membersDetail: (teamId: number, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5421,7 +5424,7 @@ export class Api { */ membersDelete: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5437,7 +5440,7 @@ export class Api { */ membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5451,7 +5454,7 @@ export class Api { */ membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5464,7 +5467,7 @@ export class Api { */ membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5477,7 +5480,7 @@ export class Api { */ membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5491,7 +5494,7 @@ export class Api { */ membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5505,7 +5508,7 @@ export class Api { */ reposDetail: (teamId: number, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5519,7 +5522,7 @@ export class Api { */ reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5534,7 +5537,7 @@ export class Api { */ reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5547,7 +5550,7 @@ export class Api { */ reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5561,7 +5564,7 @@ export class Api { */ userList: (params: RequestParams = {}) => this.http.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5575,7 +5578,7 @@ export class Api { */ userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => this.http.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5591,7 +5594,7 @@ export class Api { */ emailsDelete: (body: UserEmails, params: RequestParams = {}) => this.http.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -5606,7 +5609,7 @@ export class Api { */ emailsList: (params: RequestParams = {}) => this.http.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -5619,7 +5622,7 @@ export class Api { */ emailsCreate: (body: EmailsPost, params: RequestParams = {}) => this.http.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -5633,7 +5636,7 @@ export class Api { */ followersList: (params: RequestParams = {}) => this.http.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -5647,7 +5650,7 @@ export class Api { */ followingList: (params: RequestParams = {}) => this.http.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -5661,7 +5664,7 @@ export class Api { */ followingDelete: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -5674,7 +5677,7 @@ export class Api { */ followingDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -5687,7 +5690,7 @@ export class Api { */ followingUpdate: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -5723,7 +5726,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -5738,7 +5741,7 @@ export class Api { */ keysList: (params: RequestParams = {}) => this.http.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -5752,7 +5755,7 @@ export class Api { */ keysCreate: (body: UserKeysPost, params: RequestParams = {}) => this.http.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -5767,7 +5770,7 @@ export class Api { */ keysDelete: (keyId: number, params: RequestParams = {}) => this.http.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -5780,7 +5783,7 @@ export class Api { */ keysDetail: (keyId: number, params: RequestParams = {}) => this.http.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -5794,7 +5797,7 @@ export class Api { */ orgsList: (params: RequestParams = {}) => this.http.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -5814,7 +5817,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -5829,7 +5832,7 @@ export class Api { */ reposCreate: (body: PostRepo, params: RequestParams = {}) => this.http.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -5852,7 +5855,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -5867,7 +5870,7 @@ export class Api { */ starredDelete: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5880,7 +5883,7 @@ export class Api { */ starredDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5893,7 +5896,7 @@ export class Api { */ starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5906,7 +5909,7 @@ export class Api { */ subscriptionsList: (params: RequestParams = {}) => this.http.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -5921,7 +5924,7 @@ export class Api { */ subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5935,7 +5938,7 @@ export class Api { */ subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5949,7 +5952,7 @@ export class Api { */ subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5962,7 +5965,7 @@ export class Api { */ teamsList: (params: RequestParams = {}) => this.http.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -5983,7 +5986,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -5998,7 +6001,7 @@ export class Api { */ usersDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -6012,7 +6015,7 @@ export class Api { */ eventsDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -6025,7 +6028,7 @@ export class Api { */ eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -6038,7 +6041,7 @@ export class Api { */ followersDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -6052,7 +6055,7 @@ export class Api { */ followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -6075,7 +6078,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -6090,7 +6093,7 @@ export class Api { */ keysDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -6104,7 +6107,7 @@ export class Api { */ orgsDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -6118,7 +6121,7 @@ export class Api { */ receivedEventsDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -6131,7 +6134,7 @@ export class Api { */ receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -6151,7 +6154,7 @@ export class Api { params: RequestParams = {}, ) => this.http.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -6166,7 +6169,7 @@ export class Api { */ starredDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -6179,9 +6182,11 @@ export class Api { */ subscriptionsDetail: (username: string, params: RequestParams = {}) => this.http.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/axiosSingleHttpClient/basic.test.ts b/tests/spec/axiosSingleHttpClient/basic.test.ts new file mode 100644 index 00000000..935fc376 --- /dev/null +++ b/tests/spec/axiosSingleHttpClient/basic.test.ts @@ -0,0 +1,38 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--axios --single-http-client", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + httpClientType: "axios", + singleHttpClient: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/axiosSingleHttpClient/expected.ts b/tests/spec/axiosSingleHttpClient/expected.ts deleted file mode 100644 index 882da26b..00000000 --- a/tests/spec/axiosSingleHttpClient/expected.ts +++ /dev/null @@ -1,6187 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** A GitHub organization */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** A GitHub user */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType } from "axios"; -import axios from "axios"; - -export type QueryParamsType = Record; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseType; - /** request body */ - body?: unknown; -} - -export type RequestParams = Omit; - -export interface ApiConfig extends Omit { - securityWorker?: ( - securityData: SecurityDataType | null, - ) => Promise | AxiosRequestConfig | void; - secure?: boolean; - format?: ResponseType; -} - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public instance: AxiosInstance; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private secure?: boolean; - private format?: ResponseType; - - constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig = {}) { - this.instance = axios.create({ ...axiosConfig, baseURL: axiosConfig.baseURL || "https://api.github.com" }); - this.secure = secure; - this.format = format; - this.securityWorker = securityWorker; - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig { - const method = params1.method || (params2 && params2.method); - - return { - ...this.instance.defaults, - ...params1, - ...(params2 || {}), - headers: { - ...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected stringifyFormItem(formItem: unknown) { - if (typeof formItem === "object" && formItem !== null) { - return JSON.stringify(formItem); - } else { - return `${formItem}`; - } - } - - protected createFormData(input: Record): FormData { - return Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - const propertyContent: any[] = property instanceof Array ? property : [property]; - - for (const formItem of propertyContent) { - const isFileType = formItem instanceof Blob || formItem instanceof File; - formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem)); - } - - return formData; - }, new FormData()); - } - - public request = async ({ - secure, - path, - type, - query, - format, - body, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = format || this.format || undefined; - - if (type === ContentType.FormData && body && body !== null && typeof body === "object") { - body = this.createFormData(body as Record); - } - - if (type === ContentType.Text && body && body !== null && typeof body !== "string") { - body = JSON.stringify(body); - } - - return this.instance.request({ - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - params: query, - responseType: responseFormat, - data: body, - url: path, - }); - }; -} - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export class Api { - http: HttpClient; - - constructor(http: HttpClient) { - this.http = http; - } - - someTest = { - /** - * @description This type should test bug https://github.com/acacode/swagger-typescript-api/issues/156 NOTE: all properties should be required - * - * @name SomeTestList - * @request GET:/some-test - */ - someTestList: (params: RequestParams = {}) => - this.http.request< - { - user: { - foo: number; - extra: { - id: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - }; - }; - }; - }; - }; - }; - }, - any - >({ - path: `/some-test`, - method: "GET", - format: "json", - ...params, - }), - }; - pathParams = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name PathParamsList - * @request GET:/path-params - */ - pathParamsList: (petId: number, params: RequestParams = {}) => - this.http.request({ - path: `/path-params`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.http.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.http.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.http.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.http.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.http.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.http.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.http.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.http.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.http.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.http.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.http.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.http.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.http.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.http.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.http.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.http.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.http.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.http.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.http.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.http.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.http.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.http.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.http.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.http.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.http.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.http.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/axiosSingleHttpClient/test.js b/tests/spec/axiosSingleHttpClient/test.js deleted file mode 100644 index dce152fa..00000000 --- a/tests/spec/axiosSingleHttpClient/test.js +++ /dev/null @@ -1,28 +0,0 @@ -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--axios --single-http-client test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - singleHttpClient: true, - httpClientType: "axios", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/cli/expected.ts b/tests/spec/cli/expected.ts deleted file mode 100644 index 1b0dcb52..00000000 --- a/tests/spec/cli/expected.ts +++ /dev/null @@ -1,618 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface PrefixAuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface PrefixClaims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface PrefixError { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PrefixPushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} - -export interface PrefixKeyRevokeNosecretData { - /** pending or done */ - status?: string; -} - -export type PrefixKeyRevokeNosecretError = PrefixError; - -export interface PrefixKeyRegisterData { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; -} - -export type PrefixKeyRegisterError = PrefixError; - -export interface PrefixKeyRevokeData { - /** done */ - status?: string; -} - -export type PrefixKeyRevokeError = PrefixError; - -/** JWT */ -export interface PrefixGetKeyData { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; -} - -export type PrefixGetKeyError = PrefixError; - -export type PrefixHeadKeyData = any; - -export type PrefixHeadKeyError = PrefixError; - -export interface PrefixKeyUpdateData { - /** confirmed */ - status?: string; -} - -export type PrefixKeyUpdateError = PrefixError; - -export interface PrefixKeyBindData { - /** confirmed */ - status?: string; -} - -export type PrefixKeyBindError = PrefixError; - -export interface PrefixPushLoginRequestData { - /** sent */ - status?: string; -} - -export type PrefixPushLoginRequestError = PrefixError; - -export interface PrefixSignRequestData { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; -} - -export type PrefixSignRequestError = PrefixError; - -export interface PrefixSignDeleteData { - /** done */ - status?: string; -} - -export type PrefixSignDeleteError = PrefixError; - -/** JWT */ -export interface PrefixSignRetrieveData { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; -} - -export type PrefixSignRetrieveError = PrefixError; - -export type PrefixSignRetrieveHeadData = any; - -export type PrefixSignRetrieveHeadError = PrefixError; - -export interface PrefixSignConfirmData { - /** confirmed */ - status?: string; -} - -export type PrefixSignConfirmError = PrefixError; - -export interface PrefixSignUpdateData { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; -} - -export type PrefixSignUpdateError = PrefixError; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class MySuperApi extends HttpClient { - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/key`, - method: "DELETE", - query: query, - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "GET", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: (pk: string, body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: (pk: string, body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "PUT", - body: body, - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PrefixPushToken, - params: RequestParams = {}, - ) => - this.request({ - path: `/login`, - method: "POST", - query: query, - body: body, - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: PrefixClaims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scope`, - method: "POST", - query: query, - body: body, - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "DELETE", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "GET", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/spec/cli/schema.ts b/tests/spec/cli/schema.ts deleted file mode 100644 index 1b0dcb52..00000000 --- a/tests/spec/cli/schema.ts +++ /dev/null @@ -1,618 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface PrefixAuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface PrefixClaims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface PrefixError { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PrefixPushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} - -export interface PrefixKeyRevokeNosecretData { - /** pending or done */ - status?: string; -} - -export type PrefixKeyRevokeNosecretError = PrefixError; - -export interface PrefixKeyRegisterData { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; -} - -export type PrefixKeyRegisterError = PrefixError; - -export interface PrefixKeyRevokeData { - /** done */ - status?: string; -} - -export type PrefixKeyRevokeError = PrefixError; - -/** JWT */ -export interface PrefixGetKeyData { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; -} - -export type PrefixGetKeyError = PrefixError; - -export type PrefixHeadKeyData = any; - -export type PrefixHeadKeyError = PrefixError; - -export interface PrefixKeyUpdateData { - /** confirmed */ - status?: string; -} - -export type PrefixKeyUpdateError = PrefixError; - -export interface PrefixKeyBindData { - /** confirmed */ - status?: string; -} - -export type PrefixKeyBindError = PrefixError; - -export interface PrefixPushLoginRequestData { - /** sent */ - status?: string; -} - -export type PrefixPushLoginRequestError = PrefixError; - -export interface PrefixSignRequestData { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; -} - -export type PrefixSignRequestError = PrefixError; - -export interface PrefixSignDeleteData { - /** done */ - status?: string; -} - -export type PrefixSignDeleteError = PrefixError; - -/** JWT */ -export interface PrefixSignRetrieveData { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; -} - -export type PrefixSignRetrieveError = PrefixError; - -export type PrefixSignRetrieveHeadData = any; - -export type PrefixSignRetrieveHeadError = PrefixError; - -export interface PrefixSignConfirmData { - /** confirmed */ - status?: string; -} - -export type PrefixSignConfirmError = PrefixError; - -export interface PrefixSignUpdateData { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; -} - -export type PrefixSignUpdateError = PrefixError; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class MySuperApi extends HttpClient { - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/key`, - method: "DELETE", - query: query, - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "GET", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: (pk: string, body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "POST", - body: body, - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: (pk: string, body: PrefixAuthentiqID, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "PUT", - body: body, - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PrefixPushToken, - params: RequestParams = {}, - ) => - this.request({ - path: `/login`, - method: "POST", - query: query, - body: body, - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: PrefixClaims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/scope`, - method: "POST", - query: query, - body: body, - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "DELETE", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "GET", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/spec/const-keyword/schema.ts b/tests/spec/const-keyword/__snapshots__/basic.test.ts.snap similarity index 91% rename from tests/spec/const-keyword/schema.ts rename to tests/spec/const-keyword/__snapshots__/basic.test.ts.snap index d22e7c78..ce0ac325 100644 --- a/tests/spec/const-keyword/schema.ts +++ b/tests/spec/const-keyword/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > const-keyword 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -89,3 +92,5 @@ export type TestNumber10 = 10; * @default null */ export type TestNull = null; +" +`; diff --git a/tests/spec/const-keyword/basic.test.ts b/tests/spec/const-keyword/basic.test.ts new file mode 100644 index 00000000..90d839bf --- /dev/null +++ b/tests/spec/const-keyword/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("const-keyword", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/const-keyword/expected.ts b/tests/spec/const-keyword/expected.ts deleted file mode 100644 index d22e7c78..00000000 --- a/tests/spec/const-keyword/expected.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface ObjTest { - /** - * title - * description - * @default "main" - */ - page_type?: "main"; - /** - * title - * description - */ - page_type_nullable?: "main" | null; -} - -/** - * title - * description - * @default "string" - */ -export type TestString = "string"; - -/** - * title - * description - */ -export type TestStringNullable = "string" | null; - -/** - * title - * description - */ -export type TestBooleanNullable = false | null; - -/** - * title - * description - * @default false - */ -export type TestBooleanFalse = false; - -/** - * title - * description - * @default true - */ -export type TestBooleanTrue = true; - -/** - * title - * description - * @default 5 - */ -export type TestNumber5 = 5; - -/** - * title - * description - */ -export type TestNumberNullable = 666 | null; - -/** - * title - * description - * @default 0 - */ -export type TestNumber0 = 0; - -/** - * title - * description - * @default 10 - */ -export type TestNumber10 = 10; - -/** - * title - * description - * @default null - */ -export type TestNull = null; diff --git a/tests/spec/const-keyword/test.js b/tests/spec/const-keyword/test.js deleted file mode 100644 index a46e7796..00000000 --- a/tests/spec/const-keyword/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "const-keyword test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/custom-extensions/schema.ts b/tests/spec/custom-extensions/__snapshots__/basic.test.ts.snap similarity index 90% rename from tests/spec/custom-extensions/schema.ts rename to tests/spec/custom-extensions/__snapshots__/basic.test.ts.snap index 068638bb..2debf655 100644 --- a/tests/spec/custom-extensions/schema.ts +++ b/tests/spec/custom-extensions/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > custom extensions 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -13,7 +16,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -78,7 +81,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -100,7 +103,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -115,8 +118,8 @@ export class HttpClient { property instanceof Blob ? property : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, + ? JSON.stringify(property) + : \`\${property}\`, ); return formData; }, new FormData()), @@ -180,16 +183,16 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, - signal: cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal, + signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), }).then(async (response) => { - const r = response as HttpResponse; + const r = response.clone() as HttpResponse; r.data = null as unknown as T; r.error = null as unknown as E; @@ -233,9 +236,11 @@ export class Api extends HttpClient this.request({ - path: `/test`, + path: \`/test\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/custom-extensions/basic.test.ts b/tests/spec/custom-extensions/basic.test.ts new file mode 100644 index 00000000..2c3279f9 --- /dev/null +++ b/tests/spec/custom-extensions/basic.test.ts @@ -0,0 +1,35 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("custom extensions", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/custom-extensions/expected.ts b/tests/spec/custom-extensions/expected.ts deleted file mode 100644 index 068638bb..00000000 --- a/tests/spec/custom-extensions/expected.ts +++ /dev/null @@ -1,241 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://example.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl https://example.com - */ -export class Api extends HttpClient { - test = { - /** - * @description Test - * - * @name Test - * @request GET:/test - */ - test: (params: RequestParams = {}) => - this.request({ - path: `/test`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/custom-extensions/test.js b/tests/spec/custom-extensions/test.js deleted file mode 100644 index 2dc72722..00000000 --- a/tests/spec/custom-extensions/test.js +++ /dev/null @@ -1,25 +0,0 @@ -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const { resolve } = require("node:path"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "custom extensions", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/defaultAsSuccess/expected.ts b/tests/spec/defaultAsSuccess/__snapshots__/basic.test.ts.snap similarity index 91% rename from tests/spec/defaultAsSuccess/expected.ts rename to tests/spec/defaultAsSuccess/__snapshots__/basic.test.ts.snap index 682abf15..a246f891 100644 --- a/tests/spec/defaultAsSuccess/expected.ts +++ b/tests/spec/defaultAsSuccess/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --default-as-success 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -53,7 +56,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -118,7 +121,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -140,7 +143,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -156,7 +159,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -220,7 +223,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -272,7 +275,7 @@ export class HttpClient { export class Api extends HttpClient { key = { /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. * * @tags key, delete * @name KeyRevokeNosecret @@ -296,7 +299,7 @@ export class Api extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "DELETE", query: query, format: "json", @@ -304,7 +307,7 @@ export class Api extends HttpClient extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "POST", body: body, format: "json", @@ -349,7 +352,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "DELETE", query: query, format: "json", @@ -374,7 +377,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "GET", format: "json", ...params, @@ -389,7 +392,7 @@ export class Api extends HttpClient this.request({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "HEAD", ...params, }), @@ -409,7 +412,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "POST", body: body, format: "json", @@ -417,7 +420,7 @@ export class Api extends HttpClient extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "PUT", body: body, format: "json", @@ -461,7 +464,7 @@ export class Api extends HttpClient({ - path: `/login`, + path: \`/login\`, method: "POST", query: query, body: body, @@ -494,7 +497,7 @@ export class Api extends HttpClient({ - path: `/scope`, + path: \`/scope\`, method: "POST", query: query, body: body, @@ -517,7 +520,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "DELETE", format: "json", ...params, @@ -540,7 +543,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "GET", format: "json", ...params, @@ -555,7 +558,7 @@ export class Api extends HttpClient this.request({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "HEAD", ...params, }), @@ -575,7 +578,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "POST", type: ContentType.Json, format: "json", @@ -599,9 +602,11 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "PUT", ...params, }), }; } +" +`; diff --git a/tests/spec/defaultAsSuccess/basic.test.ts b/tests/spec/defaultAsSuccess/basic.test.ts new file mode 100644 index 00000000..0369fc0d --- /dev/null +++ b/tests/spec/defaultAsSuccess/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--default-as-success", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + defaultResponseAsSuccess: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/defaultAsSuccess/schema.ts b/tests/spec/defaultAsSuccess/schema.ts deleted file mode 100644 index 682abf15..00000000 --- a/tests/spec/defaultAsSuccess/schema.ts +++ /dev/null @@ -1,607 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class Api extends HttpClient { - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params: RequestParams = {}, - ) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/spec/defaultAsSuccess/test.js b/tests/spec/defaultAsSuccess/test.js deleted file mode 100644 index b8f5b182..00000000 --- a/tests/spec/defaultAsSuccess/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--default-as-success option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - defaultResponseAsSuccess: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/defaultResponse/expected.ts b/tests/spec/defaultResponse/__snapshots__/basic.test.ts.snap similarity index 94% rename from tests/spec/defaultResponse/expected.ts rename to tests/spec/defaultResponse/__snapshots__/basic.test.ts.snap index 4962293d..3286c88a 100644 --- a/tests/spec/defaultResponse/expected.ts +++ b/tests/spec/defaultResponse/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --default-response 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -13,7 +16,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -78,7 +81,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -100,7 +103,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -116,7 +119,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -180,7 +183,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -250,10 +253,12 @@ export class Api extends HttpClient this.request({ - path: `/pets`, + path: \`/pets\`, method: "GET", query: query, ...params, }), }; } +" +`; diff --git a/tests/spec/defaultResponse/basic.test.ts b/tests/spec/defaultResponse/basic.test.ts new file mode 100644 index 00000000..a6cd8a56 --- /dev/null +++ b/tests/spec/defaultResponse/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--default-response", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + defaultResponseType: "unknown", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/defaultResponse/schema.ts b/tests/spec/defaultResponse/schema.ts deleted file mode 100644 index 4962293d..00000000 --- a/tests/spec/defaultResponse/schema.ts +++ /dev/null @@ -1,259 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team (http://swagger.io) - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** tags to filter by */ - tags?: string[]; - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - ...params, - }), - }; -} diff --git a/tests/spec/defaultResponse/test.js b/tests/spec/defaultResponse/test.js deleted file mode 100644 index 255e03c3..00000000 --- a/tests/spec/defaultResponse/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--default-response option test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - defaultResponseType: "unknown", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/deprecated/expected.ts b/tests/spec/deprecated/__snapshots__/basic.test.ts.snap similarity index 95% rename from tests/spec/deprecated/expected.ts rename to tests/spec/deprecated/__snapshots__/basic.test.ts.snap index 22767595..d8ca8953 100644 --- a/tests/spec/deprecated/expected.ts +++ b/tests/spec/deprecated/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > @deprecated 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -13,7 +16,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -78,7 +81,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -100,7 +103,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -116,7 +119,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -180,7 +183,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -258,7 +261,7 @@ export class Api extends HttpClient this.request({ - path: `/pets`, + path: \`/pets\`, method: "GET", query: query, ...params, @@ -274,7 +277,7 @@ export class Api extends HttpClient this.request({ - path: `/pets-deprecated-true`, + path: \`/pets-deprecated-true\`, method: "GET", ...params, }), @@ -288,9 +291,11 @@ export class Api extends HttpClient this.request({ - path: `/pets-deprecated-false`, + path: \`/pets-deprecated-false\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/deprecated/basic.test.ts b/tests/spec/deprecated/basic.test.ts new file mode 100644 index 00000000..f05b2375 --- /dev/null +++ b/tests/spec/deprecated/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("@deprecated", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + queryParamsWithBrackets: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/deprecated/schema.ts b/tests/spec/deprecated/schema.ts deleted file mode 100644 index 22767595..00000000 --- a/tests/spec/deprecated/schema.ts +++ /dev/null @@ -1,296 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team (http://swagger.io) - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets - */ - findPets: ( - query?: { - /** - * tags to filter by - * @deprecated - */ - tags?: string[]; - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - /** - * collection page number - * @default 1 - */ - page?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pets`, - method: "GET", - query: query, - ...params, - }), - }; - petsDeprecatedTrue = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets-deprecated-true - * @deprecated - */ - findPets: (params: RequestParams = {}) => - this.request({ - path: `/pets-deprecated-true`, - method: "GET", - ...params, - }), - }; - petsDeprecatedFalse = { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * - * @name FindPets - * @request GET:/pets-deprecated-false - */ - findPets: (params: RequestParams = {}) => - this.request({ - path: `/pets-deprecated-false`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/deprecated/test.js b/tests/spec/deprecated/test.js deleted file mode 100644 index fab46f43..00000000 --- a/tests/spec/deprecated/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "@deprecated test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - queryParamsWithBrackets: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/discriminator/schema.ts b/tests/spec/discriminator/__snapshots__/basic.test.ts.snap similarity index 97% rename from tests/spec/discriminator/schema.ts rename to tests/spec/discriminator/__snapshots__/basic.test.ts.snap index 92ca7e37..45913264 100644 --- a/tests/spec/discriminator/schema.ts +++ b/tests/spec/discriminator/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > discriminator 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -222,3 +225,5 @@ type BaseInvalidDiscriminatorPropertyName = object; type BaseInvalidDiscriminatorPropertyNameTypeMapping = { "@type": Key; } & Type; +" +`; diff --git a/tests/spec/discriminator/basic.test.ts b/tests/spec/discriminator/basic.test.ts new file mode 100644 index 00000000..b2acb7a2 --- /dev/null +++ b/tests/spec/discriminator/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("discriminator", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/discriminator/expected.ts b/tests/spec/discriminator/expected.ts deleted file mode 100644 index 92ca7e37..00000000 --- a/tests/spec/discriminator/expected.ts +++ /dev/null @@ -1,224 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type SimpleDiscriminator = SimpleObject | ComplexObject; - -export interface SimpleObject { - objectType: string; -} - -export interface ComplexObject { - objectType: string; -} - -export enum BlockDTOEnum { - Csv = "csv", - File = "file", - Kek = "kek", -} - -export type BlockDTOWithEnum = BaseBlockDtoWithEnum & - ( - | BaseBlockDtoWithEnumTypeMapping - | BaseBlockDtoWithEnumTypeMapping - ); - -export type CsvBlockWithEnumDTO = BaseBlockDtoWithEnum & { - type: BlockDTOEnum.Csv; - text: string; -}; - -export type FileBlockWithEnumDTO = BaseBlockDtoWithEnum & { - type: BlockDTOEnum.File; - fileId: string; -}; - -export type BlockDTO = BaseBlockDto & - (BaseBlockDtoTypeMapping<"csv", CsvBlockDTO> | BaseBlockDtoTypeMapping<"file", FileBlockDTO>); - -export type CsvBlockDTO = BaseBlockDto & { - /** @default "csv" */ - type: "csv"; - text: string; -}; - -export type FileBlockDTO = BaseBlockDto & { - /** @default "file" */ - type: "file"; - fileId: string; -}; - -export type Pet = BasePet & - (BasePetPetTypeMapping<"dog", Dog> | BasePetPetTypeMapping<"cat", Cat> | BasePetPetTypeMapping<"lizard", Lizard>); - -export type PetOnlyDiscriminator = - | ({ - pet_type: "dog"; - } & Dog) - | ({ - pet_type: "cat"; - } & Cat) - | ({ - pet_type: "lizard"; - } & Lizard); - -export type Cat = BasePet & { - name?: string; -}; - -export type Dog = BasePet & { - bark?: string; -}; - -export type Lizard = BasePet & { - lovesRocks?: boolean; -}; - -export enum PetEnum { - Dog = "dog", - Lizard = "lizard", - Cat = "cat", -} - -export type PetWithEnum = BasePetWithEnum & - ( - | BasePetWithEnumPetTypeMapping - | BasePetWithEnumPetTypeMapping - | BasePetWithEnumPetTypeMapping - ); - -export type CatWithEnum = BasePetWithEnum & { - name?: string; -}; - -export type DogWithEnum = BasePetWithEnum & { - bark?: string; -}; - -export type LizardWithEnum = BasePetWithEnum & { - lovesRocks?: boolean; -}; - -export type InvalidDiscriminatorPropertyName = BaseInvalidDiscriminatorPropertyName & - ( - | BaseInvalidDiscriminatorPropertyNameTypeMapping<"num", number> - | BaseInvalidDiscriminatorPropertyNameTypeMapping<"str", string> - ); - -/** kek pek */ -export type Variant = - | ({ - type: "update"; - } & VariantUpdate) - | ({ - type: "undo"; - } & VariantUndo) - | ({ - type: "rollback"; - } & VariantRollback) - | ({ - type: "scale"; - } & VariantScale) - | ({ - type: "resources"; - } & VariantResources) - | ({ - type: "firewall"; - } & VariantFirewall) - | ({ - type: "gateway"; - } & VariantGateway); - -/** Proposal to change firewall rules for deployment. */ -export interface VariantFirewall { - /** asdasdasdasdasdsad added to deployment. If not set, no rules are added. */ - rules_added?: string[]; - /** asdasdasdasdasdsad removed from deployment. If not set, no rules were removed. */ - rules_removed?: string[]; -} - -/** asdasdasdasdasd */ -export interface VariantScale { - /** - * asdasdasdasdasdsad - * @example 3 - */ - replicas: number; -} - -/** asdasdasdasdasd */ -export interface VariantResources { - resources: string; -} - -/** asdasdasdasdasd */ -export interface VariantGateway { - /** asdasdasdasdasdsad */ - port?: string; - /** asdasdasdasdasdsad */ - name?: string; - /** asdasdasdasdasdsad */ - domain?: string; -} - -/** Pasdasdasdasdasd. */ -export type VariantUpdate = object; - -/** asdasdasdasdasd */ -export interface VariantRollback { - /** - * asdasdasdasdasdsad - * @example 42 - */ - revision_id: number; -} - -/** asdasdasdasdasdn */ -export type VariantUndo = object; - -interface BaseBlockDtoWithEnum { - title: string; - type: BlockDTOEnum; -} - -type BaseBlockDtoWithEnumTypeMapping = { - type: Key; -} & Type; - -interface BaseBlockDto { - title: string; -} - -type BaseBlockDtoTypeMapping = { - type: Key; -} & Type; - -interface BasePet { - pet_type: string; -} - -type BasePetPetTypeMapping = { - pet_type: Key; -} & Type; - -interface BasePetWithEnum { - pet_type: PetEnum; -} - -type BasePetWithEnumPetTypeMapping = { - pet_type: Key; -} & Type; - -type BaseInvalidDiscriminatorPropertyName = object; - -type BaseInvalidDiscriminatorPropertyNameTypeMapping = { - "@type": Key; -} & Type; diff --git a/tests/spec/discriminator/test.js b/tests/spec/discriminator/test.js deleted file mode 100644 index 3f98388e..00000000 --- a/tests/spec/discriminator/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "discriminator test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/dot-path-params/expected.ts b/tests/spec/dot-path-params/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/dot-path-params/expected.ts rename to tests/spec/dot-path-params/__snapshots__/basic.test.ts.snap index fc274dd7..e4aad5ec 100644 --- a/tests/spec/dot-path-params/expected.ts +++ b/tests/spec/dot-path-params/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --dot-path-params 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -15,7 +18,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -80,7 +83,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -102,7 +105,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -118,7 +121,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -182,7 +185,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -242,10 +245,12 @@ export class Api extends HttpClient this.request({ - path: `/foobar/${truckId}/item`, + path: \`/foobar/\${truckId}/item\`, method: "POST", query: query, ...params, }), }; } +" +`; diff --git a/tests/spec/dot-path-params/basic.test.ts b/tests/spec/dot-path-params/basic.test.ts new file mode 100644 index 00000000..ec04f00e --- /dev/null +++ b/tests/spec/dot-path-params/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--dot-path-params", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/dot-path-params/schema.ts b/tests/spec/dot-path-params/schema.ts deleted file mode 100644 index fc274dd7..00000000 --- a/tests/spec/dot-path-params/schema.ts +++ /dev/null @@ -1,251 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type MyResponse = object; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title unset - * @version unset - */ -export class Api extends HttpClient { - foobar = { - /** - * No description - * - * @name ReproFunc - * @summary Repros an issue - * @request POST:/foobar/{truck.id}/item - */ - reproFunc: ( - truckId: string, - query: { - queryId: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/foobar/${truckId}/item`, - method: "POST", - query: query, - ...params, - }), - }; -} diff --git a/tests/spec/dot-path-params/test.js b/tests/spec/dot-path-params/test.js deleted file mode 100644 index 34c5c833..00000000 --- a/tests/spec/dot-path-params/test.js +++ /dev/null @@ -1,28 +0,0 @@ -const _ = require("lodash"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), - absoluteOutputPath: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName, Exception }) => { - generateApiForTest({ - testName: "--dot-path-params options test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - }).then((output) => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/enumNamesAsValues/expected.ts b/tests/spec/enumNamesAsValues/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/enumNamesAsValues/expected.ts rename to tests/spec/enumNamesAsValues/__snapshots__/basic.test.ts.snap index b08dca68..4a857127 100644 --- a/tests/spec/enumNamesAsValues/expected.ts +++ b/tests/spec/enumNamesAsValues/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --enum-names-as-values 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -102,12 +105,12 @@ export interface JobType { link?: string; /** * Exist only in open source jobs - * Format: `${username}/${projectName}` + * Format: \`\${username}/\${projectName}\` */ github?: string; /** * Exist only in open source jobs - * Format: `${orgname}/${projectName}` + * Format: \`\${orgname}/\${projectName}\` */ npm?: string; /** @@ -126,12 +129,12 @@ export interface PickJobTypeExcludeKeysIdOrId { link?: string; /** * Exist only in open source jobs - * Format: `${username}/${projectName}` + * Format: \`\${username}/\${projectName}\` */ github?: string; /** * Exist only in open source jobs - * Format: `${orgname}/${projectName}` + * Format: \`\${orgname}/\${projectName}\` */ npm?: string; /** @@ -205,7 +208,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -270,7 +273,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -292,7 +295,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -308,7 +311,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -372,7 +375,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -426,7 +429,7 @@ export class Api extends HttpClient this.request({ - path: `/auth`, + path: \`/auth\`, method: "POST", body: data, type: ContentType.Json, @@ -444,7 +447,7 @@ export class Api extends HttpClient this.request({ - path: `/auth/refresh`, + path: \`/auth/refresh\`, method: "POST", secure: true, format: "json", @@ -462,7 +465,7 @@ export class Api extends HttpClient this.request({ - path: `/jobs`, + path: \`/jobs\`, method: "GET", secure: true, format: "json", @@ -479,7 +482,7 @@ export class Api extends HttpClient this.request({ - path: `/jobs`, + path: \`/jobs\`, method: "POST", body: data, secure: true, @@ -498,7 +501,7 @@ export class Api extends HttpClient this.request({ - path: `/jobs/${id}`, + path: \`/jobs/\${id}\`, method: "GET", secure: true, format: "json", @@ -515,7 +518,7 @@ export class Api extends HttpClient this.request({ - path: `/jobs/${id}`, + path: \`/jobs/\${id}\`, method: "PATCH", body: data, secure: true, @@ -534,7 +537,7 @@ export class Api extends HttpClient this.request({ - path: `/jobs/${id}`, + path: \`/jobs/\${id}\`, method: "DELETE", secure: true, format: "json", @@ -551,7 +554,7 @@ export class Api extends HttpClient this.request({ - path: `/projects`, + path: \`/projects\`, method: "GET", format: "json", ...params, @@ -567,7 +570,7 @@ export class Api extends HttpClient this.request({ - path: `/projects`, + path: \`/projects\`, method: "POST", body: data, secure: true, @@ -586,7 +589,7 @@ export class Api extends HttpClient this.request({ - path: `/projects/${id}`, + path: \`/projects/\${id}\`, method: "PATCH", body: data, secure: true, @@ -604,10 +607,12 @@ export class Api extends HttpClient this.request({ - path: `/projects/${id}`, + path: \`/projects/\${id}\`, method: "DELETE", format: "json", ...params, }), }; } +" +`; diff --git a/tests/spec/enumNamesAsValues/basic.test.ts b/tests/spec/enumNamesAsValues/basic.test.ts new file mode 100644 index 00000000..76a7e323 --- /dev/null +++ b/tests/spec/enumNamesAsValues/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--enum-names-as-values", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + enumNamesAsValues: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/enumNamesAsValues/schema.ts b/tests/spec/enumNamesAsValues/schema.ts deleted file mode 100644 index b08dca68..00000000 --- a/tests/spec/enumNamesAsValues/schema.ts +++ /dev/null @@ -1,613 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type TestAllOfDc = (FooBarBaz & FooBar) & { - prop?: string; -}; - -export type TestAllOfDc2 = FooBarBaz & { - prop?: string; -}; - -export type TestAnyOfDc = (FooBarBaz | FooBar) & { - prop?: string; -}; - -export type TestOneOfDc = (FooBarBaz | FooBar) & { - prop?: string; -}; - -/** - * FooBar - * @format int32 - */ -export enum IntEnumWithNames { - Unknown = "Unknown", - String = "String", - Int32 = "Int32", - Int64 = "Int64", - Double = "Double", - DateTime = "DateTime", - Test2 = "Test2", - Test23 = "Test23", - Tess44 = "Tess44", - BooFar = "BooFar", -} - -export enum PetIds { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetIdsWithWrongEnum { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** Information about job */ -export interface FooBarBaz { - id?: string; - kind?: JobKind; - name?: string; - link?: string; -} - -/** Information about job */ -export interface FooBar { - kind?: JobKind; -} - -/** Information about job */ -export interface FooBaz { - name?: string; - link?: string; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickUserTypeExcludeKeysIdOrId { - username: string; - password: string; -} - -export type OmitUserTypeIdOrId = PickUserTypeExcludeKeysIdOrId; - -export type OmitIdUserType = OmitUserTypeIdOrId; - -export type AuthUserType = OmitIdUserType; - -export enum JobKind { - COMPANY = "COMPANY", - PERSONAL = "PERSONAL", - FREELANCE = "FREELANCE", - OPEN_SOURCE = "OPEN_SOURCE", -} - -/** Information about job */ -export interface JobType { - id: string; - kind: JobKind; - name?: string; - link?: string; - /** - * Exist only in open source jobs - * Format: `${username}/${projectName}` - */ - github?: string; - /** - * Exist only in open source jobs - * Format: `${orgname}/${projectName}` - */ - npm?: string; - /** - * Exist only in open source jobs - * Means project is dev. tool (like swagger code generator) - */ - isTool?: boolean; - /** web site address */ - address?: string; -} - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickJobTypeExcludeKeysIdOrId { - kind: JobKind; - name?: string; - link?: string; - /** - * Exist only in open source jobs - * Format: `${username}/${projectName}` - */ - github?: string; - /** - * Exist only in open source jobs - * Format: `${orgname}/${projectName}` - */ - npm?: string; - /** - * Exist only in open source jobs - * Means project is dev. tool (like swagger code generator) - */ - isTool?: boolean; - /** web site address */ - address?: string; -} - -export type OmitJobTypeIdOrId = PickJobTypeExcludeKeysIdOrId; - -export type OmitIdJobType = OmitJobTypeIdOrId; - -export type JobUpdateType = OmitIdJobType; - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickProjectTypeExcludeKeysJob { - id: string; - name?: string; - /** @format double */ - year: number; - description: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; -} - -export type OmitProjectTypeJob = PickProjectTypeExcludeKeysJob; - -export type ExtractedProjectType = OmitProjectTypeJob & { - /** Information about job */ - job: JobType; -}; - -/** From T, pick a set of properties whose keys are in the union K */ -export interface PickProjectTypeExcludeKeysIdOrId { - name?: string; - job: string; - /** @format double */ - year: number; - description: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; -} - -export type OmitProjectTypeIdOrId = PickProjectTypeExcludeKeysIdOrId; - -export type OmitIdProjectType = OmitProjectTypeIdOrId; - -export type ProjectUpdateType = OmitIdProjectType; - -export interface ProjectType { - id: string; - /** @format double */ - year: number; - description: string; - job: string; - name?: string; - notImportant?: boolean; - prefix?: string; - tags: string[]; - teamSize: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://localhost:8080/api/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl http://localhost:8080/api/v1 - */ -export class Api extends HttpClient { - auth = { - /** - * No description - * - * @tags Auth - * @name Login - * @request POST:/auth - */ - login: (data: AuthUserType, params: RequestParams = {}) => - this.request({ - path: `/auth`, - method: "POST", - body: data, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Auth - * @name Refresh - * @request POST:/auth/refresh - * @secure - */ - refresh: (params: RequestParams = {}) => - this.request({ - path: `/auth/refresh`, - method: "POST", - secure: true, - format: "json", - ...params, - }), - }; - jobs = { - /** - * No description - * - * @tags Jobs - * @name GetJobs - * @request GET:/jobs - * @secure - */ - getJobs: (params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name AddJob - * @request POST:/jobs - * @secure - */ - addJob: (data: JobUpdateType, params: RequestParams = {}) => - this.request({ - path: `/jobs`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name GetJob - * @request GET:/jobs/{id} - * @secure - */ - getJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name UpdateJob - * @request PATCH:/jobs/{id} - * @secure - */ - updateJob: (id: string, data: JobUpdateType, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Jobs - * @name DeleteJob - * @request DELETE:/jobs/{id} - * @secure - */ - deleteJob: (id: string, params: RequestParams = {}) => - this.request({ - path: `/jobs/${id}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - }; - projects = { - /** - * No description - * - * @tags Projects - * @name GetProjects - * @request GET:/projects - */ - getProjects: (params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name AddProjects - * @request POST:/projects - * @secure - */ - addProjects: (data: ProjectUpdateType, params: RequestParams = {}) => - this.request({ - path: `/projects`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name UpdateProject - * @request PATCH:/projects/{id} - * @secure - */ - updateProject: (id: string, data: ProjectUpdateType, params: RequestParams = {}) => - this.request({ - path: `/projects/${id}`, - method: "PATCH", - body: data, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags Projects - * @name DeleteProject - * @request DELETE:/projects/{id} - */ - deleteProject: (id: string, params: RequestParams = {}) => - this.request({ - path: `/projects/${id}`, - method: "DELETE", - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/enumNamesAsValues/test.js b/tests/spec/enumNamesAsValues/test.js deleted file mode 100644 index 5433d3d1..00000000 --- a/tests/spec/enumNamesAsValues/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--enum-names-as-values option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - enumNamesAsValues: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/enums-2.0/schema.ts b/tests/spec/enums-2.0/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/enums-2.0/schema.ts rename to tests/spec/enums-2.0/__snapshots__/basic.test.ts.snap index 4fa5c9ad..dcbb2c54 100644 --- a/tests/spec/enums-2.0/schema.ts +++ b/tests/spec/enums-2.0/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > enums-2.0 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -98,3 +101,5 @@ export interface PostFooPayload { export interface PostFooParams { testKek: 1 | 2 | 3 | 4 | 5; } +" +`; diff --git a/tests/spec/enums-2.0/basic.test.ts b/tests/spec/enums-2.0/basic.test.ts new file mode 100644 index 00000000..ebe7396e --- /dev/null +++ b/tests/spec/enums-2.0/basic.test.ts @@ -0,0 +1,40 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("enums-2.0", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + extractRequestParams: true, + extractRequestBody: true, + extractResponseBody: true, + extractResponseError: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/enums-2.0/expected.ts b/tests/spec/enums-2.0/expected.ts deleted file mode 100644 index 4fa5c9ad..00000000 --- a/tests/spec/enums-2.0/expected.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface ObjWithEnum { - "prop-enum-nullable"?: 0 | 1 | 2 | 3 | 4 | 5 | null; - "prop-enum"?: 0 | 1 | 2 | 3 | 4 | 5; -} - -export enum XNullableEnum { - Value0 = 0, - Value1 = 1, - Value2 = 2, - Value3 = 3, - Value4 = 4, - Value5 = 5, -} - -export enum SimpleEnumNonNullable { - Value0 = 0, - Value1 = 1, - Value2 = 2, - Value3 = 3, - Value4 = 4, - Value5 = 5, -} - -export enum OnlyEnumNames { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -export enum StringOnlyEnumNames { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -export enum StringEnums { - Bla = "foo", - Blabla = "bar", - Boiler = "Boiler", -} - -export enum StringCompleteEnums { - Bla = "foo", - Blabla = "bar", - Boiler = "baz", -} - -/** @format int32 */ -export enum EmptyEnum { - Bla = "Bla", - Blabla = "Blabla", - Boiler = "Boiler", -} - -/** @format int32 */ -export enum EnumWithMoreNames { - Bla = 1, - Blabla = "Blabla", - Boiler = "Boiler", -} - -/** @format int32 */ -export enum SomeInterestEnum { - Bla = 6, - Blabla = 2, - Boiler = 1, - Bbabab = 67, - Nowadays = 88, - FAIL = 122, - Vvvvv = 88, - ASdasAS = 0, - ASDsacZX = 213, - Zook = 12378, - EnumMm = 123125, - VCsa = 32452, - Yuuu = 1111, - ASddd = 66666, - ASdsdsa = "ASdsdsa", - ASDds = "ASDds", - HSDFDS = "HSDFDS", -} - -export interface PostFooPayload { - someTypeId?: 1 | 2 | 3 | 4 | 5; -} - -export interface PostFooParams { - testKek: 1 | 2 | 3 | 4 | 5; -} diff --git a/tests/spec/enums-2.0/test.js b/tests/spec/enums-2.0/test.js deleted file mode 100644 index 802558e7..00000000 --- a/tests/spec/enums-2.0/test.js +++ /dev/null @@ -1,30 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "enums-2.0 option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - extractRequestParams: true, - extractRequestBody: true, - extractResponseBody: true, - extractResponseError: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/extra-templates/expected.ts b/tests/spec/extra-templates/expected.ts deleted file mode 100644 index cd2bfe71..00000000 --- a/tests/spec/extra-templates/expected.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - Swagger Petstore - 1.0.0 - A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification -*/ -export class Api { - private request(params: Record) { - return fetch(params as any); - } -} diff --git a/tests/spec/extract-enums/v2.0/expected.ts b/tests/spec/extract-enums/v2.0/expected.ts deleted file mode 100644 index 7d56cc7a..00000000 --- a/tests/spec/extract-enums/v2.0/expected.ts +++ /dev/null @@ -1,238 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export enum TypeNamePrefixEnumRootTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", - EnumKeyPrefixTest1EnumKeySuffix = "test1", - EnumKeyPrefixTest2EnumKeySuffix = "test2", -} - -export interface TypeNamePrefixTreeTypeNameSuffix { - tree?: { - mode?: TypeNamePrefixTreeModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixTreeModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixTreeTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixTreeBerekeEnumTypeNameSuffix; - }[]; -} - -export enum TypeNamePrefixOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringCompleteEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "baz", -} - -/** @format int32 */ -export enum TypeNamePrefixEmptyEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixEnumWithMoreNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 1, - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixSomeInterestEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 6, - EnumKeyPrefixBlablaEnumKeySuffix = 2, - EnumKeyPrefixBoilerEnumKeySuffix = 1, - EnumKeyPrefixBbababEnumKeySuffix = 67, - EnumKeyPrefixNowadaysEnumKeySuffix = 88, - EnumKeyPrefix_FAIL_EnumKeySuffix = 122, - EnumKeyPrefixVvvvvEnumKeySuffix = 88, - EnumKeyPrefixASdasASEnumKeySuffix = 0, - EnumKeyPrefixASDsacZXEnumKeySuffix = 213, - EnumKeyPrefixZookEnumKeySuffix = 12378, - EnumKeyPrefixEnumMmEnumKeySuffix = 123125, - EnumKeyPrefixVCsaEnumKeySuffix = 32452, - EnumKeyPrefixYuuuEnumKeySuffix = 1111, - EnumKeyPrefixASdddEnumKeySuffix = 66666, - EnumKeyPrefixASdsdsaEnumKeySuffix = "ASdsdsa", - EnumKeyPrefixASDdsEnumKeySuffix = "ASDds", - EnumKeyPrefix_HSDFDS_EnumKeySuffix = "HSDFDS", -} - -export interface TypeNamePrefixSuperDuperStructDTOTypeNameSuffix { - /** @example "100" */ - id: number; - /** @example "APPROVED" */ - state: TypeNamePrefixSuperDuperStructDtoStateEnumTypeNameSuffix; -} - -export type TypeNamePrefixNullableEnumTypeNameSuffix = null; - -/** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ -export type TypeNamePrefixCodeScanningAlertDismissedReasonTypeNameSuffix = - TypeNamePrefixCodeScanningAlertDismissedReasonEnumTypeNameSuffix | null; - -export enum TypeNamePrefixTreeModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixTreeModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixTreeTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixTreeBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @example "APPROVED" */ -export enum TypeNamePrefixSuperDuperStructDtoStateEnumTypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export enum TypeNamePrefixCodeScanningAlertDismissedReasonEnumTypeNameSuffix { - EnumKeyPrefixFalsePositiveEnumKeySuffix = "false positive", - EnumKeyPrefixWontFixEnumKeySuffix = "won't fix", - EnumKeyPrefixUsedInTestsEnumKeySuffix = "used in tests", -} - -/** @example "APPROVED" */ -export enum TypeNamePrefixNameSpaceAddSuperDuperEnumTypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export type TypeNamePrefixNameSpaceAddSuperDuperDataTypeNameSuffix = - TypeNamePrefixNameSpaceAddSuperDuperEnum1TypeNameSuffix; - -/** @example "APPROVED" */ -export enum TypeNamePrefixNameSpaceAddSuperDuperEnum1TypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export interface TypeNamePrefixIssuesDetailParamsTypeNameSuffix { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: TypeNamePrefixFilterEnumTypeNameSuffix; - /** @default "open" */ - state: TypeNamePrefixStateEnumTypeNameSuffix; - /** @default "created" */ - sort: TypeNamePrefixSortEnumTypeNameSuffix; - /** @default "desc" */ - direction: TypeNamePrefixDirectionEnumTypeNameSuffix; - org: string; -} - -/** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ -export enum TypeNamePrefixFilterEnumTypeNameSuffix { - EnumKeyPrefixAssignedEnumKeySuffix = "assigned", - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixMentionedEnumKeySuffix = "mentioned", - EnumKeyPrefixSubscribedEnumKeySuffix = "subscribed", - EnumKeyPrefixAllEnumKeySuffix = "all", -} - -/** @default "open" */ -export enum TypeNamePrefixStateEnumTypeNameSuffix { - EnumKeyPrefixOpenEnumKeySuffix = "open", - EnumKeyPrefixClosedEnumKeySuffix = "closed", -} - -/** @default "created" */ -export enum TypeNamePrefixSortEnumTypeNameSuffix { - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixUpdatedEnumKeySuffix = "updated", - EnumKeyPrefixCommentsEnumKeySuffix = "comments", -} - -/** @default "desc" */ -export enum TypeNamePrefixDirectionEnumTypeNameSuffix { - EnumKeyPrefixAscEnumKeySuffix = "asc", - EnumKeyPrefixDescEnumKeySuffix = "desc", -} - -export type TypeNamePrefixIssuesDetailDataTypeNameSuffix = any; - -/** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ -export enum TypeNamePrefixIssuesDetailParams1FilterEnumTypeNameSuffix { - EnumKeyPrefixAssignedEnumKeySuffix = "assigned", - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixMentionedEnumKeySuffix = "mentioned", - EnumKeyPrefixSubscribedEnumKeySuffix = "subscribed", - EnumKeyPrefixAllEnumKeySuffix = "all", -} - -/** @default "open" */ -export enum TypeNamePrefixIssuesDetailParams1StateEnumTypeNameSuffix { - EnumKeyPrefixOpenEnumKeySuffix = "open", - EnumKeyPrefixClosedEnumKeySuffix = "closed", -} - -/** @default "created" */ -export enum TypeNamePrefixIssuesDetailParams1SortEnumTypeNameSuffix { - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixUpdatedEnumKeySuffix = "updated", - EnumKeyPrefixCommentsEnumKeySuffix = "comments", -} - -/** @default "desc" */ -export enum TypeNamePrefixIssuesDetailParams1DirectionEnumTypeNameSuffix { - EnumKeyPrefixAscEnumKeySuffix = "asc", - EnumKeyPrefixDescEnumKeySuffix = "desc", -} diff --git a/tests/spec/extract-enums/v2.0/schema.ts b/tests/spec/extract-enums/v2.0/schema.ts deleted file mode 100644 index 7d56cc7a..00000000 --- a/tests/spec/extract-enums/v2.0/schema.ts +++ /dev/null @@ -1,238 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export enum TypeNamePrefixEnumRootTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", - EnumKeyPrefixTest1EnumKeySuffix = "test1", - EnumKeyPrefixTest2EnumKeySuffix = "test2", -} - -export interface TypeNamePrefixTreeTypeNameSuffix { - tree?: { - mode?: TypeNamePrefixTreeModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixTreeModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixTreeTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixTreeBerekeEnumTypeNameSuffix; - }[]; -} - -export enum TypeNamePrefixOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringCompleteEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "baz", -} - -/** @format int32 */ -export enum TypeNamePrefixEmptyEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixEnumWithMoreNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 1, - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixSomeInterestEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 6, - EnumKeyPrefixBlablaEnumKeySuffix = 2, - EnumKeyPrefixBoilerEnumKeySuffix = 1, - EnumKeyPrefixBbababEnumKeySuffix = 67, - EnumKeyPrefixNowadaysEnumKeySuffix = 88, - EnumKeyPrefix_FAIL_EnumKeySuffix = 122, - EnumKeyPrefixVvvvvEnumKeySuffix = 88, - EnumKeyPrefixASdasASEnumKeySuffix = 0, - EnumKeyPrefixASDsacZXEnumKeySuffix = 213, - EnumKeyPrefixZookEnumKeySuffix = 12378, - EnumKeyPrefixEnumMmEnumKeySuffix = 123125, - EnumKeyPrefixVCsaEnumKeySuffix = 32452, - EnumKeyPrefixYuuuEnumKeySuffix = 1111, - EnumKeyPrefixASdddEnumKeySuffix = 66666, - EnumKeyPrefixASdsdsaEnumKeySuffix = "ASdsdsa", - EnumKeyPrefixASDdsEnumKeySuffix = "ASDds", - EnumKeyPrefix_HSDFDS_EnumKeySuffix = "HSDFDS", -} - -export interface TypeNamePrefixSuperDuperStructDTOTypeNameSuffix { - /** @example "100" */ - id: number; - /** @example "APPROVED" */ - state: TypeNamePrefixSuperDuperStructDtoStateEnumTypeNameSuffix; -} - -export type TypeNamePrefixNullableEnumTypeNameSuffix = null; - -/** **Required when the state is dismissed.** The reason for dismissing or closing the alert. Can be one of: `false positive`, `won't fix`, and `used in tests`. */ -export type TypeNamePrefixCodeScanningAlertDismissedReasonTypeNameSuffix = - TypeNamePrefixCodeScanningAlertDismissedReasonEnumTypeNameSuffix | null; - -export enum TypeNamePrefixTreeModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixTreeModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixTreeTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixTreeBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @example "APPROVED" */ -export enum TypeNamePrefixSuperDuperStructDtoStateEnumTypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export enum TypeNamePrefixCodeScanningAlertDismissedReasonEnumTypeNameSuffix { - EnumKeyPrefixFalsePositiveEnumKeySuffix = "false positive", - EnumKeyPrefixWontFixEnumKeySuffix = "won't fix", - EnumKeyPrefixUsedInTestsEnumKeySuffix = "used in tests", -} - -/** @example "APPROVED" */ -export enum TypeNamePrefixNameSpaceAddSuperDuperEnumTypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export type TypeNamePrefixNameSpaceAddSuperDuperDataTypeNameSuffix = - TypeNamePrefixNameSpaceAddSuperDuperEnum1TypeNameSuffix; - -/** @example "APPROVED" */ -export enum TypeNamePrefixNameSpaceAddSuperDuperEnum1TypeNameSuffix { - EnumKeyPrefix_NEW_EnumKeySuffix = "NEW", - EnumKeyPrefix_PENDING_EnumKeySuffix = "PENDING", -} - -export interface TypeNamePrefixIssuesDetailParamsTypeNameSuffix { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: TypeNamePrefixFilterEnumTypeNameSuffix; - /** @default "open" */ - state: TypeNamePrefixStateEnumTypeNameSuffix; - /** @default "created" */ - sort: TypeNamePrefixSortEnumTypeNameSuffix; - /** @default "desc" */ - direction: TypeNamePrefixDirectionEnumTypeNameSuffix; - org: string; -} - -/** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ -export enum TypeNamePrefixFilterEnumTypeNameSuffix { - EnumKeyPrefixAssignedEnumKeySuffix = "assigned", - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixMentionedEnumKeySuffix = "mentioned", - EnumKeyPrefixSubscribedEnumKeySuffix = "subscribed", - EnumKeyPrefixAllEnumKeySuffix = "all", -} - -/** @default "open" */ -export enum TypeNamePrefixStateEnumTypeNameSuffix { - EnumKeyPrefixOpenEnumKeySuffix = "open", - EnumKeyPrefixClosedEnumKeySuffix = "closed", -} - -/** @default "created" */ -export enum TypeNamePrefixSortEnumTypeNameSuffix { - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixUpdatedEnumKeySuffix = "updated", - EnumKeyPrefixCommentsEnumKeySuffix = "comments", -} - -/** @default "desc" */ -export enum TypeNamePrefixDirectionEnumTypeNameSuffix { - EnumKeyPrefixAscEnumKeySuffix = "asc", - EnumKeyPrefixDescEnumKeySuffix = "desc", -} - -export type TypeNamePrefixIssuesDetailDataTypeNameSuffix = any; - -/** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ -export enum TypeNamePrefixIssuesDetailParams1FilterEnumTypeNameSuffix { - EnumKeyPrefixAssignedEnumKeySuffix = "assigned", - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixMentionedEnumKeySuffix = "mentioned", - EnumKeyPrefixSubscribedEnumKeySuffix = "subscribed", - EnumKeyPrefixAllEnumKeySuffix = "all", -} - -/** @default "open" */ -export enum TypeNamePrefixIssuesDetailParams1StateEnumTypeNameSuffix { - EnumKeyPrefixOpenEnumKeySuffix = "open", - EnumKeyPrefixClosedEnumKeySuffix = "closed", -} - -/** @default "created" */ -export enum TypeNamePrefixIssuesDetailParams1SortEnumTypeNameSuffix { - EnumKeyPrefixCreatedEnumKeySuffix = "created", - EnumKeyPrefixUpdatedEnumKeySuffix = "updated", - EnumKeyPrefixCommentsEnumKeySuffix = "comments", -} - -/** @default "desc" */ -export enum TypeNamePrefixIssuesDetailParams1DirectionEnumTypeNameSuffix { - EnumKeyPrefixAscEnumKeySuffix = "asc", - EnumKeyPrefixDescEnumKeySuffix = "desc", -} diff --git a/tests/spec/extract-enums/v3.0/expected.ts b/tests/spec/extract-enums/v3.0/expected.ts deleted file mode 100644 index 95414617..00000000 --- a/tests/spec/extract-enums/v3.0/expected.ts +++ /dev/null @@ -1,400 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export enum TypeNamePrefixEnumRootTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", - EnumKeyPrefixTest1EnumKeySuffix = "test1", - EnumKeyPrefixTest2EnumKeySuffix = "test2", -} - -export interface TypeNamePrefixTreeTypeNameSuffix { - tree?: { - mode?: TypeNamePrefixTreeModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixTreeModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixTreeTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixTreeBerekeEnumTypeNameSuffix; - }[]; -} - -export enum TypeNamePrefixOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringCompleteEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "baz", -} - -/** @format int32 */ -export enum TypeNamePrefixEmptyEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixEnumWithMoreNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 1, - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixSomeInterestEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 6, - EnumKeyPrefixBlablaEnumKeySuffix = 2, - EnumKeyPrefixBoilerEnumKeySuffix = 1, - EnumKeyPrefixBbababEnumKeySuffix = 67, - EnumKeyPrefixNowadaysEnumKeySuffix = 88, - EnumKeyPrefix_FAIL_EnumKeySuffix = 122, - EnumKeyPrefixVvvvvEnumKeySuffix = 88, - EnumKeyPrefixASdasASEnumKeySuffix = 0, - EnumKeyPrefixASDsacZXEnumKeySuffix = 213, - EnumKeyPrefixZookEnumKeySuffix = 12378, - EnumKeyPrefixEnumMmEnumKeySuffix = 123125, - EnumKeyPrefixVCsaEnumKeySuffix = 32452, - EnumKeyPrefixYuuuEnumKeySuffix = 1111, - EnumKeyPrefixASdddEnumKeySuffix = 66666, - EnumKeyPrefixASdsdsaEnumKeySuffix = "ASdsdsa", - EnumKeyPrefixASDdsEnumKeySuffix = "ASDds", - EnumKeyPrefix_HSDFDS_EnumKeySuffix = "HSDFDS", -} - -export enum TypeNamePrefixTreeModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixTreeModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixTreeTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixTreeBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export interface TypeNamePrefixGetAbcGetParamsTypeNameSuffix { - statuses?: any[]; - /** - * Order By - * @default "created_time" - */ - order_by?: TypeNamePrefixOrderByEnumTypeNameSuffix; - statusesPath?: any[]; - /** - * Order By - * @default "created_time" - */ - orderPathBy?: TypeNamePrefixOrderPathByEnumTypeNameSuffix; - /** Tag Ids */ - tagPathIds?: string[]; -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderPathByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderPathByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderHeaderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1EnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export interface TypeNamePrefixGetCdeGetParamsTypeNameSuffix { - /** Tag Ids */ - tag_ids?: string[]; - SHOULD_NOT_BE_ANY?: { - tree?: { - mode?: TypeNamePrefixShouldNotBeAnyModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixShouldNotBeAnyModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixShouldNotBeAnyTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixShouldNotBeAnyBerekeEnumTypeNameSuffix; - }[]; - }; - /** - * Order By - * @default "created_time" - */ - order_by?: TypeNamePrefixOrderByEnum1TypeNameSuffix; - shouldNotBeAnyPath?: { - tree?: { - mode?: TypeNamePrefixShouldNotBeAnyPathModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixShouldNotBeAnyPathModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixShouldNotBeAnyPathTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixShouldNotBeAnyPathBerekeEnumTypeNameSuffix; - }[]; - }; - /** - * Order By - * @default "created_time" - */ - orderByPath?: TypeNamePrefixOrderByPathEnumTypeNameSuffix; -} - -export enum TypeNamePrefixShouldNotBeAnyModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixShouldNotBeAnyModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixShouldNotBeAnyTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixShouldNotBeAnyBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByEnum1TypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixShouldNotBeAnyPathModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixShouldNotBeAnyPathModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixShouldNotBeAnyPathTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixShouldNotBeAnyPathBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByPathEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnum1TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnum1TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnum1TypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnum1TypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByPathEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnum2TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnum2TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnum2TypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnum2TypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByHeaderEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1EnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} diff --git a/tests/spec/extract-enums/v3.0/schema.ts b/tests/spec/extract-enums/v3.0/schema.ts deleted file mode 100644 index 95414617..00000000 --- a/tests/spec/extract-enums/v3.0/schema.ts +++ /dev/null @@ -1,400 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export enum TypeNamePrefixEnumRootTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", - EnumKeyPrefixTest1EnumKeySuffix = "test1", - EnumKeyPrefixTest2EnumKeySuffix = "test2", -} - -export interface TypeNamePrefixTreeTypeNameSuffix { - tree?: { - mode?: TypeNamePrefixTreeModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixTreeModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixTreeTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixTreeBerekeEnumTypeNameSuffix; - }[]; -} - -export enum TypeNamePrefixOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringOnlyEnumNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export enum TypeNamePrefixStringCompleteEnumsTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "foo", - EnumKeyPrefixBlablaEnumKeySuffix = "bar", - EnumKeyPrefixBoilerEnumKeySuffix = "baz", -} - -/** @format int32 */ -export enum TypeNamePrefixEmptyEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixEnumWithMoreNamesTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 1, - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** @format int32 */ -export enum TypeNamePrefixSomeInterestEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = 6, - EnumKeyPrefixBlablaEnumKeySuffix = 2, - EnumKeyPrefixBoilerEnumKeySuffix = 1, - EnumKeyPrefixBbababEnumKeySuffix = 67, - EnumKeyPrefixNowadaysEnumKeySuffix = 88, - EnumKeyPrefix_FAIL_EnumKeySuffix = 122, - EnumKeyPrefixVvvvvEnumKeySuffix = 88, - EnumKeyPrefixASdasASEnumKeySuffix = 0, - EnumKeyPrefixASDsacZXEnumKeySuffix = 213, - EnumKeyPrefixZookEnumKeySuffix = 12378, - EnumKeyPrefixEnumMmEnumKeySuffix = 123125, - EnumKeyPrefixVCsaEnumKeySuffix = 32452, - EnumKeyPrefixYuuuEnumKeySuffix = 1111, - EnumKeyPrefixASdddEnumKeySuffix = 66666, - EnumKeyPrefixASdsdsaEnumKeySuffix = "ASdsdsa", - EnumKeyPrefixASDdsEnumKeySuffix = "ASDds", - EnumKeyPrefix_HSDFDS_EnumKeySuffix = "HSDFDS", -} - -export enum TypeNamePrefixTreeModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixTreeModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixTreeTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixTreeBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -export interface TypeNamePrefixGetAbcGetParamsTypeNameSuffix { - statuses?: any[]; - /** - * Order By - * @default "created_time" - */ - order_by?: TypeNamePrefixOrderByEnumTypeNameSuffix; - statusesPath?: any[]; - /** - * Order By - * @default "created_time" - */ - orderPathBy?: TypeNamePrefixOrderPathByEnumTypeNameSuffix; - /** Tag Ids */ - tagPathIds?: string[]; -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderPathByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderPathByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1OrderHeaderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetAbcGetParams1EnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export interface TypeNamePrefixGetCdeGetParamsTypeNameSuffix { - /** Tag Ids */ - tag_ids?: string[]; - SHOULD_NOT_BE_ANY?: { - tree?: { - mode?: TypeNamePrefixShouldNotBeAnyModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixShouldNotBeAnyModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixShouldNotBeAnyTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixShouldNotBeAnyBerekeEnumTypeNameSuffix; - }[]; - }; - /** - * Order By - * @default "created_time" - */ - order_by?: TypeNamePrefixOrderByEnum1TypeNameSuffix; - shouldNotBeAnyPath?: { - tree?: { - mode?: TypeNamePrefixShouldNotBeAnyPathModeEnumTypeNameSuffix; - "mode-num"?: TypeNamePrefixShouldNotBeAnyPathModeNumEnumTypeNameSuffix; - type?: TypeNamePrefixShouldNotBeAnyPathTypeEnumTypeNameSuffix; - bereke?: TypeNamePrefixShouldNotBeAnyPathBerekeEnumTypeNameSuffix; - }[]; - }; - /** - * Order By - * @default "created_time" - */ - orderByPath?: TypeNamePrefixOrderByPathEnumTypeNameSuffix; -} - -export enum TypeNamePrefixShouldNotBeAnyModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixShouldNotBeAnyModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixShouldNotBeAnyTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixShouldNotBeAnyBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByEnum1TypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixShouldNotBeAnyPathModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixShouldNotBeAnyPathModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixShouldNotBeAnyPathTypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixShouldNotBeAnyPathBerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixOrderByPathEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnumTypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnumTypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnumTypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnum1TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnum1TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnum1TypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnum1TypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByPathEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeEnum2TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = "100644", - EnumKeyPrefixInvalidKey100755EnumKeySuffix = "100755", - EnumKeyPrefixInvalidKey040000EnumKeySuffix = "040000", - EnumKeyPrefixInvalidKey160000EnumKeySuffix = "160000", - EnumKeyPrefixInvalidKey120000EnumKeySuffix = "120000", -} - -export enum TypeNamePrefixGetCdeGetParams1ModeNumEnum2TypeNameSuffix { - EnumKeyPrefixInvalidKey100644EnumKeySuffix = 100644, - EnumKeyPrefixInvalidKey100755EnumKeySuffix = 100755, - EnumKeyPrefixInvalidKey40000EnumKeySuffix = 40000, - EnumKeyPrefixInvalidKey160000EnumKeySuffix = 160000, - EnumKeyPrefixInvalidKey120000EnumKeySuffix = 120000, -} - -export enum TypeNamePrefixGetCdeGetParams1TypeEnum2TypeNameSuffix { - EnumKeyPrefixBlobEnumKeySuffix = "blob", - EnumKeyPrefixTreeEnumKeySuffix = "tree", - EnumKeyPrefixCommitEnumKeySuffix = "commit", -} - -export enum TypeNamePrefixGetCdeGetParams1BerekeEnum2TypeNameSuffix { - EnumKeyPrefixBlaEnumKeySuffix = "Bla", - EnumKeyPrefixBlablaEnumKeySuffix = "Blabla", - EnumKeyPrefixBoilerEnumKeySuffix = "Boiler", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1OrderByHeaderEnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} - -/** - * Order By - * @default "created_time" - */ -export enum TypeNamePrefixGetCdeGetParams1EnumTypeNameSuffix { - EnumKeyPrefixCreatedTimeEnumKeySuffix = "created_time", -} diff --git a/tests/spec/extractRequestBody/schema.ts b/tests/spec/extractRequestBody/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/extractRequestBody/schema.ts rename to tests/spec/extractRequestBody/__snapshots__/basic.test.ts.snap index 2a26c8e7..88abe76a 100644 --- a/tests/spec/extractRequestBody/schema.ts +++ b/tests/spec/extractRequestBody/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --extract-request-body 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -166,7 +169,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -231,7 +234,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -253,7 +256,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -269,7 +272,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -333,7 +336,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -381,7 +384,7 @@ export class HttpClient { * @externalDocs http://swagger.io * @contact * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ export class Api extends HttpClient { pet = { @@ -396,7 +399,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "POST", body: body, secure: true, @@ -415,7 +418,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "PUT", body: body, secure: true, @@ -440,7 +443,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByStatus`, + path: \`/pet/findByStatus\`, method: "GET", query: query, secure: true, @@ -458,7 +461,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/single-form-url-encoded`, + path: \`/pet/single-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -482,7 +485,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/form-url-encoded`, + path: \`/pet/form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -508,7 +511,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/end-form-url-encoded`, + path: \`/pet/end-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -533,7 +536,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByTags`, + path: \`/pet/findByTags\`, method: "GET", query: query, secure: true, @@ -552,7 +555,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "GET", secure: true, format: "json", @@ -570,7 +573,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "POST", body: data, secure: true, @@ -589,7 +592,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "DELETE", secure: true, ...params, @@ -606,7 +609,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}/uploadImage`, + path: \`/pet/\${petId}/uploadImage\`, method: "POST", body: data, secure: true, @@ -627,7 +630,7 @@ export class Api extends HttpClient this.request, any>({ - path: `/store/inventory`, + path: \`/store/inventory\`, method: "GET", secure: true, format: "json", @@ -644,7 +647,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order`, + path: \`/store/order\`, method: "POST", body: body, type: ContentType.Json, @@ -662,7 +665,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "GET", format: "json", ...params, @@ -678,7 +681,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "DELETE", ...params, }), @@ -694,7 +697,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "POST", body: body, type: ContentType.Json, @@ -711,7 +714,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithArray`, + path: \`/user/createWithArray\`, method: "POST", body: body, type: ContentType.Json, @@ -728,7 +731,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithList`, + path: \`/user/createWithList\`, method: "POST", body: body, type: ContentType.Json, @@ -753,7 +756,7 @@ export class Api extends HttpClient this.request({ - path: `/user/login`, + path: \`/user/login\`, method: "GET", query: query, format: "json", @@ -770,7 +773,7 @@ export class Api extends HttpClient this.request({ - path: `/user/logout`, + path: \`/user/logout\`, method: "GET", ...params, }), @@ -785,7 +788,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "GET", format: "json", ...params, @@ -801,7 +804,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -818,9 +821,11 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "DELETE", ...params, }), }; } +" +`; diff --git a/tests/spec/extractRequestBody/basic.test.ts b/tests/spec/extractRequestBody/basic.test.ts new file mode 100644 index 00000000..734bd017 --- /dev/null +++ b/tests/spec/extractRequestBody/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--extract-request-body", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + extractRequestBody: true, + typeSuffix: "TTT", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/extractRequestBody/expected.ts b/tests/spec/extractRequestBody/expected.ts deleted file mode 100644 index 2a26c8e7..00000000 --- a/tests/spec/extractRequestBody/expected.ts +++ /dev/null @@ -1,826 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface OrderTTT { - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered" | null; - /** @default false */ - complete?: boolean; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface CategoryTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface UserTTT { - /** @format int64 */ - id?: number; - username?: string; - firstName?: string; - lastName?: string; - email?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface TagTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -export enum PetNamesTTT { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", - UPPER_CASE = "UPPER_CASE", -} - -export enum PetIdsTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetIdsWithWrongEnumTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface PetTTT { - /** @format int64 */ - id?: number; - /** A category for a pet */ - category?: CategoryTTT; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - tags?: TagTTT[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; -} - -/** - * An uploaded response - * Describes the result of uploading an image resource - * @example {"code":0,"type":"type","message":"message"} - */ -export interface ApiResponseTTT { - /** @format int32 */ - code?: number; - type?: string; - message?: string; -} - -/** some description */ -export interface AmountTTT { - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; - /** some description */ - currency: CurrencyTTT; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type CurrencyTTT = string; - -export interface SingleFormUrlEncodedRequestPayloadTTT { - /** @format string */ - param1: string; - param2: string; -} - -export interface UpdatePetWithFormPayloadTTT { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; -} - -export interface UploadFilePayloadTTT { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:/pet - * @secure - */ - addPet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:/pet - * @secure - */ - updatePet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name SingleFormUrlEncodedRequest - * @summary summary - * @request POST:/pet/single-form-url-encoded - */ - singleFormUrlEncodedRequest: (data: SingleFormUrlEncodedRequestPayloadTTT, params: RequestParams = {}) => - this.request({ - path: `/pet/single-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest - * @summary summary - * @request POST:/pet/form-url-encoded - */ - formUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest2 - * @summary summary - * @request POST:/pet/end-form-url-encoded - * @originalName formUrlEncodedRequest - * @duplicate - */ - formUrlEncodedRequest2: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/end-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:/pet/{petId} - * @secure - */ - updatePetWithForm: (petId: number, data: UpdatePetWithFormPayloadTTT, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:/pet/{petId}/uploadImage - * @secure - */ - uploadFile: (petId: number, data: UploadFilePayloadTTT, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:/store/order - */ - placeOrder: (body: OrderTTT, params: RequestParams = {}) => - this.request({ - path: `/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:/user - */ - createUser: (body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithArray - */ - createUsersWithArrayInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithList - */ - createUsersWithListInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:/user/login - */ - loginUser: ( - query: { - /** The user name for login */ - username: string; - /** The password for login in clear text */ - password: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:/user/{username} - */ - updateUser: (username: string, body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/spec/extractRequestBody/test.js b/tests/spec/extractRequestBody/test.js deleted file mode 100644 index 96cd716b..00000000 --- a/tests/spec/extractRequestBody/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--extract-request-body option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - extractRequestBody: true, - typeSuffix: "TTT", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/extractRequestParams/schema.ts b/tests/spec/extractRequestParams/__snapshots__/basic.test.ts.snap similarity index 91% rename from tests/spec/extractRequestParams/schema.ts rename to tests/spec/extractRequestParams/__snapshots__/basic.test.ts.snap index 08b222e0..ffbbe4ed 100644 --- a/tests/spec/extractRequestParams/schema.ts +++ b/tests/spec/extractRequestParams/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --extract-request-params 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -88,7 +91,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -153,7 +156,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -175,7 +178,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -191,7 +194,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -255,7 +258,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -307,7 +310,7 @@ export class HttpClient { export class Api extends HttpClient { key = { /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. * * @tags key, delete * @name KeyRevokeNosecret @@ -321,7 +324,7 @@ export class Api extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "DELETE", query: query, format: "json", @@ -329,7 +332,7 @@ export class Api extends HttpClient extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "POST", body: body, format: "json", @@ -360,7 +363,7 @@ export class Api extends HttpClient this.request({ - path: `/key/${barBaz}/${pk}`, + path: \`/key/\${barBaz}/\${pk}\`, method: "DELETE", query: query, ...params, @@ -383,7 +386,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "DELETE", query: query, format: "json", @@ -408,7 +411,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "GET", format: "json", ...params, @@ -423,7 +426,7 @@ export class Api extends HttpClient this.request({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "HEAD", ...params, }), @@ -443,7 +446,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "POST", body: body, format: "json", @@ -451,7 +454,7 @@ export class Api extends HttpClient extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "PUT", body: body, format: "json", @@ -488,7 +491,7 @@ export class Api extends HttpClient({ - path: `/login`, + path: \`/login\`, method: "POST", query: query, body: body, @@ -514,7 +517,7 @@ export class Api extends HttpClient({ - path: `/scope`, + path: \`/scope\`, method: "POST", query: query, body: body, @@ -537,7 +540,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "DELETE", format: "json", ...params, @@ -560,7 +563,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "GET", format: "json", ...params, @@ -575,7 +578,7 @@ export class Api extends HttpClient this.request({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "HEAD", ...params, }), @@ -595,7 +598,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "POST", type: ContentType.Json, format: "json", @@ -619,9 +622,11 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "PUT", ...params, }), }; } +" +`; diff --git a/tests/spec/extractRequestParams/basic.test.ts b/tests/spec/extractRequestParams/basic.test.ts new file mode 100644 index 00000000..130efc36 --- /dev/null +++ b/tests/spec/extractRequestParams/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--extract-request-params", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + extractRequestParams: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/extractRequestParams/expected.ts b/tests/spec/extractRequestParams/expected.ts deleted file mode 100644 index 08b222e0..00000000 --- a/tests/spec/extractRequestParams/expected.ts +++ /dev/null @@ -1,627 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} - -export interface KeyRevokeNosecretParams { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; -} - -export interface KeyRevokeParams { - /** revokation secret */ - secret: string; - /** bar baz */ - barBaz: string; - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; -} - -export interface KeyRevoke2Params { - /** revokation secret */ - secret: string; - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; -} - -export interface PushLoginRequestParams { - /** URI App will connect to */ - callback: string; -} - -export interface SignRequestParams { - /** test only mode, using test issuer */ - test?: number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class Api extends HttpClient { - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: (query: KeyRevokeNosecretParams, params: RequestParams = {}) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @name KeyRevoke - * @request DELETE:/key/{bar-baz}/{PK} - */ - keyRevoke: ({ barBaz, pk, ...query }: KeyRevokeParams, params: RequestParams = {}) => - this.request({ - path: `/key/${barBaz}/${pk}`, - method: "DELETE", - query: query, - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke2 - * @request DELETE:/key/{PK} - * @originalName keyRevoke - * @duplicate - */ - keyRevoke2: ({ pk, ...query }: KeyRevoke2Params, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: (query: PushLoginRequestParams, body: PushToken, params: RequestParams = {}) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: (query: SignRequestParams, body: Claims, params: RequestParams = {}) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/spec/extractRequestParams/test.js b/tests/spec/extractRequestParams/test.js deleted file mode 100644 index e89d798b..00000000 --- a/tests/spec/extractRequestParams/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--extract-request-params option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - extractRequestParams: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/extractResponseBody/schema.ts b/tests/spec/extractResponseBody/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/extractResponseBody/schema.ts rename to tests/spec/extractResponseBody/__snapshots__/basic.test.ts.snap index 6ac2fc9e..457907f3 100644 --- a/tests/spec/extractResponseBody/schema.ts +++ b/tests/spec/extractResponseBody/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --extract-response-body 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -168,7 +171,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -233,7 +236,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -255,7 +258,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -271,7 +274,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -335,7 +338,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -383,7 +386,7 @@ export class HttpClient { * @externalDocs http://swagger.io * @contact * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ export class Api extends HttpClient { pet = { @@ -398,7 +401,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "POST", body: body, secure: true, @@ -417,7 +420,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "PUT", body: body, secure: true, @@ -442,7 +445,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByStatus`, + path: \`/pet/findByStatus\`, method: "GET", query: query, secure: true, @@ -466,7 +469,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/single-form-url-encoded`, + path: \`/pet/single-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -490,7 +493,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/form-url-encoded`, + path: \`/pet/form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -516,7 +519,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/end-form-url-encoded`, + path: \`/pet/end-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -541,7 +544,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByTags`, + path: \`/pet/findByTags\`, method: "GET", query: query, secure: true, @@ -559,7 +562,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "GET", secure: true, ...params, @@ -585,7 +588,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "POST", body: data, secure: true, @@ -604,7 +607,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "DELETE", secure: true, ...params, @@ -630,7 +633,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}/uploadImage`, + path: \`/pet/\${petId}/uploadImage\`, method: "POST", body: data, secure: true, @@ -650,7 +653,7 @@ export class Api extends HttpClient this.request({ - path: `/store/inventory`, + path: \`/store/inventory\`, method: "GET", secure: true, ...params, @@ -666,7 +669,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order`, + path: \`/store/order\`, method: "POST", body: body, type: ContentType.Json, @@ -683,7 +686,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "GET", ...params, }), @@ -698,7 +701,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "DELETE", ...params, }), @@ -714,7 +717,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "POST", body: body, type: ContentType.Json, @@ -731,7 +734,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithArray`, + path: \`/user/createWithArray\`, method: "POST", body: body, type: ContentType.Json, @@ -748,7 +751,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithList`, + path: \`/user/createWithList\`, method: "POST", body: body, type: ContentType.Json, @@ -773,7 +776,7 @@ export class Api extends HttpClient this.request({ - path: `/user/login`, + path: \`/user/login\`, method: "GET", query: query, ...params, @@ -789,7 +792,7 @@ export class Api extends HttpClient this.request({ - path: `/user/logout`, + path: \`/user/logout\`, method: "GET", ...params, }), @@ -804,7 +807,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "GET", ...params, }), @@ -819,7 +822,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -836,9 +839,11 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "DELETE", ...params, }), }; } +" +`; diff --git a/tests/spec/extractResponseBody/basic.test.ts b/tests/spec/extractResponseBody/basic.test.ts new file mode 100644 index 00000000..049e4313 --- /dev/null +++ b/tests/spec/extractResponseBody/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--extract-response-body", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + extractResponseBody: true, + typeSuffix: "TTT", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/extractResponseBody/expected.ts b/tests/spec/extractResponseBody/expected.ts deleted file mode 100644 index 6ac2fc9e..00000000 --- a/tests/spec/extractResponseBody/expected.ts +++ /dev/null @@ -1,844 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface OrderTTT { - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered" | null; - /** @default false */ - complete?: boolean; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface CategoryTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface UserTTT { - /** @format int64 */ - id?: number; - username?: string; - firstName?: string; - lastName?: string; - email?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface TagTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -export enum PetNamesTTT { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", - UPPER_CASE = "UPPER_CASE", -} - -export enum PetIdsTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetIdsWithWrongEnumTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface PetTTT { - /** @format int64 */ - id?: number; - /** A category for a pet */ - category?: CategoryTTT; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - tags?: TagTTT[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; -} - -/** some description */ -export interface AmountTTT { - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; - /** some description */ - currency: CurrencyTTT; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type CurrencyTTT = string; - -export type FindPetsByStatusDataTTT = PetTTT[]; - -export type SingleFormUrlEncodedRequestDataTTT = any; - -export type FormUrlEncodedRequestDataTTT = any; - -export type FormUrlEncodedRequest2DataTTT = any; - -export type FindPetsByTagsDataTTT = PetTTT[]; - -export type GetPetByIdDataTTT = PetTTT; - -/** - * An uploaded response - * Describes the result of uploading an image resource - * @example {"code":0,"type":"type","message":"message"} - */ -export interface UploadFileDataTTT { - /** @format int32 */ - code?: number; - type?: string; - message?: string; -} - -export type GetInventoryDataTTT = Record; - -export type PlaceOrderDataTTT = OrderTTT; - -export type GetOrderByIdDataTTT = OrderTTT; - -export type LoginUserDataTTT = string; - -export type GetUserByNameDataTTT = UserTTT; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:/pet - * @secure - */ - addPet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:/pet - * @secure - */ - updatePet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name SingleFormUrlEncodedRequest - * @summary summary - * @request POST:/pet/single-form-url-encoded - */ - singleFormUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/single-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest - * @summary summary - * @request POST:/pet/form-url-encoded - */ - formUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest2 - * @summary summary - * @request POST:/pet/end-form-url-encoded - * @originalName formUrlEncodedRequest - * @duplicate - */ - formUrlEncodedRequest2: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/end-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByTags`, - method: "GET", - query: query, - secure: true, - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "GET", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request({ - path: `/store/inventory`, - method: "GET", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:/store/order - */ - placeOrder: (body: OrderTTT, params: RequestParams = {}) => - this.request({ - path: `/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "GET", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:/user - */ - createUser: (body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithArray - */ - createUsersWithArrayInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithList - */ - createUsersWithListInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:/user/login - */ - loginUser: ( - query: { - /** The user name for login */ - username: string; - /** The password for login in clear text */ - password: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/login`, - method: "GET", - query: query, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "GET", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:/user/{username} - */ - updateUser: (username: string, body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/spec/extractResponseBody/test.js b/tests/spec/extractResponseBody/test.js deleted file mode 100644 index 1f3a9406..00000000 --- a/tests/spec/extractResponseBody/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--extract-response-body option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - extractResponseBody: true, - typeSuffix: "TTT", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/extractResponseError/expected.ts b/tests/spec/extractResponseError/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/extractResponseError/expected.ts rename to tests/spec/extractResponseError/__snapshots__/basic.test.ts.snap index c7c17373..20d0b77e 100644 --- a/tests/spec/extractResponseError/expected.ts +++ b/tests/spec/extractResponseError/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --extract-response-body 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -163,7 +166,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -228,7 +231,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -250,7 +253,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -266,7 +269,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -330,7 +333,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -378,7 +381,7 @@ export class HttpClient { * @externalDocs http://swagger.io * @contact * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ export class Api extends HttpClient { pet = { @@ -393,7 +396,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "POST", body: body, secure: true, @@ -412,7 +415,7 @@ export class Api extends HttpClient this.request({ - path: `/pet`, + path: \`/pet\`, method: "PUT", body: body, secure: true, @@ -437,7 +440,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByStatus`, + path: \`/pet/findByStatus\`, method: "GET", query: query, secure: true, @@ -462,7 +465,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/single-form-url-encoded`, + path: \`/pet/single-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -486,7 +489,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/form-url-encoded`, + path: \`/pet/form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -521,7 +524,7 @@ export class Api extends HttpClient({ - path: `/pet/end-form-url-encoded`, + path: \`/pet/end-form-url-encoded\`, method: "POST", body: data, type: ContentType.UrlEncoded, @@ -547,7 +550,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/findByTags`, + path: \`/pet/findByTags\`, method: "GET", query: query, secure: true, @@ -566,7 +569,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "GET", secure: true, format: "json", @@ -593,7 +596,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "POST", body: data, secure: true, @@ -612,7 +615,7 @@ export class Api extends HttpClient this.request({ - path: `/pet/${petId}`, + path: \`/pet/\${petId}\`, method: "DELETE", secure: true, ...params, @@ -646,7 +649,7 @@ export class Api extends HttpClient({ - path: `/pet/${petId}/uploadImage`, + path: \`/pet/\${petId}/uploadImage\`, method: "POST", body: data, secure: true, @@ -667,7 +670,7 @@ export class Api extends HttpClient this.request, any>({ - path: `/store/inventory`, + path: \`/store/inventory\`, method: "GET", secure: true, format: "json", @@ -684,7 +687,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order`, + path: \`/store/order\`, method: "POST", body: body, type: ContentType.Json, @@ -702,7 +705,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "GET", format: "json", ...params, @@ -718,7 +721,7 @@ export class Api extends HttpClient this.request({ - path: `/store/order/${orderId}`, + path: \`/store/order/\${orderId}\`, method: "DELETE", ...params, }), @@ -734,7 +737,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "POST", body: body, type: ContentType.Json, @@ -751,7 +754,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithArray`, + path: \`/user/createWithArray\`, method: "POST", body: body, type: ContentType.Json, @@ -768,7 +771,7 @@ export class Api extends HttpClient this.request({ - path: `/user/createWithList`, + path: \`/user/createWithList\`, method: "POST", body: body, type: ContentType.Json, @@ -793,7 +796,7 @@ export class Api extends HttpClient this.request({ - path: `/user/login`, + path: \`/user/login\`, method: "GET", query: query, format: "json", @@ -810,7 +813,7 @@ export class Api extends HttpClient this.request({ - path: `/user/logout`, + path: \`/user/logout\`, method: "GET", ...params, }), @@ -825,7 +828,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "GET", format: "json", ...params, @@ -841,7 +844,7 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -858,9 +861,11 @@ export class Api extends HttpClient this.request({ - path: `/user/${username}`, + path: \`/user/\${username}\`, method: "DELETE", ...params, }), }; } +" +`; diff --git a/tests/spec/extractResponseError/basic.test.ts b/tests/spec/extractResponseError/basic.test.ts new file mode 100644 index 00000000..0d6e2355 --- /dev/null +++ b/tests/spec/extractResponseError/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--extract-response-body", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + extractResponseError: true, + typeSuffix: "TTT", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/extractResponseError/schema.ts b/tests/spec/extractResponseError/schema.ts deleted file mode 100644 index c7c17373..00000000 --- a/tests/spec/extractResponseError/schema.ts +++ /dev/null @@ -1,866 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface OrderTTT { - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered" | null; - /** @default false */ - complete?: boolean; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface CategoryTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface UserTTT { - /** @format int64 */ - id?: number; - username?: string; - firstName?: string; - lastName?: string; - email?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface TagTTT { - /** @format int64 */ - id?: number; - name?: string; -} - -export enum PetNamesTTT { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", - UPPER_CASE = "UPPER_CASE", -} - -export enum PetIdsTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -export enum PetIdsWithWrongEnumTTT { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface PetTTT { - /** @format int64 */ - id?: number; - /** A category for a pet */ - category?: CategoryTTT; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - tags?: TagTTT[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; -} - -/** some description */ -export interface AmountTTT { - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; - /** some description */ - currency: CurrencyTTT; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type CurrencyTTT = string; - -/** - * HttpError HttpError HttpErrorRetry HttpValidationError HttpError - * asd asd asd asd asd - */ -export type FormUrlEncodedRequest2ErrorTTT = - | { - /** - * Detail - * asdsad asd asd sa dsa - * @example "asdasd sad sa dsad" - */ - detail: string; - } - | { - /** - * Detail - * sadas das dasd asd - * @example "sadasd sads adsad asd " - */ - detail: string; - /** - * sadsa dsa dsa das - * sadas dasd as dasd asd - * @example 600 - */ - retry_after: number; - } - | Record; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:/pet - * @secure - */ - addPet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:/pet - * @secure - */ - updatePet: (body: PetTTT, params: RequestParams = {}) => - this.request({ - path: `/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name SingleFormUrlEncodedRequest - * @summary summary - * @request POST:/pet/single-form-url-encoded - */ - singleFormUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/single-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest - * @summary summary - * @request POST:/pet/form-url-encoded - */ - formUrlEncodedRequest: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name FormUrlEncodedRequest2 - * @summary summary - * @request POST:/pet/end-form-url-encoded - * @originalName formUrlEncodedRequest - * @duplicate - */ - formUrlEncodedRequest2: ( - data: { - /** @format string */ - param1: string; - param2: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** - * Id - * asd asdsad asd as - */ - id: string; - }, - FormUrlEncodedRequest2ErrorTTT - >({ - path: `/pet/end-form-url-encoded`, - method: "POST", - body: data, - type: ContentType.UrlEncoded, - format: "json", - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** @format int32 */ - code?: number; - type?: string; - message?: string; - }, - any - >({ - path: `/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:/store/order - */ - placeOrder: (body: OrderTTT, params: RequestParams = {}) => - this.request({ - path: `/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:/user - */ - createUser: (body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithArray - */ - createUsersWithArrayInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:/user/createWithList - */ - createUsersWithListInput: (body: UserTTT[], params: RequestParams = {}) => - this.request({ - path: `/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:/user/login - */ - loginUser: ( - query: { - /** The user name for login */ - username: string; - /** The password for login in clear text */ - password: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:/user/{username} - */ - updateUser: (username: string, body: UserTTT, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/spec/extractResponseError/test.js b/tests/spec/extractResponseError/test.js deleted file mode 100644 index 697342e0..00000000 --- a/tests/spec/extractResponseError/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--extract-response-body option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - extractResponseError: true, - typeSuffix: "TTT", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/jsAxios/schema.js b/tests/spec/js/__snapshots__/basic.test.ts.snap similarity index 87% rename from tests/spec/jsAxios/schema.js rename to tests/spec/js/__snapshots__/basic.test.ts.snap index 2bccff36..5eb08340 100644 --- a/tests/spec/jsAxios/schema.js +++ b/tests/spec/js/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --js --axios 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -49,7 +52,7 @@ export class HttpClient { if (typeof formItem === "object" && formItem !== null) { return JSON.stringify(formItem); } else { - return `${formItem}`; + return \`\${formItem}\`; } } createFormData(input) { @@ -109,7 +112,7 @@ export class Api extends HttpClient { */ emojisList: (params = {}) => this.request({ - path: `/emojis`, + path: \`/emojis\`, method: "GET", format: "json", ...params, @@ -124,7 +127,7 @@ export class Api extends HttpClient { */ eventsList: (params = {}) => this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -139,7 +142,7 @@ export class Api extends HttpClient { */ feedsList: (params = {}) => this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -154,7 +157,7 @@ export class Api extends HttpClient { */ gistsList: (query, params = {}) => this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -168,7 +171,7 @@ export class Api extends HttpClient { */ gistsCreate: (body, params = {}) => this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -183,7 +186,7 @@ export class Api extends HttpClient { */ publicList: (query, params = {}) => this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -197,7 +200,7 @@ export class Api extends HttpClient { */ starredList: (query, params = {}) => this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -211,7 +214,7 @@ export class Api extends HttpClient { */ gistsDelete: (id, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -223,7 +226,7 @@ export class Api extends HttpClient { */ gistsDetail: (id, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -236,7 +239,7 @@ export class Api extends HttpClient { */ gistsPartialUpdate: (id, body, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -251,7 +254,7 @@ export class Api extends HttpClient { */ commentsDetail: (id, params = {}) => this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -264,7 +267,7 @@ export class Api extends HttpClient { */ commentsCreate: (id, body, params = {}) => this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -278,7 +281,7 @@ export class Api extends HttpClient { */ commentsDelete: (id, commentId, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -292,7 +295,7 @@ export class Api extends HttpClient { */ commentsDetail2: (id, commentId, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -305,7 +308,7 @@ export class Api extends HttpClient { */ commentsPartialUpdate: (id, commentId, body, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -320,7 +323,7 @@ export class Api extends HttpClient { */ forksCreate: (id, params = {}) => this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -332,7 +335,7 @@ export class Api extends HttpClient { */ starDelete: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -344,7 +347,7 @@ export class Api extends HttpClient { */ starDetail: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -356,7 +359,7 @@ export class Api extends HttpClient { */ starUpdate: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -370,7 +373,7 @@ export class Api extends HttpClient { */ templatesList: (params = {}) => this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -383,7 +386,7 @@ export class Api extends HttpClient { */ templatesDetail: (language, params = {}) => this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -398,7 +401,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -415,7 +418,7 @@ export class Api extends HttpClient { */ issuesSearchDetail: (keyword, state, owner, repository, params = {}) => this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -429,7 +432,7 @@ export class Api extends HttpClient { */ reposSearchDetail: (keyword, query, params = {}) => this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -444,7 +447,7 @@ export class Api extends HttpClient { */ userEmailDetail: (email, params = {}) => this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -458,7 +461,7 @@ export class Api extends HttpClient { */ userSearchDetail: (keyword, query, params = {}) => this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -474,7 +477,7 @@ export class Api extends HttpClient { */ markdownCreate: (body, params = {}) => this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -488,7 +491,7 @@ export class Api extends HttpClient { */ postMarkdown: (params = {}) => this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -503,7 +506,7 @@ export class Api extends HttpClient { */ metaList: (params = {}) => this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -518,7 +521,7 @@ export class Api extends HttpClient { */ eventsDetail: (owner, repo, params = {}) => this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -533,7 +536,7 @@ export class Api extends HttpClient { */ notificationsList: (query, params = {}) => this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -547,7 +550,7 @@ export class Api extends HttpClient { */ notificationsUpdate: (body, params = {}) => this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -560,7 +563,7 @@ export class Api extends HttpClient { */ threadsDetail: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -573,7 +576,7 @@ export class Api extends HttpClient { */ threadsPartialUpdate: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -585,7 +588,7 @@ export class Api extends HttpClient { */ threadsSubscriptionDelete: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -597,7 +600,7 @@ export class Api extends HttpClient { */ threadsSubscriptionDetail: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -610,7 +613,7 @@ export class Api extends HttpClient { */ threadsSubscriptionUpdate: (id, body, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -627,7 +630,7 @@ export class Api extends HttpClient { */ orgsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -640,7 +643,7 @@ export class Api extends HttpClient { */ orgsPartialUpdate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -655,7 +658,7 @@ export class Api extends HttpClient { */ eventsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -668,7 +671,7 @@ export class Api extends HttpClient { */ issuesDetail: (org, query, params = {}) => this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -682,7 +685,7 @@ export class Api extends HttpClient { */ membersDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -695,7 +698,7 @@ export class Api extends HttpClient { */ membersDelete: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -709,7 +712,7 @@ export class Api extends HttpClient { */ membersDetail2: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -721,7 +724,7 @@ export class Api extends HttpClient { */ publicMembersDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -734,7 +737,7 @@ export class Api extends HttpClient { */ publicMembersDelete: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -748,7 +751,7 @@ export class Api extends HttpClient { */ publicMembersDetail2: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -760,7 +763,7 @@ export class Api extends HttpClient { */ publicMembersUpdate: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -772,7 +775,7 @@ export class Api extends HttpClient { */ reposDetail: (org, query, params = {}) => this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -786,7 +789,7 @@ export class Api extends HttpClient { */ reposCreate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -800,7 +803,7 @@ export class Api extends HttpClient { */ teamsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -813,7 +816,7 @@ export class Api extends HttpClient { */ teamsCreate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -830,7 +833,7 @@ export class Api extends HttpClient { */ rateLimitList: (params = {}) => this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -845,7 +848,7 @@ export class Api extends HttpClient { */ reposDelete: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -857,7 +860,7 @@ export class Api extends HttpClient { */ reposDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -870,7 +873,7 @@ export class Api extends HttpClient { */ reposPartialUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -885,7 +888,7 @@ export class Api extends HttpClient { */ assigneesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -900,7 +903,7 @@ export class Api extends HttpClient { */ assigneesDetail2: (owner, repo, assignee, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -912,7 +915,7 @@ export class Api extends HttpClient { */ branchesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -927,7 +930,7 @@ export class Api extends HttpClient { */ branchesDetail2: (owner, repo, branch, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -940,7 +943,7 @@ export class Api extends HttpClient { */ collaboratorsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -953,7 +956,7 @@ export class Api extends HttpClient { */ collaboratorsDelete: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -967,7 +970,7 @@ export class Api extends HttpClient { */ collaboratorsDetail2: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -979,7 +982,7 @@ export class Api extends HttpClient { */ collaboratorsUpdate: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -991,7 +994,7 @@ export class Api extends HttpClient { */ commentsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -1004,7 +1007,7 @@ export class Api extends HttpClient { */ commentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -1018,7 +1021,7 @@ export class Api extends HttpClient { */ commentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -1031,7 +1034,7 @@ export class Api extends HttpClient { */ commentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -1045,7 +1048,7 @@ export class Api extends HttpClient { */ commitsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -1059,7 +1062,7 @@ export class Api extends HttpClient { */ commitsStatusDetail: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -1074,7 +1077,7 @@ export class Api extends HttpClient { */ commitsDetail2: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1087,7 +1090,7 @@ export class Api extends HttpClient { */ commitsCommentsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -1100,7 +1103,7 @@ export class Api extends HttpClient { */ commitsCommentsCreate: (owner, repo, shaCode, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -1115,7 +1118,7 @@ export class Api extends HttpClient { */ compareDetail: (owner, repo, baseId, headId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -1128,7 +1131,7 @@ export class Api extends HttpClient { */ contentsDelete: (owner, repo, path, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -1143,7 +1146,7 @@ export class Api extends HttpClient { */ contentsDetail: (owner, repo, path, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -1157,7 +1160,7 @@ export class Api extends HttpClient { */ contentsUpdate: (owner, repo, path, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -1172,7 +1175,7 @@ export class Api extends HttpClient { */ contributorsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -1186,7 +1189,7 @@ export class Api extends HttpClient { */ deploymentsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -1199,7 +1202,7 @@ export class Api extends HttpClient { */ deploymentsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -1214,7 +1217,7 @@ export class Api extends HttpClient { */ deploymentsStatusesDetail: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -1227,7 +1230,7 @@ export class Api extends HttpClient { */ deploymentsStatusesCreate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -1242,7 +1245,7 @@ export class Api extends HttpClient { */ downloadsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -1256,7 +1259,7 @@ export class Api extends HttpClient { */ downloadsDelete: (owner, repo, downloadId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -1271,7 +1274,7 @@ export class Api extends HttpClient { */ downloadsDetail2: (owner, repo, downloadId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -1284,7 +1287,7 @@ export class Api extends HttpClient { */ eventsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -1297,7 +1300,7 @@ export class Api extends HttpClient { */ forksDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -1311,7 +1314,7 @@ export class Api extends HttpClient { */ forksCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -1326,7 +1329,7 @@ export class Api extends HttpClient { */ gitBlobsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -1341,7 +1344,7 @@ export class Api extends HttpClient { */ gitBlobsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1354,7 +1357,7 @@ export class Api extends HttpClient { */ gitCommitsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -1369,7 +1372,7 @@ export class Api extends HttpClient { */ gitCommitsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1382,7 +1385,7 @@ export class Api extends HttpClient { */ gitRefsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -1395,7 +1398,7 @@ export class Api extends HttpClient { */ gitRefsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -1410,7 +1413,7 @@ export class Api extends HttpClient { */ gitRefsDelete: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -1424,7 +1427,7 @@ export class Api extends HttpClient { */ gitRefsDetail2: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -1437,7 +1440,7 @@ export class Api extends HttpClient { */ gitRefsPartialUpdate: (owner, repo, ref, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -1452,7 +1455,7 @@ export class Api extends HttpClient { */ gitTagsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -1467,7 +1470,7 @@ export class Api extends HttpClient { */ gitTagsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1480,7 +1483,7 @@ export class Api extends HttpClient { */ gitTreesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -1495,7 +1498,7 @@ export class Api extends HttpClient { */ gitTreesDetail: (owner, repo, shaCode, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -1509,7 +1512,7 @@ export class Api extends HttpClient { */ hooksDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -1522,7 +1525,7 @@ export class Api extends HttpClient { */ hooksCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -1536,7 +1539,7 @@ export class Api extends HttpClient { */ hooksDelete: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -1550,7 +1553,7 @@ export class Api extends HttpClient { */ hooksDetail2: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -1563,7 +1566,7 @@ export class Api extends HttpClient { */ hooksPartialUpdate: (owner, repo, hookId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -1577,7 +1580,7 @@ export class Api extends HttpClient { */ hooksTestsCreate: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -1589,7 +1592,7 @@ export class Api extends HttpClient { */ issuesDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -1603,7 +1606,7 @@ export class Api extends HttpClient { */ issuesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -1617,7 +1620,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -1631,7 +1634,7 @@ export class Api extends HttpClient { */ issuesCommentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -1645,7 +1648,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -1658,7 +1661,7 @@ export class Api extends HttpClient { */ issuesCommentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -1672,7 +1675,7 @@ export class Api extends HttpClient { */ issuesEventsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -1687,7 +1690,7 @@ export class Api extends HttpClient { */ issuesEventsDetail2: (owner, repo, eventId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -1702,7 +1705,7 @@ export class Api extends HttpClient { */ issuesDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -1715,7 +1718,7 @@ export class Api extends HttpClient { */ issuesPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -1731,7 +1734,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -1744,7 +1747,7 @@ export class Api extends HttpClient { */ issuesCommentsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -1760,7 +1763,7 @@ export class Api extends HttpClient { */ issuesEventsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -1773,7 +1776,7 @@ export class Api extends HttpClient { */ issuesLabelsDelete: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -1785,7 +1788,7 @@ export class Api extends HttpClient { */ issuesLabelsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -1798,7 +1801,7 @@ export class Api extends HttpClient { */ issuesLabelsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -1812,7 +1815,7 @@ export class Api extends HttpClient { */ issuesLabelsUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -1828,7 +1831,7 @@ export class Api extends HttpClient { */ issuesLabelsDelete2: (owner, repo, number, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -1840,7 +1843,7 @@ export class Api extends HttpClient { */ keysDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -1853,7 +1856,7 @@ export class Api extends HttpClient { */ keysCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -1867,7 +1870,7 @@ export class Api extends HttpClient { */ keysDelete: (owner, repo, keyId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -1881,7 +1884,7 @@ export class Api extends HttpClient { */ keysDetail2: (owner, repo, keyId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -1894,7 +1897,7 @@ export class Api extends HttpClient { */ labelsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -1907,7 +1910,7 @@ export class Api extends HttpClient { */ labelsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -1921,7 +1924,7 @@ export class Api extends HttpClient { */ labelsDelete: (owner, repo, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -1935,7 +1938,7 @@ export class Api extends HttpClient { */ labelsDetail2: (owner, repo, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -1948,7 +1951,7 @@ export class Api extends HttpClient { */ labelsPartialUpdate: (owner, repo, name, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -1962,7 +1965,7 @@ export class Api extends HttpClient { */ languagesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -1975,7 +1978,7 @@ export class Api extends HttpClient { */ mergesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -1990,7 +1993,7 @@ export class Api extends HttpClient { */ milestonesDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -2004,7 +2007,7 @@ export class Api extends HttpClient { */ milestonesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -2018,7 +2021,7 @@ export class Api extends HttpClient { */ milestonesDelete: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -2032,7 +2035,7 @@ export class Api extends HttpClient { */ milestonesDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -2045,7 +2048,7 @@ export class Api extends HttpClient { */ milestonesPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -2059,7 +2062,7 @@ export class Api extends HttpClient { */ milestonesLabelsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -2072,7 +2075,7 @@ export class Api extends HttpClient { */ notificationsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -2086,7 +2089,7 @@ export class Api extends HttpClient { */ notificationsUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -2099,7 +2102,7 @@ export class Api extends HttpClient { */ pullsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -2113,7 +2116,7 @@ export class Api extends HttpClient { */ pullsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -2128,7 +2131,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -2142,7 +2145,7 @@ export class Api extends HttpClient { */ pullsCommentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2156,7 +2159,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2169,7 +2172,7 @@ export class Api extends HttpClient { */ pullsCommentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -2185,7 +2188,7 @@ export class Api extends HttpClient { */ pullsDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -2198,7 +2201,7 @@ export class Api extends HttpClient { */ pullsPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2215,7 +2218,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -2228,7 +2231,7 @@ export class Api extends HttpClient { */ pullsCommentsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -2243,7 +2246,7 @@ export class Api extends HttpClient { */ pullsCommitsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -2256,7 +2259,7 @@ export class Api extends HttpClient { */ pullsFilesDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -2269,7 +2272,7 @@ export class Api extends HttpClient { */ pullsMergeDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -2281,7 +2284,7 @@ export class Api extends HttpClient { */ pullsMergeUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -2296,7 +2299,7 @@ export class Api extends HttpClient { */ readmeDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -2310,7 +2313,7 @@ export class Api extends HttpClient { */ releasesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -2323,7 +2326,7 @@ export class Api extends HttpClient { */ releasesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -2337,7 +2340,7 @@ export class Api extends HttpClient { */ releasesAssetsDelete: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -2349,7 +2352,7 @@ export class Api extends HttpClient { */ releasesAssetsDetail: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -2362,7 +2365,7 @@ export class Api extends HttpClient { */ releasesAssetsPartialUpdate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2377,7 +2380,7 @@ export class Api extends HttpClient { */ releasesDelete: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -2391,7 +2394,7 @@ export class Api extends HttpClient { */ releasesDetail2: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -2404,7 +2407,7 @@ export class Api extends HttpClient { */ releasesPartialUpdate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -2420,7 +2423,7 @@ export class Api extends HttpClient { */ releasesAssetsDetail2: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -2433,7 +2436,7 @@ export class Api extends HttpClient { */ stargazersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -2446,7 +2449,7 @@ export class Api extends HttpClient { */ statsCodeFrequencyDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -2459,7 +2462,7 @@ export class Api extends HttpClient { */ statsCommitActivityDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -2472,7 +2475,7 @@ export class Api extends HttpClient { */ statsContributorsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -2485,7 +2488,7 @@ export class Api extends HttpClient { */ statsParticipationDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -2498,7 +2501,7 @@ export class Api extends HttpClient { */ statsPunchCardDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -2511,7 +2514,7 @@ export class Api extends HttpClient { */ statusesDetail: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -2524,7 +2527,7 @@ export class Api extends HttpClient { */ statusesCreate: (owner, repo, ref, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -2539,7 +2542,7 @@ export class Api extends HttpClient { */ subscribersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -2552,7 +2555,7 @@ export class Api extends HttpClient { */ subscriptionDelete: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -2564,7 +2567,7 @@ export class Api extends HttpClient { */ subscriptionDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -2577,7 +2580,7 @@ export class Api extends HttpClient { */ subscriptionUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2592,7 +2595,7 @@ export class Api extends HttpClient { */ tagsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -2605,7 +2608,7 @@ export class Api extends HttpClient { */ teamsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -2618,7 +2621,7 @@ export class Api extends HttpClient { */ watchersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -2633,7 +2636,7 @@ export class Api extends HttpClient { */ reposDetail2: (owner, repo, archiveFormat, path, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -2647,7 +2650,7 @@ export class Api extends HttpClient { */ repositoriesList: (query, params = {}) => this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -2663,7 +2666,7 @@ export class Api extends HttpClient { */ codeList: (query, params = {}) => this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -2677,7 +2680,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -2691,7 +2694,7 @@ export class Api extends HttpClient { */ repositoriesList: (query, params = {}) => this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -2705,7 +2708,7 @@ export class Api extends HttpClient { */ usersList: (query, params = {}) => this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -2721,7 +2724,7 @@ export class Api extends HttpClient { */ teamsDelete: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -2733,7 +2736,7 @@ export class Api extends HttpClient { */ teamsDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -2746,7 +2749,7 @@ export class Api extends HttpClient { */ teamsPartialUpdate: (teamId, body, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2761,7 +2764,7 @@ export class Api extends HttpClient { */ membersDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -2775,7 +2778,7 @@ export class Api extends HttpClient { */ membersDelete: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2790,7 +2793,7 @@ export class Api extends HttpClient { */ membersDetail2: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -2803,7 +2806,7 @@ export class Api extends HttpClient { */ membersUpdate: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -2815,7 +2818,7 @@ export class Api extends HttpClient { */ membershipsDelete: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -2827,7 +2830,7 @@ export class Api extends HttpClient { */ membershipsDetail: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -2840,7 +2843,7 @@ export class Api extends HttpClient { */ membershipsUpdate: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -2853,7 +2856,7 @@ export class Api extends HttpClient { */ reposDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -2866,7 +2869,7 @@ export class Api extends HttpClient { */ reposDelete: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -2880,7 +2883,7 @@ export class Api extends HttpClient { */ reposDetail2: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -2892,7 +2895,7 @@ export class Api extends HttpClient { */ reposUpdate: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -2906,7 +2909,7 @@ export class Api extends HttpClient { */ userList: (params = {}) => this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -2919,7 +2922,7 @@ export class Api extends HttpClient { */ userPartialUpdate: (body, params = {}) => this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2934,7 +2937,7 @@ export class Api extends HttpClient { */ emailsDelete: (body, params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -2948,7 +2951,7 @@ export class Api extends HttpClient { */ emailsList: (params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -2960,7 +2963,7 @@ export class Api extends HttpClient { */ emailsCreate: (body, params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -2973,7 +2976,7 @@ export class Api extends HttpClient { */ followersList: (params = {}) => this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -2986,7 +2989,7 @@ export class Api extends HttpClient { */ followingList: (params = {}) => this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -2999,7 +3002,7 @@ export class Api extends HttpClient { */ followingDelete: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -3011,7 +3014,7 @@ export class Api extends HttpClient { */ followingDetail: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -3023,7 +3026,7 @@ export class Api extends HttpClient { */ followingUpdate: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -3035,7 +3038,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -3049,7 +3052,7 @@ export class Api extends HttpClient { */ keysList: (params = {}) => this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -3062,7 +3065,7 @@ export class Api extends HttpClient { */ keysCreate: (body, params = {}) => this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -3076,7 +3079,7 @@ export class Api extends HttpClient { */ keysDelete: (keyId, params = {}) => this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -3088,7 +3091,7 @@ export class Api extends HttpClient { */ keysDetail: (keyId, params = {}) => this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -3101,7 +3104,7 @@ export class Api extends HttpClient { */ orgsList: (params = {}) => this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -3114,7 +3117,7 @@ export class Api extends HttpClient { */ reposList: (query, params = {}) => this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -3128,7 +3131,7 @@ export class Api extends HttpClient { */ reposCreate: (body, params = {}) => this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -3142,7 +3145,7 @@ export class Api extends HttpClient { */ starredList: (query, params = {}) => this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -3156,7 +3159,7 @@ export class Api extends HttpClient { */ starredDelete: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3168,7 +3171,7 @@ export class Api extends HttpClient { */ starredDetail: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -3180,7 +3183,7 @@ export class Api extends HttpClient { */ starredUpdate: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -3192,7 +3195,7 @@ export class Api extends HttpClient { */ subscriptionsList: (params = {}) => this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -3206,7 +3209,7 @@ export class Api extends HttpClient { */ subscriptionsDelete: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3219,7 +3222,7 @@ export class Api extends HttpClient { */ subscriptionsDetail: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -3232,7 +3235,7 @@ export class Api extends HttpClient { */ subscriptionsUpdate: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -3244,7 +3247,7 @@ export class Api extends HttpClient { */ teamsList: (params = {}) => this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -3259,7 +3262,7 @@ export class Api extends HttpClient { */ usersList: (query, params = {}) => this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -3273,7 +3276,7 @@ export class Api extends HttpClient { */ usersDetail: (username, params = {}) => this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -3286,7 +3289,7 @@ export class Api extends HttpClient { */ eventsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -3298,7 +3301,7 @@ export class Api extends HttpClient { */ eventsOrgsDetail: (username, org, params = {}) => this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -3310,7 +3313,7 @@ export class Api extends HttpClient { */ followersDetail: (username, params = {}) => this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -3323,7 +3326,7 @@ export class Api extends HttpClient { */ followingDetail: (username, targetUser, params = {}) => this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -3335,7 +3338,7 @@ export class Api extends HttpClient { */ gistsDetail: (username, query, params = {}) => this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -3349,7 +3352,7 @@ export class Api extends HttpClient { */ keysDetail: (username, params = {}) => this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -3362,7 +3365,7 @@ export class Api extends HttpClient { */ orgsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -3375,7 +3378,7 @@ export class Api extends HttpClient { */ receivedEventsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -3387,7 +3390,7 @@ export class Api extends HttpClient { */ receivedEventsPublicDetail: (username, params = {}) => this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -3399,7 +3402,7 @@ export class Api extends HttpClient { */ reposDetail: (username, query, params = {}) => this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -3413,7 +3416,7 @@ export class Api extends HttpClient { */ starredDetail: (username, params = {}) => this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -3425,9 +3428,11 @@ export class Api extends HttpClient { */ subscriptionsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/js/basic.test.ts b/tests/spec/js/basic.test.ts new file mode 100644 index 00000000..b3cd3c71 --- /dev/null +++ b/tests/spec/js/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--js --axios", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + httpClientType: "axios", + toJS: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.js"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/js/schema.d.ts b/tests/spec/js/schema.d.ts deleted file mode 100644 index 42997921..00000000 --- a/tests/spec/js/schema.d.ts +++ /dev/null @@ -1,4699 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} -export interface AssetPatch { - label?: string; - name: string; -} -export type Assets = Asset[]; -export type Assignees = User[]; -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} -export interface Blobs { - sha?: string; -} -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; -export type CodeFrequencyStats = number[]; -export interface Comment { - body?: string; -} -export interface CommentBody { - body: string; -} -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} -export type Downloads = Download[]; -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} -export type EmailsPost = string[]; -export type Emojis = Record; -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} -export type Events = Event[]; -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} -export interface ForkBody { - organization?: string; -} -export type Forks = Repos; -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} -export interface GitRefPatch { - force?: boolean; - sha?: string; -} -export type Gitignore = any[]; -export interface GitignoreLang { - name?: string; - source?: string; -} -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; -export interface HookBody { - active?: boolean; - add_events?: string[]; -} -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} -export type IssueEvents = IssueEvent[]; -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; -export type Languages = Record; -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} -export interface MergePullBody { - commit_message?: string; -} -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} -export interface MergesConflict { - /** Error message */ - message?: string; -} -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} -export interface Meta { - git?: string[]; - hooks?: string[]; -} -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} -export interface NotificationMarkRead { - last_read_at?: string; -} -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} -/** A GitHub organization */ -export type Organization = Actor; -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; -export interface RefsBody { - ref?: string; - sha?: string; -} -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} -export type Repos = Repo[]; -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} -export interface SearchUsers { - items?: Users; - total_count?: number; -} -export interface SearchUsersByKeyword { - users?: Users; -} -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} -export type Tags = Tag[]; -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} -export interface TeamMembership { - state?: string; - url?: string; -} -export type TeamRepos = Repos; -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} -/** A GitHub user */ -export type User = Actor; -export type UserEmails = string[]; -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} -export interface UserKeysPost { - key?: string; - title?: string; -} -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} -export type Users = User[]; -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} -export type RequestParams = Omit; -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} -export interface HttpResponse extends Response { - data: D; - error: E; -} -type CancelToken = Symbol | string | number; -export declare enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} -export declare class HttpClient { - baseUrl: string; - private securityData; - private securityWorker?; - private abortControllers; - private customFetch; - private baseApiParams; - constructor(apiConfig?: ApiConfig); - setSecurityData: (data: SecurityDataType | null) => void; - protected encodeQueryParam(key: string, value: any): string; - protected addQueryParam(query: QueryParamsType, key: string): string; - protected addArrayQueryParam(query: QueryParamsType, key: string): any; - protected toQueryString(rawQuery?: QueryParamsType): string; - protected addQueryParams(rawQuery?: QueryParamsType): string; - private contentFormatters; - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams; - protected createAbortSignal: (cancelToken: CancelToken) => AbortSignal | undefined; - abortRequest: (cancelToken: CancelToken) => void; - request: ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams) => Promise>; -} -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export declare class Api extends HttpClient { - emojis: { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params?: RequestParams) => Promise>; - }; - events: { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params?: RequestParams) => Promise>; - }; - feeds: { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params?: RequestParams) => Promise>; - }; - gists: { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params?: RequestParams) => Promise>; - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params?: RequestParams) => Promise>; - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params?: RequestParams) => Promise>; - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params?: RequestParams) => Promise>; - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params?: RequestParams) => Promise>; - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: ( - id: number, - commentId: number, - body: Comment, - params?: RequestParams, - ) => Promise>; - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params?: RequestParams) => Promise>; - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params?: RequestParams) => Promise>; - }; - gitignore: { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params?: RequestParams) => Promise>; - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params?: RequestParams) => Promise>; - }; - issues: { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - }; - legacy: { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params?: RequestParams) => Promise>; - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params?: RequestParams, - ) => Promise>; - }; - markdown: { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params?: RequestParams) => Promise>; - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params?: RequestParams) => Promise>; - }; - meta: { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params?: RequestParams) => Promise>; - }; - networks: { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - }; - notifications: { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params?: RequestParams) => Promise>; - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params?: RequestParams) => Promise>; - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: ( - id: number, - body: PutSubscription, - params?: RequestParams, - ) => Promise>; - }; - orgs: { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: ( - org: string, - body: PatchOrg, - params?: RequestParams, - ) => Promise>; - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params?: RequestParams) => Promise>; - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params?: RequestParams) => Promise>; - }; - rateLimit: { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params?: RequestParams) => Promise>; - }; - repos: { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: ( - owner: string, - repo: string, - body: RepoEdit, - params?: RequestParams, - ) => Promise>; - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: ( - owner: string, - repo: string, - assignee: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: ( - owner: string, - repo: string, - branch: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: ( - owner: string, - repo: string, - baseId: string, - headId: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: ( - owner: string, - repo: string, - path: string, - body: DeleteFileBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: ( - owner: string, - repo: string, - path: string, - body: CreateFileBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: ( - owner: string, - repo: string, - body: Deployment, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: ( - owner: string, - repo: string, - id: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: ( - owner: string, - repo: string, - downloadId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: ( - owner: string, - repo: string, - downloadId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: ( - owner: string, - repo: string, - body: ForkBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: ( - owner: string, - repo: string, - body: Blob, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: ( - owner: string, - repo: string, - body: RepoCommitBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: ( - owner: string, - repo: string, - body: RefsBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: ( - owner: string, - repo: string, - ref: string, - body: GitRefPatch, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: ( - owner: string, - repo: string, - body: TagBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: ( - owner: string, - repo: string, - body: Tree, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: ( - owner: string, - repo: string, - body: HookBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: ( - owner: string, - repo: string, - hookId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: ( - owner: string, - repo: string, - hookId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: ( - owner: string, - repo: string, - hookId: number, - body: HookBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: ( - owner: string, - repo: string, - hookId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: ( - owner: string, - repo: string, - body: Issue, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: ( - owner: string, - repo: string, - eventId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: Issue, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: ( - owner: string, - repo: string, - number: number, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: ( - owner: string, - repo: string, - number: number, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: ( - owner: string, - repo: string, - number: number, - name: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: ( - owner: string, - repo: string, - body: UserKeysPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: ( - owner: string, - repo: string, - keyId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: ( - owner: string, - repo: string, - keyId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: ( - owner: string, - repo: string, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: ( - owner: string, - repo: string, - name: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: ( - owner: string, - repo: string, - name: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: ( - owner: string, - repo: string, - name: string, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: ( - owner: string, - repo: string, - body: MergesBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: ( - owner: string, - repo: string, - body: MilestoneUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: ( - owner: string, - repo: string, - body: NotificationMarkRead, - params?: RequestParams, - ) => Promise>; - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: ( - owner: string, - repo: string, - body: PullsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: PullUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: ( - owner: string, - repo: string, - number: number, - body: MergePullBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: ( - owner: string, - repo: string, - body: ReleaseCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: ReleaseCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: ( - owner: string, - repo: string, - ref: string, - body: HeadBranch, - params?: RequestParams, - ) => Promise>; - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: ( - owner: string, - repo: string, - body: SubscriptionBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params?: RequestParams, - ) => Promise>; - }; - repositories: { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - }; - search: { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params?: RequestParams, - ) => Promise>; - }; - teams: { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params?: RequestParams) => Promise>; - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: ( - teamId: number, - username: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: ( - teamId: number, - username: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: ( - teamId: number, - username: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: ( - teamId: number, - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - teamId: number, - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: ( - teamId: number, - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - }; - user: { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params?: RequestParams) => Promise>; - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params?: RequestParams) => Promise>; - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params?: RequestParams) => Promise>; - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params?: RequestParams) => Promise>; - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params?: RequestParams) => Promise>; - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params?: RequestParams) => Promise>; - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params?: RequestParams) => Promise>; - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params?: RequestParams) => Promise>; - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params?: RequestParams) => Promise>; - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params?: RequestParams) => Promise>; - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params?: RequestParams) => Promise>; - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params?: RequestParams) => Promise>; - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params?: RequestParams) => Promise>; - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params?: RequestParams) => Promise>; - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params?: RequestParams) => Promise>; - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params?: RequestParams) => Promise>; - }; - users: { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params?: RequestParams) => Promise>; - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: ( - username: string, - targetUser: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params?: RequestParams) => Promise>; - }; -} -export {}; diff --git a/tests/spec/js/test.js b/tests/spec/js/test.js deleted file mode 100644 index 1d798142..00000000 --- a/tests/spec/js/test.js +++ /dev/null @@ -1,19 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--js option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - toJS: true, - }); -}); diff --git a/tests/spec/js/schema.js b/tests/spec/jsAxios/__snapshots__/basic.test.ts.snap similarity index 87% rename from tests/spec/js/schema.js rename to tests/spec/jsAxios/__snapshots__/basic.test.ts.snap index b023cd0d..d257b150 100644 --- a/tests/spec/js/schema.js +++ b/tests/spec/jsAxios/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --js 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -36,7 +39,7 @@ export class HttpClient { }; encodeQueryParam(key, value) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } addQueryParam(query, key) { return this.encodeQueryParam(key, query[key]); @@ -54,7 +57,7 @@ export class HttpClient { } addQueryParams(rawQuery) { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } contentFormatters = { [ContentType.Json]: (input) => @@ -69,7 +72,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -116,7 +119,7 @@ export class HttpClient { const queryString = query && this.toQueryString(query); const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -170,7 +173,7 @@ export class Api extends HttpClient { */ emojisList: (params = {}) => this.request({ - path: `/emojis`, + path: \`/emojis\`, method: "GET", format: "json", ...params, @@ -185,7 +188,7 @@ export class Api extends HttpClient { */ eventsList: (params = {}) => this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -200,7 +203,7 @@ export class Api extends HttpClient { */ feedsList: (params = {}) => this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -215,7 +218,7 @@ export class Api extends HttpClient { */ gistsList: (query, params = {}) => this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -229,7 +232,7 @@ export class Api extends HttpClient { */ gistsCreate: (body, params = {}) => this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -244,7 +247,7 @@ export class Api extends HttpClient { */ publicList: (query, params = {}) => this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -258,7 +261,7 @@ export class Api extends HttpClient { */ starredList: (query, params = {}) => this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -272,7 +275,7 @@ export class Api extends HttpClient { */ gistsDelete: (id, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -284,7 +287,7 @@ export class Api extends HttpClient { */ gistsDetail: (id, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -297,7 +300,7 @@ export class Api extends HttpClient { */ gistsPartialUpdate: (id, body, params = {}) => this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -312,7 +315,7 @@ export class Api extends HttpClient { */ commentsDetail: (id, params = {}) => this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -325,7 +328,7 @@ export class Api extends HttpClient { */ commentsCreate: (id, body, params = {}) => this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -339,7 +342,7 @@ export class Api extends HttpClient { */ commentsDelete: (id, commentId, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -353,7 +356,7 @@ export class Api extends HttpClient { */ commentsDetail2: (id, commentId, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -366,7 +369,7 @@ export class Api extends HttpClient { */ commentsPartialUpdate: (id, commentId, body, params = {}) => this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -381,7 +384,7 @@ export class Api extends HttpClient { */ forksCreate: (id, params = {}) => this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -393,7 +396,7 @@ export class Api extends HttpClient { */ starDelete: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -405,7 +408,7 @@ export class Api extends HttpClient { */ starDetail: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -417,7 +420,7 @@ export class Api extends HttpClient { */ starUpdate: (id, params = {}) => this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -431,7 +434,7 @@ export class Api extends HttpClient { */ templatesList: (params = {}) => this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -444,7 +447,7 @@ export class Api extends HttpClient { */ templatesDetail: (language, params = {}) => this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -459,7 +462,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -476,7 +479,7 @@ export class Api extends HttpClient { */ issuesSearchDetail: (keyword, state, owner, repository, params = {}) => this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -490,7 +493,7 @@ export class Api extends HttpClient { */ reposSearchDetail: (keyword, query, params = {}) => this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -505,7 +508,7 @@ export class Api extends HttpClient { */ userEmailDetail: (email, params = {}) => this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -519,7 +522,7 @@ export class Api extends HttpClient { */ userSearchDetail: (keyword, query, params = {}) => this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -535,7 +538,7 @@ export class Api extends HttpClient { */ markdownCreate: (body, params = {}) => this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -549,7 +552,7 @@ export class Api extends HttpClient { */ postMarkdown: (params = {}) => this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -564,7 +567,7 @@ export class Api extends HttpClient { */ metaList: (params = {}) => this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -579,7 +582,7 @@ export class Api extends HttpClient { */ eventsDetail: (owner, repo, params = {}) => this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -594,7 +597,7 @@ export class Api extends HttpClient { */ notificationsList: (query, params = {}) => this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -608,7 +611,7 @@ export class Api extends HttpClient { */ notificationsUpdate: (body, params = {}) => this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -621,7 +624,7 @@ export class Api extends HttpClient { */ threadsDetail: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -634,7 +637,7 @@ export class Api extends HttpClient { */ threadsPartialUpdate: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -646,7 +649,7 @@ export class Api extends HttpClient { */ threadsSubscriptionDelete: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -658,7 +661,7 @@ export class Api extends HttpClient { */ threadsSubscriptionDetail: (id, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -671,7 +674,7 @@ export class Api extends HttpClient { */ threadsSubscriptionUpdate: (id, body, params = {}) => this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -688,7 +691,7 @@ export class Api extends HttpClient { */ orgsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -701,7 +704,7 @@ export class Api extends HttpClient { */ orgsPartialUpdate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -716,7 +719,7 @@ export class Api extends HttpClient { */ eventsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -729,7 +732,7 @@ export class Api extends HttpClient { */ issuesDetail: (org, query, params = {}) => this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -743,7 +746,7 @@ export class Api extends HttpClient { */ membersDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -756,7 +759,7 @@ export class Api extends HttpClient { */ membersDelete: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -770,7 +773,7 @@ export class Api extends HttpClient { */ membersDetail2: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -782,7 +785,7 @@ export class Api extends HttpClient { */ publicMembersDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -795,7 +798,7 @@ export class Api extends HttpClient { */ publicMembersDelete: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -809,7 +812,7 @@ export class Api extends HttpClient { */ publicMembersDetail2: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -821,7 +824,7 @@ export class Api extends HttpClient { */ publicMembersUpdate: (org, username, params = {}) => this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -833,7 +836,7 @@ export class Api extends HttpClient { */ reposDetail: (org, query, params = {}) => this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -847,7 +850,7 @@ export class Api extends HttpClient { */ reposCreate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -861,7 +864,7 @@ export class Api extends HttpClient { */ teamsDetail: (org, params = {}) => this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -874,7 +877,7 @@ export class Api extends HttpClient { */ teamsCreate: (org, body, params = {}) => this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -891,7 +894,7 @@ export class Api extends HttpClient { */ rateLimitList: (params = {}) => this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -906,7 +909,7 @@ export class Api extends HttpClient { */ reposDelete: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -918,7 +921,7 @@ export class Api extends HttpClient { */ reposDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -931,7 +934,7 @@ export class Api extends HttpClient { */ reposPartialUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -946,7 +949,7 @@ export class Api extends HttpClient { */ assigneesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -961,7 +964,7 @@ export class Api extends HttpClient { */ assigneesDetail2: (owner, repo, assignee, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -973,7 +976,7 @@ export class Api extends HttpClient { */ branchesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -988,7 +991,7 @@ export class Api extends HttpClient { */ branchesDetail2: (owner, repo, branch, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -1001,7 +1004,7 @@ export class Api extends HttpClient { */ collaboratorsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -1014,7 +1017,7 @@ export class Api extends HttpClient { */ collaboratorsDelete: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -1028,7 +1031,7 @@ export class Api extends HttpClient { */ collaboratorsDetail2: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -1040,7 +1043,7 @@ export class Api extends HttpClient { */ collaboratorsUpdate: (owner, repo, user, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -1052,7 +1055,7 @@ export class Api extends HttpClient { */ commentsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -1065,7 +1068,7 @@ export class Api extends HttpClient { */ commentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -1079,7 +1082,7 @@ export class Api extends HttpClient { */ commentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -1092,7 +1095,7 @@ export class Api extends HttpClient { */ commentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -1106,7 +1109,7 @@ export class Api extends HttpClient { */ commitsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -1120,7 +1123,7 @@ export class Api extends HttpClient { */ commitsStatusDetail: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -1135,7 +1138,7 @@ export class Api extends HttpClient { */ commitsDetail2: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1148,7 +1151,7 @@ export class Api extends HttpClient { */ commitsCommentsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -1161,7 +1164,7 @@ export class Api extends HttpClient { */ commitsCommentsCreate: (owner, repo, shaCode, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -1176,7 +1179,7 @@ export class Api extends HttpClient { */ compareDetail: (owner, repo, baseId, headId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -1189,7 +1192,7 @@ export class Api extends HttpClient { */ contentsDelete: (owner, repo, path, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -1204,7 +1207,7 @@ export class Api extends HttpClient { */ contentsDetail: (owner, repo, path, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -1218,7 +1221,7 @@ export class Api extends HttpClient { */ contentsUpdate: (owner, repo, path, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -1233,7 +1236,7 @@ export class Api extends HttpClient { */ contributorsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -1247,7 +1250,7 @@ export class Api extends HttpClient { */ deploymentsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -1260,7 +1263,7 @@ export class Api extends HttpClient { */ deploymentsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -1275,7 +1278,7 @@ export class Api extends HttpClient { */ deploymentsStatusesDetail: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -1288,7 +1291,7 @@ export class Api extends HttpClient { */ deploymentsStatusesCreate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -1303,7 +1306,7 @@ export class Api extends HttpClient { */ downloadsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -1317,7 +1320,7 @@ export class Api extends HttpClient { */ downloadsDelete: (owner, repo, downloadId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -1332,7 +1335,7 @@ export class Api extends HttpClient { */ downloadsDetail2: (owner, repo, downloadId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -1345,7 +1348,7 @@ export class Api extends HttpClient { */ eventsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -1358,7 +1361,7 @@ export class Api extends HttpClient { */ forksDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -1372,7 +1375,7 @@ export class Api extends HttpClient { */ forksCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -1387,7 +1390,7 @@ export class Api extends HttpClient { */ gitBlobsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -1402,7 +1405,7 @@ export class Api extends HttpClient { */ gitBlobsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1415,7 +1418,7 @@ export class Api extends HttpClient { */ gitCommitsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -1430,7 +1433,7 @@ export class Api extends HttpClient { */ gitCommitsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1443,7 +1446,7 @@ export class Api extends HttpClient { */ gitRefsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -1456,7 +1459,7 @@ export class Api extends HttpClient { */ gitRefsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -1471,7 +1474,7 @@ export class Api extends HttpClient { */ gitRefsDelete: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -1485,7 +1488,7 @@ export class Api extends HttpClient { */ gitRefsDetail2: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -1498,7 +1501,7 @@ export class Api extends HttpClient { */ gitRefsPartialUpdate: (owner, repo, ref, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -1513,7 +1516,7 @@ export class Api extends HttpClient { */ gitTagsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -1528,7 +1531,7 @@ export class Api extends HttpClient { */ gitTagsDetail: (owner, repo, shaCode, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -1541,7 +1544,7 @@ export class Api extends HttpClient { */ gitTreesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -1556,7 +1559,7 @@ export class Api extends HttpClient { */ gitTreesDetail: (owner, repo, shaCode, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -1570,7 +1573,7 @@ export class Api extends HttpClient { */ hooksDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -1583,7 +1586,7 @@ export class Api extends HttpClient { */ hooksCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -1597,7 +1600,7 @@ export class Api extends HttpClient { */ hooksDelete: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -1611,7 +1614,7 @@ export class Api extends HttpClient { */ hooksDetail2: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -1624,7 +1627,7 @@ export class Api extends HttpClient { */ hooksPartialUpdate: (owner, repo, hookId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -1638,7 +1641,7 @@ export class Api extends HttpClient { */ hooksTestsCreate: (owner, repo, hookId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -1650,7 +1653,7 @@ export class Api extends HttpClient { */ issuesDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -1664,7 +1667,7 @@ export class Api extends HttpClient { */ issuesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -1678,7 +1681,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -1692,7 +1695,7 @@ export class Api extends HttpClient { */ issuesCommentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -1706,7 +1709,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -1719,7 +1722,7 @@ export class Api extends HttpClient { */ issuesCommentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -1733,7 +1736,7 @@ export class Api extends HttpClient { */ issuesEventsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -1748,7 +1751,7 @@ export class Api extends HttpClient { */ issuesEventsDetail2: (owner, repo, eventId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -1763,7 +1766,7 @@ export class Api extends HttpClient { */ issuesDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -1776,7 +1779,7 @@ export class Api extends HttpClient { */ issuesPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -1792,7 +1795,7 @@ export class Api extends HttpClient { */ issuesCommentsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -1805,7 +1808,7 @@ export class Api extends HttpClient { */ issuesCommentsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -1821,7 +1824,7 @@ export class Api extends HttpClient { */ issuesEventsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -1834,7 +1837,7 @@ export class Api extends HttpClient { */ issuesLabelsDelete: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -1846,7 +1849,7 @@ export class Api extends HttpClient { */ issuesLabelsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -1859,7 +1862,7 @@ export class Api extends HttpClient { */ issuesLabelsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -1873,7 +1876,7 @@ export class Api extends HttpClient { */ issuesLabelsUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -1889,7 +1892,7 @@ export class Api extends HttpClient { */ issuesLabelsDelete2: (owner, repo, number, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -1901,7 +1904,7 @@ export class Api extends HttpClient { */ keysDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -1914,7 +1917,7 @@ export class Api extends HttpClient { */ keysCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -1928,7 +1931,7 @@ export class Api extends HttpClient { */ keysDelete: (owner, repo, keyId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -1942,7 +1945,7 @@ export class Api extends HttpClient { */ keysDetail2: (owner, repo, keyId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -1955,7 +1958,7 @@ export class Api extends HttpClient { */ labelsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -1968,7 +1971,7 @@ export class Api extends HttpClient { */ labelsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -1982,7 +1985,7 @@ export class Api extends HttpClient { */ labelsDelete: (owner, repo, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -1996,7 +1999,7 @@ export class Api extends HttpClient { */ labelsDetail2: (owner, repo, name, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -2009,7 +2012,7 @@ export class Api extends HttpClient { */ labelsPartialUpdate: (owner, repo, name, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -2023,7 +2026,7 @@ export class Api extends HttpClient { */ languagesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -2036,7 +2039,7 @@ export class Api extends HttpClient { */ mergesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -2051,7 +2054,7 @@ export class Api extends HttpClient { */ milestonesDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -2065,7 +2068,7 @@ export class Api extends HttpClient { */ milestonesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -2079,7 +2082,7 @@ export class Api extends HttpClient { */ milestonesDelete: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -2093,7 +2096,7 @@ export class Api extends HttpClient { */ milestonesDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -2106,7 +2109,7 @@ export class Api extends HttpClient { */ milestonesPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -2120,7 +2123,7 @@ export class Api extends HttpClient { */ milestonesLabelsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -2133,7 +2136,7 @@ export class Api extends HttpClient { */ notificationsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -2147,7 +2150,7 @@ export class Api extends HttpClient { */ notificationsUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -2160,7 +2163,7 @@ export class Api extends HttpClient { */ pullsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -2174,7 +2177,7 @@ export class Api extends HttpClient { */ pullsCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -2189,7 +2192,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -2203,7 +2206,7 @@ export class Api extends HttpClient { */ pullsCommentsDelete: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2217,7 +2220,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail2: (owner, repo, commentId, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2230,7 +2233,7 @@ export class Api extends HttpClient { */ pullsCommentsPartialUpdate: (owner, repo, commentId, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -2246,7 +2249,7 @@ export class Api extends HttpClient { */ pullsDetail2: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -2259,7 +2262,7 @@ export class Api extends HttpClient { */ pullsPartialUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2276,7 +2279,7 @@ export class Api extends HttpClient { */ pullsCommentsDetail3: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -2289,7 +2292,7 @@ export class Api extends HttpClient { */ pullsCommentsCreate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -2304,7 +2307,7 @@ export class Api extends HttpClient { */ pullsCommitsDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -2317,7 +2320,7 @@ export class Api extends HttpClient { */ pullsFilesDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -2330,7 +2333,7 @@ export class Api extends HttpClient { */ pullsMergeDetail: (owner, repo, number, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -2342,7 +2345,7 @@ export class Api extends HttpClient { */ pullsMergeUpdate: (owner, repo, number, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -2357,7 +2360,7 @@ export class Api extends HttpClient { */ readmeDetail: (owner, repo, query, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -2371,7 +2374,7 @@ export class Api extends HttpClient { */ releasesDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -2384,7 +2387,7 @@ export class Api extends HttpClient { */ releasesCreate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -2398,7 +2401,7 @@ export class Api extends HttpClient { */ releasesAssetsDelete: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -2410,7 +2413,7 @@ export class Api extends HttpClient { */ releasesAssetsDetail: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -2423,7 +2426,7 @@ export class Api extends HttpClient { */ releasesAssetsPartialUpdate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2438,7 +2441,7 @@ export class Api extends HttpClient { */ releasesDelete: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -2452,7 +2455,7 @@ export class Api extends HttpClient { */ releasesDetail2: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -2465,7 +2468,7 @@ export class Api extends HttpClient { */ releasesPartialUpdate: (owner, repo, id, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -2481,7 +2484,7 @@ export class Api extends HttpClient { */ releasesAssetsDetail2: (owner, repo, id, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -2494,7 +2497,7 @@ export class Api extends HttpClient { */ stargazersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -2507,7 +2510,7 @@ export class Api extends HttpClient { */ statsCodeFrequencyDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -2520,7 +2523,7 @@ export class Api extends HttpClient { */ statsCommitActivityDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -2533,7 +2536,7 @@ export class Api extends HttpClient { */ statsContributorsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -2546,7 +2549,7 @@ export class Api extends HttpClient { */ statsParticipationDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -2559,7 +2562,7 @@ export class Api extends HttpClient { */ statsPunchCardDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -2572,7 +2575,7 @@ export class Api extends HttpClient { */ statusesDetail: (owner, repo, ref, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -2585,7 +2588,7 @@ export class Api extends HttpClient { */ statusesCreate: (owner, repo, ref, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -2600,7 +2603,7 @@ export class Api extends HttpClient { */ subscribersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -2613,7 +2616,7 @@ export class Api extends HttpClient { */ subscriptionDelete: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -2625,7 +2628,7 @@ export class Api extends HttpClient { */ subscriptionDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -2638,7 +2641,7 @@ export class Api extends HttpClient { */ subscriptionUpdate: (owner, repo, body, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2653,7 +2656,7 @@ export class Api extends HttpClient { */ tagsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -2666,7 +2669,7 @@ export class Api extends HttpClient { */ teamsDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -2679,7 +2682,7 @@ export class Api extends HttpClient { */ watchersDetail: (owner, repo, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -2694,7 +2697,7 @@ export class Api extends HttpClient { */ reposDetail2: (owner, repo, archiveFormat, path, params = {}) => this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -2708,7 +2711,7 @@ export class Api extends HttpClient { */ repositoriesList: (query, params = {}) => this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -2724,7 +2727,7 @@ export class Api extends HttpClient { */ codeList: (query, params = {}) => this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -2738,7 +2741,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -2752,7 +2755,7 @@ export class Api extends HttpClient { */ repositoriesList: (query, params = {}) => this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -2766,7 +2769,7 @@ export class Api extends HttpClient { */ usersList: (query, params = {}) => this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -2782,7 +2785,7 @@ export class Api extends HttpClient { */ teamsDelete: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -2794,7 +2797,7 @@ export class Api extends HttpClient { */ teamsDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -2807,7 +2810,7 @@ export class Api extends HttpClient { */ teamsPartialUpdate: (teamId, body, params = {}) => this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2822,7 +2825,7 @@ export class Api extends HttpClient { */ membersDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -2836,7 +2839,7 @@ export class Api extends HttpClient { */ membersDelete: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2851,7 +2854,7 @@ export class Api extends HttpClient { */ membersDetail2: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -2864,7 +2867,7 @@ export class Api extends HttpClient { */ membersUpdate: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -2876,7 +2879,7 @@ export class Api extends HttpClient { */ membershipsDelete: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -2888,7 +2891,7 @@ export class Api extends HttpClient { */ membershipsDetail: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -2901,7 +2904,7 @@ export class Api extends HttpClient { */ membershipsUpdate: (teamId, username, params = {}) => this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -2914,7 +2917,7 @@ export class Api extends HttpClient { */ reposDetail: (teamId, params = {}) => this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -2927,7 +2930,7 @@ export class Api extends HttpClient { */ reposDelete: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -2941,7 +2944,7 @@ export class Api extends HttpClient { */ reposDetail2: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -2953,7 +2956,7 @@ export class Api extends HttpClient { */ reposUpdate: (teamId, owner, repo, params = {}) => this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -2967,7 +2970,7 @@ export class Api extends HttpClient { */ userList: (params = {}) => this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -2980,7 +2983,7 @@ export class Api extends HttpClient { */ userPartialUpdate: (body, params = {}) => this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2995,7 +2998,7 @@ export class Api extends HttpClient { */ emailsDelete: (body, params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3009,7 +3012,7 @@ export class Api extends HttpClient { */ emailsList: (params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -3021,7 +3024,7 @@ export class Api extends HttpClient { */ emailsCreate: (body, params = {}) => this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -3034,7 +3037,7 @@ export class Api extends HttpClient { */ followersList: (params = {}) => this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -3047,7 +3050,7 @@ export class Api extends HttpClient { */ followingList: (params = {}) => this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -3060,7 +3063,7 @@ export class Api extends HttpClient { */ followingDelete: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -3072,7 +3075,7 @@ export class Api extends HttpClient { */ followingDetail: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -3084,7 +3087,7 @@ export class Api extends HttpClient { */ followingUpdate: (username, params = {}) => this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -3096,7 +3099,7 @@ export class Api extends HttpClient { */ issuesList: (query, params = {}) => this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -3110,7 +3113,7 @@ export class Api extends HttpClient { */ keysList: (params = {}) => this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -3123,7 +3126,7 @@ export class Api extends HttpClient { */ keysCreate: (body, params = {}) => this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -3137,7 +3140,7 @@ export class Api extends HttpClient { */ keysDelete: (keyId, params = {}) => this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -3149,7 +3152,7 @@ export class Api extends HttpClient { */ keysDetail: (keyId, params = {}) => this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -3162,7 +3165,7 @@ export class Api extends HttpClient { */ orgsList: (params = {}) => this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -3175,7 +3178,7 @@ export class Api extends HttpClient { */ reposList: (query, params = {}) => this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -3189,7 +3192,7 @@ export class Api extends HttpClient { */ reposCreate: (body, params = {}) => this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -3203,7 +3206,7 @@ export class Api extends HttpClient { */ starredList: (query, params = {}) => this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -3217,7 +3220,7 @@ export class Api extends HttpClient { */ starredDelete: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3229,7 +3232,7 @@ export class Api extends HttpClient { */ starredDetail: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -3241,7 +3244,7 @@ export class Api extends HttpClient { */ starredUpdate: (owner, repo, params = {}) => this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -3253,7 +3256,7 @@ export class Api extends HttpClient { */ subscriptionsList: (params = {}) => this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -3267,7 +3270,7 @@ export class Api extends HttpClient { */ subscriptionsDelete: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3280,7 +3283,7 @@ export class Api extends HttpClient { */ subscriptionsDetail: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -3293,7 +3296,7 @@ export class Api extends HttpClient { */ subscriptionsUpdate: (owner, repo, params = {}) => this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -3305,7 +3308,7 @@ export class Api extends HttpClient { */ teamsList: (params = {}) => this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -3320,7 +3323,7 @@ export class Api extends HttpClient { */ usersList: (query, params = {}) => this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -3334,7 +3337,7 @@ export class Api extends HttpClient { */ usersDetail: (username, params = {}) => this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -3347,7 +3350,7 @@ export class Api extends HttpClient { */ eventsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -3359,7 +3362,7 @@ export class Api extends HttpClient { */ eventsOrgsDetail: (username, org, params = {}) => this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -3371,7 +3374,7 @@ export class Api extends HttpClient { */ followersDetail: (username, params = {}) => this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -3384,7 +3387,7 @@ export class Api extends HttpClient { */ followingDetail: (username, targetUser, params = {}) => this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -3396,7 +3399,7 @@ export class Api extends HttpClient { */ gistsDetail: (username, query, params = {}) => this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -3410,7 +3413,7 @@ export class Api extends HttpClient { */ keysDetail: (username, params = {}) => this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -3423,7 +3426,7 @@ export class Api extends HttpClient { */ orgsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -3436,7 +3439,7 @@ export class Api extends HttpClient { */ receivedEventsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -3448,7 +3451,7 @@ export class Api extends HttpClient { */ receivedEventsPublicDetail: (username, params = {}) => this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -3460,7 +3463,7 @@ export class Api extends HttpClient { */ reposDetail: (username, query, params = {}) => this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -3474,7 +3477,7 @@ export class Api extends HttpClient { */ starredDetail: (username, params = {}) => this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -3486,9 +3489,11 @@ export class Api extends HttpClient { */ subscriptionsDetail: (username, params = {}) => this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/jsAxios/basic.test.ts b/tests/spec/jsAxios/basic.test.ts new file mode 100644 index 00000000..9249436d --- /dev/null +++ b/tests/spec/jsAxios/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--js", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + toJS: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.js"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/jsAxios/schema.d.ts b/tests/spec/jsAxios/schema.d.ts deleted file mode 100644 index 1c46ab41..00000000 --- a/tests/spec/jsAxios/schema.d.ts +++ /dev/null @@ -1,4572 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} -export interface AssetPatch { - label?: string; - name: string; -} -export type Assets = Asset[]; -export type Assignees = User[]; -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} -export interface Blobs { - sha?: string; -} -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; -export type CodeFrequencyStats = number[]; -export interface Comment { - body?: string; -} -export interface CommentBody { - body: string; -} -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} -export type Downloads = Download[]; -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} -export type EmailsPost = string[]; -export type Emojis = Record; -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} -export type Events = Event[]; -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} -export interface ForkBody { - organization?: string; -} -export type Forks = Repos; -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} -export interface GitRefPatch { - force?: boolean; - sha?: string; -} -export type Gitignore = any[]; -export interface GitignoreLang { - name?: string; - source?: string; -} -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; -export interface HookBody { - active?: boolean; - add_events?: string[]; -} -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} -export type IssueEvents = IssueEvent[]; -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; -export type Languages = Record; -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} -export interface MergePullBody { - commit_message?: string; -} -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} -export interface MergesConflict { - /** Error message */ - message?: string; -} -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} -export interface Meta { - git?: string[]; - hooks?: string[]; -} -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} -export interface NotificationMarkRead { - last_read_at?: string; -} -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} -/** A GitHub organization */ -export type Organization = Actor; -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; -export interface RefsBody { - ref?: string; - sha?: string; -} -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} -export type Repos = Repo[]; -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} -export interface SearchUsers { - items?: Users; - total_count?: number; -} -export interface SearchUsersByKeyword { - users?: Users; -} -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} -export type Tags = Tag[]; -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} -export interface TeamMembership { - state?: string; - url?: string; -} -export type TeamRepos = Repos; -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} -/** A GitHub user */ -export type User = Actor; -export type UserEmails = string[]; -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} -export interface UserKeysPost { - key?: string; - title?: string; -} -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} -export type Users = User[]; -import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from "axios"; -export type QueryParamsType = Record; -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseType; - /** request body */ - body?: unknown; -} -export type RequestParams = Omit; -export interface ApiConfig extends Omit { - securityWorker?: ( - securityData: SecurityDataType | null, - ) => Promise | AxiosRequestConfig | void; - secure?: boolean; - format?: ResponseType; -} -export declare enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} -export declare class HttpClient { - instance: AxiosInstance; - private securityData; - private securityWorker?; - private secure?; - private format?; - constructor({ securityWorker, secure, format, ...axiosConfig }?: ApiConfig); - setSecurityData: (data: SecurityDataType | null) => void; - protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig; - protected stringifyFormItem(formItem: unknown): string; - protected createFormData(input: Record): FormData; - request: ({ - secure, - path, - type, - query, - format, - body, - ...params - }: FullRequestParams) => Promise>; -} -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export declare class Api extends HttpClient { - emojis: { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params?: RequestParams) => Promise>; - }; - events: { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params?: RequestParams) => Promise>; - }; - feeds: { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params?: RequestParams) => Promise>; - }; - gists: { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params?: RequestParams) => Promise>; - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params?: RequestParams) => Promise>; - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params?: RequestParams) => Promise>; - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params?: RequestParams) => Promise>; - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params?: RequestParams) => Promise>; - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: ( - id: number, - commentId: number, - body: Comment, - params?: RequestParams, - ) => Promise>; - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params?: RequestParams) => Promise>; - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params?: RequestParams) => Promise>; - }; - gitignore: { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params?: RequestParams) => Promise>; - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params?: RequestParams) => Promise>; - }; - issues: { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - }; - legacy: { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params?: RequestParams) => Promise>; - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params?: RequestParams, - ) => Promise>; - }; - markdown: { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params?: RequestParams) => Promise>; - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params?: RequestParams) => Promise>; - }; - meta: { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params?: RequestParams) => Promise>; - }; - networks: { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - }; - notifications: { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params?: RequestParams) => Promise>; - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params?: RequestParams) => Promise>; - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params?: RequestParams) => Promise>; - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params?: RequestParams) => Promise>; - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: ( - id: number, - body: PutSubscription, - params?: RequestParams, - ) => Promise>; - }; - orgs: { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params?: RequestParams) => Promise>; - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params?: RequestParams) => Promise>; - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params?: RequestParams) => Promise>; - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params?: RequestParams) => Promise>; - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params?: RequestParams) => Promise>; - }; - rateLimit: { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params?: RequestParams) => Promise>; - }; - repos: { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: ( - owner: string, - repo: string, - body: RepoEdit, - params?: RequestParams, - ) => Promise>; - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: ( - owner: string, - repo: string, - assignee: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: ( - owner: string, - repo: string, - branch: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: ( - owner: string, - repo: string, - user: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: ( - owner: string, - repo: string, - baseId: string, - headId: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: ( - owner: string, - repo: string, - path: string, - body: DeleteFileBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: ( - owner: string, - repo: string, - path: string, - body: CreateFileBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: ( - owner: string, - repo: string, - body: Deployment, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: ( - owner: string, - repo: string, - id: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: ( - owner: string, - repo: string, - downloadId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: ( - owner: string, - repo: string, - downloadId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params?: RequestParams) => Promise>; - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params?: RequestParams) => Promise>; - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: ( - owner: string, - repo: string, - body: RepoCommitBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: ( - owner: string, - repo: string, - body: RefsBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params?: RequestParams) => Promise>; - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: ( - owner: string, - repo: string, - ref: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: ( - owner: string, - repo: string, - ref: string, - body: GitRefPatch, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params?: RequestParams) => Promise>; - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: ( - owner: string, - repo: string, - shaCode: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params?: RequestParams) => Promise>; - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params?: RequestParams) => Promise>; - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params?: RequestParams) => Promise>; - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params?: RequestParams) => Promise>; - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: ( - owner: string, - repo: string, - hookId: number, - body: HookBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: ( - owner: string, - repo: string, - hookId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params?: RequestParams) => Promise>; - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: ( - owner: string, - repo: string, - eventId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: Issue, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: ( - owner: string, - repo: string, - number: number, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: ( - owner: string, - repo: string, - number: number, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: ( - owner: string, - repo: string, - number: number, - name: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: ( - owner: string, - repo: string, - body: UserKeysPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params?: RequestParams) => Promise>; - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: ( - owner: string, - repo: string, - keyId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: ( - owner: string, - repo: string, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params?: RequestParams) => Promise>; - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params?: RequestParams) => Promise>; - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: ( - owner: string, - repo: string, - name: string, - body: EmailsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: ( - owner: string, - repo: string, - body: MergesBody, - params?: RequestParams, - ) => Promise>; - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: ( - owner: string, - repo: string, - body: MilestoneUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: ( - owner: string, - repo: string, - body: NotificationMarkRead, - params?: RequestParams, - ) => Promise>; - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: ( - owner: string, - repo: string, - body: PullsPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: ( - owner: string, - repo: string, - commentId: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: PullUpdate, - params?: RequestParams, - ) => Promise>; - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params?: RequestParams, - ) => Promise>; - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: ( - owner: string, - repo: string, - number: number, - params?: RequestParams, - ) => Promise>; - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: ( - owner: string, - repo: string, - number: number, - body: MergePullBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: ( - owner: string, - repo: string, - body: ReleaseCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params?: RequestParams) => Promise>; - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: ReleaseCreate, - params?: RequestParams, - ) => Promise>; - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: ( - owner: string, - repo: string, - id: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: ( - owner: string, - repo: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params?: RequestParams) => Promise>; - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: ( - owner: string, - repo: string, - ref: string, - body: HeadBranch, - params?: RequestParams, - ) => Promise>; - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: ( - owner: string, - repo: string, - body: SubscriptionBody, - params?: RequestParams, - ) => Promise>; - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params?: RequestParams, - ) => Promise>; - }; - repositories: { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - }; - search: { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params?: RequestParams, - ) => Promise>; - }; - teams: { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params?: RequestParams) => Promise>; - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params?: RequestParams) => Promise>; - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: ( - teamId: number, - username: string, - params?: RequestParams, - ) => Promise>; - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: ( - teamId: number, - username: string, - params?: RequestParams, - ) => Promise>; - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params?: RequestParams) => Promise>; - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params?: RequestParams) => Promise>; - }; - user: { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params?: RequestParams) => Promise>; - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params?: RequestParams) => Promise>; - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params?: RequestParams) => Promise>; - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params?: RequestParams) => Promise>; - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params?: RequestParams) => Promise>; - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params?: RequestParams) => Promise>; - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params?: RequestParams) => Promise>; - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params?: RequestParams) => Promise>; - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params?: RequestParams) => Promise>; - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params?: RequestParams) => Promise>; - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params?: RequestParams) => Promise>; - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params?: RequestParams) => Promise>; - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params?: RequestParams) => Promise>; - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params?: RequestParams) => Promise>; - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params?: RequestParams) => Promise>; - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params?: RequestParams) => Promise>; - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params?: RequestParams) => Promise>; - }; - users: { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params?: RequestParams) => Promise>; - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params?: RequestParams) => Promise>; - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params?: RequestParams, - ) => Promise>; - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params?: RequestParams) => Promise>; - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params?: RequestParams) => Promise>; - }; -} diff --git a/tests/spec/jsAxios/test.js b/tests/spec/jsAxios/test.js deleted file mode 100644 index 21d8f855..00000000 --- a/tests/spec/jsAxios/test.js +++ /dev/null @@ -1,20 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--js --axios option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - toJS: true, - httpClientType: "axios", - }); -}); diff --git a/tests/spec/jsSingleHttpClientModular/expected/Key.d.ts b/tests/spec/jsSingleHttpClientModular/expected/Key.d.ts deleted file mode 100644 index 4839c9dc..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Key.d.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Error } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Key { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** pending or done */ - status?: string; - }, - Error - > - >; - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: ( - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - > - >; - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** done */ - status?: string; - }, - Error - > - >; - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: ( - pk: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - > - >; - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params?: RequestParams) => Promise>; - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: ( - pk: string, - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: ( - pk: string, - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/Key.js b/tests/spec/jsSingleHttpClientModular/expected/Key.js deleted file mode 100644 index 0d616643..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Key.js +++ /dev/null @@ -1,119 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export class Key { - http; - constructor(http) { - this.http = http; - } - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret = (query, params = {}) => - this.http.request({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister = (body, params = {}) => - this.http.request({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke = (pk, query, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey = (pk, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey = (pk, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }); - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate = (pk, body, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind = (pk, body, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.d.ts b/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.d.ts deleted file mode 100644 index b1d3a0be..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.d.ts +++ /dev/null @@ -1,153 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID } from "./data-contracts"; -export declare namespace Key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - namespace KeyRevokeNosecret { - type RequestParams = {}; - type RequestQuery = { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** pending or done */ - status?: string; - }; - } - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - namespace KeyRegister { - type RequestParams = {}; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - namespace KeyRevoke { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = { - /** revokation secret */ - secret: string; - }; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** done */ - status?: string; - }; - } - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - namespace GetKey { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - namespace HeadKey { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = void; - } - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - namespace KeyUpdate { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - namespace KeyBind { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.js b/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/KeyRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/expected/Login.d.ts b/tests/spec/jsSingleHttpClientModular/expected/Login.d.ts deleted file mode 100644 index c648cece..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Login.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Error, PushToken } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Login { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** sent */ - status?: string; - }, - Error - > - >; - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister: (params?: RequestParams) => Promise< - HttpResponse< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/Login.js b/tests/spec/jsSingleHttpClientModular/expected/Login.js deleted file mode 100644 index 21e83fde..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Login.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export class Login { - http; - constructor(http) { - this.http = http; - } - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest = (query, body, params = {}) => - this.http.request({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister = (params = {}) => - this.http.request({ - path: `/login`, - method: "GET", - format: "json", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.d.ts b/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.d.ts deleted file mode 100644 index f12a9cb1..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { PushToken } from "./data-contracts"; -export declare namespace Login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - namespace PushLoginRequest { - type RequestParams = {}; - type RequestQuery = { - /** URI App will connect to */ - callback: string; - }; - type RequestBody = PushToken; - type RequestHeaders = {}; - type ResponseBody = { - /** sent */ - status?: string; - }; - } - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - namespace KeyRegister { - type RequestParams = {}; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.js b/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/LoginRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/expected/Scope.d.ts b/tests/spec/jsSingleHttpClientModular/expected/Scope.d.ts deleted file mode 100644 index 5d0709c5..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Scope.d.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims, Error } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Scope { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - > - >; - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** done */ - status?: string; - }, - Error - > - >; - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - > - >; - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params?: RequestParams) => Promise>; - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/Scope.js b/tests/spec/jsSingleHttpClientModular/expected/Scope.js deleted file mode 100644 index 8dedfdde..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/Scope.js +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { ContentType } from "./http-client"; -export class Scope { - http; - constructor(http) { - this.http = http; - } - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest = (body, query, params = {}) => - this.http.request({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }); - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }); - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }); - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.d.ts b/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.d.ts deleted file mode 100644 index 2c7ba2ed..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.d.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims } from "./data-contracts"; -export declare namespace Scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - namespace SignRequest { - type RequestParams = {}; - type RequestQuery = { - /** test only mode, using test issuer */ - test?: number; - }; - type RequestBody = Claims; - type RequestHeaders = {}; - type ResponseBody = { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }; - } - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - namespace SignDelete { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** done */ - status?: string; - }; - } - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - namespace SignRetrieve { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - namespace SignRetrieveHead { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = void; - } - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - namespace SignConfirm { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - namespace SignUpdate { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.js b/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/ScopeRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/expected/data-contracts.d.ts b/tests/spec/jsSingleHttpClientModular/expected/data-contracts.d.ts deleted file mode 100644 index 207c3dbb..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/data-contracts.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} diff --git a/tests/spec/jsSingleHttpClientModular/expected/data-contracts.js b/tests/spec/jsSingleHttpClientModular/expected/data-contracts.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/data-contracts.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/expected/http-client.d.ts b/tests/spec/jsSingleHttpClientModular/expected/http-client.d.ts deleted file mode 100644 index 395b6542..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/http-client.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} -export type RequestParams = Omit; -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} -export interface HttpResponse extends Response { - data: D; - error: E; -} -type CancelToken = Symbol | string | number; -export declare enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} -export declare class HttpClient { - baseUrl: string; - private securityData; - private securityWorker?; - private abortControllers; - private customFetch; - private baseApiParams; - constructor(apiConfig?: ApiConfig); - setSecurityData: (data: SecurityDataType | null) => void; - protected encodeQueryParam(key: string, value: any): string; - protected addQueryParam(query: QueryParamsType, key: string): string; - protected addArrayQueryParam(query: QueryParamsType, key: string): any; - protected toQueryString(rawQuery?: QueryParamsType): string; - protected addQueryParams(rawQuery?: QueryParamsType): string; - private contentFormatters; - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams; - protected createAbortSignal: (cancelToken: CancelToken) => AbortSignal | undefined; - abortRequest: (cancelToken: CancelToken) => void; - request: ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams) => Promise>; -} -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/expected/http-client.js b/tests/spec/jsSingleHttpClientModular/expected/http-client.js deleted file mode 100644 index 337c65e4..00000000 --- a/tests/spec/jsSingleHttpClientModular/expected/http-client.js +++ /dev/null @@ -1,153 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export var ContentType; -(function (ContentType) { - ContentType["Json"] = "application/json"; - ContentType["FormData"] = "multipart/form-data"; - ContentType["UrlEncoded"] = "application/x-www-form-urlencoded"; - ContentType["Text"] = "text/plain"; -})(ContentType || (ContentType = {})); -export class HttpClient { - baseUrl = "https://6-dot-authentiqio.appspot.com"; - securityData = null; - securityWorker; - abortControllers = new Map(); - customFetch = (...fetchParams) => fetch(...fetchParams); - baseApiParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - constructor(apiConfig = {}) { - Object.assign(this, apiConfig); - } - setSecurityData = (data) => { - this.securityData = data; - }; - encodeQueryParam(key, value) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - addQueryParam(query, key) { - return this.encodeQueryParam(key, query[key]); - } - addArrayQueryParam(query, key) { - const value = query[key]; - return value.map((v) => this.encodeQueryParam(key, v)).join("&"); - } - toQueryString(rawQuery) { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - addQueryParams(rawQuery) { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - contentFormatters = { - [ContentType.Json]: (input) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input) => this.toQueryString(input), - }; - mergeRequestParams(params1, params2) { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - createAbortSignal = (cancelToken) => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - abortRequest = (cancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - request = async ({ body, secure, path, type, query, format, baseUrl, cancelToken, ...params }) => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone(); - r.data = null; - r.error = null; - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - if (!response.ok) throw data; - return data; - }); - }; -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/Key.d.ts b/tests/spec/jsSingleHttpClientModular/generated/Key.d.ts deleted file mode 100644 index 4839c9dc..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Key.d.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Error } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Key { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** pending or done */ - status?: string; - }, - Error - > - >; - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: ( - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - > - >; - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** done */ - status?: string; - }, - Error - > - >; - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey: ( - pk: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - > - >; - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey: (pk: string, params?: RequestParams) => Promise>; - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate: ( - pk: string, - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind: ( - pk: string, - body: AuthentiqID, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/Key.js b/tests/spec/jsSingleHttpClientModular/generated/Key.js deleted file mode 100644 index 0d616643..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Key.js +++ /dev/null @@ -1,119 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export class Key { - http; - constructor(http) { - this.http = http; - } - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret = (query, params = {}) => - this.http.request({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister = (body, params = {}) => - this.http.request({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke = (pk, query, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey = (pk, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey = (pk, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }); - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate = (pk, body, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind = (pk, body, params = {}) => - this.http.request({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.d.ts b/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.d.ts deleted file mode 100644 index b1d3a0be..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.d.ts +++ /dev/null @@ -1,153 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID } from "./data-contracts"; -export declare namespace Key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - namespace KeyRevokeNosecret { - type RequestParams = {}; - type RequestQuery = { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** pending or done */ - status?: string; - }; - } - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - namespace KeyRegister { - type RequestParams = {}; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - namespace KeyRevoke { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = { - /** revokation secret */ - secret: string; - }; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** done */ - status?: string; - }; - } - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - namespace GetKey { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - namespace HeadKey { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = void; - } - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - namespace KeyUpdate { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - namespace KeyBind { - type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - type RequestQuery = {}; - type RequestBody = AuthentiqID; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.js b/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/KeyRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/generated/Login.d.ts b/tests/spec/jsSingleHttpClientModular/generated/Login.d.ts deleted file mode 100644 index c648cece..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Login.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Error, PushToken } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Login { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** sent */ - status?: string; - }, - Error - > - >; - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister: (params?: RequestParams) => Promise< - HttpResponse< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/Login.js b/tests/spec/jsSingleHttpClientModular/generated/Login.js deleted file mode 100644 index 21e83fde..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Login.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export class Login { - http; - constructor(http) { - this.http = http; - } - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest = (query, body, params = {}) => - this.http.request({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister = (params = {}) => - this.http.request({ - path: `/login`, - method: "GET", - format: "json", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.d.ts b/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.d.ts deleted file mode 100644 index f12a9cb1..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { PushToken } from "./data-contracts"; -export declare namespace Login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - namespace PushLoginRequest { - type RequestParams = {}; - type RequestQuery = { - /** URI App will connect to */ - callback: string; - }; - type RequestBody = PushToken; - type RequestHeaders = {}; - type ResponseBody = { - /** sent */ - status?: string; - }; - } - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - namespace KeyRegister { - type RequestParams = {}; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.js b/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/LoginRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/generated/Scope.d.ts b/tests/spec/jsSingleHttpClientModular/generated/Scope.d.ts deleted file mode 100644 index 5d0709c5..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Scope.d.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims, Error } from "./data-contracts"; -import { HttpClient, HttpResponse, RequestParams } from "./http-client"; -export declare class Scope { - http: HttpClient; - constructor(http: HttpClient); - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest: ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - > - >; - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** done */ - status?: string; - }, - Error - > - >; - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - > - >; - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead: (job: string, params?: RequestParams) => Promise>; - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** confirmed */ - status?: string; - }, - Error - > - >; - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate: ( - job: string, - params?: RequestParams, - ) => Promise< - HttpResponse< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - > - >; -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/Scope.js b/tests/spec/jsSingleHttpClientModular/generated/Scope.js deleted file mode 100644 index 8dedfdde..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/Scope.js +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { ContentType } from "./http-client"; -export class Scope { - http; - constructor(http) { - this.http = http; - } - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest = (body, query, params = {}) => - this.http.request({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }); - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }); - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }); - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate = (job, params = {}) => - this.http.request({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }); -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.d.ts b/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.d.ts deleted file mode 100644 index 2c7ba2ed..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.d.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims } from "./data-contracts"; -export declare namespace Scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - namespace SignRequest { - type RequestParams = {}; - type RequestQuery = { - /** test only mode, using test issuer */ - test?: number; - }; - type RequestBody = Claims; - type RequestHeaders = {}; - type ResponseBody = { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }; - } - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - namespace SignDelete { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** done */ - status?: string; - }; - } - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - namespace SignRetrieve { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - namespace SignRetrieveHead { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = void; - } - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - namespace SignConfirm { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - namespace SignUpdate { - type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - type RequestQuery = {}; - type RequestBody = never; - type RequestHeaders = {}; - type ResponseBody = { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }; - } -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.js b/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/ScopeRoute.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/generated/data-contracts.d.ts b/tests/spec/jsSingleHttpClientModular/generated/data-contracts.d.ts deleted file mode 100644 index 207c3dbb..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/data-contracts.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} diff --git a/tests/spec/jsSingleHttpClientModular/generated/data-contracts.js b/tests/spec/jsSingleHttpClientModular/generated/data-contracts.js deleted file mode 100644 index e785e7ef..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/data-contracts.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/generated/http-client.d.ts b/tests/spec/jsSingleHttpClientModular/generated/http-client.d.ts deleted file mode 100644 index 395b6542..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/http-client.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} -export type RequestParams = Omit; -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} -export interface HttpResponse extends Response { - data: D; - error: E; -} -type CancelToken = Symbol | string | number; -export declare enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} -export declare class HttpClient { - baseUrl: string; - private securityData; - private securityWorker?; - private abortControllers; - private customFetch; - private baseApiParams; - constructor(apiConfig?: ApiConfig); - setSecurityData: (data: SecurityDataType | null) => void; - protected encodeQueryParam(key: string, value: any): string; - protected addQueryParam(query: QueryParamsType, key: string): string; - protected addArrayQueryParam(query: QueryParamsType, key: string): any; - protected toQueryString(rawQuery?: QueryParamsType): string; - protected addQueryParams(rawQuery?: QueryParamsType): string; - private contentFormatters; - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams; - protected createAbortSignal: (cancelToken: CancelToken) => AbortSignal | undefined; - abortRequest: (cancelToken: CancelToken) => void; - request: ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams) => Promise>; -} -export {}; diff --git a/tests/spec/jsSingleHttpClientModular/generated/http-client.js b/tests/spec/jsSingleHttpClientModular/generated/http-client.js deleted file mode 100644 index 337c65e4..00000000 --- a/tests/spec/jsSingleHttpClientModular/generated/http-client.js +++ /dev/null @@ -1,153 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export var ContentType; -(function (ContentType) { - ContentType["Json"] = "application/json"; - ContentType["FormData"] = "multipart/form-data"; - ContentType["UrlEncoded"] = "application/x-www-form-urlencoded"; - ContentType["Text"] = "text/plain"; -})(ContentType || (ContentType = {})); -export class HttpClient { - baseUrl = "https://6-dot-authentiqio.appspot.com"; - securityData = null; - securityWorker; - abortControllers = new Map(); - customFetch = (...fetchParams) => fetch(...fetchParams); - baseApiParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - constructor(apiConfig = {}) { - Object.assign(this, apiConfig); - } - setSecurityData = (data) => { - this.securityData = data; - }; - encodeQueryParam(key, value) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - addQueryParam(query, key) { - return this.encodeQueryParam(key, query[key]); - } - addArrayQueryParam(query, key) { - const value = query[key]; - return value.map((v) => this.encodeQueryParam(key, v)).join("&"); - } - toQueryString(rawQuery) { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - addQueryParams(rawQuery) { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - contentFormatters = { - [ContentType.Json]: (input) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input) => this.toQueryString(input), - }; - mergeRequestParams(params1, params2) { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - createAbortSignal = (cancelToken) => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - abortRequest = (cancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - request = async ({ body, secure, path, type, query, format, baseUrl, cancelToken, ...params }) => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone(); - r.data = null; - r.error = null; - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - if (!response.ok) throw data; - return data; - }); - }; -} diff --git a/tests/spec/jsSingleHttpClientModular/schema.json b/tests/spec/jsSingleHttpClientModular/schema.json deleted file mode 100644 index 9712e3ab..00000000 --- a/tests/spec/jsSingleHttpClientModular/schema.json +++ /dev/null @@ -1,814 +0,0 @@ -{ - "swagger": "2.0", - "schemes": ["https"], - "host": "6-dot-authentiqio.appspot.com", - "basePath": "/", - "info": { - "contact": { - "email": "hello@authentiq.com", - "name": "Authentiq team", - "url": "http://authentiq.io/support" - }, - "description": "Strong authentication, without the passwords.", - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "termsOfService": "http://authentiq.com/terms/", - "title": "Authentiq", - "version": "6", - "x-apisguru-categories": ["security"], - "x-logo": { - "backgroundColor": "#F26641", - "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" - }, - "x-origin": [ - { - "format": "swagger", - "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", - "version": "2.0" - } - ], - "x-preferred": true, - "x-providerName": "6-dot-authentiqio.appspot.com" - }, - "parameters": { - "AuthentiqID": { - "description": "Authentiq ID to register", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AuthentiqID" - } - }, - "JobID": { - "description": "Job ID (20 chars)", - "in": "path", - "name": "job", - "required": true, - "type": "string" - }, - "PK": { - "description": "Public Signing Key - Authentiq ID (43 chars)", - "in": "path", - "name": "PK", - "required": true, - "type": "string" - }, - "PushToken": { - "description": "Push Token.", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/PushToken" - } - }, - "Scope": { - "description": "Claims of scope", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Claims" - } - } - }, - "responses": { - "ErrorResponse": { - "description": "Error response", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "paths": { - "/key": { - "delete": { - "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", - "operationId": "key_revoke_nosecret", - "parameters": [ - { - "description": "primary email associated to Key (ID)", - "in": "query", - "name": "email", - "required": true, - "type": "string" - }, - { - "description": "primary phone number, international representation", - "in": "query", - "name": "phone", - "required": true, - "type": "string" - }, - { - "description": "verification code sent by email", - "in": "query", - "name": "code", - "required": false, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully deleted", - "schema": { - "properties": { - "status": { - "description": "pending or done", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Authentication error `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Confirm with code sent `confirm-first`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "delete"] - }, - "post": { - "consumes": ["application/jwt"], - "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_register", - "parameters": [ - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "201": { - "description": "Successfully registered", - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - }, - "409": { - "description": "Key already registered `duplicate-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "post"] - } - }, - "/key/{PK}": { - "delete": { - "description": "Revoke an Identity (Key) with a revocation secret", - "operationId": "key_revoke", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "description": "revokation secret", - "in": "query", - "name": "secret", - "required": true, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successful response", - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Key not found / wrong code `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "delete"] - }, - "get": { - "description": "Get public details of an Authentiq ID.\n", - "parameters": [ - { - "$ref": "#/parameters/PK" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully retrieved", - "schema": { - "properties": { - "since": { - "format": "date-time", - "type": "string" - }, - "status": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "410": { - "description": "Key is revoked (gone). `revoked-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "get"] - }, - "head": { - "description": "HEAD info on Authentiq ID\n", - "parameters": [ - { - "$ref": "#/parameters/PK" - } - ], - "responses": { - "200": { - "description": "Key exists" - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "410": { - "description": "Key is revoked `revoked-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "head"] - }, - "post": { - "consumes": ["application/jwt"], - "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_update", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "post"] - }, - "put": { - "consumes": ["application/jwt"], - "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_bind", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Already bound to another key `duplicate-hash`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "put"] - } - }, - "/login": { - "post": { - "consumes": ["application/jwt"], - "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "push_login_request", - "parameters": [ - { - "$ref": "#/parameters/PushToken" - }, - { - "description": "URI App will connect to", - "in": "query", - "name": "callback", - "required": true, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successful response", - "schema": { - "properties": { - "status": { - "description": "sent", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["login", "post"] - }, - "get": { - "consumes": ["application/jwt"], - "description": "Get a current key register", - "operationId": "key_register", - "parameters": [], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Success", - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - }, - "409": { - "description": "Key already registered `duplicate-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "get"] - } - }, - "/scope": { - "post": { - "consumes": ["application/jwt"], - "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_request", - "parameters": [ - { - "$ref": "#/parameters/Scope" - }, - { - "description": "test only mode, using test issuer", - "in": "query", - "name": "test", - "required": false, - "type": "integer" - } - ], - "produces": ["application/json"], - "responses": { - "201": { - "description": "Successful response", - "schema": { - "properties": { - "job": { - "description": "20-character ID", - "type": "string" - }, - "status": { - "description": "waiting", - "type": "string" - } - }, - "type": "object" - } - }, - "429": { - "description": "Too Many Requests on same address / number `rate-limit`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "post"] - } - }, - "/scope/{job}": { - "delete": { - "description": "delete a verification job", - "operationId": "sign_delete", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully deleted", - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "delete"] - }, - "get": { - "description": "get the status / current content of a verification job", - "operationId": "sign_retrieve", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json", "application/jwt"], - "responses": { - "200": { - "description": "Successful response (JWT)", - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "get"] - }, - "head": { - "description": "HEAD to get the status of a verification job", - "operationId": "sign_retrieve_head", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Confirmed and signed" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "head"] - }, - "post": { - "consumes": ["application/json"], - "description": "this is a scope confirmation", - "operationId": "sign_confirm", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "202": { - "description": "Successfully confirmed", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Confirmation error `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "405": { - "description": "JWT POSTed to scope `not-supported`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "post"] - }, - "put": { - "consumes": ["application/jwt"], - "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_update", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/jwt"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "jwt": { - "description": "result is JWT or JSON??", - "type": "string" - }, - "status": { - "description": "ready", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Job not confirmed yet `confirm-first`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "put"] - } - } - }, - "definitions": { - "AuthentiqID": { - "description": "Authentiq ID in JWT format, self-signed.\n", - "properties": { - "devtoken": { - "description": "device token for push messages", - "type": "string" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": ["sub"] - }, - "Claims": { - "description": "Claim in JWT format, self- or issuer-signed. \n", - "properties": { - "email": { - "description": "", - "type": "string" - }, - "phone": { - "description": "", - "type": "string" - }, - "scope": { - "description": "claim scope", - "type": "string" - }, - "sub": { - "description": "UUID", - "type": "string" - }, - "type": { - "description": "", - "type": "string" - } - }, - "required": ["sub", "scope"] - }, - "Error": { - "properties": { - "detail": { - "type": "string" - }, - "error": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "type": { - "description": "unique uri for this error", - "type": "string" - } - }, - "required": ["error"] - }, - "PushToken": { - "description": "PushToken in JWT format, self-signed. \n", - "properties": { - "aud": { - "description": "audience (URI)", - "type": "string" - }, - "exp": { - "type": "integer" - }, - "iat": { - "type": "integer" - }, - "iss": { - "description": "issuer (URI)", - "type": "string" - }, - "nbf": { - "type": "integer" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": ["sub", "iss", "aud"] - } - } -} diff --git a/tests/spec/jsSingleHttpClientModular/test.js b/tests/spec/jsSingleHttpClientModular/test.js deleted file mode 100644 index 0b1d6abb..00000000 --- a/tests/spec/jsSingleHttpClientModular/test.js +++ /dev/null @@ -1,50 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, Exception }) => { - generateApiForTest({ - testName: "--modular-js option test", - silent: true, - input: absolutePath, - output: resolve(__dirname, "./generated"), - modular: true, - toJS: true, - singleHttpClient: true, - generateClient: true, - generateRouteTypes: true, - }).then(() => { - const outputFileNames = [ - "data-contracts.d.ts", - "data-contracts.js", - "http-client.d.ts", - "http-client.js", - "Key.d.ts", - "Key.js", - "KeyRoute.d.ts", - "KeyRoute.js", - "Login.d.ts", - "Login.js", - "LoginRoute.d.ts", - "LoginRoute.js", - "Scope.d.ts", - "Scope.js", - "ScopeRoute.d.ts", - "ScopeRoute.js", - ]; - - for (const fileName of outputFileNames) { - validateGeneratedModule(resolve(__dirname, `./generated/${fileName}`)); - assertGeneratedModule( - resolve(__dirname, `./generated/${fileName}`), - resolve(__dirname, `./expected/${fileName}`), - ); - } - }); -}); diff --git a/tests/spec/modular/expected/Key.ts b/tests/spec/modular/expected/Key.ts deleted file mode 100644 index 0ee5c954..00000000 --- a/tests/spec/modular/expected/Key.ts +++ /dev/null @@ -1,176 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Error } from "./data-contracts"; -import { HttpClient, RequestParams } from "./http-client"; - -export class Key extends HttpClient { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret = ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister = (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke = ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey = (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey = (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }); - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate = (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind = (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }); -} diff --git a/tests/spec/modular/expected/KeyRoute.ts b/tests/spec/modular/expected/KeyRoute.ts deleted file mode 100644 index be168a2f..00000000 --- a/tests/spec/modular/expected/KeyRoute.ts +++ /dev/null @@ -1,160 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID } from "./data-contracts"; - -export namespace Key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - export namespace KeyRevokeNosecret { - export type RequestParams = {}; - export type RequestQuery = { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** pending or done */ - status?: string; - }; - } - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } - - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - export namespace KeyRevoke { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = { - /** revokation secret */ - secret: string; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** done */ - status?: string; - }; - } - - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - export namespace GetKey { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - export namespace HeadKey { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - export namespace KeyUpdate { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - export namespace KeyBind { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/expected/Login.ts b/tests/spec/modular/expected/Login.ts deleted file mode 100644 index c9390b9f..00000000 --- a/tests/spec/modular/expected/Login.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Error, PushToken } from "./data-contracts"; -import { HttpClient, RequestParams } from "./http-client"; - -export class Login extends HttpClient { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest = ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params: RequestParams = {}, - ) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister = (params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "GET", - format: "json", - ...params, - }); -} diff --git a/tests/spec/modular/expected/LoginRoute.ts b/tests/spec/modular/expected/LoginRoute.ts deleted file mode 100644 index 5e6e1bc2..00000000 --- a/tests/spec/modular/expected/LoginRoute.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { PushToken } from "./data-contracts"; - -export namespace Login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - export namespace PushLoginRequest { - export type RequestParams = {}; - export type RequestQuery = { - /** URI App will connect to */ - callback: string; - }; - export type RequestBody = PushToken; - export type RequestHeaders = {}; - export type ResponseBody = { - /** sent */ - status?: string; - }; - } - - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/expected/Scope.ts b/tests/spec/modular/expected/Scope.ts deleted file mode 100644 index beefc4c8..00000000 --- a/tests/spec/modular/expected/Scope.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims, Error } from "./data-contracts"; -import { ContentType, HttpClient, RequestParams } from "./http-client"; - -export class Scope extends HttpClient { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest = ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete = (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }); - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve = (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead = (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }); - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm = (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }); - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate = (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }); -} diff --git a/tests/spec/modular/expected/ScopeRoute.ts b/tests/spec/modular/expected/ScopeRoute.ts deleted file mode 100644 index 0d645b8f..00000000 --- a/tests/spec/modular/expected/ScopeRoute.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims } from "./data-contracts"; - -export namespace Scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - export namespace SignRequest { - export type RequestParams = {}; - export type RequestQuery = { - /** test only mode, using test issuer */ - test?: number; - }; - export type RequestBody = Claims; - export type RequestHeaders = {}; - export type ResponseBody = { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }; - } - - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - export namespace SignDelete { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** done */ - status?: string; - }; - } - - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - export namespace SignRetrieve { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - export namespace SignRetrieveHead { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - export namespace SignConfirm { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - export namespace SignUpdate { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/expected/data-contracts.ts b/tests/spec/modular/expected/data-contracts.ts deleted file mode 100644 index 144ba040..00000000 --- a/tests/spec/modular/expected/data-contracts.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} diff --git a/tests/spec/modular/expected/http-client.ts b/tests/spec/modular/expected/http-client.ts deleted file mode 100644 index ed2aebb7..00000000 --- a/tests/spec/modular/expected/http-client.ts +++ /dev/null @@ -1,220 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} diff --git a/tests/spec/modular/expected/route-types.ts b/tests/spec/modular/expected/route-types.ts deleted file mode 100644 index d1cd6888..00000000 --- a/tests/spec/modular/expected/route-types.ts +++ /dev/null @@ -1,216 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Claims, PushToken } from "./data-contracts"; - -export namespace key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - export namespace KeyRevokeNosecret { - export type RequestParams = {}; - export type RequestQuery = { email: string; phone: string; code?: string }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { secret?: string; status?: string }; - } - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - export namespace KeyRevoke { - export type RequestParams = { pk: string }; - export type RequestQuery = { secret: string }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - export namespace GetKey { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { since?: string; status?: string; sub?: string }; - } - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - export namespace HeadKey { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - export namespace KeyUpdate { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - export namespace KeyBind { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } -} - -export namespace login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - export namespace PushLoginRequest { - export type RequestParams = {}; - export type RequestQuery = { callback: string }; - export type RequestBody = PushToken; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { secret?: string; status?: string }; - } -} - -export namespace scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - export namespace SignRequest { - export type RequestParams = {}; - export type RequestQuery = { test?: number }; - export type RequestBody = Claims; - export type RequestHeaders = {}; - export type ResponseBody = { job?: string; status?: string }; - } - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - export namespace SignDelete { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - export namespace SignRetrieve { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { exp?: number; field?: string; sub?: string }; - } - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - export namespace SignRetrieveHead { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - export namespace SignConfirm { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - export namespace SignUpdate { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { jwt?: string; status?: string }; - } -} diff --git a/tests/spec/modular/generated/Key.ts b/tests/spec/modular/generated/Key.ts deleted file mode 100644 index 0ee5c954..00000000 --- a/tests/spec/modular/generated/Key.ts +++ /dev/null @@ -1,176 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Error } from "./data-contracts"; -import { HttpClient, RequestParams } from "./http-client"; - -export class Key extends HttpClient { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - keyRevokeNosecret = ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister = (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - keyRevoke = ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }); - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - getKey = (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - headKey = (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }); - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - keyUpdate = (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }); - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - keyBind = (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }); -} diff --git a/tests/spec/modular/generated/KeyRoute.ts b/tests/spec/modular/generated/KeyRoute.ts deleted file mode 100644 index be168a2f..00000000 --- a/tests/spec/modular/generated/KeyRoute.ts +++ /dev/null @@ -1,160 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID } from "./data-contracts"; - -export namespace Key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - export namespace KeyRevokeNosecret { - export type RequestParams = {}; - export type RequestQuery = { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** pending or done */ - status?: string; - }; - } - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } - - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - export namespace KeyRevoke { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = { - /** revokation secret */ - secret: string; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** done */ - status?: string; - }; - } - - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - export namespace GetKey { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - export namespace HeadKey { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - export namespace KeyUpdate { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - export namespace KeyBind { - export type RequestParams = { - /** Public Signing Key - Authentiq ID (43 chars) */ - pk: string; - }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/generated/Login.ts b/tests/spec/modular/generated/Login.ts deleted file mode 100644 index c9390b9f..00000000 --- a/tests/spec/modular/generated/Login.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Error, PushToken } from "./data-contracts"; -import { HttpClient, RequestParams } from "./http-client"; - -export class Login extends HttpClient { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - pushLoginRequest = ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params: RequestParams = {}, - ) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description Get a current key register - * - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - keyRegister = (params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "GET", - format: "json", - ...params, - }); -} diff --git a/tests/spec/modular/generated/LoginRoute.ts b/tests/spec/modular/generated/LoginRoute.ts deleted file mode 100644 index 5e6e1bc2..00000000 --- a/tests/spec/modular/generated/LoginRoute.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { PushToken } from "./data-contracts"; - -export namespace Login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - export namespace PushLoginRequest { - export type RequestParams = {}; - export type RequestQuery = { - /** URI App will connect to */ - callback: string; - }; - export type RequestBody = PushToken; - export type RequestHeaders = {}; - export type ResponseBody = { - /** sent */ - status?: string; - }; - } - - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/generated/Scope.ts b/tests/spec/modular/generated/Scope.ts deleted file mode 100644 index beefc4c8..00000000 --- a/tests/spec/modular/generated/Scope.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims, Error } from "./data-contracts"; -import { ContentType, HttpClient, RequestParams } from "./http-client"; - -export class Scope extends HttpClient { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - signRequest = ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }); - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - signDelete = (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }); - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - signRetrieve = (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }); - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - signRetrieveHead = (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }); - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - signConfirm = (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }); - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - signUpdate = (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }); -} diff --git a/tests/spec/modular/generated/ScopeRoute.ts b/tests/spec/modular/generated/ScopeRoute.ts deleted file mode 100644 index 0d645b8f..00000000 --- a/tests/spec/modular/generated/ScopeRoute.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { Claims } from "./data-contracts"; - -export namespace Scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - export namespace SignRequest { - export type RequestParams = {}; - export type RequestQuery = { - /** test only mode, using test issuer */ - test?: number; - }; - export type RequestBody = Claims; - export type RequestHeaders = {}; - export type ResponseBody = { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }; - } - - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - export namespace SignDelete { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** done */ - status?: string; - }; - } - - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - export namespace SignRetrieve { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }; - } - - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - export namespace SignRetrieveHead { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - export namespace SignConfirm { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** confirmed */ - status?: string; - }; - } - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - export namespace SignUpdate { - export type RequestParams = { - /** Job ID (20 chars) */ - job: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }; - } -} diff --git a/tests/spec/modular/generated/data-contracts.ts b/tests/spec/modular/generated/data-contracts.ts deleted file mode 100644 index 144ba040..00000000 --- a/tests/spec/modular/generated/data-contracts.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} diff --git a/tests/spec/modular/generated/http-client.ts b/tests/spec/modular/generated/http-client.ts deleted file mode 100644 index ed2aebb7..00000000 --- a/tests/spec/modular/generated/http-client.ts +++ /dev/null @@ -1,220 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} diff --git a/tests/spec/modular/generated/route-types.ts b/tests/spec/modular/generated/route-types.ts deleted file mode 100644 index d1cd6888..00000000 --- a/tests/spec/modular/generated/route-types.ts +++ /dev/null @@ -1,216 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -import { AuthentiqID, Claims, PushToken } from "./data-contracts"; - -export namespace key { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - */ - export namespace KeyRevokeNosecret { - export type RequestParams = {}; - export type RequestQuery = { email: string; phone: string; code?: string }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { secret?: string; status?: string }; - } - /** - * @description Revoke an Identity (Key) with a revocation secret - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - */ - export namespace KeyRevoke { - export type RequestParams = { pk: string }; - export type RequestQuery = { secret: string }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Get public details of an Authentiq ID. - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - */ - export namespace GetKey { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { since?: string; status?: string; sub?: string }; - } - /** - * @description HEAD info on Authentiq ID - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - */ - export namespace HeadKey { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - */ - export namespace KeyUpdate { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - */ - export namespace KeyBind { - export type RequestParams = { pk: string }; - export type RequestQuery = {}; - export type RequestBody = AuthentiqID; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } -} - -export namespace login { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - */ - export namespace PushLoginRequest { - export type RequestParams = {}; - export type RequestQuery = { callback: string }; - export type RequestBody = PushToken; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description Get a current key register - * @tags key, get - * @name KeyRegister - * @request GET:/login - */ - export namespace KeyRegister { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { secret?: string; status?: string }; - } -} - -export namespace scope { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, post - * @name SignRequest - * @request POST:/scope - */ - export namespace SignRequest { - export type RequestParams = {}; - export type RequestQuery = { test?: number }; - export type RequestBody = Claims; - export type RequestHeaders = {}; - export type ResponseBody = { job?: string; status?: string }; - } - /** - * @description delete a verification job - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - */ - export namespace SignDelete { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description get the status / current content of a verification job - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - */ - export namespace SignRetrieve { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { exp?: number; field?: string; sub?: string }; - } - /** - * @description HEAD to get the status of a verification job - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - */ - export namespace SignRetrieveHead { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } - /** - * @description this is a scope confirmation - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - */ - export namespace SignConfirm { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { status?: string }; - } - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - */ - export namespace SignUpdate { - export type RequestParams = { job: string }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { jwt?: string; status?: string }; - } -} diff --git a/tests/spec/modular/schema.json b/tests/spec/modular/schema.json deleted file mode 100644 index 9712e3ab..00000000 --- a/tests/spec/modular/schema.json +++ /dev/null @@ -1,814 +0,0 @@ -{ - "swagger": "2.0", - "schemes": ["https"], - "host": "6-dot-authentiqio.appspot.com", - "basePath": "/", - "info": { - "contact": { - "email": "hello@authentiq.com", - "name": "Authentiq team", - "url": "http://authentiq.io/support" - }, - "description": "Strong authentication, without the passwords.", - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "termsOfService": "http://authentiq.com/terms/", - "title": "Authentiq", - "version": "6", - "x-apisguru-categories": ["security"], - "x-logo": { - "backgroundColor": "#F26641", - "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" - }, - "x-origin": [ - { - "format": "swagger", - "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", - "version": "2.0" - } - ], - "x-preferred": true, - "x-providerName": "6-dot-authentiqio.appspot.com" - }, - "parameters": { - "AuthentiqID": { - "description": "Authentiq ID to register", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AuthentiqID" - } - }, - "JobID": { - "description": "Job ID (20 chars)", - "in": "path", - "name": "job", - "required": true, - "type": "string" - }, - "PK": { - "description": "Public Signing Key - Authentiq ID (43 chars)", - "in": "path", - "name": "PK", - "required": true, - "type": "string" - }, - "PushToken": { - "description": "Push Token.", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/PushToken" - } - }, - "Scope": { - "description": "Claims of scope", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Claims" - } - } - }, - "responses": { - "ErrorResponse": { - "description": "Error response", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "paths": { - "/key": { - "delete": { - "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", - "operationId": "key_revoke_nosecret", - "parameters": [ - { - "description": "primary email associated to Key (ID)", - "in": "query", - "name": "email", - "required": true, - "type": "string" - }, - { - "description": "primary phone number, international representation", - "in": "query", - "name": "phone", - "required": true, - "type": "string" - }, - { - "description": "verification code sent by email", - "in": "query", - "name": "code", - "required": false, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully deleted", - "schema": { - "properties": { - "status": { - "description": "pending or done", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Authentication error `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Confirm with code sent `confirm-first`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "delete"] - }, - "post": { - "consumes": ["application/jwt"], - "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_register", - "parameters": [ - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "201": { - "description": "Successfully registered", - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - }, - "409": { - "description": "Key already registered `duplicate-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "post"] - } - }, - "/key/{PK}": { - "delete": { - "description": "Revoke an Identity (Key) with a revocation secret", - "operationId": "key_revoke", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "description": "revokation secret", - "in": "query", - "name": "secret", - "required": true, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successful response", - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Key not found / wrong code `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "delete"] - }, - "get": { - "description": "Get public details of an Authentiq ID.\n", - "parameters": [ - { - "$ref": "#/parameters/PK" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully retrieved", - "schema": { - "properties": { - "since": { - "format": "date-time", - "type": "string" - }, - "status": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "410": { - "description": "Key is revoked (gone). `revoked-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "get"] - }, - "head": { - "description": "HEAD info on Authentiq ID\n", - "parameters": [ - { - "$ref": "#/parameters/PK" - } - ], - "responses": { - "200": { - "description": "Key exists" - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "410": { - "description": "Key is revoked `revoked-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "head"] - }, - "post": { - "consumes": ["application/jwt"], - "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_update", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "post"] - }, - "put": { - "consumes": ["application/jwt"], - "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_bind", - "parameters": [ - { - "$ref": "#/parameters/PK" - }, - { - "$ref": "#/parameters/AuthentiqID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Unknown key `unknown-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Already bound to another key `duplicate-hash`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "put"] - } - }, - "/login": { - "post": { - "consumes": ["application/jwt"], - "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "push_login_request", - "parameters": [ - { - "$ref": "#/parameters/PushToken" - }, - { - "description": "URI App will connect to", - "in": "query", - "name": "callback", - "required": true, - "type": "string" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successful response", - "schema": { - "properties": { - "status": { - "description": "sent", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["login", "post"] - }, - "get": { - "consumes": ["application/jwt"], - "description": "Get a current key register", - "operationId": "key_register", - "parameters": [], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Success", - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - }, - "409": { - "description": "Key already registered `duplicate-key`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["key", "get"] - } - }, - "/scope": { - "post": { - "consumes": ["application/jwt"], - "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_request", - "parameters": [ - { - "$ref": "#/parameters/Scope" - }, - { - "description": "test only mode, using test issuer", - "in": "query", - "name": "test", - "required": false, - "type": "integer" - } - ], - "produces": ["application/json"], - "responses": { - "201": { - "description": "Successful response", - "schema": { - "properties": { - "job": { - "description": "20-character ID", - "type": "string" - }, - "status": { - "description": "waiting", - "type": "string" - } - }, - "type": "object" - } - }, - "429": { - "description": "Too Many Requests on same address / number `rate-limit`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "post"] - } - }, - "/scope/{job}": { - "delete": { - "description": "delete a verification job", - "operationId": "sign_delete", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Successfully deleted", - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "delete"] - }, - "get": { - "description": "get the status / current content of a verification job", - "operationId": "sign_retrieve", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json", "application/jwt"], - "responses": { - "200": { - "description": "Successful response (JWT)", - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "get"] - }, - "head": { - "description": "HEAD to get the status of a verification job", - "operationId": "sign_retrieve_head", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "Confirmed and signed" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "head"] - }, - "post": { - "consumes": ["application/json"], - "description": "this is a scope confirmation", - "operationId": "sign_confirm", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/json"], - "responses": { - "202": { - "description": "Successfully confirmed", - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - }, - "401": { - "description": "Confirmation error `auth-error`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "405": { - "description": "JWT POSTed to scope `not-supported`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "post"] - }, - "put": { - "consumes": ["application/jwt"], - "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_update", - "parameters": [ - { - "$ref": "#/parameters/JobID" - } - ], - "produces": ["application/jwt"], - "responses": { - "200": { - "description": "Successfully updated", - "schema": { - "properties": { - "jwt": { - "description": "result is JWT or JSON??", - "type": "string" - }, - "status": { - "description": "ready", - "type": "string" - } - }, - "type": "object" - } - }, - "404": { - "description": "Job not found `unknown-job`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Job not confirmed yet `confirm-first`", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "$ref": "#/responses/ErrorResponse" - } - }, - "tags": ["scope", "put"] - } - } - }, - "definitions": { - "AuthentiqID": { - "description": "Authentiq ID in JWT format, self-signed.\n", - "properties": { - "devtoken": { - "description": "device token for push messages", - "type": "string" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": ["sub"] - }, - "Claims": { - "description": "Claim in JWT format, self- or issuer-signed. \n", - "properties": { - "email": { - "description": "", - "type": "string" - }, - "phone": { - "description": "", - "type": "string" - }, - "scope": { - "description": "claim scope", - "type": "string" - }, - "sub": { - "description": "UUID", - "type": "string" - }, - "type": { - "description": "", - "type": "string" - } - }, - "required": ["sub", "scope"] - }, - "Error": { - "properties": { - "detail": { - "type": "string" - }, - "error": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "type": { - "description": "unique uri for this error", - "type": "string" - } - }, - "required": ["error"] - }, - "PushToken": { - "description": "PushToken in JWT format, self-signed. \n", - "properties": { - "aud": { - "description": "audience (URI)", - "type": "string" - }, - "exp": { - "type": "integer" - }, - "iat": { - "type": "integer" - }, - "iss": { - "description": "issuer (URI)", - "type": "string" - }, - "nbf": { - "type": "integer" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": ["sub", "iss", "aud"] - } - } -} diff --git a/tests/spec/modular/test.js b/tests/spec/modular/test.js deleted file mode 100644 index 033ff249..00000000 --- a/tests/spec/modular/test.js +++ /dev/null @@ -1,41 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, Exception }) => { - generateApiForTest({ - testName: "--modular option test", - silent: true, - input: absolutePath, - output: resolve(__dirname, "./generated"), - modular: true, - generateClient: true, - generateRouteTypes: true, - }).then(() => { - const outputFileNames = [ - "data-contracts", - "http-client", - "Key", - "KeyRoute", - "Login", - "LoginRoute", - "route-types", - "Scope", - "ScopeRoute", - ]; - - for (const fileName of outputFileNames) { - validateGeneratedModule(resolve(__dirname, `./generated/${fileName}.ts`)); - assertGeneratedModule( - resolve(__dirname, `./generated/${fileName}.ts`), - resolve(__dirname, `./expected/${fileName}.ts`), - ); - } - }); -}); diff --git a/tests/spec/moduleNameFirstTag/schema.ts b/tests/spec/moduleNameFirstTag/__snapshots__/basic.test.ts.snap similarity index 92% rename from tests/spec/moduleNameFirstTag/schema.ts rename to tests/spec/moduleNameFirstTag/__snapshots__/basic.test.ts.snap index e6b7c5d4..4541e3c8 100644 --- a/tests/spec/moduleNameFirstTag/schema.ts +++ b/tests/spec/moduleNameFirstTag/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --module-name-first-tag 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -138,7 +141,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -203,7 +206,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -225,7 +228,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -241,7 +244,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -305,7 +308,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -353,7 +356,7 @@ export class HttpClient { * @externalDocs http://swagger.io * @contact * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ export class Api extends HttpClient { pet = { @@ -368,7 +371,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet`, + path: \`api/v1/pet\`, method: "POST", body: body, secure: true, @@ -387,7 +390,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet`, + path: \`api/v1/pet\`, method: "PUT", body: body, secure: true, @@ -412,7 +415,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/findByStatus`, + path: \`api/v1/pet/findByStatus\`, method: "GET", query: query, secure: true, @@ -438,7 +441,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/findByTags`, + path: \`api/v1/pet/findByTags\`, method: "GET", query: query, secure: true, @@ -457,7 +460,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "GET", secure: true, format: "json", @@ -484,7 +487,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "POST", body: data, secure: true, @@ -503,7 +506,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "DELETE", secure: true, ...params, @@ -529,7 +532,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}/uploadImage`, + path: \`api/v1/pet/\${petId}/uploadImage\`, method: "POST", body: data, secure: true, @@ -550,7 +553,7 @@ export class Api extends HttpClient this.request, any>({ - path: `api/v1/store/inventory`, + path: \`api/v1/store/inventory\`, method: "GET", secure: true, format: "json", @@ -567,7 +570,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order`, + path: \`api/v1/store/order\`, method: "POST", body: body, type: ContentType.Json, @@ -585,7 +588,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order/${orderId}`, + path: \`api/v1/store/order/\${orderId}\`, method: "GET", format: "json", ...params, @@ -601,7 +604,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order/${orderId}`, + path: \`api/v1/store/order/\${orderId}\`, method: "DELETE", ...params, }), @@ -617,7 +620,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user`, + path: \`api/v1/user\`, method: "POST", body: body, type: ContentType.Json, @@ -634,7 +637,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/createWithArray`, + path: \`api/v1/user/createWithArray\`, method: "POST", body: body, type: ContentType.Json, @@ -651,7 +654,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/createWithList`, + path: \`api/v1/user/createWithList\`, method: "POST", body: body, type: ContentType.Json, @@ -676,7 +679,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/login`, + path: \`api/v1/user/login\`, method: "GET", query: query, format: "json", @@ -693,7 +696,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/logout`, + path: \`api/v1/user/logout\`, method: "GET", ...params, }), @@ -708,7 +711,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "GET", format: "json", ...params, @@ -724,7 +727,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -741,7 +744,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "DELETE", ...params, }), @@ -758,7 +761,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "GET", format: "json", ...params, @@ -776,7 +779,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -795,9 +798,11 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "DELETE", ...params, }), }; } +" +`; diff --git a/tests/spec/moduleNameFirstTag/basic.test.ts b/tests/spec/moduleNameFirstTag/basic.test.ts new file mode 100644 index 00000000..5557663b --- /dev/null +++ b/tests/spec/moduleNameFirstTag/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--module-name-first-tag", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + moduleNameFirstTag: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/moduleNameFirstTag/expected.ts b/tests/spec/moduleNameFirstTag/expected.ts deleted file mode 100644 index e6b7c5d4..00000000 --- a/tests/spec/moduleNameFirstTag/expected.ts +++ /dev/null @@ -1,803 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface Order { - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered"; - /** @default false */ - complete?: boolean; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface Category { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface User { - /** @format int64 */ - id?: number; - username?: string; - firstName?: string; - lastName?: string; - email?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface Tag { - /** @format int64 */ - id?: number; - name?: string; -} - -export enum PetNames { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", -} - -export enum PetIds { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface Pet { - /** @format int64 */ - id?: number; - /** A category for a pet */ - category?: Category; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - tags?: Tag[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; -} - -/** - * An uploaded response - * Describes the result of uploading an image resource - * @example {"code":0,"type":"type","message":"message"} - */ -export interface ApiResponse { - /** @format int32 */ - code?: number; - type?: string; - message?: string; -} - -/** some description */ -export interface Amount { - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; - /** some description */ - currency: Currency; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type Currency = string; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:api/v1/pet - * @secure - */ - addPet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:api/v1/pet - * @secure - */ - updatePet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:api/v1/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:api/v1/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:api/v1/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:api/v1/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:api/v1/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:api/v1/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:api/v1/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `api/v1/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:api/v1/store/order - */ - placeOrder: (body: Order, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:api/v1/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:api/v1/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:api/v1/user - */ - createUser: (body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:api/v1/user/createWithArray - */ - createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `api/v1/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:api/v1/user/createWithList - */ - createUsersWithListInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `api/v1/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:api/v1/user/login - */ - loginUser: ( - query: { - /** The user name for login */ - username: string; - /** The password for login in clear text */ - password: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:api/v1/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `api/v1/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:api/v1/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:api/v1/user/{username} - */ - updateUser: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:api/v1/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName2 - * @summary Get user by user name - * @request GET:api/v1/{username} - * @originalName getUserByName - * @duplicate - */ - getUserByName2: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser2 - * @summary Updated user - * @request PUT:api/v1/{username} - * @originalName updateUser - * @duplicate - */ - updateUser2: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser2 - * @summary Delete user - * @request DELETE:api/v1/{username} - * @originalName deleteUser - * @duplicate - */ - deleteUser2: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/spec/moduleNameFirstTag/test.js b/tests/spec/moduleNameFirstTag/test.js deleted file mode 100644 index 4870e6c0..00000000 --- a/tests/spec/moduleNameFirstTag/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--module-name-first-tag option test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - moduleNameFirstTag: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/moduleNameIndex/schema.ts b/tests/spec/moduleNameIndex/__snapshots__/basic.test.ts.snap similarity index 92% rename from tests/spec/moduleNameIndex/schema.ts rename to tests/spec/moduleNameIndex/__snapshots__/basic.test.ts.snap index 82e4a607..dadd562c 100644 --- a/tests/spec/moduleNameIndex/schema.ts +++ b/tests/spec/moduleNameIndex/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --module-name-index 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -138,7 +141,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -203,7 +206,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -225,7 +228,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -241,7 +244,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -305,7 +308,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -353,7 +356,7 @@ export class HttpClient { * @externalDocs http://swagger.io * @contact * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key \`special-key\` to test the authorization filters. */ export class Api extends HttpClient { pet = { @@ -368,7 +371,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet`, + path: \`api/v1/pet\`, method: "POST", body: body, secure: true, @@ -387,7 +390,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet`, + path: \`api/v1/pet\`, method: "PUT", body: body, secure: true, @@ -412,7 +415,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/findByStatus`, + path: \`api/v1/pet/findByStatus\`, method: "GET", query: query, secure: true, @@ -438,7 +441,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/findByTags`, + path: \`api/v1/pet/findByTags\`, method: "GET", query: query, secure: true, @@ -457,7 +460,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "GET", secure: true, format: "json", @@ -484,7 +487,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "POST", body: data, secure: true, @@ -503,7 +506,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}`, + path: \`api/v1/pet/\${petId}\`, method: "DELETE", secure: true, ...params, @@ -529,7 +532,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/pet/${petId}/uploadImage`, + path: \`api/v1/pet/\${petId}/uploadImage\`, method: "POST", body: data, secure: true, @@ -550,7 +553,7 @@ export class Api extends HttpClient this.request, any>({ - path: `api/v1/store/inventory`, + path: \`api/v1/store/inventory\`, method: "GET", secure: true, format: "json", @@ -567,7 +570,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order`, + path: \`api/v1/store/order\`, method: "POST", body: body, type: ContentType.Json, @@ -585,7 +588,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order/${orderId}`, + path: \`api/v1/store/order/\${orderId}\`, method: "GET", format: "json", ...params, @@ -601,7 +604,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/store/order/${orderId}`, + path: \`api/v1/store/order/\${orderId}\`, method: "DELETE", ...params, }), @@ -617,7 +620,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user`, + path: \`api/v1/user\`, method: "POST", body: body, type: ContentType.Json, @@ -634,7 +637,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/createWithArray`, + path: \`api/v1/user/createWithArray\`, method: "POST", body: body, type: ContentType.Json, @@ -651,7 +654,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/createWithList`, + path: \`api/v1/user/createWithList\`, method: "POST", body: body, type: ContentType.Json, @@ -676,7 +679,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/login`, + path: \`api/v1/user/login\`, method: "GET", query: query, format: "json", @@ -693,7 +696,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/logout`, + path: \`api/v1/user/logout\`, method: "GET", ...params, }), @@ -708,7 +711,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "GET", format: "json", ...params, @@ -724,7 +727,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -741,7 +744,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/user/${username}`, + path: \`api/v1/user/\${username}\`, method: "DELETE", ...params, }), @@ -757,7 +760,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "GET", format: "json", ...params, @@ -773,7 +776,7 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "PUT", body: body, type: ContentType.Json, @@ -790,9 +793,11 @@ export class Api extends HttpClient this.request({ - path: `api/v1/${username}`, + path: \`api/v1/\${username}\`, method: "DELETE", ...params, }), }; } +" +`; diff --git a/tests/spec/moduleNameIndex/basic.test.ts b/tests/spec/moduleNameIndex/basic.test.ts new file mode 100644 index 00000000..ff6fca74 --- /dev/null +++ b/tests/spec/moduleNameIndex/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--module-name-index", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + moduleNameIndex: 2, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/moduleNameIndex/expected.ts b/tests/spec/moduleNameIndex/expected.ts deleted file mode 100644 index 82e4a607..00000000 --- a/tests/spec/moduleNameIndex/expected.ts +++ /dev/null @@ -1,798 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * Pet Order - * An order for a pets from the pet store - * @example {"petId":6,"quantity":1,"id":0,"shipDate":"2000-01-23T04:56:07.000+00:00","complete":false,"status":"placed"} - */ -export interface Order { - /** @format int64 */ - id?: number; - /** @format int64 */ - petId?: number; - /** @format int32 */ - quantity?: number; - /** @format date-time */ - shipDate?: string; - /** Order Status */ - status?: "placed" | "approved" | "delivered"; - /** @default false */ - complete?: boolean; -} - -/** - * Pet category - * A category for a pet - * @example {"name":"name","id":6} - */ -export interface Category { - /** @format int64 */ - id?: number; - name?: string; -} - -/** - * a User - * A User who is purchasing from the pet store - * @example {"firstName":"firstName","lastName":"lastName","password":"password","userStatus":6,"phone":"phone","id":0,"email":"email","username":"username"} - */ -export interface User { - /** @format int64 */ - id?: number; - username?: string; - firstName?: string; - lastName?: string; - email?: string; - password?: string; - phone?: string; - /** - * User Status - * @format int32 - */ - userStatus?: number; -} - -/** - * Pet Tag - * A tag for a pet - * @example {"name":"name","id":1} - */ -export interface Tag { - /** @format int64 */ - id?: number; - name?: string; -} - -export enum PetNames { - FluffyHero = "Fluffy Hero", - PiggyPo = "Piggy Po", - SwaggerTypescriptApi = "Swagger Typescript Api", -} - -export enum PetIds { - Value10 = 10, - Value20 = 20, - Value30 = 30, - Value40 = 40, -} - -/** - * a Pet - * A pet for sale in the pet store - * @example {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} - */ -export interface Pet { - /** @format int64 */ - id?: number; - /** A category for a pet */ - category?: Category; - /** @example "doggie" */ - name: string; - photoUrls: string[]; - tags?: Tag[]; - /** pet status in the store */ - status?: "available" | "pending" | "sold"; -} - -/** - * An uploaded response - * Describes the result of uploading an image resource - * @example {"code":0,"type":"type","message":"message"} - */ -export interface ApiResponse { - /** @format int32 */ - code?: number; - type?: string; - message?: string; -} - -/** some description */ -export interface Amount { - /** - * some description - * @format double - * @min 0.01 - * @max 1000000000000000 - */ - value: number; - /** some description */ - currency: Currency; -} - -/** - * some description - * @pattern ^[A-Z]{3,3}$ - */ -export type Currency = string; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/v2"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license Apache-2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/v2 - * @externalDocs http://swagger.io - * @contact - * - * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. - */ -export class Api extends HttpClient { - pet = { - /** - * No description - * - * @tags pet - * @name AddPet - * @summary Add a new pet to the store - * @request POST:api/v1/pet - * @secure - */ - addPet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePet - * @summary Update an existing pet - * @request PUT:api/v1/pet - * @secure - */ - updatePet: (body: Pet, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet`, - method: "PUT", - body: body, - secure: true, - type: ContentType.Json, - ...params, - }), - - /** - * @description Multiple status values can be provided with comma separated strings - * - * @tags pet - * @name FindPetsByStatus - * @summary Finds Pets by status - * @request GET:api/v1/pet/findByStatus - * @secure - */ - findPetsByStatus: ( - query: { - /** Status values that need to be considered for filter */ - status: ("available" | "pending" | "sold")[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/findByStatus`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * - * @tags pet - * @name FindPetsByTags - * @summary Finds Pets by tags - * @request GET:api/v1/pet/findByTags - * @deprecated - * @secure - */ - findPetsByTags: ( - query: { - /** Tags to filter by */ - tags: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/findByTags`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * @description Returns a single pet - * - * @tags pet - * @name GetPetById - * @summary Find pet by ID - * @request GET:api/v1/pet/{petId} - * @secure - */ - getPetById: (petId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UpdatePetWithForm - * @summary Updates a pet in the store with form data - * @request POST:api/v1/pet/{petId} - * @secure - */ - updatePetWithForm: ( - petId: number, - data: { - /** Updated name of the pet */ - name?: string; - /** Updated status of the pet */ - status?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name DeletePet - * @summary Deletes a pet - * @request DELETE:api/v1/pet/{petId} - * @secure - */ - deletePet: (petId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/pet/${petId}`, - method: "DELETE", - secure: true, - ...params, - }), - - /** - * No description - * - * @tags pet - * @name UploadFile - * @summary uploads an image - * @request POST:api/v1/pet/{petId}/uploadImage - * @secure - */ - uploadFile: ( - petId: number, - data: { - /** Additional data to pass to server */ - additionalMetadata?: string; - /** file to upload */ - file?: File; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/pet/${petId}/uploadImage`, - method: "POST", - body: data, - secure: true, - type: ContentType.FormData, - format: "json", - ...params, - }), - }; - store = { - /** - * @description Returns a map of status codes to quantities - * - * @tags store - * @name GetInventory - * @summary Returns pet inventories by status - * @request GET:api/v1/store/inventory - * @secure - */ - getInventory: (params: RequestParams = {}) => - this.request, any>({ - path: `api/v1/store/inventory`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags store - * @name PlaceOrder - * @summary Place an order for a pet - * @request POST:api/v1/store/order - */ - placeOrder: (body: Order, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * - * @tags store - * @name GetOrderById - * @summary Find purchase order by ID - * @request GET:api/v1/store/order/{orderId} - */ - getOrderById: (orderId: number, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order/${orderId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * - * @tags store - * @name DeleteOrder - * @summary Delete purchase order by ID - * @request DELETE:api/v1/store/order/{orderId} - */ - deleteOrder: (orderId: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/store/order/${orderId}`, - method: "DELETE", - ...params, - }), - }; - user = { - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name CreateUser - * @summary Create user - * @request POST:api/v1/user - */ - createUser: (body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/user`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithArrayInput - * @summary Creates list of users with given input array - * @request POST:api/v1/user/createWithArray - */ - createUsersWithArrayInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `api/v1/user/createWithArray`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name CreateUsersWithListInput - * @summary Creates list of users with given input array - * @request POST:api/v1/user/createWithList - */ - createUsersWithListInput: (body: User[], params: RequestParams = {}) => - this.request({ - path: `api/v1/user/createWithList`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @tags user - * @name LoginUser - * @summary Logs user into the system - * @request GET:api/v1/user/login - */ - loginUser: ( - query: { - /** The user name for login */ - username: string; - /** The password for login in clear text */ - password: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `api/v1/user/login`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags user - * @name LogoutUser - * @summary Logs out current logged in user session - * @request GET:api/v1/user/logout - */ - logoutUser: (params: RequestParams = {}) => - this.request({ - path: `api/v1/user/logout`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:api/v1/user/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:api/v1/user/{username} - */ - updateUser: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:api/v1/user/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/user/${username}`, - method: "DELETE", - ...params, - }), - }; - username = { - /** - * No description - * - * @tags user - * @name GetUserByName - * @summary Get user by user name - * @request GET:api/v1/{username} - */ - getUserByName: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name UpdateUser - * @summary Updated user - * @request PUT:api/v1/{username} - */ - updateUser: (username: string, body: User, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "PUT", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * @description This can only be done by the logged in user. - * - * @tags user - * @name DeleteUser - * @summary Delete user - * @request DELETE:api/v1/{username} - */ - deleteUser: (username: string, params: RequestParams = {}) => - this.request({ - path: `api/v1/${username}`, - method: "DELETE", - ...params, - }), - }; -} diff --git a/tests/spec/moduleNameIndex/test.js b/tests/spec/moduleNameIndex/test.js deleted file mode 100644 index 58a3c476..00000000 --- a/tests/spec/moduleNameIndex/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--module-name-index option test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - moduleNameIndex: 2, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/noClient/expected.ts b/tests/spec/noClient/__snapshots__/basic.test.ts.snap similarity index 99% rename from tests/spec/noClient/expected.ts rename to tests/spec/noClient/__snapshots__/basic.test.ts.snap index f1052990..3a7491fc 100644 --- a/tests/spec/noClient/expected.ts +++ b/tests/spec/noClient/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --no-client 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -1906,3 +1909,5 @@ export interface UserUpdate { } export type Users = User[]; +" +`; diff --git a/tests/spec/noClient/basic.test.ts b/tests/spec/noClient/basic.test.ts new file mode 100644 index 00000000..f0b2bb52 --- /dev/null +++ b/tests/spec/noClient/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--no-client", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/noClient/schema.ts b/tests/spec/noClient/schema.ts deleted file mode 100644 index f1052990..00000000 --- a/tests/spec/noClient/schema.ts +++ /dev/null @@ -1,1908 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** A GitHub organization */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** A GitHub user */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; diff --git a/tests/spec/noClient/test.js b/tests/spec/noClient/test.js deleted file mode 100644 index 8c6da417..00000000 --- a/tests/spec/noClient/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--no-client option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/nullable-2.0/schema.ts b/tests/spec/nullable-2.0/__snapshots__/basic.test.ts.snap similarity index 87% rename from tests/spec/nullable-2.0/schema.ts rename to tests/spec/nullable-2.0/__snapshots__/basic.test.ts.snap index 0790cf12..3bbcb137 100644 --- a/tests/spec/nullable-2.0/schema.ts +++ b/tests/spec/nullable-2.0/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > nullable-2.0 refs 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -27,3 +30,5 @@ export interface TestObject { } export type OtherObject = object; +" +`; diff --git a/tests/spec/nullable-2.0/basic.test.ts b/tests/spec/nullable-2.0/basic.test.ts new file mode 100644 index 00000000..4c48503c --- /dev/null +++ b/tests/spec/nullable-2.0/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("nullable-2.0 refs", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/nullable-2.0/expected.ts b/tests/spec/nullable-2.0/expected.ts deleted file mode 100644 index 0790cf12..00000000 --- a/tests/spec/nullable-2.0/expected.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type MyObject = { - id: string; - name: string; -} | null; - -export interface TestObject { - stringMaybeUndefined?: string; - stringMaybeNullA?: string | null; - stringMaybeNullB?: string | null; - stringMaybeNullAndUndefined?: string | null; - otherObjectMaybeUndefined?: OtherObject; - otherObjectMaybeNullA?: OtherObject | null; - otherObjectMaybeNullB?: OtherObject | null; - otherObjectMaybeNullC?: OtherObject | null; - otherObjectMaybeNullD: OtherObject; -} - -export type OtherObject = object; diff --git a/tests/spec/nullable-2.0/test.js b/tests/spec/nullable-2.0/test.js deleted file mode 100644 index 89bd3f2a..00000000 --- a/tests/spec/nullable-2.0/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "nullable-2.0 refs test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/nullable-3.0/expected.ts b/tests/spec/nullable-3.0/__snapshots__/basic.test.ts.snap similarity index 87% rename from tests/spec/nullable-3.0/expected.ts rename to tests/spec/nullable-3.0/__snapshots__/basic.test.ts.snap index 2f34b79d..cd7b3be0 100644 --- a/tests/spec/nullable-3.0/expected.ts +++ b/tests/spec/nullable-3.0/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > nullable-3.0 refs 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -27,3 +30,5 @@ export interface TestObject { } export type OtherObject = object; +" +`; diff --git a/tests/spec/nullable-3.0/basic.test.ts b/tests/spec/nullable-3.0/basic.test.ts new file mode 100644 index 00000000..72a29798 --- /dev/null +++ b/tests/spec/nullable-3.0/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("nullable-3.0 refs", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/nullable-3.0/schema.ts b/tests/spec/nullable-3.0/schema.ts deleted file mode 100644 index 2f34b79d..00000000 --- a/tests/spec/nullable-3.0/schema.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type MyObject = { - id: string; - name: string; -} | null; - -export interface TestObject { - stringMaybeUndefined?: string; - stringMaybeNullA: string | null; - stringMaybeNullB: string | null; - stringMaybeNullAndUndefined?: string | null; - otherObjectMaybeUndefined?: OtherObject; - otherObjectMaybeNullA: OtherObject | null; - otherObjectMaybeNullB: OtherObject | null; - otherObjectMaybeNullC: OtherObject | null; - otherObjectMaybeNullD: OtherObject | null; -} - -export type OtherObject = object; diff --git a/tests/spec/nullable-3.0/test.js b/tests/spec/nullable-3.0/test.js deleted file mode 100644 index 542434b6..00000000 --- a/tests/spec/nullable-3.0/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "nullable-3.0 refs test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/object-types/expected.ts b/tests/spec/object-types/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/object-types/expected.ts rename to tests/spec/object-types/__snapshots__/basic.test.ts.snap index 82bb8b9f..9ad39c20 100644 --- a/tests/spec/object-types/expected.ts +++ b/tests/spec/object-types/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > object-types 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -87,3 +90,5 @@ export type NestedObjectWithRequiredId = { /** id */ id1?: number; }; +" +`; diff --git a/tests/spec/object-types/basic.test.ts b/tests/spec/object-types/basic.test.ts new file mode 100644 index 00000000..42554a9b --- /dev/null +++ b/tests/spec/object-types/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("object-types", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/object-types/schema.ts b/tests/spec/object-types/schema.ts deleted file mode 100644 index 82bb8b9f..00000000 --- a/tests/spec/object-types/schema.ts +++ /dev/null @@ -1,89 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -type UtilRequiredKeys = Omit & Required>; - -/** - * title - * description - * @example "https://ya.ru/a.png" - */ -export type AnyOfWithNullable = string | null; - -/** https://github.com/acacode/swagger-typescript-api/issues/445 */ -export interface SpecificEnum1 { - myEnum?: ["foo", "bar", "baz"]; -} - -/** https://github.com/acacode/swagger-typescript-api/issues/445 */ -export interface SpecificEnum2 { - myEnum?: ["foo", "bar", "baz"] | ["foo", "bar", "bad"]; -} - -/** - * It is a Pet title - * It is a Pet description - */ -export type Test1 = { - /** - * It is an id title - * It is an id description - */ - id: number; - /** - * It is a name title - * It is a name description - */ - name: string; - /** - * It is a tag title - * It is a tag description - * @deprecated - */ - tag: string; - /** - * It is a multiple title - * It is a multiple description - */ - multiple: string | number; -} | null; - -export interface AdditionalObjectProperties { - id?: string; - [key: string]: any; -} - -export interface AdditionalIntProperties { - id?: string; - [key: string]: any; -} - -export interface ABCOptional { - /** a */ - a?: string; - /** b */ - b?: string; - /** c */ - c?: number; -} - -export type ABCOptionalWithRequiredId = UtilRequiredKeys & { - /** id */ - id: number; -}; - -export type NestedObjectWithRequiredId = { - /** id */ - id: number; -} & { - /** id */ - id1?: number; -}; diff --git a/tests/spec/object-types/test.js b/tests/spec/object-types/test.js deleted file mode 100644 index f3dd720c..00000000 --- a/tests/spec/object-types/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "object-types test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/on-insert-path-param/schema.ts b/tests/spec/on-insert-path-param/__snapshots__/basic.test.ts.snap similarity index 92% rename from tests/spec/on-insert-path-param/schema.ts rename to tests/spec/on-insert-path-param/__snapshots__/basic.test.ts.snap index e0a7d5d0..81245bc5 100644 --- a/tests/spec/on-insert-path-param/schema.ts +++ b/tests/spec/on-insert-path-param/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > on-insert-path-param 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -13,7 +16,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -78,7 +81,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -100,7 +103,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -116,7 +119,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -180,7 +183,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -246,7 +249,7 @@ export class Api extends HttpClient this.request({ - path: `/wrong-path-params1/${encodeURIComponent(pathParam1)}/${encodeURIComponent(pathParam2)}/${encodeURIComponent(pathParam3)}/${encodeURIComponent(pathParam4)}`, + path: \`/wrong-path-params1/\${encodeURIComponent(pathParam1)}/\${encodeURIComponent(pathParam2)}/\${encodeURIComponent(pathParam3)}/\${encodeURIComponent(pathParam4)}\`, method: "DELETE", ...params, }), @@ -278,7 +281,7 @@ export class Api extends HttpClient this.request({ - path: `/checks`, + path: \`/checks\`, method: "GET", query: query, secure: true, @@ -287,3 +290,5 @@ export class Api extends HttpClient { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("on-insert-path-param", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + hooks: { + // @ts-expect-error + onInsertPathParam: (paramName) => `encodeURIComponent(${paramName})`, + }, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/on-insert-path-param/expected.ts b/tests/spec/on-insert-path-param/expected.ts deleted file mode 100644 index e0a7d5d0..00000000 --- a/tests/spec/on-insert-path-param/expected.ts +++ /dev/null @@ -1,289 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - wrongPathParams1 = { - /** - * @description DDD - * - * @tags key, delete - * @name WrongPathParams1 - * @request DELETE:/wrong-path-params1/{pathParam1}/{path_param2}/{path_param3}/:pathParam4 - */ - wrongPathParams1: ( - pathParam1: string, - pathParam2: string, - pathParam3: string, - pathParam4: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/wrong-path-params1/${encodeURIComponent(pathParam1)}/${encodeURIComponent(pathParam2)}/${encodeURIComponent(pathParam3)}/${encodeURIComponent(pathParam4)}`, - method: "DELETE", - ...params, - }), - }; - checks = { - /** - * @description

description

- * - * @tags check - * @name GetChecksCheckGet - * @summary Get Checks - * @request GET:/checks - * @secure - */ - getChecksCheckGet: ( - query?: { - /** - * Page - * @min 1 - * @default 1 - */ - page?: number; - /** - * Size - * @default 1 - */ - size?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/checks`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/on-insert-path-param/test.js b/tests/spec/on-insert-path-param/test.js deleted file mode 100644 index e8173a97..00000000 --- a/tests/spec/on-insert-path-param/test.js +++ /dev/null @@ -1,29 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "on-insert-path-param test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - hooks: { - onInsertPathParam: (paramName) => `encodeURIComponent(${paramName})`, - }, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/partialBaseTemplate/expected.ts b/tests/spec/partialBaseTemplate/expected.ts deleted file mode 100644 index eb2391ed..00000000 --- a/tests/spec/partialBaseTemplate/expected.ts +++ /dev/null @@ -1,260 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** PARTIAL TEMPLATES */ -/** - * * FOO BAR - */ -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; - multiple?: string | number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name PetsList - * @request GET:/pets - */ - petsList: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/partialBaseTemplate/schema.json b/tests/spec/partialBaseTemplate/schema.json deleted file mode 100644 index 66d6de40..00000000 --- a/tests/spec/partialBaseTemplate/schema.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.0.0", - "title": "Swagger Petstore", - "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", - "termsOfService": "http://swagger.io/terms/", - "contact": { - "name": "Swagger API Team" - }, - "license": { - "name": "MIT" - } - }, - "host": "petstore.swagger.io", - "basePath": "/api", - "schemes": ["http"], - "consumes": ["application/json"], - "produces": ["application/json"], - "paths": { - "/pets": { - "get": { - "description": "Returns all pets from the system that the user has access to", - "produces": ["application/json"], - "responses": { - "200": { - "description": "A list of pets.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Pet" - } - } - } - } - } - } - }, - "definitions": { - "Pet": { - "type": "object", - "required": ["id", "name"], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "multiple": { - "type": ["string", "number"] - } - } - } - } -} diff --git a/tests/spec/partialBaseTemplate/schema.ts b/tests/spec/partialBaseTemplate/schema.ts deleted file mode 100644 index eb2391ed..00000000 --- a/tests/spec/partialBaseTemplate/schema.ts +++ /dev/null @@ -1,260 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** PARTIAL TEMPLATES */ -/** - * * FOO BAR - */ -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; - multiple?: string | number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Swagger Petstore - * @version 1.0.0 - * @license MIT - * @termsOfService http://swagger.io/terms/ - * @baseUrl http://petstore.swagger.io/api - * @contact Swagger API Team - * - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name PetsList - * @request GET:/pets - */ - petsList: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/partialBaseTemplate/spec_templates/data-contracts.eta b/tests/spec/partialBaseTemplate/spec_templates/data-contracts.eta deleted file mode 100644 index c14940e6..00000000 --- a/tests/spec/partialBaseTemplate/spec_templates/data-contracts.eta +++ /dev/null @@ -1,27 +0,0 @@ -<% - const { modelTypes, utils } = it; - const { formatDescription } = utils; - - - const dataContractTemplates = { - enum: (contract) => { - return `enum ${contract.name} {\r\n${contract.content} \r\n }`; - }, - interface: (contract) => { - return `interface ${contract.name} {\r\n${contract.content}}`; - }, - type: (contract) => { - return `type ${contract.name} = ${contract.content}`; - }, - } -%> -/** PARTIAL TEMPLATES */ -<% modelTypes.forEach((contract) => { %> -/** -* <%~ formatDescription(contract.description) %> -* FOO BAR -*/ -export <%~ (dataContractTemplates[contract.typeIdentifier] || dataContractTemplates.type)(contract) %> - - -<% }) %> diff --git a/tests/spec/partialBaseTemplate/test.js b/tests/spec/partialBaseTemplate/test.js deleted file mode 100644 index 3c1ed685..00000000 --- a/tests/spec/partialBaseTemplate/test.js +++ /dev/null @@ -1,37 +0,0 @@ -const _ = require("lodash"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName, Exception }) => { - generateApiForTest({ - testName: "partialBaseTemplate test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - // because this script was called from package.json folder - templates: "./tests/spec/partialBaseTemplate/spec_templates", - }).then((output) => { - if ( - !_.includes( - _.get(output.files, "[0].fileContent"), - "/** PARTIAL TEMPLATES */", - ) - ) { - throw new Exception("Failed, spec templates are not applied"); - } - - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/partialDefaultTemplate/expected.ts b/tests/spec/partialDefaultTemplate/expected.ts deleted file mode 100644 index c12ca39d..00000000 --- a/tests/spec/partialDefaultTemplate/expected.ts +++ /dev/null @@ -1,253 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; - multiple?: string | number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** PARTIAL TEMPLATES */ -/** - * @title Swagger Petstore - * @version 1.0.0 - * @baseUrl http://petstore.swagger.io/api - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name PetsList - * @request GET:/pets - */ - petsList: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/partialDefaultTemplate/schema.json b/tests/spec/partialDefaultTemplate/schema.json deleted file mode 100644 index 66d6de40..00000000 --- a/tests/spec/partialDefaultTemplate/schema.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.0.0", - "title": "Swagger Petstore", - "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", - "termsOfService": "http://swagger.io/terms/", - "contact": { - "name": "Swagger API Team" - }, - "license": { - "name": "MIT" - } - }, - "host": "petstore.swagger.io", - "basePath": "/api", - "schemes": ["http"], - "consumes": ["application/json"], - "produces": ["application/json"], - "paths": { - "/pets": { - "get": { - "description": "Returns all pets from the system that the user has access to", - "produces": ["application/json"], - "responses": { - "200": { - "description": "A list of pets.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Pet" - } - } - } - } - } - } - }, - "definitions": { - "Pet": { - "type": "object", - "required": ["id", "name"], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "multiple": { - "type": ["string", "number"] - } - } - } - } -} diff --git a/tests/spec/partialDefaultTemplate/schema.ts b/tests/spec/partialDefaultTemplate/schema.ts deleted file mode 100644 index c12ca39d..00000000 --- a/tests/spec/partialDefaultTemplate/schema.ts +++ /dev/null @@ -1,253 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Pet { - /** @format int64 */ - id: number; - name: string; - tag?: string; - multiple?: string | number; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://petstore.swagger.io/api"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** PARTIAL TEMPLATES */ -/** - * @title Swagger Petstore - * @version 1.0.0 - * @baseUrl http://petstore.swagger.io/api - * A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification - */ -export class Api extends HttpClient { - pets = { - /** - * @description Returns all pets from the system that the user has access to - * - * @name PetsList - * @request GET:/pets - */ - petsList: (params: RequestParams = {}) => - this.request({ - path: `/pets`, - method: "GET", - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/partialDefaultTemplate/spec_templates/api.eta b/tests/spec/partialDefaultTemplate/spec_templates/api.eta deleted file mode 100644 index b81eea38..00000000 --- a/tests/spec/partialDefaultTemplate/spec_templates/api.eta +++ /dev/null @@ -1,47 +0,0 @@ -<% -const { apiConfig, routes, utils, config } = it; -const { info, servers } = apiConfig; -const { _, require, formatDescription } = utils; - -const server = (servers && servers[0]) || { url: "" }; - -const descriptionLines = _.compact([ - `@title ${info.title || "No title"}`, - info.version && `@version ${info.version}`, - server.url && `@baseUrl ${server.url}`, - info.description && _.replace(formatDescription(info.description), /\n/g, "\n * "), -]); - -%> -/** PARTIAL TEMPLATES */ -<% if (descriptionLines.length) { %> -/** -<% descriptionLines.forEach((descriptionLine) => { %> -* <%~ descriptionLine %> - -<% }) %> -*/ -<% } %> -export class Api<% if (!config.singleHttpClient) { %> extends HttpClient <% } %> { - -<% if(config.singleHttpClient) { %> - constructor (private http: HttpClient) {} -<% } %> - - -<% routes.outOfModule && routes.outOfModule.forEach((route) => { %> - - <%~ includeFile('./procedure-call.ejs', { route, utils, config }) %> - -<% }) %> - -<% routes.combined && routes.combined.forEach(({ routes = [], moduleName }) => { %> - <%~ moduleName %> = { - <% routes.forEach((route) => { %> - - <%~ includeFile('./procedure-call.ejs', { route, utils, config }) %> - - <% }) %> - } -<% }) %> -} diff --git a/tests/spec/partialDefaultTemplate/test.js b/tests/spec/partialDefaultTemplate/test.js deleted file mode 100644 index 33325a91..00000000 --- a/tests/spec/partialDefaultTemplate/test.js +++ /dev/null @@ -1,37 +0,0 @@ -const _ = require("lodash"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName, Exception }) => { - generateApiForTest({ - testName: "partialDefaultTemplate test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - // because this script was called from package.json folder - templates: "./tests/spec/partialDefaultTemplate/spec_templates", - }).then((output) => { - if ( - !_.includes( - _.get(output.files, "[0].fileContent"), - "/** PARTIAL TEMPLATES */", - ) - ) { - throw new Exception("Failed, spec templates are not applied"); - } - - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/patch/schema.ts b/tests/spec/patch/__snapshots__/basic.test.ts.snap similarity index 90% rename from tests/spec/patch/schema.ts rename to tests/spec/patch/__snapshots__/basic.test.ts.snap index fd49a427..95c6dc6c 100644 --- a/tests/spec/patch/schema.ts +++ b/tests/spec/patch/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --patch 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -1770,7 +1773,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1835,7 +1838,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -1857,7 +1860,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -1873,7 +1876,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -1937,7 +1940,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -2027,7 +2030,7 @@ export class Api extends HttpClient({ - path: `/some-test`, + path: \`/some-test\`, method: "GET", format: "json", ...params, @@ -2042,7 +2045,7 @@ export class Api extends HttpClient this.request({ - path: `/path-params`, + path: \`/path-params\`, method: "GET", format: "json", ...params, @@ -2057,7 +2060,7 @@ export class Api extends HttpClient this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2072,7 +2075,7 @@ export class Api extends HttpClient this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2092,7 +2095,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2107,7 +2110,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2128,7 +2131,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2148,7 +2151,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2163,7 +2166,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2176,7 +2179,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2190,7 +2193,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2206,7 +2209,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2220,7 +2223,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2235,7 +2238,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2250,7 +2253,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2264,7 +2267,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2280,7 +2283,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2293,7 +2296,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2306,7 +2309,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2319,7 +2322,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2333,7 +2336,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2347,7 +2350,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2376,7 +2379,7 @@ export class Api extends HttpClient this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2399,7 +2402,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2424,7 +2427,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2440,7 +2443,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2464,7 +2467,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2480,7 +2483,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2495,7 +2498,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2510,7 +2513,7 @@ export class Api extends HttpClient this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2525,7 +2528,7 @@ export class Api extends HttpClient this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2547,7 +2550,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2562,7 +2565,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2576,7 +2579,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2590,7 +2593,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2603,7 +2606,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2616,7 +2619,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2630,7 +2633,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2647,7 +2650,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2661,7 +2664,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2677,7 +2680,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2706,7 +2709,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2721,7 +2724,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2735,7 +2738,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2750,7 +2753,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2763,7 +2766,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2777,7 +2780,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2792,7 +2795,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2805,7 +2808,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2825,7 +2828,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2840,7 +2843,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -2855,7 +2858,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -2869,7 +2872,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -2886,7 +2889,7 @@ export class Api extends HttpClient this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -2901,7 +2904,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -2914,7 +2917,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -2928,7 +2931,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2944,7 +2947,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -2960,7 +2963,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -2973,7 +2976,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -2989,7 +2992,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -3003,7 +3006,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3017,7 +3020,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3032,7 +3035,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3045,7 +3048,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3058,7 +3061,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3072,7 +3075,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3087,7 +3090,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3107,7 +3110,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3133,7 +3136,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3148,7 +3151,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3164,7 +3167,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3178,7 +3181,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3198,7 +3201,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3214,7 +3217,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3228,7 +3231,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3253,7 +3256,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3268,7 +3271,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3291,7 +3294,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3306,7 +3309,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3320,7 +3323,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3336,7 +3339,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3356,7 +3359,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3372,7 +3375,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3387,7 +3390,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3403,7 +3406,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3417,7 +3420,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3439,7 +3442,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3454,7 +3457,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3470,7 +3473,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3486,7 +3489,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3500,7 +3503,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3516,7 +3519,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3530,7 +3533,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3544,7 +3547,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3560,7 +3563,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3575,7 +3578,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3589,7 +3592,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3605,7 +3608,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3621,7 +3624,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3635,7 +3638,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3659,7 +3662,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3674,7 +3677,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -3688,7 +3691,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -3703,7 +3706,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -3718,7 +3721,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -3732,7 +3735,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -3747,7 +3750,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -3776,7 +3779,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -3791,7 +3794,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -3815,7 +3818,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -3830,7 +3833,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3845,7 +3848,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3865,7 +3868,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3880,7 +3883,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -3896,7 +3899,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -3912,7 +3915,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -3926,7 +3929,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -3943,7 +3946,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -3963,7 +3966,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -3980,7 +3983,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -3994,7 +3997,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -4007,7 +4010,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4021,7 +4024,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4036,7 +4039,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4053,7 +4056,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4066,7 +4069,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4080,7 +4083,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4095,7 +4098,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4110,7 +4113,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4124,7 +4127,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4138,7 +4141,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4153,7 +4156,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4168,7 +4171,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4182,7 +4185,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4197,7 +4200,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4211,7 +4214,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4238,7 +4241,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4253,7 +4256,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4268,7 +4271,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4283,7 +4286,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4303,7 +4306,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4318,7 +4321,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4341,7 +4344,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4356,7 +4359,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4380,7 +4383,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4395,7 +4398,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4420,7 +4423,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4435,7 +4438,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4450,7 +4453,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4470,7 +4473,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4487,7 +4490,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4501,7 +4504,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4519,7 +4522,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4539,7 +4542,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -4555,7 +4558,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -4569,7 +4572,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -4583,7 +4586,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -4596,7 +4599,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -4619,7 +4622,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -4634,7 +4637,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -4648,7 +4651,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -4663,7 +4666,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -4676,7 +4679,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -4696,7 +4699,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4712,7 +4715,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -4727,7 +4730,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -4741,7 +4744,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -4758,7 +4761,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -4772,7 +4775,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -4786,7 +4789,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -4800,7 +4803,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -4814,7 +4817,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -4828,7 +4831,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -4842,7 +4845,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -4856,7 +4859,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -4870,7 +4873,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -4886,7 +4889,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -4900,7 +4903,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -4913,7 +4916,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -4927,7 +4930,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -4943,7 +4946,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -4957,7 +4960,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -4971,7 +4974,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -4993,7 +4996,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -5012,7 +5015,7 @@ export class Api extends HttpClient this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5036,7 +5039,7 @@ export class Api extends HttpClient this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5059,7 +5062,7 @@ export class Api extends HttpClient this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5082,7 +5085,7 @@ export class Api extends HttpClient this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5105,7 +5108,7 @@ export class Api extends HttpClient this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5121,7 +5124,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5134,7 +5137,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5148,7 +5151,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5164,7 +5167,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5179,7 +5182,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5195,7 +5198,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5209,7 +5212,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5222,7 +5225,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5235,7 +5238,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5249,7 +5252,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5263,7 +5266,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5277,7 +5280,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5292,7 +5295,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5305,7 +5308,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5319,7 +5322,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5333,7 +5336,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5349,7 +5352,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -5364,7 +5367,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -5377,7 +5380,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -5391,7 +5394,7 @@ export class Api extends HttpClient this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -5405,7 +5408,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -5419,7 +5422,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -5432,7 +5435,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -5445,7 +5448,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -5472,7 +5475,7 @@ export class Api extends HttpClient this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -5487,7 +5490,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -5501,7 +5504,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -5516,7 +5519,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -5529,7 +5532,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -5543,7 +5546,7 @@ export class Api extends HttpClient this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -5563,7 +5566,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -5578,7 +5581,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -5600,7 +5603,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -5615,7 +5618,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5628,7 +5631,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5641,7 +5644,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5654,7 +5657,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -5669,7 +5672,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5683,7 +5686,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5697,7 +5700,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5710,7 +5713,7 @@ export class Api extends HttpClient this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -5730,7 +5733,7 @@ export class Api extends HttpClient this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -5745,7 +5748,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -5759,7 +5762,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -5772,7 +5775,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -5785,7 +5788,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -5799,7 +5802,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -5818,7 +5821,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -5833,7 +5836,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -5847,7 +5850,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -5861,7 +5864,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -5874,7 +5877,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -5894,7 +5897,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -5909,7 +5912,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -5922,9 +5925,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/patch/basic.test.ts b/tests/spec/patch/basic.test.ts new file mode 100644 index 00000000..ef7bdf81 --- /dev/null +++ b/tests/spec/patch/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--patch", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + patch: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/patch/expected.ts b/tests/spec/patch/expected.ts deleted file mode 100644 index fd49a427..00000000 --- a/tests/spec/patch/expected.ts +++ /dev/null @@ -1,5930 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Actor { - avatar_url?: string; - bio?: string; - blog?: string; - collaborators?: number; - company?: string; - created_at?: string; - disk_usage?: number; - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - login?: string; - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - created_at?: string; - id?: number; - url?: string; - user?: User; -}[]; - -export interface Commit { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export interface CommitCommentBody { - body: string; - line?: string; - number?: string; - path?: string; - position?: number; - sha: string; -} - -export type Commits = { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - total?: number; - weeks?: { - a?: number; - c?: number; - d?: number; - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - actor?: Actor; - created_at?: object; - id?: number; - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - created_at?: string; - url?: string; - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - committed_at?: string; - url?: string; - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - actor?: Actor; - commit_id?: string; - created_at?: string; - event?: string; - issue?: { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - created_at?: string; - html_url?: string; - id?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - message?: string; -} - -export interface MergesSuccessful { - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - billing_email?: string; - company?: string; - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - auto_init?: boolean; - description?: string; - gitignore_template?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name: string; - private?: boolean; - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - closed_at?: string; - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - organization?: Organization; - owner?: Actor; - parent?: Repo; - private?: boolean; - pushed_at?: string; - size?: number; - source?: Repo; - ssh_url?: string; - svn_url?: string; - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface RepoCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - message?: string; - object?: { - sha?: string; - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - tag?: string; - tagger?: { - date?: string; - email?: string; - name?: string; - }; - url?: string; -} - -export interface TagBody { - message: string; - object: string; - tag: string; - tagger: { - date?: string; - email?: string; - name?: string; - }; - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - sha?: string; - tree?: Tree[]; - url?: string; -} - -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - */ -export class Api extends HttpClient { - someTest = { - /** - * No description - * - * @name SomeTestList - * @request GET:/some-test - */ - someTestList: (params: RequestParams = {}) => - this.request< - { - user: { - foo: number; - extra: { - id: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - }; - }; - }; - }; - }; - }; - }, - any - >({ - path: `/some-test`, - method: "GET", - format: "json", - ...params, - }), - }; - pathParams = { - /** - * No description - * - * @name PathParamsList - * @request GET:/path-params - */ - pathParamsList: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/path-params`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * No description - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * No description - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * No description - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * No description - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * No description - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * No description - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** @default "desc" */ - order?: "desc" | "asc"; - language?: string; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** @default "desc" */ - order?: "desc" | "asc"; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * No description - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * No description - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * No description - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * No description - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * No description - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * No description - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * No description - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - since?: string; - sha?: string; - path?: string; - author?: string; - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - path?: string; - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** @default "open" */ - state?: "open" | "closed"; - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** @default "open" */ - state?: "open" | "closed"; - head?: string; - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * No description - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * No description - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * No description - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * No description - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * No description - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * No description - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/patch/test.js b/tests/spec/patch/test.js deleted file mode 100644 index bf18b20e..00000000 --- a/tests/spec/patch/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--patch option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - patch: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/primitive-type-constructs/another-array-type/expected.ts b/tests/spec/primitive-type-constructs/another-array-type/expected.ts deleted file mode 100644 index 89bf6246..00000000 --- a/tests/spec/primitive-type-constructs/another-array-type/expected.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Type1 = Array; - -export type Type2 = Array; - -/** @format date-time */ -export type Type3 = Date; - -export type Type4 = String; - -export type Type5 = Record; diff --git a/tests/spec/primitive-type-constructs/another-array-type/schema.ts b/tests/spec/primitive-type-constructs/another-array-type/schema.ts deleted file mode 100644 index 89bf6246..00000000 --- a/tests/spec/primitive-type-constructs/another-array-type/schema.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Type1 = Array; - -export type Type2 = Array; - -/** @format date-time */ -export type Type3 = Date; - -export type Type4 = String; - -export type Type5 = Record; diff --git a/tests/spec/primitive-type-constructs/base/expected.ts b/tests/spec/primitive-type-constructs/base/expected.ts deleted file mode 100644 index cd80bb0e..00000000 --- a/tests/spec/primitive-type-constructs/base/expected.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Type1 = Date[]; - -export type Type2 = Date[]; - -/** @format date-time */ -export type Type3 = Date; - -export type Type4 = String; - -export type Type5 = Record; diff --git a/tests/spec/primitive-type-constructs/base/schema.ts b/tests/spec/primitive-type-constructs/base/schema.ts deleted file mode 100644 index cd80bb0e..00000000 --- a/tests/spec/primitive-type-constructs/base/schema.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Type1 = Date[]; - -export type Type2 = Date[]; - -/** @format date-time */ -export type Type3 = Date; - -export type Type4 = String; - -export type Type5 = Record; diff --git a/tests/spec/primitive-type-constructs/schema.json b/tests/spec/primitive-type-constructs/schema.json deleted file mode 100644 index 05afe202..00000000 --- a/tests/spec/primitive-type-constructs/schema.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "swagger": "2.0", - "info": {}, - "parameters": {}, - "responses": {}, - "paths": {}, - "definitions": { - "Type1": { - "type": "array", - "items": [ - { - "type": "string", - "format": "date-time" - } - ] - }, - "Type2": { - "items": [ - { - "type": "string", - "format": "date-time" - } - ] - }, - "Type3": { - "type": "string", - "format": "date-time" - }, - "Type4": { - "type": "string" - }, - "Type5": { - "type": "object" - } - } -} diff --git a/tests/spec/primitive-type-constructs/test.js b/tests/spec/primitive-type-constructs/test.js deleted file mode 100644 index 069a8efc..00000000 --- a/tests/spec/primitive-type-constructs/test.js +++ /dev/null @@ -1,64 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - const primitiveTypeConstructs = (constructs) => ({ - string: { - $default: "String", - "date-time": "Date", - }, - }); - const codeGenConstructs = () => { - return { - Keyword: { - Object: "Record", - }, - }; - }; - - Promise.all([ - generateApiForTest({ - testName: "--primitive-type-constructs option test (with another-type)", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./another-array-type"), - generateClient: false, - anotherArrayType: true, - primitiveTypeConstructs, - codeGenConstructs, - }), - generateApiForTest({ - testName: "--primitive-type-constructs option test (base)", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./base"), - generateClient: false, - anotherArrayType: false, - primitiveTypeConstructs, - codeGenConstructs, - }), - ]).then((...args) => { - validateGeneratedModule( - resolve(__dirname, `./another-array-type/${apiFileName}`), - ); - assertGeneratedModule( - resolve(__dirname, `./another-array-type/${apiFileName}`), - resolve(__dirname, "./another-array-type/expected.ts"), - ); - - validateGeneratedModule(resolve(__dirname, `./base/${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./base/${apiFileName}`), - resolve(__dirname, "./base/expected.ts"), - ); - }); -}); diff --git a/tests/spec/readonly/expected.ts b/tests/spec/readonly/__snapshots__/basic.test.ts.snap similarity index 82% rename from tests/spec/readonly/expected.ts rename to tests/spec/readonly/__snapshots__/basic.test.ts.snap index c0f1b4d5..dd1ee322 100644 --- a/tests/spec/readonly/expected.ts +++ b/tests/spec/readonly/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > readonly 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -16,3 +19,5 @@ export interface Pet { readonly tag?: string; readonly multiple?: string | number; } +" +`; diff --git a/tests/spec/readonly/basic.test.ts b/tests/spec/readonly/basic.test.ts new file mode 100644 index 00000000..c40e53a1 --- /dev/null +++ b/tests/spec/readonly/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("readonly", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + addReadonly: true, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/readonly/schema.ts b/tests/spec/readonly/schema.ts deleted file mode 100644 index c0f1b4d5..00000000 --- a/tests/spec/readonly/schema.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Pet { - /** @format int64 */ - readonly id: number; - readonly name: string; - readonly tag?: string; - readonly multiple?: string | number; -} diff --git a/tests/spec/readonly/test.js b/tests/spec/readonly/test.js deleted file mode 100644 index 1807c264..00000000 --- a/tests/spec/readonly/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "readonly option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - addReadonly: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/responses/schema.ts b/tests/spec/responses/__snapshots__/basic.test.ts.snap similarity index 76% rename from tests/spec/responses/schema.ts rename to tests/spec/responses/__snapshots__/basic.test.ts.snap index d8cb1e97..7a0746de 100644 --- a/tests/spec/responses/schema.ts +++ b/tests/spec/responses/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > responses 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -53,7 +56,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -118,7 +121,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -140,7 +143,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -156,7 +159,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -220,7 +223,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -272,20 +275,20 @@ export class HttpClient { export class Api extends HttpClient { key = { /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. + * @description Revoke an Authentiq ID using email & phone. If called with \`email\` and \`phone\` only, a verification code will be sent by email. Do a second call adding \`code\` to complete the revocation. * * @tags key, delete * @name KeyRevokeNosecret * @request DELETE:/key - * @response `200` `{ - \** pending or done *\ + * @response \`200\` \`{ + \\** pending or done *\\ status?: string, -}` Successfully deleted - * @response `401` `Error` Authentication error `auth-error` - * @response `404` `Error` Unknown key `unknown-key` - * @response `409` `Error` Confirm with code sent `confirm-first` - * @response `default` `Error` +}\` Successfully deleted + * @response \`401\` \`Error\` Authentication error \`auth-error\` + * @response \`404\` \`Error\` Unknown key \`unknown-key\` + * @response \`409\` \`Error\` Confirm with code sent \`confirm-first\` + * @response \`default\` \`Error\` */ keyRevokeNosecret: ( query: { @@ -305,7 +308,7 @@ export class Api extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "DELETE", query: query, format: "json", @@ -313,20 +316,20 @@ export class Api extends HttpClient this.request< @@ -338,7 +341,7 @@ export class Api extends HttpClient({ - path: `/key`, + path: \`/key\`, method: "POST", body: body, format: "json", @@ -351,14 +354,14 @@ export class Api extends HttpClient extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "DELETE", query: query, format: "json", @@ -388,17 +391,17 @@ export class Api extends HttpClient this.request< @@ -411,7 +414,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "GET", format: "json", ...params, @@ -423,14 +426,14 @@ export class Api extends HttpClient this.request({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "HEAD", ...params, }), @@ -441,13 +444,13 @@ export class Api extends HttpClient this.request< @@ -457,7 +460,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "POST", body: body, format: "json", @@ -465,19 +468,19 @@ export class Api extends HttpClient this.request< @@ -487,7 +490,7 @@ export class Api extends HttpClient({ - path: `/key/${pk}`, + path: \`/key/\${pk}\`, method: "PUT", body: body, format: "json", @@ -501,13 +504,13 @@ export class Api extends HttpClient extends HttpClient({ - path: `/login`, + path: \`/login\`, method: "POST", query: query, body: body, @@ -539,15 +542,15 @@ export class Api extends HttpClient extends HttpClient({ - path: `/scope`, + path: \`/scope\`, method: "POST", query: query, body: body, @@ -580,13 +583,13 @@ export class Api extends HttpClient this.request< @@ -596,7 +599,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "DELETE", format: "json", ...params, @@ -608,16 +611,16 @@ export class Api extends HttpClient this.request< @@ -629,7 +632,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "GET", format: "json", ...params, @@ -641,14 +644,14 @@ export class Api extends HttpClient this.request({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "HEAD", ...params, }), @@ -659,15 +662,15 @@ export class Api extends HttpClient this.request< @@ -677,7 +680,7 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "POST", type: ContentType.Json, format: "json", @@ -690,16 +693,16 @@ export class Api extends HttpClient this.request< @@ -711,9 +714,11 @@ export class Api extends HttpClient({ - path: `/scope/${job}`, + path: \`/scope/\${job}\`, method: "PUT", ...params, }), }; } +" +`; diff --git a/tests/spec/responses/basic.test.ts b/tests/spec/responses/basic.test.ts new file mode 100644 index 00000000..94072d3a --- /dev/null +++ b/tests/spec/responses/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("responses", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateResponses: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/responses/expected.ts b/tests/spec/responses/expected.ts deleted file mode 100644 index d8cb1e97..00000000 --- a/tests/spec/responses/expected.ts +++ /dev/null @@ -1,719 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** Authentiq ID in JWT format, self-signed. */ -export interface AuthentiqID { - /** device token for push messages */ - devtoken?: string; - /** UUID and public signing key */ - sub: string; -} - -/** Claim in JWT format, self- or issuer-signed. */ -export interface Claims { - email?: string; - phone?: string; - /** claim scope */ - scope: string; - /** UUID */ - sub: string; - type?: string; -} - -export interface Error { - detail?: string; - error: number; - title?: string; - /** unique uri for this error */ - type?: string; -} - -/** PushToken in JWT format, self-signed. */ -export interface PushToken { - /** audience (URI) */ - aud: string; - exp?: number; - iat?: number; - /** issuer (URI) */ - iss: string; - nbf?: number; - /** UUID and public signing key */ - sub: string; -} - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class Api extends HttpClient { - key = { - /** - * @description Revoke an Authentiq ID using email & phone. If called with `email` and `phone` only, a verification code will be sent by email. Do a second call adding `code` to complete the revocation. - * - * @tags key, delete - * @name KeyRevokeNosecret - * @request DELETE:/key - * @response `200` `{ - \** pending or done *\ - status?: string, - -}` Successfully deleted - * @response `401` `Error` Authentication error `auth-error` - * @response `404` `Error` Unknown key `unknown-key` - * @response `409` `Error` Confirm with code sent `confirm-first` - * @response `default` `Error` - */ - keyRevokeNosecret: ( - query: { - /** primary email associated to Key (ID) */ - email: string; - /** primary phone number, international representation */ - phone: string; - /** verification code sent by email */ - code?: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** pending or done */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - * @response `201` `{ - \** revoke key *\ - secret?: string, - \** registered *\ - status?: string, - -}` Successfully registered - * @response `409` `Error` Key already registered `duplicate-key` - * @response `default` `Error` - */ - keyRegister: (body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - Error - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Revoke an Identity (Key) with a revocation secret - * - * @tags key, delete - * @name KeyRevoke - * @request DELETE:/key/{PK} - * @response `200` `{ - \** done *\ - status?: string, - -}` Successful response - * @response `401` `Error` Key not found / wrong code `auth-error` - * @response `404` `Error` Unknown key `unknown-key` - * @response `default` `Error` - */ - keyRevoke: ( - pk: string, - query: { - /** revokation secret */ - secret: string; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "DELETE", - query: query, - format: "json", - ...params, - }), - - /** - * @description Get public details of an Authentiq ID. - * - * @tags key, get - * @name GetKey - * @request GET:/key/{PK} - * @response `200` `{ - \** @format date-time *\ - since?: string, - status?: string, - \** base64safe encoded public signing key *\ - sub?: string, - -}` Successfully retrieved - * @response `404` `Error` Unknown key `unknown-key` - * @response `410` `Error` Key is revoked (gone). `revoked-key` - * @response `default` `Error` - */ - getKey: (pk: string, params: RequestParams = {}) => - this.request< - { - /** @format date-time */ - since?: string; - status?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD info on Authentiq ID - * - * @tags key, head - * @name HeadKey - * @request HEAD:/key/{PK} - * @response `200` `void` Key exists - * @response `404` `Error` Unknown key `unknown-key` - * @response `410` `Error` Key is revoked `revoked-key` - * @response `default` `Error` - */ - headKey: (pk: string, params: RequestParams = {}) => - this.request({ - path: `/key/${pk}`, - method: "HEAD", - ...params, - }), - - /** - * @description update properties of an Authentiq ID. (not operational in v4; use PUT for now) v5: POST issuer-signed email & phone scopes in a self-signed JWT See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyUpdate - * @request POST:/key/{PK} - * @response `200` `{ - \** confirmed *\ - status?: string, - -}` Successfully updated - * @response `404` `Error` Unknown key `unknown-key` - * @response `default` `Error` - */ - keyUpdate: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * @description Update Authentiq ID by replacing the object. v4: `JWT(sub,email,phone)` to bind email/phone hash; v5: POST issuer-signed email & phone scopes and PUT to update registration `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, put - * @name KeyBind - * @request PUT:/key/{PK} - * @response `200` `{ - \** confirmed *\ - status?: string, - -}` Successfully updated - * @response `404` `Error` Unknown key `unknown-key` - * @response `409` `Error` Already bound to another key `duplicate-hash` - * @response `default` `Error` - */ - keyBind: (pk: string, body: AuthentiqID, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/key/${pk}`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - }; - login = { - /** - * @description push sign-in request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags login, post - * @name PushLoginRequest - * @request POST:/login - * @response `200` `{ - \** sent *\ - status?: string, - -}` Successful response - * @response `401` `Error` Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error` - * @response `default` `Error` - */ - pushLoginRequest: ( - query: { - /** URI App will connect to */ - callback: string; - }, - body: PushToken, - params: RequestParams = {}, - ) => - this.request< - { - /** sent */ - status?: string; - }, - Error - >({ - path: `/login`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - }; - scope = { - /** - * @description scope verification request See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, post - * @name SignRequest - * @request POST:/scope - * @response `201` `{ - \** 20-character ID *\ - job?: string, - \** waiting *\ - status?: string, - -}` Successful response - * @response `429` `Error` Too Many Requests on same address / number `rate-limit` - * @response `default` `Error` - */ - signRequest: ( - body: Claims, - query?: { - /** test only mode, using test issuer */ - test?: number; - }, - params: RequestParams = {}, - ) => - this.request< - { - /** 20-character ID */ - job?: string; - /** waiting */ - status?: string; - }, - Error - >({ - path: `/scope`, - method: "POST", - query: query, - body: body, - format: "json", - ...params, - }), - - /** - * @description delete a verification job - * - * @tags scope, delete - * @name SignDelete - * @request DELETE:/scope/{job} - * @response `200` `{ - \** done *\ - status?: string, - -}` Successfully deleted - * @response `404` `Error` Job not found `unknown-job` - * @response `default` `Error` - */ - signDelete: (job: string, params: RequestParams = {}) => - this.request< - { - /** done */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "DELETE", - format: "json", - ...params, - }), - - /** - * @description get the status / current content of a verification job - * - * @tags scope, get - * @name SignRetrieve - * @request GET:/scope/{job} - * @response `200` `{ - exp?: number, - field?: string, - \** base64safe encoded public signing key *\ - sub?: string, - -}` Successful response (JWT) - * @response `204` `void` Confirmed, waiting for signing - * @response `404` `Error` Job not found `unknown-job` - * @response `default` `Error` - */ - signRetrieve: (job: string, params: RequestParams = {}) => - this.request< - { - exp?: number; - field?: string; - /** base64safe encoded public signing key */ - sub?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * @description HEAD to get the status of a verification job - * - * @tags scope, head - * @name SignRetrieveHead - * @request HEAD:/scope/{job} - * @response `200` `void` Confirmed and signed - * @response `204` `void` Confirmed, waiting for signing - * @response `404` `Error` Job not found `unknown-job` - * @response `default` `Error` - */ - signRetrieveHead: (job: string, params: RequestParams = {}) => - this.request({ - path: `/scope/${job}`, - method: "HEAD", - ...params, - }), - - /** - * @description this is a scope confirmation - * - * @tags scope, post - * @name SignConfirm - * @request POST:/scope/{job} - * @response `202` `{ - \** confirmed *\ - status?: string, - -}` Successfully confirmed - * @response `401` `Error` Confirmation error `auth-error` - * @response `404` `Error` Job not found `unknown-job` - * @response `405` `Error` JWT POSTed to scope `not-supported` - * @response `default` `Error` - */ - signConfirm: (job: string, params: RequestParams = {}) => - this.request< - { - /** confirmed */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "POST", - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * @description authority updates a JWT with its signature See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags scope, put - * @name SignUpdate - * @request PUT:/scope/{job} - * @response `200` `{ - \** result is JWT or JSON?? *\ - jwt?: string, - \** ready *\ - status?: string, - -}` Successfully updated - * @response `404` `Error` Job not found `unknown-job` - * @response `409` `Error` Job not confirmed yet `confirm-first` - * @response `default` `Error` - */ - signUpdate: (job: string, params: RequestParams = {}) => - this.request< - { - /** result is JWT or JSON?? */ - jwt?: string; - /** ready */ - status?: string; - }, - Error - >({ - path: `/scope/${job}`, - method: "PUT", - ...params, - }), - }; -} diff --git a/tests/spec/responses/test.js b/tests/spec/responses/test.js deleted file mode 100644 index 8d4a7416..00000000 --- a/tests/spec/responses/test.js +++ /dev/null @@ -1,30 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateResponses: true, - }) - .then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }) - .catch((e) => { - console.error("responses option test failed."); - throw e; - }); -}); diff --git a/tests/spec/routeTypes/expected.ts b/tests/spec/routeTypes/__snapshots__/basic.test.ts.snap similarity index 99% rename from tests/spec/routeTypes/expected.ts rename to tests/spec/routeTypes/__snapshots__/basic.test.ts.snap index 0f3e1848..d77a8060 100644 --- a/tests/spec/routeTypes/expected.ts +++ b/tests/spec/routeTypes/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --route-types 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -7159,3 +7162,5 @@ export namespace Users { export type ResponseBody = any; } } +" +`; diff --git a/tests/spec/routeTypes/basic.test.ts b/tests/spec/routeTypes/basic.test.ts new file mode 100644 index 00000000..8db09064 --- /dev/null +++ b/tests/spec/routeTypes/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--route-types", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: false, + generateRouteTypes: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/routeTypes/schema.ts b/tests/spec/routeTypes/schema.ts deleted file mode 100644 index 0f3e1848..00000000 --- a/tests/spec/routeTypes/schema.ts +++ /dev/null @@ -1,7161 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** A user or organization */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** A GitHub organization */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** A GitHub user */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -export namespace SomeTest { - /** - * @description This type should test bug https://github.com/acacode/swagger-typescript-api/issues/156 NOTE: all properties should be required - * @name SomeTestList - * @request GET:/some-test - */ - export namespace SomeTestList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = { - user: { - foo: number; - extra: { - id: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - }; - }; - }; - }; - }; - }; - }; - } -} - -export namespace PathParams { - /** - * @description Lists all the emojis available to use on GitHub. - * @name PathParamsList - * @request GET:/path-params - */ - export namespace PathParamsList { - export type RequestParams = { - /** - * ID of pet to return - * @format int64 - */ - petId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - /** Tik Token */ - "X-Auth": string; - }; - export type ResponseBody = Emojis; - } -} - -export namespace Events { - /** - * @description List public events. - * @name EventsList - * @request GET:/events - */ - export namespace EventsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Events; - } -} - -export namespace Feeds { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * @name FeedsList - * @request GET:/feeds - */ - export namespace FeedsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Feeds; - } -} - -export namespace Gists { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * @name GistsList - * @request GET:/gists - */ - export namespace GistsList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gists; - } - /** - * @description Create a gist. - * @name GistsCreate - * @request POST:/gists - */ - export namespace GistsCreate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = PostGist; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gist; - } - /** - * @description List all public gists. - * @name PublicList - * @request GET:/gists/public - */ - export namespace PublicList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gists; - } - /** - * @description List the authenticated user's starred gists. - * @name StarredList - * @request GET:/gists/starred - */ - export namespace StarredList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gists; - } - /** - * @description Delete a gist. - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - export namespace GistsDelete { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single gist. - * @name GistsDetail - * @request GET:/gists/{id} - */ - export namespace GistsDetail { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gist; - } - /** - * @description Edit a gist. - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - export namespace GistsPartialUpdate { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = PatchGist; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gist; - } - /** - * @description List comments on a gist. - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - export namespace CommentsDetail { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Comments; - } - /** - * @description Create a commen - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - export namespace CommentsCreate { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = CommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Comment; - } - /** - * @description Delete a comment. - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - export namespace CommentsDelete { - export type RequestParams = { - /** Id of gist. */ - id: number; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single comment. - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - export namespace CommentsDetail2 { - export type RequestParams = { - /** Id of gist. */ - id: number; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Comment; - } - /** - * @description Edit a comment. - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - export namespace CommentsPartialUpdate { - export type RequestParams = { - /** Id of gist. */ - id: number; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = Comment; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Comment; - } - /** - * @description Fork a gist. - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - export namespace ForksCreate { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Unstar a gist. - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - export namespace StarDelete { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if a gist is starred. - * @name StarDetail - * @request GET:/gists/{id}/star - */ - export namespace StarDetail { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Star a gist. - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - export namespace StarUpdate { - export type RequestParams = { - /** Id of gist. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } -} - -export namespace Gitignore { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * @name TemplatesList - * @request GET:/gitignore/templates - */ - export namespace TemplatesList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description Get a single template. - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - export namespace TemplatesDetail { - export type RequestParams = { - language: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = GitignoreLang; - } -} - -export namespace Issues { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * @name IssuesList - * @request GET:/issues - */ - export namespace IssuesList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issues; - } -} - -export namespace Legacy { - /** - * @description Find issues by state and keyword. - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - export namespace IssuesSearchDetail { - export type RequestParams = { - /** The search term. */ - keyword: string; - /** Indicates the state of the issues to return. Can be either open or closed. */ - state: "open" | "closed"; - owner: string; - repository: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchIssuesByKeyword; - } - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - export namespace ReposSearchDetail { - export type RequestParams = { - /** The search term */ - keyword: string; - }; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchRepositoriesByKeyword; - } - /** - * @description This API call is added for compatibility reasons only. - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - export namespace UserEmailDetail { - export type RequestParams = { - /** The email address */ - email: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchUserByEmail; - } - /** - * @description Find users by keyword. - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - export namespace UserSearchDetail { - export type RequestParams = { - /** The search term */ - keyword: string; - }; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchUsersByKeyword; - } -} - -export namespace Markdown { - /** - * @description Render an arbitrary Markdown document - * @name MarkdownCreate - * @request POST:/markdown - */ - export namespace MarkdownCreate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = Markdown; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Render a Markdown document in raw mode - * @name PostMarkdown - * @request POST:/markdown/raw - */ - export namespace PostMarkdown { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } -} - -export namespace Meta { - /** - * @description This gives some information about GitHub.com, the service. - * @name MetaList - * @request GET:/meta - */ - export namespace MetaList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Meta; - } -} - -export namespace Networks { - /** - * @description List public events for a network of repositories. - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - export namespace EventsDetail { - export type RequestParams = { - /** Name of the owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Events; - } -} - -export namespace Notifications { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * @name NotificationsList - * @request GET:/notifications - */ - export namespace NotificationsList { - export type RequestParams = {}; - export type RequestQuery = { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Notifications; - } - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * @name NotificationsUpdate - * @request PUT:/notifications - */ - export namespace NotificationsUpdate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = NotificationMarkRead; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description View a single thread. - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - export namespace ThreadsDetail { - export type RequestParams = { - /** Id of thread. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Notifications; - } - /** - * @description Mark a thread as read - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - export namespace ThreadsPartialUpdate { - export type RequestParams = { - /** Id of thread. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Delete a Thread Subscription. - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - export namespace ThreadsSubscriptionDelete { - export type RequestParams = { - /** Id of thread. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a Thread Subscription. - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - export namespace ThreadsSubscriptionDetail { - export type RequestParams = { - /** Id of thread. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Subscription; - } - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - export namespace ThreadsSubscriptionUpdate { - export type RequestParams = { - /** Id of thread. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = PutSubscription; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Subscription; - } -} - -export namespace Orgs { - /** - * @description Get an Organization. - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - export namespace OrgsDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Organization; - } - /** - * @description Edit an Organization. - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - export namespace OrgsPartialUpdate { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = PatchOrg; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Organization; - } - /** - * @description List public events for an organization. - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - export namespace EventsDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Events; - } - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - export namespace IssuesDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issues; - } - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - export namespace MembersDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - export namespace MembersDelete { - export type RequestParams = { - /** Name of organisation. */ - org: string; - /** Name of the user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - export namespace MembersDetail2 { - export type RequestParams = { - /** Name of organisation. */ - org: string; - /** Name of the user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - export namespace PublicMembersDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Conceal a user's membership. - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - export namespace PublicMembersDelete { - export type RequestParams = { - /** Name of organisation. */ - org: string; - /** Name of the user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check public membership. - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - export namespace PublicMembersDetail2 { - export type RequestParams = { - /** Name of organisation. */ - org: string; - /** Name of the user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Publicize a user's membership. - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - export namespace PublicMembersUpdate { - export type RequestParams = { - /** Name of organisation. */ - org: string; - /** Name of the user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List repositories for the specified org. - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - export namespace ReposDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - export namespace ReposCreate { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = PostRepo; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description List teams. - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - export namespace TeamsDetail { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Teams; - } - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - export namespace TeamsCreate { - export type RequestParams = { - /** Name of organisation. */ - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = OrgTeamsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Team; - } -} - -export namespace RateLimit { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * @name RateLimitList - * @request GET:/rate_limit - */ - export namespace RateLimitList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RateLimit; - } -} - -export namespace Repos { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - export namespace ReposDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get repository. - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - export namespace ReposDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repo; - } - /** - * @description Edit repository. - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - export namespace ReposPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = RepoEdit; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repo; - } - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - export namespace AssigneesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Assignees; - } - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - export namespace AssigneesDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Login of the assignee. */ - assignee: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get list of branches - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - export namespace BranchesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Branches; - } - /** - * @description Get Branch - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - export namespace BranchesDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Name of the branch. */ - branch: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Branch; - } - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - export namespace CollaboratorsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Remove collaborator. - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - export namespace CollaboratorsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Login of the user. */ - user: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if user is a collaborator - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - export namespace CollaboratorsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Login of the user. */ - user: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Add collaborator. - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - export namespace CollaboratorsUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Login of the user. */ - user: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - export namespace CommentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RepoComments; - } - /** - * @description Delete a commit comment - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - export namespace CommentsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single commit comment. - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - export namespace CommentsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CommitComment; - } - /** - * @description Update a commit comment. - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - export namespace CommentsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = CommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CommitComment; - } - /** - * @description List commits on a repository. - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - export namespace CommitsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Commits; - } - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - export namespace CommitsStatusDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RefStatus; - } - /** - * @description Get a single commit. - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - export namespace CommitsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** SHA-1 code of the commit. */ - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Commit; - } - /** - * @description List comments for a single commitList comments for a single commit. - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - export namespace CommitsCommentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** SHA-1 code of the commit. */ - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RepoComments; - } - /** - * @description Create a commit comment. - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - export namespace CommitsCommentsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** SHA-1 code of the commit. */ - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = CommitCommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CommitComment; - } - /** - * @description Compare two commits - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - export namespace CompareDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - baseId: string; - headId: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CompareCommits; - } - /** - * @description Delete a file. This method deletes a file in a repository. - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - export namespace ContentsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - path: string; - }; - export type RequestQuery = {}; - export type RequestBody = DeleteFileBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = DeleteFile; - } - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - export namespace ContentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - path: string; - }; - export type RequestQuery = { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = ContentsPath; - } - /** - * @description Create a file. - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - export namespace ContentsUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - path: string; - }; - export type RequestQuery = {}; - export type RequestBody = CreateFileBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CreateFile; - } - /** - * @description Get list of contributors. - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - export namespace ContributorsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Users with pull access can view deployments for a repository - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - export namespace DeploymentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RepoDeployments; - } - /** - * @description Users with push access can create a deployment for a given ref - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - export namespace DeploymentsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = Deployment; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = DeploymentResp; - } - /** - * @description Users with pull access can view deployment statuses for a deployment - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - export namespace DeploymentsStatusesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** The Deployment ID to list the statuses from. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = DeploymentStatuses; - } - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - export namespace DeploymentsStatusesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** The Deployment ID to list the statuses from. */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = DeploymentStatusesCreate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Deprecated. List downloads for a repository. - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - export namespace DownloadsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Downloads; - } - /** - * @description Deprecated. Delete a download. - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - export namespace DownloadsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of download. */ - downloadId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Deprecated. Get a single download. - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - export namespace DownloadsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of download. */ - downloadId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Download; - } - /** - * @description Get list of repository events. - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - export namespace EventsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Events; - } - /** - * @description List forks. - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - export namespace ForksDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Forks; - } - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - export namespace ForksCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = ForkBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repo; - } - /** - * @description Create a Blob. - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - export namespace GitBlobsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = Blob; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Blobs; - } - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - export namespace GitBlobsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** SHA-1 code. */ - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Blob; - } - /** - * @description Create a Commit. - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - export namespace GitCommitsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = RepoCommitBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = GitCommit; - } - /** - * @description Get a Commit. - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - export namespace GitCommitsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** SHA-1 code. */ - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = RepoCommit; - } - /** - * @description Get all References - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - export namespace GitRefsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Refs; - } - /** - * @description Create a Reference - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - export namespace GitRefsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = RefsBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = HeadBranch; - } - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - export namespace GitRefsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a Reference - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - export namespace GitRefsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = HeadBranch; - } - /** - * @description Update a Reference - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - export namespace GitRefsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = GitRefPatch; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = HeadBranch; - } - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - export namespace GitTagsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = TagBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Tag; - } - /** - * @description Get a Tag. - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - export namespace GitTagsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - shaCode: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Tag; - } - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - export namespace GitTreesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = Tree; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Trees; - } - /** - * @description Get a Tree. - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - export namespace GitTreesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Tree SHA. */ - shaCode: string; - }; - export type RequestQuery = { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Tree; - } - /** - * @description Get list of hooks. - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - export namespace HooksDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Hook; - } - /** - * @description Create a hook. - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - export namespace HooksCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = HookBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Hook; - } - /** - * @description Delete a hook. - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - export namespace HooksDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of hook. */ - hookId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get single hook. - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - export namespace HooksDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of hook. */ - hookId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Hook; - } - /** - * @description Edit a hook. - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - export namespace HooksPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of hook. */ - hookId: number; - }; - export type RequestQuery = {}; - export type RequestBody = HookBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Hook; - } - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - export namespace HooksTestsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of hook. */ - hookId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List issues for a repository. - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - export namespace IssuesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issues; - } - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - export namespace IssuesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = Issue; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issue; - } - /** - * @description List comments in a repository. - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - export namespace IssuesCommentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComments; - } - /** - * @description Delete a comment. - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - export namespace IssuesCommentsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** ID of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single comment. - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - export namespace IssuesCommentsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** ID of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComment; - } - /** - * @description Edit a comment. - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - export namespace IssuesCommentsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** ID of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = CommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComment; - } - /** - * @description List issue events for a repository. - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - export namespace IssuesEventsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssueEvents; - } - /** - * @description Get a single event. - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - export namespace IssuesEventsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of the event. */ - eventId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssueEvent; - } - /** - * @description Get a single issue - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - export namespace IssuesDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issue; - } - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - export namespace IssuesPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = Issue; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issue; - } - /** - * @description List comments on an issue. - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - export namespace IssuesCommentsDetail3 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComments; - } - /** - * @description Create a comment. - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - export namespace IssuesCommentsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = CommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComment; - } - /** - * @description List events for an issue. - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - export namespace IssuesEventsDetail3 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssueEvents; - } - /** - * @description Remove all labels from an issue. - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - export namespace IssuesLabelsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List labels on an issue. - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - export namespace IssuesLabelsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Labels; - } - /** - * @description Add labels to an issue. - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - export namespace IssuesLabelsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = EmailsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Label; - } - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - export namespace IssuesLabelsUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = EmailsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Label; - } - /** - * @description Remove a label from an issue. - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - export namespace IssuesLabelsDelete2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of issue. */ - number: number; - /** Name of the label. */ - name: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get list of keys. - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - export namespace KeysDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Keys; - } - /** - * @description Create a key. - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - export namespace KeysCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = UserKeysPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = UserKeysKeyId; - } - /** - * @description Delete a key. - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - export namespace KeysDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of key. */ - keyId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a key - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - export namespace KeysDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of key. */ - keyId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = UserKeysKeyId; - } - /** - * @description List all labels for this repository. - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - export namespace LabelsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Labels; - } - /** - * @description Create a label. - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - export namespace LabelsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = EmailsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Label; - } - /** - * @description Delete a label. - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - export namespace LabelsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Name of the label. */ - name: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single label. - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - export namespace LabelsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Name of the label. */ - name: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Label; - } - /** - * @description Update a label. - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - export namespace LabelsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Name of the label. */ - name: string; - }; - export type RequestQuery = {}; - export type RequestBody = EmailsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Label; - } - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - export namespace LanguagesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Languages; - } - /** - * @description Perform a merge. - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - export namespace MergesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = MergesBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = MergesSuccessful; - } - /** - * @description List milestones for a repository. - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - export namespace MilestonesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Milestone; - } - /** - * @description Create a milestone. - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - export namespace MilestonesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = MilestoneUpdate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Milestone; - } - /** - * @description Delete a milestone. - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - export namespace MilestonesDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of milestone. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single milestone. - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - export namespace MilestonesDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of milestone. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Milestone; - } - /** - * @description Update a milestone. - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - export namespace MilestonesPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of milestone. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = MilestoneUpdate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Milestone; - } - /** - * @description Get labels for every issue in a milestone. - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - export namespace MilestonesLabelsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Number of milestone. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Labels; - } - /** - * @description List your notifications in a repository List all notifications for the current user. - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - export namespace NotificationsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Notifications; - } - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - export namespace NotificationsUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = NotificationMarkRead; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List pull requests. - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - export namespace PullsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Pulls; - } - /** - * @description Create a pull request. - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - export namespace PullsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = PullsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Pulls; - } - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - export namespace PullsCommentsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = IssuesComments; - } - /** - * @description Delete a comment. - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - export namespace PullsCommentsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single comment. - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - export namespace PullsCommentsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = PullsComment; - } - /** - * @description Edit a comment. - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - export namespace PullsCommentsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of comment. */ - commentId: number; - }; - export type RequestQuery = {}; - export type RequestBody = CommentBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = PullsComment; - } - /** - * @description Get a single pull request. - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - export namespace PullsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = PullRequest; - } - /** - * @description Update a pull request. - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - export namespace PullsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = PullUpdate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repo; - } - /** - * @description List comments on a pull request. - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - export namespace PullsCommentsDetail3 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = PullsComment; - } - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - export namespace PullsCommentsCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = PullsCommentPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = PullsComment; - } - /** - * @description List commits on a pull request. - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - export namespace PullsCommitsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Commits; - } - /** - * @description List pull requests files. - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - export namespace PullsFilesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Pulls; - } - /** - * @description Get if a pull request has been merged. - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - export namespace PullsMergeDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Merge a pull request (Merge Button's) - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - export namespace PullsMergeUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Id of pull. */ - number: number; - }; - export type RequestQuery = {}; - export type RequestBody = MergePullBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Merge; - } - /** - * @description Get the README. This method returns the preferred README for a repository. - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - export namespace ReadmeDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = ContentsPath; - } - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - export namespace ReleasesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Releases; - } - /** - * @description Create a release Users with push access to the repository can create a release. - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - export namespace ReleasesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = ReleaseCreate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Release; - } - /** - * @description Delete a release asset - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - export namespace ReleasesAssetsDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single release asset - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - export namespace ReleasesAssetsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Asset; - } - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - export namespace ReleasesAssetsPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = AssetPatch; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Asset; - } - /** - * @description Users with push access to the repository can delete a release. - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - export namespace ReleasesDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single release - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - export namespace ReleasesDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Release; - } - /** - * @description Users with push access to the repository can edit a release - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - export namespace ReleasesPartialUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = ReleaseCreate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Release; - } - /** - * @description List assets for a release - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - export namespace ReleasesAssetsDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - id: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Assets; - } - /** - * @description List Stargazers. - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - export namespace StargazersDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - export namespace StatsCodeFrequencyDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CodeFrequencyStats; - } - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - export namespace StatsCommitActivityDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CommitActivityStats; - } - /** - * @description Get contributors list with additions, deletions, and commit counts. - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - export namespace StatsContributorsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = ContributorsStats; - } - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - export namespace StatsParticipationDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = ParticipationStats; - } - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - export namespace StatsPunchCardDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = CodeFrequencyStats; - } - /** - * @description List Statuses for a specific Ref. - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - export namespace StatusesDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Ref to list the statuses from. It can be a SHA, a branch name, or a tag name. */ - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Ref; - } - /** - * @description Create a Status. - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - export namespace StatusesCreate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - /** Ref to list the statuses from. It can be a SHA, a branch name, or a tag name. */ - ref: string; - }; - export type RequestQuery = {}; - export type RequestBody = HeadBranch; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Ref; - } - /** - * @description List watchers. - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - export namespace SubscribersDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Delete a Repository Subscription. - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - export namespace SubscriptionDelete { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a Repository Subscription. - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - export namespace SubscriptionDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Subscription; - } - /** - * @description Set a Repository Subscription - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - export namespace SubscriptionUpdate { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = SubscriptionBody; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Subscription; - } - /** - * @description Get list of tags. - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - export namespace TagsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Tags; - } - /** - * @description Get list of teams - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - export namespace TeamsDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Teams; - } - /** - * @description List Stargazers. New implementation. - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - export namespace WatchersDetail { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - export namespace ReposDetail2 { - export type RequestParams = { - /** Name of repository owner. */ - owner: string; - /** Name of repository. */ - repo: string; - archiveFormat: "tarball" | "zipball"; - /** Valid Git reference, defaults to 'master'. */ - path: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } -} - -export namespace Repositories { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * @name RepositoriesList - * @request GET:/repositories - */ - export namespace RepositoriesList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } -} - -export namespace Search { - /** - * @description Search code. - * @name CodeList - * @request GET:/search/code - */ - export namespace CodeList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchCode; - } - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * @name IssuesList - * @request GET:/search/issues - */ - export namespace IssuesList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchIssues; - } - /** - * @description Search repositories. - * @name RepositoriesList - * @request GET:/search/repositories - */ - export namespace RepositoriesList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchRepositories; - } - /** - * @description Search users. - * @name UsersList - * @request GET:/search/users - */ - export namespace UsersList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = SearchUsers; - } -} - -export namespace Teams { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - export namespace TeamsDelete { - export type RequestParams = { - /** Id of team. */ - teamId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get team. - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - export namespace TeamsDetail { - export type RequestParams = { - /** Id of team. */ - teamId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Team; - } - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - export namespace TeamsPartialUpdate { - export type RequestParams = { - /** Id of team. */ - teamId: number; - }; - export type RequestQuery = {}; - export type RequestBody = EditTeam; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Team; - } - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - export namespace MembersDetail { - export type RequestParams = { - /** Id of team. */ - teamId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - export namespace MembersDelete { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - export namespace MembersDetail2 { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - export namespace MembersUpdate { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - export namespace MembershipsDelete { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - export namespace MembershipsDetail { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = TeamMembership; - } - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - export namespace MembershipsUpdate { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a member. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = TeamMembership; - } - /** - * @description List team repos - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - export namespace ReposDetail { - export type RequestParams = { - /** Id of team. */ - teamId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = TeamRepos; - } - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - export namespace ReposDelete { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a repository owner. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if a team manages a repository - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - export namespace ReposDetail2 { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a repository owner. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - export namespace ReposUpdate { - export type RequestParams = { - /** Id of team. */ - teamId: number; - /** Name of a organization. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } -} - -export namespace User { - /** - * @description Get the authenticated user. - * @name UserList - * @request GET:/user - */ - export namespace UserList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = User; - } - /** - * @description Update the authenticated user. - * @name UserPartialUpdate - * @request PATCH:/user - */ - export namespace UserPartialUpdate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = UserUpdate; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = User; - } - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * @name EmailsDelete - * @request DELETE:/user/emails - */ - export namespace EmailsDelete { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = UserEmails; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * @name EmailsList - * @request GET:/user/emails - */ - export namespace EmailsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = UserEmails; - } - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * @name EmailsCreate - * @request POST:/user/emails - */ - export namespace EmailsCreate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = EmailsPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description List the authenticated user's followers - * @name FollowersList - * @request GET:/user/followers - */ - export namespace FollowersList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description List who the authenticated user is following. - * @name FollowingList - * @request GET:/user/following - */ - export namespace FollowingList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - export namespace FollowingDelete { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if you are following a user. - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - export namespace FollowingDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - export namespace FollowingUpdate { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * @name IssuesList - * @request GET:/user/issues - */ - export namespace IssuesList { - export type RequestParams = {}; - export type RequestQuery = { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Issues; - } - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * @name KeysList - * @request GET:/user/keys - */ - export namespace KeysList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description Create a public key. - * @name KeysCreate - * @request POST:/user/keys - */ - export namespace KeysCreate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = UserKeysPost; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = UserKeysKeyId; - } - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - export namespace KeysDelete { - export type RequestParams = { - /** ID of key. */ - keyId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Get a single public key. - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - export namespace KeysDetail { - export type RequestParams = { - /** ID of key. */ - keyId: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = UserKeysKeyId; - } - /** - * @description List public and private organizations for the authenticated user. - * @name OrgsList - * @request GET:/user/orgs - */ - export namespace OrgsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * @name ReposList - * @request GET:/user/repos - */ - export namespace ReposList { - export type RequestParams = {}; - export type RequestQuery = { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * @name ReposCreate - * @request POST:/user/repos - */ - export namespace ReposCreate { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = PostRepo; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description List repositories being starred by the authenticated user. - * @name StarredList - * @request GET:/user/starred - */ - export namespace StarredList { - export type RequestParams = {}; - export type RequestQuery = { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description Unstar a repository - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - export namespace StarredDelete { - export type RequestParams = { - /** Name of a repository owner. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if you are starring a repository. - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - export namespace StarredDetail { - export type RequestParams = { - /** Name of a repository owner. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Star a repository. - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - export namespace StarredUpdate { - export type RequestParams = { - /** Name of a repository owner. */ - owner: string; - /** Name of a repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List repositories being watched by the authenticated user. - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - export namespace SubscriptionsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description Stop watching a repository - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - export namespace SubscriptionsDelete { - export type RequestParams = { - /** Name of the owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Check if you are watching a repository. - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - export namespace SubscriptionsDetail { - export type RequestParams = { - /** Name of the owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description Watch a repository. - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - export namespace SubscriptionsUpdate { - export type RequestParams = { - /** Name of the owner. */ - owner: string; - /** Name of repository. */ - repo: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * @name TeamsList - * @request GET:/user/teams - */ - export namespace TeamsList { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = TeamsList; - } -} - -export namespace Users { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * @name UsersList - * @request GET:/users - */ - export namespace UsersList { - export type RequestParams = {}; - export type RequestQuery = { - /** The integer ID of the last user that you've seen. */ - since?: number; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Get a single user. - * @name UsersDetail - * @request GET:/users/{username} - */ - export namespace UsersDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = User; - } - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * @name EventsDetail - * @request GET:/users/{username}/events - */ - export namespace EventsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - export namespace EventsOrgsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - org: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description List a user's followers - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - export namespace FollowersDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Users; - } - /** - * @description Check if one user follows another. - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - export namespace FollowingDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - /** Name of user. */ - targetUser: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = void; - } - /** - * @description List a users gists. - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - export namespace GistsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gists; - } - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - export namespace KeysDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description List all public organizations for a user. - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - export namespace OrgsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Gitignore; - } - /** - * @description These are events that you'll only see public events. - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - export namespace ReceivedEventsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description List public events that a user has received - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - export namespace ReceivedEventsPublicDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description List public repositories for the specified user. - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - export namespace ReposDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = Repos; - } - /** - * @description List repositories being starred by a user. - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - export namespace StarredDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } - /** - * @description List repositories being watched by a user. - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - export namespace SubscriptionsDetail { - export type RequestParams = { - /** Name of user. */ - username: string; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = { - /** Is used to set specified media type. */ - Accept?: string; - }; - export type ResponseBody = any; - } -} diff --git a/tests/spec/routeTypes/test.js b/tests/spec/routeTypes/test.js deleted file mode 100644 index 2cd01b0b..00000000 --- a/tests/spec/routeTypes/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--route-types option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateRouteTypes: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/singleHttpClient/schema.ts b/tests/spec/singleHttpClient/__snapshots__/basic.test.ts.snap similarity index 91% rename from tests/spec/singleHttpClient/schema.ts rename to tests/spec/singleHttpClient/__snapshots__/basic.test.ts.snap index 50362b5e..d8ae13d8 100644 --- a/tests/spec/singleHttpClient/schema.ts +++ b/tests/spec/singleHttpClient/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --single-http-client 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -13,7 +16,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -78,7 +81,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -100,7 +103,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -116,7 +119,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -180,7 +183,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -238,7 +241,7 @@ export class Api { key = { /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples + * @description Register a new ID \`JWT(sub, devtoken)\` v5: \`JWT(sub, pk, devtoken, ...)\` See: https://github.com/skion/authentiq/wiki/JWT-Examples * * @tags key, post * @name KeyRegister @@ -254,7 +257,7 @@ export class Api { }, any >({ - path: `/key`, + path: \`/key\`, method: "POST", body: body, format: "json", @@ -262,3 +265,5 @@ export class Api { }), }; } +" +`; diff --git a/tests/spec/singleHttpClient/basic.test.ts b/tests/spec/singleHttpClient/basic.test.ts new file mode 100644 index 00000000..e45e3070 --- /dev/null +++ b/tests/spec/singleHttpClient/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--single-http-client", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + singleHttpClient: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/singleHttpClient/expected.ts b/tests/spec/singleHttpClient/expected.ts deleted file mode 100644 index 50362b5e..00000000 --- a/tests/spec/singleHttpClient/expected.ts +++ /dev/null @@ -1,264 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://6-dot-authentiqio.appspot.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title Authentiq - * @version 6 - * @license Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html) - * @termsOfService http://authentiq.com/terms/ - * @baseUrl https://6-dot-authentiqio.appspot.com - * @contact Authentiq team (http://authentiq.io/support) - * - * Strong authentication, without the passwords. - */ -export class Api { - http: HttpClient; - - constructor(http: HttpClient) { - this.http = http; - } - - key = { - /** - * @description Register a new ID `JWT(sub, devtoken)` v5: `JWT(sub, pk, devtoken, ...)` See: https://github.com/skion/authentiq/wiki/JWT-Examples - * - * @tags key, post - * @name KeyRegister - * @request POST:/key - */ - keyRegister: (body: any, params: RequestParams = {}) => - this.http.request< - { - /** revoke key */ - secret?: string; - /** registered */ - status?: string; - }, - any - >({ - path: `/key`, - method: "POST", - body: body, - format: "json", - ...params, - }), - }; -} diff --git a/tests/spec/singleHttpClient/test.js b/tests/spec/singleHttpClient/test.js deleted file mode 100644 index 42f71165..00000000 --- a/tests/spec/singleHttpClient/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--single-http-client option test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - singleHttpClient: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/sortTypes/expected.ts b/tests/spec/sortTypes-false/__snapshots__/basic.test.ts.snap similarity index 90% rename from tests/spec/sortTypes/expected.ts rename to tests/spec/sortTypes-false/__snapshots__/basic.test.ts.snap index 4587ef32..00daa650 100644 --- a/tests/spec/sortTypes/expected.ts +++ b/tests/spec/sortTypes-false/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --sort-types=false 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -10,20 +13,19 @@ */ export interface Actor { - avatar_url?: string; - bio?: string; + created_at?: string; + gravatar_id?: string; + email?: string; blog?: string; collaborators?: number; - company?: string; - created_at?: string; disk_usage?: number; - email?: string; followers?: number; + avatar_url?: string; followers_url?: string; following?: number; following_url?: string; + bio?: string; gists_url?: string; - gravatar_id?: string; hireable?: boolean; html_url?: string; id?: number; @@ -32,6 +34,7 @@ export interface Actor { name?: string; organizations_url?: string; owned_private_repos?: number; + company?: string; plan?: { collaborators?: number; name?: string; @@ -1265,41 +1268,41 @@ export interface PutSubscription { export interface RateLimit { rate?: { - limit?: number; remaining?: number; + limit?: number; reset?: number; }; } export type Ref = { + state?: string; + target_url?: string; + updated_at?: string; created_at?: string; creator?: { - avatar_url?: string; - gravatar_id?: string; id?: number; login?: string; + avatar_url?: string; + gravatar_id?: string; url?: string; }; description?: string; id?: number; - state?: string; - target_url?: string; - updated_at?: string; url?: string; }[]; export type RefStatus = { + sha?: string; + state?: string; commit_url?: string; name?: string; repository_url?: string; - sha?: string; - state?: string; statuses?: { + id?: number; + state?: string; context?: string; created_at?: string; description?: string; - id?: number; - state?: string; target_url?: string; updated_at?: string; url?: string; @@ -1307,12 +1310,12 @@ export type RefStatus = { }[]; export type Refs = { + ref?: string; object?: { - sha?: string; type?: string; + sha?: string; url?: string; }; - ref?: string; url?: string; }[]; @@ -1322,12 +1325,14 @@ export interface RefsBody { } export interface Release { + tarball_url?: string; + target_commitish?: string; assets?: { + id?: number; + label?: string; content_type?: string; created_at?: string; download_count?: number; - id?: number; - label?: string; name?: string; size?: number; state?: string; @@ -1346,28 +1351,27 @@ export interface Release { prerelease?: boolean; published_at?: string; tag_name?: string; - tarball_url?: string; - target_commitish?: string; upload_url?: string; url?: string; zipball_url?: string; } export interface ReleaseCreate { + prerelease?: boolean; body?: string; draft?: boolean; name?: string; - prerelease?: boolean; tag_name?: string; target_commitish?: string; } export type Releases = { + created_at?: string; assets?: { + id?: number; content_type?: string; created_at?: string; download_count?: number; - id?: number; label?: string; name?: string; size?: number; @@ -1379,7 +1383,6 @@ export type Releases = { assets_url?: string; author?: User; body?: string; - created_at?: string; draft?: boolean; html_url?: string; id?: number; @@ -1395,11 +1398,12 @@ export type Releases = { }[]; export interface Repo { + forks?: number; + organization?: Organization; clone_url?: string; created_at?: string; description?: string; fork?: boolean; - forks?: number; forks_count?: number; full_name?: string; git_url?: string; @@ -1415,7 +1419,6 @@ export interface Repo { name?: string; open_issues?: number; open_issues_count?: number; - organization?: Organization; owner?: Actor; parent?: Repo; private?: boolean; @@ -1430,6 +1433,18 @@ export interface Repo { watchers_count?: number; } +export type RepoDeployments = { + created_at?: string; + creator?: User; + description?: string; + id?: number; + payload?: string; + sha?: string; + statuses_url?: string; + updated_at?: string; + url?: string; +}[]; + export type RepoComments = { body?: string; commit_id?: string; @@ -1457,8 +1472,8 @@ export interface RepoCommit { }; message?: string; parents?: { - sha?: string; url?: string; + sha?: string; }[]; sha?: string; tree?: { @@ -1470,30 +1485,18 @@ export interface RepoCommit { export interface RepoCommitBody { author?: { + name?: string; date?: string; email?: string; - name?: string; }; message: string; parents: string[]; tree: string; } -export type RepoDeployments = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - export interface RepoEdit { - description?: string; has_downloads?: boolean; + description?: string; has_issues?: boolean; has_wiki?: boolean; homepage?: string; @@ -1505,17 +1508,17 @@ export type Repos = Repo[]; export interface SearchCode { items?: { - git_url?: string; html_url?: string; + git_url?: string; name?: string; path?: string; repository?: { - archive_url?: string; + comments_url?: string; assignees_url?: string; + archive_url?: string; blobs_url?: string; branches_url?: string; collaborators_url?: string; - comments_url?: string; commits_url?: string; compare_url?: string; contents_url?: string; @@ -1562,10 +1565,11 @@ export interface SearchCode { } export interface SearchIssues { + total_count?: number; items?: { - assignee?: any; - body?: string; closed_at?: any; + body?: string; + assignee?: any; comments?: number; comments_url?: string; created_at?: string; @@ -1592,19 +1596,18 @@ export interface SearchIssues { url?: string; user?: User; }[]; - total_count?: number; } export interface SearchIssuesByKeyword { issues?: { - body?: string; + gravatar_id?: string; comments?: number; created_at?: string; - gravatar_id?: string; html_url?: string; labels?: string[]; number?: number; position?: number; + body?: string; state?: string; title?: string; updated_at?: string; @@ -1627,8 +1630,8 @@ export interface SearchUserByEmail { } export interface SearchUsers { - items?: Users; total_count?: number; + items?: Users; } export interface SearchUsersByKeyword { @@ -1636,21 +1639,22 @@ export interface SearchUsersByKeyword { } export interface Subscription { - created_at?: string; + thread_url?: string; ignored?: boolean; reason?: string; + created_at?: string; repository_url?: string; subscribed?: boolean; - thread_url?: string; url?: string; } export interface SubscriptionBody { - ignored?: boolean; subscribed?: boolean; + ignored?: boolean; } export interface Tag { + url?: string; message?: string; object?: { sha?: string; @@ -1660,20 +1664,19 @@ export interface Tag { sha?: string; tag?: string; tagger?: { - date?: string; email?: string; name?: string; + date?: string; }; - url?: string; } export interface TagBody { + tag: string; message: string; object: string; - tag: string; tagger: { - date?: string; email?: string; + date?: string; name?: string; }; type: "commit" | "tree" | "blob"; @@ -1682,31 +1685,32 @@ export interface TagBody { export type Tags = Tag[]; export interface Team { + name?: string; + url?: string; id?: number; members_count?: number; - name?: string; permission?: string; repos_count?: number; - url?: string; } export interface TeamMembership { - state?: string; url?: string; + state?: string; } export type TeamRepos = Repos; export type Teams = { - id?: number; - name?: string; url?: string; + name?: string; + id?: number; }[]; export type TeamsList = { - id?: number; + repos_count?: number; members_count?: number; name?: string; + id?: number; organization?: { avatar_url?: string; id?: number; @@ -1714,12 +1718,10 @@ export type TeamsList = { url?: string; }; permission?: string; - repos_count?: number; url?: string; }[]; export interface Tree { - sha?: string; tree?: { mode?: "100644" | "100755" | "040000" | "160000" | "120000"; path?: string; @@ -1728,14 +1730,15 @@ export interface Tree { type?: "blob" | "tree" | "commit"; url?: string; }[]; + sha?: string; url?: string; } export interface Trees { - base_tree?: string; sha?: string; - tree?: Tree[]; url?: string; + tree?: Tree[]; + base_tree?: string; } export type User = Actor; @@ -1743,25 +1746,25 @@ export type User = Actor; export type UserEmails = string[]; export interface UserKeysKeyId { - id?: number; - key?: string; title?: string; + key?: string; + id?: number; url?: string; } export interface UserKeysPost { - key?: string; title?: string; + key?: string; } export interface UserUpdate { - bio?: string; - blog?: string; company?: string; + blog?: string; email?: string; - hireable?: boolean; location?: string; + hireable?: boolean; name?: string; + bio?: string; } export type Users = User[]; @@ -1770,7 +1773,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1835,7 +1838,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -1857,7 +1860,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -1873,7 +1876,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -1937,7 +1940,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -1993,15 +1996,15 @@ export class Api extends HttpClient this.request({ - path: `/someop`, + path: \`/someop\`, method: "POST", query: query, body: data, @@ -2027,7 +2030,7 @@ export class Api extends HttpClient this.request({ - path: `/someop/${fooId}/bars/bar-bar`, + path: \`/someop/\${fooId}/bars/bar-bar\`, method: "POST", query: query, body: data, @@ -2044,7 +2047,7 @@ export class Api extends HttpClient this.request({ - path: `/emojis`, + path: \`/emojis\`, method: "GET", format: "json", ...params, @@ -2059,7 +2062,7 @@ export class Api extends HttpClient this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2074,7 +2077,7 @@ export class Api extends HttpClient this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2094,7 +2097,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2109,7 +2112,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2130,7 +2133,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2150,7 +2153,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2165,7 +2168,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2178,7 +2181,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2192,7 +2195,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2208,7 +2211,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2222,7 +2225,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2237,7 +2240,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2252,7 +2255,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2266,7 +2269,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2282,7 +2285,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2295,7 +2298,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2308,7 +2311,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2321,7 +2324,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2335,7 +2338,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2349,7 +2352,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2364,17 +2367,17 @@ export class Api extends HttpClient this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2396,7 +2399,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2411,15 +2414,15 @@ export class Api extends HttpClient this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2434,7 +2437,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2450,13 +2453,13 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2472,7 +2475,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2487,7 +2490,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2502,7 +2505,7 @@ export class Api extends HttpClient this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2517,7 +2520,7 @@ export class Api extends HttpClient this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2539,7 +2542,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2554,7 +2557,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2568,7 +2571,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2582,7 +2585,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2595,7 +2598,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2608,7 +2611,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2622,7 +2625,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2639,7 +2642,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2653,7 +2656,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2669,7 +2672,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2684,17 +2687,17 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2709,7 +2712,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2723,7 +2726,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2738,7 +2741,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2751,7 +2754,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2765,7 +2768,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2780,7 +2783,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2793,7 +2796,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2812,7 +2815,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2827,7 +2830,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -2842,7 +2845,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -2856,7 +2859,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -2873,7 +2876,7 @@ export class Api extends HttpClient this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -2888,7 +2891,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -2901,7 +2904,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -2915,7 +2918,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2931,7 +2934,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -2947,7 +2950,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -2960,7 +2963,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -2976,7 +2979,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -2990,7 +2993,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3004,7 +3007,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3019,7 +3022,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3032,7 +3035,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3045,7 +3048,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3059,7 +3062,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3074,7 +3077,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3094,7 +3097,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3111,16 +3114,16 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3135,7 +3138,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3151,7 +3154,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3165,7 +3168,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3185,7 +3188,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3201,7 +3204,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3215,7 +3218,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3240,7 +3243,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3255,7 +3258,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3278,7 +3281,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3293,7 +3296,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3307,7 +3310,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3323,7 +3326,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3343,7 +3346,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3358,7 +3361,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3372,7 +3375,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3387,7 +3390,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3401,7 +3404,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3422,7 +3425,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3437,7 +3440,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3453,7 +3456,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3469,7 +3472,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3483,7 +3486,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3499,7 +3502,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3513,7 +3516,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3527,7 +3530,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3543,7 +3546,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3558,7 +3561,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3572,7 +3575,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3588,7 +3591,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3604,7 +3607,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3618,7 +3621,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3642,7 +3645,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3657,7 +3660,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -3671,7 +3674,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -3686,7 +3689,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -3701,7 +3704,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -3715,7 +3718,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -3730,7 +3733,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -3745,17 +3748,17 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -3770,7 +3773,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -3788,13 +3791,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -3809,7 +3812,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3824,7 +3827,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3844,7 +3847,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3859,7 +3862,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -3875,7 +3878,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -3891,7 +3894,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -3905,7 +3908,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -3922,7 +3925,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -3942,7 +3945,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -3959,7 +3962,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -3973,7 +3976,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -3986,7 +3989,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4000,7 +4003,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4015,7 +4018,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4032,7 +4035,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4045,7 +4048,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4059,7 +4062,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4074,7 +4077,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4089,7 +4092,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4103,7 +4106,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4117,7 +4120,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4132,7 +4135,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4147,7 +4150,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4161,7 +4164,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4176,7 +4179,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4190,7 +4193,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4208,14 +4211,14 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4230,7 +4233,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4245,7 +4248,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4260,7 +4263,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4280,7 +4283,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4295,7 +4298,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4318,7 +4321,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4333,7 +4336,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4349,14 +4352,14 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4371,7 +4374,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4390,13 +4393,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4411,7 +4414,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4426,7 +4429,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4446,7 +4449,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4463,7 +4466,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4477,7 +4480,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4495,7 +4498,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4515,7 +4518,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -4531,7 +4534,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -4545,7 +4548,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -4559,7 +4562,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -4572,7 +4575,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -4595,7 +4598,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -4610,7 +4613,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -4624,7 +4627,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -4639,7 +4642,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -4652,7 +4655,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -4672,7 +4675,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4688,7 +4691,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -4703,7 +4706,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -4717,7 +4720,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -4734,7 +4737,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -4748,7 +4751,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -4762,7 +4765,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -4776,7 +4779,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -4790,7 +4793,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -4804,7 +4807,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -4818,7 +4821,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -4832,7 +4835,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -4846,7 +4849,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -4862,7 +4865,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -4876,7 +4879,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -4889,7 +4892,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -4903,7 +4906,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -4919,7 +4922,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -4933,7 +4936,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -4947,7 +4950,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -4969,7 +4972,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -4988,7 +4991,7 @@ export class Api extends HttpClient this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5011,7 +5014,7 @@ export class Api extends HttpClient this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5033,7 +5036,7 @@ export class Api extends HttpClient this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5055,7 +5058,7 @@ export class Api extends HttpClient this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5077,7 +5080,7 @@ export class Api extends HttpClient this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5093,7 +5096,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5106,7 +5109,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5120,7 +5123,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5136,7 +5139,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5150,7 +5153,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5165,7 +5168,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5178,7 +5181,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5191,7 +5194,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5204,7 +5207,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5218,7 +5221,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5232,7 +5235,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5246,7 +5249,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5261,7 +5264,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5274,7 +5277,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5288,7 +5291,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5302,7 +5305,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5318,7 +5321,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -5333,7 +5336,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -5346,7 +5349,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -5360,7 +5363,7 @@ export class Api extends HttpClient this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -5374,7 +5377,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -5388,7 +5391,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -5401,7 +5404,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -5414,7 +5417,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -5427,17 +5430,17 @@ export class Api extends HttpClient this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -5452,7 +5455,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -5466,7 +5469,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -5481,7 +5484,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -5494,7 +5497,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -5508,7 +5511,7 @@ export class Api extends HttpClient this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -5527,7 +5530,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -5542,7 +5545,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -5563,7 +5566,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -5578,7 +5581,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5591,7 +5594,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5604,7 +5607,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5617,7 +5620,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -5631,7 +5634,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5644,7 +5647,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5657,7 +5660,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5670,7 +5673,7 @@ export class Api extends HttpClient this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -5690,7 +5693,7 @@ export class Api extends HttpClient this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -5705,7 +5708,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -5719,7 +5722,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -5732,7 +5735,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -5745,7 +5748,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -5759,7 +5762,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -5778,7 +5781,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -5793,7 +5796,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -5807,7 +5810,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -5821,7 +5824,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -5834,7 +5837,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -5853,7 +5856,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -5868,7 +5871,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -5881,9 +5884,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/sortTypes-false/basic.test.ts b/tests/spec/sortTypes-false/basic.test.ts new file mode 100644 index 00000000..ec1ff172 --- /dev/null +++ b/tests/spec/sortTypes-false/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--sort-types=false", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + sortTypes: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/sortTypes-false/expected.ts b/tests/spec/sortTypes-false/expected.ts deleted file mode 100644 index 0bfe0161..00000000 --- a/tests/spec/sortTypes-false/expected.ts +++ /dev/null @@ -1,5889 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Actor { - created_at?: string; - gravatar_id?: string; - email?: string; - blog?: string; - collaborators?: number; - disk_usage?: number; - followers?: number; - avatar_url?: string; - followers_url?: string; - following?: number; - following_url?: string; - bio?: string; - gists_url?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - login?: string; - name?: string; - organizations_url?: string; - owned_private_repos?: number; - company?: string; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - created_at?: string; - id?: number; - url?: string; - user?: User; -}[]; - -export interface Commit { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export interface CommitCommentBody { - body: string; - line?: string; - number?: string; - path?: string; - position?: number; - sha: string; -} - -export type Commits = { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - total?: number; - weeks?: { - a?: number; - c?: number; - d?: number; - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - actor?: Actor; - created_at?: object; - id?: number; - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - created_at?: string; - url?: string; - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - committed_at?: string; - url?: string; - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - actor?: Actor; - commit_id?: string; - created_at?: string; - event?: string; - issue?: { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - created_at?: string; - html_url?: string; - id?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - message?: string; -} - -export interface MergesSuccessful { - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - billing_email?: string; - company?: string; - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - auto_init?: boolean; - description?: string; - gitignore_template?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name: string; - private?: boolean; - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - closed_at?: string; - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - remaining?: number; - limit?: number; - reset?: number; - }; -} - -export type Ref = { - state?: string; - target_url?: string; - updated_at?: string; - created_at?: string; - creator?: { - id?: number; - login?: string; - avatar_url?: string; - gravatar_id?: string; - url?: string; - }; - description?: string; - id?: number; - url?: string; -}[]; - -export type RefStatus = { - sha?: string; - state?: string; - commit_url?: string; - name?: string; - repository_url?: string; - statuses?: { - id?: number; - state?: string; - context?: string; - created_at?: string; - description?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - ref?: string; - object?: { - type?: string; - sha?: string; - url?: string; - }; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - tarball_url?: string; - target_commitish?: string; - assets?: { - id?: number; - label?: string; - content_type?: string; - created_at?: string; - download_count?: number; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - prerelease?: boolean; - body?: string; - draft?: boolean; - name?: string; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - created_at?: string; - assets?: { - id?: number; - content_type?: string; - created_at?: string; - download_count?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - forks?: number; - organization?: Organization; - clone_url?: string; - created_at?: string; - description?: string; - fork?: boolean; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - owner?: Actor; - parent?: Repo; - private?: boolean; - pushed_at?: string; - size?: number; - source?: Repo; - ssh_url?: string; - svn_url?: string; - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface RepoCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - url?: string; - sha?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - name?: string; - date?: string; - email?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - has_downloads?: boolean; - description?: string; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - html_url?: string; - git_url?: string; - name?: string; - path?: string; - repository?: { - comments_url?: string; - assignees_url?: string; - archive_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - total_count?: number; - items?: { - closed_at?: any; - body?: string; - assignee?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }[]; -} - -export interface SearchIssuesByKeyword { - issues?: { - gravatar_id?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - body?: string; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - user?: User; -} - -export interface SearchUsers { - total_count?: number; - items?: Users; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - thread_url?: string; - ignored?: boolean; - reason?: string; - created_at?: string; - repository_url?: string; - subscribed?: boolean; - url?: string; -} - -export interface SubscriptionBody { - subscribed?: boolean; - ignored?: boolean; -} - -export interface Tag { - url?: string; - message?: string; - object?: { - sha?: string; - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - tag?: string; - tagger?: { - email?: string; - name?: string; - date?: string; - }; -} - -export interface TagBody { - tag: string; - message: string; - object: string; - tagger: { - email?: string; - date?: string; - name?: string; - }; - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - name?: string; - url?: string; - id?: number; - members_count?: number; - permission?: string; - repos_count?: number; -} - -export interface TeamMembership { - url?: string; - state?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - url?: string; - name?: string; - id?: number; -}[]; - -export type TeamsList = { - repos_count?: number; - members_count?: number; - name?: string; - id?: number; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - url?: string; -}[]; - -export interface Tree { - tree?: { - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Trees { - sha?: string; - url?: string; - tree?: Tree[]; - base_tree?: string; -} - -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - title?: string; - key?: string; - id?: number; - url?: string; -} - -export interface UserKeysPost { - title?: string; - key?: string; -} - -export interface UserUpdate { - company?: string; - blog?: string; - email?: string; - location?: string; - hireable?: boolean; - name?: string; - bio?: string; -} - -export type Users = User[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title GitHub - * @version v3 - */ -export class Api extends HttpClient { - someop = { - /** - * No description - * - * @tags someop - * @name SomeOp1 - * @request POST:/someop - */ - someOp1: ( - data: Events, - query?: { - queryParam1?: number; - fooBarBaz?: number; - queryParam2?: number; - queryParamBar3?: number; - queryParam3?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags someop - * @name SomeOp - * @request POST:/someop/{fooId}/bars/bar-bar - */ - someOp: ( - fooId: string, - data: Events, - query?: { - page?: number; - size?: number; - sort?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop/${fooId}/bars/bar-bar`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - }; - emojis = { - /** - * No description - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params: RequestParams = {}) => - this.request({ - path: `/emojis`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * No description - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * No description - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * No description - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * No description - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * No description - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - state: "open" | "closed"; - labels: string; - sort: "created" | "updated" | "comments"; - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * No description - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - */ - reposSearchDetail: ( - keyword: string, - query?: { - order?: "desc" | "asc"; - language?: string; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - */ - userSearchDetail: ( - keyword: string, - query?: { - order?: "desc" | "asc"; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * No description - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * No description - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * No description - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * No description - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * No description - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - state: "open" | "closed"; - labels: string; - sort: "created" | "updated" | "comments"; - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * No description - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * No description - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - since?: string; - sha?: string; - path?: string; - author?: string; - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - path?: string; - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - state: "open" | "closed"; - labels: string; - sort: "created" | "updated" | "comments"; - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - state?: "open" | "closed"; - direction?: string; - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - state?: "open" | "closed"; - head?: string; - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * No description - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * No description - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * No description - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * No description - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * No description - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - state: "open" | "closed"; - labels: string; - sort: "created" | "updated" | "comments"; - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - direction?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * No description - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/sortTypes-false/test.js b/tests/spec/sortTypes-false/test.js deleted file mode 100644 index 46a6e81b..00000000 --- a/tests/spec/sortTypes-false/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--sort-types-false option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - sortTypes: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/sortTypes-false/schema.ts b/tests/spec/sortTypes/__snapshots__/basic.test.ts.snap similarity index 90% rename from tests/spec/sortTypes-false/schema.ts rename to tests/spec/sortTypes/__snapshots__/basic.test.ts.snap index 0bfe0161..ab7e8ad1 100644 --- a/tests/spec/sortTypes-false/schema.ts +++ b/tests/spec/sortTypes/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --sort-types 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -10,19 +13,20 @@ */ export interface Actor { - created_at?: string; - gravatar_id?: string; - email?: string; + avatar_url?: string; + bio?: string; blog?: string; collaborators?: number; + company?: string; + created_at?: string; disk_usage?: number; + email?: string; followers?: number; - avatar_url?: string; followers_url?: string; following?: number; following_url?: string; - bio?: string; gists_url?: string; + gravatar_id?: string; hireable?: boolean; html_url?: string; id?: number; @@ -31,7 +35,6 @@ export interface Actor { name?: string; organizations_url?: string; owned_private_repos?: number; - company?: string; plan?: { collaborators?: number; name?: string; @@ -1265,41 +1268,41 @@ export interface PutSubscription { export interface RateLimit { rate?: { - remaining?: number; limit?: number; + remaining?: number; reset?: number; }; } export type Ref = { - state?: string; - target_url?: string; - updated_at?: string; created_at?: string; creator?: { - id?: number; - login?: string; avatar_url?: string; gravatar_id?: string; + id?: number; + login?: string; url?: string; }; description?: string; id?: number; + state?: string; + target_url?: string; + updated_at?: string; url?: string; }[]; export type RefStatus = { - sha?: string; - state?: string; commit_url?: string; name?: string; repository_url?: string; + sha?: string; + state?: string; statuses?: { - id?: number; - state?: string; context?: string; created_at?: string; description?: string; + id?: number; + state?: string; target_url?: string; updated_at?: string; url?: string; @@ -1307,12 +1310,12 @@ export type RefStatus = { }[]; export type Refs = { - ref?: string; object?: { - type?: string; sha?: string; + type?: string; url?: string; }; + ref?: string; url?: string; }[]; @@ -1322,14 +1325,12 @@ export interface RefsBody { } export interface Release { - tarball_url?: string; - target_commitish?: string; assets?: { - id?: number; - label?: string; content_type?: string; created_at?: string; download_count?: number; + id?: number; + label?: string; name?: string; size?: number; state?: string; @@ -1348,27 +1349,28 @@ export interface Release { prerelease?: boolean; published_at?: string; tag_name?: string; + tarball_url?: string; + target_commitish?: string; upload_url?: string; url?: string; zipball_url?: string; } export interface ReleaseCreate { - prerelease?: boolean; body?: string; draft?: boolean; name?: string; + prerelease?: boolean; tag_name?: string; target_commitish?: string; } export type Releases = { - created_at?: string; assets?: { - id?: number; content_type?: string; created_at?: string; download_count?: number; + id?: number; label?: string; name?: string; size?: number; @@ -1380,6 +1382,7 @@ export type Releases = { assets_url?: string; author?: User; body?: string; + created_at?: string; draft?: boolean; html_url?: string; id?: number; @@ -1395,12 +1398,11 @@ export type Releases = { }[]; export interface Repo { - forks?: number; - organization?: Organization; clone_url?: string; created_at?: string; description?: string; fork?: boolean; + forks?: number; forks_count?: number; full_name?: string; git_url?: string; @@ -1416,6 +1418,7 @@ export interface Repo { name?: string; open_issues?: number; open_issues_count?: number; + organization?: Organization; owner?: Actor; parent?: Repo; private?: boolean; @@ -1430,18 +1433,6 @@ export interface Repo { watchers_count?: number; } -export type RepoDeployments = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - export type RepoComments = { body?: string; commit_id?: string; @@ -1469,8 +1460,8 @@ export interface RepoCommit { }; message?: string; parents?: { - url?: string; sha?: string; + url?: string; }[]; sha?: string; tree?: { @@ -1482,18 +1473,30 @@ export interface RepoCommit { export interface RepoCommitBody { author?: { - name?: string; date?: string; email?: string; + name?: string; }; message: string; parents: string[]; tree: string; } +export type RepoDeployments = { + created_at?: string; + creator?: User; + description?: string; + id?: number; + payload?: string; + sha?: string; + statuses_url?: string; + updated_at?: string; + url?: string; +}[]; + export interface RepoEdit { - has_downloads?: boolean; description?: string; + has_downloads?: boolean; has_issues?: boolean; has_wiki?: boolean; homepage?: string; @@ -1505,17 +1508,17 @@ export type Repos = Repo[]; export interface SearchCode { items?: { - html_url?: string; git_url?: string; + html_url?: string; name?: string; path?: string; repository?: { - comments_url?: string; - assignees_url?: string; archive_url?: string; + assignees_url?: string; blobs_url?: string; branches_url?: string; collaborators_url?: string; + comments_url?: string; commits_url?: string; compare_url?: string; contents_url?: string; @@ -1562,11 +1565,10 @@ export interface SearchCode { } export interface SearchIssues { - total_count?: number; items?: { - closed_at?: any; - body?: string; assignee?: any; + body?: string; + closed_at?: any; comments?: number; comments_url?: string; created_at?: string; @@ -1593,18 +1595,19 @@ export interface SearchIssues { url?: string; user?: User; }[]; + total_count?: number; } export interface SearchIssuesByKeyword { issues?: { - gravatar_id?: string; + body?: string; comments?: number; created_at?: string; + gravatar_id?: string; html_url?: string; labels?: string[]; number?: number; position?: number; - body?: string; state?: string; title?: string; updated_at?: string; @@ -1627,8 +1630,8 @@ export interface SearchUserByEmail { } export interface SearchUsers { - total_count?: number; items?: Users; + total_count?: number; } export interface SearchUsersByKeyword { @@ -1636,22 +1639,21 @@ export interface SearchUsersByKeyword { } export interface Subscription { - thread_url?: string; + created_at?: string; ignored?: boolean; reason?: string; - created_at?: string; repository_url?: string; subscribed?: boolean; + thread_url?: string; url?: string; } export interface SubscriptionBody { - subscribed?: boolean; ignored?: boolean; + subscribed?: boolean; } export interface Tag { - url?: string; message?: string; object?: { sha?: string; @@ -1661,19 +1663,20 @@ export interface Tag { sha?: string; tag?: string; tagger?: { + date?: string; email?: string; name?: string; - date?: string; }; + url?: string; } export interface TagBody { - tag: string; message: string; object: string; + tag: string; tagger: { - email?: string; date?: string; + email?: string; name?: string; }; type: "commit" | "tree" | "blob"; @@ -1682,32 +1685,31 @@ export interface TagBody { export type Tags = Tag[]; export interface Team { - name?: string; - url?: string; id?: number; members_count?: number; + name?: string; permission?: string; repos_count?: number; + url?: string; } export interface TeamMembership { - url?: string; state?: string; + url?: string; } export type TeamRepos = Repos; export type Teams = { - url?: string; - name?: string; id?: number; + name?: string; + url?: string; }[]; export type TeamsList = { - repos_count?: number; + id?: number; members_count?: number; name?: string; - id?: number; organization?: { avatar_url?: string; id?: number; @@ -1715,10 +1717,12 @@ export type TeamsList = { url?: string; }; permission?: string; + repos_count?: number; url?: string; }[]; export interface Tree { + sha?: string; tree?: { mode?: "100644" | "100755" | "040000" | "160000" | "120000"; path?: string; @@ -1727,15 +1731,14 @@ export interface Tree { type?: "blob" | "tree" | "commit"; url?: string; }[]; - sha?: string; url?: string; } export interface Trees { + base_tree?: string; sha?: string; - url?: string; tree?: Tree[]; - base_tree?: string; + url?: string; } export type User = Actor; @@ -1743,25 +1746,25 @@ export type User = Actor; export type UserEmails = string[]; export interface UserKeysKeyId { - title?: string; - key?: string; id?: number; + key?: string; + title?: string; url?: string; } export interface UserKeysPost { - title?: string; key?: string; + title?: string; } export interface UserUpdate { - company?: string; + bio?: string; blog?: string; + company?: string; email?: string; - location?: string; hireable?: boolean; + location?: string; name?: string; - bio?: string; } export type Users = User[]; @@ -1770,7 +1773,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1835,7 +1838,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -1857,7 +1860,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -1873,7 +1876,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -1937,7 +1940,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -1993,15 +1996,15 @@ export class Api extends HttpClient this.request({ - path: `/someop`, + path: \`/someop\`, method: "POST", query: query, body: data, @@ -2027,7 +2030,7 @@ export class Api extends HttpClient this.request({ - path: `/someop/${fooId}/bars/bar-bar`, + path: \`/someop/\${fooId}/bars/bar-bar\`, method: "POST", query: query, body: data, @@ -2044,7 +2047,7 @@ export class Api extends HttpClient this.request({ - path: `/emojis`, + path: \`/emojis\`, method: "GET", format: "json", ...params, @@ -2059,7 +2062,7 @@ export class Api extends HttpClient this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2074,7 +2077,7 @@ export class Api extends HttpClient this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2094,7 +2097,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2109,7 +2112,7 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2130,7 +2133,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2150,7 +2153,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2165,7 +2168,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2178,7 +2181,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2192,7 +2195,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2208,7 +2211,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2222,7 +2225,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2237,7 +2240,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2252,7 +2255,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2266,7 +2269,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2282,7 +2285,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2295,7 +2298,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2308,7 +2311,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2321,7 +2324,7 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2335,7 +2338,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2349,7 +2352,7 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2364,17 +2367,17 @@ export class Api extends HttpClient this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2396,7 +2399,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2411,15 +2414,15 @@ export class Api extends HttpClient this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2434,7 +2437,7 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2450,13 +2453,13 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2472,7 +2475,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2487,7 +2490,7 @@ export class Api extends HttpClient this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2502,7 +2505,7 @@ export class Api extends HttpClient this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2517,7 +2520,7 @@ export class Api extends HttpClient this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2539,7 +2542,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2554,7 +2557,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2568,7 +2571,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2582,7 +2585,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2595,7 +2598,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2608,7 +2611,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2622,7 +2625,7 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2639,7 +2642,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2653,7 +2656,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2669,7 +2672,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2684,17 +2687,17 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2709,7 +2712,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2723,7 +2726,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2738,7 +2741,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2751,7 +2754,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2765,7 +2768,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2780,7 +2783,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2793,7 +2796,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2812,7 +2815,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2827,7 +2830,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -2842,7 +2845,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -2856,7 +2859,7 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -2873,7 +2876,7 @@ export class Api extends HttpClient this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -2888,7 +2891,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -2901,7 +2904,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -2915,7 +2918,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2931,7 +2934,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -2947,7 +2950,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -2960,7 +2963,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -2976,7 +2979,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -2990,7 +2993,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3004,7 +3007,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3019,7 +3022,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3032,7 +3035,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3045,7 +3048,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3059,7 +3062,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3074,7 +3077,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3094,7 +3097,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3111,16 +3114,16 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3135,7 +3138,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3151,7 +3154,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3165,7 +3168,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3185,7 +3188,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3201,7 +3204,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3215,7 +3218,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3240,7 +3243,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3255,7 +3258,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3278,7 +3281,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3293,7 +3296,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3307,7 +3310,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3323,7 +3326,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3343,7 +3346,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3358,7 +3361,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3372,7 +3375,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3387,7 +3390,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3401,7 +3404,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3422,7 +3425,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3437,7 +3440,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3453,7 +3456,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3469,7 +3472,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3483,7 +3486,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3499,7 +3502,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3513,7 +3516,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3527,7 +3530,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3543,7 +3546,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3558,7 +3561,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3572,7 +3575,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3588,7 +3591,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3604,7 +3607,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3618,7 +3621,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3642,7 +3645,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3657,7 +3660,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -3671,7 +3674,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -3686,7 +3689,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -3701,7 +3704,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -3715,7 +3718,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -3730,7 +3733,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -3745,17 +3748,17 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -3770,7 +3773,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -3788,13 +3791,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -3809,7 +3812,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3824,7 +3827,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3844,7 +3847,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3859,7 +3862,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -3875,7 +3878,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -3891,7 +3894,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -3905,7 +3908,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -3922,7 +3925,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -3942,7 +3945,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -3959,7 +3962,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -3973,7 +3976,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -3986,7 +3989,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4000,7 +4003,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4015,7 +4018,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4032,7 +4035,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4045,7 +4048,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4059,7 +4062,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4074,7 +4077,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4089,7 +4092,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4103,7 +4106,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4117,7 +4120,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4132,7 +4135,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4147,7 +4150,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4161,7 +4164,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4176,7 +4179,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4190,7 +4193,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4208,14 +4211,14 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4230,7 +4233,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4245,7 +4248,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4260,7 +4263,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4280,7 +4283,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4295,7 +4298,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4318,7 +4321,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4333,7 +4336,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4349,14 +4352,14 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4371,7 +4374,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4390,13 +4393,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4411,7 +4414,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4426,7 +4429,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4446,7 +4449,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4463,7 +4466,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4477,7 +4480,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4495,7 +4498,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4515,7 +4518,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -4531,7 +4534,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -4545,7 +4548,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -4559,7 +4562,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -4572,7 +4575,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -4595,7 +4598,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -4610,7 +4613,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -4624,7 +4627,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -4639,7 +4642,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -4652,7 +4655,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -4672,7 +4675,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -4688,7 +4691,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -4703,7 +4706,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -4717,7 +4720,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -4734,7 +4737,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -4748,7 +4751,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -4762,7 +4765,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -4776,7 +4779,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -4790,7 +4793,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -4804,7 +4807,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -4818,7 +4821,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -4832,7 +4835,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -4846,7 +4849,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -4862,7 +4865,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -4876,7 +4879,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -4889,7 +4892,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -4903,7 +4906,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -4919,7 +4922,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -4933,7 +4936,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -4947,7 +4950,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -4969,7 +4972,7 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -4988,7 +4991,7 @@ export class Api extends HttpClient this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5011,7 +5014,7 @@ export class Api extends HttpClient this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5033,7 +5036,7 @@ export class Api extends HttpClient this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5055,7 +5058,7 @@ export class Api extends HttpClient this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5077,7 +5080,7 @@ export class Api extends HttpClient this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5093,7 +5096,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5106,7 +5109,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5120,7 +5123,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5136,7 +5139,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5150,7 +5153,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5165,7 +5168,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5178,7 +5181,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5191,7 +5194,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5204,7 +5207,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5218,7 +5221,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5232,7 +5235,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5246,7 +5249,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5261,7 +5264,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5274,7 +5277,7 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5288,7 +5291,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5302,7 +5305,7 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5318,7 +5321,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -5333,7 +5336,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -5346,7 +5349,7 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -5360,7 +5363,7 @@ export class Api extends HttpClient this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -5374,7 +5377,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -5388,7 +5391,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -5401,7 +5404,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -5414,7 +5417,7 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -5427,17 +5430,17 @@ export class Api extends HttpClient this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -5452,7 +5455,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -5466,7 +5469,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -5481,7 +5484,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -5494,7 +5497,7 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -5508,7 +5511,7 @@ export class Api extends HttpClient this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -5527,7 +5530,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -5542,7 +5545,7 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -5563,7 +5566,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -5578,7 +5581,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5591,7 +5594,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5604,7 +5607,7 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5617,7 +5620,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -5631,7 +5634,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5644,7 +5647,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5657,7 +5660,7 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5670,7 +5673,7 @@ export class Api extends HttpClient this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -5690,7 +5693,7 @@ export class Api extends HttpClient this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -5705,7 +5708,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -5719,7 +5722,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -5732,7 +5735,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -5745,7 +5748,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -5759,7 +5762,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -5778,7 +5781,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -5793,7 +5796,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -5807,7 +5810,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -5821,7 +5824,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -5834,7 +5837,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -5853,7 +5856,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -5868,7 +5871,7 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -5881,9 +5884,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/sortTypes/basic.test.ts b/tests/spec/sortTypes/basic.test.ts new file mode 100644 index 00000000..3c858b04 --- /dev/null +++ b/tests/spec/sortTypes/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--sort-types", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + sortTypes: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/sortTypes/schema.ts b/tests/spec/sortTypes/schema.ts deleted file mode 100644 index 4587ef32..00000000 --- a/tests/spec/sortTypes/schema.ts +++ /dev/null @@ -1,5889 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface Actor { - avatar_url?: string; - bio?: string; - blog?: string; - collaborators?: number; - company?: string; - created_at?: string; - disk_usage?: number; - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - login?: string; - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - created_at?: string; - id?: number; - url?: string; - user?: User; -}[]; - -export interface Commit { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export interface CommitCommentBody { - body: string; - line?: string; - number?: string; - path?: string; - position?: number; - sha: string; -} - -export type Commits = { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - total?: number; - weeks?: { - a?: number; - c?: number; - d?: number; - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - actor?: Actor; - created_at?: object; - id?: number; - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - created_at?: string; - url?: string; - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - committed_at?: string; - url?: string; - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - actor?: Actor; - commit_id?: string; - created_at?: string; - event?: string; - issue?: { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - assignee?: User; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - created_at?: string; - html_url?: string; - id?: number; - updated_at?: string; - url?: string; - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - message?: string; -} - -export interface MergesSuccessful { - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - created_at?: string; - creator?: User; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - billing_email?: string; - company?: string; - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - auto_init?: boolean; - description?: string; - gitignore_template?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name: string; - private?: boolean; - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - closed_at?: string; - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: User; - url?: string; - }[]; - assets_url?: string; - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - organization?: Organization; - owner?: Actor; - parent?: Repo; - private?: boolean; - pushed_at?: string; - size?: number; - source?: Repo; - ssh_url?: string; - svn_url?: string; - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoComments = { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: User; -}[]; - -export interface RepoCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export type RepoDeployments = { - created_at?: string; - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - message?: string; - object?: { - sha?: string; - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - tag?: string; - tagger?: { - date?: string; - email?: string; - name?: string; - }; - url?: string; -} - -export interface TagBody { - message: string; - object: string; - tag: string; - tagger: { - date?: string; - email?: string; - name?: string; - }; - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - sha?: string; - tree?: Tree[]; - url?: string; -} - -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = ""; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title GitHub - * @version v3 - */ -export class Api extends HttpClient { - someop = { - /** - * No description - * - * @tags someop - * @name SomeOp1 - * @request POST:/someop - */ - someOp1: ( - data: Events, - query?: { - queryParam1?: number; - queryParam2?: number; - queryParam3?: string[]; - queryParamBar3?: number; - fooBarBaz?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags someop - * @name SomeOp - * @request POST:/someop/{fooId}/bars/bar-bar - */ - someOp: ( - fooId: string, - data: Events, - query?: { - page?: number; - size?: number; - sort?: string[]; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/someop/${fooId}/bars/bar-bar`, - method: "POST", - query: query, - body: data, - format: "json", - ...params, - }), - }; - emojis = { - /** - * No description - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params: RequestParams = {}) => - this.request({ - path: `/emojis`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * No description - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * No description - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * No description - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * No description - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * No description - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - direction: "asc" | "desc"; - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - labels: string; - since?: string; - sort: "created" | "updated" | "comments"; - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * No description - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - */ - reposSearchDetail: ( - keyword: string, - query?: { - language?: string; - order?: "desc" | "asc"; - sort?: "updated" | "stars" | "forks"; - start_page?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - */ - userSearchDetail: ( - keyword: string, - query?: { - order?: "desc" | "asc"; - sort?: "updated" | "stars" | "forks"; - start_page?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * No description - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * No description - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * No description - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * No description - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * No description - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - direction: "asc" | "desc"; - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - labels: string; - since?: string; - sort: "created" | "updated" | "comments"; - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * No description - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * No description - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - author?: string; - path?: string; - sha?: string; - since?: string; - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - path?: string; - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - direction: "asc" | "desc"; - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - labels: string; - since?: string; - sort: "created" | "updated" | "comments"; - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - since?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "due_date" | "completeness"; - state?: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - base?: string; - head?: string; - state?: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - since?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * No description - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * No description - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - order?: "desc" | "asc"; - q: string; - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * No description - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * No description - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * No description - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - direction: "asc" | "desc"; - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - labels: string; - since?: string; - sort: "created" | "updated" | "comments"; - state: "open" | "closed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - direction?: string; - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * No description - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/sortTypes/test.js b/tests/spec/sortTypes/test.js deleted file mode 100644 index 77b3a16b..00000000 --- a/tests/spec/sortTypes/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--sort-types option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateClient: true, - sortTypes: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/specProperty/expected.ts b/tests/spec/specProperty/__snapshots__/basic.test.ts.snap similarity index 97% rename from tests/spec/specProperty/expected.ts rename to tests/spec/specProperty/__snapshots__/basic.test.ts.snap index 5503bfbf..86766f4a 100644 --- a/tests/spec/specProperty/expected.ts +++ b/tests/spec/specProperty/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > specProperty 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -115,3 +118,5 @@ export namespace Pets { export type ResponseBody = void; } } +" +`; diff --git a/tests/spec/specProperty/basic.test.ts b/tests/spec/specProperty/basic.test.ts new file mode 100644 index 00000000..74529555 --- /dev/null +++ b/tests/spec/specProperty/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("specProperty", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: false, + generateRouteTypes: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/specProperty/schema.ts b/tests/spec/specProperty/schema.ts deleted file mode 100644 index 5503bfbf..00000000 --- a/tests/spec/specProperty/schema.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type Pet = NewPet & { - /** @format int64 */ - id: number; -}; - -export interface NewPet { - name: string; - tag?: string; -} - -export interface Error { - /** @format int32 */ - code: number; - message: string; -} - -/** Page«TemplateResponseDto» */ -export interface PageTemplateResponseDto { - content?: any[]; - empty?: boolean; - first?: boolean; - last?: boolean; - /** @format int32 */ - number?: number; - /** @format int32 */ - numberOfElements?: number; - pageable?: any; - /** @format int32 */ - size?: number; - sort?: any; - /** @format int64 */ - totalElements?: number; - /** @format int32 */ - totalPages?: number; -} - -export namespace Pets { - /** - * @description Returns all pets from the system that the user has access to Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia. Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien. - * @name FindPets - * @request GET:/pets - */ - export namespace FindPets { - export type RequestParams = {}; - export type RequestQuery = { - /** tags to filter by */ - tags?: string[]; - /** - * maximum number of results to return - * @format int32 - */ - limit?: number; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Pet[]; - } - /** - * @description Creates a new pet in the store. Duplicates are allowed - * @name AddPet - * @request POST:/pets - */ - export namespace AddPet { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = NewPet; - export type RequestHeaders = {}; - export type ResponseBody = Pet; - } - /** - * @description Returns a user based on a single ID, if the user does not have access to the pet - * @name FindPetById - * @request GET:/pets/{id} - */ - export namespace FindPetById { - export type RequestParams = { - /** - * ID of pet to fetch - * @format int64 - */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Pet; - } - /** - * @description deletes a single pet based on the ID supplied - * @name DeletePet - * @request DELETE:/pets/{id} - */ - export namespace DeletePet { - export type RequestParams = { - /** - * ID of pet to delete - * @format int64 - */ - id: number; - }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = void; - } -} diff --git a/tests/spec/specProperty/test.js b/tests/spec/specProperty/test.js deleted file mode 100644 index 9e28de0d..00000000 --- a/tests/spec/specProperty/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "specProperty test", - silent: true, - name: apiFileName, - spec: require(absolutePath), - output: resolve(__dirname, "./"), - generateRouteTypes: true, - generateClient: false, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/templates/expected.ts b/tests/spec/templates/expected.ts deleted file mode 100644 index 06022066..00000000 --- a/tests/spec/templates/expected.ts +++ /dev/null @@ -1,6710 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * A user or organization - */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** - * A GitHub organization - */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** - * A GitHub user - */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -/* CUSTOM TEMPLATE */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/* HTTP CLIENT TEMPLATE */ - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export class Api extends HttpClient { - emojis = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params: RequestParams = {}) => - this.request({ - path: `/emojis`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - events = { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - feeds = { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - gists = { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - gitignore = { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - issues = { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - legacy = { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - markdown = { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - meta = { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - networks = { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - notifications = { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - orgs = { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - rateLimit = { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - repos = { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - repositories = { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - search = { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - teams = { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - user = { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - users = { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; -} - -/* CUSTOM TEMPLATE */ diff --git a/tests/spec/templates/schema.json b/tests/spec/templates/schema.json deleted file mode 100644 index 05dfe7d5..00000000 --- a/tests/spec/templates/schema.json +++ /dev/null @@ -1,23683 +0,0 @@ -{ - "swagger": "2.0", - "schemes": ["https"], - "host": "api.github.com", - "basePath": "/", - "info": { - "description": "Powerful collaboration, code review, and code management for open source and private projects.\n", - "termsOfService": "https://help.github.com/articles/github-terms-of-service/#b-api-terms", - "title": "GitHub", - "version": "v3", - "x-apisguru-categories": ["collaboration", "developer_tools"], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_github_profile_image.jpeg" - }, - "x-origin": [ - { - "format": "swagger", - "url": "https://raw.githubusercontent.com/APIs-guru/unofficial_openapi_specs/master/github.com/v3/swagger.yaml", - "version": "2.0" - } - ], - "x-preferred": false, - "x-providerName": "github.com", - "x-unofficialSpec": true - }, - "externalDocs": { - "url": "https://developer.github.com/v3/" - }, - "consumes": ["application/json"], - "produces": ["application/json"], - "securityDefinitions": { - "oauth_2_0": { - "authorizationUrl": "https://github.com/login/oauth/authorize", - "description": "OAuth2 is a protocol that lets external apps request authorization to private\ndetails in a user's GitHub account without getting their password. This is\npreferred over Basic Authentication because tokens can be limited to specific\ntypes of data, and can be revoked by users at any time.\n", - "flow": "accessCode", - "scopes": { - "admin:org": "", - "admin:org_hook": "", - "admin:public_key": "", - "admin:repo_hook": "", - "delete_repo": "", - "gist": "", - "notifications": "", - "public_repo": "", - "read:org": "", - "read:public_key": "", - "read:repo_hook": "", - "repo": "", - "repo:status": "", - "repo_deployment": "", - "user": "", - "user:email": "", - "user:follow": "", - "write:org": "", - "write:public_key": "", - "write:repo_hook": "" - }, - "tokenUrl": "https://github.com/login/oauth/access_token", - "type": "oauth2" - } - }, - "paths": { - "/emojis": { - "get": { - "description": "Lists all the emojis available to use on GitHub.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/emojis" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/events": { - "get": { - "description": "List public events.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/feeds": { - "get": { - "description": "List Feeds.\nGitHub provides several timeline resources in Atom format. The Feeds API\n lists all the feeds available to the authenticating user.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/feeds" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists": { - "get": { - "description": "List the authenticated user's gists or if called anonymously, this will\nreturn all public gists.\n", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a gist.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postGist" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/public": { - "get": { - "description": "List all public gists.", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/starred": { - "get": { - "description": "List the authenticated user's starred gists.", - "parameters": [ - { - "description": "Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.\nOnly gists updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}": { - "delete": { - "description": "Delete a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/patchGist" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gist" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/comments": { - "get": { - "description": "List comments on a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a commen", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/comment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/comment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/forks": { - "post": { - "description": "Fork a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gists/{id}/star": { - "delete": { - "description": "Unstar a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a gist is starred.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not exists.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Star a gist.", - "parameters": [ - { - "description": "Id of gist.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Starred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gitignore/templates": { - "get": { - "description": "Listing available templates.\nList all templates available to pass as an option when creating a repository.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/gitignore/templates/{language}": { - "get": { - "description": "Get a single template.", - "parameters": [ - { - "in": "path", - "name": "language", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore-lang" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/issues": { - "get": { - "description": "List issues.\nList all issues across all the authenticated user's visible repositories.\n", - "parameters": [ - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/issues/search/{owner}/{repository}/{state}/{keyword}": { - "get": { - "deprecated": true, - "description": "Find issues by state and keyword.", - "parameters": [ - { - "description": "The search term.", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "description": "Indicates the state of the issues to return. Can be either open or closed.", - "enum": ["open", "closed"], - "in": "path", - "name": "state", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "repository", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-issues-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/repos/search/{keyword}": { - "get": { - "deprecated": true, - "description": "Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter.", - "parameters": [ - { - "description": "The search term", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Filter results by language", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "The page number to fetch", - "in": "query", - "name": "start_page", - "type": "string" - }, - { - "description": "The sort field. One of stars, forks, or updated. Default: results are sorted by best match.", - "enum": ["updated", "stars", "forks"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-repositories-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/user/email/{email}": { - "get": { - "deprecated": true, - "description": "This API call is added for compatibility reasons only.", - "parameters": [ - { - "description": "The email address", - "in": "path", - "name": "email", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-user-by-email" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/legacy/user/search/{keyword}": { - "get": { - "deprecated": true, - "description": "Find users by keyword.", - "parameters": [ - { - "description": "The search term", - "in": "path", - "name": "keyword", - "required": true, - "type": "string" - }, - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The page number to fetch", - "in": "query", - "name": "start_page", - "type": "string" - }, - { - "description": "The sort field. One of stars, forks, or updated. Default: results are sorted by best match.", - "enum": ["updated", "stars", "forks"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-users-by-keyword" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/markdown": { - "post": { - "description": "Render an arbitrary Markdown document", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/markdown" - } - } - ], - "produces": ["text/html"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/markdown/raw": { - "post": { - "consumes": ["text/plain"], - "description": "Render a Markdown document in raw mode", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "produces": ["text/html"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/meta": { - "get": { - "description": "This gives some information about GitHub.com, the service.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/meta" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/networks/{owner}/{repo}/events": { - "get": { - "description": "List public events for a network of repositories.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications": { - "get": { - "description": "List your notifications.\nList all notifications for the current user, grouped by repository.\n", - "parameters": [ - { - "description": "True to show notifications marked as read.", - "in": "query", - "name": "all", - "type": "boolean" - }, - { - "description": "True to show only notifications in which the user is directly participating\nor mentioned.\n", - "in": "query", - "name": "participating", - "type": "boolean" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Mark as read.\nMarking a notification as \"read\" removes it from the default view on GitHub.com.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/notificationMarkRead" - } - } - ], - "responses": { - "205": { - "description": "Marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications/threads/{id}": { - "get": { - "description": "View a single thread.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Mark a thread as read", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "205": { - "description": "Thread marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/notifications/threads/{id}/subscription": { - "delete": { - "description": "Delete a Thread Subscription.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Thread Subscription.", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Set a Thread Subscription.\nThis lets you subscribe to a thread, or ignore it. Subscribing to a thread\nis unnecessary if the user is already subscribed to the repository. Ignoring\na thread will mute all future notifications (until you comment or get @mentioned).\n", - "parameters": [ - { - "description": "Id of thread.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/putSubscription" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}": { - "get": { - "description": "Get an Organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organization" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit an Organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/patchOrg" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organization" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/events": { - "get": { - "description": "List public events for an organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/issues": { - "get": { - "description": "List issues.\nList all issues for a given organization for the authenticated user.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/members": { - "get": { - "description": "Members list.\nList all users who are members of an organization. A member is a user tha\nbelongs to at least 1 team in the organization. If the authenticated user\nis also an owner of this organization then both concealed and public members\nwill be returned. If the requester is not an owner of the organization the\nquery will be redirected to the public members list.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "302": { - "description": "Response if requester is not an organization member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/members/{username}": { - "delete": { - "description": "Remove a member.\nRemoving a user from this list will remove them from all teams and they\nwill no longer have any access to the organization's repositories.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a user is, publicly or privately, a member of the organization.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content. Response if requester is an organization member and user is a member\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "302": { - "description": "Found. Response if requester is not an organization member\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Not Found.\na. Response if requester is an organization member and user is not a member\nb. Response if requester is not an organization member and is inquiring about themselves\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/public_members": { - "get": { - "description": "Public members list.\nMembers of an organization can choose to have their membership publicized\nor not.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/public_members/{username}": { - "delete": { - "description": "Conceal a user's membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Concealed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check public membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a public member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a public member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Publicize a user's membership.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Name of the user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Publicized.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/repos": { - "get": { - "description": "List repositories for the specified org.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a new repository for the authenticated user. OAuth users must supply\nrepo scope.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postRepo" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/orgs/{org}/teams": { - "get": { - "description": "List teams.", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create team.\nIn order to create a team, the authenticated user must be an owner of organization.\n", - "parameters": [ - { - "description": "Name of organisation.", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/orgTeamsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/rate_limit": { - "get": { - "description": "Get your current rate limit status\nNote: Accessing this endpoint does not count against your rate limit.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/rate_limit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}": { - "delete": { - "description": "Delete a Repository.\nDeleting a repository requires admin access. If OAuth is used, the delete_repo\nscope is required.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repoEdit" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/assignees": { - "get": { - "description": "List assignees.\nThis call lists all the available assignees (owner + collaborators) to which\nissues may be assigned.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/assignees" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/assignees/{assignee}": { - "get": { - "description": "Check assignee.\nYou may also check to see if a particular user is an assignee for a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the assignee.", - "in": "path", - "name": "assignee", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is an assignee.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User isn't an assignee.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/branches": { - "get": { - "description": "Get list of branches", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/branches" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/branches/{branch}": { - "get": { - "description": "Get Branch", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the branch.", - "in": "path", - "name": "branch", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/branch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/collaborators": { - "get": { - "description": "List.\nWhen authenticating as an organization owner of an organization-owned\nrepository, all organization owners are included in the list of\ncollaborators. Otherwise, only users with access to the repository are\nreturned in the collaborators list.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/collaborators/{user}": { - "delete": { - "description": "Remove collaborator.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Collaborator removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if user is a collaborator", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a collaborator.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a collaborator.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Add collaborator.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Login of the user.", - "in": "path", - "name": "user", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Collaborator added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/comments": { - "get": { - "description": "List commit comments for a repository.\nComments are ordered by ascending ID.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/comments/{commentId}": { - "delete": { - "description": "Delete a commit comment", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits": { - "get": { - "description": "List commits on a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Sha or branch to start listing commits from.", - "in": "query", - "name": "sha", - "type": "string" - }, - { - "description": "Only commits containing this file path will be returned.", - "in": "query", - "name": "path", - "type": "string" - }, - { - "description": "GitHub login, name, or email by which to filter by commit author.", - "in": "query", - "name": "author", - "type": "string" - }, - { - "description": "ISO 8601 Date - Only commits before this date will be returned.", - "in": "query", - "name": "until", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{ref}/status": { - "get": { - "description": "Get the combined Status for a specific Ref\nThe Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details.\nTo access this endpoint during the preview period, you must provide a custom media type in the Accept header:\napplication/vnd.github.she-hulk-preview+json\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/refStatus" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{shaCode}": { - "get": { - "description": "Get a single commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/commits/{shaCode}/comments": { - "get": { - "description": "List comments for a single commitList comments for a single commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a commit comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code of the commit.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commitCommentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/compare/{baseId}...{headId}": { - "get": { - "description": "Compare two commits", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "baseId", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "headId", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/compare-commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/contents/{path}": { - "delete": { - "description": "Delete a file.\nThis method deletes a file in a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deleteFileBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deleteFile" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get contents.\nThis method returns the contents of a file or directory in a repository.\nFiles and symlinks support a custom media type for getting the raw content.\nDirectories and submodules do not support custom media types.\nNote: This API supports files up to 1 megabyte in size.\nHere can be many outcomes. For details see \"http://developer.github.com/v3/repos/contents/\"\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "The content path.", - "in": "query", - "name": "path", - "type": "string" - }, - { - "description": "The String name of the Commit/Branch/Tag. Defaults to 'master'.", - "in": "query", - "name": "ref", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contents-path" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Create a file.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/createFileBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/createFile" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/contributors": { - "get": { - "description": "Get list of contributors.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Set to 1 or true to include anonymous contributors in results.", - "in": "query", - "name": "anon", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/deployments": { - "get": { - "description": "Users with pull access can view deployments for a repository", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo-deployments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Users with push access can create a deployment for a given ref", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deployment" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deployment-resp" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/deployments/{id}/statuses": { - "get": { - "description": "Users with pull access can view deployment statuses for a deployment", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The Deployment ID to list the statuses from.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/deployment-statuses" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Deployment Status\nUsers with push access can create deployment statuses for a given deployment:\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The Deployment ID to list the statuses from.", - "in": "path", - "name": "id", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/deployment-statuses-create" - } - } - ], - "responses": { - "201": { - "description": "ok", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/downloads": { - "get": { - "deprecated": true, - "description": "Deprecated. List downloads for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/downloads" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/downloads/{downloadId}": { - "delete": { - "deprecated": true, - "description": "Deprecated. Delete a download.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of download.", - "in": "path", - "name": "downloadId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "Deprecated. Get a single download.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of download.", - "in": "path", - "name": "downloadId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/download" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/events": { - "get": { - "description": "Get list of repository events.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/events" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/forks": { - "get": { - "description": "List forks.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "newes", - "enum": ["newes", "oldes", "watchers"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/forks" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a fork.\nForking a Repository happens asynchronously. Therefore, you may have to wai\na short period before accessing the git objects. If this takes longer than 5\nminutes, be sure to contact Support.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/forkBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/blobs": { - "post": { - "description": "Create a Blob.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/blob" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/blobs" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/blobs/{shaCode}": { - "get": { - "description": "Get a Blob.\nSince blobs can be any arbitrary binary data, the input and responses for\nthe blob API takes an encoding parameter that can be either utf-8 or\nbase64. If your data cannot be losslessly sent as a UTF-8 string, you can\nbase64 encode it.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/blob" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/commits": { - "post": { - "description": "Create a Commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repoCommitBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitCommit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/commits/{shaCode}": { - "get": { - "description": "Get a Commit.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "SHA-1 code.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repoCommit" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/refs": { - "get": { - "description": "Get all References", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/refs" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/refsBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/refs/{ref}": { - "delete": { - "description": "Delete a Reference\nExample: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a\nExample: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a Reference", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/gitRefPatch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/headBranch" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/tags": { - "post": { - "description": "Create a Tag Object.\nNote that creating a tag object does not create the reference that makes a\ntag in Git. If you want to create an annotated tag in Git, you have to do\nthis call to create the tag object, and then create the refs/tags/[tag]\nreference. If you want to create a lightweight tag, you only have to create\nthe tag reference - this call would be unnecessary.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tagBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tag" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/tags/{shaCode}": { - "get": { - "description": "Get a Tag.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tag" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/trees": { - "post": { - "description": "Create a Tree.\nThe tree creation API will take nested entries as well. If both a tree and\na nested path modifying that tree are specified, it will overwrite the\ncontents of that tree with the new path contents and write a new tree out.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tree" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/trees" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/git/trees/{shaCode}": { - "get": { - "description": "Get a Tree.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Tree SHA.", - "in": "path", - "name": "shaCode", - "required": true, - "type": "string" - }, - { - "description": "Get a Tree Recursively. (0 or 1)", - "in": "query", - "name": "recursive", - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tree" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks": { - "get": { - "description": "Get list of hooks.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/hookBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks/{hookId}": { - "delete": { - "description": "Delete a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get single hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a hook.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/hookBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/hook" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/hooks/{hookId}/tests": { - "post": { - "description": "Test a push hook.\nThis will trigger the hook with the latest push to the current repository\nif the hook is subscribed to push events. If the hook is not subscribed\nto push events, the server will respond with 204 but no test POST will\nbe generated.\nNote: Previously /repos/:owner/:repo/hooks/:id/tes\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of hook.", - "in": "path", - "name": "hookId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Hook is triggered.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues": { - "get": { - "description": "List issues for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create an issue.\nAny user with pull access to a repository can create an issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/issue" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/comments": { - "get": { - "description": "List comments in a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "ID of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/events": { - "get": { - "description": "List issue events for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvents" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/events/{eventId}": { - "get": { - "description": "Get a single event.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of the event.", - "in": "path", - "name": "eventId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvent" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}": { - "get": { - "description": "Get a single issue", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit an issue.\nIssue owners and users with push access can edit an issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/issue" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issue" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/comments": { - "get": { - "description": "List comments on an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/events": { - "get": { - "description": "List events for an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issueEvents" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/labels": { - "delete": { - "description": "Remove all labels from an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "List labels on an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Add labels to an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Replace all labels for an issue.\nSending an empty array ([]) will remove all Labels from the Issue.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/issues/{number}/labels/{name}": { - "delete": { - "description": "Remove a label from an issue.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of issue.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Item removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/keys": { - "get": { - "description": "Get list of keys.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/keys" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a key.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-keys-post" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/keys/{keyId}": { - "delete": { - "description": "Delete a key.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a key", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/labels": { - "get": { - "description": "List all labels for this repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/labels/{name}": { - "delete": { - "description": "Delete a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a label.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Name of the label.", - "in": "path", - "name": "name", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/label" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/languages": { - "get": { - "description": "List languages.\nList languages for the specified repository. The value on the right of a\nlanguage is the number of bytes of code written in that language.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/languages" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/merges": { - "post": { - "description": "Perform a merge.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mergesBody" - } - } - ], - "responses": { - "201": { - "description": "Successful Response (The resulting merge commit)", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesSuccessful" - } - }, - "204": { - "description": "No-op response (base already contains the head, nothing to merge)", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Missing base response or missing head response", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesConflict" - } - }, - "409": { - "description": "Merge conflict response.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/mergesConflict" - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones": { - "get": { - "description": "List milestones for a repository.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "open", - "description": "String to filter by state.", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "default": "due_date", - "description": "", - "enum": ["due_date", "completeness"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/milestoneUpdate" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones/{number}": { - "delete": { - "description": "Delete a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/milestoneUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/milestone" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/milestones/{number}/labels": { - "get": { - "description": "Get labels for every issue in a milestone.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Number of milestone.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/labels" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/notifications": { - "get": { - "description": "List your notifications in a repository\nList all notifications for the current user.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "True to show notifications marked as read.", - "in": "query", - "name": "all", - "type": "boolean" - }, - { - "description": "True to show only notifications in which the user is directly participating\nor mentioned.\n", - "in": "query", - "name": "participating", - "type": "boolean" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/notifications" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Mark notifications as read in a repository.\nMarking all notifications in a repository as \"read\" removes them from the\ndefault view on GitHub.com.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/notificationMarkRead" - } - } - ], - "responses": { - "205": { - "description": "Marked as read.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls": { - "get": { - "description": "List pull requests.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "default": "open", - "description": "String to filter by state.", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Filter pulls by head user and branch name in the format of 'user:ref-name'.\nExample: github:new-script-format.\n", - "in": "query", - "name": "head", - "type": "string" - }, - { - "description": "Filter pulls by base branch name. Example - gh-pages.", - "in": "query", - "name": "base", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullsPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/comments": { - "get": { - "description": "List comments in a repository.\nBy default, Review Comments are ordered by ascending ID.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issuesComments" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/comments/{commentId}": { - "delete": { - "description": "Delete a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a comment.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of comment.", - "in": "path", - "name": "commentId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/commentBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}": { - "get": { - "description": "Get a single pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullRequest" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repo" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/comments": { - "get": { - "description": "List comments on a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a comment.\n #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ )\n description: |\n Alternative Input.\n Instead of passing commit_id, path, and position you can reply to an\n existing Pull Request Comment like this:\n\n body\n Required string\n in_reply_to\n Required number - Comment id to reply to.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pullsCommentPost" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pullsComment" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/commits": { - "get": { - "description": "List commits on a pull request.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commits" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/files": { - "get": { - "description": "List pull requests files.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/pulls" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/pulls/{number}/merge": { - "get": { - "description": "Get if a pull request has been merged.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Pull request has been merged.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Pull request has not been merged.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Merge a pull request (Merge Button's)", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Id of pull.", - "in": "path", - "name": "number", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mergePullBody" - } - } - ], - "responses": { - "200": { - "description": "Response if merge was successful.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/merge" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "405": { - "description": "Response if merge cannot be performed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/merge" - } - } - } - } - }, - "/repos/{owner}/{repo}/readme": { - "get": { - "description": "Get the README.\nThis method returns the preferred README for a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "The String name of the Commit/Branch/Tag. Defaults to master.", - "in": "query", - "name": "ref", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contents-path" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases": { - "get": { - "description": "Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/releases" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a release\nUsers with push access to the repository can create a release.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/release-create" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/assets/{id}": { - "delete": { - "description": "Delete a release asset", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single release asset", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/asset" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit a release asset\nUsers with push access to the repository can edit a release asset.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/assetPatch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/asset" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/{id}": { - "delete": { - "description": "Users with push access to the repository can delete a release.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Users with push access to the repository can edit a release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/release-create" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/release" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/releases/{id}/assets": { - "get": { - "description": "List assets for a release", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/assets" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stargazers": { - "get": { - "description": "List Stargazers.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/code_frequency": { - "get": { - "description": "Get the number of additions and deletions per week.\nReturns a weekly aggregate of the number of additions and deletions pushed\nto a repository.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/codeFrequencyStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/commit_activity": { - "get": { - "description": "Get the last year of commit activity data.\nReturns the last year of commit activity grouped by week. The days array\nis a group of commits per day, starting on Sunday.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/commitActivityStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/contributors": { - "get": { - "description": "Get contributors list with additions, deletions, and commit counts.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/contributorsStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/participation": { - "get": { - "description": "Get the weekly commit count for the repo owner and everyone else.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/participationStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/stats/punch_card": { - "get": { - "description": "Get the number of commits per hour in each day.\nEach array contains the day number, hour number, and number of commits\n0-6 Sunday - Saturday\n0-23 Hour of day\nNumber of commits\n\nFor example, [2, 14, 25] indicates that there were 25 total commits, during\nthe 2.00pm hour on Tuesdays. All times are based on the time zone of\nindividual commits.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/codeFrequencyStats" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/statuses/{ref}": { - "get": { - "description": "List Statuses for a specific Ref.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ref to list the statuses from. It can be a SHA, a branch name, or a tag name.\n", - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/ref" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a Status.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Ref to list the statuses from. It can be a SHA, a branch name, or a tag name.\n", - "in": "path", - "name": "ref", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/headBranch" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/ref" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/subscribers": { - "get": { - "description": "List watchers.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/subscription": { - "delete": { - "description": "Delete a Repository Subscription.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a Repository Subscription.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Set a Repository Subscription", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/subscriptionBody" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/subscription" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/tags": { - "get": { - "description": "Get list of tags.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/tags" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/teams": { - "get": { - "description": "Get list of teams", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/watchers": { - "get": { - "description": "List Stargazers. New implementation.", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/{archive_format}/{path}": { - "get": { - "description": "Get archive link.\nThis method will return a 302 to a URL to download a tarball or zipball\narchive for a repository. Please make sure your HTTP framework is\nconfigured to follow redirects or you will need to use the Location header\nto make a second GET request.\nNote: For private repositories, these links are temporary and expire quickly.\n", - "parameters": [ - { - "description": "Name of repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "enum": ["tarball", "zipball"], - "in": "path", - "name": "archive_format", - "required": true, - "type": "string" - }, - { - "description": "Valid Git reference, defaults to 'master'.", - "in": "path", - "name": "path", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "302": { - "description": "Found.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/repositories": { - "get": { - "description": "List all public repositories.\nThis provides a dump of every public repository, in the order that they\nwere created.\nNote: Pagination is powered exclusively by the since parameter. is the\nLink header to get the URL for the next page of repositories.\n", - "parameters": [ - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/code": { - "get": { - "description": "Search code.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported code\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier\nyou can restrict the search to just the file contents, the file path,\nor both.\n'Languages' Searches code based on the language it's written in.\n'Forks' Filters repositories based on the number of forks, and/or\nwhether code from forked repositories should be included in the results\nat all.\n'Size' Finds files that match a certain size (in bytes).\n'Path' Specifies the path that the resulting file must be at.\n'Extension' Matches files with a certain extension.\n'Users' or 'Repositories' Limits searches to a specific user or repository.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "Can only be 'indexed', which indicates how recently a file has been indexed\nby the GitHub search infrastructure. If not provided, results are sorted\nby best match.\n", - "enum": ["indexed"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-code" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/issues": { - "get": { - "description": "Find issues by state and keyword. (This method returns up to 100 results per page.)", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The q search term can also contain any combination of the supported issue search qualifiers:", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "The sort field. Can be comments, created, or updated. Default: results are sorted by best match.", - "enum": ["updated", "created", "comments"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/repositories": { - "get": { - "description": "Search repositories.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported repository\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier you\ncan restrict the search to just the repository name, description, readme,\nor any combination of these.\n'Size' Finds repositories that match a certain size (in kilobytes).\n'Forks' Filters repositories based on the number of forks, and/or whether\nforked repositories should be included in the results at all.\n'Created' and 'Last Updated' Filters repositories based on times of\ncreation, or when they were last updated.\n'Users or Repositories' Limits searches to a specific user or repository.\n'Languages' Searches repositories based on the language they are written in.\n'Stars' Searches repositories based on the number of stars.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "If not provided, results are sorted by best match.", - "enum": ["stars", "forks", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-repositories" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/search/users": { - "get": { - "description": "Search users.", - "parameters": [ - { - "default": "desc", - "description": "The sort field. if sort param is provided. Can be either asc or desc.", - "enum": ["desc", "asc"], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "The search terms. This can be any combination of the supported user\nsearch parameters:\n'Search In' Qualifies which fields are searched. With this qualifier you\ncan restrict the search to just the username, public email, full name,\nlocation, or any combination of these.\n'Repository count' Filters users based on the number of repositories they\nhave.\n'Location' Filter users by the location indicated in their profile.\n'Language' Search for users that have repositories that match a certain\nlanguage.\n'Created' Filter users based on when they joined.\n'Followers' Filter users based on the number of followers they have.\n", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "If not provided, results are sorted by best match.", - "enum": ["followers", "repositories", "joined"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/search-users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}": { - "delete": { - "description": "Delete team.\nIn order to delete a team, the authenticated user must be an owner of the\norg that the team is associated with.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get team.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Edit team.\nIn order to edit a team, the authenticated user must be an owner of the org\nthat the team is associated with.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/editTeam" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/team" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/members": { - "get": { - "description": "List team members.\nIn order to list members in a team, the authenticated user must be a member\nof the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/members/{username}": { - "delete": { - "deprecated": true, - "description": "The \"Remove team member\" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships.\n\nRemove team member.\nIn order to remove a user from a team, the authenticated user must have 'admin'\npermissions to the team or be an owner of the org that the team is associated\nwith.\nNOTE This does not delete the user, it just remove them from the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "The \"Get team member\" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships.\n\nGet team member.\nIn order to get if a user is a member of a team, the authenticated user mus\nbe a member of the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User is a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User is not a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "deprecated": true, - "description": "The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams.\n\nAdd team member.\nIn order to add a user to a team, the authenticated user must have 'admin'\npermissions to the team or be an owner of the org that the team is associated\nwith.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "422": { - "description": "If you attempt to add an organization to a team, you will get this.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organizationAsTeamMember" - } - } - } - } - }, - "/teams/{teamId}/memberships/{username}": { - "delete": { - "description": "Remove team membership.\nIn order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Team member removed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get team membership.\nIn order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "User is a member.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamMembership" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "User has no membership with team", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Add team membership.\nIn order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with.\n\nIf the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team.\n\nIf the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team.\n", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a member.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "Team member added.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamMembership" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "422": { - "description": "If you attempt to add an organization to a team, you will get this.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/organizationAsTeamMember" - } - } - } - } - }, - "/teams/{teamId}/repos": { - "get": { - "description": "List team repos", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teamRepos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/teams/{teamId}/repos/{owner}/{repo}": { - "delete": { - "description": "In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if a team manages a repository", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization.", - "parameters": [ - { - "description": "Id of team.", - "in": "path", - "name": "teamId", - "required": true, - "type": "integer" - }, - { - "description": "Name of a organization.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user": { - "get": { - "description": "Get the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "patch": { - "description": "Update the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-update" - } - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/emails": { - "delete": { - "description": "Delete email address(es).\nYou can include a single email address or an array of addresses.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-emails" - } - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "List email addresses for a user.\nIn the final version of the API, this method will return an array of hashes\nwith extended information for each email address indicating if the address\nhas been verified and if it's primary email address for GitHub.\nUntil API v3 is finalized, use the application/vnd.github.v3 media type to\nget other response format.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "produces": ["application/vnd.github.v3"], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-emails" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Add email address(es).\nYou can post a single email address or an array of addresses.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/emailsPost" - } - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/followers": { - "get": { - "description": "List the authenticated user's followers", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/following": { - "get": { - "description": "List who the authenticated user is following.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/following/{username}": { - "delete": { - "description": "Unfollow a user.\nUnfollowing a user requires the user to be logged in and authenticated with\nbasic auth or OAuth with the user:follow scope.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "User unfollowed.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if you are following a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Response if you are following this user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Response if you are not following this user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Follow a user.\nFollowing a user requires the user to be logged in and authenticated with\nbasic auth or OAuth with the user:follow scope.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "You are now following the user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/issues": { - "get": { - "description": "List issues.\nList all issues across owned and member repositories for the authenticated\nuser.\n", - "parameters": [ - { - "default": "all", - "description": "Issues assigned to you / created by you / mentioning you / you're\nsubscribed to updates for / All issues the authenticated user can see\n", - "enum": ["assigned", "created", "mentioned", "subscribed", "all"], - "in": "query", - "name": "filter", - "required": true, - "type": "string" - }, - { - "default": "open", - "enum": ["open", "closed"], - "in": "query", - "name": "state", - "required": true, - "type": "string" - }, - { - "description": "String list of comma separated Label names. Example - bug,ui,@high.", - "in": "query", - "name": "labels", - "required": true, - "type": "string" - }, - { - "default": "created", - "enum": ["created", "updated", "comments"], - "in": "query", - "name": "sort", - "required": true, - "type": "string" - }, - { - "default": "desc", - "enum": ["asc", "desc"], - "in": "query", - "name": "direction", - "required": true, - "type": "string" - }, - { - "description": "Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nOnly issues updated at or after this time are returned.\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/issues" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/keys": { - "get": { - "description": "List your public keys.\nLists the current user's keys. Management of public keys via the API requires\nthat you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a public key.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/user-keys-post" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/keys/{keyId}": { - "delete": { - "description": "Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope.", - "parameters": [ - { - "description": "ID of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "No content.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Get a single public key.", - "parameters": [ - { - "description": "ID of key.", - "in": "path", - "name": "keyId", - "required": true, - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user-keys-keyId" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/orgs": { - "get": { - "description": "List public and private organizations for the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/repos": { - "get": { - "description": "List repositories for the authenticated user. Note that this does not include\nrepositories owned by organizations which the user can access. You can lis\nuser organizations and list organization repositories separately.\n", - "parameters": [ - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "post": { - "description": "Create a new repository for the authenticated user. OAuth users must supply\nrepo scope.\n", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - }, - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/postRepo" - } - } - ], - "responses": { - "201": { - "description": "Created", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/starred": { - "get": { - "description": "List repositories being starred by the authenticated user.", - "parameters": [ - { - "description": "Ignored without 'sort' parameter.", - "in": "query", - "name": "direction", - "type": "string" - }, - { - "default": "created", - "description": "", - "enum": ["created", "updated"], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/starred/{owner}/{repo}": { - "delete": { - "description": "Unstar a repository", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Unstarred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "description": "Check if you are starring a repository.", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "This repository is starred by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "This repository is not starred by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "description": "Star a repository.", - "parameters": [ - { - "description": "Name of a repository owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of a repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository starred.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/subscriptions": { - "get": { - "description": "List repositories being watched by the authenticated user.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/subscriptions/{owner}/{repo}": { - "delete": { - "deprecated": true, - "description": "Stop watching a repository", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Unwatched.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "get": { - "deprecated": true, - "description": "Check if you are watching a repository.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository is watched by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Repository is not watched by you.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - }, - "put": { - "deprecated": true, - "description": "Watch a repository.", - "parameters": [ - { - "description": "Name of the owner.", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Name of repository.", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Repository is watched.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/user/teams": { - "get": { - "description": "List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth.", - "parameters": [ - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/teams-list" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users": { - "get": { - "description": "Get all users.\nThis provides a dump of every user, in the order that they signed up for GitHub.\nNote: Pagination is powered exclusively by the since parameter. Use the Link\nheader to get the URL for the next page of users.\n", - "parameters": [ - { - "description": "The integer ID of the last user that you've seen.", - "in": "query", - "name": "since", - "type": "integer" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}": { - "get": { - "description": "Get a single user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/user" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/events": { - "get": { - "description": "If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/events/orgs/{org}": { - "get": { - "description": "This is the user's organization dashboard. You must be authenticated as the user to view this.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/followers": { - "get": { - "description": "List a user's followers", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/users" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/following/{targetUser}": { - "get": { - "description": "Check if one user follows another.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Name of user.", - "in": "path", - "name": "targetUser", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "204": { - "description": "Response if user follows target user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - }, - "404": { - "description": "Response if user does not follow target user.", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/gists": { - "get": { - "description": "List a users gists.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.\nExample: \"2012-10-09T23:39:01Z\".\n", - "in": "query", - "name": "since", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gists" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/keys": { - "get": { - "description": "List public keys for a user.\nLists the verified public keys for a user. This is accessible by anyone.\n", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/orgs": { - "get": { - "description": "List all public organizations for a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/gitignore" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/received_events": { - "get": { - "description": "These are events that you'll only see public events.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/received_events/public": { - "get": { - "description": "List public events that a user has received", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/repos": { - "get": { - "description": "List public repositories for the specified user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "default": "all", - "enum": ["all", "public", "private", "forks", "sources", "member"], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - }, - "schema": { - "$ref": "#/definitions/repos" - } - }, - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/starred": { - "get": { - "description": "List repositories being starred by a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - }, - "/users/{username}/subscriptions": { - "get": { - "description": "List repositories being watched by a user.", - "parameters": [ - { - "description": "Name of user.", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Is used to set specified media type.", - "in": "header", - "name": "Accept", - "type": "string" - } - ], - "responses": { - "403": { - "description": "API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting\nfor details.\n", - "headers": { - "X-GitHub-Media-Type": { - "description": "You can check the current version of media type in responses.\n", - "type": "string" - }, - "X-GitHub-Request-Id": { - "type": "integer" - }, - "X-RateLimit-Limit": { - "type": "integer" - }, - "X-RateLimit-Remaining": { - "type": "integer" - }, - "X-RateLimit-Reset": { - "type": "integer" - } - } - } - } - } - } - }, - "definitions": { - "actor": { - "description": "A user or organization", - "properties": { - "avatar_url": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "blog": { - "description": "The website URL from the profile page", - "type": "string" - }, - "collaborators": { - "type": "integer" - }, - "company": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "disk_usage": { - "type": "integer" - }, - "email": { - "description": "Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile).", - "type": "string" - }, - "followers": { - "type": "integer" - }, - "followers_url": { - "type": "string" - }, - "following": { - "type": "integer" - }, - "following_url": { - "type": "string" - }, - "gists_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "location": { - "type": "string" - }, - "login": { - "description": "The account username", - "type": "string" - }, - "name": { - "description": "The full account name", - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "owned_private_repos": { - "type": "integer" - }, - "plan": { - "properties": { - "collaborators": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "private_repos": { - "type": "integer" - }, - "space": { - "type": "integer" - } - }, - "type": "object" - }, - "private_gists": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "public_repos": { - "type": "integer" - }, - "starred_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "total_private_repos": { - "type": "integer" - }, - "type": { - "enum": ["User", "Organization"] - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "asset": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "number" - }, - "id": { - "type": "number" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "number" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "assetPatch": { - "properties": { - "label": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "assets": { - "items": { - "$ref": "#/definitions/asset" - }, - "type": "array" - }, - "assignees": { - "items": { - "$ref": "#/definitions/user" - }, - "type": "array" - }, - "blob": { - "properties": { - "content": { - "type": "string" - }, - "encoding": { - "enum": ["utf-8", "base64"] - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - }, - "blobs": { - "properties": { - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "branch": { - "properties": { - "_links": { - "properties": { - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "branches": { - "items": { - "properties": { - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "codeFrequencyStats": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "comment": { - "properties": { - "body": { - "type": "string" - } - }, - "type": "object" - }, - "commentBody": { - "properties": { - "body": { - "type": "string" - } - }, - "required": ["body"], - "type": "object" - }, - "comments": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "files": { - "items": { - "properties": { - "additions": { - "type": "integer" - }, - "blob_url": { - "type": "string" - }, - "changes": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "patch": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "stats": { - "properties": { - "additions": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "commitActivityStats": { - "items": { - "properties": { - "days": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "total": { - "type": "integer" - }, - "week": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - }, - "commitComment": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "commitCommentBody": { - "properties": { - "body": { - "type": "string" - }, - "line": { - "description": "Deprecated - Use position parameter instead.", - "type": "string" - }, - "number": { - "description": "Line number in the file to comment on. Defaults to null.", - "type": "string" - }, - "path": { - "description": "Relative path of the file to comment on.", - "type": "string" - }, - "position": { - "description": "Line index in the diff to comment on.", - "type": "integer" - }, - "sha": { - "description": "SHA of the commit to comment on.", - "type": "string" - } - }, - "required": ["sha", "body"], - "type": "object" - }, - "commits": { - "items": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "compare-commits": { - "properties": { - "ahead_by": { - "type": "integer" - }, - "base_commit": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "behind_by": { - "type": "integer" - }, - "commits": { - "items": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "diff_url": { - "type": "string" - }, - "files": { - "items": { - "properties": { - "additions": { - "type": "integer" - }, - "blob_url": { - "type": "string" - }, - "changes": { - "type": "integer" - }, - "contents_url": { - "type": "string" - }, - "deletions": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "patch": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "permalink_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "total_commits": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "contents-path": { - "properties": { - "_links": { - "properties": { - "git": { - "type": "string" - }, - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "contributorsStats": { - "items": { - "properties": { - "author": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "total": { - "description": "The Total number of commits authored by the contributor.", - "type": "integer" - }, - "weeks": { - "items": { - "properties": { - "a": { - "description": "Number of additions.", - "type": "integer" - }, - "c": { - "description": "Number of commits.", - "type": "integer" - }, - "d": { - "description": "Number of deletions.", - "type": "integer" - }, - "w": { - "description": "Start of the week.", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "createFile": { - "properties": { - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "properties": { - "_links": { - "properties": { - "git": { - "type": "string" - }, - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "createFileBody": { - "properties": { - "committer": { - "properties": { - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "deleteFile": { - "properties": { - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "html_url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "parents": { - "properties": { - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "content": { - "type": "string" - } - }, - "type": "object" - }, - "deleteFileBody": { - "properties": { - "committer": { - "properties": { - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "deployment": { - "properties": { - "description": { - "type": "string" - }, - "payload": { - "properties": { - "deploy_user": { - "type": "string" - }, - "environment": { - "type": "string" - }, - "room_id": { - "type": "number" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - } - }, - "type": "object" - }, - "deployment-resp": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "deployment-statuses": { - "items": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "deployment-statuses-create": { - "properties": { - "description": { - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - } - }, - "type": "object" - }, - "download": { - "properties": { - "content_type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "downloads": { - "items": { - "$ref": "#/definitions/download" - }, - "type": "array" - }, - "editTeam": { - "properties": { - "name": { - "type": "string" - }, - "permission": { - "enum": ["pull", "push", "admin"] - } - }, - "required": ["name"], - "type": "object" - }, - "emailsPost": { - "items": { - "type": "string" - }, - "type": "array" - }, - "emojis": { - "additionalProperties": { - "description": "A URL for an image representing this emoji", - "type": "string" - }, - "type": "object" - }, - "event": { - "properties": { - "actor": { - "$ref": "#/definitions/actor" - }, - "created_at": { - "type": "object" - }, - "id": { - "type": "integer" - }, - "org": { - "$ref": "#/definitions/organization" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "public": { - "type": "boolean" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "events": { - "items": { - "$ref": "#/definitions/event" - }, - "type": "array" - }, - "feeds": { - "properties": { - "_links": { - "properties": { - "current_user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_actor": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_organization": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_public": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "timeline": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - } - } - }, - "current_user_actor_url": { - "type": "string" - }, - "current_user_organization_url": { - "type": "string" - }, - "current_user_public": { - "type": "string" - }, - "current_user_url": { - "type": "string" - }, - "timeline_url": { - "type": "string" - }, - "user_url": { - "type": "string" - } - }, - "type": "object" - }, - "forkBody": { - "properties": { - "organization": { - "type": "string" - } - }, - "type": "object" - }, - "forks": { - "$ref": "#/definitions/repos" - }, - "gist": { - "properties": { - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "description": { - "type": "string" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "forks": { - "items": { - "properties": { - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "history": { - "items": { - "properties": { - "change_status": { - "properties": { - "additions": { - "type": "integer" - }, - "deletions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "committed_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - }, - "version": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "gists": { - "items": { - "properties": { - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - }, - "size": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "gitCommit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "type": "string" - }, - "tree": { - "type": "string" - } - }, - "type": "object" - }, - "gitRefPatch": { - "properties": { - "force": { - "type": "boolean" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "gitignore": { - "items": {}, - "type": "array" - }, - "gitignore-lang": { - "properties": { - "name": { - "type": "string" - }, - "source": { - "type": "string" - } - }, - "type": "object" - }, - "headBranch": { - "properties": { - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "hook": { - "items": { - "properties": { - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "content_type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "events": { - "items": { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - }, - "type": "array" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "hookBody": { - "properties": { - "active": { - "type": "boolean" - }, - "add_events": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "issue": { - "properties": { - "assignee": { - "type": "string" - }, - "body": { - "type": "string" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "milestone": { - "type": "number" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "issueEvent": { - "properties": { - "actor": { - "$ref": "#/definitions/actor" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "event": { - "type": "string" - }, - "issue": { - "properties": { - "assignee": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "issueEvents": { - "items": { - "$ref": "#/definitions/issueEvent" - }, - "type": "array" - }, - "issues": { - "items": { - "properties": { - "assignee": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "issuesComment": { - "properties": { - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "issuesComments": { - "items": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "keys": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "label": { - "properties": { - "color": { - "maxLength": 6, - "minLength": 6, - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": { - "items": { - "properties": { - "color": { - "maxLength": 6, - "minLength": 6, - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "languages": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "markdown": { - "properties": { - "context": { - "type": "string" - }, - "mode": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "merge": { - "properties": { - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "mergePullBody": { - "properties": { - "commit_message": { - "type": "string" - } - }, - "type": "object" - }, - "mergesBody": { - "properties": { - "base": { - "type": "string" - }, - "commit_message": { - "type": "string" - }, - "head": { - "type": "string" - } - }, - "type": "object" - }, - "mergesConflict": { - "properties": { - "message": { - "description": "Error message", - "type": "string" - } - }, - "type": "object" - }, - "mergesSuccessful": { - "properties": { - "author": { - "$ref": "#/definitions/user" - }, - "comments_url": { - "type": "string" - }, - "commit": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "comment_count": { - "type": "integer" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "$ref": "#/definitions/user" - }, - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "meta": { - "properties": { - "git": { - "items": { - "description": "An Array of IP addresses in CIDR format specifying the Git servers at GitHub.", - "type": "string" - }, - "type": "array" - }, - "hooks": { - "items": { - "description": "An Array of IP addresses in CIDR format specifying the addresses that incoming service hooks will originate from.", - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestoneUpdate": { - "properties": { - "description": { - "type": "string" - }, - "due_on": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "notificationMarkRead": { - "properties": { - "last_read_at": { - "type": "string" - } - }, - "type": "object" - }, - "notifications": { - "properties": { - "id": { - "type": "integer" - }, - "last_read_at": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "repository": { - "properties": { - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "full_name": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "private": { - "type": "boolean" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "subject": { - "properties": { - "latest_comment_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "unread": { - "type": "boolean" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "orgTeamsPost": { - "properties": { - "name": { - "type": "string" - }, - "permission": { - "enum": ["pull", "push", "admin"] - }, - "repo_names": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": ["name"], - "type": "object" - }, - "organization": { - "allOf": [ - { - "$ref": "#/definitions/actor" - }, - { - "description": "A GitHub organization" - } - ], - "type": "object" - }, - "organizationAsTeamMember": { - "properties": { - "errors": { - "items": { - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "resource": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "participationStats": { - "properties": { - "all": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "owner": { - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "patchGist": { - "properties": { - "description": { - "type": "string" - }, - "files": { - "properties": { - "delete_this_file.txt": { - "type": "string" - }, - "file1.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "new_file.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "old_name.txt": { - "properties": { - "content": { - "type": "string" - }, - "filename": { - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "type": "object" - }, - "patchOrg": { - "properties": { - "billing_email": { - "description": "Billing email address. This address is not publicized.", - "type": "string" - }, - "company": { - "type": "string" - }, - "email": { - "description": "Publicly visible email address.", - "type": "string" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "postGist": { - "properties": { - "description": { - "type": "string" - }, - "files": { - "properties": { - "file1.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "public": { - "type": "boolean" - } - }, - "type": "object" - }, - "postRepo": { - "properties": { - "auto_init": { - "description": "True to create an initial commit with empty README. Default is false.", - "type": "boolean" - }, - "description": { - "type": "string" - }, - "gitignore_template": { - "description": "Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, \"Haskell\" Ignored if auto_init parameter is not provided. ", - "type": "string" - }, - "has_downloads": { - "description": "True to enable downloads for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_issues": { - "description": "True to enable issues for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_wiki": { - "description": "True to enable the wiki for this repository, false to disable it. Default is true.", - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "name": { - "type": "string" - }, - "private": { - "description": "True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account.", - "type": "boolean" - }, - "team_id": { - "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.", - "type": "integer" - } - }, - "required": ["name"], - "type": "object" - }, - "pullRequest": { - "properties": { - "_links": { - "properties": { - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "additions": { - "type": "integer" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "changed_files": { - "type": "integer" - }, - "closed_at": { - "type": "string" - }, - "comments": { - "type": "integer" - }, - "commits": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "deletions": { - "type": "integer" - }, - "diff_url": { - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "merge_commit_sha": { - "type": "string" - }, - "mergeable": { - "type": "boolean" - }, - "merged": { - "type": "boolean" - }, - "merged_at": { - "type": "string" - }, - "merged_by": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "number": { - "type": "integer" - }, - "patch_url": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "pullUpdate": { - "properties": { - "body": { - "type": "string" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "pulls": { - "items": { - "properties": { - "_links": { - "properties": { - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "repo": { - "$ref": "#/definitions/repo" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "html_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "number": { - "type": "integer" - }, - "patch_url": { - "type": "string" - }, - "state": { - "enum": ["open", "closed"] - }, - "title": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "pullsComment": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "pullsCommentPost": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "number" - } - }, - "type": "object" - }, - "pullsComments": { - "items": { - "properties": { - "_links": { - "properties": { - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "id": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "pullsPost": { - "properties": { - "base": { - "type": "string" - }, - "body": { - "type": "string" - }, - "head": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "putSubscription": { - "properties": { - "created_at": { - "type": "string" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "object" - }, - "subscribed": { - "type": "boolean" - }, - "thread_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "rate_limit": { - "properties": { - "rate": { - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset": { - "type": "integer" - } - } - } - }, - "type": "object" - }, - "ref": { - "items": { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "creator": { - "properties": { - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "refStatus": { - "items": { - "properties": { - "commit_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "repository_url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "state": { - "type": "string" - }, - "statuses": { - "items": { - "properties": { - "context": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "number" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "refs": { - "items": { - "properties": { - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ref": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "refsBody": { - "properties": { - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "release": { - "properties": { - "assets": { - "items": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "assets_url": { - "type": "string" - }, - "author": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "tag_name": { - "type": "string" - }, - "tarball_url": { - "type": "string" - }, - "target_commitish": { - "type": "string" - }, - "upload_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "zipball_url": { - "type": "string" - } - }, - "type": "object" - }, - "release-create": { - "properties": { - "body": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "tag_name": { - "type": "string" - }, - "target_commitish": { - "type": "string" - } - }, - "type": "object" - }, - "releases": { - "items": { - "properties": { - "assets": { - "items": { - "properties": { - "content_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "download_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/user" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "assets_url": { - "type": "string" - }, - "author": { - "$ref": "#/definitions/user" - }, - "body": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "draft": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "prerelease": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "tag_name": { - "type": "string" - }, - "tarball_url": { - "type": "string" - }, - "target_commitish": { - "type": "string" - }, - "upload_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "zipball_url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "repo": { - "properties": { - "clone_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "full_name": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "has_downloads": { - "type": "boolean" - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "master_branch": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "organization": { - "$ref": "#/definitions/organization" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "parent": { - "allOf": [ - { - "$ref": "#/definitions/repo" - }, - { - "description": "Is present when the repo is a fork. Parent is the repo this repo was forked from." - } - ] - }, - "private": { - "type": "boolean" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "size": { - "type": "integer" - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/repo" - }, - { - "description": "Is present when the repo is a fork. Source is the ultimate source for the network." - } - ] - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - } - }, - "type": "object" - }, - "repo-deployments": { - "items": { - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/user" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "payload": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "repoComments": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "repoCommit": { - "properties": { - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "sha": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repoCommitBody": { - "properties": { - "author": { - "properties": { - "date": { - "type": "string" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "parents": { - "items": { - "type": "string" - }, - "type": "array" - }, - "tree": { - "type": "string" - } - }, - "required": ["message", "parents", "tree"], - "type": "object" - }, - "repoEdit": { - "properties": { - "description": { - "type": "string" - }, - "has_downloads": { - "type": "boolean" - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "homepage": { - "type": "string" - }, - "name": { - "type": "string" - }, - "private": { - "type": "boolean" - } - }, - "type": "object" - }, - "repos": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - }, - "search-code": { - "properties": { - "items": { - "items": { - "properties": { - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "repository": { - "properties": { - "archive_url": { - "type": "string" - }, - "assignees_url": { - "type": "string" - }, - "blobs_url": { - "type": "string" - }, - "branches_url": { - "type": "string" - }, - "collaborators_url": { - "type": "string" - }, - "comments_url": { - "type": "string" - }, - "commits_url": { - "type": "string" - }, - "compare_url": { - "type": "string" - }, - "contents_url": { - "type": "string" - }, - "contributors_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "downloads_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "forks_url": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "git_commits_url": { - "type": "string" - }, - "git_refs_url": { - "type": "string" - }, - "git_tags_url": { - "type": "string" - }, - "hooks_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "issue_comment_url": { - "type": "string" - }, - "issue_events_url": { - "type": "string" - }, - "issues_url": { - "type": "string" - }, - "keys_url": { - "type": "string" - }, - "labels_url": { - "type": "string" - }, - "languages_url": { - "type": "string" - }, - "merges_url": { - "type": "string" - }, - "milestones_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "notifications_url": { - "type": "string" - }, - "owner": { - "$ref": "#/definitions/actor" - }, - "private": { - "type": "boolean" - }, - "pulls_url": { - "type": "string" - }, - "stargazers_url": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "subscribers_url": { - "type": "string" - }, - "subscription_url": { - "type": "string" - }, - "tags_url": { - "type": "string" - }, - "teams_url": { - "type": "string" - }, - "trees_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "score": { - "type": "number" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-issues": { - "properties": { - "items": { - "items": { - "properties": { - "assignee": { - "type": "null" - }, - "body": { - "type": "string" - }, - "closed_at": { - "type": "null" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "labels": { - "items": { - "properties": { - "color": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "labels_url": { - "type": "string" - }, - "milestone": { - "type": "null" - }, - "number": { - "type": "integer" - }, - "pull_request": { - "properties": { - "diff_url": { - "type": "null" - }, - "html_url": { - "type": "null" - }, - "patch_url": { - "type": "null" - } - }, - "type": "object" - }, - "score": { - "type": "number" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-issues-by-keyword": { - "properties": { - "issues": { - "items": { - "properties": { - "body": { - "type": "string" - }, - "comments": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "number": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "user": { - "type": "string" - }, - "votes": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "search-repositories": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-repositories-by-keyword": { - "properties": { - "repositories": { - "items": { - "$ref": "#/definitions/repo" - }, - "type": "array" - } - }, - "type": "object" - }, - "search-user-by-email": { - "properties": { - "user": { - "$ref": "#/definitions/user" - } - }, - "type": "object" - }, - "search-users": { - "properties": { - "items": { - "$ref": "#/definitions/users" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "search-users-by-keyword": { - "properties": { - "users": { - "$ref": "#/definitions/users" - } - }, - "type": "object" - }, - "subscription": { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "repository_url": { - "type": "string" - }, - "subscribed": { - "type": "boolean" - }, - "thread_url": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "subscriptionBody": { - "properties": { - "ignored": { - "type": "boolean" - }, - "subscribed": { - "type": "boolean" - } - }, - "type": "object" - }, - "tag": { - "properties": { - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "properties": { - "sha": { - "type": "string" - }, - "type": { - "description": "String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob.", - "enum": ["commit", "tree", "blob"] - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sha": { - "type": "string" - }, - "tag": { - "description": "The tag's name. This is typically a version (e.g., \"v0.0.1\").", - "type": "string" - }, - "tagger": { - "properties": { - "date": { - "description": "Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tagBody": { - "properties": { - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "description": "String of the SHA of the git object this is tagging.", - "type": "string" - }, - "tag": { - "description": "The tag's name. This is typically a version (e.g., \"v0.0.1\").", - "type": "string" - }, - "tagger": { - "properties": { - "date": { - "description": "Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - } - }, - "type": "object" - }, - "type": { - "description": "String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob.", - "enum": ["commit", "tree", "blob"] - } - }, - "required": ["tag", "message", "object", "type", "tagger"], - "type": "object" - }, - "tags": { - "items": { - "$ref": "#/definitions/tag" - }, - "type": "array" - }, - "team": { - "properties": { - "id": { - "type": "integer" - }, - "members_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "permission": { - "type": "string" - }, - "repos_count": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "teamMembership": { - "properties": { - "state": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "teamRepos": { - "$ref": "#/definitions/repos" - }, - "teams": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "teams-list": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "members_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "organization": { - "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "permission": { - "type": "string" - }, - "repos_count": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "tree": { - "items": { - "properties": { - "mode": { - "description": "One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink.", - "enum": ["100644", "100755", "040000", "160000", "120000"], - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "description": "SHA1 checksum ID of the object in the tree.", - "type": "string" - }, - "size": { - "type": "integer" - }, - "type": { - "enum": ["blob", "tree", "commit"], - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "trees": { - "properties": { - "base_tree": { - "type": "string" - }, - "sha": { - "description": "SHA1 checksum ID of the object in the tree.", - "type": "string" - }, - "tree": { - "items": { - "$ref": "#/definitions/tree" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/actor" - }, - { - "description": "A GitHub user" - } - ], - "type": "object" - }, - "user-emails": { - "items": { - "type": "string" - }, - "type": "array" - }, - "user-keys-keyId": { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "user-keys-post": { - "properties": { - "key": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "user-update": { - "properties": { - "bio": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "company": { - "type": "string" - }, - "email": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "users": { - "items": { - "$ref": "#/definitions/user" - }, - "type": "array" - } - } -} diff --git a/tests/spec/templates/schema.ts b/tests/spec/templates/schema.ts deleted file mode 100644 index 06022066..00000000 --- a/tests/spec/templates/schema.ts +++ /dev/null @@ -1,6710 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -/** - * A user or organization - */ -export interface Actor { - avatar_url?: string; - bio?: string; - /** The website URL from the profile page */ - blog?: string; - collaborators?: number; - company?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - disk_usage?: number; - /** Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). */ - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - /** The account username */ - login?: string; - /** The full account name */ - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -} - -export interface Asset { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; -} - -export interface AssetPatch { - label?: string; - name: string; -} - -export type Assets = Asset[]; - -export type Assignees = User[]; - -export interface Blob { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface Blobs { - sha?: string; -} - -export interface Branch { - _links?: { - html?: string; - self?: string; - }; - commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type Branches = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type CodeFrequencyStats = number[]; - -export interface Comment { - body?: string; -} - -export interface CommentBody { - body: string; -} - -export type Comments = { - body?: string; - /** ISO 8601. */ - created_at?: string; - id?: number; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface Commit { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type CommitActivityStats = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface CommitComment { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export interface CommitCommentBody { - body: string; - /** Deprecated - Use position parameter instead. */ - line?: string; - /** Line number in the file to comment on. Defaults to null. */ - number?: string; - /** Relative path of the file to comment on. */ - path?: string; - /** Line index in the diff to comment on. */ - position?: number; - /** SHA of the commit to comment on. */ - sha: string; -} - -export type Commits = { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface CompareCommits { - ahead_by?: number; - base_commit?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - /** A GitHub user */ - author?: User; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface ContentsPath { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type ContributorsStats = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - /** The Total number of commits authored by the contributor. */ - total?: number; - weeks?: { - /** Number of additions. */ - a?: number; - /** Number of commits. */ - c?: number; - /** Number of deletions. */ - d?: number; - /** Start of the week. */ - w?: string; - }[]; -}[]; - -export interface CreateFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface CreateFileBody { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface DeleteFile { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface DeleteFileBody { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface Deployment { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface DeploymentResp { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type DeploymentStatuses = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface DeploymentStatusesCreate { - description?: string; - state?: string; - target_url?: string; -} - -export interface Download { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type Downloads = Download[]; - -export interface EditTeam { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type EmailsPost = string[]; - -export type Emojis = Record; - -export interface Event { - /** A user or organization */ - actor?: Actor; - created_at?: object; - id?: number; - /** A GitHub organization */ - org?: Organization; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type Events = Event[]; - -export interface Feeds { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface ForkBody { - organization?: string; -} - -export type Forks = Repos; - -export interface Gist { - comments?: number; - comments_url?: string; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - created_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - /** Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. */ - committed_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type Gists = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface GitCommit { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface GitRefPatch { - force?: boolean; - sha?: string; -} - -export type Gitignore = any[]; - -export interface GitignoreLang { - name?: string; - source?: string; -} - -export interface HeadBranch { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type Hook = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export interface HookBody { - active?: boolean; - add_events?: string[]; -} - -export interface Issue { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface IssueEvent { - /** A user or organization */ - actor?: Actor; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - event?: string; - issue?: { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }; - url?: string; -} - -export type IssueEvents = IssueEvent[]; - -export type Issues = { - /** A GitHub user */ - assignee?: User; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - comments?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface IssuesComment { - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -} - -export type IssuesComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export type Keys = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface Label { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type Labels = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type Languages = Record; - -export interface Markdown { - context?: string; - mode?: string; - text?: string; -} - -export interface Merge { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface MergePullBody { - commit_message?: string; -} - -export interface MergesBody { - base?: string; - commit_message?: string; - head?: string; -} - -export interface MergesConflict { - /** Error message */ - message?: string; -} - -export interface MergesSuccessful { - /** A GitHub user */ - author?: User; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - /** A GitHub user */ - committer?: User; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface Meta { - git?: string[]; - hooks?: string[]; -} - -export interface Milestone { - closed_issues?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface MilestoneUpdate { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface NotificationMarkRead { - last_read_at?: string; -} - -export interface Notifications { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface OrgTeamsPost { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -/** - * A GitHub organization - */ -export type Organization = Actor; - -export interface OrganizationAsTeamMember { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface ParticipationStats { - all?: number[]; - owner?: number[]; -} - -export interface PatchGist { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface PatchOrg { - /** Billing email address. This address is not publicized. */ - billing_email?: string; - company?: string; - /** Publicly visible email address. */ - email?: string; - location?: string; - name?: string; -} - -export interface PostGist { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface PostRepo { - /** True to create an initial commit with empty README. Default is false. */ - auto_init?: boolean; - description?: string; - /** Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, "Haskell" Ignored if auto_init parameter is not provided. */ - gitignore_template?: string; - /** True to enable downloads for this repository, false to disable them. Default is true. */ - has_downloads?: boolean; - /** True to enable issues for this repository, false to disable them. Default is true. */ - has_issues?: boolean; - /** True to enable the wiki for this repository, false to disable it. Default is true. */ - has_wiki?: boolean; - homepage?: string; - name: string; - /** True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account. */ - private?: boolean; - /** The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. */ - team_id?: number; -} - -export interface PullRequest { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullUpdate { - body?: string; - state?: string; - title?: string; -} - -export type Pulls = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - closed_at?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: Repo; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsComment { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface PullsCommentPost { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type PullsComments = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - id?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface PullsPost { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface PutSubscription { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface RateLimit { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type Ref = { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; -}[]; - -export type RefStatus = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type Refs = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface RefsBody { - ref?: string; - sha?: string; -} - -export interface Release { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface ReleaseCreate { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type Releases = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - /** A GitHub user */ - uploader?: User; - url?: string; - }[]; - assets_url?: string; - /** A GitHub user */ - author?: User; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface Repo { - clone_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - /** A GitHub organization */ - organization?: Organization; - /** A user or organization */ - owner?: Actor; - /** Is present when the repo is a fork. Parent is the repo this repo was forked from. */ - parent?: Repo; - private?: boolean; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - pushed_at?: string; - size?: number; - /** Is present when the repo is a fork. Source is the ultimate source for the network. */ - source?: Repo; - ssh_url?: string; - svn_url?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type RepoDeployments = { - created_at?: string; - /** A GitHub user */ - creator?: User; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type RepoComments = { - body?: string; - commit_id?: string; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; -}[]; - -export interface RepoCommit { - author?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - committer?: { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface RepoCommitBody { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface RepoEdit { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type Repos = Repo[]; - -export interface SearchCode { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - /** A user or organization */ - owner?: Actor; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SearchIssues { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - /** A GitHub user */ - user?: User; - }[]; - total_count?: number; -} - -export interface SearchIssuesByKeyword { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SearchRepositories { - items?: Repo[]; - total_count?: number; -} - -export interface SearchRepositoriesByKeyword { - repositories?: Repo[]; -} - -export interface SearchUserByEmail { - /** A GitHub user */ - user?: User; -} - -export interface SearchUsers { - items?: Users; - total_count?: number; -} - -export interface SearchUsersByKeyword { - users?: Users; -} - -export interface Subscription { - /** ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SubscriptionBody { - ignored?: boolean; - subscribed?: boolean; -} - -export interface Tag { - /** String of the tag message. */ - message?: string; - object?: { - sha?: string; - /** String of the type of the tagged object. Normally this is a commit but it can also be a tree or a blob. */ - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag?: string; - tagger?: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - url?: string; -} - -export interface TagBody { - /** String of the tag message. */ - message: string; - /** String of the SHA of the git object this is tagging. */ - object: string; - /** The tag's name. This is typically a version (e.g., "v0.0.1"). */ - tag: string; - tagger: { - /** Timestamp of when this object was tagged, in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ */ - date?: string; - /** String of the email of the author of the tag. */ - email?: string; - /** String of the name of the author of the tag. */ - name?: string; - }; - /** String of the type of the object we’re tagging. Normally this is a commit but it can also be a tree or a blob. */ - type: "commit" | "tree" | "blob"; -} - -export type Tags = Tag[]; - -export interface Team { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface TeamMembership { - state?: string; - url?: string; -} - -export type TeamRepos = Repos; - -export type Teams = { - id?: number; - name?: string; - url?: string; -}[]; - -export type TeamsList = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface Tree { - sha?: string; - tree?: { - /** One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink. */ - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface Trees { - base_tree?: string; - /** SHA1 checksum ID of the object in the tree. */ - sha?: string; - tree?: Tree[]; - url?: string; -} - -/** - * A GitHub user - */ -export type User = Actor; - -export type UserEmails = string[]; - -export interface UserKeysKeyId { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface UserKeysPost { - key?: string; - title?: string; -} - -export interface UserUpdate { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type Users = User[]; - -/* CUSTOM TEMPLATE */ - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/* HTTP CLIENT TEMPLATE */ - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - * - * Powerful collaboration, code review, and code management for open source and private projects. - */ -export class Api extends HttpClient { - emojis = { - /** - * @description Lists all the emojis available to use on GitHub. - * - * @name EmojisList - * @request GET:/emojis - */ - emojisList: (params: RequestParams = {}) => - this.request({ - path: `/emojis`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - events = { - /** - * @description List public events. - * - * @name EventsList - * @request GET:/events - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - feeds = { - /** - * @description List Feeds. GitHub provides several timeline resources in Atom format. The Feeds API lists all the feeds available to the authenticating user. - * - * @name FeedsList - * @request GET:/feeds - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - gists = { - /** - * @description List the authenticated user's gists or if called anonymously, this will return all public gists. - * - * @name GistsList - * @request GET:/gists - */ - gistsList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a gist. - * - * @name GistsCreate - * @request POST:/gists - */ - gistsCreate: (body: PostGist, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all public gists. - * - * @name PublicList - * @request GET:/gists/public - */ - publicList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List the authenticated user's starred gists. - * - * @name StarredList - * @request GET:/gists/starred - */ - starredList: ( - query?: { - /** - * Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - * Only gists updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a gist. - * - * @name GistsDelete - * @request DELETE:/gists/{id} - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single gist. - * - * @name GistsDetail - * @request GET:/gists/{id} - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a gist. - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - */ - gistsPartialUpdate: (id: number, body: PatchGist, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on a gist. - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a commen - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - */ - commentsCreate: (id: number, body: CommentBody, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - */ - commentsPartialUpdate: (id: number, commentId: number, body: Comment, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Fork a gist. - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unstar a gist. - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a gist is starred. - * - * @name StarDetail - * @request GET:/gists/{id}/star - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Star a gist. - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - gitignore = { - /** - * @description Listing available templates. List all templates available to pass as an option when creating a repository. - * - * @name TemplatesList - * @request GET:/gitignore/templates - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single template. - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - issues = { - /** - * @description List issues. List all issues across all the authenticated user's visible repositories. - * - * @name IssuesList - * @request GET:/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - legacy = { - /** - * @description Find issues by state and keyword. - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find repositories by keyword. Note, this legacy method does not follow the v3 pagination pattern. This method returns up to 100 results per page and pages can be fetched using the start_page parameter. - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** Filter results by language */ - language?: string; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description This API call is added for compatibility reasons only. - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find users by keyword. - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - */ - userSearchDetail: ( - keyword: string, - query?: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The page number to fetch */ - start_page?: string; - /** The sort field. One of stars, forks, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - markdown = { - /** - * @description Render an arbitrary Markdown document - * - * @name MarkdownCreate - * @request POST:/markdown - */ - markdownCreate: (body: Markdown, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Render a Markdown document in raw mode - * - * @name PostMarkdown - * @request POST:/markdown/raw - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - meta = { - /** - * @description This gives some information about GitHub.com, the service. - * - * @name MetaList - * @request GET:/meta - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - networks = { - /** - * @description List public events for a network of repositories. - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - notifications = { - /** - * @description List your notifications. List all notifications for the current user, grouped by repository. - * - * @name NotificationsList - * @request GET:/notifications - */ - notificationsList: ( - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark as read. Marking a notification as "read" removes it from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/notifications - */ - notificationsUpdate: (body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description View a single thread. - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark a thread as read - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Thread Subscription. - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Thread Subscription. - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Set a Thread Subscription. This lets you subscribe to a thread, or ignore it. Subscribing to a thread is unnecessary if the user is already subscribed to the repository. Ignoring a thread will mute all future notifications (until you comment or get @mentioned). - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - */ - threadsSubscriptionUpdate: (id: number, body: PutSubscription, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - orgs = { - /** - * @description Get an Organization. - * - * @name OrgsDetail - * @request GET:/orgs/{org} - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit an Organization. - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - */ - orgsPartialUpdate: (org: string, body: PatchOrg, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public events for an organization. - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues. List all issues for a given organization for the authenticated user. - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - */ - issuesDetail: ( - org: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Members list. List all users who are members of an organization. A member is a user tha belongs to at least 1 team in the organization. If the authenticated user is also an owner of this organization then both concealed and public members will be returned. If the requester is not an owner of the organization the query will be redirected to the public members list. - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove a member. Removing a user from this list will remove them from all teams and they will no longer have any access to the organization's repositories. - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a user is, publicly or privately, a member of the organization. - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Public members list. Members of an organization can choose to have their membership publicized or not. - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Conceal a user's membership. - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check public membership. - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Publicize a user's membership. - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories for the specified org. - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - */ - reposCreate: (org: string, body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List teams. - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create team. In order to create a team, the authenticated user must be an owner of organization. - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - */ - teamsCreate: (org: string, body: OrgTeamsPost, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - rateLimit = { - /** - * @description Get your current rate limit status Note: Accessing this endpoint does not count against your rate limit. - * - * @name RateLimitList - * @request GET:/rate_limit - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - repos = { - /** - * @description Delete a Repository. Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get repository. - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit repository. - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - */ - reposPartialUpdate: (owner: string, repo: string, body: RepoEdit, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List assignees. This call lists all the available assignees (owner + collaborators) to which issues may be assigned. - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check assignee. You may also check to see if a particular user is an assignee for a repository. - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of branches - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get Branch - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List. When authenticating as an organization owner of an organization-owned repository, all organization owners are included in the list of collaborators. Otherwise, only users with access to the repository are returned in the collaborators list. - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove collaborator. - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if user is a collaborator - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add collaborator. - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commit comments for a repository. Comments are ordered by ascending ID. - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a commit comment - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single commit comment. - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a commit comment. - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commits on a repository. - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - /** Sha or branch to start listing commits from. */ - sha?: string; - /** Only commits containing this file path will be returned. */ - path?: string; - /** GitHub login, name, or email by which to filter by commit author. */ - author?: string; - /** ISO 8601 Date - Only commits before this date will be returned. */ - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the combined Status for a specific Ref The Combined status endpoint is currently available for developers to preview. During the preview period, the API may change without advance notice. Please see the blog post for full details. To access this endpoint during the preview period, you must provide a custom media type in the Accept header: application/vnd.github.she-hulk-preview+json - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single commit. - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments for a single commitList comments for a single commit. - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a commit comment. - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: CommitCommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Compare two commits - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a file. This method deletes a file in a repository. - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - */ - contentsDelete: (owner: string, repo: string, path: string, body: DeleteFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get contents. This method returns the contents of a file or directory in a repository. Files and symlinks support a custom media type for getting the raw content. Directories and submodules do not support custom media types. Note: This API supports files up to 1 megabyte in size. Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - /** The content path. */ - path?: string; - /** The String name of the Commit/Branch/Tag. Defaults to 'master'. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a file. - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - */ - contentsUpdate: (owner: string, repo: string, path: string, body: CreateFileBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of contributors. - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - /** Set to 1 or true to include anonymous contributors in results. */ - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with pull access can view deployments for a repository - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access can create a deployment for a given ref - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - */ - deploymentsCreate: (owner: string, repo: string, body: Deployment, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with pull access can view deployment statuses for a deployment - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Deployment Status Users with push access can create deployment statuses for a given deployment: - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: DeploymentStatusesCreate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. List downloads for a repository. - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. Delete a download. - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Deprecated. Get a single download. - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of repository events. - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List forks. - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a fork. Forking a Repository happens asynchronously. Therefore, you may have to wai a short period before accessing the git objects. If this takes longer than 5 minutes, be sure to contact Support. - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - */ - forksCreate: (owner: string, repo: string, body: ForkBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Blob. - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - */ - gitBlobsCreate: (owner: string, repo: string, body: Blob, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Blob. Since blobs can be any arbitrary binary data, the input and responses for the blob API takes an encoding parameter that can be either utf-8 or base64. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it. - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Commit. - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - */ - gitCommitsCreate: (owner: string, repo: string, body: RepoCommitBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Commit. - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get all References - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Reference - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - */ - gitRefsCreate: (owner: string, repo: string, body: RefsBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Reference Example: Deleting a branch: DELETE /repos/octocat/Hello-World/git/refs/heads/feature-a Example: Deleting a tag: DELETE /repos/octocat/Hello-World/git/refs/tags/v1.0 - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Reference - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a Reference - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - */ - gitRefsPartialUpdate: (owner: string, repo: string, ref: string, body: GitRefPatch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Tag Object. Note that creating a tag object does not create the reference that makes a tag in Git. If you want to create an annotated tag in Git, you have to do this call to create the tag object, and then create the refs/tags/[tag] reference. If you want to create a lightweight tag, you only have to create the tag reference - this call would be unnecessary. - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - */ - gitTagsCreate: (owner: string, repo: string, body: TagBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Tag. - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Tree. The tree creation API will take nested entries as well. If both a tree and a nested path modifying that tree are specified, it will overwrite the contents of that tree with the new path contents and write a new tree out. - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - */ - gitTreesCreate: (owner: string, repo: string, body: Tree, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Tree. - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - /** Get a Tree Recursively. (0 or 1) */ - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of hooks. - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a hook. - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - */ - hooksCreate: (owner: string, repo: string, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a hook. - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get single hook. - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a hook. - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - */ - hooksPartialUpdate: (owner: string, repo: string, hookId: number, body: HookBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Test a push hook. This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated. Note: Previously /repos/:owner/:repo/hooks/:id/tes - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues for a repository. - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create an issue. Any user with pull access to a repository can create an issue. - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - */ - issuesCreate: (owner: string, repo: string, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments in a repository. - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issue events for a repository. - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single event. - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single issue - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit an issue. Issue owners and users with push access can edit an issue. - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - */ - issuesPartialUpdate: (owner: string, repo: string, number: number, body: Issue, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on an issue. - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a comment. - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List events for an issue. - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove all labels from an issue. - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List labels on an issue. - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add labels to an issue. - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsCreate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Replace all labels for an issue. Sending an empty array ([]) will remove all Labels from the Issue. - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - */ - issuesLabelsUpdate: (owner: string, repo: string, number: number, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove a label from an issue. - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of keys. - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a key. - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - */ - keysCreate: (owner: string, repo: string, body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a key. - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a key - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all labels for this repository. - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a label. - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - */ - labelsCreate: (owner: string, repo: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a label. - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single label. - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a label. - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - */ - labelsPartialUpdate: (owner: string, repo: string, name: string, body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List languages. List languages for the specified repository. The value on the right of a language is the number of bytes of code written in that language. - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Perform a merge. - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - */ - mergesCreate: (owner: string, repo: string, body: MergesBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List milestones for a repository. - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a milestone. - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - */ - milestonesCreate: (owner: string, repo: string, body: MilestoneUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a milestone. - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single milestone. - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a milestone. - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: MilestoneUpdate, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get labels for every issue in a milestone. - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List your notifications in a repository List all notifications for the current user. - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - /** True to show notifications marked as read. */ - all?: boolean; - /** - * True to show only notifications in which the user is directly participating - * or mentioned. - */ - participating?: boolean; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Mark notifications as read in a repository. Marking all notifications in a repository as "read" removes them from the default view on GitHub.com. - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - */ - notificationsUpdate: (owner: string, repo: string, body: NotificationMarkRead, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List pull requests. - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** - * String to filter by state. - * @default "open" - */ - state?: "open" | "closed"; - /** - * Filter pulls by head user and branch name in the format of 'user:ref-name'. - * Example: github:new-script-format. - */ - head?: string; - /** Filter pulls by base branch name. Example - gh-pages. */ - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a pull request. - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - */ - pullsCreate: (owner: string, repo: string, body: PullsPost, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments in a repository. By default, Review Comments are ordered by ascending ID. - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - sort?: "created" | "updated"; - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a comment. - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single comment. - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a comment. - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: CommentBody, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single pull request. - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update a pull request. - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - */ - pullsPartialUpdate: (owner: string, repo: string, number: number, body: PullUpdate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List comments on a pull request. - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a comment. #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) description: | Alternative Input. Instead of passing commit_id, path, and position you can reply to an existing Pull Request Comment like this: body Required string in_reply_to Required number - Comment id to reply to. - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: PullsCommentPost, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List commits on a pull request. - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List pull requests files. - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get if a pull request has been merged. - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Merge a pull request (Merge Button's) - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - */ - pullsMergeUpdate: (owner: string, repo: string, number: number, body: MergePullBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the README. This method returns the preferred README for a repository. - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - /** The String name of the Commit/Branch/Tag. Defaults to master. */ - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository will receive all releases (i.e., published releases and draft releases). Users with pull access will receive published releases only - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a release Users with push access to the repository can create a release. - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - */ - releasesCreate: (owner: string, repo: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a release asset - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single release asset - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit a release asset Users with push access to the repository can edit a release asset. - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: AssetPatch, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository can delete a release. - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single release - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Users with push access to the repository can edit a release - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - */ - releasesPartialUpdate: (owner: string, repo: string, id: string, body: ReleaseCreate, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List assets for a release - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Stargazers. - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the number of additions and deletions per week. Returns a weekly aggregate of the number of additions and deletions pushed to a repository. - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the last year of commit activity data. Returns the last year of commit activity grouped by week. The days array is a group of commits per day, starting on Sunday. - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get contributors list with additions, deletions, and commit counts. - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the weekly commit count for the repo owner and everyone else. - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get the number of commits per hour in each day. Each array contains the day number, hour number, and number of commits 0-6 Sunday - Saturday 0-23 Hour of day Number of commits For example, [2, 14, 25] indicates that there were 25 total commits, during the 2.00pm hour on Tuesdays. All times are based on the time zone of individual commits. - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Statuses for a specific Ref. - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a Status. - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - */ - statusesCreate: (owner: string, repo: string, ref: string, body: HeadBranch, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List watchers. - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a Repository Subscription. - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a Repository Subscription. - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Set a Repository Subscription - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - */ - subscriptionUpdate: (owner: string, repo: string, body: SubscriptionBody, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of tags. - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get list of teams - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List Stargazers. New implementation. - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get archive link. This method will return a 302 to a URL to download a tarball or zipball archive for a repository. Please make sure your HTTP framework is configured to follow redirects or you will need to use the Location header to make a second GET request. Note: For private repositories, these links are temporary and expire quickly. - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - repositories = { - /** - * @description List all public repositories. This provides a dump of every public repository, in the order that they were created. Note: Pagination is powered exclusively by the since parameter. is the Link header to get the URL for the next page of repositories. - * - * @name RepositoriesList - * @request GET:/repositories - */ - repositoriesList: ( - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - search = { - /** - * @description Search code. - * - * @name CodeList - * @request GET:/search/code - */ - codeList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported code - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier - * you can restrict the search to just the file contents, the file path, - * or both. - * 'Languages' Searches code based on the language it's written in. - * 'Forks' Filters repositories based on the number of forks, and/or - * whether code from forked repositories should be included in the results - * at all. - * 'Size' Finds files that match a certain size (in bytes). - * 'Path' Specifies the path that the resulting file must be at. - * 'Extension' Matches files with a certain extension. - * 'Users' or 'Repositories' Limits searches to a specific user or repository. - */ - q: string; - /** - * Can only be 'indexed', which indicates how recently a file has been indexed - * by the GitHub search infrastructure. If not provided, results are sorted - * by best match. - */ - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Find issues by state and keyword. (This method returns up to 100 results per page.) - * - * @name IssuesList - * @request GET:/search/issues - */ - issuesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** The q search term can also contain any combination of the supported issue search qualifiers: */ - q: string; - /** The sort field. Can be comments, created, or updated. Default: results are sorted by best match. */ - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Search repositories. - * - * @name RepositoriesList - * @request GET:/search/repositories - */ - repositoriesList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported repository - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the repository name, description, readme, - * or any combination of these. - * 'Size' Finds repositories that match a certain size (in kilobytes). - * 'Forks' Filters repositories based on the number of forks, and/or whether - * forked repositories should be included in the results at all. - * 'Created' and 'Last Updated' Filters repositories based on times of - * creation, or when they were last updated. - * 'Users or Repositories' Limits searches to a specific user or repository. - * 'Languages' Searches repositories based on the language they are written in. - * 'Stars' Searches repositories based on the number of stars. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Search users. - * - * @name UsersList - * @request GET:/search/users - */ - usersList: ( - query: { - /** - * The sort field. if sort param is provided. Can be either asc or desc. - * @default "desc" - */ - order?: "desc" | "asc"; - /** - * The search terms. This can be any combination of the supported user - * search parameters: - * 'Search In' Qualifies which fields are searched. With this qualifier you - * can restrict the search to just the username, public email, full name, - * location, or any combination of these. - * 'Repository count' Filters users based on the number of repositories they - * have. - * 'Location' Filter users by the location indicated in their profile. - * 'Language' Search for users that have repositories that match a certain - * language. - * 'Created' Filter users based on when they joined. - * 'Followers' Filter users based on the number of followers they have. - */ - q: string; - /** If not provided, results are sorted by best match. */ - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - teams = { - /** - * @description Delete team. In order to delete a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get team. - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Edit team. In order to edit a team, the authenticated user must be an owner of the org that the team is associated with. - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - */ - teamsPartialUpdate: (teamId: number, body: EditTeam, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List team members. In order to list members in a team, the authenticated user must be a member of the team. - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The "Remove team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Remove team membership API instead. It allows you to remove both active and pending memberships. Remove team member. In order to remove a user from a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. NOTE This does not delete the user, it just remove them from the team. - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The "Get team member" API is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Get team membership API instead. It allows you to get both active and pending memberships. Get team member. In order to get if a user is a member of a team, the authenticated user mus be a member of the team. - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description The API (described below) is deprecated and is scheduled for removal in the next major version of the API. We recommend using the Add team membership API instead. It allows you to invite new organization members to your teams. Add team member. In order to add a user to a team, the authenticated user must have 'admin' permissions to the team or be an owner of the org that the team is associated with. - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Remove team membership. In order to remove a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. NOTE: This does not delete the user, it just removes their membership from the team. - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get team membership. In order to get a user's membership with a team, the authenticated user must be a member of the team or an owner of the team's organization. - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add team membership. In order to add a membership between a user and a team, the authenticated user must have 'admin' permissions to the team or be an owner of the organization that the team is associated with. If the user is already a part of the team's organization (meaning they're on at least one other team in the organization), this endpoint will add the user to the team. If the user is completely unaffiliated with the team's organization (meaning they're on none of the organization's teams), this endpoint will send an invitation to the user via email. This newly-created membership will be in the 'pending' state until the user accepts the invitation, at which point the membership will transition to the 'active' state and the user will be added as a member of the team. - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List team repos - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description In order to remove a repository from a team, the authenticated user must be an owner of the org that the team is associated with. NOTE: This does not delete the repository, it just removes it from the team. - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if a team manages a repository - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description In order to add a repository to a team, the authenticated user must be an owner of the org that the team is associated with. Also, the repository must be owned by the organization, or a direct fork of a repository owned by the organization. - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - user = { - /** - * @description Get the authenticated user. - * - * @name UserList - * @request GET:/user - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Update the authenticated user. - * - * @name UserPartialUpdate - * @request PATCH:/user - */ - userPartialUpdate: (body: UserUpdate, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete email address(es). You can include a single email address or an array of addresses. - * - * @name EmailsDelete - * @request DELETE:/user/emails - */ - emailsDelete: (body: UserEmails, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List email addresses for a user. In the final version of the API, this method will return an array of hashes with extended information for each email address indicating if the address has been verified and if it's primary email address for GitHub. Until API v3 is finalized, use the application/vnd.github.v3 media type to get other response format. - * - * @name EmailsList - * @request GET:/user/emails - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Add email address(es). You can post a single email address or an array of addresses. - * - * @name EmailsCreate - * @request POST:/user/emails - */ - emailsCreate: (body: EmailsPost, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List the authenticated user's followers - * - * @name FollowersList - * @request GET:/user/followers - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List who the authenticated user is following. - * - * @name FollowingList - * @request GET:/user/following - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unfollow a user. Unfollowing a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are following a user. - * - * @name FollowingDetail - * @request GET:/user/following/{username} - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Follow a user. Following a user requires the user to be logged in and authenticated with basic auth or OAuth with the user:follow scope. - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List issues. List all issues across owned and member repositories for the authenticated user. - * - * @name IssuesList - * @request GET:/user/issues - */ - issuesList: ( - query: { - /** - * Issues assigned to you / created by you / mentioning you / you're - * subscribed to updates for / All issues the authenticated user can see - * @default "all" - */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - /** String list of comma separated Label names. Example - bug,ui,@high. */ - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - /** - * Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Only issues updated at or after this time are returned. - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List your public keys. Lists the current user's keys. Management of public keys via the API requires that you are authenticated through basic auth, or OAuth with the 'user', 'write:public_key' scopes. - * - * @name KeysList - * @request GET:/user/keys - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a public key. - * - * @name KeysCreate - * @request POST:/user/keys - */ - keysCreate: (body: UserKeysPost, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Delete a public key. Removes a public key. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:public_key scope. - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single public key. - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public and private organizations for the authenticated user. - * - * @name OrgsList - * @request GET:/user/orgs - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories for the authenticated user. Note that this does not include repositories owned by organizations which the user can access. You can lis user organizations and list organization repositories separately. - * - * @name ReposList - * @request GET:/user/repos - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Create a new repository for the authenticated user. OAuth users must supply repo scope. - * - * @name ReposCreate - * @request POST:/user/repos - */ - reposCreate: (body: PostRepo, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being starred by the authenticated user. - * - * @name StarredList - * @request GET:/user/starred - */ - starredList: ( - query?: { - /** Ignored without 'sort' parameter. */ - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Unstar a repository - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are starring a repository. - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Star a repository. - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being watched by the authenticated user. - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Stop watching a repository - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if you are watching a repository. - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Watch a repository. - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all of the teams across all of the organizations to which the authenticated user belongs. This method requires user or repo scope when authenticating via OAuth. - * - * @name TeamsList - * @request GET:/user/teams - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; - users = { - /** - * @description Get all users. This provides a dump of every user, in the order that they signed up for GitHub. Note: Pagination is powered exclusively by the since parameter. Use the Link header to get the URL for the next page of users. - * - * @name UsersList - * @request GET:/users - */ - usersList: ( - query?: { - /** The integer ID of the last user that you've seen. */ - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Get a single user. - * - * @name UsersDetail - * @request GET:/users/{username} - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. - * - * @name EventsDetail - * @request GET:/users/{username}/events - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description This is the user's organization dashboard. You must be authenticated as the user to view this. - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List a user's followers - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description Check if one user follows another. - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List a users gists. - * - * @name GistsDetail - * @request GET:/users/{username}/gists - */ - gistsDetail: ( - username: string, - query?: { - /** - * The time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - * Example: "2012-10-09T23:39:01Z". - */ - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public keys for a user. Lists the verified public keys for a user. This is accessible by anyone. - * - * @name KeysDetail - * @request GET:/users/{username}/keys - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List all public organizations for a user. - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description These are events that you'll only see public events. - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public events that a user has received - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List public repositories for the specified user. - * - * @name ReposDetail - * @request GET:/users/{username}/repos - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being starred by a user. - * - * @name StarredDetail - * @request GET:/users/{username}/starred - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - - /** - * @description List repositories being watched by a user. - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - - /* CUSTOM TEMPLATE */ - }; -} - -/* CUSTOM TEMPLATE */ diff --git a/tests/spec/templates/spec_templates/api.eta b/tests/spec/templates/spec_templates/api.eta deleted file mode 100644 index bcd21d95..00000000 --- a/tests/spec/templates/spec_templates/api.eta +++ /dev/null @@ -1,63 +0,0 @@ -<% -const { apiConfig, routes, utils, config } = it; -const { info, servers, externalDocs } = apiConfig; -const { _, require, formatDescription } = utils; - -const server = (servers && servers[0]) || { url: "" }; - -const descriptionLines = _.compact([ - `@title ${info.title || "No title"}`, - info.version && `@version ${info.version}`, - info.license && `@license ${_.compact([ - info.license.name, - info.license.url && `(${info.license.url})`, - ]).join(" ")}`, - info.termsOfService && `@termsOfService ${info.termsOfService}`, - server.url && `@baseUrl ${server.url}`, - externalDocs.url && `@externalDocs ${externalDocs.url}`, - info.contact && `@contact ${_.compact([ - info.contact.name, - info.contact.email && `<${info.contact.email}>`, - info.contact.url && `(${info.contact.url})`, - ]).join(" ")}`, - info.description && " ", - info.description && _.replace(formatDescription(info.description), /\n/g, "\n * "), -]); - -%> - -<% if (config.httpClientType === config.constants.HTTP_CLIENT.AXIOS) { %> import { AxiosRequestConfig, AxiosResponse } from "axios"; <% } %> - -<% if (descriptionLines.length) { %> -/** -<% descriptionLines.forEach((descriptionLine) => { %> -* <%~ descriptionLine %> - -<% }) %> -*/ -<% } %> -export class Api<% if (!config.singleHttpClient) { %> extends HttpClient <% } %> { - -<% if(config.singleHttpClient) { %> - constructor (private http: HttpClient) {} -<% } %> - - -<% routes.outOfModule && routes.outOfModule.forEach((route) => { %> - - <%~ includeFile('./procedure-call.eta', { ...it, route }) %> - -<% }) %> - -<% routes.combined && routes.combined.forEach(({ routes = [], moduleName }) => { %> - <%~ moduleName %> = { - <% routes.forEach((route) => { %> - - <%~ includeFile('./procedure-call.eta', { ...it, route }) %> - - <% }) %> - } -<% }) %> -} - -/* CUSTOM TEMPLATE */ diff --git a/tests/spec/templates/spec_templates/data-contracts.eta b/tests/spec/templates/spec_templates/data-contracts.eta deleted file mode 100644 index e62465ee..00000000 --- a/tests/spec/templates/spec_templates/data-contracts.eta +++ /dev/null @@ -1,30 +0,0 @@ -<% - const { modelTypes, utils } = it; - const { formatDescription } = utils; - - - const dataContractTemplates = { - enum: (contract) => { - return `enum ${contract.name} {\r\n${contract.content} \r\n }`; - }, - interface: (contract) => { - return `interface ${contract.name} {\r\n${contract.content}}`; - }, - type: (contract) => { - return `type ${contract.name} = ${contract.content}`; - }, - } -%> -<% modelTypes.forEach((contract) => { %> -<% if (contract.description) { %> -/** -* <%~ formatDescription(contract.description) %> - -*/ -<% } %> -export <%~ (dataContractTemplates[contract.typeIdentifier] || dataContractTemplates.type)(contract) %> - - -<% }) %> - -/* CUSTOM TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/http-client.eta b/tests/spec/templates/spec_templates/http-client.eta deleted file mode 100644 index 3b7e1a5f..00000000 --- a/tests/spec/templates/spec_templates/http-client.eta +++ /dev/null @@ -1,5 +0,0 @@ -<% const { config } = it; %> -<% /* https://github.com/acacode/swagger-typescript-api/tree/next/templates/base/http-clients/ */ %> -<%~ includeFile(`@base/http-clients/${config.httpClientType}-http-client`, it) %> - -/* HTTP CLIENT TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/procedure-call.eta b/tests/spec/templates/spec_templates/procedure-call.eta deleted file mode 100644 index d5a85b00..00000000 --- a/tests/spec/templates/spec_templates/procedure-call.eta +++ /dev/null @@ -1,102 +0,0 @@ -<% -const { utils, route, config } = it; -const { requestBodyInfo, responseBodyInfo, specificArgNameResolver } = route; -const { _, getInlineParseContent, getParseContent, parseSchema, getComponentByRef, require } = utils; -const { parameters, path, method, payload, query, formData, security, requestParams } = route.request; -const { type, errorType, contentTypes } = route.response; -const { HTTP_CLIENT, RESERVED_REQ_PARAMS_ARG_NAMES } = config.constants; -const routeDocs = includeFile("@base/route-docs", { config, route, utils }); -const queryName = (query && query.name) || "query"; -const pathParams = _.values(parameters); -const pathParamsNames = _.map(pathParams, "name"); - -const isFetchTemplate = config.httpClientType === HTTP_CLIENT.FETCH; - -const requestConfigParam = { - name: specificArgNameResolver.resolve(RESERVED_REQ_PARAMS_ARG_NAMES), - optional: true, - type: "RequestParams", - defaultValue: "{}", -} - -const argToTmpl = ({ name, optional, type, defaultValue }) => `${name}${!defaultValue && optional ? '?' : ''}: ${type}${defaultValue ? ` = ${defaultValue}` : ''}`; - -const rawWrapperArgs = config.extractRequestParams ? - _.compact([ - requestParams && { - name: pathParams.length ? `{ ${_.join(pathParamsNames, ", ")}, ...${queryName} }` : queryName, - optional: false, - type: getInlineParseContent(requestParams), - }, - ...(!requestParams ? pathParams : []), - payload, - requestConfigParam, - ]) : - _.compact([ - ...pathParams, - query, - payload, - requestConfigParam, - ]) - -const wrapperArgs = _ - // Sort by optionality - .sortBy(rawWrapperArgs, [o => o.optional]) - .map(argToTmpl) - .join(', ') - -// RequestParams["type"] -const requestContentKind = { - "JSON": "ContentType.Json", - "URL_ENCODED": "ContentType.UrlEncoded", - "FORM_DATA": "ContentType.FormData", -} -// RequestParams["format"] -const responseContentKind = { - "JSON": '"json"', - "IMAGE": '"blob"', - "FORM_DATA": isFetchTemplate ? '"formData"' : '"document"' -} - -const bodyTmpl = _.get(payload, "name") || null; -const queryTmpl = (query != null && queryName) || null; -const bodyContentKindTmpl = requestContentKind[requestBodyInfo.contentKind] || null; -const responseFormatTmpl = responseContentKind[responseBodyInfo.success && responseBodyInfo.success.schema && responseBodyInfo.success.schema.contentKind] || null; -const securityTmpl = security ? 'true' : null; - -const describeReturnType = () => { - if (!config.toJS) return ""; - - switch(config.httpClientType) { - case HTTP_CLIENT.AXIOS: { - return `Promise>` - } - default: { - return `Promise` - } - } -} - -%> -/** -<%~ routeDocs.description %> - - * <% /* Here you can add some other JSDoc tags */ %> - -<%~ routeDocs.lines %> - - */ -<%~ route.routeName.usage %><%~ route.namespace ? ': ' : ' = ' %>(<%~ wrapperArgs %>)<%~ config.toJS ? `: ${describeReturnType()}` : "" %> => - <%~ config.singleHttpClient ? 'this.http.request' : 'this.request' %><<%~ type %>, <%~ errorType %>>({ - path: `<%~ path %>`, - method: '<%~ _.upperCase(method) %>', - <%~ queryTmpl ? `query: ${queryTmpl},` : '' %> - <%~ bodyTmpl ? `body: ${bodyTmpl},` : '' %> - <%~ securityTmpl ? `secure: ${securityTmpl},` : '' %> - <%~ bodyContentKindTmpl ? `type: ${bodyContentKindTmpl},` : '' %> - <%~ responseFormatTmpl ? `format: ${responseFormatTmpl},` : '' %> - ...<%~ _.get(requestConfigParam, "name") %>, - })<%~ route.namespace ? ',' : '' %> - - -/* CUSTOM TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/route-docs.eta b/tests/spec/templates/spec_templates/route-docs.eta deleted file mode 100644 index 3c37ff0e..00000000 --- a/tests/spec/templates/spec_templates/route-docs.eta +++ /dev/null @@ -1,31 +0,0 @@ -<% -const { config, route, utils } = it; -const { _, formatDescription, fmtToJSDocLine, pascalCase } = utils; -const { raw, request, routeName } = route; -const jsDocDescription = raw.description ? - ` * @description ${formatDescription(raw.description, true)}` : - fmtToJSDocLine('No description', { eol: false }); -const jsDocLines = _.compact([ - _.size(raw.tags) && ` * @tags ${raw.tags.join(", ")}`, - ` * @name ${pascalCase(routeName.usage)}`, - raw.summary && ` * @summary ${raw.summary}`, - ` * @request ${_.upperCase(request.method)}:${raw.route}`, - routeName.duplicate && ` * @originalName ${routeName.original}\n`, - routeName.duplicate && ` * @duplicate\n`, - request.security && ` * @secure`, - ...(config.generateResponses && raw.responsesTypes.length - ? raw.responsesTypes.map( - ({ type, status, description, isSuccess }) => - ` * @response \`${status}\` \`${type}\` ${description}`, - ) - : []), -]).join("\n"); - - -return { - description: jsDocDescription, - lines: jsDocLines, -} -%> - -/* CUSTOM TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/route-name.eta b/tests/spec/templates/spec_templates/route-name.eta deleted file mode 100644 index f62e2e11..00000000 --- a/tests/spec/templates/spec_templates/route-name.eta +++ /dev/null @@ -1,44 +0,0 @@ -<% -const { routeInfo, utils } = it; -const { - operationId, - method, - route, - moduleName, - responsesTypes, - description, - tags, - summary, -} = routeInfo; -const { _, fmtToJSDocLine } = utils; - -const methodAliases = { - get: (pathName, hasPathInserts) => - _.camelCase(`${pathName}_${hasPathInserts ? "detail" : "list"}`), - post: (pathName, hasPathInserts) => _.camelCase(`${pathName}_create`), - put: (pathName, hasPathInserts) => _.camelCase(`${pathName}_update`), - patch: (pathName, hasPathInserts) => _.camelCase(`${pathName}_partial_update`), - delete: (pathName, hasPathInserts) => _.camelCase(`${pathName}_delete`), -}; - -const createCustomOperationId = (method, route, moduleName) => { - const hasPathInserts = /\{(\w){1,}\}/g.test(route); - const splittedRouteBySlash = _.compact(_.replace(route, /\{(\w){1,}\}/g, "").split("/")); - const routeParts = (splittedRouteBySlash.length > 1 - ? splittedRouteBySlash.splice(1) - : splittedRouteBySlash - ).join("_"); - return routeParts.length > 3 && methodAliases[method] - ? methodAliases[method](routeParts, hasPathInserts) - : _.camelCase(_.lowerCase(method) + "_" + [moduleName].join("_")) || "index"; -}; - -if (operationId) - return _.camelCase(operationId); -if (route === "/") - return _.camelCase(`${_.lowerCase(method)}Root`); - -return createCustomOperationId(method, route, moduleName); -%> - -/* CUSTOM TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/route-type.eta b/tests/spec/templates/spec_templates/route-type.eta deleted file mode 100644 index 1c7b84c6..00000000 --- a/tests/spec/templates/spec_templates/route-type.eta +++ /dev/null @@ -1,26 +0,0 @@ -<% -const { route, utils, config } = it; -const { _, pascalCase } = utils -const { query, payload } = route.request -const { type: responseType } = route.response - -const routeDocs = includeFile("./route-docs", { config, route, utils }); -const routeNamespace = pascalCase(route.routeName.usage) -const queryType = (query && query.type) || '{}' -const bodyType = (payload && payload.type) || 'never' -%> -/** -<%~ routeDocs.description %> - -* <% /* Here you can add some other JSDoc tags */ %> - -<%~ routeDocs.lines %> - -*/ -export namespace <%~ routeNamespace %> { -export type RequestQuery = <%~ queryType %>; -export type RequestBody = <%~ bodyType %>; -export type ResponseBody = <%~ responseType %>; -} - -/* CUSTOM TEMPLATE */ \ No newline at end of file diff --git a/tests/spec/templates/spec_templates/route-types.eta b/tests/spec/templates/spec_templates/route-types.eta deleted file mode 100644 index 286141e7..00000000 --- a/tests/spec/templates/spec_templates/route-types.eta +++ /dev/null @@ -1,23 +0,0 @@ -<% -const { utils, config, routes } = it; -%> -<% -/* TODO: outOfModule, combined should be attributes of route, which will allow to avoid duplication of code */ -%> - -<% routes.outOfModule && routes.outOfModule.forEach(({ routes = [] }) => { %> - <% routes.forEach((route) => { %> - <%~ includeFile('./route-type.eta', { route, utils, config }) %> - <% }) %> -<% }) %> - -<% routes.combined && routes.combined.forEach(({ routes = [], moduleName }) => { %> - export namespace <%~ moduleName %> { - <% routes.forEach((route) => { %> - <%~ includeFile('./route-type.eta', { route, utils, config }) %> - <% }) %> - } - -<% }) %> - -/* CUSTOM TEMPLATE */ diff --git a/tests/spec/templates/test.js b/tests/spec/templates/test.js deleted file mode 100644 index 0a1be656..00000000 --- a/tests/spec/templates/test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName, Exception }) => { - generateApiForTest({ - testName: "--templates option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - // because this script was called from package.json folder - templates: "./tests/spec/templates/spec_templates", - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/typeSuffixPrefix/expected.ts b/tests/spec/typeSuffixPrefix/__snapshots__/basic.test.ts.snap similarity index 79% rename from tests/spec/typeSuffixPrefix/expected.ts rename to tests/spec/typeSuffixPrefix/__snapshots__/basic.test.ts.snap index 01f6f8d8..2a0c78ef 100644 --- a/tests/spec/typeSuffixPrefix/expected.ts +++ b/tests/spec/typeSuffixPrefix/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --type-prefix and --type-suffix 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -1770,7 +1773,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -1835,7 +1838,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -1857,7 +1860,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -1873,7 +1876,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -1937,7 +1940,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -1990,7 +1993,7 @@ export class Api extends HttpClient extends HttpClient this.request< @@ -2066,7 +2069,7 @@ export class Api extends HttpClient({ - path: `/some-test`, + path: \`/some-test\`, method: "GET", format: "json", ...params, @@ -2078,12 +2081,12 @@ export class Api extends HttpClient this.request({ - path: `/path-params`, + path: \`/path-params\`, method: "GET", format: "json", ...params, @@ -2095,12 +2098,12 @@ export class Api extends HttpClient this.request({ - path: `/events`, + path: \`/events\`, method: "GET", format: "json", ...params, @@ -2112,12 +2115,12 @@ export class Api extends HttpClient this.request({ - path: `/feeds`, + path: \`/feeds\`, method: "GET", format: "json", ...params, @@ -2129,8 +2132,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "GET", query: query, format: "json", @@ -2151,12 +2154,12 @@ export class Api extends HttpClient this.request({ - path: `/gists`, + path: \`/gists\`, method: "POST", body: body, type: ContentType.Json, @@ -2169,8 +2172,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/gists/public`, + path: \`/gists/public\`, method: "GET", query: query, format: "json", @@ -2191,8 +2194,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/gists/starred`, + path: \`/gists/starred\`, method: "GET", query: query, format: "json", @@ -2213,12 +2216,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "DELETE", ...params, }), @@ -2228,12 +2231,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "GET", format: "json", ...params, @@ -2244,12 +2247,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}`, + path: \`/gists/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2262,12 +2265,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "GET", format: "json", ...params, @@ -2278,12 +2281,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments`, + path: \`/gists/\${id}/comments\`, method: "POST", body: body, format: "json", @@ -2295,12 +2298,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -2312,12 +2315,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -2328,8 +2331,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/gists/${id}/comments/${commentId}`, + path: \`/gists/\${id}/comments/\${commentId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2351,13 +2354,13 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/forks`, + path: \`/gists/\${id}/forks\`, method: "POST", ...params, }), @@ -2367,12 +2370,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "DELETE", ...params, }), @@ -2382,13 +2385,13 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "GET", ...params, }), @@ -2398,12 +2401,12 @@ export class Api extends HttpClient this.request({ - path: `/gists/${id}/star`, + path: \`/gists/\${id}/star\`, method: "PUT", ...params, }), @@ -2414,12 +2417,12 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates`, + path: \`/gitignore/templates\`, method: "GET", format: "json", ...params, @@ -2430,12 +2433,12 @@ export class Api extends HttpClient this.request({ - path: `/gitignore/templates/${language}`, + path: \`/gitignore/templates/\${language}\`, method: "GET", format: "json", ...params, @@ -2447,8 +2450,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/issues`, + path: \`/issues\`, method: "GET", query: query, format: "json", @@ -2480,8 +2483,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, + path: \`/legacy/issues/search/\${owner}/\${repository}/\${state}/\${keyword}\`, method: "GET", format: "json", ...params, @@ -2503,8 +2506,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/legacy/repos/search/${keyword}`, + path: \`/legacy/repos/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2531,12 +2534,12 @@ export class Api extends HttpClient this.request({ - path: `/legacy/user/email/${email}`, + path: \`/legacy/user/email/\${email}\`, method: "GET", format: "json", ...params, @@ -2548,8 +2551,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/legacy/user/search/${keyword}`, + path: \`/legacy/user/search/\${keyword}\`, method: "GET", query: query, format: "json", @@ -2575,12 +2578,12 @@ export class Api extends HttpClient this.request({ - path: `/markdown`, + path: \`/markdown\`, method: "POST", body: body, type: ContentType.Json, @@ -2592,12 +2595,12 @@ export class Api extends HttpClient this.request({ - path: `/markdown/raw`, + path: \`/markdown/raw\`, method: "POST", type: ContentType.Text, ...params, @@ -2609,12 +2612,12 @@ export class Api extends HttpClient this.request({ - path: `/meta`, + path: \`/meta\`, method: "GET", format: "json", ...params, @@ -2626,12 +2629,12 @@ export class Api extends HttpClient this.request({ - path: `/networks/${owner}/${repo}/events`, + path: \`/networks/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -2643,8 +2646,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "GET", query: query, format: "json", @@ -2667,12 +2670,12 @@ export class Api extends HttpClient this.request({ - path: `/notifications`, + path: \`/notifications\`, method: "PUT", body: body, ...params, @@ -2683,12 +2686,12 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "GET", format: "json", ...params, @@ -2699,12 +2702,12 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}`, + path: \`/notifications/threads/\${id}\`, method: "PATCH", ...params, }), @@ -2714,12 +2717,12 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "DELETE", ...params, }), @@ -2729,12 +2732,12 @@ export class Api extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "GET", format: "json", ...params, @@ -2745,8 +2748,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/notifications/threads/${id}/subscription`, + path: \`/notifications/threads/\${id}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -2768,12 +2771,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "GET", format: "json", ...params, @@ -2784,12 +2787,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}`, + path: \`/orgs/\${org}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -2802,12 +2805,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/events`, + path: \`/orgs/\${org}/events\`, method: "GET", format: "json", ...params, @@ -2818,8 +2821,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/orgs/${org}/issues`, + path: \`/orgs/\${org}/issues\`, method: "GET", query: query, format: "json", @@ -2850,13 +2853,13 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members`, + path: \`/orgs/\${org}/members\`, method: "GET", format: "json", ...params, @@ -2867,12 +2870,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "DELETE", ...params, }), @@ -2884,14 +2887,14 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/members/${username}`, + path: \`/orgs/\${org}/members/\${username}\`, method: "GET", ...params, }), @@ -2901,12 +2904,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members`, + path: \`/orgs/\${org}/public_members\`, method: "GET", format: "json", ...params, @@ -2917,12 +2920,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "DELETE", ...params, }), @@ -2934,13 +2937,13 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "GET", ...params, }), @@ -2950,12 +2953,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/public_members/${username}`, + path: \`/orgs/\${org}/public_members/\${username}\`, method: "PUT", ...params, }), @@ -2965,8 +2968,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "GET", query: query, format: "json", @@ -2989,12 +2992,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/repos`, + path: \`/orgs/\${org}/repos\`, method: "POST", body: body, format: "json", @@ -3006,12 +3009,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "GET", format: "json", ...params, @@ -3022,12 +3025,12 @@ export class Api extends HttpClient this.request({ - path: `/orgs/${org}/teams`, + path: \`/orgs/\${org}/teams\`, method: "POST", body: body, type: ContentType.Json, @@ -3041,12 +3044,12 @@ export class Api extends HttpClient this.request({ - path: `/rate_limit`, + path: \`/rate_limit\`, method: "GET", format: "json", ...params, @@ -3058,12 +3061,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -3073,12 +3076,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "GET", format: "json", ...params, @@ -3089,8 +3092,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}`, + path: \`/repos/\${owner}/\${repo}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3112,12 +3115,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees`, + path: \`/repos/\${owner}/\${repo}/assignees\`, method: "GET", format: "json", ...params, @@ -3130,13 +3133,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, + path: \`/repos/\${owner}/\${repo}/assignees/\${assignee}\`, method: "GET", ...params, }), @@ -3146,12 +3149,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches`, + path: \`/repos/\${owner}/\${repo}/branches\`, method: "GET", format: "json", ...params, @@ -3164,12 +3167,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, + path: \`/repos/\${owner}/\${repo}/branches/\${branch}\`, method: "GET", format: "json", ...params, @@ -3180,12 +3183,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators`, + path: \`/repos/\${owner}/\${repo}/collaborators\`, method: "GET", format: "json", ...params, @@ -3196,12 +3199,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "DELETE", ...params, }), @@ -3213,13 +3216,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "GET", ...params, }), @@ -3229,12 +3232,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, + path: \`/repos/\${owner}/\${repo}/collaborators/\${user}\`, method: "PUT", ...params, }), @@ -3244,12 +3247,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments`, + path: \`/repos/\${owner}/\${repo}/comments\`, method: "GET", format: "json", ...params, @@ -3260,12 +3263,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -3277,12 +3280,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -3293,8 +3296,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -3316,8 +3319,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits`, + path: \`/repos/\${owner}/\${repo}/commits\`, method: "GET", query: query, format: "json", @@ -3344,12 +3347,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, + path: \`/repos/\${owner}/\${repo}/commits/\${ref}/status\`, method: "GET", format: "json", ...params, @@ -3362,12 +3365,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3378,12 +3381,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "GET", format: "json", ...params, @@ -3394,8 +3397,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, + path: \`/repos/\${owner}/\${repo}/commits/\${shaCode}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -3418,12 +3421,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, + path: \`/repos/\${owner}/\${repo}/compare/\${baseId}...\${headId}\`, method: "GET", format: "json", ...params, @@ -3434,8 +3437,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "DELETE", body: body, type: ContentType.Json, @@ -3458,8 +3461,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "GET", query: query, format: "json", @@ -3484,8 +3487,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, + path: \`/repos/\${owner}/\${repo}/contents/\${path}\`, method: "PUT", body: body, type: ContentType.Json, @@ -3508,8 +3511,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/contributors`, + path: \`/repos/\${owner}/\${repo}/contributors\`, method: "GET", query: query, format: "json", @@ -3532,12 +3535,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "GET", format: "json", ...params, @@ -3548,8 +3551,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments`, + path: \`/repos/\${owner}/\${repo}/deployments\`, method: "POST", body: body, type: ContentType.Json, @@ -3571,12 +3574,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "GET", format: "json", ...params, @@ -3587,8 +3590,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, + path: \`/repos/\${owner}/\${repo}/deployments/\${id}/statuses\`, method: "POST", body: body, type: ContentType.Json, @@ -3611,12 +3614,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads`, + path: \`/repos/\${owner}/\${repo}/downloads\`, method: "GET", format: "json", ...params, @@ -3628,12 +3631,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "DELETE", ...params, }), @@ -3646,12 +3649,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, + path: \`/repos/\${owner}/\${repo}/downloads/\${downloadId}\`, method: "GET", format: "json", ...params, @@ -3662,12 +3665,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/events`, + path: \`/repos/\${owner}/\${repo}/events\`, method: "GET", format: "json", ...params, @@ -3678,8 +3681,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "GET", query: query, format: "json", @@ -3703,8 +3706,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/forks`, + path: \`/repos/\${owner}/\${repo}/forks\`, method: "POST", body: body, type: ContentType.Json, @@ -3726,8 +3729,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, + path: \`/repos/\${owner}/\${repo}/git/blobs\`, method: "POST", body: body, type: ContentType.Json, @@ -3749,12 +3752,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/blobs/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3765,8 +3768,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits`, + path: \`/repos/\${owner}/\${repo}/git/commits\`, method: "POST", body: body, type: ContentType.Json, @@ -3788,12 +3791,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/commits/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3804,12 +3807,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "GET", format: "json", ...params, @@ -3820,8 +3823,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs`, + path: \`/repos/\${owner}/\${repo}/git/refs\`, method: "POST", body: body, type: ContentType.Json, @@ -3843,12 +3846,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "DELETE", ...params, }), @@ -3860,12 +3863,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "GET", format: "json", ...params, @@ -3876,8 +3879,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, + path: \`/repos/\${owner}/\${repo}/git/refs/\${ref}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -3900,8 +3903,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags`, + path: \`/repos/\${owner}/\${repo}/git/tags\`, method: "POST", body: body, type: ContentType.Json, @@ -3923,12 +3926,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/tags/\${shaCode}\`, method: "GET", format: "json", ...params, @@ -3939,8 +3942,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees`, + path: \`/repos/\${owner}/\${repo}/git/trees\`, method: "POST", body: body, type: ContentType.Json, @@ -3962,8 +3965,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, + path: \`/repos/\${owner}/\${repo}/git/trees/\${shaCode}\`, method: "GET", query: query, format: "json", @@ -3987,12 +3990,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "GET", format: "json", ...params, @@ -4003,8 +4006,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks`, + path: \`/repos/\${owner}/\${repo}/hooks\`, method: "POST", body: body, format: "json", @@ -4025,12 +4028,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "DELETE", ...params, }), @@ -4042,12 +4045,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "GET", format: "json", ...params, @@ -4058,8 +4061,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}\`, method: "PATCH", body: body, format: "json", @@ -4081,12 +4084,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, + path: \`/repos/\${owner}/\${repo}/hooks/\${hookId}/tests\`, method: "POST", ...params, }), @@ -4096,8 +4099,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "GET", query: query, format: "json", @@ -4129,8 +4132,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues`, + path: \`/repos/\${owner}/\${repo}/issues\`, method: "POST", body: body, format: "json", @@ -4151,8 +4154,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, + path: \`/repos/\${owner}/\${repo}/issues/comments\`, method: "GET", query: query, format: "json", @@ -4177,12 +4180,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4194,12 +4197,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4210,8 +4213,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/issues/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4233,12 +4236,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events`, + path: \`/repos/\${owner}/\${repo}/issues/events\`, method: "GET", format: "json", ...params, @@ -4251,12 +4254,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, + path: \`/repos/\${owner}/\${repo}/issues/events/\${eventId}\`, method: "GET", format: "json", ...params, @@ -4269,12 +4272,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "GET", format: "json", ...params, @@ -4285,8 +4288,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4310,12 +4313,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -4326,8 +4329,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/comments\`, method: "POST", body: body, format: "json", @@ -4351,12 +4354,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/events\`, method: "GET", format: "json", ...params, @@ -4367,12 +4370,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "DELETE", ...params, }), @@ -4382,12 +4385,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4398,8 +4401,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "POST", body: body, format: "json", @@ -4421,8 +4424,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels\`, method: "PUT", body: body, format: "json", @@ -4446,12 +4449,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/issues/\${number}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4461,12 +4464,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "GET", format: "json", ...params, @@ -4477,8 +4480,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys`, + path: \`/repos/\${owner}/\${repo}/keys\`, method: "POST", body: body, format: "json", @@ -4499,12 +4502,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -4516,12 +4519,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, + path: \`/repos/\${owner}/\${repo}/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -4532,12 +4535,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "GET", format: "json", ...params, @@ -4548,8 +4551,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels`, + path: \`/repos/\${owner}/\${repo}/labels\`, method: "POST", body: body, format: "json", @@ -4570,12 +4573,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "DELETE", ...params, }), @@ -4587,12 +4590,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "GET", format: "json", ...params, @@ -4603,8 +4606,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, + path: \`/repos/\${owner}/\${repo}/labels/\${name}\`, method: "PATCH", body: body, format: "json", @@ -4626,12 +4629,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/languages`, + path: \`/repos/\${owner}/\${repo}/languages\`, method: "GET", format: "json", ...params, @@ -4642,11 +4645,11 @@ export class Api extends HttpClient extends HttpClient({ - path: `/repos/${owner}/${repo}/merges`, + path: \`/repos/\${owner}/\${repo}/merges\`, method: "POST", body: body, type: ContentType.Json, @@ -4671,8 +4674,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "GET", query: query, format: "json", @@ -4699,8 +4702,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones`, + path: \`/repos/\${owner}/\${repo}/milestones\`, method: "POST", body: body, format: "json", @@ -4721,12 +4724,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "DELETE", ...params, }), @@ -4738,12 +4741,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "GET", format: "json", ...params, @@ -4754,8 +4757,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}\`, method: "PATCH", body: body, format: "json", @@ -4777,12 +4780,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, + path: \`/repos/\${owner}/\${repo}/milestones/\${number}/labels\`, method: "GET", format: "json", ...params, @@ -4793,8 +4796,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "GET", query: query, format: "json", @@ -4819,8 +4822,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/notifications`, + path: \`/repos/\${owner}/\${repo}/notifications\`, method: "PUT", body: body, ...params, @@ -4840,8 +4843,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "GET", query: query, format: "json", @@ -4867,8 +4870,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls`, + path: \`/repos/\${owner}/\${repo}/pulls\`, method: "POST", body: body, type: ContentType.Json, @@ -4890,8 +4893,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/comments\`, method: "GET", query: query, format: "json", @@ -4916,12 +4919,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "DELETE", ...params, }), @@ -4933,12 +4936,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "GET", format: "json", ...params, @@ -4949,8 +4952,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, + path: \`/repos/\${owner}/\${repo}/pulls/comments/\${commentId}\`, method: "PATCH", body: body, format: "json", @@ -4974,12 +4977,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "GET", format: "json", ...params, @@ -4990,8 +4993,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5016,12 +5019,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "GET", format: "json", ...params, @@ -5032,8 +5035,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/comments\`, method: "POST", body: body, type: ContentType.Json, @@ -5056,12 +5059,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/commits\`, method: "GET", format: "json", ...params, @@ -5072,12 +5075,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/files\`, method: "GET", format: "json", ...params, @@ -5088,13 +5091,13 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "GET", ...params, }), @@ -5104,9 +5107,9 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, + path: \`/repos/\${owner}/\${repo}/pulls/\${number}/merge\`, method: "PUT", body: body, type: ContentType.Json, @@ -5129,8 +5132,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/readme`, + path: \`/repos/\${owner}/\${repo}/readme\`, method: "GET", query: query, format: "json", @@ -5153,12 +5156,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "GET", format: "json", ...params, @@ -5169,8 +5172,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases`, + path: \`/repos/\${owner}/\${repo}/releases\`, method: "POST", body: body, format: "json", @@ -5191,12 +5194,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "DELETE", ...params, }), @@ -5206,12 +5209,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "GET", format: "json", ...params, @@ -5222,8 +5225,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/assets/\${id}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5246,12 +5249,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "DELETE", ...params, }), @@ -5263,12 +5266,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "GET", format: "json", ...params, @@ -5279,8 +5282,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}\`, method: "PATCH", body: body, format: "json", @@ -5304,12 +5307,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, + path: \`/repos/\${owner}/\${repo}/releases/\${id}/assets\`, method: "GET", format: "json", ...params, @@ -5320,12 +5323,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stargazers`, + path: \`/repos/\${owner}/\${repo}/stargazers\`, method: "GET", format: "json", ...params, @@ -5336,12 +5339,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, + path: \`/repos/\${owner}/\${repo}/stats/code_frequency\`, method: "GET", format: "json", ...params, @@ -5352,12 +5355,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, + path: \`/repos/\${owner}/\${repo}/stats/commit_activity\`, method: "GET", format: "json", ...params, @@ -5368,12 +5371,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, + path: \`/repos/\${owner}/\${repo}/stats/contributors\`, method: "GET", format: "json", ...params, @@ -5384,12 +5387,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, + path: \`/repos/\${owner}/\${repo}/stats/participation\`, method: "GET", format: "json", ...params, @@ -5400,12 +5403,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, + path: \`/repos/\${owner}/\${repo}/stats/punch_card\`, method: "GET", format: "json", ...params, @@ -5416,12 +5419,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "GET", format: "json", ...params, @@ -5432,8 +5435,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, + path: \`/repos/\${owner}/\${repo}/statuses/\${ref}\`, method: "POST", body: body, type: ContentType.Json, @@ -5456,12 +5459,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscribers`, + path: \`/repos/\${owner}/\${repo}/subscribers\`, method: "GET", format: "json", ...params, @@ -5472,12 +5475,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "DELETE", ...params, }), @@ -5487,12 +5490,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "GET", format: "json", ...params, @@ -5503,8 +5506,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/subscription`, + path: \`/repos/\${owner}/\${repo}/subscription\`, method: "PUT", body: body, type: ContentType.Json, @@ -5526,12 +5529,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/tags`, + path: \`/repos/\${owner}/\${repo}/tags\`, method: "GET", format: "json", ...params, @@ -5542,12 +5545,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/teams`, + path: \`/repos/\${owner}/\${repo}/teams\`, method: "GET", format: "json", ...params, @@ -5558,12 +5561,12 @@ export class Api extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/watchers`, + path: \`/repos/\${owner}/\${repo}/watchers\`, method: "GET", format: "json", ...params, @@ -5576,8 +5579,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, + path: \`/repos/\${owner}/\${repo}/\${archiveFormat}/\${path}\`, method: "GET", ...params, }), @@ -5598,8 +5601,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/repositories`, + path: \`/repositories\`, method: "GET", query: query, format: "json", @@ -5621,8 +5624,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/search/code`, + path: \`/search/code\`, method: "GET", query: query, format: "json", @@ -5646,8 +5649,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/search/issues`, + path: \`/search/issues\`, method: "GET", query: query, format: "json", @@ -5671,8 +5674,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/search/repositories`, + path: \`/search/repositories\`, method: "GET", query: query, format: "json", @@ -5696,8 +5699,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/search/users`, + path: \`/search/users\`, method: "GET", query: query, format: "json", @@ -5722,12 +5725,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "DELETE", ...params, }), @@ -5737,12 +5740,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "GET", format: "json", ...params, @@ -5753,12 +5756,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}`, + path: \`/teams/\${teamId}\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5771,12 +5774,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members`, + path: \`/teams/\${teamId}/members\`, method: "GET", format: "json", ...params, @@ -5788,12 +5791,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "DELETE", ...params, }), @@ -5806,13 +5809,13 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "GET", ...params, }), @@ -5823,13 +5826,13 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/members/${username}`, + path: \`/teams/\${teamId}/members/\${username}\`, method: "PUT", ...params, }), @@ -5839,12 +5842,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "DELETE", ...params, }), @@ -5854,13 +5857,13 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "GET", format: "json", ...params, @@ -5871,16 +5874,16 @@ export class Api extends HttpClient this.request< SwaggerTypeTeamMembershipGeneratedDataContract, void | SwaggerTypeOrganizationAsTeamMemberGeneratedDataContract >({ - path: `/teams/${teamId}/memberships/${username}`, + path: \`/teams/\${teamId}/memberships/\${username}\`, method: "PUT", format: "json", ...params, @@ -5891,12 +5894,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos`, + path: \`/teams/\${teamId}/repos\`, method: "GET", format: "json", ...params, @@ -5907,12 +5910,12 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -5924,11 +5927,11 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -5938,11 +5941,11 @@ export class Api extends HttpClient this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, + path: \`/teams/\${teamId}/repos/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -5953,12 +5956,12 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "GET", format: "json", ...params, @@ -5969,12 +5972,12 @@ export class Api extends HttpClient this.request({ - path: `/user`, + path: \`/user\`, method: "PATCH", body: body, type: ContentType.Json, @@ -5987,12 +5990,12 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "DELETE", body: body, type: ContentType.Json, @@ -6004,12 +6007,12 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "GET", ...params, }), @@ -6019,11 +6022,11 @@ export class Api extends HttpClient this.request({ - path: `/user/emails`, + path: \`/user/emails\`, method: "POST", body: body, ...params, @@ -6034,12 +6037,12 @@ export class Api extends HttpClient this.request({ - path: `/user/followers`, + path: \`/user/followers\`, method: "GET", format: "json", ...params, @@ -6050,12 +6053,12 @@ export class Api extends HttpClient this.request({ - path: `/user/following`, + path: \`/user/following\`, method: "GET", format: "json", ...params, @@ -6066,12 +6069,12 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "DELETE", ...params, }), @@ -6081,13 +6084,13 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "GET", ...params, }), @@ -6097,12 +6100,12 @@ export class Api extends HttpClient this.request({ - path: `/user/following/${username}`, + path: \`/user/following/\${username}\`, method: "PUT", ...params, }), @@ -6112,8 +6115,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/user/issues`, + path: \`/user/issues\`, method: "GET", query: query, format: "json", @@ -6143,12 +6146,12 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "GET", format: "json", ...params, @@ -6159,12 +6162,12 @@ export class Api extends HttpClient this.request({ - path: `/user/keys`, + path: \`/user/keys\`, method: "POST", body: body, format: "json", @@ -6176,12 +6179,12 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "DELETE", ...params, }), @@ -6191,12 +6194,12 @@ export class Api extends HttpClient this.request({ - path: `/user/keys/${keyId}`, + path: \`/user/keys/\${keyId}\`, method: "GET", format: "json", ...params, @@ -6207,12 +6210,12 @@ export class Api extends HttpClient this.request({ - path: `/user/orgs`, + path: \`/user/orgs\`, method: "GET", format: "json", ...params, @@ -6223,8 +6226,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "GET", query: query, format: "json", @@ -6246,12 +6249,12 @@ export class Api extends HttpClient this.request({ - path: `/user/repos`, + path: \`/user/repos\`, method: "POST", body: body, format: "json", @@ -6263,8 +6266,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/user/starred`, + path: \`/user/starred\`, method: "GET", query: query, format: "json", @@ -6287,12 +6290,12 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -6302,13 +6305,13 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -6318,12 +6321,12 @@ export class Api extends HttpClient this.request({ - path: `/user/starred/${owner}/${repo}`, + path: \`/user/starred/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -6333,12 +6336,12 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions`, + path: \`/user/subscriptions\`, method: "GET", format: "json", ...params, @@ -6350,12 +6353,12 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "DELETE", ...params, }), @@ -6366,13 +6369,13 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "GET", ...params, }), @@ -6383,12 +6386,12 @@ export class Api extends HttpClient this.request({ - path: `/user/subscriptions/${owner}/${repo}`, + path: \`/user/subscriptions/\${owner}/\${repo}\`, method: "PUT", ...params, }), @@ -6398,12 +6401,12 @@ export class Api extends HttpClient this.request({ - path: `/user/teams`, + path: \`/user/teams\`, method: "GET", format: "json", ...params, @@ -6415,8 +6418,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/users`, + path: \`/users\`, method: "GET", query: query, format: "json", @@ -6437,12 +6440,12 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}`, + path: \`/users/\${username}\`, method: "GET", format: "json", ...params, @@ -6453,11 +6456,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events`, + path: \`/users/\${username}/events\`, method: "GET", ...params, }), @@ -6467,11 +6470,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/events/orgs/${org}`, + path: \`/users/\${username}/events/orgs/\${org}\`, method: "GET", ...params, }), @@ -6481,12 +6484,12 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/followers`, + path: \`/users/\${username}/followers\`, method: "GET", format: "json", ...params, @@ -6497,13 +6500,13 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/following/${targetUser}`, + path: \`/users/\${username}/following/\${targetUser}\`, method: "GET", ...params, }), @@ -6513,8 +6516,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/users/${username}/gists`, + path: \`/users/\${username}/gists\`, method: "GET", query: query, format: "json", @@ -6536,12 +6539,12 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/keys`, + path: \`/users/\${username}/keys\`, method: "GET", format: "json", ...params, @@ -6552,12 +6555,12 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/orgs`, + path: \`/users/\${username}/orgs\`, method: "GET", format: "json", ...params, @@ -6568,11 +6571,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events`, + path: \`/users/\${username}/received_events\`, method: "GET", ...params, }), @@ -6582,11 +6585,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/received_events/public`, + path: \`/users/\${username}/received_events/public\`, method: "GET", ...params, }), @@ -6596,8 +6599,8 @@ export class Api extends HttpClient extends HttpClient this.request({ - path: `/users/${username}/repos`, + path: \`/users/\${username}/repos\`, method: "GET", query: query, format: "json", @@ -6620,11 +6623,11 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/starred`, + path: \`/users/\${username}/starred\`, method: "GET", ...params, }), @@ -6634,13 +6637,15 @@ export class Api extends HttpClient this.request({ - path: `/users/${username}/subscriptions`, + path: \`/users/\${username}/subscriptions\`, method: "GET", ...params, }), }; } +" +`; diff --git a/tests/spec/typeSuffixPrefix/basic.test.ts b/tests/spec/typeSuffixPrefix/basic.test.ts new file mode 100644 index 00000000..7af2c2b2 --- /dev/null +++ b/tests/spec/typeSuffixPrefix/basic.test.ts @@ -0,0 +1,39 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--type-prefix and --type-suffix", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateClient: true, + generateResponses: true, + typePrefix: "SwaggerType", + typeSuffix: "GeneratedDataContract", + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/typeSuffixPrefix/schema.ts b/tests/spec/typeSuffixPrefix/schema.ts deleted file mode 100644 index 01f6f8d8..00000000 --- a/tests/spec/typeSuffixPrefix/schema.ts +++ /dev/null @@ -1,6646 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export interface SwaggerTypeActorGeneratedDataContract { - avatar_url?: string; - bio?: string; - blog?: string; - collaborators?: number; - company?: string; - created_at?: string; - disk_usage?: number; - email?: string; - followers?: number; - followers_url?: string; - following?: number; - following_url?: string; - gists_url?: string; - gravatar_id?: string; - hireable?: boolean; - html_url?: string; - id?: number; - location?: string; - login?: string; - name?: string; - organizations_url?: string; - owned_private_repos?: number; - plan?: { - collaborators?: number; - name?: string; - private_repos?: number; - space?: number; - }; - private_gists?: number; - public_gists?: number; - public_repos?: number; - starred_url?: string; - subscriptions_url?: string; - total_private_repos?: number; - type?: "User" | "Organization"; - updated_at?: string; - url?: string; -} - -export interface SwaggerTypeAssetGeneratedDataContract { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: SwaggerTypeUserGeneratedDataContract; - url?: string; -} - -export interface SwaggerTypeAssetPatchGeneratedDataContract { - label?: string; - name: string; -} - -export type SwaggerTypeAssetsGeneratedDataContract = SwaggerTypeAssetGeneratedDataContract[]; - -export type SwaggerTypeAssigneesGeneratedDataContract = SwaggerTypeUserGeneratedDataContract[]; - -export interface SwaggerTypeBlobGeneratedDataContract { - content?: string; - encoding?: "utf-8" | "base64"; - sha?: string; - size?: number; -} - -export interface SwaggerTypeBlobsGeneratedDataContract { - sha?: string; -} - -export interface SwaggerTypeBranchGeneratedDataContract { - _links?: { - html?: string; - self?: string; - }; - commit?: { - author?: SwaggerTypeUserGeneratedDataContract; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - name?: string; -} - -export type SwaggerTypeBranchesGeneratedDataContract = { - commit?: { - sha?: string; - url?: string; - }; - name?: string; -}[]; - -export type SwaggerTypeCodeFrequencyStatsGeneratedDataContract = number[]; - -export interface SwaggerTypeCommentGeneratedDataContract { - body?: string; -} - -export interface SwaggerTypeCommentBodyGeneratedDataContract { - body: string; -} - -export type SwaggerTypeCommentsGeneratedDataContract = { - body?: string; - created_at?: string; - id?: number; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -}[]; - -export interface SwaggerTypeCommitGeneratedDataContract { - author?: SwaggerTypeUserGeneratedDataContract; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - status?: string; - }[]; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - stats?: { - additions?: number; - deletions?: number; - total?: number; - }; - url?: string; -} - -export type SwaggerTypeCommitActivityStatsGeneratedDataContract = { - days?: number[]; - total?: number; - week?: number; -}[]; - -export interface SwaggerTypeCommitCommentGeneratedDataContract { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -} - -export interface SwaggerTypeCommitCommentBodyGeneratedDataContract { - body: string; - line?: string; - number?: string; - path?: string; - position?: number; - sha: string; -} - -export type SwaggerTypeCommitsGeneratedDataContract = { - author?: SwaggerTypeUserGeneratedDataContract; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -}[]; - -export interface SwaggerTypeCompareCommitsGeneratedDataContract { - ahead_by?: number; - base_commit?: { - author?: SwaggerTypeUserGeneratedDataContract; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }; - behind_by?: number; - commits?: { - author?: SwaggerTypeUserGeneratedDataContract; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; - }[]; - diff_url?: string; - files?: { - additions?: number; - blob_url?: string; - changes?: number; - contents_url?: string; - deletions?: number; - filename?: string; - patch?: string; - raw_url?: string; - sha?: string; - status?: string; - }[]; - html_url?: string; - patch_url?: string; - permalink_url?: string; - status?: string; - total_commits?: number; - url?: string; -} - -export interface SwaggerTypeContentsPathGeneratedDataContract { - _links?: { - git?: string; - html?: string; - self?: string; - }; - content?: string; - encoding?: string; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; -} - -export type SwaggerTypeContributorsStatsGeneratedDataContract = { - author?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - total?: number; - weeks?: { - a?: number; - c?: number; - d?: number; - w?: string; - }[]; -}[]; - -export interface SwaggerTypeCreateFileGeneratedDataContract { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: { - _links?: { - git?: string; - html?: string; - self?: string; - }; - git_url?: string; - html_url?: string; - name?: string; - path?: string; - sha?: string; - size?: number; - type?: string; - url?: string; - }; -} - -export interface SwaggerTypeCreateFileBodyGeneratedDataContract { - committer?: { - email?: string; - name?: string; - }; - content?: string; - message?: string; -} - -export interface SwaggerTypeDeleteFileGeneratedDataContract { - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - html_url?: string; - message?: string; - parents?: { - html_url?: string; - sha?: string; - url?: string; - }; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - content?: string; -} - -export interface SwaggerTypeDeleteFileBodyGeneratedDataContract { - committer?: { - email?: string; - name?: string; - }; - message?: string; - sha?: string; -} - -export interface SwaggerTypeDeploymentGeneratedDataContract { - description?: string; - payload?: { - deploy_user?: string; - environment?: string; - room_id?: number; - }; - ref?: string; -} - -export interface SwaggerTypeDeploymentRespGeneratedDataContract { - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -} - -export type SwaggerTypeDeploymentStatusesGeneratedDataContract = { - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - id?: number; - payload?: string; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export interface SwaggerTypeDeploymentStatusesCreateGeneratedDataContract { - description?: string; - state?: string; - target_url?: string; -} - -export interface SwaggerTypeDownloadGeneratedDataContract { - content_type?: string; - description?: string; - download_count?: number; - html_url?: string; - id?: number; - name?: string; - size?: number; - url?: string; -} - -export type SwaggerTypeDownloadsGeneratedDataContract = SwaggerTypeDownloadGeneratedDataContract[]; - -export interface SwaggerTypeEditTeamGeneratedDataContract { - name: string; - permission?: "pull" | "push" | "admin"; -} - -export type SwaggerTypeEmailsPostGeneratedDataContract = string[]; - -export type SwaggerTypeEmojisGeneratedDataContract = Record; - -export interface SwaggerTypeEventGeneratedDataContract { - actor?: SwaggerTypeActorGeneratedDataContract; - created_at?: object; - id?: number; - org?: SwaggerTypeOrganizationGeneratedDataContract; - payload?: object; - public?: boolean; - repo?: { - id?: number; - name?: string; - url?: string; - }; - type?: string; -} - -export type SwaggerTypeEventsGeneratedDataContract = SwaggerTypeEventGeneratedDataContract[]; - -export interface SwaggerTypeFeedsGeneratedDataContract { - _links?: { - current_user?: { - href?: string; - type?: string; - }; - current_user_actor?: { - href?: string; - type?: string; - }; - current_user_organization?: { - href?: string; - type?: string; - }; - current_user_public?: { - href?: string; - type?: string; - }; - timeline?: { - href?: string; - type?: string; - }; - user?: { - href?: string; - type?: string; - }; - }; - current_user_actor_url?: string; - current_user_organization_url?: string; - current_user_public?: string; - current_user_url?: string; - timeline_url?: string; - user_url?: string; -} - -export interface SwaggerTypeForkBodyGeneratedDataContract { - organization?: string; -} - -export type SwaggerTypeForksGeneratedDataContract = SwaggerTypeReposGeneratedDataContract; - -export interface SwaggerTypeGistGeneratedDataContract { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - forks?: { - created_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; - }[]; - git_pull_url?: string; - git_push_url?: string; - history?: { - change_status?: { - additions?: number; - deletions?: number; - total?: number; - }; - committed_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; - version?: string; - }[]; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -} - -export type SwaggerTypeGistsGeneratedDataContract = { - comments?: number; - comments_url?: string; - created_at?: string; - description?: string; - files?: { - "ring.erl"?: { - filename?: string; - raw_url?: string; - size?: number; - }; - }; - git_pull_url?: string; - git_push_url?: string; - html_url?: string; - id?: string; - public?: boolean; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -}[]; - -export interface SwaggerTypeGitCommitGeneratedDataContract { - author?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: string; - tree?: string; -} - -export interface SwaggerTypeGitRefPatchGeneratedDataContract { - force?: boolean; - sha?: string; -} - -export type SwaggerTypeGitignoreGeneratedDataContract = any[]; - -export interface SwaggerTypeGitignoreLangGeneratedDataContract { - name?: string; - source?: string; -} - -export interface SwaggerTypeHeadBranchGeneratedDataContract { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -} - -export type SwaggerTypeHookGeneratedDataContract = { - active?: boolean; - config?: { - content_type?: string; - url?: string; - }; - created_at?: string; - events?: ( - | "push" - | "issues" - | "issue_comment" - | "commit_comment" - | "pull_request" - | "pull_request_review_comment" - | "gollum" - | "watch" - | "download" - | "fork" - | "fork_apply" - | "member" - | "public" - | "team_add" - | "status" - )[]; - id?: number; - name?: string; - updated_at?: string; - url?: string; -}[]; - -export interface SwaggerTypeHookBodyGeneratedDataContract { - active?: boolean; - add_events?: string[]; -} - -export interface SwaggerTypeIssueGeneratedDataContract { - assignee?: string; - body?: string; - labels?: string[]; - milestone?: number; - title?: string; -} - -export interface SwaggerTypeIssueEventGeneratedDataContract { - actor?: SwaggerTypeActorGeneratedDataContract; - commit_id?: string; - created_at?: string; - event?: string; - issue?: { - assignee?: SwaggerTypeUserGeneratedDataContract; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; - }; - url?: string; -} - -export type SwaggerTypeIssueEventsGeneratedDataContract = SwaggerTypeIssueEventGeneratedDataContract[]; - -export type SwaggerTypeIssuesGeneratedDataContract = { - assignee?: SwaggerTypeUserGeneratedDataContract; - body?: string; - closed_at?: string; - comments?: number; - created_at?: string; - html_url?: string; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - milestone?: { - closed_issues?: number; - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; - }; - number?: number; - pull_request?: { - diff_url?: string; - html_url?: string; - patch_url?: string; - }; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -}[]; - -export interface SwaggerTypeIssuesCommentGeneratedDataContract { - body?: string; - created_at?: string; - html_url?: string; - id?: number; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -} - -export type SwaggerTypeIssuesCommentsGeneratedDataContract = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -}[]; - -export type SwaggerTypeKeysGeneratedDataContract = { - id?: number; - key?: string; - title?: string; - url?: string; -}[]; - -export interface SwaggerTypeLabelGeneratedDataContract { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -} - -export type SwaggerTypeLabelsGeneratedDataContract = { - /** - * @minLength 6 - * @maxLength 6 - */ - color?: string; - name?: string; - url?: string; -}[]; - -export type SwaggerTypeLanguagesGeneratedDataContract = Record; - -export interface SwaggerTypeMarkdownGeneratedDataContract { - context?: string; - mode?: string; - text?: string; -} - -export interface SwaggerTypeMergeGeneratedDataContract { - merged?: boolean; - message?: string; - sha?: string; -} - -export interface SwaggerTypeMergePullBodyGeneratedDataContract { - commit_message?: string; -} - -export interface SwaggerTypeMergesBodyGeneratedDataContract { - base?: string; - commit_message?: string; - head?: string; -} - -export interface SwaggerTypeMergesConflictGeneratedDataContract { - message?: string; -} - -export interface SwaggerTypeMergesSuccessfulGeneratedDataContract { - author?: SwaggerTypeUserGeneratedDataContract; - comments_url?: string; - commit?: { - author?: { - date?: string; - email?: string; - name?: string; - }; - comment_count?: number; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; - }; - committer?: SwaggerTypeUserGeneratedDataContract; - merged?: boolean; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - url?: string; -} - -export interface SwaggerTypeMetaGeneratedDataContract { - git?: string[]; - hooks?: string[]; -} - -export interface SwaggerTypeMilestoneGeneratedDataContract { - closed_issues?: number; - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - due_on?: string; - number?: number; - open_issues?: number; - state?: "open" | "closed"; - title?: string; - url?: string; -} - -export interface SwaggerTypeMilestoneUpdateGeneratedDataContract { - description?: string; - due_on?: string; - state?: string; - title?: string; -} - -export interface SwaggerTypeNotificationMarkReadGeneratedDataContract { - last_read_at?: string; -} - -export interface SwaggerTypeNotificationsGeneratedDataContract { - id?: number; - last_read_at?: string; - reason?: string; - repository?: { - description?: string; - fork?: boolean; - full_name?: string; - html_url?: string; - id?: number; - name?: string; - owner?: SwaggerTypeActorGeneratedDataContract; - private?: boolean; - url?: string; - }; - subject?: { - latest_comment_url?: string; - title?: string; - type?: string; - url?: string; - }; - unread?: boolean; - updated_at?: string; - url?: string; -} - -export interface SwaggerTypeOrgTeamsPostGeneratedDataContract { - name: string; - permission?: "pull" | "push" | "admin"; - repo_names?: string[]; -} - -export type SwaggerTypeOrganizationGeneratedDataContract = SwaggerTypeActorGeneratedDataContract; - -export interface SwaggerTypeOrganizationAsTeamMemberGeneratedDataContract { - errors?: { - code?: string; - field?: string; - resource?: string; - }[]; - message?: string; -} - -export interface SwaggerTypeParticipationStatsGeneratedDataContract { - all?: number[]; - owner?: number[]; -} - -export interface SwaggerTypePatchGistGeneratedDataContract { - description?: string; - files?: { - "delete_this_file.txt"?: string; - "file1.txt"?: { - content?: string; - }; - "new_file.txt"?: { - content?: string; - }; - "old_name.txt"?: { - content?: string; - filename?: string; - }; - }; -} - -export interface SwaggerTypePatchOrgGeneratedDataContract { - billing_email?: string; - company?: string; - email?: string; - location?: string; - name?: string; -} - -export interface SwaggerTypePostGistGeneratedDataContract { - description?: string; - files?: { - "file1.txt"?: { - content?: string; - }; - }; - public?: boolean; -} - -export interface SwaggerTypePostRepoGeneratedDataContract { - auto_init?: boolean; - description?: string; - gitignore_template?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name: string; - private?: boolean; - team_id?: number; -} - -export interface SwaggerTypePullRequestGeneratedDataContract { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - additions?: number; - base?: { - label?: string; - ref?: string; - repo?: SwaggerTypeRepoGeneratedDataContract; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - changed_files?: number; - closed_at?: string; - comments?: number; - commits?: number; - created_at?: string; - deletions?: number; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: SwaggerTypeRepoGeneratedDataContract; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merge_commit_sha?: string; - mergeable?: boolean; - merged?: boolean; - merged_at?: string; - merged_by?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - number?: number; - patch_url?: string; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface SwaggerTypePullUpdateGeneratedDataContract { - body?: string; - state?: string; - title?: string; -} - -export type SwaggerTypePullsGeneratedDataContract = { - _links?: { - comments?: { - href?: string; - }; - html?: { - href?: string; - }; - review_comments?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - base?: { - label?: string; - ref?: string; - repo?: SwaggerTypeRepoGeneratedDataContract; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - body?: string; - closed_at?: string; - created_at?: string; - diff_url?: string; - head?: { - label?: string; - ref?: string; - repo?: SwaggerTypeRepoGeneratedDataContract; - sha?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - }; - html_url?: string; - issue_url?: string; - merged_at?: string; - number?: number; - patch_url?: string; - state?: "open" | "closed"; - title?: string; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface SwaggerTypePullsCommentGeneratedDataContract { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -} - -export interface SwaggerTypePullsCommentPostGeneratedDataContract { - body?: string; - commit_id?: string; - path?: string; - position?: number; -} - -export type SwaggerTypePullsCommentsGeneratedDataContract = { - _links?: { - html?: { - href?: string; - }; - pull_request?: { - href?: string; - }; - self?: { - href?: string; - }; - }; - body?: string; - commit_id?: string; - created_at?: string; - id?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; -}[]; - -export interface SwaggerTypePullsPostGeneratedDataContract { - base?: string; - body?: string; - head?: string; - title?: string; -} - -export interface SwaggerTypePutSubscriptionGeneratedDataContract { - created_at?: string; - ignored?: boolean; - reason?: object; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SwaggerTypeRateLimitGeneratedDataContract { - rate?: { - limit?: number; - remaining?: number; - reset?: number; - }; -} - -export type SwaggerTypeRefGeneratedDataContract = { - created_at?: string; - creator?: { - avatar_url?: string; - gravatar_id?: string; - id?: number; - login?: string; - url?: string; - }; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type SwaggerTypeRefStatusGeneratedDataContract = { - commit_url?: string; - name?: string; - repository_url?: string; - sha?: string; - state?: string; - statuses?: { - context?: string; - created_at?: string; - description?: string; - id?: number; - state?: string; - target_url?: string; - updated_at?: string; - url?: string; - }[]; -}[]; - -export type SwaggerTypeRefsGeneratedDataContract = { - object?: { - sha?: string; - type?: string; - url?: string; - }; - ref?: string; - url?: string; -}[]; - -export interface SwaggerTypeRefsBodyGeneratedDataContract { - ref?: string; - sha?: string; -} - -export interface SwaggerTypeReleaseGeneratedDataContract { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: SwaggerTypeUserGeneratedDataContract; - url?: string; - }[]; - assets_url?: string; - author?: SwaggerTypeUserGeneratedDataContract; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -} - -export interface SwaggerTypeReleaseCreateGeneratedDataContract { - body?: string; - draft?: boolean; - name?: string; - prerelease?: boolean; - tag_name?: string; - target_commitish?: string; -} - -export type SwaggerTypeReleasesGeneratedDataContract = { - assets?: { - content_type?: string; - created_at?: string; - download_count?: number; - id?: number; - label?: string; - name?: string; - size?: number; - state?: string; - updated_at?: string; - uploader?: SwaggerTypeUserGeneratedDataContract; - url?: string; - }[]; - assets_url?: string; - author?: SwaggerTypeUserGeneratedDataContract; - body?: string; - created_at?: string; - draft?: boolean; - html_url?: string; - id?: number; - name?: string; - prerelease?: boolean; - published_at?: string; - tag_name?: string; - tarball_url?: string; - target_commitish?: string; - upload_url?: string; - url?: string; - zipball_url?: string; -}[]; - -export interface SwaggerTypeRepoGeneratedDataContract { - clone_url?: string; - created_at?: string; - description?: string; - fork?: boolean; - forks?: number; - forks_count?: number; - full_name?: string; - git_url?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - html_url?: string; - id?: number; - language?: string; - master_branch?: string; - mirror_url?: string; - name?: string; - open_issues?: number; - open_issues_count?: number; - organization?: SwaggerTypeOrganizationGeneratedDataContract; - owner?: SwaggerTypeActorGeneratedDataContract; - parent?: SwaggerTypeRepoGeneratedDataContract; - private?: boolean; - pushed_at?: string; - size?: number; - source?: SwaggerTypeRepoGeneratedDataContract; - ssh_url?: string; - svn_url?: string; - updated_at?: string; - url?: string; - watchers?: number; - watchers_count?: number; -} - -export type SwaggerTypeRepoDeploymentsGeneratedDataContract = { - created_at?: string; - creator?: SwaggerTypeUserGeneratedDataContract; - description?: string; - id?: number; - payload?: string; - sha?: string; - statuses_url?: string; - updated_at?: string; - url?: string; -}[]; - -export type SwaggerTypeRepoCommentsGeneratedDataContract = { - body?: string; - commit_id?: string; - created_at?: string; - html_url?: string; - id?: number; - line?: number; - path?: string; - position?: number; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; -}[]; - -export interface SwaggerTypeRepoCommitGeneratedDataContract { - author?: { - date?: string; - email?: string; - name?: string; - }; - committer?: { - date?: string; - email?: string; - name?: string; - }; - message?: string; - parents?: { - sha?: string; - url?: string; - }[]; - sha?: string; - tree?: { - sha?: string; - url?: string; - }; - url?: string; -} - -export interface SwaggerTypeRepoCommitBodyGeneratedDataContract { - author?: { - date?: string; - email?: string; - name?: string; - }; - message: string; - parents: string[]; - tree: string; -} - -export interface SwaggerTypeRepoEditGeneratedDataContract { - description?: string; - has_downloads?: boolean; - has_issues?: boolean; - has_wiki?: boolean; - homepage?: string; - name?: string; - private?: boolean; -} - -export type SwaggerTypeReposGeneratedDataContract = SwaggerTypeRepoGeneratedDataContract[]; - -export interface SwaggerTypeSearchCodeGeneratedDataContract { - items?: { - git_url?: string; - html_url?: string; - name?: string; - path?: string; - repository?: { - archive_url?: string; - assignees_url?: string; - blobs_url?: string; - branches_url?: string; - collaborators_url?: string; - comments_url?: string; - commits_url?: string; - compare_url?: string; - contents_url?: string; - contributors_url?: string; - description?: string; - downloads_url?: string; - events_url?: string; - fork?: boolean; - forks_url?: string; - full_name?: string; - git_commits_url?: string; - git_refs_url?: string; - git_tags_url?: string; - hooks_url?: string; - html_url?: string; - id?: number; - issue_comment_url?: string; - issue_events_url?: string; - issues_url?: string; - keys_url?: string; - labels_url?: string; - languages_url?: string; - merges_url?: string; - milestones_url?: string; - name?: string; - notifications_url?: string; - owner?: SwaggerTypeActorGeneratedDataContract; - private?: boolean; - pulls_url?: string; - stargazers_url?: string; - statuses_url?: string; - subscribers_url?: string; - subscription_url?: string; - tags_url?: string; - teams_url?: string; - trees_url?: string; - url?: string; - }; - score?: number; - sha?: string; - url?: string; - }[]; - total_count?: number; -} - -export interface SwaggerTypeSearchIssuesGeneratedDataContract { - items?: { - assignee?: any; - body?: string; - closed_at?: any; - comments?: number; - comments_url?: string; - created_at?: string; - events_url?: string; - html_url?: string; - id?: number; - labels?: { - color?: string; - name?: string; - url?: string; - }[]; - labels_url?: string; - milestone?: any; - number?: number; - pull_request?: { - diff_url?: any; - html_url?: any; - patch_url?: any; - }; - score?: number; - state?: string; - title?: string; - updated_at?: string; - url?: string; - user?: SwaggerTypeUserGeneratedDataContract; - }[]; - total_count?: number; -} - -export interface SwaggerTypeSearchIssuesByKeywordGeneratedDataContract { - issues?: { - body?: string; - comments?: number; - created_at?: string; - gravatar_id?: string; - html_url?: string; - labels?: string[]; - number?: number; - position?: number; - state?: string; - title?: string; - updated_at?: string; - user?: string; - votes?: number; - }[]; -} - -export interface SwaggerTypeSearchRepositoriesGeneratedDataContract { - items?: SwaggerTypeRepoGeneratedDataContract[]; - total_count?: number; -} - -export interface SwaggerTypeSearchRepositoriesByKeywordGeneratedDataContract { - repositories?: SwaggerTypeRepoGeneratedDataContract[]; -} - -export interface SwaggerTypeSearchUserByEmailGeneratedDataContract { - user?: SwaggerTypeUserGeneratedDataContract; -} - -export interface SwaggerTypeSearchUsersGeneratedDataContract { - items?: SwaggerTypeUsersGeneratedDataContract; - total_count?: number; -} - -export interface SwaggerTypeSearchUsersByKeywordGeneratedDataContract { - users?: SwaggerTypeUsersGeneratedDataContract; -} - -export interface SwaggerTypeSubscriptionGeneratedDataContract { - created_at?: string; - ignored?: boolean; - reason?: string; - repository_url?: string; - subscribed?: boolean; - thread_url?: string; - url?: string; -} - -export interface SwaggerTypeSubscriptionBodyGeneratedDataContract { - ignored?: boolean; - subscribed?: boolean; -} - -export interface SwaggerTypeTagGeneratedDataContract { - message?: string; - object?: { - sha?: string; - type?: "commit" | "tree" | "blob"; - url?: string; - }; - sha?: string; - tag?: string; - tagger?: { - date?: string; - email?: string; - name?: string; - }; - url?: string; -} - -export interface SwaggerTypeTagBodyGeneratedDataContract { - message: string; - object: string; - tag: string; - tagger: { - date?: string; - email?: string; - name?: string; - }; - type: "commit" | "tree" | "blob"; -} - -export type SwaggerTypeTagsGeneratedDataContract = SwaggerTypeTagGeneratedDataContract[]; - -export interface SwaggerTypeTeamGeneratedDataContract { - id?: number; - members_count?: number; - name?: string; - permission?: string; - repos_count?: number; - url?: string; -} - -export interface SwaggerTypeTeamMembershipGeneratedDataContract { - state?: string; - url?: string; -} - -export type SwaggerTypeTeamReposGeneratedDataContract = SwaggerTypeReposGeneratedDataContract; - -export type SwaggerTypeTeamsGeneratedDataContract = { - id?: number; - name?: string; - url?: string; -}[]; - -export type SwaggerTypeTeamsListGeneratedDataContract = { - id?: number; - members_count?: number; - name?: string; - organization?: { - avatar_url?: string; - id?: number; - login?: string; - url?: string; - }; - permission?: string; - repos_count?: number; - url?: string; -}[]; - -export interface SwaggerTypeTreeGeneratedDataContract { - sha?: string; - tree?: { - mode?: "100644" | "100755" | "040000" | "160000" | "120000"; - path?: string; - sha?: string; - size?: number; - type?: "blob" | "tree" | "commit"; - url?: string; - }[]; - url?: string; -} - -export interface SwaggerTypeTreesGeneratedDataContract { - base_tree?: string; - sha?: string; - tree?: SwaggerTypeTreeGeneratedDataContract[]; - url?: string; -} - -export type SwaggerTypeUserGeneratedDataContract = SwaggerTypeActorGeneratedDataContract; - -export type SwaggerTypeUserEmailsGeneratedDataContract = string[]; - -export interface SwaggerTypeUserKeysKeyIdGeneratedDataContract { - id?: number; - key?: string; - title?: string; - url?: string; -} - -export interface SwaggerTypeUserKeysPostGeneratedDataContract { - key?: string; - title?: string; -} - -export interface SwaggerTypeUserUpdateGeneratedDataContract { - bio?: string; - blog?: string; - company?: string; - email?: string; - hireable?: boolean; - location?: string; - name?: string; -} - -export type SwaggerTypeUsersGeneratedDataContract = SwaggerTypeUserGeneratedDataContract[]; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "https://api.github.com"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title GitHub - * @version v3 - * @termsOfService https://help.github.com/articles/github-terms-of-service/#b-api-terms - * @baseUrl https://api.github.com - * @externalDocs https://developer.github.com/v3/ - */ -export class Api extends HttpClient { - someTest = { - /** - * No description - * - * @name SomeTestList - * @request GET:/some-test - * @response `200` `{ - user: { - foo: number, - extra: { - id: number, - extra: { - foo: string, - bar: number, - baz: string, - bad: number, - extra: { - foo: string, - bar: number, - baz: string, - bad: number, - extra: { - foo: string, - bar: number, - baz: string, - bad: number, - extra: { - foo: string, - bar: number, - baz: string, - bad: number, - -}, - -}, - -}, - -}, - -}, - -}, - -}` - */ - someTestList: (params: RequestParams = {}) => - this.request< - { - user: { - foo: number; - extra: { - id: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - extra: { - foo: string; - bar: number; - baz: string; - bad: number; - }; - }; - }; - }; - }; - }; - }, - any - >({ - path: `/some-test`, - method: "GET", - format: "json", - ...params, - }), - }; - pathParams = { - /** - * No description - * - * @name PathParamsList - * @request GET:/path-params - * @response `200` `SwaggerTypeEmojisGeneratedDataContract` - * @response `403` `void` - */ - pathParamsList: (petId: number, params: RequestParams = {}) => - this.request({ - path: `/path-params`, - method: "GET", - format: "json", - ...params, - }), - }; - events = { - /** - * No description - * - * @name EventsList - * @request GET:/events - * @response `200` `SwaggerTypeEventsGeneratedDataContract` - * @response `403` `void` - */ - eventsList: (params: RequestParams = {}) => - this.request({ - path: `/events`, - method: "GET", - format: "json", - ...params, - }), - }; - feeds = { - /** - * No description - * - * @name FeedsList - * @request GET:/feeds - * @response `200` `SwaggerTypeFeedsGeneratedDataContract` - * @response `403` `void` - */ - feedsList: (params: RequestParams = {}) => - this.request({ - path: `/feeds`, - method: "GET", - format: "json", - ...params, - }), - }; - gists = { - /** - * No description - * - * @name GistsList - * @request GET:/gists - * @response `200` `SwaggerTypeGistsGeneratedDataContract` - * @response `403` `void` - */ - gistsList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsCreate - * @request POST:/gists - * @response `201` `SwaggerTypeGistGeneratedDataContract` - * @response `403` `void` - */ - gistsCreate: (body: SwaggerTypePostGistGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/gists`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicList - * @request GET:/gists/public - * @response `200` `SwaggerTypeGistsGeneratedDataContract` - * @response `403` `void` - */ - publicList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/public`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/gists/starred - * @response `200` `SwaggerTypeGistsGeneratedDataContract` - * @response `403` `void` - */ - starredList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsDelete - * @request DELETE:/gists/{id} - * @response `204` `void` - * @response `403` `void` - */ - gistsDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/gists/{id} - * @response `200` `SwaggerTypeGistGeneratedDataContract` - * @response `403` `void` - */ - gistsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GistsPartialUpdate - * @request PATCH:/gists/{id} - * @response `200` `SwaggerTypeGistGeneratedDataContract` - * @response `403` `void` - */ - gistsPartialUpdate: (id: number, body: SwaggerTypePatchGistGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/gists/{id}/comments - * @response `200` `SwaggerTypeCommentsGeneratedDataContract` - * @response `403` `void` - */ - commentsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsCreate - * @request POST:/gists/{id}/comments - * @response `201` `SwaggerTypeCommentGeneratedDataContract` - * @response `403` `void` - */ - commentsCreate: (id: number, body: SwaggerTypeCommentBodyGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/gists/{id}/comments/{commentId} - * @response `204` `void` - * @response `403` `void` - */ - commentsDelete: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/gists/{id}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - * @response `200` `SwaggerTypeCommentGeneratedDataContract` - * @response `403` `void` - */ - commentsDetail2: (id: number, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/gists/{id}/comments/{commentId} - * @response `200` `SwaggerTypeCommentGeneratedDataContract` - * @response `403` `void` - */ - commentsPartialUpdate: ( - id: number, - commentId: number, - body: SwaggerTypeCommentGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/gists/${id}/comments/${commentId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/gists/{id}/forks - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - forksCreate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/forks`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name StarDelete - * @request DELETE:/gists/{id}/star - * @response `204` `void` - * @response `403` `void` - */ - starDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarDetail - * @request GET:/gists/{id}/star - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - starDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarUpdate - * @request PUT:/gists/{id}/star - * @response `204` `void` - * @response `403` `void` - */ - starUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/gists/${id}/star`, - method: "PUT", - ...params, - }), - }; - gitignore = { - /** - * No description - * - * @name TemplatesList - * @request GET:/gitignore/templates - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - templatesList: (params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TemplatesDetail - * @request GET:/gitignore/templates/{language} - * @response `200` `SwaggerTypeGitignoreLangGeneratedDataContract` - * @response `403` `void` - */ - templatesDetail: (language: string, params: RequestParams = {}) => - this.request({ - path: `/gitignore/templates/${language}`, - method: "GET", - format: "json", - ...params, - }), - }; - issues = { - /** - * No description - * - * @name IssuesList - * @request GET:/issues - * @response `200` `SwaggerTypeIssuesGeneratedDataContract` - * @response `403` `void` - */ - issuesList: ( - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - legacy = { - /** - * No description - * - * @name IssuesSearchDetail - * @request GET:/legacy/issues/search/{owner}/{repository}/{state}/{keyword} - * @deprecated - * @response `200` `SwaggerTypeSearchIssuesByKeywordGeneratedDataContract` - * @response `403` `void` - */ - issuesSearchDetail: ( - keyword: string, - state: "open" | "closed", - owner: string, - repository: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/issues/search/${owner}/${repository}/${state}/${keyword}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposSearchDetail - * @request GET:/legacy/repos/search/{keyword} - * @deprecated - * @response `200` `SwaggerTypeSearchRepositoriesByKeywordGeneratedDataContract` - * @response `403` `void` - */ - reposSearchDetail: ( - keyword: string, - query?: { - /** @default "desc" */ - order?: "desc" | "asc"; - language?: string; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/repos/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserEmailDetail - * @request GET:/legacy/user/email/{email} - * @deprecated - * @response `200` `SwaggerTypeSearchUserByEmailGeneratedDataContract` - * @response `403` `void` - */ - userEmailDetail: (email: string, params: RequestParams = {}) => - this.request({ - path: `/legacy/user/email/${email}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserSearchDetail - * @request GET:/legacy/user/search/{keyword} - * @deprecated - * @response `200` `SwaggerTypeSearchUsersByKeywordGeneratedDataContract` - * @response `403` `void` - */ - userSearchDetail: ( - keyword: string, - query?: { - /** @default "desc" */ - order?: "desc" | "asc"; - start_page?: string; - sort?: "updated" | "stars" | "forks"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/legacy/user/search/${keyword}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - markdown = { - /** - * No description - * - * @name MarkdownCreate - * @request POST:/markdown - * @response `200` `void` - * @response `403` `void` - */ - markdownCreate: (body: SwaggerTypeMarkdownGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/markdown`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name PostMarkdown - * @request POST:/markdown/raw - * @response `200` `void` - * @response `403` `void` - */ - postMarkdown: (params: RequestParams = {}) => - this.request({ - path: `/markdown/raw`, - method: "POST", - type: ContentType.Text, - ...params, - }), - }; - meta = { - /** - * No description - * - * @name MetaList - * @request GET:/meta - * @response `200` `SwaggerTypeMetaGeneratedDataContract` - * @response `403` `void` - */ - metaList: (params: RequestParams = {}) => - this.request({ - path: `/meta`, - method: "GET", - format: "json", - ...params, - }), - }; - networks = { - /** - * No description - * - * @name EventsDetail - * @request GET:/networks/{owner}/{repo}/events - * @response `200` `SwaggerTypeEventsGeneratedDataContract` - * @response `403` `void` - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/networks/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - }; - notifications = { - /** - * No description - * - * @name NotificationsList - * @request GET:/notifications - * @response `200` `SwaggerTypeNotificationsGeneratedDataContract` - * @response `403` `void` - */ - notificationsList: ( - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/notifications - * @response `205` `void` - * @response `403` `void` - */ - notificationsUpdate: (body: SwaggerTypeNotificationMarkReadGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name ThreadsDetail - * @request GET:/notifications/threads/{id} - * @response `200` `SwaggerTypeNotificationsGeneratedDataContract` - * @response `403` `void` - */ - threadsDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsPartialUpdate - * @request PATCH:/notifications/threads/{id} - * @response `205` `void` - * @response `403` `void` - */ - threadsPartialUpdate: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}`, - method: "PATCH", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDelete - * @request DELETE:/notifications/threads/{id}/subscription - * @response `204` `void` - * @response `403` `void` - */ - threadsSubscriptionDelete: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionDetail - * @request GET:/notifications/threads/{id}/subscription - * @response `200` `SwaggerTypeSubscriptionGeneratedDataContract` - * @response `403` `void` - */ - threadsSubscriptionDetail: (id: number, params: RequestParams = {}) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ThreadsSubscriptionUpdate - * @request PUT:/notifications/threads/{id}/subscription - * @response `200` `SwaggerTypeSubscriptionGeneratedDataContract` - * @response `403` `void` - */ - threadsSubscriptionUpdate: ( - id: number, - body: SwaggerTypePutSubscriptionGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/notifications/threads/${id}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - orgs = { - /** - * No description - * - * @name OrgsDetail - * @request GET:/orgs/{org} - * @response `200` `SwaggerTypeOrganizationGeneratedDataContract` - * @response `403` `void` - */ - orgsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsPartialUpdate - * @request PATCH:/orgs/{org} - * @response `200` `SwaggerTypeOrganizationGeneratedDataContract` - * @response `403` `void` - */ - orgsPartialUpdate: (org: string, body: SwaggerTypePatchOrgGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/orgs/{org}/events - * @response `200` `SwaggerTypeEventsGeneratedDataContract` - * @response `403` `void` - */ - eventsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/orgs/{org}/issues - * @response `200` `SwaggerTypeIssuesGeneratedDataContract` - * @response `403` `void` - */ - issuesDetail: ( - org: string, - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/orgs/{org}/members - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `302` `void` - * @response `403` `void` - */ - membersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/orgs/{org}/members/{username} - * @response `204` `void` - * @response `403` `void` - */ - membersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/orgs/{org}/members/{username} - * @originalName membersDetail - * @duplicate - * @response `204` `void` - * @response `302` `void` - * @response `403` `void` - * @response `404` `void` - */ - membersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail - * @request GET:/orgs/{org}/public_members - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - publicMembersDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDelete - * @request DELETE:/orgs/{org}/public_members/{username} - * @response `204` `void` - * @response `403` `void` - */ - publicMembersDelete: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PublicMembersDetail2 - * @request GET:/orgs/{org}/public_members/{username} - * @originalName publicMembersDetail - * @duplicate - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - publicMembersDetail2: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PublicMembersUpdate - * @request PUT:/orgs/{org}/public_members/{username} - * @response `204` `void` - * @response `403` `void` - */ - publicMembersUpdate: (org: string, username: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/public_members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/orgs/{org}/repos - * @response `200` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - reposDetail: ( - org: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/orgs/${org}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/orgs/{org}/repos - * @response `201` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - reposCreate: (org: string, body: SwaggerTypePostRepoGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/orgs/{org}/teams - * @response `200` `SwaggerTypeTeamsGeneratedDataContract` - * @response `403` `void` - */ - teamsDetail: (org: string, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsCreate - * @request POST:/orgs/{org}/teams - * @response `201` `SwaggerTypeTeamGeneratedDataContract` - * @response `403` `void` - */ - teamsCreate: (org: string, body: SwaggerTypeOrgTeamsPostGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/orgs/${org}/teams`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - }; - rateLimit = { - /** - * No description - * - * @name RateLimitList - * @request GET:/rate_limit - * @response `200` `SwaggerTypeRateLimitGeneratedDataContract` - * @response `403` `void` - */ - rateLimitList: (params: RequestParams = {}) => - this.request({ - path: `/rate_limit`, - method: "GET", - format: "json", - ...params, - }), - }; - repos = { - /** - * No description - * - * @name ReposDelete - * @request DELETE:/repos/{owner}/{repo} - * @response `204` `void` - * @response `403` `void` - */ - reposDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/repos/{owner}/{repo} - * @response `200` `SwaggerTypeRepoGeneratedDataContract` - * @response `403` `void` - */ - reposDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposPartialUpdate - * @request PATCH:/repos/{owner}/{repo} - * @response `200` `SwaggerTypeRepoGeneratedDataContract` - * @response `403` `void` - */ - reposPartialUpdate: ( - owner: string, - repo: string, - body: SwaggerTypeRepoEditGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail - * @request GET:/repos/{owner}/{repo}/assignees - * @response `200` `SwaggerTypeAssigneesGeneratedDataContract` - * @response `403` `void` - */ - assigneesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name AssigneesDetail2 - * @request GET:/repos/{owner}/{repo}/assignees/{assignee} - * @originalName assigneesDetail - * @duplicate - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - assigneesDetail2: (owner: string, repo: string, assignee: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/assignees/${assignee}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail - * @request GET:/repos/{owner}/{repo}/branches - * @response `200` `SwaggerTypeBranchesGeneratedDataContract` - * @response `403` `void` - */ - branchesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name BranchesDetail2 - * @request GET:/repos/{owner}/{repo}/branches/{branch} - * @originalName branchesDetail - * @duplicate - * @response `200` `SwaggerTypeBranchGeneratedDataContract` - * @response `403` `void` - */ - branchesDetail2: (owner: string, repo: string, branch: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/branches/${branch}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail - * @request GET:/repos/{owner}/{repo}/collaborators - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - collaboratorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDelete - * @request DELETE:/repos/{owner}/{repo}/collaborators/{user} - * @response `204` `void` - * @response `403` `void` - */ - collaboratorsDelete: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsDetail2 - * @request GET:/repos/{owner}/{repo}/collaborators/{user} - * @originalName collaboratorsDetail - * @duplicate - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - collaboratorsDetail2: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name CollaboratorsUpdate - * @request PUT:/repos/{owner}/{repo}/collaborators/{user} - * @response `204` `void` - * @response `403` `void` - */ - collaboratorsUpdate: (owner: string, repo: string, user: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/collaborators/${user}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail - * @request GET:/repos/{owner}/{repo}/comments - * @response `200` `SwaggerTypeRepoCommentsGeneratedDataContract` - * @response `403` `void` - */ - commentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsDelete - * @request DELETE:/repos/{owner}/{repo}/comments/{commentId} - * @response `204` `void` - * @response `403` `void` - */ - commentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name CommentsDetail2 - * @request GET:/repos/{owner}/{repo}/comments/{commentId} - * @originalName commentsDetail - * @duplicate - * @response `200` `SwaggerTypeCommitCommentGeneratedDataContract` - * @response `403` `void` - */ - commentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/comments/{commentId} - * @response `200` `SwaggerTypeCommitCommentGeneratedDataContract` - * @response `403` `void` - */ - commentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: SwaggerTypeCommentBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail - * @request GET:/repos/{owner}/{repo}/commits - * @response `200` `SwaggerTypeCommitsGeneratedDataContract` - * @response `403` `void` - */ - commitsDetail: ( - owner: string, - repo: string, - query?: { - since?: string; - sha?: string; - path?: string; - author?: string; - until?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsStatusDetail - * @request GET:/repos/{owner}/{repo}/commits/{ref}/status - * @response `200` `SwaggerTypeRefStatusGeneratedDataContract` - * @response `403` `void` - */ - commitsStatusDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${ref}/status`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsDetail2 - * @request GET:/repos/{owner}/{repo}/commits/{shaCode} - * @originalName commitsDetail - * @duplicate - * @response `200` `SwaggerTypeCommitGeneratedDataContract` - * @response `403` `void` - */ - commitsDetail2: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsDetail - * @request GET:/repos/{owner}/{repo}/commits/{shaCode}/comments - * @response `200` `SwaggerTypeRepoCommentsGeneratedDataContract` - * @response `403` `void` - */ - commitsCommentsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name CommitsCommentsCreate - * @request POST:/repos/{owner}/{repo}/commits/{shaCode}/comments - * @response `201` `SwaggerTypeCommitCommentGeneratedDataContract` - * @response `403` `void` - */ - commitsCommentsCreate: ( - owner: string, - repo: string, - shaCode: string, - body: SwaggerTypeCommitCommentBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/commits/${shaCode}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name CompareDetail - * @request GET:/repos/{owner}/{repo}/compare/{baseId}...{headId} - * @response `200` `SwaggerTypeCompareCommitsGeneratedDataContract` - * @response `403` `void` - */ - compareDetail: (owner: string, repo: string, baseId: string, headId: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/compare/${baseId}...${headId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDelete - * @request DELETE:/repos/{owner}/{repo}/contents/{path} - * @response `200` `SwaggerTypeDeleteFileGeneratedDataContract` - * @response `403` `void` - */ - contentsDelete: ( - owner: string, - repo: string, - path: string, - body: SwaggerTypeDeleteFileBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "DELETE", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsDetail - * @request GET:/repos/{owner}/{repo}/contents/{path} - * @response `200` `SwaggerTypeContentsPathGeneratedDataContract` - * @response `403` `void` - */ - contentsDetail: ( - owner: string, - repo: string, - path: string, - query?: { - path?: string; - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContentsUpdate - * @request PUT:/repos/{owner}/{repo}/contents/{path} - * @response `200` `SwaggerTypeCreateFileGeneratedDataContract` - * @response `403` `void` - */ - contentsUpdate: ( - owner: string, - repo: string, - path: string, - body: SwaggerTypeCreateFileBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contents/${path}`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ContributorsDetail - * @request GET:/repos/{owner}/{repo}/contributors - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - contributorsDetail: ( - owner: string, - repo: string, - query: { - anon: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/contributors`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsDetail - * @request GET:/repos/{owner}/{repo}/deployments - * @response `200` `SwaggerTypeRepoDeploymentsGeneratedDataContract` - * @response `403` `void` - */ - deploymentsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsCreate - * @request POST:/repos/{owner}/{repo}/deployments - * @response `201` `SwaggerTypeDeploymentRespGeneratedDataContract` - * @response `403` `void` - */ - deploymentsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeDeploymentGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesDetail - * @request GET:/repos/{owner}/{repo}/deployments/{id}/statuses - * @response `200` `SwaggerTypeDeploymentStatusesGeneratedDataContract` - * @response `403` `void` - */ - deploymentsStatusesDetail: (owner: string, repo: string, id: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DeploymentsStatusesCreate - * @request POST:/repos/{owner}/{repo}/deployments/{id}/statuses - * @response `201` `void` - * @response `403` `void` - */ - deploymentsStatusesCreate: ( - owner: string, - repo: string, - id: number, - body: SwaggerTypeDeploymentStatusesCreateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/deployments/${id}/statuses`, - method: "POST", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail - * @request GET:/repos/{owner}/{repo}/downloads - * @deprecated - * @response `200` `SwaggerTypeDownloadsGeneratedDataContract` - * @response `403` `void` - */ - downloadsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name DownloadsDelete - * @request DELETE:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @response `204` `void` - * @response `403` `void` - */ - downloadsDelete: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name DownloadsDetail2 - * @request GET:/repos/{owner}/{repo}/downloads/{downloadId} - * @deprecated - * @originalName downloadsDetail - * @duplicate - * @response `200` `SwaggerTypeDownloadGeneratedDataContract` - * @response `403` `void` - */ - downloadsDetail2: (owner: string, repo: string, downloadId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/downloads/${downloadId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/repos/{owner}/{repo}/events - * @response `200` `SwaggerTypeEventsGeneratedDataContract` - * @response `403` `void` - */ - eventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksDetail - * @request GET:/repos/{owner}/{repo}/forks - * @response `200` `SwaggerTypeForksGeneratedDataContract` - * @response `403` `void` - */ - forksDetail: ( - owner: string, - repo: string, - query?: { - /** @default "newes" */ - sort?: "newes" | "oldes" | "watchers"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ForksCreate - * @request POST:/repos/{owner}/{repo}/forks - * @response `201` `SwaggerTypeRepoGeneratedDataContract` - * @response `403` `void` - */ - forksCreate: ( - owner: string, - repo: string, - body: SwaggerTypeForkBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/forks`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsCreate - * @request POST:/repos/{owner}/{repo}/git/blobs - * @response `201` `SwaggerTypeBlobsGeneratedDataContract` - * @response `403` `void` - */ - gitBlobsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeBlobGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitBlobsDetail - * @request GET:/repos/{owner}/{repo}/git/blobs/{shaCode} - * @response `200` `SwaggerTypeBlobGeneratedDataContract` - * @response `403` `void` - */ - gitBlobsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/blobs/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsCreate - * @request POST:/repos/{owner}/{repo}/git/commits - * @response `201` `SwaggerTypeGitCommitGeneratedDataContract` - * @response `403` `void` - */ - gitCommitsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeRepoCommitBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitCommitsDetail - * @request GET:/repos/{owner}/{repo}/git/commits/{shaCode} - * @response `200` `SwaggerTypeRepoCommitGeneratedDataContract` - * @response `403` `void` - */ - gitCommitsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/commits/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail - * @request GET:/repos/{owner}/{repo}/git/refs - * @response `200` `SwaggerTypeRefsGeneratedDataContract` - * @response `403` `void` - */ - gitRefsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsCreate - * @request POST:/repos/{owner}/{repo}/git/refs - * @response `201` `SwaggerTypeHeadBranchGeneratedDataContract` - * @response `403` `void` - */ - gitRefsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeRefsBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsDelete - * @request DELETE:/repos/{owner}/{repo}/git/refs/{ref} - * @response `204` `void` - * @response `403` `void` - */ - gitRefsDelete: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name GitRefsDetail2 - * @request GET:/repos/{owner}/{repo}/git/refs/{ref} - * @originalName gitRefsDetail - * @duplicate - * @response `200` `SwaggerTypeHeadBranchGeneratedDataContract` - * @response `403` `void` - */ - gitRefsDetail2: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitRefsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/git/refs/{ref} - * @response `200` `SwaggerTypeHeadBranchGeneratedDataContract` - * @response `403` `void` - */ - gitRefsPartialUpdate: ( - owner: string, - repo: string, - ref: string, - body: SwaggerTypeGitRefPatchGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/refs/${ref}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsCreate - * @request POST:/repos/{owner}/{repo}/git/tags - * @response `201` `SwaggerTypeTagGeneratedDataContract` - * @response `403` `void` - */ - gitTagsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeTagBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTagsDetail - * @request GET:/repos/{owner}/{repo}/git/tags/{shaCode} - * @response `200` `SwaggerTypeTagGeneratedDataContract` - * @response `403` `void` - */ - gitTagsDetail: (owner: string, repo: string, shaCode: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/git/tags/${shaCode}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesCreate - * @request POST:/repos/{owner}/{repo}/git/trees - * @response `201` `SwaggerTypeTreesGeneratedDataContract` - * @response `403` `void` - */ - gitTreesCreate: ( - owner: string, - repo: string, - body: SwaggerTypeTreeGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name GitTreesDetail - * @request GET:/repos/{owner}/{repo}/git/trees/{shaCode} - * @response `200` `SwaggerTypeTreeGeneratedDataContract` - * @response `403` `void` - */ - gitTreesDetail: ( - owner: string, - repo: string, - shaCode: string, - query?: { - recursive?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/git/trees/${shaCode}`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDetail - * @request GET:/repos/{owner}/{repo}/hooks - * @response `200` `SwaggerTypeHookGeneratedDataContract` - * @response `403` `void` - */ - hooksDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksCreate - * @request POST:/repos/{owner}/{repo}/hooks - * @response `201` `SwaggerTypeHookGeneratedDataContract` - * @response `403` `void` - */ - hooksCreate: ( - owner: string, - repo: string, - body: SwaggerTypeHookBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/hooks`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksDelete - * @request DELETE:/repos/{owner}/{repo}/hooks/{hookId} - * @response `204` `void` - * @response `403` `void` - */ - hooksDelete: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name HooksDetail2 - * @request GET:/repos/{owner}/{repo}/hooks/{hookId} - * @originalName hooksDetail - * @duplicate - * @response `200` `SwaggerTypeHookGeneratedDataContract` - * @response `403` `void` - */ - hooksDetail2: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/hooks/{hookId} - * @response `200` `SwaggerTypeHookGeneratedDataContract` - * @response `403` `void` - */ - hooksPartialUpdate: ( - owner: string, - repo: string, - hookId: number, - body: SwaggerTypeHookBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name HooksTestsCreate - * @request POST:/repos/{owner}/{repo}/hooks/{hookId}/tests - * @response `204` `void` - * @response `403` `void` - */ - hooksTestsCreate: (owner: string, repo: string, hookId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/hooks/${hookId}/tests`, - method: "POST", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail - * @request GET:/repos/{owner}/{repo}/issues - * @response `200` `SwaggerTypeIssuesGeneratedDataContract` - * @response `403` `void` - */ - issuesDetail: ( - owner: string, - repo: string, - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCreate - * @request POST:/repos/{owner}/{repo}/issues - * @response `201` `SwaggerTypeIssueGeneratedDataContract` - * @response `403` `void` - */ - issuesCreate: ( - owner: string, - repo: string, - body: SwaggerTypeIssueGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail - * @request GET:/repos/{owner}/{repo}/issues/comments - * @response `200` `SwaggerTypeIssuesCommentsGeneratedDataContract` - * @response `403` `void` - */ - issuesCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/comments/{commentId} - * @response `204` `void` - * @response `403` `void` - */ - issuesCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/comments/{commentId} - * @originalName issuesCommentsDetail - * @duplicate - * @response `200` `SwaggerTypeIssuesCommentGeneratedDataContract` - * @response `403` `void` - */ - issuesCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/comments/{commentId} - * @response `200` `SwaggerTypeIssuesCommentGeneratedDataContract` - * @response `403` `void` - */ - issuesCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: SwaggerTypeCommentBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail - * @request GET:/repos/{owner}/{repo}/issues/events - * @response `200` `SwaggerTypeIssueEventsGeneratedDataContract` - * @response `403` `void` - */ - issuesEventsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail2 - * @request GET:/repos/{owner}/{repo}/issues/events/{eventId} - * @originalName issuesEventsDetail - * @duplicate - * @response `200` `SwaggerTypeIssueEventGeneratedDataContract` - * @response `403` `void` - */ - issuesEventsDetail2: (owner: string, repo: string, eventId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/events/${eventId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesDetail2 - * @request GET:/repos/{owner}/{repo}/issues/{number} - * @originalName issuesDetail - * @duplicate - * @response `200` `SwaggerTypeIssueGeneratedDataContract` - * @response `403` `void` - */ - issuesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/issues/{number} - * @response `200` `SwaggerTypeIssueGeneratedDataContract` - * @response `403` `void` - */ - issuesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeIssueGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/comments - * @originalName issuesCommentsDetail - * @duplicate - * @response `200` `SwaggerTypeIssuesCommentsGeneratedDataContract` - * @response `403` `void` - */ - issuesCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesCommentsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/comments - * @response `201` `SwaggerTypeIssuesCommentGeneratedDataContract` - * @response `403` `void` - */ - issuesCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeCommentBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/comments`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesEventsDetail3 - * @request GET:/repos/{owner}/{repo}/issues/{number}/events - * @originalName issuesEventsDetail - * @duplicate - * @response `200` `SwaggerTypeIssueEventsGeneratedDataContract` - * @response `403` `void` - */ - issuesEventsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/events`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels - * @response `204` `void` - * @response `403` `void` - */ - issuesLabelsDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDetail - * @request GET:/repos/{owner}/{repo}/issues/{number}/labels - * @response `200` `SwaggerTypeLabelsGeneratedDataContract` - * @response `403` `void` - */ - issuesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsCreate - * @request POST:/repos/{owner}/{repo}/issues/{number}/labels - * @response `201` `SwaggerTypeLabelGeneratedDataContract` - * @response `403` `void` - */ - issuesLabelsCreate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeEmailsPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsUpdate - * @request PUT:/repos/{owner}/{repo}/issues/{number}/labels - * @response `201` `SwaggerTypeLabelGeneratedDataContract` - * @response `403` `void` - */ - issuesLabelsUpdate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeEmailsPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels`, - method: "PUT", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesLabelsDelete2 - * @request DELETE:/repos/{owner}/{repo}/issues/{number}/labels/{name} - * @originalName issuesLabelsDelete - * @duplicate - * @response `204` `void` - * @response `403` `void` - */ - issuesLabelsDelete2: (owner: string, repo: string, number: number, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/issues/${number}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/repos/{owner}/{repo}/keys - * @response `200` `SwaggerTypeKeysGeneratedDataContract` - * @response `403` `void` - */ - keysDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/repos/{owner}/{repo}/keys - * @response `201` `SwaggerTypeUserKeysKeyIdGeneratedDataContract` - * @response `403` `void` - */ - keysCreate: ( - owner: string, - repo: string, - body: SwaggerTypeUserKeysPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/repos/{owner}/{repo}/keys/{keyId} - * @response `204` `void` - * @response `403` `void` - */ - keysDelete: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail2 - * @request GET:/repos/{owner}/{repo}/keys/{keyId} - * @originalName keysDetail - * @duplicate - * @response `200` `SwaggerTypeUserKeysKeyIdGeneratedDataContract` - * @response `403` `void` - */ - keysDetail2: (owner: string, repo: string, keyId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail - * @request GET:/repos/{owner}/{repo}/labels - * @response `200` `SwaggerTypeLabelsGeneratedDataContract` - * @response `403` `void` - */ - labelsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsCreate - * @request POST:/repos/{owner}/{repo}/labels - * @response `201` `SwaggerTypeLabelGeneratedDataContract` - * @response `403` `void` - */ - labelsCreate: ( - owner: string, - repo: string, - body: SwaggerTypeEmailsPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/labels`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsDelete - * @request DELETE:/repos/{owner}/{repo}/labels/{name} - * @response `204` `void` - * @response `403` `void` - */ - labelsDelete: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name LabelsDetail2 - * @request GET:/repos/{owner}/{repo}/labels/{name} - * @originalName labelsDetail - * @duplicate - * @response `200` `SwaggerTypeLabelGeneratedDataContract` - * @response `403` `void` - */ - labelsDetail2: (owner: string, repo: string, name: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name LabelsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/labels/{name} - * @response `200` `SwaggerTypeLabelGeneratedDataContract` - * @response `403` `void` - */ - labelsPartialUpdate: ( - owner: string, - repo: string, - name: string, - body: SwaggerTypeEmailsPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/labels/${name}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name LanguagesDetail - * @request GET:/repos/{owner}/{repo}/languages - * @response `200` `SwaggerTypeLanguagesGeneratedDataContract` - * @response `403` `void` - */ - languagesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/languages`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MergesCreate - * @request POST:/repos/{owner}/{repo}/merges - * @response `201` `SwaggerTypeMergesSuccessfulGeneratedDataContract` - * @response `204` `void` - * @response `403` `void` - * @response `404` `SwaggerTypeMergesConflictGeneratedDataContract` - * @response `409` `SwaggerTypeMergesConflictGeneratedDataContract` - */ - mergesCreate: ( - owner: string, - repo: string, - body: SwaggerTypeMergesBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request< - SwaggerTypeMergesSuccessfulGeneratedDataContract, - void | SwaggerTypeMergesConflictGeneratedDataContract - >({ - path: `/repos/${owner}/${repo}/merges`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail - * @request GET:/repos/{owner}/{repo}/milestones - * @response `200` `SwaggerTypeMilestoneGeneratedDataContract` - * @response `403` `void` - */ - milestonesDetail: ( - owner: string, - repo: string, - query?: { - /** @default "open" */ - state?: "open" | "closed"; - direction?: string; - /** @default "due_date" */ - sort?: "due_date" | "completeness"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesCreate - * @request POST:/repos/{owner}/{repo}/milestones - * @response `201` `SwaggerTypeMilestoneGeneratedDataContract` - * @response `403` `void` - */ - milestonesCreate: ( - owner: string, - repo: string, - body: SwaggerTypeMilestoneUpdateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesDelete - * @request DELETE:/repos/{owner}/{repo}/milestones/{number} - * @response `204` `void` - * @response `403` `void` - */ - milestonesDelete: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MilestonesDetail2 - * @request GET:/repos/{owner}/{repo}/milestones/{number} - * @originalName milestonesDetail - * @duplicate - * @response `200` `SwaggerTypeMilestoneGeneratedDataContract` - * @response `403` `void` - */ - milestonesDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/milestones/{number} - * @response `200` `SwaggerTypeMilestoneGeneratedDataContract` - * @response `403` `void` - */ - milestonesPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeMilestoneUpdateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MilestonesLabelsDetail - * @request GET:/repos/{owner}/{repo}/milestones/{number}/labels - * @response `200` `SwaggerTypeLabelsGeneratedDataContract` - * @response `403` `void` - */ - milestonesLabelsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/milestones/${number}/labels`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsDetail - * @request GET:/repos/{owner}/{repo}/notifications - * @response `200` `SwaggerTypeNotificationsGeneratedDataContract` - * @response `403` `void` - */ - notificationsDetail: ( - owner: string, - repo: string, - query?: { - all?: boolean; - participating?: boolean; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name NotificationsUpdate - * @request PUT:/repos/{owner}/{repo}/notifications - * @response `205` `void` - * @response `403` `void` - */ - notificationsUpdate: ( - owner: string, - repo: string, - body: SwaggerTypeNotificationMarkReadGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/notifications`, - method: "PUT", - body: body, - ...params, - }), - - /** - * No description - * - * @name PullsDetail - * @request GET:/repos/{owner}/{repo}/pulls - * @response `200` `SwaggerTypePullsGeneratedDataContract` - * @response `403` `void` - */ - pullsDetail: ( - owner: string, - repo: string, - query?: { - /** @default "open" */ - state?: "open" | "closed"; - head?: string; - base?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCreate - * @request POST:/repos/{owner}/{repo}/pulls - * @response `201` `SwaggerTypePullsGeneratedDataContract` - * @response `403` `void` - */ - pullsCreate: ( - owner: string, - repo: string, - body: SwaggerTypePullsPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail - * @request GET:/repos/{owner}/{repo}/pulls/comments - * @response `200` `SwaggerTypeIssuesCommentsGeneratedDataContract` - * @response `403` `void` - */ - pullsCommentsDetail: ( - owner: string, - repo: string, - query?: { - direction?: string; - sort?: "created" | "updated"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDelete - * @request DELETE:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @response `204` `void` - * @response `403` `void` - */ - pullsCommentsDelete: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @originalName pullsCommentsDetail - * @duplicate - * @response `200` `SwaggerTypePullsCommentGeneratedDataContract` - * @response `403` `void` - */ - pullsCommentsDetail2: (owner: string, repo: string, commentId: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/comments/{commentId} - * @response `200` `SwaggerTypePullsCommentGeneratedDataContract` - * @response `403` `void` - */ - pullsCommentsPartialUpdate: ( - owner: string, - repo: string, - commentId: number, - body: SwaggerTypeCommentBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/comments/${commentId}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsDetail2 - * @request GET:/repos/{owner}/{repo}/pulls/{number} - * @originalName pullsDetail - * @duplicate - * @response `200` `SwaggerTypePullRequestGeneratedDataContract` - * @response `403` `void` - */ - pullsDetail2: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/pulls/{number} - * @response `200` `SwaggerTypeRepoGeneratedDataContract` - * @response `403` `void` - */ - pullsPartialUpdate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypePullUpdateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsDetail3 - * @request GET:/repos/{owner}/{repo}/pulls/{number}/comments - * @originalName pullsCommentsDetail - * @duplicate - * @response `200` `SwaggerTypePullsCommentGeneratedDataContract` - * @response `403` `void` - */ - pullsCommentsDetail3: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommentsCreate - * @request POST:/repos/{owner}/{repo}/pulls/{number}/comments - * @response `201` `SwaggerTypePullsCommentGeneratedDataContract` - * @response `403` `void` - */ - pullsCommentsCreate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypePullsCommentPostGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/comments`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsCommitsDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/commits - * @response `200` `SwaggerTypeCommitsGeneratedDataContract` - * @response `403` `void` - */ - pullsCommitsDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/commits`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsFilesDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/files - * @response `200` `SwaggerTypePullsGeneratedDataContract` - * @response `403` `void` - */ - pullsFilesDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/files`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name PullsMergeDetail - * @request GET:/repos/{owner}/{repo}/pulls/{number}/merge - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - pullsMergeDetail: (owner: string, repo: string, number: number, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name PullsMergeUpdate - * @request PUT:/repos/{owner}/{repo}/pulls/{number}/merge - * @response `200` `SwaggerTypeMergeGeneratedDataContract` - * @response `403` `void` - * @response `405` `SwaggerTypeMergeGeneratedDataContract` - */ - pullsMergeUpdate: ( - owner: string, - repo: string, - number: number, - body: SwaggerTypeMergePullBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/pulls/${number}/merge`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReadmeDetail - * @request GET:/repos/{owner}/{repo}/readme - * @response `200` `SwaggerTypeContentsPathGeneratedDataContract` - * @response `403` `void` - */ - readmeDetail: ( - owner: string, - repo: string, - query?: { - ref?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/readme`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail - * @request GET:/repos/{owner}/{repo}/releases - * @response `200` `SwaggerTypeReleasesGeneratedDataContract` - * @response `403` `void` - */ - releasesDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesCreate - * @request POST:/repos/{owner}/{repo}/releases - * @response `201` `SwaggerTypeReleaseGeneratedDataContract` - * @response `403` `void` - */ - releasesCreate: ( - owner: string, - repo: string, - body: SwaggerTypeReleaseCreateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDelete - * @request DELETE:/repos/{owner}/{repo}/releases/assets/{id} - * @response `204` `void` - * @response `403` `void` - */ - releasesAssetsDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail - * @request GET:/repos/{owner}/{repo}/releases/assets/{id} - * @response `200` `SwaggerTypeAssetGeneratedDataContract` - * @response `403` `void` - */ - releasesAssetsDetail: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/assets/{id} - * @response `200` `SwaggerTypeAssetGeneratedDataContract` - * @response `403` `void` - */ - releasesAssetsPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: SwaggerTypeAssetPatchGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/assets/${id}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesDelete - * @request DELETE:/repos/{owner}/{repo}/releases/{id} - * @response `204` `void` - * @response `403` `void` - */ - releasesDelete: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReleasesDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id} - * @originalName releasesDetail - * @duplicate - * @response `200` `SwaggerTypeReleaseGeneratedDataContract` - * @response `403` `void` - */ - releasesDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesPartialUpdate - * @request PATCH:/repos/{owner}/{repo}/releases/{id} - * @response `200` `SwaggerTypeReleaseGeneratedDataContract` - * @response `403` `void` - */ - releasesPartialUpdate: ( - owner: string, - repo: string, - id: string, - body: SwaggerTypeReleaseCreateGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}`, - method: "PATCH", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReleasesAssetsDetail2 - * @request GET:/repos/{owner}/{repo}/releases/{id}/assets - * @originalName releasesAssetsDetail - * @duplicate - * @response `200` `SwaggerTypeAssetsGeneratedDataContract` - * @response `403` `void` - */ - releasesAssetsDetail2: (owner: string, repo: string, id: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/releases/${id}/assets`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StargazersDetail - * @request GET:/repos/{owner}/{repo}/stargazers - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - stargazersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stargazers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCodeFrequencyDetail - * @request GET:/repos/{owner}/{repo}/stats/code_frequency - * @response `200` `SwaggerTypeCodeFrequencyStatsGeneratedDataContract` - * @response `403` `void` - */ - statsCodeFrequencyDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/code_frequency`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsCommitActivityDetail - * @request GET:/repos/{owner}/{repo}/stats/commit_activity - * @response `200` `SwaggerTypeCommitActivityStatsGeneratedDataContract` - * @response `403` `void` - */ - statsCommitActivityDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/commit_activity`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsContributorsDetail - * @request GET:/repos/{owner}/{repo}/stats/contributors - * @response `200` `SwaggerTypeContributorsStatsGeneratedDataContract` - * @response `403` `void` - */ - statsContributorsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/contributors`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsParticipationDetail - * @request GET:/repos/{owner}/{repo}/stats/participation - * @response `200` `SwaggerTypeParticipationStatsGeneratedDataContract` - * @response `403` `void` - */ - statsParticipationDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/participation`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatsPunchCardDetail - * @request GET:/repos/{owner}/{repo}/stats/punch_card - * @response `200` `SwaggerTypeCodeFrequencyStatsGeneratedDataContract` - * @response `403` `void` - */ - statsPunchCardDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/stats/punch_card`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesDetail - * @request GET:/repos/{owner}/{repo}/statuses/{ref} - * @response `200` `SwaggerTypeRefGeneratedDataContract` - * @response `403` `void` - */ - statusesDetail: (owner: string, repo: string, ref: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name StatusesCreate - * @request POST:/repos/{owner}/{repo}/statuses/{ref} - * @response `201` `SwaggerTypeRefGeneratedDataContract` - * @response `403` `void` - */ - statusesCreate: ( - owner: string, - repo: string, - ref: string, - body: SwaggerTypeHeadBranchGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/statuses/${ref}`, - method: "POST", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscribersDetail - * @request GET:/repos/{owner}/{repo}/subscribers - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - subscribersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscribers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDelete - * @request DELETE:/repos/{owner}/{repo}/subscription - * @response `204` `void` - * @response `403` `void` - */ - subscriptionDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionDetail - * @request GET:/repos/{owner}/{repo}/subscription - * @response `200` `SwaggerTypeSubscriptionGeneratedDataContract` - * @response `403` `void` - */ - subscriptionDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionUpdate - * @request PUT:/repos/{owner}/{repo}/subscription - * @response `200` `SwaggerTypeSubscriptionGeneratedDataContract` - * @response `403` `void` - */ - subscriptionUpdate: ( - owner: string, - repo: string, - body: SwaggerTypeSubscriptionBodyGeneratedDataContract, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/subscription`, - method: "PUT", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name TagsDetail - * @request GET:/repos/{owner}/{repo}/tags - * @response `200` `SwaggerTypeTagsGeneratedDataContract` - * @response `403` `void` - */ - tagsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/tags`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/repos/{owner}/{repo}/teams - * @response `200` `SwaggerTypeTeamsGeneratedDataContract` - * @response `403` `void` - */ - teamsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/teams`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name WatchersDetail - * @request GET:/repos/{owner}/{repo}/watchers - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - watchersDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/repos/${owner}/${repo}/watchers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/repos/{owner}/{repo}/{archive_format}/{path} - * @originalName reposDetail - * @duplicate - * @response `302` `void` - * @response `403` `void` - */ - reposDetail2: ( - owner: string, - repo: string, - archiveFormat: "tarball" | "zipball", - path: string, - params: RequestParams = {}, - ) => - this.request({ - path: `/repos/${owner}/${repo}/${archiveFormat}/${path}`, - method: "GET", - ...params, - }), - }; - repositories = { - /** - * No description - * - * @name RepositoriesList - * @request GET:/repositories - * @response `200` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - repositoriesList: ( - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - search = { - /** - * No description - * - * @name CodeList - * @request GET:/search/code - * @response `200` `SwaggerTypeSearchCodeGeneratedDataContract` - * @response `403` `void` - */ - codeList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "indexed"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/code`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/search/issues - * @response `200` `SwaggerTypeSearchIssuesGeneratedDataContract` - * @response `403` `void` - */ - issuesList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "updated" | "created" | "comments"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name RepositoriesList - * @request GET:/search/repositories - * @response `200` `SwaggerTypeSearchRepositoriesGeneratedDataContract` - * @response `403` `void` - */ - repositoriesList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "stars" | "forks" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/repositories`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersList - * @request GET:/search/users - * @response `200` `SwaggerTypeSearchUsersGeneratedDataContract` - * @response `403` `void` - */ - usersList: ( - query: { - /** @default "desc" */ - order?: "desc" | "asc"; - q: string; - sort?: "followers" | "repositories" | "joined"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/search/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - }; - teams = { - /** - * No description - * - * @name TeamsDelete - * @request DELETE:/teams/{teamId} - * @response `204` `void` - * @response `403` `void` - */ - teamsDelete: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name TeamsDetail - * @request GET:/teams/{teamId} - * @response `200` `SwaggerTypeTeamGeneratedDataContract` - * @response `403` `void` - */ - teamsDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name TeamsPartialUpdate - * @request PATCH:/teams/{teamId} - * @response `200` `SwaggerTypeTeamGeneratedDataContract` - * @response `403` `void` - */ - teamsPartialUpdate: (teamId: number, body: SwaggerTypeEditTeamGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDetail - * @request GET:/teams/{teamId}/members - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - membersDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembersDelete - * @request DELETE:/teams/{teamId}/members/{username} - * @deprecated - * @response `204` `void` - * @response `403` `void` - */ - membersDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembersDetail2 - * @request GET:/teams/{teamId}/members/{username} - * @deprecated - * @originalName membersDetail - * @duplicate - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - membersDetail2: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name MembersUpdate - * @request PUT:/teams/{teamId}/members/{username} - * @deprecated - * @response `204` `void` - * @response `403` `void` - * @response `422` `SwaggerTypeOrganizationAsTeamMemberGeneratedDataContract` - */ - membersUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/members/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name MembershipsDelete - * @request DELETE:/teams/{teamId}/memberships/{username} - * @response `204` `void` - * @response `403` `void` - */ - membershipsDelete: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name MembershipsDetail - * @request GET:/teams/{teamId}/memberships/{username} - * @response `200` `SwaggerTypeTeamMembershipGeneratedDataContract` - * @response `403` `void` - * @response `404` `void` - */ - membershipsDetail: (teamId: number, username: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/memberships/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name MembershipsUpdate - * @request PUT:/teams/{teamId}/memberships/{username} - * @response `200` `SwaggerTypeTeamMembershipGeneratedDataContract` - * @response `403` `void` - * @response `422` `SwaggerTypeOrganizationAsTeamMemberGeneratedDataContract` - */ - membershipsUpdate: (teamId: number, username: string, params: RequestParams = {}) => - this.request< - SwaggerTypeTeamMembershipGeneratedDataContract, - void | SwaggerTypeOrganizationAsTeamMemberGeneratedDataContract - >({ - path: `/teams/${teamId}/memberships/${username}`, - method: "PUT", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/teams/{teamId}/repos - * @response `200` `SwaggerTypeTeamReposGeneratedDataContract` - * @response `403` `void` - */ - reposDetail: (teamId: number, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposDelete - * @request DELETE:/teams/{teamId}/repos/{owner}/{repo} - * @response `204` `void` - * @response `403` `void` - */ - reposDelete: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name ReposDetail2 - * @request GET:/teams/{teamId}/repos/{owner}/{repo} - * @originalName reposDetail - * @duplicate - * @response `403` `void` - */ - reposDetail2: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposUpdate - * @request PUT:/teams/{teamId}/repos/{owner}/{repo} - * @response `403` `void` - */ - reposUpdate: (teamId: number, owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/teams/${teamId}/repos/${owner}/${repo}`, - method: "PUT", - ...params, - }), - }; - user = { - /** - * No description - * - * @name UserList - * @request GET:/user - * @response `200` `SwaggerTypeUserGeneratedDataContract` - * @response `403` `void` - */ - userList: (params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name UserPartialUpdate - * @request PATCH:/user - * @response `200` `SwaggerTypeUserGeneratedDataContract` - * @response `403` `void` - */ - userPartialUpdate: (body: SwaggerTypeUserUpdateGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/user`, - method: "PATCH", - body: body, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @name EmailsDelete - * @request DELETE:/user/emails - * @response `204` `void` - * @response `403` `void` - */ - emailsDelete: (body: SwaggerTypeUserEmailsGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "DELETE", - body: body, - type: ContentType.Json, - ...params, - }), - - /** - * No description - * - * @name EmailsList - * @request GET:/user/emails - * @response `200` `SwaggerTypeUserEmailsGeneratedDataContract` - * @response `403` `void` - */ - emailsList: (params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EmailsCreate - * @request POST:/user/emails - * @response `403` `void` - */ - emailsCreate: (body: SwaggerTypeEmailsPostGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/user/emails`, - method: "POST", - body: body, - ...params, - }), - - /** - * No description - * - * @name FollowersList - * @request GET:/user/followers - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - followersList: (params: RequestParams = {}) => - this.request({ - path: `/user/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingList - * @request GET:/user/following - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - followingList: (params: RequestParams = {}) => - this.request({ - path: `/user/following`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDelete - * @request DELETE:/user/following/{username} - * @response `204` `void` - * @response `403` `void` - */ - followingDelete: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/user/following/{username} - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - followingDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowingUpdate - * @request PUT:/user/following/{username} - * @response `204` `void` - * @response `403` `void` - */ - followingUpdate: (username: string, params: RequestParams = {}) => - this.request({ - path: `/user/following/${username}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name IssuesList - * @request GET:/user/issues - * @response `200` `SwaggerTypeIssuesGeneratedDataContract` - * @response `403` `void` - */ - issuesList: ( - query: { - /** @default "all" */ - filter: "assigned" | "created" | "mentioned" | "subscribed" | "all"; - /** @default "open" */ - state: "open" | "closed"; - labels: string; - /** @default "created" */ - sort: "created" | "updated" | "comments"; - /** @default "desc" */ - direction: "asc" | "desc"; - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/issues`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysList - * @request GET:/user/keys - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - keysList: (params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysCreate - * @request POST:/user/keys - * @response `201` `SwaggerTypeUserKeysKeyIdGeneratedDataContract` - * @response `403` `void` - */ - keysCreate: (body: SwaggerTypeUserKeysPostGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/user/keys`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDelete - * @request DELETE:/user/keys/{keyId} - * @response `204` `void` - * @response `403` `void` - */ - keysDelete: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/user/keys/{keyId} - * @response `200` `SwaggerTypeUserKeysKeyIdGeneratedDataContract` - * @response `403` `void` - */ - keysDetail: (keyId: number, params: RequestParams = {}) => - this.request({ - path: `/user/keys/${keyId}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsList - * @request GET:/user/orgs - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - orgsList: (params: RequestParams = {}) => - this.request({ - path: `/user/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposList - * @request GET:/user/repos - * @response `200` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - reposList: ( - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReposCreate - * @request POST:/user/repos - * @response `201` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - reposCreate: (body: SwaggerTypePostRepoGeneratedDataContract, params: RequestParams = {}) => - this.request({ - path: `/user/repos`, - method: "POST", - body: body, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredList - * @request GET:/user/starred - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - starredList: ( - query?: { - direction?: string; - /** @default "created" */ - sort?: "created" | "updated"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/user/starred`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDelete - * @request DELETE:/user/starred/{owner}/{repo} - * @response `204` `void` - * @response `403` `void` - */ - starredDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/user/starred/{owner}/{repo} - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - starredDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name StarredUpdate - * @request PUT:/user/starred/{owner}/{repo} - * @response `204` `void` - * @response `403` `void` - */ - starredUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/starred/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsList - * @request GET:/user/subscriptions - * @response `200` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - subscriptionsList: (params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDelete - * @request DELETE:/user/subscriptions/{owner}/{repo} - * @deprecated - * @response `204` `void` - * @response `403` `void` - */ - subscriptionsDelete: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "DELETE", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/user/subscriptions/{owner}/{repo} - * @deprecated - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - subscriptionsDetail: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsUpdate - * @request PUT:/user/subscriptions/{owner}/{repo} - * @deprecated - * @response `204` `void` - * @response `403` `void` - */ - subscriptionsUpdate: (owner: string, repo: string, params: RequestParams = {}) => - this.request({ - path: `/user/subscriptions/${owner}/${repo}`, - method: "PUT", - ...params, - }), - - /** - * No description - * - * @name TeamsList - * @request GET:/user/teams - * @response `200` `SwaggerTypeTeamsListGeneratedDataContract` - * @response `403` `void` - */ - teamsList: (params: RequestParams = {}) => - this.request({ - path: `/user/teams`, - method: "GET", - format: "json", - ...params, - }), - }; - users = { - /** - * No description - * - * @name UsersList - * @request GET:/users - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - usersList: ( - query?: { - since?: number; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name UsersDetail - * @request GET:/users/{username} - * @response `200` `SwaggerTypeUserGeneratedDataContract` - * @response `403` `void` - */ - usersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name EventsDetail - * @request GET:/users/{username}/events - * @response `403` `void` - */ - eventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name EventsOrgsDetail - * @request GET:/users/{username}/events/orgs/{org} - * @response `403` `void` - */ - eventsOrgsDetail: (username: string, org: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/events/orgs/${org}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name FollowersDetail - * @request GET:/users/{username}/followers - * @response `200` `SwaggerTypeUsersGeneratedDataContract` - * @response `403` `void` - */ - followersDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/followers`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name FollowingDetail - * @request GET:/users/{username}/following/{targetUser} - * @response `204` `void` - * @response `403` `void` - * @response `404` `void` - */ - followingDetail: (username: string, targetUser: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/following/${targetUser}`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name GistsDetail - * @request GET:/users/{username}/gists - * @response `200` `SwaggerTypeGistsGeneratedDataContract` - * @response `403` `void` - */ - gistsDetail: ( - username: string, - query?: { - since?: string; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/gists`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name KeysDetail - * @request GET:/users/{username}/keys - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - keysDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/keys`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name OrgsDetail - * @request GET:/users/{username}/orgs - * @response `200` `SwaggerTypeGitignoreGeneratedDataContract` - * @response `403` `void` - */ - orgsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/orgs`, - method: "GET", - format: "json", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsDetail - * @request GET:/users/{username}/received_events - * @response `403` `void` - */ - receivedEventsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReceivedEventsPublicDetail - * @request GET:/users/{username}/received_events/public - * @response `403` `void` - */ - receivedEventsPublicDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/received_events/public`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name ReposDetail - * @request GET:/users/{username}/repos - * @response `200` `SwaggerTypeReposGeneratedDataContract` - * @response `403` `void` - */ - reposDetail: ( - username: string, - query?: { - /** @default "all" */ - type?: "all" | "public" | "private" | "forks" | "sources" | "member"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/users/${username}/repos`, - method: "GET", - query: query, - format: "json", - ...params, - }), - - /** - * No description - * - * @name StarredDetail - * @request GET:/users/{username}/starred - * @response `403` `void` - */ - starredDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/starred`, - method: "GET", - ...params, - }), - - /** - * No description - * - * @name SubscriptionsDetail - * @request GET:/users/{username}/subscriptions - * @response `403` `void` - */ - subscriptionsDetail: (username: string, params: RequestParams = {}) => - this.request({ - path: `/users/${username}/subscriptions`, - method: "GET", - ...params, - }), - }; -} diff --git a/tests/spec/typeSuffixPrefix/test.js b/tests/spec/typeSuffixPrefix/test.js deleted file mode 100644 index 9b016725..00000000 --- a/tests/spec/typeSuffixPrefix/test.js +++ /dev/null @@ -1,31 +0,0 @@ -const _ = require("lodash"); -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), - absoluteOutputPath: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName, Exception }) => { - generateApiForTest({ - testName: "--type-suffix --type-prefix options test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - typePrefix: "SwaggerType", - typeSuffix: "GeneratedDataContract", - generateClient: true, - generateResponses: true, - }).then((output) => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/spec/unionEnums/expected.ts b/tests/spec/unionEnums/__snapshots__/basic.test.ts.snap similarity index 93% rename from tests/spec/unionEnums/expected.ts rename to tests/spec/unionEnums/__snapshots__/basic.test.ts.snap index d0b750f5..3a5d468e 100644 --- a/tests/spec/unionEnums/expected.ts +++ b/tests/spec/unionEnums/__snapshots__/basic.test.ts.snap @@ -1,4 +1,7 @@ -/* eslint-disable */ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > --union-enums 1`] = ` +"/* eslint-disable */ /* tslint:disable */ /* * --------------------------------------------------------------- @@ -25,7 +28,7 @@ export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ + /** set parameter to \`true\` for call \`securityWorker\` for this request */ secure?: boolean; /** request path */ path: string; @@ -90,7 +93,7 @@ export class HttpClient { protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`; } protected addQueryParam(query: QueryParamsType, key: string) { @@ -112,7 +115,7 @@ export class HttpClient { protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; + return queryString ? \`?\${queryString}\` : ""; } private contentFormatters: Record any> = { @@ -128,7 +131,7 @@ export class HttpClient { ? property : typeof property === "object" && property !== null ? JSON.stringify(property) - : `${property}`, + : \`\${property}\`, ); return formData; }, new FormData()), @@ -192,7 +195,7 @@ export class HttpClient { const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { + return this.customFetch(\`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`, { ...requestParams, headers: { ...(requestParams.headers || {}), @@ -236,3 +239,5 @@ export class HttpClient { * @baseUrl http://localhost:8080/api/v1 */ export class Api extends HttpClient {} +" +`; diff --git a/tests/spec/unionEnums/basic.test.ts b/tests/spec/unionEnums/basic.test.ts new file mode 100644 index 00000000..4e3d40dd --- /dev/null +++ b/tests/spec/unionEnums/basic.test.ts @@ -0,0 +1,36 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("--union-enums", async () => { + // @ts-expect-error + await generateApi({ + name: "schema", + input: path.resolve(__dirname, "schema.json"), + output: tmpdir, + silent: true, + generateUnionEnums: true, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/unionEnums/schema.ts b/tests/spec/unionEnums/schema.ts deleted file mode 100644 index d0b750f5..00000000 --- a/tests/spec/unionEnums/schema.ts +++ /dev/null @@ -1,238 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/* - * --------------------------------------------------------------- - * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## - * ## ## - * ## AUTHOR: acacode ## - * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## - * --------------------------------------------------------------- - */ - -export type StringEnum = "String1" | "String2" | "String3" | "String4"; - -export type NumberEnum = 1 | 2 | 3 | 4; - -export type BooleanEnum = true | false; - -/** - * FooBar - * @format int32 - */ -export type IntEnumWithNames = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; - -export type QueryParamsType = Record; -export type ResponseFormat = keyof Omit; - -export interface FullRequestParams extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseFormat; - /** request body */ - body?: unknown; - /** base url */ - baseUrl?: string; - /** request cancellation token */ - cancelToken?: CancelToken; -} - -export type RequestParams = Omit; - -export interface ApiConfig { - baseUrl?: string; - baseApiParams?: Omit; - securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; - customFetch?: typeof fetch; -} - -export interface HttpResponse extends Response { - data: D; - error: E; -} - -type CancelToken = Symbol | string | number; - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -export class HttpClient { - public baseUrl: string = "http://localhost:8080/api/v1"; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private abortControllers = new Map(); - private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); - - private baseApiParams: RequestParams = { - credentials: "same-origin", - headers: {}, - redirect: "follow", - referrerPolicy: "no-referrer", - }; - - constructor(apiConfig: ApiConfig = {}) { - Object.assign(this, apiConfig); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected encodeQueryParam(key: string, value: any) { - const encodedKey = encodeURIComponent(key); - return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; - } - - protected addQueryParam(query: QueryParamsType, key: string) { - return this.encodeQueryParam(key, query[key]); - } - - protected addArrayQueryParam(query: QueryParamsType, key: string) { - const value = query[key]; - return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); - } - - protected toQueryString(rawQuery?: QueryParamsType): string { - const query = rawQuery || {}; - const keys = Object.keys(query).filter((key) => "undefined" !== typeof query[key]); - return keys - .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key))) - .join("&"); - } - - protected addQueryParams(rawQuery?: QueryParamsType): string { - const queryString = this.toQueryString(rawQuery); - return queryString ? `?${queryString}` : ""; - } - - private contentFormatters: Record any> = { - [ContentType.Json]: (input: any) => - input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, - [ContentType.Text]: (input: any) => (input !== null && typeof input !== "string" ? JSON.stringify(input) : input), - [ContentType.FormData]: (input: any) => - Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - formData.append( - key, - property instanceof Blob - ? property - : typeof property === "object" && property !== null - ? JSON.stringify(property) - : `${property}`, - ); - return formData; - }, new FormData()), - [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), - }; - - protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams { - return { - ...this.baseApiParams, - ...params1, - ...(params2 || {}), - headers: { - ...(this.baseApiParams.headers || {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { - if (this.abortControllers.has(cancelToken)) { - const abortController = this.abortControllers.get(cancelToken); - if (abortController) { - return abortController.signal; - } - return void 0; - } - - const abortController = new AbortController(); - this.abortControllers.set(cancelToken, abortController); - return abortController.signal; - }; - - public abortRequest = (cancelToken: CancelToken) => { - const abortController = this.abortControllers.get(cancelToken); - - if (abortController) { - abortController.abort(); - this.abortControllers.delete(cancelToken); - } - }; - - public request = async ({ - body, - secure, - path, - type, - query, - format, - baseUrl, - cancelToken, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const queryString = query && this.toQueryString(query); - const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - const responseFormat = format || requestParams.format; - - return this.customFetch(`${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), - }, - signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, - body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), - }).then(async (response) => { - const r = response.clone() as HttpResponse; - r.data = null as unknown as T; - r.error = null as unknown as E; - - const data = !responseFormat - ? r - : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data; - } else { - r.error = data; - } - return r; - }) - .catch((e) => { - r.error = e; - return r; - }); - - if (cancelToken) { - this.abortControllers.delete(cancelToken); - } - - if (!response.ok) throw data; - return data; - }); - }; -} - -/** - * @title No title - * @baseUrl http://localhost:8080/api/v1 - */ -export class Api extends HttpClient {} diff --git a/tests/spec/unionEnums/test.js b/tests/spec/unionEnums/test.js deleted file mode 100644 index 504a5814..00000000 --- a/tests/spec/unionEnums/test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateApiForTest } = require("../../helpers/generateApiForTest"); -const { resolve } = require("node:path"); -const validateGeneratedModule = require("../../helpers/validateGeneratedModule"); -const createSchemaInfos = require("../../helpers/createSchemaInfos"); -const assertGeneratedModule = require("../../helpers/assertGeneratedModule"); - -const schemas = createSchemaInfos({ - absolutePathToSchemas: resolve(__dirname, "./"), -}); - -schemas.forEach(({ absolutePath, apiFileName }) => { - generateApiForTest({ - testName: "--union-enums option test", - silent: true, - name: apiFileName, - input: absolutePath, - output: resolve(__dirname, "./"), - generateUnionEnums: true, - }).then(() => { - validateGeneratedModule(resolve(__dirname, `./${apiFileName}`)); - assertGeneratedModule( - resolve(__dirname, `./${apiFileName}`), - resolve(__dirname, "./expected.ts"), - ); - }); -}); diff --git a/tests/utils.ts b/tests/utils.ts new file mode 100644 index 00000000..b17957fb --- /dev/null +++ b/tests/utils.ts @@ -0,0 +1,20 @@ +import * as fs from "node:fs/promises"; +import * as path from "node:path"; + +export async function collectAllSchemas() { + const schemas = []; + const schemaPath = path.join(__dirname, "fixtures", "schemas"); + const schemaFiles = await fs.readdir(schemaPath, { recursive: true }); + for (const schemaFile of schemaFiles) { + if ( + schemaFile.endsWith(".json") || + schemaFile.endsWith(".yaml") || + schemaFile.endsWith(".yml") + ) { + const name = path.basename(schemaFile).replace(/\.(json|yaml|yml)$/, ""); + const filePath = path.join(schemaPath, schemaFile); + schemas.push({ name, filePath }); + } + } + return schemas; +} diff --git a/tests/validate.js b/tests/validate.js deleted file mode 100644 index 53f188b2..00000000 --- a/tests/validate.js +++ /dev/null @@ -1,9 +0,0 @@ -const { resolve } = require("node:path"); -const allSchemas = require("./allSchemas"); -const validateGeneratedModule = require("./helpers/validateGeneratedModule"); - -allSchemas.forEach((schema) => { - validateGeneratedModule(resolve(schema.outputPath, schema.apiFileName)); -}); - -console.log("everything is good:)"); diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 00000000..f12111d9 --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + testTimeout: 10000, + }, +}); diff --git a/yarn.lock b/yarn.lock index e8c3881e..682f49df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,31 +6,31 @@ __metadata: cacheKey: 10c0 "@babel/code-frame@npm:^7.0.0": - version: 7.24.6 - resolution: "@babel/code-frame@npm:7.24.6" + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" dependencies: - "@babel/highlight": "npm:^7.24.6" + "@babel/highlight": "npm:^7.24.7" picocolors: "npm:^1.0.0" - checksum: 10c0/c93c6d1763530f415218c31d07359364397f19b70026abdff766164c21ed352a931cf07f3102c5fb9e04792de319e332d68bcb1f7debef601a02197f90f9ba24 + checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.6": - version: 7.24.6 - resolution: "@babel/helper-validator-identifier@npm:7.24.6" - checksum: 10c0/d29d2e3fca66c31867a009014169b93f7bc21c8fc1dd7d0b9d85d7a4000670526ff2222d966febb75a6e12f9859a31d1e75b558984e28ecb69651314dd0a6fd1 +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 languageName: node linkType: hard -"@babel/highlight@npm:^7.24.6": - version: 7.24.6 - resolution: "@babel/highlight@npm:7.24.6" +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.6" + "@babel/helper-validator-identifier": "npm:^7.24.7" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/5bbc31695e5d44e97feb267f7aaf4c52908560d184ffeb2e2e57aae058d40125592931883889413e19def3326895ddb41ff45e090fa90b459d8c294b4ffc238c + checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a languageName: node linkType: hard @@ -125,6 +125,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@exodus/schemasafe@npm:^1.0.0-rc.2": version: 1.3.0 resolution: "@exodus/schemasafe@npm:1.3.0" @@ -132,6 +293,184 @@ __metadata: 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: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.15": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-android-arm64@npm:4.18.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.18.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.18.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.18.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.18.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.18.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.18.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.18.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.18.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.18.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.18.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.18.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.18.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.6.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -139,6 +478,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d + languageName: node + linkType: hard + "@types/lodash@npm:4.17.5": version: 4.17.5 resolution: "@types/lodash@npm:4.17.5" @@ -162,6 +508,104 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/expect@npm:1.6.0" + dependencies: + "@vitest/spy": "npm:1.6.0" + "@vitest/utils": "npm:1.6.0" + chai: "npm:^4.3.10" + checksum: 10c0/a4351f912a70543e04960f5694f1f1ac95f71a856a46e87bba27d3eb72a08c5d11d35021cbdc6077452a152e7d93723fc804bba76c2cc53c8896b7789caadae3 + languageName: node + linkType: hard + +"@vitest/runner@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/runner@npm:1.6.0" + dependencies: + "@vitest/utils": "npm:1.6.0" + p-limit: "npm:^5.0.0" + pathe: "npm:^1.1.1" + checksum: 10c0/27d67fa51f40effe0e41ee5f26563c12c0ef9a96161f806036f02ea5eb9980c5cdf305a70673942e7a1e3d472d4d7feb40093ae93024ef1ccc40637fc65b1d2f + languageName: node + linkType: hard + +"@vitest/snapshot@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/snapshot@npm:1.6.0" + dependencies: + magic-string: "npm:^0.30.5" + pathe: "npm:^1.1.1" + pretty-format: "npm:^29.7.0" + checksum: 10c0/be027fd268d524589ff50c5fad7b4faa1ac5742b59ac6c1dc6f5a3930aad553560e6d8775e90ac4dfae4be746fc732a6f134ba95606a1519707ce70db3a772a5 + languageName: node + linkType: hard + +"@vitest/spy@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/spy@npm:1.6.0" + dependencies: + tinyspy: "npm:^2.2.0" + checksum: 10c0/df66ea6632b44fb76ef6a65c1abbace13d883703aff37cd6d062add6dcd1b883f19ce733af8e0f7feb185b61600c6eb4042a518e4fb66323d0690ec357f9401c + languageName: node + linkType: hard + +"@vitest/utils@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/utils@npm:1.6.0" + dependencies: + diff-sequences: "npm:^29.6.3" + estree-walker: "npm:^3.0.3" + loupe: "npm:^2.3.7" + pretty-format: "npm:^29.7.0" + checksum: 10c0/8b0d19835866455eb0b02b31c5ca3d8ad45f41a24e4c7e1f064b480f6b2804dc895a70af332f14c11ed89581011b92b179718523f55f5b14787285a0321b1301 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.3.2": + version: 8.3.3 + resolution: "acorn-walk@npm:8.3.3" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/4a9e24313e6a0a7b389e712ba69b66b455b4cb25988903506a8d247e7b126f02060b05a8a5b738a9284214e4ca95f383dd93443a4ba84f1af9b528305c7f243b + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.11.3": + version: 8.12.0 + resolution: "acorn@npm:8.12.0" + bin: + acorn: bin/acorn + checksum: 10c0/a19f9dead009d3b430fa3c253710b47778cdaace15b316de6de93a68c355507bc1072a9956372b6c990cbeeb167d4a929249d0faeb8ae4bb6911d68d53299549 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + 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: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -169,6 +613,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -187,6 +638,20 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -194,6 +659,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: 10c0/25456b2aa333250f01143968e02e4884a34588a8538fbbf65c91a637f1dbfb8069249133cd2f4e530f10f624d206a664e7df30207830b659e9f5298b00a4099b + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -229,6 +701,42 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.3 + resolution: "cacache@npm:18.0.3" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/dfda92840bb371fb66b88c087c61a74544363b37a265023223a99965b16a16bbb87661fe4948718d79df6e0cc04e85e62784fbcf1832b2a5e54ff4c46fbb45b7 + languageName: node + linkType: hard + "call-me-maybe@npm:^1.0.1": version: 1.0.2 resolution: "call-me-maybe@npm:1.0.2" @@ -243,6 +751,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.10": + version: 4.4.1 + resolution: "chai@npm:4.4.1" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.3" + deep-eql: "npm:^4.1.3" + get-func-name: "npm:^2.0.2" + loupe: "npm:^2.3.6" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.0.8" + checksum: 10c0/91590a8fe18bd6235dece04ccb2d5b4ecec49984b50924499bdcd7a95c02cb1fd2a689407c19bb854497bde534ef57525cfad6c7fdd2507100fd802fbc2aefbd + languageName: node + linkType: hard + "chalk@npm:^2.3.2, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -261,6 +784,29 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: "npm:^2.0.2" + checksum: 10c0/94aa37a7315c0e8a83d0112b5bfb5a8624f7f0f81057c73e4707729cdd8077166c6aefb3d8e2b92c63ee130d4a2ff94bad46d547e12f3238cc1d78342a973841 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -320,6 +866,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.7": + version: 0.1.7 + resolution: "confbox@npm:0.1.7" + checksum: 10c0/18b40c2f652196a833f3f1a5db2326a8a579cd14eacabfe637e4fc8cb9b68d7cf296139a38c5e7c688ce5041bf46f9adce05932d43fde44cf7e012840b5da111 + languageName: node + linkType: hard + "cosmiconfig@npm:^9.0.0": version: 9.0.0 resolution: "cosmiconfig@npm:9.0.0" @@ -349,7 +902,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.1": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -360,6 +913,27 @@ __metadata: languageName: node linkType: hard +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/082c375a2bdc4f4469c99f325ff458adad62a3fc2c482d59923c260cb08152f34e2659f72b3767db8bb2f21ca81a60a42d1019605a412132d7b9f59363a005cc + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.3": + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" + dependencies: + type-detect: "npm:^4.0.0" + checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -374,6 +948,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + "diff@npm:^3.5.0": version: 3.5.0 resolution: "diff@npm:3.5.0" @@ -388,6 +969,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -395,6 +983,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + "emojilib@npm:^2.4.0": version: 2.4.0 resolution: "emojilib@npm:2.4.0" @@ -402,13 +997,29 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.1": +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + 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: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 languageName: node linkType: hard +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + "error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" @@ -425,6 +1036,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + 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-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.2 resolution: "escalade@npm:3.1.2" @@ -439,6 +1130,15 @@ __metadata: 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: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "eta@npm:^2.2.0": version: 2.2.0 resolution: "eta@npm:2.2.0" @@ -446,6 +1146,30 @@ __metadata: languageName: node linkType: hard +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + "fast-safe-stringify@npm:^2.0.7": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" @@ -463,6 +1187,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.2.1 + resolution: "foreground-child@npm:3.2.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/9a53a33dbd87090e9576bef65fb4a71de60f6863a8062a7b11bc1cbe3cc86d428677d7c0b9ef61cdac11007ac580006f78bd5638618d564cfd5e6fd713d6878f + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -474,6 +1208,24 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + 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: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -481,6 +1233,25 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -495,6 +1266,20 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df + languageName: node + linkType: hard + +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10c0/5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + "git-diff@npm:2.0.6": version: 2.0.6 resolution: "git-diff@npm:2.0.6" @@ -508,6 +1293,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.1 + resolution: "glob@npm:10.4.1" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/77f2900ed98b9cc2a0e1901ee5e476d664dae3cd0f1b662b8bfd4ccf00d0edc31a11595807706a274ca10e1e251411bbf2e8e976c82bed0d879a9b89343ed379 + languageName: node + linkType: hard + "glob@npm:^7.0.0": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -522,6 +1322,13 @@ __metadata: languageName: node linkType: hard +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -538,6 +1345,23 @@ __metadata: languageName: node linkType: hard +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + 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: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + "http2-client@npm:^1.2.5": version: 1.3.5 resolution: "http2-client@npm:1.3.5" @@ -545,6 +1369,32 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b + languageName: node + linkType: hard + +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10c0/5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + 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: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + "import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -555,6 +1405,20 @@ __metadata: languageName: node linkType: hard +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -579,6 +1443,16 @@ __metadata: languageName: node linkType: hard +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -602,6 +1476,20 @@ __metadata: languageName: node linkType: hard +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10c0/eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -609,6 +1497,26 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.0 + resolution: "jackspeak@npm:3.4.0" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/7e42d1ea411b4d57d43ea8a6afbca9224382804359cb72626d0fc45bb8db1de5ad0248283c3db45fe73e77210750d4fcc7c2b4fe5d24fda94aaa24d658295c5f + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -616,6 +1524,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.0": + version: 9.0.0 + resolution: "js-tokens@npm:9.0.0" + checksum: 10c0/4ad1c12f47b8c8b2a3a99e29ef338c1385c7b7442198a425f3463f3537384dab6032012791bfc2f056ea5ecdb06b1ed4f70e11a3ab3f388d3dcebfe16a52b27d + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -627,6 +1542,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + 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" @@ -641,6 +1563,16 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.5.0": + version: 0.5.0 + resolution: "local-pkg@npm:0.5.0" + dependencies: + mlly: "npm:^1.4.2" + pkg-types: "npm:^1.0.3" + checksum: 10c0/f61cbd00d7689f275558b1a45c7ff2a3ddf8472654123ed880215677b9adfa729f1081e50c27ffb415cdb9fa706fb755fec5e23cdd965be375c8059e87ff1cc9 + languageName: node + linkType: hard + "lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -655,6 +1587,58 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.6, loupe@npm:^2.3.7": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: "npm:^2.0.1" + checksum: 10c0/71a781c8fc21527b99ed1062043f1f2bb30bdaf54fa4cf92463427e1718bc6567af2988300bc243c1f276e4f0876f29e3cbf7b58106fdc186915687456ce5bf4 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 10c0/402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.5": + version: 0.30.10 + resolution: "magic-string@npm:0.30.10" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + checksum: 10c0/aa9ca17eae571a19bce92c8221193b6f93ee8511abb10f085e55ffd398db8e4c089a208d9eac559deee96a08b7b24d636ea4ab92f09c6cf42a7d1af51f7fd62b + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -671,19 +1655,147 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + 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: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 + languageName: node + linkType: hard + +"minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + 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: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + 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: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + 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: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + 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: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + 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: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mlly@npm:^1.4.2, mlly@npm:^1.7.0": + version: 1.7.1 + resolution: "mlly@npm:1.7.1" + dependencies: + acorn: "npm:^8.11.3" + pathe: "npm:^1.1.2" + pkg-types: "npm:^1.1.1" + ufo: "npm:^1.5.3" + checksum: 10c0/d836a7b0adff4d118af41fb93ad4d9e57f80e694a681185280ba220a4607603c19e86c80f9a6c57512b04280567f2599e3386081705c5b5fd74c9ddfd571d0fa languageName: node linkType: hard -"minimist@npm:^1.2.3": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc languageName: node linkType: hard @@ -696,6 +1808,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + "node-emoji@npm:^2.1.3": version: 2.1.3 resolution: "node-emoji@npm:2.1.3" @@ -731,6 +1850,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c + languageName: node + linkType: hard + "node-readfiles@npm:^0.2.0": version: 0.2.0 resolution: "node-readfiles@npm:0.2.0" @@ -740,6 +1879,26 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "oas-kit-common@npm:^1.0.8": version: 1.0.8 resolution: "oas-kit-common@npm:1.0.8" @@ -807,6 +1966,33 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10c0/4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"p-limit@npm:^5.0.0": + version: 5.0.0 + resolution: "p-limit@npm:5.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/574e93b8895a26e8485eb1df7c4b58a1a6e8d8ae41b1750cc2cc440922b3d306044fc6e9a7f74578a883d46802d9db72b30f2e612690fcef838c173261b1ed83 + 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: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -842,6 +2028,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -849,6 +2042,30 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 10c0/f63e1bc1b33593cdf094ed6ff5c49c1c0dc5dc20a646ca9725cc7fe7cd9995002d51d5685b9b2ec6814342935748b711bafa840f84c0bb04e38ff40a335c94dc + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.1 resolution: "picocolors@npm:1.0.1" @@ -856,6 +2073,28 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": + version: 1.1.1 + resolution: "pkg-types@npm:1.1.1" + dependencies: + confbox: "npm:^0.1.7" + mlly: "npm:^1.7.0" + pathe: "npm:^1.1.2" + checksum: 10c0/c7d167935de7207479e5829086040d70bea289f31fc1331f17c83e996a4440115c9deba2aa96de839ea66e1676d083c9ca44b33886f87bffa6b49740b67b6fcb + languageName: node + linkType: hard + +"postcss@npm:^8.4.38": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.2.0" + checksum: 10c0/955407b8f70cf0c14acf35dab3615899a2a60a26718a63c848cf3c29f2467b0533991b985a2b994430d890bd7ec2b1963e36352b0774a19143b5f591540f7c06 + languageName: node + linkType: hard + "prettier@npm:3.3.2": version: 3.3.2 resolution: "prettier@npm:3.3.2" @@ -865,6 +2104,41 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + 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: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -872,6 +2146,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + "rechoir@npm:^0.6.2": version: 0.6.2 resolution: "rechoir@npm:0.6.2" @@ -928,6 +2209,92 @@ __metadata: languageName: node linkType: hard +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"rollup@npm:^4.13.0": + version: 4.18.0 + resolution: "rollup@npm:4.18.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.18.0" + "@rollup/rollup-android-arm64": "npm:4.18.0" + "@rollup/rollup-darwin-arm64": "npm:4.18.0" + "@rollup/rollup-darwin-x64": "npm:4.18.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.18.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.18.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.18.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.18.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.18.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.18.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.18.0" + "@rollup/rollup-linux-x64-musl": "npm:4.18.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.18.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.18.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.18.0" + "@types/estree": "npm:1.0.5" + 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-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-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/7d0239f029c48d977e0d0b942433bed9ca187d2328b962fc815fc775d0fdf1966ffcd701fef265477e999a1fb01bddcc984fc675d1b9d9864bf8e1f1f487e23e + 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: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 10c0/97d3441e97ace8be4b1976433d1c32658f6afaff09f143e52c593bae7eef33de19e3e369c88bd985ce1042c6f441c80c6803078d1de2a9988080b66684cbb30c + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -1032,6 +2399,20 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + 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: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + "skin-tone@npm:^2.0.0": version: 2.0.0 resolution: "skin-tone@npm:2.0.0" @@ -1041,7 +2422,72 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: 10c0/4950529affd8ccd6951575e21c1b7be8531b24d924aa4df3ee32df506af34b618c4e50d261f4cc603f1bfd8d426915b7d629966c8ce45b05fb5ad8c8b9a6459d + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.5.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 10c0/60edf2d130a4feb7002974af3d5a5f3343558d1ccf8d9b9934d225c638606884db4a20d2fe6440a09605bca282af6b042ae8070a10490c0800d69e82e478f41e + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, 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: @@ -1052,7 +2498,18 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"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: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -1061,6 +2518,31 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10c0/a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-literal@npm:^2.0.0": + version: 2.1.0 + resolution: "strip-literal@npm:2.1.0" + dependencies: + js-tokens: "npm:^9.0.0" + checksum: 10c0/bc8b8c8346125ae3c20fcdaf12e10a498ff85baf6f69597b4ab2b5fbf2e58cfd2827f1a44f83606b852da99a5f6c8279770046ddea974c510c17c98934c9cc24 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -1106,15 +2588,16 @@ __metadata: prettier: "npm:3.3.2" shx: "npm:0.3.4" swagger-schema-official: "npm:2.0.0-bab6bed" - swagger2openapi: "npm:^7.0.8" + swagger2openapi: "npm:7.0.8" typescript: "npm:5.4.5" + vitest: "npm:1.6.0" bin: sta: ./index.js swagger-typescript-api: ./index.js languageName: unknown linkType: soft -"swagger2openapi@npm:^7.0.8": +"swagger2openapi@npm:7.0.8": version: 7.0.8 resolution: "swagger2openapi@npm:7.0.8" dependencies: @@ -1137,6 +2620,41 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tinybench@npm:^2.5.1": + version: 2.8.0 + resolution: "tinybench@npm:2.8.0" + checksum: 10c0/5a9a642351fa3e4955e0cbf38f5674be5f3ba6730fd872fd23a5c953ad6c914234d5aba6ea41ef88820180a81829ceece5bd8d3967c490c5171bca1141c2f24d + languageName: node + linkType: hard + +"tinypool@npm:^0.8.3": + version: 0.8.4 + resolution: "tinypool@npm:0.8.4" + checksum: 10c0/779c790adcb0316a45359652f4b025958c1dff5a82460fe49f553c864309b12ad732c8288be52f852973bc76317f5e7b3598878aee0beb8a33322c0e72c4a66c + languageName: node + linkType: hard + +"tinyspy@npm:^2.2.0": + version: 2.2.1 + resolution: "tinyspy@npm:2.2.1" + checksum: 10c0/0b4cfd07c09871e12c592dfa7b91528124dc49a4766a0b23350638c62e6a483d5a2a667de7e6282246c0d4f09996482ddaacbd01f0c05b7ed7e0f79d32409bdc + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -1144,6 +2662,13 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + "typescript@npm:5.4.5": version: 5.4.5 resolution: "typescript@npm:5.4.5" @@ -1164,6 +2689,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.3": + version: 1.5.3 + resolution: "ufo@npm:1.5.3" + checksum: 10c0/1df10702582aa74f4deac4486ecdfd660e74be057355f1afb6adfa14243476cf3d3acff734ccc3d0b74e9bfdefe91d578f3edbbb0a5b2430fe93cd672370e024 + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -1178,6 +2710,129 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"vite-node@npm:1.6.0": + version: 1.6.0 + resolution: "vite-node@npm:1.6.0" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.4" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/0807e6501ac7763e0efa2b4bd484ce99fb207e92c98624c9f8999d1f6727ac026e457994260fa7fdb7060d87546d197081e46a705d05b0136a38b6f03715cbc2 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.3.1 + resolution: "vite@npm:5.3.1" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.38" + rollup: "npm:^4.13.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/9317262c02ea2dc324dfdbc20c3c450cd89cc9a16399a41a4bf820a3a1f31cf400878c015135e355ee034853cc2399b5499899d5b1bc462d57642d71083e74b6 + languageName: node + linkType: hard + +"vitest@npm:1.6.0": + version: 1.6.0 + resolution: "vitest@npm:1.6.0" + dependencies: + "@vitest/expect": "npm:1.6.0" + "@vitest/runner": "npm:1.6.0" + "@vitest/snapshot": "npm:1.6.0" + "@vitest/spy": "npm:1.6.0" + "@vitest/utils": "npm:1.6.0" + acorn-walk: "npm:^8.3.2" + chai: "npm:^4.3.10" + debug: "npm:^4.3.4" + execa: "npm:^8.0.1" + local-pkg: "npm:^0.5.0" + magic-string: "npm:^0.30.5" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + std-env: "npm:^3.5.0" + strip-literal: "npm:^2.0.0" + tinybench: "npm:^2.5.1" + tinypool: "npm:^0.8.3" + vite: "npm:^5.0.0" + vite-node: "npm:1.6.0" + why-is-node-running: "npm:^2.2.2" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 1.6.0 + "@vitest/ui": 1.6.0 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/065da5b8ead51eb174d93dac0cd50042ca9539856dc25e340ea905d668c41961f7e00df3e388e6c76125b2c22091db2e8465f993d0f6944daf9598d549e562e7 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -1206,7 +2861,30 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/805d57eb5d33f0fb4e36bae5dceda7fd8c6932c2aeb705e30003970488f1a2bc70029ee64be1a0e1531e2268b11e65606e88e5b71d667ea745e6dc48fc9014bd + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -1217,6 +2895,17 @@ __metadata: 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: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -1231,6 +2920,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -1259,3 +2955,10 @@ __metadata: checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 languageName: node linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard From 2f4cb2daf912b5a1abe3374c94a073b1749a206b Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Sat, 15 Jun 2024 13:53:44 +0900 Subject: [PATCH 018/138] Update README.md Signed-off-by: Sora Morimoto --- README.md | 44 ++++++------------------ assets/auth-example.gif | Bin 5038195 -> 0 bytes assets/components-converter-example.jpg | Bin 65363 -> 0 bytes assets/npx.gif | Bin 326264 -> 0 bytes assets/swagger-typescript-api-logo.png | Bin 14269 -> 0 bytes assets/typings1.gif | Bin 3892155 -> 0 bytes templates/base/http-client.ejs | 4 +-- 7 files changed, 13 insertions(+), 35 deletions(-) delete mode 100644 assets/auth-example.gif delete mode 100644 assets/components-converter-example.jpg delete mode 100644 assets/npx.gif delete mode 100644 assets/swagger-typescript-api-logo.png delete mode 100644 assets/typings1.gif diff --git a/README.md b/README.md index d2f7361a..c603bd49 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,16 @@ # swagger-typescript-api - +- Support OpenAPI 3.0, 2.0, JSON, YAML +- Generate API via swagger scheme +- Generate API module use [**Fetch**](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) or [**Axios**](https://github.com/axios/axios) to make requests -- Generate api via swagger scheme -- Supports OA 3.0, 2.0, JSON, yaml -- Generated api module use [**Fetch Api**](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) or [**Axios**](https://github.com/axios/axios) to make requests. +Any questions you can ask [**here**](https://github.com/acacode/swagger-typescript-api/discussions) -
+## Examples -Any questions you can ask [**here**](https://github.com/acacode/swagger-typescript-api/issues) or in [**our Slack**](https://join.slack.com/t/acacode/shared_invite/enQtOTQ5ODgyODQzMzYwLWYxOGI1MzQ3Yzg1ZWI5ZTI5NzNiZjExZTE5OWI1YjQ4NjBiNTk4NWVlNjM5YmU1ZWI2ZDkyMzZkZGIxNjA5NTQ)(**#swagger-typescript-api** channel) +All examples you can find [**here**](https://github.com/acacode/swagger-typescript-api/tree/main/tests) -![](https://raw.githubusercontent.com/acacode/swagger-typescript-api/master/assets/components-converter-example.jpg) - -Thanks to [JetBrains](https://www.jetbrains.com/?from=swaggertypescriptapi) for providing a free license for their excellent Webstorm IDE. - -## 👀 Examples - -All examples you can find [**here**](https://github.com/acacode/swagger-typescript-api/tree/master/tests) - -## 📄 Usage +## Usage ```muse Usage: sta [options] @@ -203,7 +189,7 @@ generateTemplates({ }); ``` -## 💎 options +## Options ### **`--templates`** @@ -487,21 +473,13 @@ generateApi({ See more about [swagger schema type/format data here](https://json-schema.org/understanding-json-schema/reference/string.html#dates-and-times) -## 📄 Mass media +## Mass media - [5 Lessons learned about swagger-typescript-api](https://christo8989.medium.com/5-lessons-learned-about-swagger-typescript-api-511240b34c1) - [Why Swagger schemes are needed in frontend development ?](https://dev.to/js2me/why-swagger-schemes-are-needed-in-frontend-development-2cb4) - [Migration en douceur vers TypeScript (French)](https://www.premieroctet.com/blog/migration-typescript/) - [swagger-typescript-api usage (Japanese)](https://zenn.dev/watahaya/articles/2f4a716c47903b) -## 🚀 How it looks - -![](https://raw.githubusercontent.com/acacode/swagger-typescript-api/master/assets/npx.gif) - -![](https://raw.githubusercontent.com/acacode/swagger-typescript-api/master/assets/auth-example.gif) - -![](https://raw.githubusercontent.com/acacode/swagger-typescript-api/master/assets/typings1.gif) - -## 📝 License +## License -Licensed under the [MIT License](https://github.com/acacode/swagger-typescript-api/blob/master/LICENSE). +Licensed under the [MIT License](https://github.com/acacode/swagger-typescript-api/blob/main/LICENSE). diff --git a/assets/auth-example.gif b/assets/auth-example.gif deleted file mode 100644 index 5a32470168f59e8d795381da7623491651d9b318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5038195 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

#t7L)Tg2o!oe>n;8+rxvx&l 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 =_iat7E&ZS0~=IrFI3bk7IQ_@Qf zExxGTmYYg^t(VuJyQ@>p9B<~M=b!hip36ep#;-XIvwFkbqiR9cVpUq zy*Ujh;i4T?>3c+D)!L);O_~Ky&>Kp9-%IZ+&gRG%f#-J{cu9`7Kaw2dF6oX3^mic>`*w0+tSw?7Tkiil9`l?&cyYXdnln9kARjV|kb z#HqX;)hLm)B~Kt4nB<10)z+>wJTnkqjUKGfEl)6?*wcWQ-SK`*0pddS?j%-B{kbWr)!2}OY2OP;qJU`>zP*1heD&UyoQ54OKvFwE8U`;; z4v=pMP?!r)x(ZOn3sn6*WONJEPX04wG`tEl#tSm#3xdImE!~2wk{{s3wsS$R|9!~l zmK^NS5bQY@?EP!Vh+)A4QU=N?hxqgH2l3gXCWkK?n@dae!F(u%IDR746X@?b}@yo%%U>pnub76u%!YYb5Gx);&tHYGUXz;AUJt)Fk zt~lBTKyadPa4~RN8WHVo47EjIm>~mxjbb7>A~y#PTp8BT09J*-4Osb4g;1^4hOEtk z#n>X2wHZR(LOP2;3s)4|4cuFEQ3kn@OK8!bIik++qL1C8b>pIM_}<*jML#!-hI0>v z^2JD~#h^5Do+ih@hsHdz=KOXQBfl8~n&+6;ju3N@#&&0i{lx?t9JmpJwMj7`8-c#2 zxlJ3(&=|`EgBM@JB9=G~{x~ieyx2XC51In=%*F}9;KkQ*qWJMJc(J5TytI3~Y)ZU* zW4ywAywY{NGJb+8e}cMBf~I?dc1nV7V}kyCg5h<7F@B;cf1!ip96*iT|z~Iu^svjDjCy4hMn=qoY`)u+vZaKgYVUCEzTX zdavYTvpn=~uP+d_-Dp^%B|ZycaSgUy6z1YXvF#t~7?hU1b*cbO)E|lm6Z8_FqOq0c z3Aw5^eyd|1k_WPnE69gQBff)R{7uCViGOe0&9K*3m^%rRfCE=ou@R?k)b6c?;}R@+ z_{~9_$dKVL(k0uEpU(aL`Z``iRfj$`g76wOJdvpc4HT0V!yiL!DE=l7FWPEaSCOr* z>sNh$B@eZcxN53Rems4Wo3rARRt0zFB#v~oP6={YWWS1Sbf#YY%vwSI>DF#)ugD(r z{wcPBDT4Su|J7}J z5<($H{aHpsQcZRb5`&WMj%CARgKg<<@cYJ1ul@eXv(LQ>>S5}0k}Odc1sT7(P4w%b zbP7UpyAy9kKL=Pys>XDU$=dL2naQTH{7D{+j0BR@({g_&4+4{E=myYwmEt#@0+5{Y ze@h-r$Fl{J6RMy5;voJ_9_%JD$ZIv=gUV{>T)rLFul?pAHUrDC9bf(FHhu4VP_r{w zzG|h~fOVVhF22EDU#PZ)m0Kl@ux=CWFAk!9dFK;WUQ5|aX&49bQY_-+6@e}6^);6L z4bn$89iJgfl?21cOzaJmSR*!Y`0A5U4xf(ly?YHiM)8D zDD(B;Y`UxI(L=Y188R^;-GtkTXl;@RrqF|Rn>4zY0KR$_`v(0lAg~)ZFzr-c4!ksT zW~q6KSNFw^7aG95tU%E6p~w#J|bL(Z$G{QH)~OkDcu~Jv$lPjdCWbwKiGiE>KUR-7+|I& z^5a?DVK?uwXICr~+!`_>V(+!~JkIqPgr#AnraAq>joFlz{u$(yF5Bn+=Agew^a5kNB8ZWXyT&!zUmdG9N}mKDc>CODL|C`UOODKypor>9>_56q zGO}HK*tC?G5mCs`2fA?nOSfq&s&)+*dkv2&kpH3Ey7?XW57sPCLvXo|bGZN(Eo z6qT9i=x}1mt`h-kFFrgOEs~ByoQU+8QQqm?m5w>D_s5}Q$Epr_iV7;SFwG}#XIh>R zhN)w0w%_oK?scp7#_9d6phQ0_77wsd%6PbOE0(D0Op!stdWxS%mZ%rX&z21JE6rHG+KR}J zwl5hehM-dybq%8*U%Qs3Or2iTcW6AZXK_xNMTsW&h?IS5WK+1!U~bJQiGz)KT0qfu zq1&!NF3$>z2hH=)OnpR?aG6Ux^#;<;kmoC;S50|mUN*AzmcO(Kjom_V)md%*o?ngeh*OYwD zv=EN4H=uF17pJO61q5FhZt6aNKxnoEaQQhy#jJ^z&uY4_%}hO|--zkX?Sy;dk2LXJ z@kz*i67V?|GP-U5aqW*3%H`UF#(M zW~#ZfkdLm2u^{5xcwG83(E{dJbNf7rO=5Jjor4srh{A=i%K1kAhGPl#=;?{#WC6mB z-7KOYqN^@m$@F<(^<=@~o%iSbi4f2#S~9PZSb=4eTy${$Bz>gfNd~8Tz_?E0veYVw{B*&W(=`)4n%$Pe2#kq+* z&elZu1;s7KaoBu@+3{MYD*}*c)Wa2`-y{Wi0xYVQ{H9=pKE|38*`DkrqRom{Zmss+ z&*AajMCHwM=iHp8uQ&Yn67SY}qJYei*PBQ>GJWVu5RRvk<{lOeuIk->@D7K=C(BRP z8*?s$9G)@po5&{6n@0OQTEo=`N{Ofo#e9GW9=bbv$eWXrj9~R>E2iE`Zt*3Ked)0X zHVHla+9eor6{KgQg0LO53fkFx`y*RG{@dp_-W`q!2hd+Kq49*}c0J(IQLE$0}FT(%%IxLMFq8yqcMNTF@uS4)XDB{loe zlXL+g#f!iBs=Co_R{O(xL(P0u4M&jD=SBBBf;qn)aX@a8uSvGo9j^KDxtoQUe_9|# zS0xTP(4XAV>p}+Wi;Vxtv(Cg}YrOr7Zb1xzS)Eq%WQlGn2PIiZDc0}b9Zu=3E+&LoB4L2H6DLEzVP zc>A!EJ$vZWNpEKOP)ih2mz|LJgNXCI7x@gv(SfsjTsK=J>oHI+YQ*&eA_oiR`DJX&gl^} z5In^F#=RyiM?6e#-E&|)5&*$~dFHdSG2V1KUWi2*Omdl{hHLeKEGJP@6IiR)^42 zeBfIxp*M)?nEZGezFwmU@LF$x6%GnuG=g?@hZ__eAS_V0bVr7s&>pb?BHu?G(*b@2 zcvD*w_R0|GOB1Aq08Bpsl_!W$=7BrA*e^l>+FcgGt{{&uAxF+_Lb4pflv zxASk%R3eyxn2UG>?|}&doig=c{Ka0pbo?~bN&WDOTaAzI}BAS2;6Vw34 zLIJOhKTxkb);Y1F8Aq6laacO%4K!kN?UOu#?8g0ux+E)`Zt9wT zPY0w41}2r1KHRt&C|ZVc27leSld8)y#0n?=nj{kn1Ai066y zx^Xu#Z7u{r7d|x-RFIeyAiS$c3;A{9zU8So&3ydp#;xB&IU`?*cZ-XXR*Cn#g29h~ zWVrI-#;sRH^X|`$n`yC%<+h5Au$n`#noF;m2l}p>FRfajxmswkTKKkFl(0rzutrj^ zM*3ZiY+8+cbB)4cjnZw6GGVQ%V6D1dttMue)JcX`bFDt?#(i6BOju_sSO>dtTfVEa zN~^PJuCraNdwpByFkDFvQ^)Al*SxKCX|5aB|DGjMtzR}}(L+mS)^yccYSN3^=O>YRB8g3dh!|RKh z%M)*#l81rWZ<;=q8kGn()P`5*KW_?Oy}h_9_%pX8qQ9v$=KUUE5lC+eT^I)^OWS8cZG2 zcCy&^2jL_(d!`kkbno#g4AlrW8qXBSyS7e!eY)kqi2A;Z?v#lFD=}Gn>xm`W*0%j%af%QeE?;> z->(elV>=LNTO10t1qPQ5yk{CXM;j!g8>9;vh_)SsL=4824JI56q#O*UJsQdw83@-0 zMk)*?F%4<<4VIP-A&L$ZM+{{#4QDG1=h_bCD*y{4hAT&gs}F{2Tl)Xst7Fo~_FKjd zmd1|m#=aAcp9+ni>5pG{j$fsZ-?WV1E&Won6Hg#K`=w_0nn25#z-XO#^h?bSApWPC z{W}=jEaE}U{#hElk2*zSr_;a~LusdTDUn+9Zt7UQfyqmU{CuQ0v+~56TLYFF%$mHa+;@l#Q&Cgbv7HM_xLo!5h!y{Q$Zj#+HGU+f@W>Uy>WQ?vJZ{Z_{; zjV%9C#}F@1JzJhJSpMv_JeRS&(7L>|yu1RvUtS|#*?6|HWw5g2wX&PBvfsLLu)K0~ zzw(`U_4L{5nZfFX*XmWq>P_qF-TzUu|Nl+RUjF~6W?y~Q`%;VzfY^Hl?APrSloeTd z%_NX!vv!68EE{FvpDcXJo+oV&1Pp`ZI?nGREz;8buZ7QzvtO^TN2;{%DUedg0g|~Y z3lqE-6lDN>Nj+|_FA>+yQcf;RA$V>CUv-eKc(cw?fR{-scwwu+kYn-`-F2;YsY0|J z!b9p9yGV9OpHcMs9lq6A?6n5*Kjbiozh^pkNaKGZOfa5_Xs6#_Im|Myb`0qSZ;dgoJA2S_Tfus?( z&HXjcOrc(C5=K=&P-v>zn=Vo-T_NGtS@xRP7yHu_y9wN-GHzX{7=b3-D zxuGi%-G>5605|$hvU#H1mnh4BY;&6((I4iSgK^0&zvr2M%TwC-mUMsTnI$_f=lTDZ zr+79(_x_ZpJW#F0aRdLBr#@K^!Dc#r(1-GrKR1IIdZgxml&2(@1(b^icz#8g&x=c^ zewU|i^Qsp1N?;Kt!Pk!xs%t!Q4Z8)4`uO{>d8WF4I(NCOid98S`teRPUM=zZpskIb zc^+db|ESSfGL?x~po99cPuB&Jn`)ip~J=IqLa?i{G=Gq)UFUYJX zyB|buOE^f_&tx@Zqv(s(&GA*?b2eYJxxA zbQBbl5Pc=`0edJ*ed=l2hmo*v4+ZFN*EWq?qi&BoP+40vtJAdZz7NpCNZ2Wk!@o$_ z_h~AZ?#g?I5g&D2ro~UK{rx@Jk|9zqXBXgMp806@r~E+rBb*>t z`iSgDFL$$$;5y~nnjd2_t93bcI&cf-!3rdZ{hdm{2y>SB$DPIlom3n>?=c)V;G)o) z61Kk6I64x_x)jw%i8{iq-kPYkg#hSP&BG)KL&{^4V_8txDPBoZ%0Hr!F0er2w@k;_ z=iu$RZ>fy-wMDB%O9Gzivy<*4)d@utM@$JkBkt6$(@$udwQ1f0#1Ce5J8Gvr4d z+sKf$nhmDfa)e1unu>dVp;G>wA1{8bC`ESN0Lq+-5;4IiA>|kz-Lqg(kINmO*p-KF ztB}WZr~>V)Ml3wG5oP??h*%2l*6-3nP(qeHMwvyNw>ol?>I7J?hj4`+F2Iy>n zprPdeFsN}yiwgo#KtM^oe-+DX5DOisD{`Wke}qmCcCD|4?~OyKr1dP&!G41hXou)% zwU2N^+!abez3?4P;te&nXWuIr*Ope2jzG~yKr)92xF?zCOA~^!ot0lkBZGDNB5q)s zg0Xl{^#C3xeDa#M_%fVq_cJvM3@jZzCpE_oC4dh7lb)# zL3x~1tKlUwbT z^Cj|Jgjh-P0Y#CNavHe9xGhlmuQphOXmbUdJ0k&YBJu{bDwDsK-(Qc0zmuR# zEvk@BmRdR+>gfg@e0}j<5YK}rpa*TQLv`tPD!>hwhNe91J+`>)T24Uky42`ne4=8c zjUjtlc*mDh&2oLAcH|zLCvwTX(@{tr3<-94VNl+{sLILy=^C z2r(($nnw(MUU_L|XU=J}F#ZUmp>>%_|7*UL&6tI$0{63Hy;6hgPq4+0(l8n2$2<(wG&# z(C~wPV1|k|&^v!~iTCfrZt6$MKJr}qJSiS1(2k11BGzkub6|o(dPix$im@+AA5$&3 z{ax#8=w@^5W$T@mfOW;CAbW`@?Krr2T2f^I@yl zi-8xCM=J1wvbIWCb1%0lL*!Z&JztPvASqq$hPqj9FU^D&Nl?GzJydjy2t*P4U@5s{G9Iiju4DG!$eQAAh=JsYp)0DGhKRAN zhzY#NDZa=VS-sIBaIbdc0!-!7Kvq8&xdww;;t}=l0`GUiH=Kduf2&-)RdweFqT#MVhj=jy+EF1^Aj2QgNR2U%=Ks!g_#t2&2#z}hF9kx- z2qBt>kX%E^@M9_XW2s>FYxh{Xl>fFsf*v&<)>R`tDeEK$h=2!mAos`Voy^Qa2nJ4p^KZ-Mt1~V^ovWDR2yn$Gfazg_O7Jk#`Q#+4XO)d}9YpYZrc*+YnV(GVVMC;wvlsXJQOLtg zhkrVWML-m_0gIO4f2)~}EP+f>m=H!&$u0#v?qvArYffIC`(i;8?oUV$$`tK;1DG%8@FK?^Y}QR%LQ-zap8u3{^p~9 zZYegza+aYy@W(Sa-*W%BG8taD;h}P0tn$+vu1SH97>?ywx}Pe=Ki!3KA2k7%Z$4RV zenKMTlq37Nm0E!aFZI=fO@nJ(}x17wf%m>wO6u`~@2V^csTR zHH4%!gf%xrEH*^lHpCD%#tOph*Nutq8k5r+Q=1#p7aKEg8$S>> zDrs&iTWl)7ZK@z_t`cmn(QB@I*W8fS+|=CMve?{q+uT9e(k0l^qu0{+u4N#tWvCfu zzit`3ZJ8i!{YQj3m)5$_+`6>bx^fG%UlX=%2)1qMwe7rX+f8fRZ*DtSY&*Jb`%c(? zD%gIe*M9M?{VJ{frn&uYvHj<5I~-95f=~yNeg}$Y2U>auMoY(|rH&_e9RQ+EkWeRB zzZ1u^6ED4!prw;&sgvZclZ>c~La2*Mzl+ARi!Qy3p{0vysf*>Vi;bw8L#UfeznjOi zn=idvpru=A>E9zv&mP(I9{H9Yg{2;)I~ZcCS5>I@lOqsIwpUw->`~gE2-8?UzK`G` z!u(^u9w{_y`4{_jORk;%zu2!ICA!}A|I>b52JwTY|BL;4Bs5&;kNrBeWiXvdG-2sq z?AMR@vONFVuhS`SZ-%PU?W^^Nd(4I#mQ))5+ONL@hdb_u9UV)%|Jtv8$wx-?hkNzO zR&GYPAGt(O#)m+%Z)ic>vma&-0E#>HeIvxE6rQK&qXg^D0uZ=4rs^>TY~n@Ri&7ql zNzie6&15>kp#r{aj2sV7%#B_y^OEOdu|P}q+)Jj8YKw^mPlcztI1xx83kn1Z4fUG! zjIV;r(Ob!}vKfP`CSUtSJpy{&MvRrFj(72l?p%>Pv6_N@3t=Ii=6Kdk_9zmM?b$SX z#1#8~1SI$W2uO%zD}JxbU^BDqPO2w=*JXH|!ew+OaFU@ITw!^0khOk4YSc{i*ot*o zKOjaX*L79FXd2&}-|Mpf$$*67VAp94uhJ?lD38G0N+-CCrA_f)0}`WZA4E(NeTTpN zD%irNh5oU$_rY|(&WTs0d8KzQCT!XBL@ku%ZuP~ zGOTFz058)Z@Bh>B3V|e$2MeZUc#y4%*&uffwf2doN?i)f@ZQ zb^B{wX8A@{IA}BZU*Kgd)~4yt67V&BUk3FnTXIbP4M=`Ne096aYS6JaoLGPoBr) z)KY;zW=dVxP2_6OAgjay6T%_Sbwb1dJqhqIepNok!@8`S&%THf*SSK2Ci5U>h`j!Q zBZA}-%<1vD6~?dfP9)Nh!SLxl6<3kp4q$w zsK}Q*vCaI7d)7Gkak`13QQ%uA{qT=2^+HOLHG^JNyl<3Rh!ZaqjTqxEmKC<4trx4l zm_f&(r`N==j#pvP8_74D=9{LG_KET9p<1uq)#7HG1HX#)lhC*Klvg*WFjd(7*^Jh4)A`)X zPxml>mC;H|W$tXt@fui2;mbVm7Q!7>F&|F81~qxpMO4^0-|?eIWEU z)nEAJyFJ|cZ5BfNRwY7WF*&lr7(8|?h@Okdg~~}5DLW^C6DFA>81NTu?AuC(B@Z&;&aLB0Yc*Lh>;|7PA1+%={Cqc$xSE()k8&j@VaTD ztb@>+x}}P3I^5cT6uk!Mdz4Rok|Clr0Wm%i=E+y6a%XENG)?#& z_^&wpA|yqz5F4nvs1SO?@>F7rMy9N<3TqKU`@o<4LW0HpQ|htJk@z4lsMTQns=6K7 zLKrXPMZD;l^AxQd-Hue(*I4))#qjP2ewEy)nwUAq7X?`&cCP0QGL38v5}8O|eKk zA73E_JwFrkVPPXb8HR(Dg9Gb$@eWN!El__Td0Z?jBR>_pv*k$h$92179>)?{tnd=n z@me@5;2SMgYIYTUdvsRVW=p3W{D)(rxIY?DGE>m?DPAd(;e#kW;{~5;i8joVR6V4z zJ+GQ>@R;%ZYFfTB_1sID`>W2Eq0ez@NRTI~oFXvo1&!UMt^tTu?254Mz!e^B%wd!@8JI|=|_#-`qpBI!w#X34ZM2*{Xbcj{$ha`9` zQ+^R?V>8Lrd;xjAhaJ^4xS+F&!cNwOE;onO{%0unXU%9jREh&XIK6z*${JDZ9Lrl# zX3-6RYz$+LJw?d{#rwno-=W6DxT05NKfLAOvfsTB<#aM>K|bt!&kV#}_n=Ti8Ro#63a<10$2n}KAFoXf!^#nY&;kLVomMPIimmxbRd$}&R~9+8Qo@r>+Xuz)>h zmuL+fLP*&C&yrlVxaT##$3j+4ZzFJ_Gs}y69Ln@DSrJ?J*nr|Pw=NN5 zvBj4+D2%xuTDIk~ax7^9_iNrt$x zEi+TeTzIZWk!Z;!7OQO@EXi_IxGbx|gLh@0)JSGXDo5Rze*?q}xJq}u6wUGd(eh<{ zKq~DB`i)jqv+xB{j@=1x^e!Nr9I9suSaa7Ffp%CteTu2JrbhgZt{lMdFQ<#EC2Vx}X1yE8>I~xW*3| zh(u!QdWUL>!S2W>=0Cv;ilPOu@xjeqg2rdSIj$-QmHY%&SWm40OXu(K*(LOFHRQE` z3%D?lnt((4Lb)q z@l+VzROY>dxMQ%0rJtl;wZUP73i7-=%NJ)sxw7{begTaFn@rpIj!ghtiRSf(oBZe zQJLh5$#z@0d1>P)%K~{D>|@Ow{n;ZV`9SO^B$jk8zTKfJwZ7dmz&&k3ZJJ0C@|Slm zK6TnycTS*fD~C00PhqhjMH7nHT`w(HYluq>&KCgPtf50<489lvUk<%o(0k-{+wVn@ zy|aeN?D|S7F&KrB1G1q{@v*;VGp6=Ql)^*y@tAVwV%dsu@#+krXvVsb2z+QAI7-WL z#}OcL0ZuGZ5YZu6I}zB^#yRYN&kkGIpz|bZ%bM32SOcT6Cjo(!Q5tgQF?FbSBIbbFstM-)oSIq$fk6Ph1DeJd#VK#YvThIJ8WsNFqo0b%!Ou=0T?T z#PbBjfLQ7jc0m#8iR$*$MhLrM0G6+ z@k3_y9@KuNW*qW$efT_d*>n0S~@`XW=?^%aiioR+Xbpy6!T=wNP zR$vN%{Du-BrbQR#Dg$wR+Zil=LWczstl`KV{sAnvCQs9PqR8%tZQ>$JPRa@fYHB;% zHUf-AafNOOhC{I)h2i=P;J%Ot)6fDwDFYGEBp7}G`_ZsjZj|xa3&1Ci8gRUMogCS0 za4?@w7e7#EB7nTeGa4RVEc?T=FsyL2_5SrH0mZh##&JfT;$|;Z)Bf zbq8Be0W-+p1CS`*$Owzuq;aQ^lj0JasWYwX0QQ4q-l!Dto(YBS;FSThyqvU% zih8NQ;6&V12Ao%p@9A7f;?YYY9J56n3wc#Cu`7eXDg`?3VEi?#CSMGc>{2*w2WL3@?$M%C==hzaG3M?F>tU-508lB`?)wnob-kHT03U_8iJyy; z9Ld*YPvJr0Gn*_06BEod0P|MNfwA{?cRBJ@vL-awPX+E1GQ8QHhco|)&rdh3qU8L2 zNW=*l@oF&{8J>uubUfPzItqD(=MMI3I{zoNC4wgr2qrezHI`y*tb2I)X|9%ieYoyw zB{(MOh@Hq8NEK4>z~V3?OmZ&G>VgjI3bbw{jBJ^mHGuMMtQfrWlgfY>Dmg+xT+wFm zo+zMc!p6kW(1Zann2Hm@ljD<(WIq{+3WNbC2$;?5r?3RzFq)L%8^Dv^M z=xp?owwIg~WL8%ibZ(xPa7JV&XC|cDgz5sP-eJ9>`-Hx3Lh$@0qdZXV6|goLuo@05 zHEtAV^s7C=q%Xy*Xa>7br3jH%3sR@YshD7F)gb}PYanS@y12eJz{gAgG$J7WetT;p z7{xONQc~VFRd!!hLlD8qh3V~mVjh(wih-D61pfgEDe_z=ZJZv@pqQ=^8;e{&Y5cMi z7LW`<%IUYs^GdO=%yq}tn*?ATFCrf75+acZrswHWO4Et~a>N(Aco<8%GM>HKL^QOW z-8w=vic7u5M19@yaFMB83`~7i>3ud4V2GIKOV8R@ME&2zdYtt8d4Ke}r1wX6wt6h} z$9MI66Ai!u5=o8jwuWVmVspsERz8|{gHuKp}}}h&Ky7XSM0$`5FHEs!ORH1 zPnAp)w}W{?cp>^jMV_Q+X+vc##F6;?MT@Y2gdP@<9HR!;r4KW4u;i8vw|QpxLBzG4 zhuZZ=+Wq?b(nqTNMuwI~#_mQYh(@P`MrZU#KYNbOrH?MOj4myWuH23CbdIbEjS2bT zr#{Ns`X6?@^vQ5N|D)seQLRpI0?i97<2;7`A002ej7fslhmIG?{Up};2eM~VR0dQ0 zHdAyNQw;Z3jIC3*i&OZmIE|>&Y*57!u8(6up3?%Y)3+lNLif|6_v2uq8A*egMFkBW zyBYb`8G-cayTKV{;@OkC0o7-t8~U?tBXmbea8#drCO-~AVVgSh~&Ig5-roWi-c zk#phqbCIKSuFUh^iu3R7=7S>Vqlo8Yp3P?%%x8JcXJ^dkw$5jc&KG$tlssN29$hG9 zUikQU@sr|0rQ%|>-9mZBV%5jRy3xgk*2RwH#m@W1E`uer|I+cY6Zf3124XE2mC=9b zbdj@LHeF&{hYl~_D)g_xI$qC=?o>5T^j5yzP3_;0%okKpPpvGBtem!vCc_VOYCm+m zTr~PnM^{fgXW_~_E4ybASNes$)_T)dhWYX_ey#yX)%L@}eAE_;_ZExr7D#35#mbh-*p^z`mR#nx($S_?+xG18HXq9l zS^2ic*tU`Pj!EW@;ge0{BY^tK4oUfr!|NTV@=dd`9rvRhXW@F6wy$rLmI;J+0}OYA zymv#OnY&?ayAdn9Q9pNMNcLid_u>ur62145Gxt*4_R?4OGJo!UAlc6m-p@1KFYw;~ zU)k|mVSr3pGmT+k|Jfxd{UQgKO^QoQzF$=Bt6GI2R?gouFrk0&8pI|4>Wjsu4k_< zCu&;GePNQNzJ8we5(W!gy?711a3H;O61j9Xx^(fmbj!N*XutGaz4V4&`jTGxi(Ca5 zT?P4Eg=AfYwO>W7UPVE#Vo0xJMXuwGt`mK(le4Z<+pp7CuQQ?7A4qR+HcBMZ_1%J6{NRSBDXb0w{h$o-7b{b!&1xvcwz_WLF1>OHLIxJLSOL*(a{(a#;9pSxK<_uGFS zto}TL{`^h~Jr#kT89^_6pjTPYn|A2kDin@gbWPO%pQ&Czvs-QpB-A?6Z+d&U(wnAr zY}n>?{}Y)=`@3;h;A2whbnO$7+hBG$XGU8sfHt@dT;UA|sv^@5_1=wCT(^hT1(Wa?i#?TluK1d|xtIPcGXH0sYZ zxOF*NZuLPWHN0~>-5$-7$uhk6xHw#H4<3MU0xZ0m(1oi%Te-A}v6NN{mst`qd zD#<2>jB8#YhDsX1CXP;?8`yO@~V%M!o8B!l44q5VGsw!E^Xh{w^>Ll|jIohlM4te^*yefIdPdyyZ znd`Tzp0l~gF6g$NXhOIZw+ zx<*;zsT3DfMGDuVMn#4+kV{pLHor#oIcqPMnj-IZjoJ$lWNvj88R}YfwHH#{8X8&_ zwHjJRf!vxpFY{|P_3V4OwG3RhYqgAgka@ICf~o7Y&7!4vbS#oA>U3Ua1@h=x7v|UL zzWUV5qi0vYU8iT?j?Am?*iT)r|7Ki@*Wm3Ji+Tgs)j(cD_pkZ&hVPDhd5yd-x9g33 zpvZj2eyB7J#_yj>^O*$VqOigTkp}UZn#9F4n1-`va>Jvu?KHqXhP+`0k)cUZ4Sp`o zZ;^nQ?`Dx?6r`gRX;#o^nb!O0+A_m+r}1T$4~l?Qb}&toRc^GjfOUS7Ws`MbR*-;A zap998=z3ytpTMh+!)flXKDDC=+E(_{G}~5>OAFfhm1{QJ)vpE#zHaWj`ot_o`E~Wh{Vl3795SCM0?vdlsw7$NT9POV51RrQ(;tzVuhY#g!XLNC7=^o` zGk_V!#3V%`k0uLAi9_yvPcCVK!D-g{K{lI=mMG+BK?MK@WQmDn zPAlRuu2@b0+l>{%dofC}5k3fi-3cFM#0bJmv{b4YM=~>Ybov9n3>7A-Fyl~Bv5gQy z<|n6o{^|pLuj#P3%gv*F%LZm^Iv{casZoIv8?CNJv|*M*iv=| z%jE9JZqO-Kb+D#oGokVF`v=f*O{cqdo2mJKS1k3dqU>DKX2Yf&mzFn&oC>`ZK5u;C zeKDN{MWTzD!&mml;S${ADr!VP_(gB~!w-OmJ3{ZXC7&T*3lrmLSN|J7;GoM-9-o1IxDG}xboi$m zO6>XvL#+EgExX%w=d>Gh@_~ILz(K(fMHs8yBiS&#nQQI zDolBBmU<0&y^+7fI6sO}HsxtR#appEj_e2EJWm(#pabV+od5z|{)dG2fLNCq)@ z?B=e2bcf`{Xxdm?$9va*g^S;D|3xljkc~%{o-eY=i7!qmg1J$^<*@QCqlw%Y%#G5p zGenx*^oLxipVL^*@S9v{n6GQOU4_VnK_MShZoyPD=h7%wx8$-oS^Kos6p*;;0lO_d zu?s(H5;z&kuQ}*r#B1nO?80g}-Dw6_emh}Q!%sKdGMCO*h^I-pp@H!OFrud>s%cId z%|7C(jA%#4F>Dn}6D|g_O5n&yvUZEhbNDt<6-Kc1{BonPjoWMwus^s__+a$5F`;j+ z4&&viC4k|Rl0=+IQCb+iO@a6D!Hsg5(60I~ZWO!M)lL+L=MQcamr{|e2S)zo{_91D ze&)+1a}~u)7`^SI>vLmLDAmP^FDlE`+J3$w?6ySfy|x&}dvvw=f3bHKepROH*WZ+c zNNhS(K)M7}N<~V#Q9wcgX#we0>5}d)X%Oi~LX=JsDG?B9kdhR5pS?Hbj5EiX-<)&i z%*)@fKhM7IwXSP@m&@RpO@NUfXYujWjuDLBHkshTY?t8U57{jhFxbvymn>{Oi-_Oa zg6)`D9e~}^!$(eU??HDm<4RB+ z*5{i5KcELCWjDMQ!wxvUh0xoSf&++rq1`B19JP1=Kj5{TCpbxyj}Yiafj1<_7)7RX z*+?Rvn<7Tuvlbyx#FBO8zNWbi)GSeRF9G}jpc_Tx=6elvC5dc+AJF)k*>36S@a#v) z{L+xK&%J!Eaa}-&4Ssz)F;De={|GUS<{LOqR$tt*3xw-^Sl7*%y&TZBP;g{k*`l&> zVQ7h*#cUF(BkkD#Y z3zN~jFiX}bXT=v>HRsHjbq7(qxBz90QSbC>e;2+;VJe=CzB~h2PyX7CtVi=tR2c@p z?FG0}f^xNtHiJPypv01@4@^&*lN~9?gq-7sv)!h>Aa1>Nl4pCf!x5t}0arkDplwR%>Q+~PUtuzh)DNctCF}%GQ;fRUX^|82M0o+udz|k&jWF>mfO( z2^`-xN)_jax6SEX-R|%7D=tivoHtO}9_VW?E-q=CH@4p%9Kk3lZIE0ri{2iZk}4^G z-?m^?vHfAuucUHP@{8Tz_V7k~$;5`@}&TJo2oTS zby>T0`%2vQw@K3$u1*iB)g+RgDUo{-ox$x8M*g&n|5joc^Vdw3of)N$@?Ijrug~pw zX4Nq(`WkX#bAor~^rR~WKBbNnaS#OGzUi_N;^eRlj$xkQ=-6zx9~KYYyXHf1ajQFecQw64 zW=cL@vzy^6*+J1C5GH~HVT0h{VI*dt>y1!5ffp4agz&fDGv0?qe}`Rf=#dE;ZE&JG zKe&}SLrk7jm-2m>=N3Oz};k{F!sNCCRh9Z3CA+Iz2Woj+2D&kV-3<+uJHiz5ur}1rAIQ8f|0n zCyeI@w=$5TzuCU?FL`1ioj))V^Erxj*saWd*W2%tn1`{EhpEwpB6@9k0%gH&c)s|7 zE?}!E4MoE8P#NJ&)6~~DiN!RcH1cKZ$ptGO0bwF&(I4kT`cc=LmPnc#CzOXYe$e^z zM~nUrX|#~epYKS_2JV6YiP_+eSJ2Opn4w`JNY~pRBrzZHkiP4BgYl3KyWaMBNQYf- zFdov};t#sspd{wQt~Y>(#0cqnV`*SqfpxvX-ZMYwdfR``{Hp8iy}HL?*IU{_=MVHf z1MPYP-ZPNSA2Xoy$5A>>W8^vms0IY01R;)H6gpG$iSHUl&6v_Qo*=vzX6Hsvi1qyY zQME}#K@gK>tRNWNm|8RKTCz}H9bJ8JD|6$G)YtI@1XkN#_X|8VW0B@+TfHdHG1iup z(&9ifqStP0ykla!rwWkr$Tty@5P*m+w0dh{zj_N93Pk5aJ%#fdvO?HXjOPcRVa!3_ z=1^0?LG{+EHln+zH$6mF{HSsf_zczVnDE|lM#T10Yr)TUF8-yg_!uXQ48JMLFz7g=G35 zpW%B+K1KWw`Zb@ReVeY$L?Pq+jQne1H(6$GH(Q9G)BhYwD&+M!%=&hdwk-2wI%**e z9z72cTE7fxYjO6bXW=}xn}N|+Lo>#sY$m2dVxPffOva~?=Y@I8E$N5GI8t*5;%;|E z$`N@B5v$zsv=h`52!FhmZ0^U6ds9P%w=)UkC-F!^zpvxHlSDgynMp zm;a^XVGo#1x|>mqpW{8ZU#Nh5hMEgu-eXl~$b04mUfK10sf1Q8a;2zfRUrbOq5K&0 z+@j6r8VAP-~-%hm*%Mi+zwg|QtVa{VWZIy@aSA&j|k18k+e*Q#~jd4 zS*|IujpqBc-<#QSZ2$puYARL(*;$@nBIjtuf< zra)?N>|E!&ns>3CsX`U2>!5JV5i=q3htYxICg)#f8w(apX5R+$GIMt)>W0`>WHmrO z!;j%L+TItFhg2HFB-PUh~sM8)b@e%60?`wANB-ZxHPSoPKuox%IM#WUNd0a@WmwOyO`1W`iW z;c^WF61NEjwtW1Pq4gR_^%gOkx+SqER93Kht4j~pU4~}*>f=tSz}MhHv1G9**o3c$ zd1&R?Tgmkm(g7&+qQ}HDau^gk&euaoA_*LBQ%E!{=_vuoilxbf9@Jz$%_K6TLP8Q| zgNCQ_0G13DTp6sJc z3sf#H2Y5>CS8oB8i$2MY{N2f8OZ7oPt;y6&x9TMAmV*;qC2772HiqL08tM^g(?Vp0 zUoLHxIUp;z!W7`rLJC^}S+Pl=y1X2oib%ax*>hb3Qn^SOcro}`yCWt;I z;+-)9Yv zk-#*1#58Z;Y^})9o+jX75O#C?GdLQGB}+JC#QcGJpc{fElYDM)UM`?HhuwSI;d### z{ougfz&@6Y;X=$3fF(PVVYt|zYYXIa1yUIT6+|%V;GgA+=X#IYbou0+eK}0cPg+w~ zWoSr74#ifFidSy6JP;@}AS)Pz>V&AtEP|o3;;}pbVsN1QFdZN(O6mYv z;R7Z!zoRa4H{T(`ml6*C2ZKnZ<) zshByzaQGjcw13SxkQGvE`Oz?0@xFbnxMFAC#J^%_ zQfj??5GE_u+t*)i?|gB@tc1!6lHEm5>B=#Jj*T~0cb5VHSwSPc*{rg=9MMq;lNGxw z37Az=!qPBVAzd}2*s;}HvHLaGziLibdV64ScdfLeYQef=dw6?yy$18;qKEXiF_OKF zM(LN!;T_*5uI_Di{tya1f?2({(ICCM9KH8#O1gUMeaG%v#oo@MfAzOX>AkJNz1@wD z>fQB@z1?l#9YE*^&*_M$S>jTS$cBZy*rj2mk!grvGI)R#=1K$?b+w)H^r&tyy5AM?-i78_@I=s^R_k` zwhl$D7pAOsiV*ICfET*Pr8qsE5o)a4@9^yP2#kX`F643G=Xvv|dJ!&3mzi_BH{y}L zAxhf-k7GT|Py$z{6RsoSJO>#Pn$ta>BIY6V#)0!iWku8OeJaMvDPzjk-G@iDfup5h z7Q5_=F{Ohc=uzw_J>*-Y zd`*k@O2mgk!?%dsU(`d3h*fi4NcT>juLLV2xSt_H)~heoU(GqtIPIc$W8kB-Kr$~q z3Oal|eVxPJS?J>z0kn-+ameJAQ4erF4zz$Ud4Wchp9ESQJ$@l=KqA4v_xL>ywD^Ii z{;}HeP=g-z&K?I^K-++zed92o#rK{%tPusKLH8fO|7K79$8A8rDx3dKgZ@Sv5VUue zI)wKp%I2+9hM|4q-{mztGc$OB-q`{9I0O;LNl9&2O1hhJ*9z00#po2%`O33c=%*#~ zBWLi7YK73Nt4OQ@UccX7p~1}pX2CZ%Ur;Bz3KsFN>c2?&%{CzFDE*>79TmW?7fOIJ zdEMXp{pU5Pbo2vA-?)Xk2nsG=Hv(l%p-Wzzm4UuIj^fuYCEZ6Pxysh_mhWd*TfV+$ zzAFjzji)g!^cj>esr48)JW?w&dw-pj!3w59_vWo7bZ`XMKLUN@8!?9Gb2i3&Af7q^ zv{1`@${)2MAt1irhyr-(yWr0V-;~RzfV_sCh0~|YSB8Mcuf2byF3l^QQU=Q)sVL%IL-#ElmfBfOC|DmV;)TT`0Ge?nL&Jx1Sz3JR{)t#$b zPkWx+Ss|&}HcqOBEB@kW!bVo4>;d$RoA97Ien5Z#E!@ZTd2=Cs<9xj=xqzomj!Z>c z2maT6<5(PM-}W0(04A>pcHa{XhdNH9>02!-r4UTzXMBt zHm%Rjtv5FCKze7?`#C{_~iil#vzYi^pszD>dT>!MiiK*9##r@ z{Qk?n@dHnNqDdru-&5B$Dy0KFb$PlXaS?9p{C4NUV6rcyBG-`Eq`#HP$8Kop@_fkv zJoV+3_{AYz-W@I($7cBiWGX%WGh))N?6(pzwbQSk7VC0TxST`~n|_nSTh`B@@EO@o zy2z}koQGdeGL_qu=V$1J>MXo7patkXBgB2E0mjPg40 z_|35@Y5A~Vw_Y)F=7miI@c4~dubh&6VfVgec&&UL`uLp`|F|`<{&J)3#pCsskGosz z)gX*qM`Vc+c#@486scV26Hoo8JoRGrObqaXnLib(?3H~_{VFe!!;z<+DqFd7_xm0jHYflN z6Iwcm3>2@KfNFpGnPJNc2b2!pZ$9p^O}4n8;%$%~D_+x=3`bKFGdWt_htkO;z`IdT ziyd&YqHzpr5&8NK>g}_fnP@M+fITzN`DxQFhjR{p8V_r?&Z6*HKV5eRcHv$Pp zR>w9Z#ZlBYG#bZCI9C~lRywZX7!~%2VB)Y41rsUygDaR95)6k3y5D%QlL&djwnmUosiNdzWyq7C zd9gp(yG?OqS8vbt&wpy!-x`sK6Y}y@AKKNPa)_dYunt4Ou73Rfo+~aiVXc#%c>jwL ztVQEH1l{4M^y{rrvKJ}_tVQE!YoskxD+$=uK*Czv)5!=x(5buAr9MKzE9-oGABLdg zijhODotyv=bo!IADYv~Q;~dt27rTum>i*V9Hnblr$`ke}&0xnMHPKC{03C)IsdmQD z7L9Tpu(LN5L5KF45X~}kCQHd+4}Lb=@RW5(Rw1-SgPV{vrwaOFf1{hh_nJD3@u@81 ztafM(KD`^H!_des1dOXx_#WD#;T(pqJQ@ahvFj+z+?fUtbQO!kDYW@Z(5=zk(0S18 z1hhq?5~pNJ6568SbFUhW1F|*ZxO}k!TM=l{*j#8~c|&SF$6AW`gb~;pb(EVn(WYgy zrQ@6~TyB|eLR)F|*RQ+?xq`VAJKlSl+*oIUakW#>#ga{=4gdM&_y%Ss!xnP$lHLv} z$Q8`hexI+ss@6N29m~)0?)2OZH)2oX!{jv>kh?)u{P5uyeCt8o_a8L7(XO=NzN5+8 zQ|o-Jv-zlB**yN%2Iyh1wT*zeH0S!50UhGzpbwamQ?LlPzGT4jY9ZG+(OD^=vr+cC zC7+HnM$lBOaB}(Q=fS%+lP`qhu==t1jJcm+rQ~daLW3U%ehe?UT=H=o>Bi{9Y2P@k z5&U^wozS8it81UrIQ+Qhz2JLZ-mw28S!&1Y{VPw zVQj>foNc$KjKsn|A4JydQbQ&SxO)BJHuNn@C_h^`tul@NlOEzyySk#UYENl1nL?BJ5Z^N*jgk3Mmsib zvepxYIn*;N!XX%?h-PM)K{3?*0SbMu$PIDEMZ?mut9+B?V{j8r>&yAGX=&d`MQk=? zqX|6kmy9E!L8&it2P@L{A#T>j;OTH@h60N`@&*e}jPq(J z7*d}j?dJE-^$xp4mpIc?ily(K9NjYHIif1-9i@sx^?_8Ie|Q?pMAJ1Kgf<~4n70?8 z%Pok9)CDiFnt_eVP8ErZO(j;ScPcg4n+!7rh2NgPBhe7!5s^NP%0LaCm8ziIIij04 zZJniyQ9?`uno{|wlEmGH7|DZpr}=xaJ3}NGqh~BcLx)&EX3X_??$MtFx{0va0ua;K z)KFw`#>D&sUXfEhAC*VfxfPj=Wp0d+ z!gmxjYMxu{_uGSF@Gjie7C|H<0^2*TlACLzY{6%Nb>?dsz)=YpKSO1Jug&k?4_Dtqk#hC{{|0Jcj~Qhqix-U$eMLa{o(^KM z8EfX&wbQ+xD9gckl_(G58*2P$L#R|OQH`#f4S3pIAtyY8dip9qPdk5d317deL3q|P zCQm$S-m~KJ>u>NCL?mc(sGbr!$h}JuVx#h&PrG}{`POSCMe;i!FX4jn<}rGp9Kqt5 z$jjM)B~7iIiVKY03;ozb{IWD0hzfA?qF7Su92dky9)6xn!$y0VQ-(vnD9p(n;?#&) z%F!SGNn~s!s6Lc@nkn8)&=9;J)=;G?>$s`M7`$UAm`xexeZyMwJ~O>mBN83L6h(7I zSngOI+LECd@m2tHnknZziiQ-=kn?g{KHqLr1_CDPv>x8&hk|al%pztF0Z7D3^2?x2Ha<3|@GH_< z${M}R2?YE%LQNjvK9OpAB+NDw8DUMI!t9@NozgF;^A`0Bp%Kv713XICa_V6O1DmsE zvv8G3j|lj1o*T(Yw$GbVRR@U1m(T@qw73S6$WZacZ3RnRavi|oTN3h)o%tAw=+%y( z?ZAuPpTStsM4x9a)NU{V5kq{dQMt0?C_mAf-WI>-y$HwXG)lJjF+YzX zOS+Nq3LaH?*#O9O*-ZTKh+KMSC`K0b>nGWXSJUbdSVhMOJ|h-z#)K#Yv^5vp`jQ& z8^ud=wSlJ}0xK}JM;h5yUDOs<>YgNzOOO+eAtRJig6^hCj@o*?m=fMAKTGBD%x8py ze`Dkgm$j*f_=Fo8n9?|oIw)R@mG6md2J!A!*pzagxS2YEYn?0;pY#dZYL_@XQd9X8ARaGDYEI8x|Y5uV{RKJ`)H6}RD~bl*LJ6H;K9 zYU7An0@^ z4-j-*=Sl7yAm~uf()0%@E(fvD(Z4Lg26F)&hDq9-&<;b+`|cSQ!94wxi_{?kKuGxx zc2`(P+L#lTMu-HY!w{Q>BlL!I0E?5k0@sCCz3L;1+$v3!Qgk@tWWgGdRGK#bmJY*H zlu^ldqEc<6(j%iX%c5c;!m>A`a*3kzxfpV|qKj>#OCzJp%c3j$qhD@D*AT_jamCc% ziFsoi(-;}kTo%*XAJe`W(@7ND%@x~oC$`r%wl6Yvpe%N%KX!OCc7!NyY>z8${7&42 zZQN93+)P>ATz}lcX51oC{4!Vk>YeyC+xU&h_^q<|?+|p#38(B5P@)ph$`jBB5-_$B zu!s}E+zTqRKO31~TGc9fsVQ$;z3jcA4o>nVIF8*#nt5 zTba4US^3;qh00mQc3D7+MtONw^ko3dgW|Li$+v7P+-^!ZPDl?e%{Uf zyysUf8Y9FxW86Pz(O4vYu{>}E!6_8js-wz8ub030Ht=HCE_Q9}1^m@qM3vlA_PK;a zxhNI6=!3Z!+qqaOzGx(QxGH)0_IZTSdCxfWhzIk|ZRe4ZoFPdZL*XE|URP%*xUcjj3V}J3nd|N?wA?SMo(z6)iD1KFxZx-=E9W06DWH zQQ++3K@LHU5{g8lYp4&IWEGQSucBuVJ&5)nVON(!B&GXoL{Q9(RO%5}p}B_JaRoHfi{;=Vlh6|MdKS!f`;$eaY$&2^g=Qev z(s$aw2vvWsy8+bb*iKN=suGt)7&M$CF@=X>^{@wBQuO;2Eg7wUa8#$or1vL z@%2WWsJlEyoYC2*pod{Ywg@RSqi%$--59X>J$DFuXOi{&^=^zhZ487zabQ}--UJ~+ zVei0wrmX^>80T-@XTq1gzponxGp$nXa`{e;MMIUgO%8hxuOOa(=HE?%o`7kP($gV*mCw&YVDAch$-LQxTN_hxJ7wi^MC76} zT^Sf{$_z>6eq2ZbFEO$hMLhg00}H&3SOarOsKmjAI2zGdL0^Eq2#37Bn5=L;Za%F!v*0DW5U=7WieB@pY zmv7mre)|;2o7~pV%iW$M2!m@Vp^SX|ZQ~NL`0h7(?(3U7r`4|ZU2(K4Jmnbmiod#@ zpr(Y^Nkdd!9f405(@9Xn*+kZZ7q_(9NsmIafueh-JroT+Dpz)dxCSJxRPLC!=w`@A z=1Msgge~S~gPb=it;Yd6yYR*XRWyEePYPbJcqG96QWrT`W227h+;bBNABsgVnE)NI z8)F<4&&Y-B#$>hc0lTrQ3edx_-`|Z5*Lyww@9oBZB5#6#+Gsm~6LGq9GO0OzPnrcU zFW!+Dz7B*&O8{O?c%DtePq5YOz=kXH&0#8Zm#&K)wJ^zsjTXu>` zfTOm<>v4Dx5@-sc^5BsmVv-Q_)0?e-6-xcRN5c1wFh`Gs4;9Btt$!6t{lz1pBjLM8 zLiqvk6dK}yJra&xj~{NfAi&eZ&DOC;!jTX^?rRztk4i<3oq&f;5B%@-*G@eXKvR~%3Q*WeN($4N ziAi*`(mJK=NsXJCnygG+OHFFYQiEtGDm#nv~1SPxZf6FX%c$OwbsxowcdgXdO>%l+VZQC#uh;`h)}YYc6@@Mp~9MuHa3 z72V}1DdGVYpCNYqXtzq>OVy^QkW%YE5#nG|y^}p>CS3aRAjFY}^b`oCt~*3lyDrVH z96k~(6nQT~LaF}9U+zf?19rU9CF;w1D%QPM9^TXai4eygB*Xy;r2+>uoK3ENqPneY z{dSN88t5b8ZfNLz1!yRhC!kovp4o2L59ihv% z#N+0lr5$${n8{5RYfSg%?(B)tZ+8%!jcX5FJw0tNQ-N^p#e8`m%`I=U!AvCQur=L2?=4am4~ zE?EL>Ll`(@D$ARS(u|`W#LPe?O))ia*bgls4@#llnki()DhWWDmBh~Z^gXGs7%20aw6~-kf#DGU|rALlEUxJ#CY*f&h z6NiGA#cPasImNlg^eMW&HXn1wUcjxF43rkGo-e-<;W!&4$CUSw3$M}z>EpZNAZ4Uc zHkD$z-ldcXvGdBrprSO|LPW#$q81=+#xkRwKR%&w~-iGnMPg<-V3qt5L^>Ma~2FB3mo?>_EQXS zJcZ=sBd)5TJ67jW4^J*>gc2{LFXGgL2~XQIGC6ZO$Rvz16`}MT@?>*>MdoQcd&{hw zHvQNH_@||{W4+Wq7s%PNFH_Ffc=6o;i+S8qpsIdqDBf*H+(sczep;sS0>`sA&s>f2 z-!JJ2D=dMz*eIVN@YZ3^8_2fp!Qqi_P@)jCQ}j5SSW&CE81Zk_cEyD>Wx;pd6nH!v z^nobz+_kf5!kNT@ook3?h^9tj-^zJ167a7?W;dpZbPqZSQrzVjrQ=IhsWZn&_9xV! zmDj2W&~xJ>OLz1%>KW68=P*OrRiZY}Z>GQP+3NUn?>GZt1?4KPL<&%f!kxGV;4 z32JP4gCO%l^-A4EJbTKT8%u_3loaFAFA-ljpY?P(L-)xyz=8uGUo80a*qE1AA7u$C z$P!sy%a5^`?DCoy+RdSWPhGit6b)O;ij<*Ptdy>0XEato!$a7p4_#lA60HbFhy=65 zk2fRf3kcwz4U`(eXY{*TpquX#0Hzm15$|g@@}dwIuq>nIi=n@FkDrF?$+~;9K%>O- zCLC~1MTgvp%*mQUAeB7WAR+&j;+9)(uglB_sX`&*4@*!m>3zCFNKZ*>|fr7d?U{i-!6Ota21tY zxvws%_jzb2_1D+q!d=z(A)(a2*Y&td+rjmCCQIU~88Q4HyBa-Wgg&T2Ql=soOsk5Y|T2v@xs3y+f8ako~=P6TXEEJcCJZEh- z=gWQP*&P);nLUB{!Jg>arHVX%Wt8s#>ag_FS(JXZjSaCMofY|Y7oE{cR5IY_?9k&A-Vfs8C zZ+JKodIEO5tCFYtPulSbgx*R2F*`oOZ>IFXj)ykF0CxPEjsFH<$Cvtl>pN!0-w8Nn z8-NlSfc6(R!fXcf5{2;p%SM>UQ020tMi@=5Fs(abI<{eYk$;gLU-m=+-Zip60CmJY zmMAKTD=Hb)A?D7$9iQDFHDMK%1F_?y3-3f1i*n@J9@+8q!O=B`c03nzUF4A+&yye1 zeQ3uwk@b`v*zrwVaRXhk<1jlugH@z7u3j&0A<_qM^dufptjF2?z?_zFGRy3g@` z8HQx0hC+OfXRt4&t%$(`cDw=mju$reRzf(9>62~)cD_ej?1?OS0=Q9@YyDU&<4Uv| zdUtCR3G%3^=^r`w5`sfXwcpq$5RqK6<3Y+ea*T#`&x6OCQ z!)8fd$IyV8)JpLm7O>4xI8ym$EDAW@55RnL#DNe&6Lj za_2l?fkqyw8(!ysySka>rMvqhb@Me-E9YOSn_i;Yk@3TbIz-*Pj6zIw?INg6`s49{ z$jle}bq=tI`p>JIH>tdU1zLI*9+@jbmWVu7NY)CSi55^d-W*5*_*S$OHrUL!h=ph{ zieHP9`-M>4yhslm-V>YQeiG#HI~Gy@fx0O>?=A<#1GLjZmHI=0yFKW!5$tX+@>re2 z8`$06WbAK8)c>Npy|6p?^BRF;qYS2Qg)zepF@pJgXg0P_Cu<%+?)+>-onb5wfl*1* z?=sxnms*tlh&qc8oG@@ekE>XzR@kNtWMiF)7+D+0JRrwL;f7|(i1B|oqW&V1^$8t; z!#ih?y~M5F^TKJC?-?F_i0(tUefDcVpY&4zxl=N~HfW;gTF=W{Zv-HBf>W%3i27dJ zV$b7!bpt`}9K{2UEYRW5{wV8(%^z5xTeG=Pbpxq$fFO7FEl}i(zm5mM>KuL<57>oe zV}FR;nS8Og`)&OTpsx>*JByAe5()6ozDoeP;{)rv1hTP&t&n)Y5pqZ5XW{{i9=zyD zux#va#skDCNnpsGKxs>C5kh1c;_OFVe4zAbUPmlPO3H-G#^XaodkBt*Aa#&s<$W+E zNSJ5A$Pc0XKHn~i2m%}#ie;@bxKODPlo3egYMAWkOxEbMC>x|FC_>4)dH(7tCo)kb z%05oI1ThS);N)>kED0`0@ziC&mTzT1y%l~LEC`nrL*;bNR!j}-8H8k-a#1{^N#j&{ zSUjT&v#)4_Cfmx5Ec8^;c&>P*q@bvUybGXZn+A?CaCo8?CHp@Xx$_UPKpp5L*~lyV zwdG*Qod=CAXAY1%q-7Yv2gn`GgvioEr?{B9f_CSjgcKf zw+Evh5n=5cf`F&E2ecmnk4eB&L~ki5ZkArOVspNd=)-=+=Ey0`bwO}MnyW~GN#~Mz6Q+S$0 ztb;e45IEc=_|QWyRKZ~m!Pi}mpY>c`eJd#iaSA`Cq1`0WYFll*3*cUC#oyktl1C#5 z$&=k|t{fUbh?N8n6?dt1w%nh5bY<9X{kT)Oq2~aJ+M(05A3BA`wzlf`h6_F!VAhmP zK-Y=E$|82J7{Qd*f}$}CTeBU-7!^(V9mDf8XJl<<=ZleBk@!p3ADg|aBY5bLTZy^4 zxzx&WamuCTDzqBu*erdN9r@(qFJ>u^WLNdYy>C}irS^6BR& zVbo6HOV!#z)K1ZGW9P*|)b7-2mcyu>ahUUk1ALuHGIjPLzOK4{6#D>QHxv&pfZ^-* zI6g&|m%gE^V)YZw{B#zEuge*u(Ry0UjB?Z6WFUZloD#s-B?ouQ)*)*fP-Hb_prb&? z-oAvy0wiSmp@iIT1U$T=xkan}mn6)yX@5X%&F(MIdz-2D!@SDxC(K#p+gktl*n@j0 z)&7U^O4}QM>4NMw+7KWisi;^%@T6hbL5Mg^;WB>Ls57)A0z{{5(}e`@S0nDU_2=@Uh{Ry~I$%x#ff z`~42a-h=Fc<%5K|s@P`nVZyw9sBYQL4PXK}3VT(bOa6MQzWGty@&)x{9G_KnNY>?rh1M13F5{t;R=(bQB|R=0iG4 zY=G6P13Jn>n>Sg9bd-CqhBpuBD1+f!%P>01>68XI;kVVNUQ#>bIH<#j<1CSAj2c=B z%qVzPO#N&CaXc+Y>YSfW8Li=){bR&^t%U&0tD@hTSAUJx`cw02C7bqFC|ikt#RfRA z7%5OcLD&F)oyGV)%JwL+@Yf$B-a2M6>W9GJb@x&SdS??ffE)o!pfQ>g-9$8zRANAs zNw1eI{OLfiz_=$yOW;__CAz=_lt9zKXi{wAz$B|5uj?}I8$PDbbTk;FlR;I5--5;4( ze-E11$-Mfxc?F`7$5P+!pp4=4D=vl1tEcQ_i-%f^@|f0AKBl$8uN~7`xyQ8D=ch+n z>xJBb)&eX>R{oDWP?{Hun;4C{nsZJ~)ioC9hZ!SC(1r{adlbe|rLiV!ymND-ka=b8 zD}lR~OV9USo$b`YPVD!WW&diDohYxr)HVDiFiH^rmz0~&A^Vf;jxxNml_(h)!Q>7( z5jh=;>`ip9>CaKP#(-)wd=nWM2~lma5Y-k-Im#6n1yODBByjZDiDo|rMrGWWHJr(C z)LEu`ot7L1rQG~SCYgP3B9OiNQmwq?6;+dhEfG@-+CMxwp1p%AFW9nd|L_EG4bvcp zC)M71HytPpaH62gGDtTSdNjZzaaM~@-l`L2J;<;FPf8k&l>1BWM1r)>uPB!l3LBF6EksxTuNI4V)Uz{s@?B*sqy&#HFksgh1J$TuPF} zF}6c4?7P{e$A;k zDrX#6*V6o}*AelsI-s1|O>nWy4#*{D&B{-L0KSuWVmt6-%KL3A0ly&YzL53AX zaj8QU7ci_$fnkLQD6UAuHxR|;}lMA_9n>ky(``)X+V0HQn_HDh)FQNH`qrsNQ!O#iuZ z0ca3`4l9BSi&Zd)GC!@wZV}Zad`t@*j!oDp9vDRV8FCGVF;%Pu!Dux`4p2;J(p!V5 zaV9#*9QD-wLwqQpxb#7rpwl24;5^Y8ga;zzWI=^Qp1~m?GADjiQ81xIgrFGM9hHio zlr~`GwKpi4%$1fk(b<~-Pt1n}n_MgqRkWDWrkg^@l|k3e6~$ajFcxHx+8W`SQWuW- zBudbBMZNvmwcs#8+CsY8G+d^&YqaJWlA$+gxQ9@Krf!9wdQM+o1}V`sYB&^v&>jLF zz`3;hg>y+Qk?>pHzTZ<##hpY>u{c0WxagZ)Z^_8ky^7>?K|6a45Db)XT`8gU0Uce5 zJP?dS3)RA%#Y+ndR~HR>j&gZ4;^_m9;uOM??0*$B__^aqd(Dsm=%#J(N=Kob-7(h6 zfBj1259mD@Aoz25UK`SW&_FHaW^7bf9%_8F-v2phAf*&8t^bZHL^|cTbGbz&z~iMq zn^Ug_zf3DepuL1w~rcJM0>cKqFL-2=!22iRg5TmBgDGD%dsDhm|H(RVnk1o*+54OLyK#OjBK-j`>#g~dm8OH>d}Z{s7E|=UlVus>qJ=i zEzzKqQhf5rr@UOnv7CR^h`E~70UI$DSEO^{FRY%Eg4M15TkGTh>Z+TgV~#iYicki9 zq+VF4f@O{D`w54KssHyZ+h_y=OOK8kXQIJ(%Q4kA^#NI>(E4~W{K=?V;Fu$+a@p?q zF-Lr!*qQ?Vtn*cbkKUuf>-TnPv8^49m@Tg2{D}P#v%8QVcTjaxY?^TW`N4=$5oa>g zJs2@(BMr?D?(dCDtQcTbH)n^of?A|PSqb9WALVdAV}OmA4+CZeSEX{V`BuDpLh`u_DDeF z&4-Ai*^^UvFnhj|v;;kn8epaxX1HE~APb#6D7&eZW3Itg z75gXb`zxp)4ww^h^EVnW>L=pn{~vLa2C$0f_WiTHZ>uNb=Fj$c{v*YWU10>GQx21) z^XtXt_b<1;zHmc?hn3g^;^uRLI?iE_=N3N0;pLyHaDSWKS^>1j^Fe8Q(80Zga%N=l zVUMSn!CX->^imyIL4_%o?mRbvT&i!K(Rp(-tvRTo{WDuh3?Ob`J)UREdUvRm;= zc(Q>W&x?rnoz<2!<+Z!!HIHwNeg|st!?|-JZ2m@b=S0~2j|&?JBmYF$NF-AbG&Krw zF9!zrB>(&SqyLd}M@%u9l@is`QXif<3_5ol)hO>Gi1*b&O*KYjSGu>q_5xmA#a6!i3=yO{|(cZlCVWW37E z<(8#t$yQR<;s%>L&P-*!AE@uT1bkS)5Y&L&>7Cz*UUJ5f>icjocTQx@Y#-1Y{5Pbl z|H3yrkv0Dx?QBkDP1JHoxX;agG-7Gor`&jiKG)tarYfiQ` z|7EQD$$0r&jF%Hxb0TXF8jb(Ge4vvvwExdiHYZmCCw5wvQiE7;e$>}&J;^NP_s8tC zlWomO!iMZb)+|&kzWFWG_esKLXSGN1Si{B6`iRFb8!mRY7aM?vi<2X?lWooM@$$bW zYar-?Gf;Fv7zhr9lvV}~f-Zm$fUilYqYq6-@k$5?N~1cB3!kp()eQEA$HB@Tb87pF#$ywaraExLD6*83Og2erIRIF}2(0+|LvRPLHlO^0c! zxoR=vf3~sK{8-|M@Ye$83IzQ3Q3m-gnRtY79~kGmyj!(X zay=$xMT34iHO6XYIxWGSekT3@N=N;egutRTeebfygZYvXcZP-1@i1sF#nUiJblWVb z(0W)DCCB}xYGdL-YQ@6L0WAlSz;Llv(Cq0S0nP#Ah2>W$1M_?|YkP$Xq_5k!#eyBW zgVV~!lC<)y8sSYGtx6QsZn)vKrEHuaJ=q`*z1eNE4{ zAg7$!UozmY-US78iE&y-s!!$TyE<7(C`B3By9tC{*s?*{e`n% z^@M4JgivMWdBKErIhf$?fb)!$UAU1Vg6D$t`~@j5TqqL}#!wFmFQlaA$Y_${XA6!W z*P^{nCn~347Lv}WO)s6%tdPGP>Z_{FsKzC(B$ppnTA9MkC)%RsogZFVsLf)|C2=n* zD54ryhb_=n;(l{?WQ{8I<T-8v zv|Ht`#I~yHUi-i$Z6o!Tjj~l2{axK&$D^%+c+gH7FM?R76LDbz%Jp=9oaRn9?!rW@ zN9lqW#Jaqc3zG<|(uFQHclp{CJ|o*n7ZDKa4vZ>HroEmaCg0p0T3(pK@+d>%zS!Hy zfx=YIstf_9U_?}OGtfCh4Vn9#w~BD_()q4s$^|#y!exG!At^a3pF(^)Q6V&4@rr>$ zAlkbexp!F#NDKg(J})%f_iD%Z0$aaxoLn0xblAI;vUBDqtm5SAN$#ZU+Pbbq^CZ$TImlg`bo zJKewmcKR731L3EU4q*ZQxoyu3*Et7y_PW=Ki`$G0O)FGB^a8yUK-$Ols_IAZdg&WU zW0SxN)z1JerxQr~L|#>!lq2vA#?}HqHjp;yUWps|YHa;_Q*EhtrE-+&i%px?-Idhv zsxP6s4lO`MMX&YC+0YmE>-P6{>)uyy&A)KmyE+2G*{C@s#qtQdQXOfsq!#OOuIv0@ zQ*$YM8ey-#I|ooDXuk3490seWFyj~)sO6=WV)a(c9>WK!1eyIV~L zQNuTj2)?F66CT;3jBg&*RH<`G;N4!`1qUO`XZC8d1Cj04aRqU+K9f9OxH=qm3*r$Z z^>|6_Iz8|UlTQ0i30>sw>S_(O{T*-}p8L zeo^{{)p*Ir+~LzXOxp&`VZwPcj^4_>cFSh#od;oqcAr@u+P2QZMQDp-dT8r{O#k)Ih#6_ z;^_;>wqrNiZ2}o~mwfM4e!76U*`#uJIpT%G1YO5wi;HTv^R2B`4`Yjj@VHfR>8g^GZt9$FO_Z}^K+*p{9zOnWGh4t5x_#L+!d)t%e z_i8b!SEARi?Oy5F+u6Ri2a0$C-}eMg#1UcR39^zS3W}-!C?EBtV{M6jHH}jZhf|)S z6QPI`v5ganlKt6qds0H@bF|K6oX*rr&a@Hs^n^~7HX^S$97yIW(8ySr;}*91v` z;MT)l>s|ZZGj-0KcdDl9%&uAA`dfebS3S?~x$o=x4LE$G2S3~JJb&snNAE8!=f4%` zzfv<>m{-P@c;1)A#h2N}$1N$4@q3`VOW>D*Krgu;ItrzXdgzA{5MKA{)P|Dr z74so*{?IDD&;q&8dYjPvhEVOK&^8zC_)gR~IFh6{?>95BO>EfH?684`u(A2D2|e%# zL-@E{_@o?oIw<^GQTW_<$z_}H^{epB@8R1)ueNL=cD}#bD~kA$6n@kY{%bz`JAdS% zT;xxi$m5{MQ@zMLm&p61NJK;A1Ai2fd=#>N6uN5^h&bY8AnN9O)DvJd8sno@G8&^X z0yj7szc`w3A&Sg4n({iD`bRX)b<_*n7+N5%w^Ss0Wef_E+{I=LSu|4II#3aggo5C} zlZYl02-XrVjul}9i(kiz3V>hP#z`~A$uGnT1;;5D$Egm+NifDs5y#5{<27C5wSL6u zH^v!U#~TwT=rAT22_#tQC)nu6+YZLtEhIQxC+Pi1_yA0V3M4w~C%OO=tQiwsE7ciIW3?$+51$4;?)5e;s8Z8@_v4#hT_zg#?-cj)Q;=aF5JI~n{xRLa>e#@MTTogoq(lEDZ$9WrAhc!SdW-`Asm`BCPlZRzy-#3M#2)Dk--s zsc|c*Z7OM6ENQ$cX&@WeC;`xpQca-T@M5U}C!qlkU<8IL%ot1l zL=LD1%m8QEFT`y&#c#RA?HI)ErIc?smG2Iff8Q_PUo1bpDgRAUapqQWky3HoRB=93 zakXD@vsi(ATY*9fM|FpzrNWV#;ecT{`T-oY1c%(haY-xj+$#xEE5Xf`_`{V%2bCmC zmDIPDFG#Cs+^gtPt0weT4g)BqAc#R!#f}0yw|d)@dgqdQ<)(VirF!q?e3#pL-{JZI#Rl_` z1}j*@8@C3Z)P~6BhUle+sDp+CXk!v{V`52TvSMS}ZDR&$lb=vyZgXRfeM365sW`OB zA_XEbS(m!biy~3|kqW@m90TP5RbfCRLrdGBr5*02orEkMXzPr7>$rXELTKxBbL;9->pG&Obz``7^PsRCTBsooQUK#EhqS$3kI~>j z8#HUqqXaZB;jG-0@h?=}-B#U~R3Q$kkPh2Xg*(t#I?%~FK!zQ_kq!)x4(#O)@L>m@ za3=vvClOgEiD4)4NGGXB=kw)Gf?J3IxEZ~(6pGX=R1B=csG(H{B$%d}2z8q(cJmr` z^Lum)rgaOqbc-%`i{EuilJ!Ul_sERYvQq&Jq6pp1a9?fIJ&Ue}dN(VGqs`huK0@mY zhZ|rRO-3!fdBaVn4oxP8edZ2*h8}%(X?+f4eQ%Wd><{}KpY^|MX>vO3{h-wU(V^cx ztpBrcpGRrGFWG>Lih66-vy4nyT>L#1TH70W}jOAzkVGHKgt(PDt6aGhl{;1vJ@ z6i;0z>FPV|9C+3>$kH|9F*0;FGTJgSMm9PjJUYuVI&V0-pftMdF}ip+y3#VbdRSH0 z0>qsF(|U{{e;6JUL=q0|t#wV679N*196$3IzepRuY8k&-9>2RAe;}Jc5}EjIJ1p2t zaKa3b=B(D_=zS)EW^vnvWKjR**?_0vq)phQtKk5_$|SMK03qfSMe8Kh=;ZS^Q#2w| zULI4lD^pBmlg#N;Eca8?2$5-C)@kb&2(550R^>E`dY2)XP{4L<(O|Hav9OwD7@jtx z)HjlP+dee+6zXuh8~gvPykQU)BwKXI>v zPy%vI+X3n`#L?}&EMqR1V_PkAuH<8GD{~(AbG}D&{^auknDap*^Iu!%gTKs&tjv3q zl?s#MRWQfZU}y=Zb~(YSFNRC$!g@Jb#*sx9QH>V!zAP4`FBY{f!d4bb?-$F-mzEgo z^5DQ=k0nrgY)1OPDTcpH@IW1A&3!PA{^1lK`Sbwh^pMdsfBN#s(J}+(O5e)zF!{Dl|`xw4gc#L7xP=IYGo%JzL;d2{La*3!6`RmV5rclWD|W`icIvu7*c%-*b> zi>zI>uHCGxT^_An->)H4tfP*tp}bu$O@n;P)<%62`%pu8)QnHXIdXF_PcSwgnZ7}Y zwLn(BLDaTEvARJiy7}CAlltu@RmLXG*hV$+IQ)LIihPShbc@S)i`#RHH)D&xZR@uK zaWCuY0{QCB{mQGKD>7``OX=HE<=e8Nt4a~uiWED_6x%9nJ8Ggk;u$;Ao;#wRGXSi0 zbc$V5(cPyiyC%lFHlDk7Y`eB&yY_E)-%{+UiV!=uw$pp=F-2@LXY9GO?Rl2(d9UvI zjP3b9?D=|r4?u{14-`qwHX@hk+=^1^iF_!GHvS>#`6D6YM^f95l+_=%%R8U!ceEpR zprZSRZ}*E-c3|Z@su}yGZ2Kj~`<1Kv)mR4=D*H8_2ZhE5Km%gK37{st&2e@2z42j> z=i$4E!|sg3k+#FJw}+!xN8{y(Q$LI2s8AK*G3v+VSXgmOqUCFB@f$ynehL1Rv-~OH z^AjcO=b`b>pIASCvHd(z`FU*o>-6ofGtXZ)8Nco#v{pPTP&vyH89#q}{sgEVU%fpB zMjqdmA7hRm-(#I%JwG|{JjQQ7CPW+)tDYQ1oRC+XJRd(Hcz%j&atiS}C4G0w7Fjmsl6mRYe(AAx>4~`XetzXEcI9t!_0{VtDDx_${VHtjDgtp8_53^jcmI>GBYDf2p|{W@*!Is?Y6Troii_DDwu^ep9-3Q;xWSKfkRKyR9*~ zt@FBV$h>W8zinB&ZA094JiqG_yX!Hz>+`xB$h;eBzZ+S*8$;YpJinh3yPq++pY^(* z&%9r3zh6eI-LE3<*PlOZial(bJnVWse9wH?Z+|#kd-#cXIDU>e6+@hvATGQRSDA>L zcEsHp0*O<6UECLdNgH;S|y-T0b-jl+#56NVNC0VA^HI zy(!uUI^{;Ko&ZvvL%k}?(G2NSog;&~H!E!cq`E&1o1BhTdsB6P8Ml48e*lo_9h-Iq zU_O^g(>pQm3nv%*N~V8mF%-{g(wC?MS zVX+qRX00zBdii#>^$P-x!tm<-W^ed&*$l&L$KBC%u|Nu=n@{`S%1rt*jBcHOuC#hR zeQtc`a=J5`DVu40?{;yt(jNHSROXqps8;4%^M9!#u$Nb@BJ`{0rK-r~cD1S)0+m}$;wf#7+AC~n zZiKotp=FJ_?DGI_4SD+f8VyDEUT#fgzMUFPRWSgMmbxr$t(K;$G>^8nu4S#Zu1Nro zj=pvN<2~qIFORO#=bc(z6E6U-o>?Gmo!;w6X&yUN1KYyy6!i_41i~x!kEY@j?LjO?{ry zHJJKg%kY~85Lz{u1wQ}EZyrov&|n_Q-pBtsoNu?`b)*=YfJL+{U86;;s*HeTyslNF zWunPf0jp%|f<~*7REStuwvQ1Z}bd>6&bEBV`0_^AoL_Yzs5L3fdJH7BnI3 zN-FvU?aS(So9rvv(S#f-`{|k;s>fx7-qg-nHNUA}`zrLdaj&5HZS$`_p?9s9yUp*~ z5op5iJD<|Gyzj=A75>mmXx;Lm|9POW;~;%ui{mhRzwpOVzP*-@<6=)mK26Hfw|<&d zl@)RNrfc2mG-nbh;=Ev8*y_CWu3zNy%ICe-&%Lokl;~@L^v3fvcnqShJBik9u6vn* zqBprdQEhGq75$>_NA-Jc?!Vffih1-F5w?5$9+wsSaz1C>{^fEl(97v`tFYbk_E*1{ z*Zt*QyB7k1J%5M9FOEzw;r&#~6dAuk9F2FvM;Ee=Ld!1!(wXoj>@h{-X^_Bjh6nNB zoSC9a^GiY!Cj9B8%s|==k_1?&{;d9H&n)?0k<3nfQztgH@#zakKfQne3!Pw0q16Y8#~4oF_v~Xs{uj{4!j#dBGjbuSvei zQEpSc3xDVTnrw%^KL<%Q>{HKcisz2fzQ^j3T|jgss%uoh9}>_HNCHm)NRL0!F_CDI z+?W2#m#Y`__LhH@r_&$ zHOWbkoKg-XaiE7z@FZ9*EC;Vpu9wN+B;;@W=l=-&=kGP_zt^z;Uc)~4dkwqg@9xx_ zlSuDpd6ZA(2P8>Oqk{f+vMJ2ukenCEDZ?}phh_={&x_T-(UvkFuhTjPW{lg za<}smQ_TNY%IDv04f}5wXv4|YK5dHKsrr^$Q)fhN}xzl}{j!kmRn zI3R8=PYDFBn@Heg`7?3&_-ffwMrrUM9f(NzlBU#0wWNqemwM?^#Z??~ACKGyv@#E)|fy4xp$f z0mM+tiPI^>}2FOCoBGh+1>Il<6+B2?; zjzNEbH7o~TQ|~ot@1}%u3VIwcSyGLf5}-4a`^;i63n#h=m7@tFoxu`@Y6~vrW3iOq6LJLe|!L*D2ir!6Eu2pOW`_YR9R4Ymt3`KsDOXOom$)T~6 zuhTk=^^Fnih|F2~+T0GOSq&(XbFL_K77Y7})RR3%p9kqYfL`v4CqJV}^1yVs%3;v# zBq8`h@oe3UFtoMcKMQt-{&Im1FO2==pjKR*O8Lt{y*S%+@lOXe;?K_Rzg(alnB{-E zK>wq&d-$I1bJ>oB z1^0fcw2n-A)q$?^XAP>*RVO$C?oa>tIY6%-Yfv9MyGJ&#+^@PRu_}WeKPE`(RS$zo zWr*&`CPDL6FGoaWn6=Ut$j62Hs+h!)Z91Xr zLA8jgxI(2JCg}B$-dI&a{m2fR`}MFXR&`Rp(k@r(^@xp1b;{hxE^qTSV)T7Pb=scN zp5W5;n9Epo#^uPK=S_v=kL;kgi}Pc3b@iif5;=M*SFD_n4Tyg_ zrrs`pr{ijv9{uUue7kZSQSUy-`pa$UcJ*qkzRgwf*O%MdH6-kYj;Cz%p161G=&B7} zgk$foh+8(mkqtfcDkmY`KQ{=*8~XUhP9ofw-w`1i24q!EV^Z(76@)MZhIGeH6Pn3f zoWC?CX|sLgo^IKF+21(!dF*#aD%-B;I2VGS_$8gS-6_Bp!tx((aZ4I7@?UOo z2jIWB#kc;&Eq?niZt=ywe{qYy{ZF^J;-a&~zqrL${&I_de$OHFQ}9>evh$-`eDARn z_K*97uKi$ZIe+IV_mRrwA8v7GqS(WTqY<%B56|2e4pJIMYWWFK$M|B6@rT}J+2 z!K?m%na{nt?|bxEyw-m6=&@L9`^Ul4UIV1Tk$~KzfV5F_kQlXmfFSS1heH}48aXN; zA?^SHlX?IEZQqMX$yY*+2gt5R?Sq`03D`U9Ktp><1%>*ynvtIjh0#EwPg%)~Qs~e;qb|!IUCQj)5gb6gB^Lr@Fbk3{%|`!*UVvujLw-RC zAf}N3xzC$}MCD&RAEpWRr=bF+Ms1<>P(OxKzh@c)o6qbU23U{ODIr0~jCPYC#w#gM zZo@VzTGoKd*bgstq5#%?xk0Tus#q!R9AP2ylA_hgB zc~0c`QdwfIVrdoXY9%)REh^l>2)FlU@ntQ$$#GHMHg%FwWl>vrKly`&V|HRUYhr-3 zlb~09mG~O+7Pwok2s%OqaS(J~O1%EPr1IP7Og{5ux%Vzze*U=GCPStuenGNEl6XqA zpVr0Sek|pt_?@G@zlLXK16DS`%QNcQzo$!AP3oEP)A zsKkha7pUZZO7#_<3WmHG028dk!?FH+KvkZD7aQ=n9=H5g9#9qLnikK?T}DfcFaIo4 z`lF2euY;%5obaDzN`I7*{~cui>p}MHe{+z1zn487ZY=k&Z!^I73nYhFsE zKW+%9NRNHK&PYB;f+(2CNa%=v7)RvbkE=ZBxJ-rv@a*nD@C$`Bxyqd0P@Z3SZ~LNc`oGRu)4{&~#aT1`$cxjl z`;njYKU@S7?DmU`3Sj%N(z^Zst}?!17j{tI@<(Mn8uKB%=dm)ra)7SnUn}EhbnO3E zE8{cHrQ4C7vK)8(!C9lzkB}0B4hA&3!LlqLigJ}4PI}EMeJi_3$N44tDFf5uM4o-1 zIvr#vEIl3am4D(r%+fxOUWwD=@Y0NjIS&G7V&s_U=8Gi)WC&r$eT4Ho7ulOYVeRZ0 zM(KQ3E1`j_y^Ok0lnU$3KsWh~TA=ty zHW=YfBt?yN68H+WHzO}9fYY1Wr`Uy>Vd}U?O^P!_tHm6@nn9XH=OhI8aFd`nNu14h zGE5uQ1X;UMn%Q|W+#oEMXi`sxOJy?RQ%f${?*Uoin-7s*X)lPo(FY_!Q&9$oFR1g2 z23`qrMf><~Q@8TVi-^WVNB3CJk}?h|YD~pyYEhz)Uy2h)n3LrZ1u`h;cLJNL;^7|o zEU)E<^@lVtVMWp+pY$wTQx0 zL<)Bvt@ICh*`}$uDy=^_Ya@l}ghlQGp57nw-EeUcfr(`E^+G1;Y>;-?X3dE%b##gJ9ZauVVfIA=eyNo*v%#F8PHkO$8IM*@ zMjjYIpK#)SHM7TblA@~Nj~%U})O)3&K5?2J7pi}^%5>8i!s)My8Kwnb)qA4u^R+7K zd^?X$qIf~o`LsF}P-gu~ad9$bHYP{lnVT7w9;b4f-IbhQF`Z>!_O@(F~KolV~mf;3tpaHsKq8)RN^~ zsknL&!B@0^58$Y{R=y~hZvClc?V`Q+jby04b-RaM=$zE}YW1@98gT3hSYAWwPYgi{ zqEFAE1o3Zv#Jv|TV&bh-^@5za?2xmjyXSnd6px+E04*VTdad8PP)GU;Z^)aj!$+GX=#M z$H(*%EaTbS=DMPOCW@rTo!oAM3%In9okZk$fjPd0<##vwqL3oA#qk;<0JC%BcQ@1& zf@ZQ_jq#gVjaU-@q=_zuJ}{uL>3pUlg2&MEjh#Wa+pKE5eMXYa+^-+8T~{@G3_6{` zUxtz*;#c3_SVWsS6`^#yP?(5#Ok(K-`QjfP_cP6A=^5R0PahTqxJhJ(XixZ(uMzN( zW->3h&F3b5w*o}os$&mLH523($+o^oF<5rIs6)!MVCVn?ylNyt$$FnV5a~-_U*2up z8@u$7i+%{Im|Y9j%9@fZ?$kuPERw~SW?EwbeP~%oi9{6GI9Vo#Y;*CEfm=R0-QHPC z`rR~xS?oT4Fr3lRaiR!uKKr=05$ZM~iT5}VU>Q0x@=$QXw~K?v)RK@vfT!N6uwmy?tk4sqLac_x{K!)1AX}q0k>~h4CBN%%(9%5xrRU$g6qB zAH0O0rt;Z7ISJUHuadRQ@nw_jZm1pGzQ3J8Gea;{-5ANK^6c+bRFus{+7o^?J9vOg zLwxu5p>s|57vo~Lzs9}ptJUUQBz0SLK6}OMdhV!R^{D#NSPxpN18Fcwcg-dUjMiSh z(QAtb6_<0yaU#%)q+8>g?jhvKIHsvw=z(?&mSQ4ewh7k<<{5` zB!Ip*AUHt14&RT%=7WUZ2Pru}$tyqEpbs)v`Xu#`Hh{70j$OkituiUCL3+=Ld_x!* z3l@d7T8KqS_hmBQ(Kbra*Xkorp~OO=()t`$Ebk`?LZv7jPt`zAO<85j#6a6Q=hsiY z+M`gRaG(Jg==WXxe9zgVC{XXx*(x!}9T5~1H6Ii`Z}K6L{+Y~Y*>l~tT@kf7?=O4a zR75_~JQ$Dx@84i7N`g0my4Z_#pzS^oM_;h&nR!IL`ub~M>Dl0fOWo>umu|GzYr|UH?p*`x#b5%5NLmL@pLNk zysGzlAe1dF5Ms#SYUZHgeeA6mJQS!z^Lc1S?vE>z|RusFUOEzOB`<>EUi2r zzV2jHi06364I1FX(oItKuT7-sNu-$hxT$SHnFq2{Q}Wf;4$@B&2uy-`2M}6l3ls*~ z)CWb#B^&fRwN1n$IM7l}<1db}V~(M*0x4k($@$koF-ecKb#mUIar}VD8LA8{3n*Kw zdR_C`4c}}&N!=$=rnOO~o!Esz?lWP2Fc*H>w}#Y38~p(7_zN)L{1`hmE8g%L8w>p)ah<-$^S0;cq{R$mP$nsAj5Bo%X*>vR05f0QEITUQOG++~COgJLT}01-?A(AzI-8q7 zP2MKq4ROvF8VT)d?Dpg2OxyG;TWly2z`P^Df-#4ZB$rz-mp3GVXwF|;lRn2*QJ`Nz zlt~4hIIq;zc~mMdHYlYeIj;g0q>ltx%mt`-IL+$k>)7Qep;{*trzkAuL!0s*QETJH zlnPh+6Z!P5Y#7!$8Hw?z@iI1hB8CkR3b>Sq85v@Zi+eZ6clHqo=VG- z8OV|bz)A(>%9>#1Bqeacl6PmYTBeeEg%WH3l4e-R>$t2$%|eDnP@Z@3m&Kger)oSQ zxqLU-BR8dEL+=SdIY9p+=czFBEZ{;@+2Uf^@=e()N%^{9`KCenwp;mbO8NJue-PG( zH|0M`9@*-$`FJ4PG|1g9r_U}w1`JqC0sdyHKz@X*h2UsVIJ!F=bXz`8TaI~KhJ8?W z-Xw*gRjGyqQ1?b9Osym>`3GlBc3Vjk+jUYVd_NxR*eHQ4K0K4L-y55s!qmVnZZzWAt!CoO|PEA#Mw1KyOnW zVgd{L=vDA*jCHSP$%Yg)Hv~ePO5K}E4w{OgjS(2l?uyL`_Dvg{Kw?br70GP&)Sq_`^w^jG$HL!?1v zrr6J36Iw*&c-&y*dAGb9#%<-{`%GFNxTMLn!9`M9pDWZ9JPZjDY7RMQ(uhL(B-B*w zUf)sDjQ!_P%8Ut4_B?B5hgJ`_(0D2HYv%-R{ zu*={;Fj=Q`HgJ{~6rI(G*9cHw=NffUC;VIzCM_Jr1j~>U<%ogO*GPab4%7UB)N5pC&KiPfV;+v zfyfs|xmm!ak6Og`;BY1NE%29Q%7NUhh+$e#G!jybx6OP>YndANo6^?cixKs$zL6H7 zac-af>(TdNqYfuS6-xcGW}N{eplFsS8t=7Avw$UduAwYXYKRA2p<_e&z?3LpqcC^1 z62_+YNUsuhE_}dX0u(X}N=j>WyyF^@D@{@YJx%OHRR$$L;_j^wAjc3(=|r74$olK! z|28)t^iY54QFZ8k^|1>jy7LjWR&JSMTbbf8n&KLrdWleOqCfKg?8yC^1B-21q$Enq zRXD$s1*=DCxXo~62l!GwiaXVNI2rsT2K)tjSdGpC_+C27p4+EmR1al+at>^AY6i|X z_vwds05-lE6VJ{M4{i#Ro{#}zIzV{%z{uCBooS};jKBtzpu-MBARQP350Do%ps!Y! z<2{hWk&mi8l-4}SQ9U7U$diWA&oMnOE)34~;IWv%dRjP?Kt8ODy!auW(+2JbFf> zAu?!?qY0~(Sr})h+RJX|w0>u$)Ghc}lfz;O!h0?kJm|&(n5)CeIiABY?NX zSjTB=hODmRd2V1EZ@8CiNXKpviEdC(Y(8?<1ZnD9<`IPxv(K=CQ1lsq?^C2f{}{ou#%e$^GoP zz`WzRAGch|lykp3!X7OOO^02Z-t$ffr-98VAe+)e+T8;36IA4AB+FqC)*;tx&-X9M zCN=yfbA-UDZ!kDM_GwWszULY?I37}m1D1@Ia>R87rbWb6cv584Hz`LJHAjYMjfQB^ z2GjbE)|VbImxm6QGYvDXzI;1B9vniSwR(&FCJO+~0u~*teIN_6-~fF*+%1q8TPPd$ zR7y=gUVSP2y`@FuQwiYYXy7*`Cl0#KglQD``C z{8dT`c-aB~98FxxH<5X6@kDHa5yy~U$9QYU1QnY&CMQH zQkt9!V4VtyHoG`-!!D*hmiGV%DxiT<>kx+HlTmIFAvDT*fR)E`-tqU>l#`ubGB5Ru z$=POaSBI=cKr&tnSfc4NnS)DXN3hAT;IjTNqTSK&#{Y7TgZE{J^bqO=yPkVl&Z`SEv0m(J;e`cUWf&>{A4fW1*wa(zF%&Ny}l zssfg-Ph6>%mSzDo{O*vR{C{xPnE9Xnm9wTycB|X}W@pW8CB&sc^8Su2t)4^bp5_XJ~9H0F~lCF$1Fgn?-l@))9W zD5)5}+&D$x@D9$LLjQ%c_SZTZtT`9mEr=99VT;QNm|@Vl<5^hqZU1nC!5%V*jBCS! ziuiEH5IvRFQ8SdqU^u4s ziz9*B?!kI_J13bn@<;&vS1B)~U;V{dPt_M4D^Nb6$%%^@s)i6@u+}+rGlvlVz>&rK zFpEQrf%F(hr6F_Kg-S?|VjKdEBn(9m#m62HOGaJCzDTK@D;v)uOKSLp1P|^ELQNXS z=#Bcg=|^sL8LIS}2?gvgGgC^O@t>yUNHIssmr`gRIct29k+C$LZ?@lV9IN1z%JYos zp>laqG{V0W3~6H-W)FFg88_{v>9?y;MrtZu4Lx9hG_D00Q@o7)sFRACo=ec?(o85g^tk+RtmAuGG0uvB3t# zMxCpv8qI2n^Rp>cM&;(C>IKhchnlV3Pj8zy+MsXcq|*;dGafnXyk7A;a8KXqG{#Bt z3CWJdPqYw93od!I1*r(y;9mkHN45c3E$?$+>8u6kSS=lYa@M-Gv4PcHA%aXvV$l2R7^ym&%4gTFMEcrtRC-Z|!Sf~ zer7Ai4BbTKWnb;OvzJa~UQsN<0|kUhF^Db1so5Mp*vW&prScNFE6vGXQxY5VW>*r1 zZ;B202JhyHe|27ulzI6_mkz^AjUpm@f!43?9Zoe_8Ba%@ z4R9iV6B!+p;*(d9Xv>KqsXpID&=)n(LWCOaCcphK&o58A5*CvvHFe%V^!zGrl9uBM z6`izzf<^*FUhDvLqy-d$mqjVQkH#<{n(oq_orLgJ9Lys~c`g51UgX}y_T=}lrkNJbzYEqmM3DWf!i*%!KF&o?apha1=Bgt5yLRju5oK& zjoCEAD;b5t^AaiQr%Y$ZU!j zQtg~AOV;VNeSg^bb#tCU?!0IaLDWGMt7G$%l2;ntihN3Yn8g2;w6uebw4w@3k5<)y zxYsyLGi?)Z+f8}Nm(E-WZ55M7?Da$s(Wzh0Fo6X|>3j%xF85-HZ$bm+POSD~RN;>K zGite)lY&F^?I7e~$7PA_Km&Ynvm<+c{%9#!9Vxu07(_1)gb|>{#&(tsHTDO*^KieQ zL1E;`{Zz~hjU))*4D+))Q0o_D2om}M%k?-2N;$d8k0%STd}e$rOWaQvU+Ng)VAQO@ z+Jrw>W2y(T@rebVIPwg=r4@dDZXbftY~EGplIP=eBCoA9pEPut?U!vCfgJ~C?Xba1 zp6H^p85SMR4%SWXz@Vo>(BTU01DLr5ez|?{t?&-_)ys3?s2R|B+3~D|B4rC_Z=Wbu zopPqnTBf?zrAA?KV_R9TGf5d(DpafuM#?>|VBq%grGfksX63YRV7=!GlDG$r5KP&xLuj6fBr=z|p6xnpQCTC{K9Y-gpfw~|HN z%LOJix?qE6g`$_g$sz=yU?5EeXa2Wk0@HO>)!d^Wwtzm>NpGUK%S= z;o{7!ZtZU_od!x}+pb}VeoIdQs%n{?_r-eqNEJKIZ`R3k08#-aDm^Pp6ZDBz1gp|~ zyjvJ+bgBcNklEcPq7&lLhi1*$^?GE=lY(GzPdLX4Cs%pA_SXmG59ixVMV$JDr35B2 z1f=|l_9+ZfE2x!Kqdir@ERbe$qqmKY9w!tjh+i9g{nr7M0%)u>8udsT7SyFYl5>QubH4%&Hte9pUWr?iFpFEfhA& z=fC~+B4~ty0ZP?&2oJI|pU#uz-a=PG|AwC{hGVsa6T1P9~ZN{*f!g82~(X(qYGPeP%KA=S&x+@t-e zSJz*9xS73bU-GRZE&1ydP*X`QF0gJ}lJ{pam;(J&3jJR-e6=Njm6}yX zxDYYh-WWL~$_B`nFi50)FvFy5`yj?g0iPn#fTWNlcz+DT z0K)kh8DkPE+dL}UIx1Td>RamI)CL@P8x)MnB+(ya`AKpWV4jpDf^hMo)bG*rwj^w) zIR*376?$S=c#*8;0h+%t<%^;N5b1;FhUBS`1jg?J@?iGjG~^FjK|cn3<>p62W3g8AA`rxk zK}DMsS}#-zj-xnAg0U9R8IvNDqrKx^M5Gl(V+*Lntw((&ihdXbTAC?n+0rC`ic~ud z{}sh_gp1|r8pK+~F-KPDFcqr2j!GMZAMTOM*b(`WIO@ryP%U~CAr&|;wDo;`Hv=p;#C(+7Sd+aB!T0pnr>N)Ncpx#i5AAE}Y>K51PxFS0s)uVg_|fmtbBAJT?sGZFU2#LUX;Qqo z$876H2SGzsrQ1znoRS1=H#OqbW%OG#VvM0e(ZRgOgBDa;uvF|vqcWKV*X??A))|TN zy&#n>kbehPt!bomIz!i}Vuxeg$iDMvL;O_$7u8?~J2m9g?i-y)g^+{}haa}idtou3 zWKGS8SdZz=Z4LV&1|dd(iVIdXa#(E)awH2to^q}^&X*kr;Gz%UlfeC?AIr-Ku0mHN z2vBGsi6{7!3$vj;JRuM*i=BeajGc&xvX*%pMN9gP@cky}d4{)A&5h{AO$dq(UbLl| zoYB3zp%haW^AxBo&Pq?3pPw?|@CXJmzbxaRPRu;UsXz~vKgdAHBYAxx^41Pj<|^Cm zsDG<2=JzJ=i|xX*8A6Xi5Z0?uYqJ3GZBQ=f{4_O2)-sI4E>9Wx8+NO{Mi5ZL6lHO1 zB4q}I^{EE!H3}iwgt$*huyXB8X`jpf>3c)#{vcCqH7MpIE+o+qIJ(ROwOHn&1NK&=8+ruYCqEv zC@Q{?sHF}sF{kKJ_9VVV> z^Ku<}dd4YFH!k^;WefmLa|&1hRT-R6&11D8Ze|9g!$?0Ks8=7r7_4gYNNu6~$hNuN zekHsbhEHC>p@_uMu1Sj09ge)YJk_B5LTCe-b{+M4B=mC{YVk6%bi)uTKHyVj^?^;I zlW8DVG@)BDN%0e?R%(;)RaEQxVmw|V+HF%A|6*Cvd}r#EyDK+ytssOA;xkZn>|e4g z&Qk)`(J-YTlO_laVCFg|dIgK_jwOVlXIAS$eeQ!&MJTX*MUaTh`JdoHkj*OB86oxo z%kQ~yFgPCs+Odq~E4NIa;bt=FP{3bKu&kI;-$%Ha0uWM6okaQV&f;n;bv4gNHZUDvS4XQ`f@I`Amw6JC%zm;&h%^8aBb%ZvriygRkHt7F&enUpDD?61U(X={yS}KL}XGF}#N{ zECn#ks-L`^vZLjR%VYfzwy>h-GKWa(`ba1*0-FWqd4ERwY@RllHHP( zuGp9l;#{NSF}(_6Wineb511=6v=d3Agc6Hju22pdJLL|f!5be6Om2HkhJMm%pOh7& zB1NCA`Lhw`=DsY6CO{%WaRbKknZ<$&OA2H?6JdXnzB|c7SNpGcdR4se$iRM7ZJTp~wN{s_) zT^AI2>*)34HM%l2rI9MSYPtklPtM)v$x|oKl+CVleHu0`;D@Q;%zC4-huBN%9R7 zw!-snkSC7~3;0<*b`867YjUtK<@Jw5WXU=MvN^ zT;07V z9DTOXLyFEF;jI!E>vz{zyewDg#JQ1LsBbmA!?jR-)Q}kYw}Yxk9!#Io=dgxNqyDVU z(fd(r!TZAarRs1m25;5?Vv(`Y1>;2so`P#!WMebMFDC8G<(bt>Rv5#Jz8mUwz~}MF zduC`wVtbVji&>?F!d7GnP98TO+OFvf+gq6m{c$~lvK2+62&i>)$;21<2^O(4@v_ry zNSHhA0joNk8rQ}lxH~lN?(UM{?!gHOZoz_+puqwG z`pHZ^Gc~nawOd=YFShne+;#uYxz6vhoz;DpP|oaZ$CS(<%|@>j1gc4%8IA!k#n)yu zQd6)Q@})8?*zb{-zB1=?`gy~)Sgl#5*mSXxrwjA9L5ZyQ$IIU^zfR~BI2aLoH>Qd^*!m+|jC!2(orX;Ma)C{pYC!6~ z`ChwcQRO>cnX{M{Q-6tsh+?<0H~8a;eBW=5zxT7PtMC+x9-Op^>cxM(X*#_>$5v%_ zHc^znDXfS%bP8~lZeJp!bJZmgAq~T3@1zTVCH99df>4erl*rk&c@mK3(!8vn7QtKs zC8CO;ie}1HpryzI38izf7h|{)O_xPtQW&qjDM0Vaz1e-12 zXd(vKvbIE!vMY^UY^=jPOJMry9UD`KL2L(8Ho`Ra1SU%d0a|5Sd39OmIwqb}<{HYa zF&BJTrl>0L_0uo&Fk}UdW$6uz9v4Ieu@S4c7qq4pM()PI%HWEWY!%7xf3jAlnXFg( zO8GsqRhPu(npvqrhS1p{&h(Sj+D@9dWero^tIQ3H3yK=}kn*zV;KRqG`XL-~&ZbdH ze@=T%6?$w#_jl0RFl)i6(~E0WKA?%<-3%*usGI&$~J!2P1@foV-~C zTKQM1k(uLHqm+hte3OI@Mwb)J-ub`B5bROCd}D93Huz>Zzf-x-h-?SAmAyPZ@z0ud zy%CrLzX=qWhj8@Wv=G(eE-fevle8`B1cN^=={xiZt{D423$B{Son<7u$I4%>;SNy1 zMy!ROyejSWYJ@hN`UCF2h=1m6{_1h@EWE{s>+CWddh|tjH{@v3dpGjenaEyjosn&o zrD2e0n6_oV=uv_H%fqUggX+@pP`|F&am{^P+s}p`lQ!k@^oYk_ZQp~$&xa?2`z( zm_f1GB9J%Mv)+RG8amF(XP(6wUm7I`kOw?9W49!m1C%{13^G|6SyQFG0#h|KGO>su z3QBTHK-KtKA0mGNc@%?ci`f2_7+%hlIFs}u+&$KDQ9l(0%~>>#u_hc9z@gCARiYIr zWn6;*1L@%}F2(ZDYnoWp=v>=4x|OCxImOhZXdDPg=63_{#6By9>m-YvTe6ySIq(%P zPJMp`fo8Nk>yy^Ob?hP$LQ_mbf^IEZNdV;?>TpBA&o|o-FSarbCRBO9!TZwFc6SwgBv!jWUb5$;%uvGyCkD)2B_4X~u_Bm(HRQwbH%zi{GoH z$DUG?BqEe-L#e)nLKM7UQenUf62Oo`9Mla^kX%aLHj9ldoI^I$+A6>-o^SPRMg(WbT}ZAo8)qNk z#qf2OL20N4TjDeHz-@J!`z+E)zm!9&wyZ%_SH!a4WdH>V$n;F~^c*Mr#A&QxzSIy# zLraeDYriKFed5u~q4bmPau&pH#^~l$(1~pl2%r@j#frC9!FudP6L1s9N_w)O8;^|i z78$@6`7?E-b(m(=Ge%u5rY>Tgs8_QMPFlQRT(u4d&pJ%XLNw~2?W1Z^$jNJ$D-vd6 zX*n-v+#xG0W-qVF1JPe9LjP^-(8|6Awgz4%%DB(O*oIQokw-C8i6mm0Wb>2}9Qn(I zLV@-R$%qINFi`o+1Q*Y86IZvR61j!`WMT?lObRDht|WQ;OBVCr^lBN^UtE4cb)vGq z*b!;<`%FdA1w$~n5hPZt~&T%xTGn69eX?<`@4VDLAj@Yiq_S#JzQ(| zondXj5u3SERiH7P%duuPlO%%TG&1gZkinV(*Qu-7ElyyS`Ko27VaTh`>5QDi^PxJ1~!~^mHE?ho}cfH>oxb4=!fC3);T{f8z0ONV?8lL zA;}->{U1KmUb6^E_aE4jm!GM(Trl_p+!AUx8u|N4uq|8Orgm03OV*=9c&r=g`ilTw z)!&mPHTfc_+eE(l|0G*jt*vpsm5XRLQI9O|Mj{YN()&)T8xKmeipSRW-CF%Fa-)Vi zC$d;(Vk==UQxQ&r+5TfHYrwXooSx~MG0n3rV1c{pHDFw&B_sl91oATR6sMF#x$i=q z;_4jENYFb=hEjlPx-lTNa>&b0x>x50z46wYZ#_w9{H_v{l&w9*Bl}awLw`*$IwGh) zJ$?jQiP4I_|gs59-w_Ym#-9fxjwtz4xEFU#`*y zo{R}KU)C3emhqF!Ywz>^CQ&FqAo~Awf0DeqmVA1?czGEcAK*34e|Yug{#7wD4IN7A z*Jm?R?Jp`Q@9FeHXwg*v2`|Oy&e~TauTJ}D%m1jhy3%2V#a!A>VnxzD6`1`l-^qQV z#eFQo#W6(;(IJf$U(j!(f7QJvjA+@Q!@n!O!G@Eb?Suh}_4etSZ=&#jsu3|Dat&RE zfG)@^A|(W|Qz`GLy&A)mE|U;O=tM8kq*$9ok@Wc1W<&r`lyWGM)kLI~S+>tkW^uxs zQnM^P?RQ91X%hv^T*gCK=x>m=HgnW(t9NJ)C)HO`C3DQUueR~tTHsEZF|HRe_S03G z<&#^a_hiex=^A5pL5@@|sj?!aXf^U*E$B7}ce8;snG_=;2$x$oNp%@Gb?H1B30btU zRx9AONK*1k$;i)e4Qwo{|{K<;sPn+JrZDa&!$V>Va_ZUMW9-}~Qa%%C9x5E)A z3etj#aMEK9(Gv2PMq>Ocb!MQ(C^?3U2;JmhGytU1jXb3_J010fOhODX$`n>GHIXFY z6%Vi)ncuV&lNp^*R`##n6QBV$BF7u1%K)apC_G~s0cb4gVZbl&+{;nY#l@_L*)si{ z4yS#wKMbUYsX6JXvKyNk03D8m`HsbcY^$YT6vp!bvZl^+x1R?#a4 zE2_YW8cq#>>ae5o5OXP$p#)f%QUl@yjfD&m!nK48(pWsn*dNQlmlf}qD7^q+hrXzW zMMh;a5SN*`d5}5v`d-qS0fzv{x`aUiI5OV`*3<{c=36NyBV=furJc>@{Q9DN*3#Jh zmek_2ydjMG{mcekqonDh`aE&!RFeSKVanVor3Tp+WDIBILBS?jHR;gmEA6E<9LQyo zR0JAFin_+h2KPv;?Y_PiIiptbasn)(7nX7N3;<^vDqmKRG^|`pFOfmwARe0Pvjpy^ z>#A5AMKcE4)?@WUm2A5#as^Yskr8HgY~lLY;L?(sCmoZFRkMQ%^AyIoKJr@QOf-dI z^Y{O5CgjlutIRWZRpYVjJhQ0nWxS-(5_P$Cb2?c1x+@~6H zx&YH=^>V2SIBzMA^K21$&P-XDerp|~dF>FgXohjmhP?P; z-~vfbcIU{BFLtIJc25&1wjHE7OvEu^n8A#cJ86qDG17pfkN_QFW>Z$KT>;M|WHshy zRaO_I4rk0l1MN;KLJk;-YJrqLbs5<8P0M_Sgb7VGP3MseOwn|>sttjVFI63SM0Q&vCMy{eBpY^7a*5v;jW zD#LRiS5j$(>c}ATkEuV)X>uHdYFjFk9elIWv zq18DlBe`N3-qvg}>JgsSM=C_}-9uBGp@@;UC7DY@5$=&y@%D#U zGZhYd)`@iCE^?;W%S>ONP#4(1yrR{a^`S4tl<#Lys1DkTHh(KQaB6m=sGe>?~` z$jn=2tTAAX{8}BU8)0)b-Us0D5rU(oAG0<^zN=X7KFhZ4%Z@{7s7bD!US_o4JpPCU zPn6?a7)wcdJ(BJyZ3LJE)7jmC!a63^(GRp$PErm+^*aR_yY%he07mLWBOo}CLXr*A z(^GB+OYH&5YmWVKbt9dlOm6DXw`|Ix292XKW9Vb{N|_JpOrnNpQbVuj z!tqNA=+BaJm|}foSY)2U6~*Md*FH;m7Z zz$;ax5=W|NM@>1)kuf3_-d>a+Zhu%tvaeo^U!4^f`D~1z^rN#(kfmY8fQKhvu0>zOHLtz~y`)@%OFZhHQNT};)XdWa3CaUXU(pAi4b$9>n*T;RN?)p8!1Owibc5x{veKxT?&Hka^R93bKSQSb)1-L` z)EVmhmh+Q4M@NfT5`sy{Fp=F#=~3Zwh*K+L|H+^p9|lokNdvr>KcpwFi^&HUUN& zXhzeXu@6|Y1#KqWYv-+>c!K$kHTR|BAWt-8;=LL4p=olz0rU^@PDoS%$r%=)cpHUw zYLX~QTx|UV#E)P+c6Hh|Q23pC+#Ls5n;I zlCkj9+1`*2P1QC+v#VxqGgn>$B%@FNQ3h@IF4m0&?OUyo$G1#){>N0-A)}qr)O_bR z{BWQ^7PFNMv)LOt`|`3t2WB9j%GUh6bd^+fhev#Lz`>d(mXUw>%K70uWeN$ZTt`*5 zU@#+YFgucy82z!Bd2%~RAw}1P1~q>iUEL}1A5j>(Xiss#~6%djal$LFJ6<-7ETycNqgt(7q^-(j^b-+ns3>YM8J>MByxYJD`&n;xYRA0-8) zqPy2!H-(9b=yf{h9n=4^19o{c48bbUO-T>dDs#3)NA=qFih^TzJ`lf88Y7xyzE}E zquJ;W@$6Rqs>qXXIOWP}$Ms4E?$C@yZ)|$S1;oUQ&0j}%ukxj_4y8!-LDb-e@U)3{ zMcIL?tns0viqf_Wn@Bwt1+J-56{S*Evt(~U;J~*w%_w}_?>3@TFq%gUC4Qs~!g;>^ zxtv%uF*04ddZu@c7m|goFBblApMS{{BF%|B`IL?t72=Ue9R~&MEi6HH#T9$Bvf7^>tC)yq@HpP4H3kk1G)?w!i%{ zQNf~^h%5P*%c6mQ?}5kbtOEzhB!Pjy;{*4`15Yfko>vgz+G%j*u#-JWseiAcWHae- zOhRVu&SZ1hD13UkbdeMba2y%0^SBwK}kLuY%fj~+Uk<^pHO2(|*2=*nb#Y){e&4R~81e;F1VW0h( zpU&w@lYUpOj$x+Ldb|1N7+gH7exuuCZWrA@>%&$**thaYB-_ROa}*(qZtto&BwP{L zu)zR{1-#9#WYrwZc3=EjBppTiF4x0up-Q7lx6jYzAj=Smm9ToBkA;a|-=-e#yQ}l| zKq#h7yrGZl-gru0=B^u&YnY*kt9?I@q9;&;0W2lc=y$)E=hzlrkRRZCeKc34H$dY% zQK`wCQc5L`yn0YxKJm88v?whwNSqJ(7YZtI;T1 zUH*maZL3JwfaO!t0}2~;BQ46xgrg)Y&A&!SZ!NAG2CO_Zz~pv_k*iS(@7AU zIq5GHnz$~6shSzmhtsj)7^kV49#MIzXpUtst~<=Q6Mc8;+FWivK`+iovt2+2f6tL!O?&cE_AaZ4d!V3 z>4If&T}?>Pku05ZpiIUP3cEO?O~z3gO@LAEYFV7_qi&fnCq>9>Ni;_Vnh$7y$Eik_ zc^zqIXnN%7rk&q7b*u#$o_AUT_*jNOUkyKOr#^Y zKQr+HEQDT@M6da!lSF5PRwPTUcx{9)$c7FQbJP1d*ui@H^gnFgu9)k6=vqQww@A$v zic3hFQYES`FAD#vU&U%)D2NNRu7pu*?DUaXl*=Mg{fMVaY?cdUL)(tXo{;E9Wj9Ev zv1aiRlP z(0||fsL;Xb?CNABkw@A?KE~~*;baN0q?jWImhGcOIC+%Wa2~xsa3!UG=BLa=W zWQcd68~r#d@}s<}IH@gE2kT~C5w9ZLa8MCy?=m~nKO={z=eJ;!1nPBjf#@M0ZuVKE zDW({QfBw&AUCLMsSa>+|1!ZF#M$qIkunac*kaPq6G1-O#Uajj;-5! z;psvJ!wK=?qq`J=ICA{21rsFDYc&utl#7+CGe95NV=X3~_tOnP*jy;Kc2llSgR`fh z<|ZC?nO5xg(a3k2;OKv!$K?@atp+E-)Ugdpy{@krAIk~NwG!O)K7kcvb#6Gc?z`oN zFqUKGPS`Z#9v8|PbZg{w94+8DYoFh@H<=+j8uQ}jt6FEa6x^QL5Qpo|CVG8vWID6c z$TL{_nAt`=R~L=(S1-*6&>oS|;KZHxeYH8Isjs5`1EZn-q?l0WV1c7+@UOCIv9`9E zz6tAsH^wKbS>5G?PM+cp2B*&V^f<}Gfc8n_tHi8cP`5)g=})4qD;9Ri5_Q$m%PkzZ zLPzJOlOwK&;r{u3=QGpCV6r@f(aTHLAo9PsgQcMfy6k=37kz9t21+(;39TWLb{-pl zRO;^&k?Hv%D(5uA8=*M6PSae!J;-1b zjx-}Z`8yaixbp*CF*aebNGZJIv?I}2>QP)Q zF{l2eb|;6E&kFYN>8NKz@IdMp0!r%n2pu&xl$hEjbbufYcGn$sdyn14rO4w`K|&2k zHzjjve2w(d47RXhz7VxLmqRs<{zg^9?U@LyHB%*&n7~^2`88h)=Sh-e>WgVsdGaS@ zF&A@G#u(IF zpIbI`fDoqPX}4K)`g0qlMdZ6j`GOH33UYPw)Oj*{)SXL``(uOoJf84QIgJR9YV>Ed zRnS+}S4bK>=m^-jCa~6P%$|Sjwd888jtP9~(0r9|D&tUES?s4CCAZ(lNWZWOXf9lJ z=UfG66pQ=Qy2~gQvKqSh#C36UT`?%p%JL>vEs@khbj*x+Ov)q^#?;-I$jPEgC#OO; zhL^>r5^Y%lMOGR660}?X>a;#B%vN>Y3g^}ZUuUn4oryX3VrWcJD7F-+c_GFQLiuP( zXg7^Nio*6AmnciQgvOO<=~MgThm$*Q#Gj-WfhOXMZ^ZZ0Cx03nij`1+KloNv#JXdK z6|YFl=ZaCHgdAs-6vQUVnYdj*&z^U;PJ zt?M2)hWKBBMW){#Doh&bXA1~D;Aw8MqzzuKiDlY?D zGXvLehQQA>yl#x5&5Ut)k55f>n0!F&X5gF#P~$f}b@Lm2H!6zXOfxCpUcNDk+cL~p z4j*bTIHofDy5YO0Y8upfi^=f$xuwVcPB^^k?k+16i~Z#m$p&L(q+*oDQd(h&6MLqfe7lL6!K0Q3}J#L>om)H_4eu=^HtdvH!yRK2qwp! z)l`5m2u<7P-|MJVz=?CFa(%2M%|Bn->}>In`KAkWhn^?jfqG1$(dVyQoh zZfsnZ^fg}sagT|DiPdqLz|iBRW|<~T6q|v_>rh)0{VH-yhy9h3Po-||nJEq!*QM;7 zAzIabNN*AJyAtL(?{452N}`Jyd%Q1<(1esSK`EK9FVg^;QK5+~_z3sFRx?24hY$?y zX}KR$9(YJ{L(}=1kX0DwHtbY}0q1AMJj0G6Pr514T9gz5S^g+I_r(H7Rbpq#4IvO2 z1C@Tl`AP#FQlY5{%dYm5Q@>~boP#1Dui-#pdOZE5S^D7^zBLc;bxaik?pv_ls#@6i z$>E@>*+!4qQppuLf6Y6$#|`=@QyNvi8bN}@f8>Lylx8aniXw?0_BW80c>Y9(zraJm z&-=rJ*L+^3%YxZc`$Hu|e)*scs}`;pj>*WR%cBjTm1&#CCbj!(FeudZtrN+}TQ|Cs zWGVFkH2YB1WIB|wf=u*S1C=7hMO1H?XMJN zc(A|EL6&x#fPkCfCz#YWjE~TRDqo98*PO~lZW_lEU;+*%ut`QyP(Fu;;8kz04h9Jf znG0m34u6JZ*YL>+{&-w+!^8eP@{NvJ`3u@l&AvACrC9mCMMVsdKo<~qFviHCO@Rv} zZiE%-b7ZVI9I0Bd>V>7Ke||_aB9r~e6idga@kVxC4XCQ6uNn5L|0rhmn-rQoE@vd* z=a6z2L%*hlF*!36p_Xb=yULqul@wh7WX@c&Qut=kCd32a!bwD+O)S$6yPgQ9S{i$q zFj_hp+sQy#xJ1!vbtk|I0DO(9j?N*!Y(9 zjCLOXbh4NqFG3h$UDGFgU8G<*czM8pro`;ems?lIDBwKcMU)H0C_j4(XDSEV$prhBhTyLT ztBu)a2&po5+GTmEa%3N$rU$T~kG%E(aB8t?G)O1tg+n?S5eH<`Xv1uhIJ$kmrO8l6 zfjZ)VV*Y zDV+&f(6p65ZwuR#CieiI{Ay|FI?@m67m16V=JTM&#Fk-Nawb>_5;mBxRCZ zAHZ7mDTjFpG-$N4GtXGUy!f(l!_YptWfgQ8A}|(!s(4I3Z;>-UlNw~Ew3U7k z{DF&|@tj^R+LHs<&dmL;*1ybYowo}E*M1@g7W~DLeN7>|tM8#84V%l!9m)oXb``Dt zDOwOI=G7mVzsk|GY#H1u#79vgIrQ+UH@-XedbYu&7R3Eh{(&VjaWH|7Xc>3ttlUWN zYc%Q%P}aSQ-BfV>=M(5X`0<0{`cFKu%9s%;U43IBgC43V(nWLX5p(J>y@t z=mgt8*Sdx1OHkyRyvq=gTQW3u{bd5^PtNz(*!p}`1;Z=;_bgA&6}8gP$_4rQl<*uv z3tXP41|&~RGC^J6JsE02-D`9tk(+naW80_K>IkGrRV!^%!*#c@!EgkqnEex&?bv;T z(bNN zQa8+caHm`kT3ym0Y;zS*fl!TiPrj|29Hg0bcDSLe>s;m&V7qAO4H&Dzoz(qeSY}1(>WoD zTA~zCGD=3@x|6BPWbz~+i_3y*0ar=~nK2)sNc%WpGHB8EehqpO{Lq^$AZSMDm6I%% zbNjSFW|_ML!(BEUV4R7>S>bYJ)zg7ZsXAu?jO;|fG1)6*$_9S93LS(86@!)&fgkmF zBsz+gGCFoDJPgYT$L6x~`lSPT5Lj@M;$J;gd65^GD5fyL4a~OJiyA6@3b6D2rfN+H z7jYdGWf;S%>PRIxs2jMS$JI@F4SNsw+$2Qr&U@a%EDMs-^aB7LsF+ica2>P`w3*3l zc1Jbzq={XQ%VM#)u@4rrt0j&WB4nZf^Wq)vJa*$Ig?kQd#e!_HVej9q>>crINV&yp z^rz~)#OrUx8^1p=q&YP0kH4Z85c-9RPwK~AedycYkPotVc+6*It&e%AA70N^`Mdzj zUGpzwMEWrNuMocCJ&xt{b7xAsb6Cxe#Gzi$Vb{yAzW1lFpwphh)1j@?QIp0>8s7Av zvrUt_+BPy=hI18TR-4Xq#L3H#{lYT*UBKU$3*mQ{Svirg(#xx@%QKp*>!2%=fh&B( z6*28^3e(@zlE1lve{&D~<_*3U9JppfT=Uc3h??GLoShMdcXYb)56ay3gx!`6-%b+V z$;;d!huk?ya@*404#>Ui=HCYf--nvs!zH;RX(@Y3|0EUt$=Lq$-Qgjv=)qs|Pr<-L z3F1Db=&?xhZ&UE!vVkMzZ5|>~Zf=by^fd07;HPf`PjkV~O9Ri7i01{`mo?LuP05$D z;FpVmm#bjJ?EnH<1_ucn35`eq>S8t=jzcKsh?P<@0te8lwnBL=#^NY>{Z6q`%O(<# z6munF_$sC{I1Rf49I*K-zvKuwtoO$7SA8vz@PB;57O0*r0mV_iixsGuuTaht3&atu zU98crGw6#ItXpm{>hXKV5vpHpvYO6)7bn!P-sbqd`?dxI+emlUSbpcbVzrg(k9_mY zAVXRnYD}mZ~RqOty-hW=8EYo)HFOP zq?XE=JQ0;lY_^ip^e8;{|Fgd;lwaCdwOIGx{wh1MK>ELA(`v4vi2;*criEdI)mw~% zKVBA_E&p%%tLnkKTQfZ!7u$nx?f@J-GME29@K^D_!VhyD+fNSjsv2~tT^Hv>iway0 zYmN#7?oN)1LNM5miz7(wk4vKepZTlZ%(C{c5rYJUa-%{4}bN=Td!j$lH$tM+y!*8M|FX%F%<*yvi>3Z@7*F{0 zGIskA$OUaA6}ZxB(v{dACCgjn^`^xITzv*+NzgYi|A)WI+3~MYjAxwl`ip>kgxieB zQN4S}m-Ex>Z&H|CH?trzr<*wimWG>oW#O}%1$B9@+eK|Xr`si{&AaOf1Mjoj6|*R= zyH%?!r@J-Vs)oCD$BwhR?=It9|DT1}PdhIDLG0t)h<_0K2gLue0VKO8neZ|MOSyQm zw|Edk>@t)fz8LL4ijqy7@kpsMT>1W^D4EBo{7*5KJb5ZXs=D?YiIPgc%6~=4E=ad7 z3I-17iK<}i-@z*%xOrL z>>@Qo3EmQo#GxXWNsV-l@&(Psn}hbqm!NW7saFY(5oK@o6vjo@o8ml2_Nc#gjtktm zCImZ{(O^!>%lxZg3IUbV;Z9D-3h|{R8I?1#U_%rYn^UuU%b7K@Vvs$4r=enj32=8u zkkfysV@g*@YeS~AyWKKAIWlqDuuU5zre=1uG7($mOq-k&WeqICTzx2%O% zVsex%-xBA1(`M!<5S_6wXvtZLx5jB;r9}O$^a_<=6lsu6)unbf7LEfZM=MqJ`siMO z8jT`6x5ljT8u$u(&0Hd+2%4{>!L-k2OA^X zCT8pz7CwTIu-~qsuo=*!58qWb$)tnX=5E?ej8&yoA~};3uR8P1rY;f_-*^iO~MP23#IOTq|&H znVz4UDy?B{7q56ArqgS?hgl7CoCQXhJS!#4t8{r44c092saU3TwyLaiv^W=2t zPqhi8AfjGw>m*;f{mY`{FnCtB*b(x5Uw(Z@$Ju)wjy`XW_d!b}dbvdk+DR&xr%M## zd0lvdw^1mO1;~YZ$Wgxfu{72`llB%XPxe*Xn+siUC8lU|t^$qT($1o>xl2CSW*XP( zW7po&uqQId){k7iVZ`&NPY&-)PTDhzcQTyK5MBC)9C>)To_5Xt)J{qtO4{pHl=SR2 z^sXvl{f0N6tceGgV9Yxks7UwieSK?2EIsYBk=|{4PsE-M$Xf!D-rc^@u-_bZw_A^)ap}!P!QX#-_Bx0`Rnf#$h{s zqea|(GAHO8mver^Ww17>Eg-n$xnN!``-XvNHX^O2Usi-Wu#KgVJ}&3Qbn~W%WIyAY z9QDoWs*wJOWs=g$^?Tzwhc3DR+MadPPkAK7L34W*4bDvQKK;15zf?2%_aWxq??2sj ze47yg-+lDyC^NpYnvKw5_!2uJ?n@_ab0O4{e@|Ek>n+6>Zk6q^{PNIQ^E#$&o(0#K zOI~_PEtu~F)&GRWApmgNchNjPv1=R5i=+7U*JcUVp~eo`-fSE9T|)lUVUN)YkvA_Q zbG#S4g%Ij#(BZp)bB+36)3lnSd3h*(df~DS-Jj$R9>FC#>hI3pqLjy}S2rCLM*1OW zZmI4$i|&*wh_S;$&|Mj@-vL%)3B`v7?6CwAkeajV2BjSY5NZSq-WwVV8p>dV1&y1$ zRD}|G`=Rk-FdVwI3fi(Do6tq;xoY^AT3Umc>;ssQ&sX%nvLKfYVx(rlECq0!=)Cpi zJmj)1sz*(5G;GnN;Sv!6c?1D)77K-T^!iKBf;(^OOgN#C?0`JZfS_Eei*E+HQCy|I z0;_%AEXD$pzMXkgu3$L*ou|!2Ab8mZ*~bMM?IUOFp^s&Y!s;Co=@&0-Xonz=78fuy zvxV!7`M6la#FqoGORPgOVfVM*?i~>cLQ&Mmp<>m90iMyOtpRP}Mm2}pGjPXo;gI@e z;wlzWBWp#C#*h{aV@)%vUR&3fbR<}(GFAo>lC9hNl516m1%kxTf*v+T7>9!%;sAC` z7o-}^HXbAibhtH8I#ipvCGH|uhpxEpWb0{41(SC;=G=e4U~)dmPVCkV{W}Jm%QOx} z4}7tTr96wv(w0aOHN~W`O949HAV0h_rxvKU9uDwEn zY=aftBoy9>m4bqyi|J+7jAfnEV)iae#eCn+ZNda39~I34M@jK9K`>dU1K_c?1nJOt zR1L>A>lh*ePkd>NdUa247U(w}!yp!LumSa!d=5On%T3&#*y`y@oChgQW_X82SoWc+|fI*Z6@+VAKc0oeau* z11Kw$lsTNZ(*#K<36;Z3vxJ0}aWcm`%x1ztYN>FLR^C{mqhQEZ6=O(| z-Vl}TE^7WRqDqHBvKe`Jqh14cww!4s}uZdDbFAzU^6?u2s=nr zFA?Ry>dDs0ayhY_0*WbGiOH1oD?{&|B{0AsZW=KHem4|nw6F6KyJ~+t?GG%(^N)7= zx`~OHx(!wZsaFUQn*v!^d<(O4{LduOXfqGd+!w1nM(o-xoz(3L_wvu~cw=U+x9%BG zUqJ{CN2alYcTsJ0S_qrRsC9NdIG~Irysg3kavuz>g2!2>zb1s&!%Tzki#;#{2z7lm z^b3k@4WM#ShIH5tDFw3QC7O*Mk@@x0YcnE+|S`Evtft+;OiqXqXh;7Qx;!9O=h+6!*p3qf+!ER*65~cW*V87PCKz zO_O0bHG1=FII80MCmlg(erdto|3(+S$k5oo*irwQVJaXszs6&&C>(W!JrRN--L8>n zIfbZVtvbT(DA8dLC#_$zeAh$>ecC+uel?5Rw?ByJtNpcDi)oo7HHjC=IYlip-!a>W zXnf=Ik>f5Tg##?nT}CNqZtP+H>oNaR1@?W0C-kuMi5Z;FK{zy3Ux^-Aq699@EA83u zCXfp--1(Ol@@o0pMPcC7{Ws(a6!SFZ+RcFuBdaH4W;tW;ImYp5{+s2Z7{GfNNrGdy z{?mi#zAOIDVDfL|uUH!>bA%tbw*}!qLbBfX#jvmSP5)DS-$icU8Y&KDlXgr+4Y0!b zP|lg8;{!E|>1%Z78(fD!xXDir@t6+-JIiW|q)F3*_Cb739gC8IzXF43 z-~p!2>Q}wW;(#GCN9WJbftS3&`@ci)2+>hD3eYm*fR4jNfQ$0#cD7=V5ZRcee#dd!-N(AJ2^WNnO>lkgpm${=7|O?rHBk?>m=k(Y8Cje~7k{gF{FUMHzsm)|>CSU=ga zK2U%+MNJl(o0n3CH&UBFRj;h0EGG`(nYdw?c5Z>vHI0YXv$W<w!I{(WT$5fdou_{)h0}k#UJXWbohNC}(MiJ8?UQ_+K+TZKx z{n^T>%x4&WSk;@Q^~Te)MWoUQnvSvzyv`V)AgQ(K{zB&ED?l}a^lAp>>nUbPG5SlBuuuDi>>>kCS8h_&em*|%gl@7_1gRdxL}*AtUgi|g8xkibR7 zghkcOMfI6Q&AvtL=S3~2B^~M|{lF!Ige8;BC9~%upZx(e=8)d3^df6@OM4UiU!Nb0 z0`TvXrfipK5)v+io&PRI3B<>V8?IzkcGyt{YDHQ6Hk!o>T#YPP#cWu`epk1cLC4(6 z9-rw`dvw+^{E}@)uKe9xC!~RKCiqo9m;M`aFeDXc}ctdPb|4a3u>DE$3qTN3#4U zZ1b22!bNJiD&JxqL`7iv6*tn@F2^?A*&!`oIFxYBXzvB zQnInQBzE(=3|G?jkny|#fq)Rptsg|0bNg6rvpGRvy&s=vcKe-o2m5!2KJJcemD9fx zbKLTv$y<<_EU3q_s$cO)|K+oZVD@*+xn^wZ(WVDyBL zWW7OPto!=|n0P$!!aDdWDj&Y$yy)e?bsRacuPTeHy?EG=71H#{DIi;qzg#@0l)2VqqM%*LabL+JE)@oD6t{1P5jPP0 z?bohmd#g1Z!ME&1w=4sDbztnE#>n+n?lbk9FJ+A8G$y7(e7)JQO57 zv={yD9QfPzN%!qr@oKfVLmwVTzPF-j~ zv(>>xHNySr$L{ke?Mn;2U2dlG{wMb+>z5&qm(zil^G`3Av?^z`h!bwa#RtRsBsCHt*p-C?sQL1vn@Y#xh=l!4S9wYm;u!hE1Rhd= z%+oo%c5aSP^&{27cY!Zxl>ftDoi8ISC=7VywI8q1DKW{2&8XF_)9-VB zUMD$)Ho>|IU&UqC8?@MMetc%tjveVj`}MjrFYDZ-C*bOF>AT+L_E0D`tx!JsyC5ErpB;Y?MO92k}UwlUX%NW70bW{%;_D6~UE!E^MLg2!2)3 zqw*G2@rx1uZ+w0GElQF@PkgiQk*T%S-{FG=5E@`ISgVFSEnGko!cx(ysl+`hupm#o zb0W8kgMO(*7=9Q)7dCPoXX-F={{|K|_FRE=7_;_x3Y+*I zRdks6UyKTy2HqcZm+M13hu)X_tB(Chw7%lqmdyfd ztym*^=fkg&>K(^u%e$N>-i!#kOab2JNDT`-3x1d*edFq~@YnrS%Wk)oZ{G!bXJy}7 zyN^ouk}j>Z#u*)L`6CH??)0~m7Z}E_i`DL==cl9PLq}1dhxYNLx5w5a!XDp~E%FXa z#tV2p?V^IV+8<~$g;T}Fy~J~2MT>=qa)Bd*D=@iJIN!__XUUDHt~9LK?NgS}v#c)&mVe$~oo3Dc_O*<=GjiA& zx{&)b#8PnIi_f)|BllX}(*K}c`Qyz({xibi%o*RT58h%PtmNPBui_XX2w4e}GpN?^ zE*9YrSxIqqs2V6P79*Bg@w^zONok8Ew2~Dewb10$kHC`Gv2+R(8ERR}DdHDR^ly*S z7e1~Jl(P9*s|50^&z$4P+OZxB4t-lF;a;l9wL5Y&o@X9N(K?1F04 zg-?Am!tK-^=3Z{_XR>=XySG`r5nOIeAF{LHvYj52!)wS(-M5ew(49|PZmx#6w-G>{ zUw|&R)P>sHMK2E(L2jC=x|xy8JM})_EVuT$W!lp-ZrZ`Ew2eqQIHz{9@9w&{_3Asg zmI}N-)@(JLn)>d7Y5V?%`%32*z?)3R2a;2pm9Av858kQ=Wnjok_fJwSEF2XU;Cxxv zt((KwZN}VSR<~Y*m}7r{;CAc|PbcCsZ6NL@>m~DQKZY<(5Ot0rvexPV{;*@%Yt9|` zcWreVe3CU~u@LvLtUF;FQ?w+dE=lS7^2`nh(U0cs;}5gYRy zHjOEKI7X%8N=Onfy3A;zA!H+j&Qa0&%QRY%Q&d56g}1#HXfWIJ`^^23EtuPQf`$R-8P!7>r1x#S5@Xh zwz@0p%dNw1wQk+E29(sx-H7h>p+a^h_#3N0vY!p9Q(s};Y^<3%+%%QOezj8GSYH`- zhqiRvJ8*EWZ6US>@m=pbrf+P5vwr%{bUV1WZfsGzEwp|S`gzFRxqdaRB=Xk`B|OaE zVo;L*cMPiVUyebM648v1|BON9lTa!OibBFU|D70AY_o_p=$~THH$DvNNr_C_*}4N+ zoO*0l18n$f4zBX5Ki2-IW+*?YI-L9!gJStak%9sLKi;GMKQok)bAOLP%U((6=FH8Z z{Ex(-a*+3LUp-r)BGueMy~|EYu2NSoO>_gH8;qT2IF6dPKw!Gj1i>8{7VeFV&@{o@TK~4S`aD2 zRtG{AU-FhB_wgN<+QBjZYCBa!l z0I|NM1f(F4Y7H2f5u`?!~2BP)#XLqmM#DBNo#khDM}J#HpQoC2RdjESx>(S((% zU;vz;pyCXZR!v2N#40X(fr4#3Dn`IWFQ*o#1|I4!riD!%Q^ayk^&v8+GjAVN8E8~a zw<~4gSsT;qK}jjiDW&Itl{U1Y!9@}+6HUjW=yGJP>RWLC@lto^ z$oi6F!CS?r6a~5jOL1CcT2;sx=QT2hZbl(^ujPC0zDd8U{wlC^^h{$k&Yn>!LG5%m zR_@XVfE5P^n*$iRP^oGTtnQ+G56xsUgNiZH^hI_FrrItRL-KtM z#5rNY;-;x&kI70}etkacrWvBh93@z_zT9!sQXgAmXDPq2{=9wzZJVlb@R->6{BYCS z_o~)0Tz+$x=(cTCvDP_#V)KCiwtY6X*0o%I>sa@;V|A+5y>;UKeQ8tY_NzM25&6#- z21*bQt~&3PiO)B}lBwSv>wLe-e|fkFt-G13`*=I?<@dvFFAREp0FuHs9PwQr^2=^2 zYNiBWB>WY6Tzv>F+9o1KNXvc;Ybej;&M-CXCuAp+@UaCp#@FWwtJ+CC!2CWhu_d-6v?*_9 z5LDI2H-l?@nTPa>S`_+FZ$yCN%!Z2n8r6SQ7R^t3J8(SHVUqPGm!$JXi z3q(5B>Q(Z?qC^&FrDW1)jn0Rq`oH$5bvGXVu}A&*u+sPUJ?h8RQ6=c#_o!#%p#RvT zo`ynO|FK8i*4nD69RIl4%EsBzuzTR*!Ih*pIgnHUtloW z`jC{)f{35Ck(Jv9@Tbqh1fF(4@oj^&O6O58d(;FoZNog%=W*fZb7UCpqtZ$jN!d?d z>7JF_$F-&}(q87U-um2&oBY5Mx$RsEwixX(pT10@5?KN?@(mL@ALSXY9m**47kkuR zl?nVhQi<bY#a-%{V<}Nq<;)#O98{X1$^1`J9RG=#uBoIR52D z-Jsw;*N6K_pWi={dZEoh><`n)JrQNfLI=ukK%+AV*IO*Vjx~PX7i=HhP@#7J$UV8+ zdi>0Th5B1Gj;R+?T-AE@@;lkZE=hGu`eY)GO~_DYBJK)p71`FY*bIf8sx<$ZA>^sXqL# zqsU(5Q>~O4qQW2Y>0c-^-LoKq$v@=N3q^Jo3`Q$NmX;a7$~p_7Qz!&#jSk>BO!FeL zp`#(~a^SD4_;WB#i^l{v5nssi2&=23KO?b!B1cqJ7NL^CGQpWc;XbBBGG#Qxs4x{1j_BxvMVQ7}$b^S_| zuRR%VK%Z-=UM|_Xs3fL4A9Jw@Nj@G^35?>Df1oO%Wb{@mCP@bO2FNfxy;zhs>U1WY z5mW_OuxY;~V+5FGbZwH})v2>lsICSnKLUWiebovWNJrJ)JFAxy&}N6wQ($77;5O>J z!Dx{7$-kZ#Hw7wS!_S7`rC4J&BSIn#p2n1RfK1+>dat-{{Hpy^K4sl@9co~@EWF64j@$0D*uUh{`fbnMe;}Xg zgYYM}5e4r0L4U|6g&m;Y-2lOKeHf2m?}+o=Copyx-}V^VzTS8Dn3^6!q$e%j>w40`wD@Nv$f9i1l3 zruP#@ar$ssz6pn6ghKKq7nz0cG@~57o~In+nsUC`?IU=mPJ2!_<=swx6Mnp(2|#Zy zKvFyuBVLDMvR)SAPaTe_Lgy0VnoDREkL2_o<_)}E<$L53TC83)>u@vVmFpz;>!HPB zrIt#qsbfvO2Np8-mTK#(1D$f34p!*3+hX;J0p;OB&)?)z{QAVO(oLdGja@Qp=h}ZP zpGFjaIA=d@9xAnVtW5oI?|j@ki)-!rrufr)2c^($`#nPPfx8?uv6_K>n`q0o1IF{dEDOc&c7?4p7vSe+b1oRF0(eC4tQtUr#+@G z^Bx65L=bLf!j-Oyh=0Avr;hpb>A&RDYy6So9|@sNgU4w8?wYVn$zYXVC#(D|F`n=4tnf@a+S7&qZYK(~iKGyTN$BtNShA z!?$nm+TwRa)N;eJmubSqb>;A0o)z|$ZY{=s{!Z)R}mfpR8aBp67lJ7+0cEEUP{e!Tf;tVF3;E>}*&ga$^n z-exMRrE;atC_4-`A+!pwRu3SDG6AjGNY_Cdre3|S+3NIsYeMhiezMjhyL>>Z(02Bz z9dJTqFiG%+F3`N;H-NRhVSnPoHwq~x6}E$!f^3UOlKq#n-G%R}5IelUCW}?36Jdmz z&PN-%7AK#-Cvlhs`FWwfW^ulxhLz>?`*t|- zbGq-7=iTL$-g8)7Pq$;wij%*G^6M*?>D7~yRzp%gqy9&L)fdrA6f3a7lA^_WAR5sP ziRfo8I`W_rW~u6o4*bUBbnB(v_(Z*#Sm4 zL9p6;af;Oad+{QOUS#TI*9ant2uE~ZlN7j*z9y?k(eJ0IYg+H8YFkw7r|G*N?Wg}A z&&sN-;&14_<1qcV9M@&*Z@HfTeRTi$xT=2mp5dgrdHG*Ft3E`=)B3?bJu8~3)5gg^ z(EV8{#_#`(?z^9S|L>stpFq+~=Yu#}cIQI`meuFOBp#>dBj9kRi&3f<(KSZ*Z_xb} zyURb&{TI*b_P>Dczj#*q|313!-X+=dg6`)J**pDP2N(R`ad2P#mmFNRf8*ft{KLUD zh@!TJn#_invOu@)(snoh$BHZ^#oK=?vM}H1GgAMraB#1e{_fz`)kyx&Ik?9RG9JI4 zo0s2<{kr;>B1_ibtg;QF?H`{Y8zi}&41YWga%Q%o3sV2|31S~K^xydeX_7rr!48&W zYSA0w7a2Oy&;yOoc%kKuB5@I)kI{KpIsbE!<&UR-o~e%sm1L)kTRSIMd-vrBFL$7*VUe9#Q2@q;sL%b-PYU++!D%ps$kBK7 zRXMXEA|#{08deFKsLJr63UX103~|OF1~^r^LWB|{M(XM_RPn(Ad?87orc4oTwH1IK z!VX|zaf;1)kVW8DjrMNdjsN~qp`c+6#p?mZrzeGo4$q?dG#8<%fh8GV4kMvBs=hcj zDF}C~=qzX@xYyudoLSFN1?NiA7VRKpN^1-jZLDw)&eD=*-T&Ih*9x$x;oG7Y`U~E;H6fl0i#0PP2zSWVJbk*@+JZ ze4&;S)@8wqEvcXZ3?cdLxKF(zTfydFjO|U*CsfM%JkBuhq9#oeftQLh?JrdsPVKwh zteK${Jk5@x!#OHQ`T!wg;EZZK{)W1QTt`6hrT~%Liiy4hLYt=&)f2MQ$?Kh9U6E+E z&_U3v-9b!5VOE4;Th`0ZOZ-|l1*~=`M$1H3?^qa9RT{JI*5Lpfx}7aahh3I2e8uW%|jUm5;};g__FnJl;nc4$S8Bp}l8O+Ki0O!KuD8(E%30l1GAy_!%*|ui@Dst&Si@y zEN?ukbXN^oN>}9&%<3?>sx>`i@d(b|fQ>N0%?1zAY4>ZzU*VCr;X1jxQ~|xO;8U9+ zp$rnLdODNAc$KRsMJ72Ln0w2e9gAXk=%@z$!ZDwUt?Mu-H;nFfJ#h94>KGOaO;jT& z(E37UB2n2bf<{*wjr(eX0a%D$S5D8kqMDMTW^>WrAcB6AdO9lEH>{>k*X|=T@DMy%=t(`_n&Yq}x%Rk*uyAV;LOdjD^U{$!t z54e6dDpT$wNr_fLOW&lS#OSb_681j%v6csR?z?69kQTDs@@qQ%(1?JavB{8TUL`lX zzqtRLp~xYsTVwdEQWWQ^^k?r;^fxxXj9#Rlb_H(~j0f=61u*R@aG>=DFz;Ky7%2lZ zP>~76sQG4$=a_JRwJAW zcxxEyP?deG8xqvm`nfhH-gZx8c3>F3K$6Zv6vJROgRD72`fYu!5i92XNjrce8H3U4 zoIBa9Oj33-tr!C`fs^Ov*h3G^W0b63@_5)qad6%35X@pdx*jBptmm%#r{4GUZXT6w^EyNrMvi+qNng+6r`bZm%E4_xLi7#HHn~> zTcW}>IHXVmo4~g4+Za{#h=%3BYLIVB9}wDV)2xC4tp|3QVJMZ`REqeT6a~oPyMN(w zSEK={gs8|}W8YFqA4?;C)o>z&bxy#Q6rlz{MHLRtyAK;{pqZ;{cuGGT=_V zIroazae!A}3-DqX-ErC4xC~e)joL^Z1wV`NhQO@39{rrg$i^u8nl z=)mgb6pR0jj;fJre1@2JtCLy*z<(7}GZdr-MtN%vBD!@_B{zpJ1Ply15os~2^&!?6 zg<==_0Yv?aLhzSv-e2*4+-pTSKoUj5gk4(&ZE1sGy!_lUu;Otgu6Tjg&Fwt4krWm798R=1( ze4z7X)Kd}LH0sO>71UoMsG|gi&{l7a1B)xx7&nU;_u&jQcSk6p@tl?MG``e@3<#6; zqZZ*uX6l?VcaPcIcW-b3$4K#ZD3}XaI4sl&n1xa{+VXB1sViDcXvPNUvN`vye)F_( z)z2b8eOZwGwZ|_4Cpcq9?C@B?PP_v_-V=^iQhmxHKT`fq7||Gl8zj>-GS6R#b$B_n1~L)S1AF zf>BzWgzGlKt@6$=%G#$o(lU{5;AQ7(*zUWbx(EJbb1;U|16IIPJcBS zkUmg7izw_ZLc;A;r42)Bd!@&aQ(g$DDA7OMn|)A4r79U>s!#}!Xr297AiA@>I8G{D_}42&>yfTo^yn#EYS zEnH&MPC#bWsMfdPs9)YuP~4cpOr5DzAV);j7*|#~pC`IheZ5Z1pr@sGVGN*rY|>Nqvxh<+P^rb=?P0?Z>Siv#9hsDD)V4jWzpI`K2XtNOtg5+6Ocn%MHgtn&Eh zhbZspq}rEzJU~9$)i=#r#ywnBF4#09lFOk5#@T}v)J~cYTbyhvn@D&Hyoj29L!1ze z8{d*k!xe_uWYzLNYG+eHUzTo7qx}pRtB5)M1?!SC*WaJ_&Z8FdrBrEa0B^u65q&Kr$b$7tu6GpQEB)B1#SbVGXtpz z%@}}zo|>-yL+@+wfsM1SRWLTM+M=ubOeAlL#jRaMbyAuMX=I)=yX6QC%)>Q7*J;80 zP@9gA4`z+9fF|`qCylmJ)`^-Vy>cV%>g=;PYr+a^zK_DxpfsN_x5$tr&U7Tt)DMJx z-U3wx(IL*#xC0W1B%B^41+n}1Wz);y@Z{;b>Wy$t{%)m!;@MEF>VDOu)SoixIykA6 z(*7=s;U(S*LxliV8C+^T@e7~Eb6eaC)bfYH5NCn}`NMcGpGud-mdEH=16kla&wzZ) zr_OaXO!|(#$WQy0xYmhr9{dp(8&Y=sAB~X*U{j%5U4z^Fm>(lO^n6Oq`pS_5^U6ds zie`=0xq&y88KgQ!*}TB^p%}6bbhG6sj8TUa%czquhn#16?>s(?0{SeB3GeDN?>BeO z*26xqG|_HM#c@wrm7r|w$8Mt}U%#7%Kuz7HwrV7T8hhHdWchgJ&KxPGVds%NbK0zOx>0{Zrx`m8LStzaG0r6F zMh&YA(?r;cBDvvycvrH!qCn)^3<6AHDgd9V!{M#-LTuB#Wc$CTH(y6X26x39Nt~i4 z+UfCQr7o!<{;v*9MR|J4WiRw#| zGU~4>LJ}|Y9brRGpCY?!)MY$Ex+{j*m_tZYi6v4k>7?Z#>XJE)(>K`uLfF=}9d7oa zUBBX6foTigeW;3Q9c(~1`CR>s!J|rPl;`@*-d7TjogL~CTL=%BQ``lwqH0fb8!9k8 z6X~K1EDWQfo1Yfpw_1MKoE_#rI#9xb)zJx2c8=Q3`=~M3$&0HdJNXHCo$x zn9J}mLFjO!po4~4NH)Q8_DDtJ4&S^x@dO)V+i1?1 zqxqFA2u7c&K4(|6C8ux#G@&C-@vMYX*E!$7nApVV!jWr&FK3hz=UfOL$DGrH?su8F zmyGV)bh_yyZh)AjY)4!4CMBbh4~{I!0pDlAJ3eN6Rc49|+RC!bvY^xvKL60~cFD{u zI_fLVS_8h_B0i*XBbf;Pu^tAIb4x&I*whqX_2g*WM1pOaFs`hVZu^Lk2VLhhV5e2C z#m_+q1ZwF;X7+}|OZOrOX;S8Mx_s*u*Ly7I*~`EEX_4~&fefD4TKXvOFQkqTgF|Iu5M5FOTn zCaQ!kg#=lvSImWB6DdexuHi<(As~-Tfvthc$iS)Yz^Iue*%6A+MB%8_l*qKpM5W+F z%HlYXbAd~wqN;@**drWaWKfW8ft&2(J5v#|h`VMoH2VWorV*9 zvh=Jx#w1o6(F!37w%%MvE(b6XqO!*JL;zZ`FcegS*wqw!i3~lFAQF}I9qC~E_TK;! z?X&GZ1?;3$y@fZ%!?C1q!$@?Tzaq#oycAieqG$rG#hetmz^M$XHV7ZlNp%a3Ve^ri zEKWNbPWzglVL#>N{83~Hw!i&bk%hSYB1cf2=<9^&tI;ItcdkcE9M+L==j`7F1FLRz2aP(rWW@QjH-z7~;!m=0&1M{aUIA)AZIGRUr)=_5{oH|Ac!Yr{h z_!b0w!|`i2((ifDI8=}?M8-zEdCHxsVJDLH_?tc`svt8~pU?yGc-XUYP|V{#PKGA%HOJ-q0Bta=eIedBaf@}6OWO~Ffl*qF`5M-*P+n~#@ca;$x!d3HB=zZ27$u{aJxI>OAfPy!YD`> z#f6{4e9z-89%R^v8EM}Yj6b1mG2+?Yez*zjNON7Ac{bP_?NWN4HyFIcvPNxzSqw3j zd9xwo3Ka$lu}%$LTo$vGueY<)^S9bE1cfZ?VdYfTd7Mp@_SM=CN436v-b|7a3;g~3 zEgzwPHEREG=FcJvZktG;>v*8`c53ZME*Mi3dF_Qgxs^7o^x9JNXL15T1qARCZl6&- z&5%6lov@W)zn@aDKCH3UpmUKqrm~~qISI7*?E07<**V_Qh~&Rz^eY1cL#= zls3T@X}o>UCrT5OQ4wLyb02|IQ!s!}Mhs7l)npcd0ylG1!a@v;w;9n;l0Yi1Id8}K zAg>`62E~P?=OFRIe3zq^n4mMC5|BxWrR>$`^J>apVQr7W{Es4wGmlC@kceZ&ggy`f z1zsdbw+N&F#BzDVG^xlySUfq#sT!k@gIki*uAmMq7nph8G@!q=$l(hsO%<+8e4nRQ zOMhUIWg$?`1Zyo1Uz_|_k%gYXqQfQcHYG;L{#s}OMUpCXo>mx@@TGGi2Mf;&QAYPx z$i=!MU$4D))n6O1iR01@Kc4yTv6c3HzCZPS>a5+U@dL$`^KMLZK~H4mCJ=YGVqGW%gyS(Pr_oG0cwqe7dipC;D2?@4%I6AqYDKyQ-)O2;oCria60(_NN4M zqt%g)=1DbH(sJ{3k^|7?(rNW7R9Ft#8slWP>5?jk976e(8_jaBL1RVFlMS1PL@SiU zLAqf!prQn9GVb`oEsga<%$}5Q*JPglS4+G2#s+lV(V;pjeUb;P=Wwvk^!mf zGh79a-`mRFiy413YM{ih z(QatWh~E5ENbu{fZPkc@_P9{I&@n+6MPDrr@*j>g?BqaqZO{I`JZVqK{v9_aZD8pr z$Jc50d`)#?p_=-kBJv>J=%G-dC2kq-#_#EyVe6ZE!OX^J*m$a0%MwA6#XM^=jZ{d( z*~S&cyaHm=F1Oi%46j)7iT%2tpCwkQ49XgDQYKCSA84kI&Clp6PhL;P!I2xe+u=wU z8#@I^pzdXi@HfK%m|eBMCI+~KS1^X+oV$U?DT0O2OsKloixgHSxd#Wu!`vr*1%*6v zdqY2Jdh*Z+HsQWAWX>H!`fhQg@bqprOxW#Fh-gv#omgV@z%lb5i?G|1G-5f%ie}^} z^HbGkgh><_;;U3L2|;vL4d|*?G+5RS0`)8X@4KbNn2*P}rRpK1YB2(^8!xNML>DF{ zas_9UnN}_Na&F_D46XLEHi-C*J@soStl9$+B~e|2nX|U^@j+>wNbkLtDOt<7;y`63 zPv-P>K?6I?XCv0}XXB#J=_GLU*{@6Mqj+1}b;)0U%HFF+zfRNtq$V=pwLZJ(-X-JY z`CG|@?8|V35%IX?fQz5i)#v5(-d>pBdHK+SP=1}wedPP}kv6QN2Qwu*Y#Z+qNeMT1O&He5KBGMmMxl0l z!YH0~xYqEQ#K~P^xk4q9isIBY0v(=&$v-2Kcw}K(?waSDgnzX4a*)Gof2JQWD7BH;O{OpGPA~G z%!i1@aNZ`OIJMOq5d!$$A@SLA%&ImW=!KgE3tt?@XA~o!L)x1}Ffuo)Bj^OLjovyv zwf9w#J!+5lGO?JP_Nq+2jVT!DZ6oaEaoWO6~Er#}&RtGK(xP2fbs7fnI&{VG^jT#m6)P z6&3B78H9vx%B?txKot=X^i_bs6>1ZW5$H+q_6S)NzRQ-L!ikZyzmt%%nmgN8WXV@# zbr(!|T-5Cut;R4zj!hJzqnuyQOH41MwMWo;7|q%c(a5W8K|hlh5JB3H#hf8n4N4B> zqabRpJB6Qdf#-euH2oPUQ6ySb&BPi@*e4B~aPmwm--}|~mP_@_d9{czbU&+l#(M;u z6PCxw$|~eg$C&BLdo)7*6cJPoff^~y#;Mcj>tn__;$Jx`{6J1F=+DtX%l^F34m^@n zQDfucQ^Ac!$x9@-FGxUZnMkULa2iWy^oqnkic|H(T&Tua?o#bn8ws39AxVNeWv_dN zHyuOHm{S1tvs_UdiA5MbP#Y4J38tb>Qj`h4qA_`hv=8d*dy>&0S}3h9SEnQ@V~xro z%nbLAl7h`pluLt^sJuHvjdSF>;4QLbN}uG+_t+cD1!tvf4<$tnAJVH7H_tp$gg)`B ztM~{}Z{)~`mc?K#XfG{6$5a)(*j0$IBftqfd>HqS#LQ!y(;;t9cO>&ORMmpWEOxMx z`!ZgyDQvZ4G>b51kiRyclk~yFp1eIRB*m*tPr^SKJSrn#wY-;)G6ca%#P^j9#txlbB>oM|C{hUYvcs$E1LR3&@3B_+DzaRM;{zZ$U6MQ~q*nbAxXD9V646~9>ry_tUye7r z0s5VlH12}6@|Xz|^izErn@{(85M8aIq!^Ff)THd#YOcH;L-y|VOLfnRrjOn z49G?-Dk_Gnl5rgtFlwl@I59`Ch7aZ-!00U^Ch;aVW4CoQg^u9(|qOP*?Zskx#jbBKOCQ?taC234z%B?HAh zx>gL@>b=@mMKx^m+tfSD(c47BJ7cWIxz1DXn)>{ApeeIhqAr+f5E;kfW*)w628nlU zx+)DsgCq}<5mUy?k6##ucXyY_5hacG*m>hdp|89!ohShlr~U3mJJ0VHRca5ZvvpW| zql3_G+QRfkDQZ*_6Zwv&OlYgNg>LpLU&W9jGH4ALEj9uu1kK8b@JSdqTpHT~XA#s2 z2#&I-+7^P)%~+T(6U=az@2K%bKOqbK-dpbIQsv&?AmYd27NfH*EDSB}M;~Y}U zv>W%SvsKT9D-)(p!_)Ltarhb0v>O2+8HU@NARIGWz)=&G{l|1|0E*oS--3$;b?2_n zv_!s zDuF3*s9Q$(f!cJ49d{i|1Z+Zk59ENkJ~TGx!p((^s2izP9MOe|IYrurD~|htK8RU~gjK7NA5)y6d!i$56nL)WQ8h zhv5g}7X!pw$h9J5Z1m-iwSuepL&!Fo{MULDVoTL}b4-CzbUoG>S?t$tl{Uj!d6Y>X zLLB?YPYJ$#7PR3(k*;XRVinh@z;9gBk&3|NAan*bFi&929)T#oz`4(|A11@(f(Kx& zkZ1ybYC@3oAmLkO=TPr6=H7Ld+nT*Rlfw|Q#6#U@wsZLa^mGASWHV9QJKG+NYEd4I zIwq^O1Nr`0W43H#+4Hf9g-ho?@2W58SAEp3>>5Ac{2qX9yC}19Epx6Ee{+S@MMgGo zF3aBa`% zZvBz&RB6mUNU|p+U*MPa10Okd~UY3Vdb`vUU5d$yyg1QB%an0aeEhU zS!H#T55rGTT>&5|v7}I<2!~Bc-L1@ug`gtL(>t@IMgW}|E%XvPvYt_ux!)%v-0L2R z_n(qOek6esB;F!!S_*`rC{k1GE`W8n~PoaXJ zpv?VQBApkBpp-%-e5PBa34&t=o!8;B@hO3>(J_A81P^Bz&vGl(JW2Jm7L>!!(XAh9 zsXXlyCqh1&HPz7Ztxk`ln+msy$9Ka;FlU#b(b0*Hr>Vl9CdwxD8KGpT?3pR^p|;b+#wQ+12rU_Y# zTcJRwCWN_QNsdoQWWrKSw|c(T{*l{Zo!I5_$M;8`v+aR!>^BaVm3#8M?#$gIOZubnaDylCnkSINfe01y-27O7c|9!7KY*tK-Yk&@@uHcI_;C z=^B}xWjvGEM%4g>S1M}El-DB(@__ZmNGDufPx3HAn>O-rQtvzR2wcswJ{TaCu?d!~ zDxN5oo@2ADJbYi9q$CSjGa$~covY6QP-99MonlRnE^rbNH2B^L(}KV>k(DpQ6hksB z>!W>Ud8Q_l+*xMomq^Jd@#o^4!F3p@S&E1(ZDL`lNJ;1&O^(w`UaJQ`dxR${Fy2m^ z@Aq&|TOfUXH*d~5*RC2b^dkZ{8l#(YBOYFaJ-}o8o>~b(CWmL0E@6}>15dS?HUm$F z!0i3U;EQjDIHRvv!`y0EtmbK4X^_=~R{SiZg}NRXlJWw90!$4Sk1=h0x8ljS=Y4wJ{B#&~ni!ATd6%4r0nbIXYuFQGZ~bNhLJa!^>P`ti+|o z1SmvB7NJBJR~F0CJQq#!Y(V}zB4oeCqn0`mUkC?cuKtcoIYHJ}C2Z1%CHl4i4XfNmxWZ!%^;WaBumza(a)(PacBL3>e* z?<#{*qkLn^ce?|V6-)Ax%xxW~b_z2lzQI!6!kUztZZmbp_D}EhdQNlQmv!#~ zF&2V*YFPWE`(~x!EV@xVPUCvsX;rKoaZ0jF$cWHILp(3}9A4_Y*jp@i6XF;{a_ovx zp<~CyIA1C%N_yE)jaW764k`-T3fb?GPA=I`RCJl{qc@?ADP@Ax4DaYuU%{!R)|RX? zn$k}^n{qj)LA$6~Tq>l=H5=JIi*^om_a)UTKUkmXzQ?t5cJ%d)ZN-FBQWJgg;sPBbJsq@pR$$+?q)O_3+G~D6IbbtNp@cPZ zYO{f6+RW5l=3Dg_D@l)39aIgFF6|9Ud4WAilwf)zm(y>HqRB24k*XA_tgEIxvR@EY z7R`nrI%CwF)d4DAHc(NHgY6?By*+R1a2ha*hB=hp(c*X-wI;C~vWKbZAoeZ+s|7NA zv`;Nt(!xZp4%A;A6e&xXS8S6(VRfaaZ-VrAW-`O}Ea<~w72u+TTt^X;SWvb^P5xAW z4v9&JUD0hu(28Q=NC=!v;@Yd!DoawLbLB$D`^K

%CBm&vmNM23cYn#-)>Iw0mC_ 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⪼=bpP9W%iuAA{1_!mt-#B zS(JSr#IvLz!s@l8cxJ`DqUX@VyJ{4G@nhN~Uie|~ubm>_hF#6;<8_CwzkFM6Q^IX4 zPK!bOJ7IP2T6I^?6?u1+bY}SX!pSIn_hR0#weKf#Kl|<{oCpgZWf%kt9wSB-2%gwR zlYiPSi2v|z^;25#yYs4=-p-l4=I74wUg>Y&nw5WF`W|+$*T4VX^?T?2H3ZHUc-@WH zce&ia+$Z#7=DkY!w=W7VpU<{i#Z^aT75juAi=uXfpC0W!EzR|9sX@Q?ZE+?Z_qyQ0 zL6<`!AG23~k}k@^U-N3t&Hm-5jil3U#MG}1rzpXe!Y^*9jd3jx6?$KILoFZ#Byt=5Ysq?|7}kBOn7LZrg<@XbCw zYlw!6LGYU-$kd_8{Few{==9aFHX5i^OcsV2xTr>!rX}$7UKIb}yPT8j(P-m4^ZQ$4;Sk)WjVDd-#pf#h&`-+tG4V(2twq;win+Kkz`=SD+!Gmj(QqA_i5G zdR3Ok>DhwZ^u@_;37Ye2(mwGI$z?O)RAdPbE|dOV78Q7)MPf0O!EfaNz2Bc_S0A^` zAFlc`AL{YxclRuztXK-EeGJVm36`AxjcfuMgray(l1BG*&H+^b1pAXvBsDRw_6)xdF#wo0@jwA2wUroSan31H`fU}6+yIufqNYOTC{`%`; zIS$^P3cAm-99}Z%<=zGGmv^B@Z9iF8XCr^-#ch~$#NFhKnzEGX$9k@h7764pOCV%` z$0cZAT0V*>LCo=MiBXyPa8mVzZ-cu!mrZg?RIO(odxb|`fd#-_`8Cg-pS$^A=uc)`k%;3&s9?sBGLZz2UzI5yjAy%}EpWN9W0}g}lgWv1QrRn2h^@ zYW%OF@E0^O-c#~msyzi#zBwb3K?)`hdlB|v^2u9$HRt0MGdfxN_<3+74;61T$gDo` z7#sKgX>iI8dpTXFH_M>6ss=?@n#Ic=W%}G1=RKe|Tc``FkCZ@KgEY^Uo5O z=lhaRf7R$k{v5o~{8=;e`wk2KaP=Afw~Gb-M`!KoDehP68$?VfV)+}SCXf|KT*&=0}DM5*4)#Xr>WU~SOi%*HW-RPLo<7o(uLkx3kJJXW5 z1rTjyoUb#(+w;gB$oS0H2}pFNh`)9bAE4OwBfoPfw^bLwb>hOD@EFm8ZIiWFDE@q= z*Sx8$C|#=rkkpLQj%r2|YL+k{fV?B5nGqW(w`Z1|57;cRmF`;`G{A{EaHHb*`H37? zQM76nH7@RJy8Wv0LRkjffF2!nN%50Cbuc69 zm7Vksi7_2vH2b)$3DDryO7bcwszhk`O(r$TpHu{-B4$i8>}N`rU&L=0rV9~_Ag0D^ zfjj9v*tOTGIQI+DXp$V}uT3pwh(ghvRguZ%LbUA)J}wtySrzdV0=F^7m=;Xs{!I91 z&z+c}Fjo$>t&`MRs%5uQeaf+rxr-Np43Y(p;}k@TBFIF&hEMo3Adxj?5NTWdxOgkF zGDR$q>u75P2^q(gvY<>tdS5F}Cz`VwYM^qHl4K^+s3&8b##CHqXv9#d4fK-t& zW#aGKzp8KL;^b;*)vm0T`LuwH(-sO|BZLXz5_%buH=ES!VI>!O2S>$Uej+_E0Al8V zXP1@@7)Gqbn_niVHAagydd)R{nc@^4_HXTR!@}s=)5KcEWiMjwpi%a+*u|mq$?X=rzDVRWgZ$iqhrfOyOAGqEgKL^Erw5r_hK01qope& z83dq*;A#y+DvL~zOO?M%o!yL(az-57SQ^iMp>{6M>4#6;^OP%~hhP_(ksEEj^EB2) znb(VpGIB1xCq6KN4iDQMuG|1TrjI&CteNkMY@AhWp3Ac?Fig~6YjYx>wTi3bPKslM zAk;~qNDuxLieZvmz`36!d9XC6MrIBy#%Gypg@{)Of`BBO^JlupfNhp~8_lK@jZS(1 zkbY2Bj7)cvFLB2=RaKi+79SFBAAy{~aQLor=$E2ol~!~`=&`ltm?12bWO>{?wLFxK zL3STcVW2$FJ6X>9H00t4Dm+GaxD9mzr3{l2+>UtA%^4$ONAQ$-lB;pE(m4z=IJHEsqi-a;GCVz%Kyra4o>6Ed@NE6YG?V-&y`R8I&m+P*&6%KFg&9Mc z200SJ(|Zm@Y$H3O0nPZ(7k&Ng$gwi#7izL#YGM^}(_RLcO{xwZi1i`WWcjS%!?5l4 z*#*z=tSfFHihTg)c>pdGK*=hXjw!mhs(3&8Z)6s{KuIJ8RK{2R1G%Eix*A|!U4DxS zQdgjnE`|~^Rf$_wB~@1`OI6fY2XZmh49etCpj7l$V~sG??NmQ^Fx3;PqsCSj6*DzF zS2q-%L#fZ}DQaGwGc}1v)v?uB%~Ut1#@03@KVV0F6Lm1%m226-fH^ya?9D=uA@SQJ zbT2<=d?K=YW86GCXy(|OnRi@OKMYFu%sMycrmRktxE(Cli0S&Qv-}o#YfL)yg^O)4P$??{*A3SWeEmo!`IoU^;9Z*K8O= z8Zn(h5|Yo>5{2r*BU&Ku{uGNXStzU>?a-;M8|lvbRc}cZn`H>=8*qN# z;arH_!8CMO!!r-{`hyRkt0`_jbw*aOdoN9mw9b8$_TiS7R#=J$Gvey5MpjuUQ7p zY%EG%K=l#xg;NIEp;WWZrFgV2Vo2&zeLo1sK$vIemG7NGG|*HdV!{Lx1~uwlA;}%1dzhD6QKYoE zi$P_IDW?h%V#NVqThi@@P*z6d8+G)X8YfUJ(-@w`l!mQ1o=H5?%zt6;E}Ytm;suWf z2_-2K+$ru9_d;;lBOpXSW8G3s`p-)aWrnV#fRDsH+TH9 zep^%ZNIib1sUxS_h9Dfny_+Z%gsAn%OW4(5f1~sMJ%-CMD0hl@bh-X*`rPv|@2$=C zV{{vnk*ms^hJg9DN*0m*9?CcPO@T28295gHYjF=y$KYVh1U5o{uIr$#s34JcXZmsn zS?^KIo2$(>llJB3J0g)^1fzny{XcO>j4wtH$3_Ir8ZKAbrFlO#w8y+43mbNinih@r z^A1>UKmXJof4>9|`W5#3=HWp!5nqh=&!gy9S)g~{c%nQZR6az<+nI^|%-wImUtlnM zQ#5_OJ$>Gr3n7}c97U{2@M<)1za-K8bc9FpbT8m`job&nMAXKx%1U(69MLc2>J(nv zxGiL2m8#pxYKNXHzxU_{hbQ)@&iL_sBQA_fqe#P+amzNqbkQzw8sik+=cI8H!;; ziUFrGrM$GInq~2t*Pj;pKaNr9%PmlfNwN#apmhS<*C3 zYYu1}e)nyXN6}b*v-Q@I{A4eI*V}>TbBM)B^a<8zKEWgj#U_@Cj<9xXsNtoOu=O13 z5Nu$_)NU{yU`! zM*EA?HD+%YDooD#R)X79Ij?{FrQiN^IZMQLO*NmJ({8845mtdTv!*sP55#-Cn#A5-Ul6X=dg4q$7m`}zX28gwT|ESo(bjw};rpXm{>bl7@h83KqyA1&M#4==RS6(ZIBp6uWCt5uFNxO_9Kk z1U9n6!BHig#1OJTJm4r^ijCmt#Cis$Lu0S*LdcX7A`>|AnZd3Dwfnmt03?R0vkJH7 zCT9v1R!$8=6wZ$*tzl}Pf!SfIkgsP-^kF9rBlK}h+M`UF@^hn%g(l}P_F|{TG4>ji z_BdAuHNX5#56+tjzEQ6E34vMFHMOoOM`bY2tL|WdCII4R9uWhrXfVndFhv039z#X&o>M>1d`2dZ=(2 z4t~_t?+R~O)OUz$Su%8fmEGooVBwlL1KTbv9r zx#rj~D6qcP`bls7gAL~Ly2~id@>k~)HT?|_SW)_h*R~{r4ydU+E9Ga`-L@I*5kxG=?I@af@d&#do#rD(eNJTfZU0D!xVBD;PgZuzIU%Ns-+O@-?B&<98k`$J#qq5w1 zUx$k9ytU)XhR8d|nx@jMA9bJb{N6Qm(XO8~&SKp=wal|*|7_cc_jB%8&s%?wa-TB( z{pt4C`tL7j2V7GVXpgnKF&97axp3P`|HKD48G~* zER1L4a$ZZr^v|N%jzc;SGh2WdrY{PjrZ+4S3%x?EG zKWyF}6h0=H-5pibZQlK8m^Qor+3|bxe$M65?BQ&b=i9@@tj62Fe^x(y`+L2e@b=&B zQQfzH_h-{D41NFn{`UBYMlOxk$m5S8xP?Z5lm@5txSBscYKbrTx$n?Zu9g8eqCJt>EGfp630E>vsgA=pDb_}C zmm*CG5fOamZY94<+5CnjlM5s>AqF6O8p#Ka z9sqhOQs0;=#___LUQdt8%Yc*Vp99BUt2DyXF^Q$zbik}9naXxAnTqAntX0;62|bCK zazR2z^f0$^F+6h=%jkf5JLrX#HZik^KS&nVHy--&Bb!N&s)TycJaTBDjP<9b)}xl& zB${dylj`CGCY>)~%#=epw-1Z*)4y-GIi^ZQAw~iUBS_i~f8vku1o<#odBo0}d<;!T zEtj!OVdpgZ?D}VNiO0J3kseIkBtLA1q?2K>-)k5%t@V9ESH`1>m<5I4mg~FvDO@sj zE#KK;Ll#6(2bOwKc$I^ba_Us)vzq7Z6)<$oM57U=7S1F)8?ScxveNK61uazztDNK9dEWWHmFd)J_M z&-5%3Qn+)&_N~#8*vE1?#hu@h5GPaNIDQ$$LGmo%tZF90S_V;>{UH!7mcLv#Sma5t zEwUoZFvH+6F#KY38m2FQbU!5nd|KF-gmA!LSz)z#ZMvcPCQ-2%*r{saJS~zcd$?d4kawxq{&W7otxXwqI zGMvswW87lT$GF=5hnxF9jLb9WfA2@q<)zcfyz(dtC7&q35*g{mdn$WvXj5P-LHh`^ zc;6$*rCD^!`?#u4BUn?D$@vK)(Izx;geNfZT*>9wB8nm{ZngoBq1Xeo;_Sp2H-&_9 zh4KvG*=SWlO9Hs)0Eg@>%mKoH7s58k$qz@EpA?a$gv+xCyTa9oX$Wx}heDf^=sr+G zse$~%Oth$Y@9tvS)pjM3D}wl-R4ck8QK-cESz@3(6CDXVRFQBlDN+^1L?$+>sCS-} z5zE9Z;s8^(oJ+|%L9spS8)U~jgInonQ&vI;bxHZsthx5s--5;&bCcleC`;}*Yh_*| z*9^rmOI%a2ae75Gq&&Eo>s_=eLndFww7iW#NVBS*vU`>^gDt0_kE# zE^zFYBYA8?mI+sX0dfbdrCN%tS1{U;rsQ5OXbI**USq*7&RA>mz2x93r@$s|ESc*2Zg>?E?&p!L9sDcC_f6%rPmUp zcv`fKRK@3!YnSgGDA*_7uN5T`4wSvp)lvrXFBDL=IE&L@YbG2QmGF}&2$4W_@|71G z_de1|)NsIaj&*7R%gYu1R2p=oFKoqnD40rCMU{%{wsfXB>ZctWD-A4m_+nRM@Ku;z zS2j1|(bf1bLd-q%GRh3&YJ703EfYwW(X2fhh%0~0;A9JR6OuGyrJiUha>$}?J?iBd zBUYrx1)g4ALxygaJ)gwVkW_jLWX@?$bzN}$F^{-)w>fG}DrOxwskIFx`_nl@#U!hv zwVf!L+l|E9_|wbl4(46%kIa|rN9fS@sg_z#A02Cf>Z;+Q{U=+c7JT6S4aPf%?+)VLk9ie=(J) zn_dI7q0di{o#|rxwdlPql<}sc^5hLOI5Vm^(zkVj@`ex)?w~cx3=)`~%}!}25-tlj zRM5PibELPtIrXNaNFPb)W!a8xIT~R<`?1LNl_z6Nm$~nV%gXh{faCgR>`I(3{hnxx zd-`^lN9z5E**v`IV!5BxuqQ^Q zpi!{0Ddk94DQdnp{!fWC_q&tW&ZR*sy)Y6C?AP$%p8x&>yKA+tZrUNPPG=Jdw#SjK3&C-aPDx z^NS9tq@2d7L~hgKcf``YJfBkS{+{;OAUdX>#}L<)BR~`6V=4XeA}cETyKvdWsQVOo z+7lx~?j|hepAfxGAjUn|deZr7-(gFU1A1(|*XoxA$s#vM-r z)hqE55zZR9DeC!A;BJjO@9}#LoW(jDkC0b1?glUP6MxfQKMVcz8^I^B^|SG+m+D`q z^5F5d$IIP85tiTa3Eg=_kKg|(=N)F`@@Dz*8g3#Pk;L5HGRK%|L?j7|MO{-#={QPG%Jk=}w&}mW{2uSO@V`7RJ;n0QvcJ8A)vw$xPyf5>di;BZhW>D%@p!lX z`0r-=OZfMvj_>_b#g{y|r;ksVCD?H=h-D6ptrd*55{!2f%vcx<5e*?8vBf@Qz<~x4 z>xEEz6Hwd)6S6_9A)z$ogfCWtL-j);A451+LSNp5S`-;7iG-!v`3OV9Y}3L-48la) z!^Bs@q({PJZ^Gmb!xYKG<&oh^2I0{5aOIV7&5>~JoA5V>;d-opg9wB62wqXh z@pXh{G#%HCiG^sSJu=dv%-glO)aX49*l`e#9=a0U)Uc7VN}k6HWUrUkPA3|9cd^YPN0)RP{SHgqbY1} zD*vAqzA!M2a&!4?F*LzD%=NIaj%*a_(p-{`VCma8ISO$dUa0KDZcDkU5q7|&@{+uw&XMKR*&aB223ai$Zqv8#48?u{#7 zY&y3OCX)bC_+n_)It5jmycY>|c=uGk&y-q?=c%plY;@;HE^khDUH=-0CKJCpUu!$t z9eMU{i8Jwc&s4qzYrgs?alIz(ROn`{so#&CrT!;&Fz8aag4;wi?O4Zlj2JL8I-alb zwk)*!yQD?nE#HnL-e3ia z*=o`oVrC=fM$vWJ^`6!~t%p0(ZD~6ob9Cp~Z-k_QS3B{qSlCvh=zU2dm{_!>fv%ia z<=>N+xL1@}gDFr7VWMUu-_r~zuNk8m99g&F?4cQZNb7XcVpif%#YlEjoeHZ=mm$N| z^s))40@*&MSOL=Q>WI}unX5paGw;v~5vIdiFhH#L@941D#0T4w+1ROZ&~LLMnjV$o zdADGSGu5u?pZ8SZ(~d%8-;u^{C_SpEA9}n?Ny*i0(3d@P=J-+DotM7M@+N$U8~}!% zIo6G^yql{>-$>uUEIuwhXtKQ3&Gbhy$ zn`)jfbzUxYk$1r48xlVQxOxXVuCV+$Ix+DDR}HbVOL+SX?HNw{14GfJ*#J;#WpYw| z>Y>2`r`U$!0&6s2Ra?t?EumH{+S!;(B_V zy#j?MO{wrAS8&cDysvp)L5^l2Uku4D^P z4Xx6`te2j0_V~_i+V)j7Uh59mk2S69evi4Hqy|0hr`tHsCbc+l#eRy)X=Kn`ylSb( zxR8$JOuZdYV+^=HP~;A1o>RBZ4v^%BhUXMq91 z;UJgl`LjRl{ez}2M$gT8@BFXsZ<)lKTszSie<7>SDSkqJRp4U^|DqC!^P#MqD2k`l zluPZr8gBbdG>;m7ynN7Nob+8Zd|M;rXew~&#_=-6co1+cd^R{~o9Smb=~5~jvW4gM zl5tCVpHvv#w$}OAxVhT-P+O13%!e14)Z2LIfc(rE-{)Ewdn+MQziaS4@N^=?pO`hu zT3H%2Omp02nSRPj25NMIFt*2VHu+2V2f7P6%fFg-61d`L%q2vo#45uBWShU~>fC9} zm>?35lSQ=6J)0O&2d|!?o6}qvJbPlf@Tot?#yROQQo6E1bWcNR|3m1~LF>kp`Wz$;Nh?9a7tfIg_4Z{pbi^#(+My?h;boM=>q-KZcLs9%rk(qu zhSi~@9w>$1_A<|DBV|c{v@>#(U&~-`;>7=mHl$uAz@w;i3n@x0<<={V{A@UrOGj+7 z(h3mEfJTA}KF6Sg;;Zrme(q zsL^?bsq51r&a#j`5WfC^9O)Qdyg}eS71> zmn?~^%AFY@ zYf0ZJ=BiaptvRS+{6SfRzJ;3o;tLK5M$N@;sj0TIcJwgI%GxOV@7vT`4zv104aI!- z^1Vc`e12!0|tohKtjA6~!RdiYM|H)9Tjq5AzhCn4AW;OK&oJjsc9JO;vH2{LT zX*&kbM9Uo2q#n(LazGE3k~*{M0g=uhey1K-M;Ryihw`@Hs19NippOQ<^d!Z!i7@*; zCaZhXOsiC4&GyD?U7J*xL~_7Fw69A{s9dgLjnP3qWu&8=;QAARVTE#r-e9zuR;iI{ zD4`>G(+tp4{@LE1J8xA&Zy}VnnJr&?7#rYHS={TKS}C?jZ(OcN;)VV+=A(D7RPSj} zeTvH`H-&)iSER){{j_ucwx%C)RYdzQ&4%ZWV9TspE7xE*8T{XL)uZ zu7V-wS&I^9ET!OtcxE6&eB=IiKSNXHNo3As7Qf_uyIp)=b1o_(Bnb=M2^IlPJ1ICHurBvl-kpp-QSKgU!ikbri~?(sF=J^HIAx(P%exiiTOB0F562m z?cCa+j-mh-VMQ#cEn5;BW58(an^*{ISl=_fZa7?GDsW-mGL5?BRXuS`8EDiAJV|@j zXlP>_H*U)~vhUp?T*l5+MHFd|awl^L#pGdVX%+U5d;V4S-noP0{Z*3}O_IVrzB_Ti z>58zdaL~A4_4(6=L}8=(e(KV?9&5CmOtxu|=3&QH@T}p>-8L~}*5D3YL?)1)Ak3;; zVdXLXg_T!@;fD_$K}QN8R7c-vg6hL}t{u9I2a`hrb^O^wBlu4H4zC*T0WIOJ!i;Mk zGasPmNHeH&p|BRjr}Ot%udS2xCSvfRRR#RZ7u4R^_b2j(k>1X(GbeV`GlUKetQp<6 zzANR`kwL?-y8{_TtN+-N028WijMo3Um)4izLT~XUO^Mhlu>m9ajKJYRhA!{{HCh$Ax2_r*hS|H25Gza zz_x;F0KxbTUdPvL!K{IOGF-$^@8NJVuLB>z6T~BpRiQ7NyzHIL$CVlddEVs9;tjzD zP~QTnwPuJ3>3|DS0aaxo+7O^Gy)W3+3oFUbqzzc}WHc>MPojH@M8AX|K(La$FRp{B z+7(&1@{%Z6u<=7xv<`82jmUi$<+d?25so?*}3aqZjJE2p0 zDlfUQ0*j@e@79BNrSX%?K}If-E&6`O(pbjz!0Zr8fO!DNQkb?h7EUyR2}$;#&xnx} z-8Kv<8_{e91eY0vm#hSxx{@-@`{4HAWb{Syp0#V5cs_Zo;M(u`2=*i#GjPo96 zN##3?TTlY`YRO6?<7lw~GSOjfh5^-pnDu2a&q|U;w68X{Phy)t9YqwjJNZgO2w(-T zMl*1^E!kQV|M`vIjTfmF1b9mbDh`fM%gn5z!^j#p7;&;#kh$^1aS|AiJUJALOHXT_05gwTZfj@;Djm(WyJIGd)66wmxmZNwb z8Yn)j23TCDFB|Yz7m*no1S;>p#FmRnX;(J3#!^dc^TO_ zqWR#IG)*|^D@4F867UJ0^ph^5ksY<56#QW|ahflHz=t%sKHwQgFle-xP`nU}FoZ@n zWW)0Xc{`cm?b}$21l*3oCDxQSS90UaqD@1&hCxNiQLmj2JQTJ;3NV{TtsW+7Q|9=9OJS6i$~#df zjX6_pRD|_FN_NN>NcdHK!n=xq3uM+$H^o=%VB{+NBLZ{VP_2p%WJHJeEi=;mD*KmD z^8WD4OR<1w-ud&-f}_zecUTKvKdaant|tgicI^nNbEuy83akNSV$hctDAz7(6_R8H z;3O56&jzg-uv51qdstC(kHc6?tA160ECD8iAE#BtfUM9x7~XDn5-4$Hkb0;SVcy}f zq7}Cg6^%(>)Z#)5@TNuI7E-7LhK?o7TNRx01t#-8P1^vg`--g#fGU+_1kxotYj~_N zjSFW<`<;|g`rdl(-php4@OGeRbXc)>pdTN?ysXsOFwgC>DK9k=lgc2k9WN^p2&*q_ zgM?dUH7uj2thNW6-X_#`Cc1&*@7p3S$#ZR=zhD;&5E^Us;VUhyBHJWSyl9VrBLTMH zgxoA&T;E_S(F9ZWwoATBEpHxrsH`|PLA+AXWJ?f$7hKGXr6|&xRp0RWxO*MsiGxU$ z!H$`rESd%R+dpE511YLTSOeTv!NtKZt>MT`w)T}?l;Dqs+0g=n7@Bp*n9gM^>Z1+} z>~7jy$k-9&Fu5ByiL#y@iEZHpE$F!;%#%0Fe4gX`oiznG8<-=~^E{;YzN{9%us263 zyzU^NHlz1nb_r>BBhxDaPblFJ@@lVxtSf0Oo)dzFH+{0jB}5k93=ZDm_S_`hK|5P; zvwjclKJZl!iqna}PbH=QUH=h7_X}u5sWJhkD&fMo+Q+~Zv@R~2D* zMXo5t;Jv=zi)#N0wxPEt+#ElKjHrD-m<*H3v>7{wL}r9bsfPD=3E0~Yqp$|c^t-XS z2z0qd5Ra-s0M!B-e?p7ykr2}18POraq=Dq_5m7DzaT8e|2_6Bi3e0WqDFU>tXWsF{ z0)wn$nO~*CRlBugN6T3W5rsU3T*D+eBQ+)(NfTpj_JqhAo9qIhvrmwpeZ}9=uCA{t zsVCzTRej9#SRsF4g|R`^UP(V)I>#p_<_;&o4gDs^qpGhs#to9*98zynz_rqN-Wou( ze0Zqa^WJq&4qc4(zZ+?@tkoYG25z@vRtD{Q#lNOPgd1cgX=Z9cKm;z4mpJyLMhaonHmlm3O1WPbe2NdKs~ z*vB#IlrF!eY92wRNC{k!J$ds1*=CG#D?| z-`ix0)%+E^Me@~XK{#0^3_p_&?5LCKCJukCva~Cfi))B~8WI90jFpyXII4R68+7F| z0fKquV27KOjvAf>@c<*<7_;GNI<|bd6-R?7k;c1^$mknCs)!Jcu^o>V24 zIGe?jZ7!GO687XTJD}?FP%DH?Xi4NaC+!B5Cn+QlvBv$=@G{-;;qj^DyBg3cM?JNP(&!@ky^!8Z^OV%z#fj- zVbJ;38XV(_YO7au%~Mo#X?`5 zcz&%m=4}#h&k<}45CzUwB2$c`%6&re4#mnU=~9#EIy66jbTpoNR-J!wj%VdAtsGi~$jx&V7dzH`d z>SP4ezq*hTRs92~hyqmFP4nrM^7~jd2%oacT4|tRyGiWAfSue3q{OLV=Kd$7 zm(G`~k=b*+v-4NfBNFXn#r}V^gWEl(ra<|=k?Su-+q-%<;?Byg>&7_L2zoAuYY~Qs z^RIDQ_YgZgI6N>x z2t+C!JY3C~<9%|XJi~un6>CXi(6Yn?FvHMSwB2G-levXp_M-&0s{B7k1_m+(N>gK= z0yvGM+6S6N3URawSvp7BrE0lS5tO>eI+eOLW`mW2AyYNRX&it=On?CpHpY^PWC}HE z(0>0OhMu~}!fzC=OfLj}KNJgUWua(_&nwmXvG0KB)1sE>-(36~JG`@0j-i}G; zS8U~tVCh(G)U}^%32epSHDZ(PZWV@w#1UONtrkBzX}!0b=C4>Z40yz%HMw!w8H{@& z5=a>Aw$Bag^T#viRITF{G9w$+vwY_Va6&Jq&P&DAZarRgd?weHJxLbJs%(C8Buw!jb~EqM7gp-CEU9W`4GHOGbcf%8nSC$}u)TTU)zHZ4y9U@+HUn z?p#<~n4*}Oy_F7QM9&ukA+mxV*PtnfukfGj;HM{}q%vEpY}0b=WmjxpQMpEf5&MVk z_>;5f*u?k&^=c-;RUQNsY^;!TN9_1VnGeSgAC!cRGs9_ui_&=xII$3br~Zo#mQEGC z6PyN@*ca1k$(XdZoEasX3rvq$*=Q@a?X?5}mJS!XOXSvG}PpZ;Vtv=nvlmMg=AHJObC-5dv>Plcf&%ZZ+3cn@%qsN?xb<;Y?} z&|R$qb8OwZye9Zgpj6uMu9<|Y-=@PR<835G<-V$0t?i+#3En}D^5lDN_(*+OI^R0q zB&o)`^N}8Eh2+ozANv3&8dn_~kH_P1GD6nsB)SQY9&{f(zVDuHs-r@P&--i+Ij^+! zSkGh4emW7pparfWe-BA~`1Ct|fekv}*Ps%vAh=ex4&6*?RM$6RS4wV$sOFYo1a_Kp zmlGR&yKfJ7cs|x_pi(l)`{`vh_f(SsVqN?Ep>b;5>Ow0qW=)V!5{+16{gc;!u!9j{ zI$uBA%){;c>el=ElRGi+b?|*KAZ8d!=;q&4x2UXg%37ia=v}uiq`30EbgP&P9-9Rb zmEje@5p*ICfe zz#^8;2TU^(88|S1F#QfQ@{y)!M7F=vjvVrGhKuj^GcLj%0W+NcmXq=qew zs(;3QuEV;CGwIPsxe;f}S`m+gf0JvdJVsEc+lj- zfz0%>6kV+lY3ffdF-GJO{sr~9S_adS*CD&)3>KYOKG-@|V0ch>F-t)YZnU4j{>f)y ze)H{c;;F2Z(pT0+Lb%b^DD(cTcwz-*y}4vxDl=8bRG1|Exx9dc*_O)!EwSy6`MXtg zutFh73$vQ8hHx+~F;O%v|>y^sXkJU z4Tt%>>j73hhCx_v>bnptG`7&{q8wN+6QB0!GI-ihVTXKy?F?n;fi;+oxmES%&xD<# zP^Xs1Qf%R5hvgKVGUNA!GRL3Y*~HPM8Im$1v_(7isy5>DMW+I+!h`lYnv^Mqh)|Lp z&BI@TmV)Yq!&!m~j@osjY9DuqbJ!7mq?Ziv+@WeYrY1P4Vx>;4=b{(3JZncE`iz@T zl7g1BtR-n>+v31v)rW{GV#zG^M8txkfxNQrZm0g|t3|l*21?6KnflY+Vttgti57Bf zp%6zn2p-||XwBSJ9>9@UZN;4-9U#D%e8bENXLl0kOl@jWUurIk+acDCX*v|-V=r7h zN~^t0Wpg5FX&ZEwaz+r9DMsWcn=4Q$ZC81c>P6aUvqCyEjrWB!ykh?B=j0t{Kg~)z zR$(hSyZ{%#KtyK6K5_1Y5@s189&LQLWv_>QQ>Uaz-zJ<2Uxb88NZPt)F} z%?x^)($Bo#+RIwZX=7(}E^{93+WK01Ra`x38U9yKs%WA#*O)jZkNO<>n;uOjX(Y5) zTJ=Q2B<}po-lt1A!#*NXgJGoct5<@ z`!T`=+F{xK(pK5#ouh3xF9XUf9U=K^G&JzUNgL0-&e3Zd7UFXLIWeLScBWxtNc1i4D_bf%l-bGMOYg)0QO3YFB=k6W ze~AFd+F(Upbm)*qT-l*ZUd>#CVX7KDX>FA<@RGCQ%?Y7(rWT63o5N6Ou6qb!G3mlD z;<`O3AoV8`Ay)nED@EiyA*n5TZc-cCt&*EJlU`k!<9A)_iD`N@G<( z*s;)vRMKHz%E?NL?Uop9bF(*|kmwVpnTX)pLv*-FrO4;1{T42aS&#H)dAfx@bVxb2 z5D$9S+C_#HPO9t|v6*kr=sEJ8VNAb%Pyxv$J1Yj20X?ddA1uoo?Ph4uzJY`4A9sRC zQ>RG5cH=TF#WD`X6Yo=xy!Y)c*FEBn}qQHT-dM```WsWao5qXDVs)tD*-mF}Buz1M?6RYt`>FO2_%~ZKF}s z$RI8GvZTbQ)ko=yk6x_=7sLir8)-h%g+ypUqRL0Zx$K$eh=ANM$@tNZbU^D$0cgBH zkaw1-#HxI)S0D}Ex(JJV?IYe11Hf0IsNn2*@xZwaf4MU%zB@`#u+6B626?86Pjs7b zWFatw#Ai3}(DJ5?cER?50BNm&YTkGcoQbf;7n(-`j-dK91JO(SY#*)OM=)9Q>x;=({C$5$cxpz`{;$aLMU4+LC zU2|u0AM%-&OLFkGJmFY)v)l7&!!M_mz07a&k@mTu-dx%pP=ZUGxk?chSHgui?)E#B zC|6OoIgp3~$nxs56z0%ER@EYyeR+r5ZI_{KCMK{cT1uu!>ps5(hAwCs;kpt!aG0#N zLe>{t+*hv1gy4_><1=Q-u+PGK)^SnnDH@=JNIw|~@#f#$8^hI~ z(*R8+KrrlL`xC)pRN-jfhtmeAs(#d~E5Q-6GL4CY9 z8xbPb!>|_FJ&JOwJ!qonN|wS1G>;8Q^zgmoDmztz&624l5;kk&)who| zKJaG{S08B;pajQTP3qNDz<<_Yjq=goA>2jv?CWzc+rEz@EtNSNIjyYgJ~K`9nSg`* zVf{L)pXJAkPGxwECq}x*a$;2`c1CxwYbqc5_W?B_$rIDznO|@wu=}feF(>D(Rg1B? zhQBLUC6dQdgTMY5K{)kS1;;V?s4gr_k~paHzX7*)BOXs6EU-l4{C2pdE2WVG33s%> z`d8wi^~pnP;&$Sy#!jxNIrb6xy7a?|mJ#M{WB!L^mUbBVUDmTvf>^CY!emj_Eq~&E zdf?k5<>6OFRVh>VI+GR))0PWUMI)-U^+}kPtaFqiaM9du6(%_<$ZxcKonAz^-;Axh z#sf+d;K5py$X9d)Skclp5h=nk}EU1Q@3bNo^3E#<~j}$&DkPV%y>KG`GXGaIn zP=oi9@jCiJREr?m4H2LkfM$=qrh4Y^WU@vcEHDqpW=rTqQ?4N*;`VMTb0ASeG9F0_ ziE1Sp9k!7>Dr(zfY^1bFgb^9dhL&d~a@#9Dc1nxF$iu*$L%9XdMI+Ro98g>8+6cm8 zF;n;fwsdwP3ON%hX7lAM*W5xk`#l%p^0;|yJQKP)Nb44_XB^`PN`l^0==sF@L?^>R zxQ@?>;>kH2F`7;MI-0e`2I_I;nhK!1VwXL_27&`m@tWKbVFPC-Ns4-}kX8oD;cdAT z+rGs;iG>m3$t4E0`)cB&^3OHo3q!8LF+GyI-(!VR0BS3tN>3N1M#6_dOxC;F@ld{x zobAB9r90j)0wkiBD+*08icjsrw3(}0cq$1)?>VFrL@-RA>T}&2lp_u&>WurBmQ*U57%O9~g$v7yU zQy|qyLDb+7CNe-ml%nVLj$Ds0qNOXr3HgFwnzjf;fnM<}FrwGlCR$uT2@wrJ8VS9Y zsJxg>?~xTmaZR`kBJC_`&U|J+@{uk3kSY^0r(~kth=- z4h!=;X}Q1as8>raO;zaJX^(FG!v*xfmy1&4TT(R`0NBmvdv5^=41gLo$@d0{4*GQo z*{OTYXY^DUJPTq0^Qaj97n*S6F>+uGIN`#+nGx+T!?XW2fOh*|v-z7v zjbN#5@wKYNWq{$BXvXp7vAZ9i%c;cj*?hY(mg;;i5g@O?oCPi_6Es4sHJJ8#m@RYqFj|yq0rS@Vd=D;w?1ckB@M7 zLG09I1L-0r_&ty7PeUD@90rQY;;tkOdffiAPm)Ip%3Z=#{OZ`opAee!$tOfw4bcbG zR{dW$5`C3R7sa>YGC&opuyJC=WBjJ zv0bKkywQD_t2w@PshNH>UwP#?h^`rAt@8sXK3|cTDa{n5KL++yDKL+jFq~b2QTG zl&S6b4Ku#q>?nx3=Gl*viY+IFPfm9veOW{Hs1b)^>0(`PG5&xZhTi(}zJddiXgv#T zEna5&62v23;ZCwk+nm`-eSG)$U0F7L#qkZQV+}Mp+tQhn^3O13{6f9KzE%6@K=5`3 zL7c-~8a=g&hbwx3dmEwznZ=2GmJ3Wk!!-#k+j#U@eOW-KKQ59#IG0RLE{WeT3T zMkh#uI_OuK-{ZReIt`ix}BDj&~h2Qhax!p}gzc`0oy z;9u*Xy{#{KHJfG%)MK}kx+HDOmL1|p2Mh60+n9+I@Z!?i3WT;(-v(o1NPdPQAegw_ zde8y4Pi7J+*w>m-0?sL~FaSmipS}1lY1i;{b8PKrJ&H0(;Ug&uIyqRj7+xToLbh}z z<$;rwk7QD+_X-`p@It+jR>3cjB90DYWtP+`{7^WiiF?N%913i~9P6x-^MVm^txTK` zvm@;}0Ud-=QaM!CG=l{Cr{+XD$54`ggF2YvWI2ifA1c5{$yIAaY!?hM0SaiWOON)` z?Vl8hlK5ob^u{pwyb$CR^wk!vS`5`OB>CG)6QG*sqMN%*(#mp0ONaNOrAOkAGq92& z{}1R5j6|I?PvUZh5@1hS7Z*%m0k;`UdNE3n;@!WN?485(K39-T&~qWy;BYyNZ1=}o z--_<)gs=DZgcFAJOvi0JmCO;h^rCP%rjfj9n^+%6)E~^EsVZ-eZnA{{Vrvk|1z(ZM zQEL5`+q=f@5bGF%UpPFDG)JygCDWqHU#gCbZN9U^D-VcwOn0zD`u+qH85?iv5g;-; zJA47b9#kkyt(hOdFHei>!YH5L9;s*Tcz^{=+$=uv{A|FU0bz^;hLVw)B^D5X!HFMRdQ1zX&BTL`sHS~@Ad!14*pVqOo9LA0L&Q3B#$K0yT{GxDp%=& zY0zh?GgCGB^NcNi8u5)GJx=6p;K|HHLmpX0iRgek$Da|PR{wbWb<(P0tD#vURxo_8 z(8Na$I71S=mpoaF9dRctJ2-Wv9B=&@#JyC!QWc~@7+C2Lf>|Q(Qw971ow#y@8T#Ky z{d>5({x5bgOu>9En2|)3Bm@8z+6o1aF{c}>sC`@{&31B4B_>HeGks(HO6P?F5sYt) z>qjghJi6Fl5X^*wHWLrSs9^$9{6Q)x8e_y+zfly65Y;B61?vzQ@iEf@sl=1fc4g(n zN+?1Z7rm|QQ1&4@#MUcT&tXr8)VdmvK<73XjJ#EQT+X`HDqRPy^OhyYbxe#k*W=FS zt*JKyiN57>=B1v-e&*5}rs`_BX{WLZ=rmhR+NFjJsD&TPO{-Zu;Wg05cCK(pS3XHc zJMlb5GSMg_JOqh$s!>r;*vYD|gsw1DrPPSN3(YA3FF?OEyX#f&>*^j$%cAira-!~< z_6$A6@41?1l_j`y;D%KOrXMyI_st-YH#wxqP| zAdEqVc=yVo5Y~WRv6x13_s;x{3Zc%H&9PYtY0tSOkfogBeBGAV$e?^M;;VMof3SlO zXU)Ep75Y}?Qu|2v;DEIP_eTuHU=vRk`lx|+3}GyND~!(wegO1j!aUWl&tqc>6pu=? zZ;dT-{({{|-Ry2oh%{BjF!Q4u`7d_x+JkOIQ9{yFRr_0nkj3kvlB;G?j6KM_*|?<0 zhQ~T?L7tpN?sdKcK1q4rifc*RitiaN+1jhj?}aioF5V*FlT@U9zAtkG-kP}1m$b+o?UiIdv4gW~UZPWM87G}ELC}!TO0)#h+ob(BtJ(3V`+pLr5sS1RS8yro zGJf^`7dseKw!OMD-1&C&b&%xM>but&d$N8!8T;-@pCxbivV;CLF$8^B{=xd?J$c*i zb6d%~KkGq{OOO3Og1W+N>RyxmJ!S1dBdibhsT|)#DUlyj)Q8~tZ!L8$OP(Gn1cuBa zfR9gBzdb#XmNfd?W;c557X ziS98roI!+^2`owuj-Kaf1<_^#IB)kN2-MgH*_WJyFd0|Qg7uK(LlNS*p!^^vf^6Ee zJ$B)TH=M1_CBCBZF*^Q?)Ez_8PLm3nr1IEa1M2<{LdI0PEk;M!<#PawfVf;BEpUR!Gc=|5G;`3 z9^558JmhIqBvyhA;YKW$e!ps?=LC?Z5zX{%Goq|hJ zt$UC}55GEbOP;Du?nrE8`2(Y<`2PMo(C-WJrTXS>$CW(~|}#9_VI_rn7=SDpPdld`zHe+Dy;^YqX;CP*Nb_ zvx2gdSlov)V#8!e7VZeY-72V!8pu#ug$#e;(AZBJC?K56I5KcKP4&UiHUZktX9=u{80!cX@dqv z$hpwtafLBt&=^-M_9+hJDk_)2)Sw!6r$kh*1qzKW_ydH0v~bD6>dBPXVM%>Ym4xd^ zsL(7^Eh|6s8kJWVi)LY`&h#>da(j%m{8Z+df`OaKth9W!&s|^ zbemI>&i9%|<)Fq2^pB#->G;ClEu4ksb`-P009WNu5tFo0o%|N!p>0`e!n@ znr=1w2PZ>c_0_Od{`1zmnM-n+Zz@xo=|3cjvOY;p6I=_u3}JIvs4bF01r;#3PV)y6 z%|^~h+nx{1agjAHrz}_x=r_z<0J9yPi7fqOM@{5%sUw&q~}3hLRZ6#b}2XtgQLVW zku|EM;|YhCB3C9-7DqJs<3qSzMUqU%AZZjDTNE0-b1!RDkPq7;Y2L2@aJ-{HaQQck zXdZJ3il}lxQf-)?3}>=mX|DZi*irZZjFrmsZIa`%Io>7Rh9bG?_0+@??)z)FaZV!g z<`*i7>90NohTf;7FW0bMSxl;0G=B@S9LIgNqmelNjB#z)$ZkyS{n{jdG{XcL`(+LT zbUfuImtzXJBS$}3vao>hm32Az{Bs`nVV;3^9+QX)$|m5UK;G2~b%vV3Y(xo5HaMEH_H3Q#@aA06P83;CbmJ1A=}joIyl_zB$2?J#Sq&ZB5iAfLVB! z`O!JdS`(c@=8OJZ7oW|SSj&I8#UOc@FNtX-iN^>b+>oRxfRGkQ(-%lFGscFZOEuuvV}whSpo0|r=y8#v_!k$0Q@i zpaU(`b749|p||wUr|ng{^Jg;58Uv*k8hm7chAWKnO}3;m@zY3N^DutFk7J&S?d*9$!}SU z+Ss@ui)=i$Ox&34lZs9!)9j0i97dvbM!q?87U{)MSO+pYTNGJAQ*2#|oFleu4{hxJ z*f?)7zu7B#i&p#wbK8lg*o~CM?UMN&x2>B*@q2j|cTrn+!fp4{t!Hk8JKaT|ZS)RP za^Oy-nu=5^KNcU5vEwPQp8_v^SI$#f(Px4MZ^Xt>e)+8^=8RN`)eQ4TEpiWNu|Fnj zz*e!V+O|KX-8<5q02|vN=A9tEoj`Wh_tHDT@~klWlHkKl{1`cw-)6q-@|mx~7Voja zK6aVkiX%p#UWk5I-2~%kn0M#SJCv9}4eF@1l1kW4#3idi<5n1E=}>`PxQ~|hhn?^$ zWN|EaDf+_pv`LE93iGE!78iQvM73R5;@HQ|&7`KUN%HnEmy!^hk|5KP)DX5*C~KMp zYkJmhO4Dvyn|ky~~tItgBfta(3o zyhI%;!|d*l?Q-?lNl@((S~GEOw%MRP3yd-r_u|4BcHqLcrH(;T9(&^DHneIlF|X|7 zY4QI3c10FbXYXD z!p#|Y$T3*u7hP{cXbROsBnXNxhmM!GymIe60# zywl;{E&7U9>zviG-BZfdDPPtodKeVuush-6Pg_arQR-gC-iujrxX6_-!gRP+nJm4# z1Uj6eKU{TiKBau~i~ZFLQr=Kj6|PKXY`*^)`sM-e*gU7AoA6Cp z9lL28d#{Ck#i4W3A1(Cq%}*cglY94$B&yHpt1($z&V6`Rxu0XdJI0FSId~rlzdTA? zJyJWbj*IBu>paYnc5Ec9d4hx4Tz1r&S9RZ1-BnZF?7?k}QagbCV;h7#dBVbLX1@2Q z_wb_VEspwrcJDD#`J{ce9LZiw${^pxd3@77aa6w?{NiG&e1m2(y?{f~)A_}VgG8Dls_e1~K7P#6gXGRLQOA1O=`(SCe)+k2 zIrZn68NauMPoC*JlH%7Nti6@GV&x$UX*mTJ(B!pFRKM17Tg*99`f9rn_56fo*J9+<$o;47dutC zJA)!wS@JL7TlRF3{Odl|F_cY)DsC2Jd{2A@r0_2}7P--FFApP-h2%mF03jaC*c038 z+GCF_#C2B2R2(nr3 zs|j8DI$W&Z3aS}-Jo|WXJK^5*{i5YhO$;91&Y`=n&%SFuhpwKR`3oZET9#LL0-j>c zFZg&ZaCqJ+G?6qvP6YBvsaG9nxuTr$Kt7!+<_mfCR#KoJpfk9a)7NO)9@}L*P&5lJ zgS?hSc>t<4`h4oaS}n96*V3OT`Xopx%u zF7(OQ6fg8j+4IU^=lEW&PIZowP+Q3R(?yh{kX3a44gq3b3?$fv+a zI77uJQ@ib*#AGf<+uUCLjgx3`GIL3&Xz5j}kf~@vep`sTPnl6$xn*0KZHsM^XysR6 z_MB)H(!AIkYRPGS?*0SX zWqcKVbuplFkN8;~Cgxf^#q$Q;^Mg7sQmtudx){~7X{=tbN5ZS7-Zc^JS_?}U#&F#! zQ)6={R*v(b3)w#T;%;(O6cq1u@zHZ+?)b7ve3b0UH{I)9*N5VCQTQCIiMp@pFL(G{ zORL9+`JgMtAK8tTFYimQ79945g0B%m9mN*4e)=MbW}g?km~DRCqvHGiLOyhewb-R^ zN;_VzAg{WKKCeCV>wfWZP3+_OsoXG&_fl*NEtQadJ@Wbomgi3-XTL(7SGH$M#DiJ# z%R$Hc*)w4V&p&FeB4l{uLqBeGcFxob?SEm;uip*W?$E+|sJ`k9x~p;|J6NZB zdCKB<%JA|`=wsEE#JOZx@vl(7;NS1xxShXqUbO9c*M4^@)^!^C>Fin8brAAeM)ax} zd0{D;V~M9{ioEkxzyI3B+up@K`ss1b`{AhT&y^&E5rs#CwkH4uL@%BKUzHBUq+^eo zf4e3VPR3@@kP^2pA4?+TfV<$jp%BNSl*gZn*i=qtdR-Q^;I^fbDull^Q>tOEo+asr z2@ut>)67$dW|nKyvDYqA&yN@C_=~vqHx9N5`>Q|Y44grYiIT_ZOc@{k_K|wKU zQd%7F;}GIDZg$_D_*|Y`wcP2Adi|M${OD)5Kk)2nR7&k?U+7bzKUArwR-=&|mYv34 z^%fIpQlChFr}A%16v-ri?0~vC%;cMuyF5vEw^^*W{xRX#CirI9Apna^BE!pdeK3wi zzca)8-S*d9g=C3LANT#aTHCqKOkdBVUp=8@l7F*<9Ley1u!F0E$&%S0AGVx+Z_jmQ zfBN)jzHvSZSadfS0CW^|6iyTr36wqbKr|F=BnlQbwPH<9PY^Z{vue)&HPApMKoOJY zgHnCbcsl!Vu#Sdi@0V2J{{juzO-33XK?8wi)+m&Jf(9dvj6BdBl8z%(6BpQqFrwKI1aEsSMwKW;A@ev*z#`w=lBnSuMJv0IM38NS{^}zcn-6P zj@Gm7$$XVZ(4g&Nf4<)F*Tm=ctD}{_Km+y8j+?Wc>2kBLouBXi2LV{MKcGic>-R*3DO!l3eU{Z&j+%V>{oxCW)y`6lx zJo|1zf}X=}VTw)JZc&EE-fnSD2>V`1fto?Gy8U;i1ogtEy}j~B(13lvqG9%yNk$^v z{t+~|+$*b=>o>7yBOkQyW{{}%wuu1(GH|2BZdUM8B*8Nur=h+zloYUF3@OH)7g!t9L*;fb_*ZHI@ zne+KKMV89*DOI8IgR_mMToKWuDoq}YS+uf4ls@uJa=EK|lnnCWngN8YmyWcI_RdkNe2p+@B1wRNtSD2_4;^O)5NpIG@pf^Kdb5Tm5jk$y+J-)Z&xG#3&1*ZOGl+V_QzJuK_eUL#uPmcm})1-U{UM= zK{dR4T5~YF6cV320$8-Txqky#$HA7*A9#uB}(94s~A${}|oF`@AnS zWq3pqxOre?DE3ngFo7b3f5;i+)yFJ)5-y;GPE1Dvg3Vh*+?B5B@rCtsld46U9uSg$ zna}fu$0;KHhseLCFi=y*MZdTWWn8h#=O^roL5H9b?Xoh6O~l2DuMI;Pv4^Ca#%V$d z2xy2>8MrC?;-aDo7Fyt78fAoBK?`FPZK_frqf|VbLqEzQufIAT1|r8ej#YbjM6c~M zu_mgJ(^hE|x_Fw@GFHg#IXr55dz##hTf`HpG-g40mNKMT#FsogW+Qr*IvG{OU#v9l z06j~KDJK_&m1&8H&P2X{TdEPgS9Htvy$t$DUX7ROHIIC+^0_ECch=JWqC8udc2ObAzzCfi znQdyjsC*k;ZoI8L*S2_37-3qK3`nYSPKWd zGG~Y+9?-h1OW}&Oe!-D2?v}(F`%qy=^o99r%wy$w}aTBE#b8G2RamOQ$&C3@958C~_hSY>$+det^RUggm| zx_sz!)xPqi+G|kd=V{ti$Ih#2pSjVWmu**{kE01?Rw&Fim}wg>#;ZSGjsD7?YVJb8 ztMSKDT|pZ>>%vs42_zd^!4wlt#{O6n%%ZvqGP>@45ycZCG`5Q8d;NuWB0EGzb&W9n zx{p=uY!X@I-Blr+5?P+4UdQ+n>YKJA)J6-+KWi=0Ow12yh z|KEy5^8r%*zhluZDN)b8TXSyf!<(Z2r?Hsiu$qF-Gh<^Soa^vkvFNa0X*|#eFK@Zr z`?m}EKQb2o&s@lyzhm+EUtP%m9*dW-HQMJ+kFluug>vyYM0hM0&vWPt&Fyh0j~4o0 zu_&SeJ_%D)%_B@s>HUPeK?YU=5J@J4u-y(lLvzg|u_XpXLZpO^h~q|Z(fWCO9kACs>Sh2*_F!Jli$5=#pQu5DO%vv|V7?>wcHBzo}}i)A{+%Ks9Jx^J{LlSv8sA>E+apG^$|l<<^u-^D~X1 zH^0i@w}Kd*m;_aRY`sJKq``G6&NyOD2$Y>!j~>(EUKt%aFe_xE_t~nQ7jFj16~c?Z zo(sFSTWdJ*ZAvLR>yfSc0p;aXiXii!189WrI!*jg2Nr6blb`AaJ=M*SqD?70ery9+ zXx(?^T$fP1RJo*O$Vc0GYBLMf=Sm(R8@k|oq8b2!h_Sf z*1jnXcrvQs4QEWZ=!PIpCpdv;uW+Nb3O-yhct!1|Vy!GnOBQ^Skq?We6ASTStfv*X zQBs|)`w_~T(nlh|lVfQNcU5hnbv)!$kq6nU63G^z4Ku!#e+ia)W>uNWT;}2YVpRPZ zIbHDOP@XQ|K@f&fd8^9>ZNJas8JvQ1cUiIg>F)$_Z7R0e5bOkei+QFuV)P50mm1t$ zhhJsemv+>e+m=ZV-P@@oxjr^`&?W496WL5%PIv~Grds+bFn2#(dg_-TrUYSklL#nURmbd=|_cV9cBc?61gU3uJBC5Y@hI!x$V0e;pMO zu4z4N>bZjB92BflUvBJ5UcQs`w1!j`p|AlVi4-X2JZ*UYwUUQ3!jkA=cPU(C28q}# zHF}VcD82sPJaJLw`>=10-#$O6c3GGHaB%Rr^1fK`KE99Y_uJSzALdTCRx;}i>2FT7 zj(;u&>PYFQUs^j+^}cVf|29i)-)`XHautGdNxvblNV`BwP%GYf0t{f_I5v$-#mA`k zTN+y7m4xSTYzT_Di|$JH-b5a|zcPZ~?#ZnY4P0T+i)4S6u`tBvL@=i2XICE*Nmq>G zc+d-e7nNs4!gKRK{|1J4djq^`QEn({$whj(XSaf4Gpxv0eY- zLjJk>`cD@UP1qm9z#r4gA3Mb#)Z&l(4;KjFP|pX@TnEsS z2hs}%GGYht5@0Z~1}d5Jvi-w_5$P68Z~;l(-IpkOxb%x`+!0 z%XjhrIpUh4hk!d4_sm`T4MVKGKlZSD}yiO|U^&2)3lRSC}OhX-{!j4E}W( zoID&M96pf{M)JS2Adwhf(NIxPQBbfkP*5>2{*O16|AvbH`=;{mo65g$D*rReqcnQW zhkv=L)LX#*x~XW0U&tIDe`?T47%i%tTtZl% zI4mz*E#n7~by7$`0a}C{NRH%LZ(qoJf=K2zdTE2)ICuYV@`M=S+0(l0QNdmp0*f_y#8v|4`65 zA!Azu4l~ADqzNHwLIrpqPsfja8Sn(!~hK5+` zmT^cNNIw~x7M2Q%Lu2Di%hRTUn;(i8-n4LL$9> zy$5r$Qw(m=sh}xig#yldLO!@v5-68Q&uZ$mpbdoxH13D+l<8xZHdf;y%B3(=;PHpV zHOOHO3##+Ee!-z)3ik>tfPA8NmU~^w_yOQqi6N?-Q(op1u5LVz#i>1yDpRuuhnS6cJyo8+7%|s+2!!cjDZ|>e*eIB^}ZUqp}(t;QBwgJMi3W|*AQc^^-V~~g9 z2x0Zo=;3?G7-!b~OzzuxSck;u)-pzs_fHJ72fVI$+EXP>#6RJhnK$`5ti#|RHE6CSbWc-Ff|dlR z6p-w3?l0ar?V5`GxS1%_s@LolCFdkc?Nu#(k!8lPB1Hu)H99%Xtwh_&ZxEq-V*1{0 zg>zTg=yob)qM=A=d>8Mgbvg%cN?h{ko|a=+cY)xA#UkYhQ8}eRhVyy3tw}C_^?8ME z(S=1)xntT61$*4#g`ySL!FWO2`~ur~MBF%`1&&+~dO)?QTcxEf10ZSa=SZ!b^sbX- zVXH&5otP6H+}yXFb5^3+YC=m-(WxMCPaZeBm@vcRp5f7RCv|-`zijQ<9&n9^o3q~P z6u=YA{sXV2w{+Sv5NE>xXx7qqC-Xbp$XJ4)t7Tw8`y|@;e%&sRbI5Eho}l;#{Vej~ zbV&a&>%1<5=~6MG-0Uzeo&jSKV^?_miN#r{Eb&i4w#|IG*0bnyV_Kuh;V)8w>tRu? zI~1i@lFz0v)A%1YyCjC6tL7a%n&EpCyh8Jpb%0EK2o8pG_|V`40bk!egR-rdW{k@Z zgq6u5aX1>qA}XR~{ek%f>d7yYFZ&^~z3aDUk>$Hpd;|EV@5K_!8=ielRuZ5SJfYy}}&G&KVFGh>%9dTImkd z>A_LCro~1QLohMnIEBZwQWYyecE-1`PZl}q1>Hb>jQ})^QdtZnOV}3)!{ac`6*RV{ z9E|%X{y}`47TK~xL~Q(;KughF3?){%myH^nINcURSkf}=xVe!Zrs&v|d&0F;rP$F4 z)=0mlumD);(6m;hsm50U%zc0e_5y}1;zTANP9Sjmo2niRa7Ti6}pU^l3gA1M? zi%xDy@fCYmjLSS&3ogsihSDdDR~zqv*dUb_Kgj{HiN`rlQGw(90z5z?Rv4S= z2}nDmm)H~>#?Wq9^ut^OWHc`;z6~6-s5?^?6(1tsR7CdqB8CG|8*(tSu~j}z5GF+N zhjF*sO>#BvMxyd#^EwJ+tnw49-l$?rJ|8J;sL;v*ESNvB9R9`?{x%fb&{nA(<6H3C zTq139%LC4cN&*lgh)$q@kl9}p>l9&xPMo6=M2V_|%Sfz%D!14Rj^ObRELDTCv(o!d zJ4x{a6ACuS;RsL@Oq#^(35UTT2v!DlFR^=4!W@MFxsO>sEz>Zfl#UD08EdTad?kmG zvm$9nzz0;KEigxo{LUB^P=%>k1|c>A7l8U|iBRPzNquMXCweRQ!Z;Qoai9t1+4{^^ z0ODX7Z3nOs%Fq%r?l`hZHL4AY;9k0C(7Hw4Y z+nYSA{hX7k&{WL2@si-SB18Jx1p4#zx}`Z!A(Z5!3&9CORcV{mmfNDU4|;k|H4jd9 zFU8EirI8rT%auE@_=0sGY4GI-F4N)i7+qZRr?t8;(OJzk_Z9<^wVkpElY=$gurE$H z9!DlW#O7AA5?jF0y?R&>^MIj1n#L7w_ffIs2|QZjdfG5ic1NS;svw&E6oqg=UWB2Q z$Y?4Pwp$PLGT)1Zw%%9eAp&vwyd}NJK9?%Fm$N((x?%L69lXxiXJ{i9@Mt^O)rLg% zcz4)784jd2p0fAG30~edRUMDdn(c}i+y%aCHPZ!fZAnFP&*eX>DCrls=`s6@zt8-5 z8jMdp8=z`PtCtljtaCr>9wtCs*UkBU91{u*@@PP3{oTN)sv{UG{bX;aAL7u1CoaVw7YyZ^E zwo)~j>R->$4uq-@4#?xp#t|LbF$<(#d|Z zw)R2a{iyZ8aywvx5D!a1ACB3;=nHeJcOJw8hBdZO^b$SwA~Wc`u|mJw(4A5>lZQ0g+kcPQZXj`PxW2bbvJsqn8}eCmfZT!XCXX zp^ys|ECSG`5O*7ZeGK@fcQ`>`z-@U^xT}y8CW4HiNFW@AUm$vu98mD6kLLh|zccst zKsLR=?ZUCADPZx}dYvucksa9!Y0jgeNb!@{x)ShQN+co&keUOC1EVS)gQb}O_f2^D zU?8R|l#4)zLk99IFOG!(kY9sW!Gl-+sA(&L%^Cn}HJ~_1Xag(c;hhwW#Gmd=}3Q%Y9v85l71l0S3fjo#3ErMx*B>FvZ7@iIhE@&m4KEntpLvILOA%z_ znhA#*%1Qrh1wPu-O_O+5JRmDtpn(#|sz%nK=+M2`cS^MWn}?aff@^h6ygSJn~D}1+dn_qNw%R(8g0p4kc*6BQ|By8JZ1wp zb?31ugO*zXTK-VY8XyZZCYn?#BO8dD`O)SEKp~cr-rDI9J9eafuDl5N$!!TCd+scd zNS=blg-wS!HH~zkv^4d3C{SlXByy4hVpy8UzL-);3m~Wg^0p=ZO2~TDVJmo0%6TG$ zzPk>H6g(otRyX;XDHzX`@Ylc@q7|{fVVP_Q&UPrB zPzFXYWY{nz(=ydp5Ehvt4P$iKH3cZ)Vt0whc7+x_1rJ&& zwv=U~ZduE>aJIcnp2d{k{>9Fa;->Db(}dy&sAa;gMLJsvXA(dIUd^49fj;RP)mFW9 z%lyz*8k^Q+zn_yfQi&E>ld;%T=1o158iH5=U7F|l%%>nx@>kgbR_6F!DEZgBiDJXn zkTf8(JbvDz@zwf>f2Xpj6u?9)*1GFD&eOQ8E2+{*M?@=LhU0ev{Ne1eCFJtj2H|EHRg65crwdz`Z0-}`1{WJmB5*hA&}s3~ zatc=X@eBk(%qo_q&8bzb83v?vgcJZ$VgPSxp|(#qzhgbnz3`oVJ>a0b*tZ_4TomYC zgl4b%L=%pUnwrjo`ACk(@j$dzdag$s*LXmAJfIX2Fti4kf85Ix)s;Y;>+1XYdwJ1< z(P#eqHgVjtZRvOt3WDCG5M^i|hAN4CM+R$ofu%!~np2-5gcL%ZIVVykW!!I|+7A`) zukZ$&h-V43R%)XXK7oR1?7dE*!at2T@x&6X2x_0M7Fx1Xzl639w+z_GG@z9B7xhOy z(;UE{v!Z7MZ5lSSSTxApxB!v5V0lo1Wu#DLWRIn>m=`YRN_(`c<`AhAiHKvYhjx+g zhaU2zo|2#;gsNDa_(;4HamYv=#84>lp2N9<$DawDRsnWLrRE0=GE-<-ik4gQ;8na$ z!j2}9merus z0rGYw30E>N?X%NszJdu*^N+JW|9GtAnO5D!qG#hRZo}HUtx~w^f#Jz+W8foJpjEi_ z{@YZ3xx&@?q#nJ#UgT_MRS_KK6JlZhA1ECJ@WQTB1t^dh%Xy!YjDA_aw_G2jI0Q`#8h#g0rx!u=m7q;Ms7=5EUM7 zD**M@4Tl{Z)Lz!kiW<1z;M|>sE`@mvEdFdHecYFKNWAbTe?iD^x{20}`XK>9+S$$* zwoXL^T}UxPnlJG!wp*d7FPq?`*VKM%16-D82nphqCwA4zr(tk)(*QdR1wkL9wY4Ci z%kFuKr%qbtUpM`JGWPwd)WBJO+1PwiN$Q*}(YUa-JORimt1!p8m;{{`@QypB6lc8t z3B{?%X-3O!{(P5pWxrO*^V6rTgwVeHj-n)t5{NQlQK~q|`Lm>{qIvx{DcQ%LX^=Is zf@W;B+10XNR&Q5)Rf=!qs#b2Ze(sdHrX^zknO(`CvWsj+ZO}bQC}S%F+&SaW{RCN} zsI?43xPxO@Ldx^NL|?+|I`=F%M8GLj8Sgt91WOnA+E%V`F|@itUEK@IrFnZe>J(x> zjWl%gk)MD4*1)MXT;fdAP;kLfQRB(-ixZXBJX0s73FVHU0 zPNJQ(ysRp<)*CNg6%_kS1)tvA`mQv?L$#b+eoWfKTB+=p$44+zni&wh0(nAOu!4_4 zv-9Vb^x@4R=IbT;#i*Ul(GomLpS$CKf2F|Gc+$}Dd}LEX>S!!l0S3)IR8r)4SKO3YaKm$Ly z*O2!M-zgWlH;5pwK%^$cah<@|hi9ic2BQ3+mF6nJ5Q{UE*0h@P5X#o1{fYh&xqzQ} z8xn^E8Z&GY+aG@(QtWFdnhaTL;5T)b0W)jMlvgOUceg}7>u(a#|0$aK-0YEdG+ntS z!vxG#7>cRvB}~mnQ%(yWz#I9IpGJ!(kOaS1I^~NfZlhA~c3#m!S!#`0WjH)(soMXY zaZ0%{&e1h=BQb09o0nITqrPI9TBXXWW>Jh--D+jifT`tjx4z%Ht5B({$LV+MkMuX+ z)BB(iWpYVfBN^;b+6|quaUV$!hx5|?%eMUv_a#7L8)Zj$>fS%6%ej`HQm4ySo`I2> zi^z$iKc)@E;^RitnJzDrkH~Kl94ck|-{@>-W3+${z=*;9Y=5dML_y}61ArxN7 z3aM7(BYr&>k&u8&DA*`!P)*7PL@R8lQwYf=<^xiIsB8Ke6yZ;u7sSFf)=}6j7Z*h5 zUDiku0?t4CQnk0$vR?ZA!JyRH`CrN34gx(Bm7)wwQE*vlL=`$=*eiM_M3SOrAHC+N zUOcPMzMi#3I+HSSfaXS3bb459IvOLh)w3_r2p^X|D1SVs6S79*2 zC^MUUEsn@0eS$f0q98?3LOe8gT!!jRAMaouWTsZ(*{6nRh0+O1$8y|VOF3%IW1L#4 zK(*V!EHinuI%SUPC=JD=nvFV@=K)iEGKCY14&4Ks8yX-b;vW`7T&#C|Y9iZ9uT({k z`le-0$Ee=;pH9l`2}w!i!E5dvlyi_8>9Prj99(C?{8~z%BaV7;9@hl5U%BGE(^i)R z2#Z-0O8T>YIJqWYaYdt!(`I@(!bc zRj!B6k>yX5!#iTO>$QCjWLUqTktmK_y^(WQrLKy+v)H#zO?p%z6Zg;J?k1iuos(JV zRm4wgSjjCC6f^Q@t)KevmnLZ#ew(^73BuQN)(a+^crlkdggeovxhHxEtq(3|>%e}T z4~}HDij)q7uM(58gsICXyiU|FDzi#5>x}DQjJh~e58;!oH_Y6W;oy8j64u-4eTXw( zQQNyF$iTL>3-9e2*u?gIgTVE>gJ1n4G0k1)J``xOkJ-%6>~oF${>@C zQKU$g4O5!xt#Ut{MT-CjjVAZi3^|20=nc^V^7I5+XILuQ9t5Xp8%GRQTyr=RQ{?x4d zdL{IzsySW=O9Yk8$zE=wnk_#{R+0gZ(U00^Xzj0g%YN9Rd)UN5B-w6eyQ53XrV^M; zNv|U1+XQxu7X(aM*s^WBIpDeHLUbXy?u~FQ7tbXF_y<3|r8h-0NfZVM)(G&c^p4pK zNU-I=m@Ma?&B!uzop!uJGU$p?-Zk-nptum?y_`^CzFg{8HTfUbT8vC&>7K?aIVyp}xteMyN)`ec4T-`6_r67F64ySpstF@X#pY=(~@xy zP4O_+lUrbPd?DYWq|k;>CZ@zfAy$v5BerteJabfrEW_XrgG+fji2y5lG)>62<$)X^ z@lzI&^l!baoz0;4Kv_<4S!%5d9 zPQBbrXrke32)EDVYD!`wzisysTG#Z<=dmnrCC$1SH)yZ>Z2#iWd&2hrow>a z%mgN_l7Xb(m2vqUwEXB_02FIV38-;8{ljQ`ta(vE^yAWmIjyxiWq`THu@c)1 zuoB0Onyen>Z_lEE@f)3l%46mk>RUt@{c~Y*u51(bvKUlZX<{~uMTL_~-YX}Ixab*u zWeq|^MPnUlzPZLLa;?}U`EQ9WenUb+N(@{>c0>f&Wpd)-gb|9ftzTi>kk(<9WhJd3 zBZwja)eF@pk5f_xXGi{%m*deL8}=&! z#ikkQ7^#WU$S>kJB(qmL4bnFhQf%atqTA7F=%^QmQK4`&U4iw+3J`k4wkiR_C_X7~ z?fqqQS!Fe6z0JRx?WfSW%G2?;2VaCXk{i2sxwWFE6lHY6^~|t8Ga+`SCo5>5e7{}P z4%2E(ah?jZ05yN*^h{&7d|y#a=Oo_s`rsqy>)1c+(v0b*P6Z3?qm%-*icA4VzTEt~ zC=J~)ZDYN&lrM?pCS;ljlx`rpL77#adM|9zxeFV!fS&-2?xX1wN zmeuzB-`l@_);ywq2AVW7ZU&tRJ^@0({jM9v$x$O>L?4t;1Zta)bcYr+9+(U$0XX_d zJu8Seug#~1@lo}OAe2}l8xlGr zzZqQuQtu?$&VYRbrz^>xOIzAKr{h#!oDw(TyfUaput~Jdh{-`%c{l!i)G0~PuL2Vz z4y{5TJtBqOr9D~TMPZf1WGp_eHKT$i0%2JeG~v8&tI$5)HBM56VJ!Bx^s8`^4*%W( zp{M$+{ZObt;})s#&JtsVQr203YO>H01)tfnsG(cxIhF+I+4g?ZO^%G z!_m%1fD4m(D$?PCY?CkZu~Rd!^S0O_nU-Bo?h^;|DTddXYj#pg9Yrrzp2Fe&l_P1g z;j#I-Rkg}d%2Y9xVg4k*wmBpGWy0u>d;~G@?1UE)*JqGm)R*fVy@>>baX-kO&ESuu z!Fz}3+S+S5?IIOxq>(ulahBl~b>ZxN(ntny*j^>$h9Euvmp8f8zgo+Y9CecI@v*FL zpWcDPcBxQWEMczXu$NR=dXpHXWjWF0#U)~Vd?I~>@&|s|TE|RNDUvKGo#m*mw#^28x->^cb zMc#_I%gPl=u4kofg;k$Gq@5Hk3T0M1)#{ zx&&`VUjH?_L^v%7)N+qXA3KC==Z!leL+^!naY7JU%hyIm2yo45X4Syo0x@6TPpF%hlEVzo$j+qcB^UTZIHEn!MzN*!#E3ZA>rTV6do02o7jU!dWCr}Pqu*kSfl?Fc z(Up!%>1Bo+bVhf1SgX>y!rSx0oB(DudFqtWQz>DfspOgz(%50H&M@W+LQ39-a32Wx znny5>va_P6=#%~PBwCmm1l)`hGoTUGPEAjc*ECHI*76cW@Px-=Gx-__@${o7wY&7%7@}NRD5Sy<&U4?zV^|V(f#c$~=n{_av8~;hMriqpaJav}f3>nY za5@8 zyQI4Wr9q@Sl@{J9wLIV6=j?sncc1IqYaRZG=Ni|zpD})ewkA~yqReBX1Y;^1CKqWh zHpTW?P5n{)rx>cT#)=hA<~07)LWo%B<0v{60^t`vWn(mmG;9)nWkow-!|;sUcEAbX zr(+VB*T6nXs6bIn{v*dIayoK6N}MqdJT`$4^d1H!yvO~9?ky57&3sP<2wXO*ixWO) z+1z`$V9Y^=pZRV-E6-l~xsLc)s6--{9+R9qk~Q$9Hn|b=rvyZtBy}hEw?|VKQIsI4$|(O#IMh+*;>2Na&*7JJ zlbWY+g&)}93aBBF>psn4(}okmN}!vKPRaJi(s~wBU4lF>6@mWD*QH54SFUMONF6@x6Vj@>9Cdx> z&U7)9x;i96l)k42%Ig{b;e&)Q4wERkGXkFH7`<_5K}FNaS$s!7%9MV5^&0n`S0o}H zN7m$=g*RQ+*Y~&3X0X3uuxW}R zXfknWGD6K_FJWM8VF1iEGqh&$tQ){I*^1&rkt+a zMVT=*-6Yd!@}&hQr000N=UF&a$^LsExX*r)W|1|d*2)UEK)wKIsEF)LdgnxpEK=W54V(`@rY$IGM@4aJ22o-e3NPQ-oU15>wX zVEvI5D^fPKgt6eMMgC)GjkG6Q2`$*viRfqo&#J$Uxmjtznd8M)Ya>XJczz~L|9nhl zfYd3sqg|ROiv2U`wIPgOc(D2TH>@&W=th1}3;!GSH?e7N*b)Q1&e1CnsxION-B7fN zfXE2&&}yj`KEi?|V$Ef~$c#SK4_^;KNyDUXYciShNmHw&4;CYVS2Qd?wGE0t4Q=#U zlPnp6my_@dTES}&jqh|OyEmofBU(lgDMU25k|fdmm|ZL+mBDb?MW4ZZKBpap2uDPb zU#}N3Tr{5~KbxA}qNVG5bu8MKqAH1|Y?vI)rnww7I(y7gl{U#E;!ofF>G9y~9hB_x z;DpofZ&N2((;~~0NY&SYJX|EbN{JM@+m()Bl*XWfpDYd~BP8YII!2V8Y9{9B!q7Au zq8`tzA(^0(mJsdT?98Y1=Uuj;GNXM2-}9O+1yKd8%hL=rPjar;f^E zGAj!TCxUpCs8hlSzx;VjiVRMOP;F``O zl~_q>2mum_Y8O=Y!B3>4f9Px%v!@gu*(I!Ad-^(XHZ0lhM~MQ8%qBCa|IN;sW|JZ5 zuE@_ZQpAj$xfB>9c-^^FWr5UBI#qhs8KUVOyr(<t>XnaQVgt-}zSB=h(lXoi&fWYD z-PZ@>r6wF<@Wn!bj}dHlS`RCRh@QF}NC$XCzI!$B-88Y_B9wacr3`IZ%cs7KAi>{??JNp0$`7mfJ{~5_a zWDt9cccBeV>G#y=BIaRNyqYsc-xL`H#OI%zvpu!BVl&?(Z!C}|(HwX@J0K42Y^{pl z51$?M4*W!n^@APT@HP1~{vI0|<=(@*j6^Y55qtq|N^&S4NGLcA<1hUqKm@UhvXU?T z$t_IsuoPlNU9&DquwA0)r9oe~=w&e|J~3;2sgaA7EqPgK7~cgcFI;RSHjn{u&EGJm zSbfLm;s1jOF%L`-m!%dp87Jfu*K~u#V3=UZ`ZSA^!INQZ#{mY1E6HaP)T>!3K)V@^ zmYA#`{2lVQM!noUOa|j4#<`1DKU@~mjp)r;SJ^PhM7no9qrNXI&9Fo*dNS$5X@jJb zKWFpF$4rw^D#%f1=caSrC!vNcHIz?h6d|A#f1VBuPcud@7Z1y{`rew)Tp;$@1<1^L zd|vOzX+a^!U>YiKPco`h3>PxqidfoPE>9*=jpuLxkXM_iY^L-442a1W9=CbaplB0} zz(L{)Ltsnd1}{7^@(h9Nh{OY3oa37|QVAubr=M7pJODi;lGKOPkAuvYGFAoGiz=sz z%%46d3qt5#BZqbX6zfV1pFxJMrrJ>cVwxIXrao>6G$j6b2xpGxH=Ow?3UQ2PyEmjk z@+jdr{9-j3y6W8GY=a*z82mT^F}i?g94~z+UCM|zm*nq;FK;3(nkf+^Vr@l12~H=+ zRLQQ0T)-4h=5{@8@B`70GG^`a1IALgW@wto6O3he8P-sPyqm4GK`DM*IWPSz5LTYW z>B~`M=hvJVfw6evWZlk#o-RI)QmW|>L zy^DTDyEeSLA3NWeI>P9)jP4=Z)>)59181?+x@p2 zPKMS^KSEwiGBoXt(C#$dBSbE0K4aT>+dQqsf$oLP@`AP@#Bsq>*f5px%L z+)L&z!yHcLfD5YHfW0237M{{x)?vreKF;~N(*7s=XQc!D_nwpu3Sl~xeG2D`lz+emm$0^8(^w0c(l7%njR8;-0C zC(CNRzS3QG|0nybD-tiqH_v^~+=9nT_C^5#j}mR?L!K6JEckG%a|(&QY^Yv{mMK_Y zj$j)Xd{Vx88GU@hKmP9G$re!>+ES{qRpyk{~U zPcM#^M;C{^FHFBZI*`Hoc5yKVAxIE9Sm*-FLjr{v9lgpVD;z5U1ub^i2rs_n%Hoy` zLnZoTl@iq*<@pS399;8#VHpofWKu*iA0BKAGmn0jZ-}p>1@KGIyy$r}QS?@tAIzC4 zBc72?qp>#DA{Y6XjDJ=0f^VdRZTE3Geu$O^|Ljz(*e_Q8q3(`6{!pi%KkiygObsXTJptGQS@V;B?e#L-q(otL;JBlpZHaY z7zhZ*9>-UaD!pN( zt+I&HIz<{gu3;G^vv+BAx{MJql3A!>Ir6$oifM*l@(JGMylSISj>=XfXe!IYOwAGz zT#GCtxEM+mf40o2NF!g~ZuNl{g<4eAUaoq^D*esR+%pK;F<-#<P+oV?T zrRj-B#Lg0ZHD%tW_N6dLu}<|tpG2|TNJe5Uo=>zfSZVv+ zOxcnyRQL3J`OjvtD}&n@7_c?JpD1xvj5Ovc=D&;qb~Mc4WxyBgx;UK9kz!VNdVF|9 zscrKLI|!vKYs$cJoL2WJGOBwkuq0wRSDo%%b@!`=lBgEsB|?Jg&dl<#pq{)X>;${M z_a^(VXOZVQ+lKqB88#DM(=D@avJE(&vn1n_zoF;0>wXO=OM$D`6~g7}@h4_UeK5Tu z_>^m?7unMNFkn^cUCnUOP#H*&o4>Y#$hSSLms>nsXh8KKGJZY@iu>W(=BLn z;^1OcK7)3cl6G{mww<+x`qjER=yY;fsj_f>ddo)n{v^8ML-gFAct$fB6G#>8jraP6 z>AJ<=)8Gv9QRhB&lU8X_#j?$gLowgo%^rAnmS1Ldx?LXoZjSiE7E&?lvnh9Z_>%hK zMnDdS+QH-Od>&KV^3#Q6rJ!o@HiPPxX$xTOi&0)Z_PXVt`&O8*X84zxJ4t4*7y*)9S#?_ffo1 zRqZshRTAB#0-aXT{rK(RXGZF8d48a1|6F}_pC=GITmIqe(lt4evjBvR!!8BhXS4lw zRu^K<&ljx+YbVRAL#s~};yz9-a6NT;ClYM2oRb*IZ}JncN`IO{Sij6y>Ga9d`E>kk z(Vo*o$1lgDw*172U-{MP1NDr4PM^Buuo}R#JzeOGMTvS*14(>Ly;&T%s;W^=_VME6_4zKOy4$ztw~()6 znO>LmB|$N0ymlO27aFy6japd@w=q|*YEoBFR9;2-Qo%V})it%0PXygR1^kIMr z;>@Rn)7hoBXhh-(#V#!X(87nO;siA)G-V)(w{`6cteO~oa(z$gir+P>fc_A zAmEQam_=Dinhhj>#A!?ba%P4!W;Svb-ZU0r^2gF? zkCn(-)zettkh7Vlv00O|JEyUGk#hv4aYT}HCZ=&_&U^e!jp2uV6;H<9p2pKp{$%7L z?a2%|?@}7?7WvbIw5R9fe6ZHNeL0)TV@1`0v8bU|K4B~<3$7I%l3?y{gkgpGG5J4sxM`zZ&AKJ$asBD zsR5g*feO&X${7y#OAncBPn9pOwJX#kk{t*Z`r^Ct6+DL~IUQ_uMVpzoEb z9|SOnT+&z+M~luhEC3h*Lg>l?#_gHL{Q#4ZOp_Ua=~AX?4h7mq=G$|C87#;QmC76k zWKK+F0RUMrP`x95@s^FsQW#_@O=YD7vQnqAegm>LrLwUGnel>byg;@=RCbXdyF@Dc zOptv6l|u!{LFu7w1IV$T%4r1TG(+XQ1ajV@dVc_Vf4;2QO67tIbj8VXB?h_yvfLPe z?rd4^yel$@Ko4o4r&5-uIuK0a_A&)}TW5JYuds*#eS(0#ky*ZpK)=i^zXG6tMV3Dx z%cmhLpdT1Gk`*`u3|h(x5(i(fvVza`lbgsxP^mxEgoofzhXUAEzfx0&v1NzxQils? zhf7oY9{?lNsUsP(^>nGDth1w>siVEJql2hpBC}%>4SuLn$NGu!L0t0@ARy@OzzKIS z$~ze4Ujjz?e^1@Ig;D+ubqfqm08_U_TgeEnsau_wFiP2gR4kBa8;#nopGt2kPGx5s zgZ-|*267r+hiE%<>~4U*WE#O}XFFTXZlGB}8qu<72iL@IkZo@o@nL5N@5yek3vxOM zoLHv-!Cr`uWI7pcSEn%7-iMHYbP6i5E^)QJ(CFTDz@sQ=_o+8w$$41RXhU7Hv3ucJ zk{LA0T`AT?tr2;@!6@rqlv~`uD3|oJ$o>P2vLO$f-8GX1Cd{LhWKnCl4vE%-ECON)r(lWk+38O1Zi<` zgu$`8(&S?Fm1Z<90x?D~jB*i&oBZ#?C=J8y;i2Ow`g(z+3c>FI9?8uw4fJb#(Y(c5 zGaIK`h4sbJ5;L)wTF+KrwQ~*x6bYmhe4?g(Me`Xg1&b6>$WQ@9fEA6{np1MD!(SAO zmM;&6QKHZWrsoippf=`dNv&G~#EX()6~QpdfwzdvqgDR_Mp@{BlBWSD0ftc?6!}Qy zY2o&awR0U5hXm&7P)Uq;tASyZeR*%#d&c|i4@#3!^7Ta|CWd1FE{t;bUk{^vq=(9FM`a|$u!zhoMs3jS1V3c?bNggcMFiKSOT{gOF7-g{^ zmB<|SHH=b^r~+sB8b;Zx9Wh>Y1x|?PibUruc*@KCGAwVQkh%I2MhQaZAXl)@H*m!{3qo*Z{ru;l!YTw`9BE z0UCqbmCiI}EU~s=B=ZElxBTBnGGkF6!1s#@Vh(nEPDOdm`35MMChehuNyh$TQT4IB zg4=h?3?EXUY$bEQouLO7vS**P0>W@gqJB7nn7?d-xMHjsa!$cFDkUVXPdUGk%ub)4 zO9=KBd;Q28T&4Lhk<9->6icEez-%BWwsb?+P84CBB}(V!|I>A(_ulZ2XUY z7G5Hm36C17kr}U$%tuXV4M}d~S4d{OezRRb-W8G=wb+NM;~V-VlDXJVnWzGz^a{zW zCpjNcU3Gb9;5C9xuI+EFAj}-+-deB$bk&m}eIhHc)Yl2dE^n28ANP1pfC>7w zMvz{*uXS-Kk8pShUL)9kmZwr>y}LHwlaw^Hx91_r!w(wx`0*le1cpjhZCsJR^*uZw zD_P(hc%#q`Nf`LeaRY&4&}>I4>zmhS>W+B6euH*=Z;Hsy7f|UjnNik&ij_Gdlpy69 z|HmVEss`ApqG(=h2P^Y04>U8s`aH!kNLPY|@lkVyBVJtyd)_9Bh8@cfzZjuH{NsfK zcSF=-lm_A=sUztY?oy2Ygol<3KBDZbbrE*tQv3%oPT4msL*O+6pou{WU&}7_N-`OY z@7E9yK#sn!IN&i1)ytxam2~%tRap$VLAGQFIbg918WJ*=kYF0kb3*|TMtDwEdWB(5 zE*LV9VBw%rB|pdO=?{ zDjr8)UTNL4Q8Da=v{f~u_JW~e*^paKbt86Ut9Gj$X}fN3L}I)CVCmQQ*8vg)+6ELl z-^Vi?$(<%xs(_tlME2gD7E}@B-Bt``$=x;_y@1_zg4gWmabiFXRaKHOW3?`FP{3X{ zRi*J>4^1r*OE29pU8xlWMaX_X+ab^X0P8)c{Xt$hlgFO~a09=85@%2NJ}fC%|NXPH zhzaW#dF8+#U({?8tVXb`dUwaPqBc$YbwDNu6NZ(22a~29D2G!Pqf&=;82A(=onjsr z8|+`-pH3gnxWS=veDj9mt(x;XoIaZK5LD-w3sPXPoBIGq41pG<++VdA?2US|k`$H5 zxeAKotzL^ROgvdH=$JX#NNkaISg!K#x8E$;cdp&4IAw6$$~u%j+v4k7c_>HFC0LZ^eNx7$vK= z%isju*?REB`MI{*Sc3@PPC}mxJY6yrW@jS|SCK0k1)fmkVeOnEnq6OQ@*Xos9kg)) z9f2h=EIkJgs(g_L1y2g1RA)0*g_#HAR5Fqto*;U6kr!z%DWZ9m;3Nv88(%o##D$w^ zD;z3)!7)&`QtFU@p`|X3wpfqq z1V&_K_+oD_N4I)xMp!zS`tL5*t4T0ShncQJ7B$`}E+B8tm7B-{>XOuDD~A2$WP%+_HbCcak^9S6O{H0mpDT~nGc^8%M)IlJc(lxswJx*qR(H5j|RG?a95 z2I9My)Ap_b)3*@|g6DqCpcnJ^6uh)~mLB|mztB=Mu6vFBj}e>Q^}|weGcwuf5r;yh zzo(O7gTxfX<-?t^LZbuVpG^W?Vz|C%vh`6*uT%26?7d5#XMvY>691e+5Rv>;$WSiA z{yAi~0!Vh+;5mrqOODo~7baDnBFl5%C>p4hA}Y1uf6g(> z$ay(0K3ct(3zB+eD1VqU+OYJaP!fgiH6*vn%Z4unR#J3YxVb9c;#m11CbTaGXjF@H zSWCkDHgstvM*0k`OA=8w_tECi+G8t=A`N?W-}L0W1j1L6>ZUclRt5YywXZg{Mr&pk z8LYQ~XuGlObt|5x_Sv;F8##yd8=i#@^AcZ=CvfZb+TJ?-aQM2lH2U!r#_at^T8(pp zsz!J~k=wxOSD4DfMpRQq_j^Q|i2jx3fRrd97j7(1^uv~r>Tx0Uk+7Kp1S1k@bLjvi zbR62&HtbJ3K4J2V*pn(!c1UJliR-3A?6BV5!=DPqUejJhv}?o^W)7y^XrT}s>q78i z4oj-jp?*;fmOisc`Z`@oqvM{Ju%%I8avoD$Ot+TszOybOx{W5q#cQZ0<#;>$aEIxm z{>PapU52q}>pba>i}d5(UT(~bbH{@WuI7T0JRLUl1pT-#x(&`fR>X6keS$`3ByTyb zde{@x8M$5(J3zEZ7JTwq4#z5IxNeO(&AvMyz?!G$q^mTn_NB7ID*x4kb>(ff5h&8l zR5-0-+_%R4nAZ=D&_VfTdQYO_%sZC_>z%jFe?6?<>#wJv?6SJtunMfs5-|S-F zu1>$H4&E?&c~LW6V_jJ{FZEV^d17XJtGr>Ge%*1OaONn{rg5F#_$!%%7Q#2YijNPr zyeiwB`x{b?6qk1V{B@_GH7#55!kOMq_RNtSBDNnJ)me~NSrcDKsdo#p??fKHn0-XW z(Wt$(7c=Sj^}L_6_wD)H`0c4>=CABtg3X$qBS*8gNYz76S@!nC;|$#k#)m)*5t-bR zl$Mz_BQ4B($t?tne1&#n2GZ7v>r?A`xDErOi3cUY(;H9q9Hu6n4cR_EQ-3jV`d-wS zy8g6&ZS=f$He=YTI?ZXz=V{&C7wN-F?wOqc8OH_OZR<|uhFznFC$sDW$Ndh(KRS{rTyqWxpyh=gjiVdC|wGTl)hS)7xJ!%0?ZaRLt%(nbL%!GXwO9JIs)LZ02oT z+LxGMd>of5?HpjWqha+CDfRnCfew-8tvGJx0JlDKW@R|H#ts0sioukKBjSoadZ)sN z3Nx$~H`Fng4FR+^JuM1-ccDr*TP53GMNtYkorp4vZCx(W73Zu{kF5-k6I>U$6^G{> zEEE#RkvGrc*C)&&y`SjlgmmSdm(oQg#es)M6K|E3jL$r z5-d)mxPbt8GPk3^W_@E5D4$7D^M}WpKGFJ-D_H9n904q1)SgixooycdZO+*uc5d1h z+}0s4J40$#!o;&f#C*dg#=~)8pD^wQam09WAAcD2c9Vb%Q|$_?)emb{#wI?F2qO!Y zqt-0!2$x+AH!uh>s}3>giZnkCw>pl5KGJ$q9Yw`#tU2!PcpSm1suhM4?S&AH;u^IB z`(A!L`rT@@&1z(*Sd;~ROt^t(Y$c|@ZFIbWW52RfRI^Rrrx+H_XtEEM`Q<*g?2hTw zw))i?M%C(wx*o}y+W8!QdCD<022r)y(G8q2A>(n4$I+szAp=SQQ7m!g&wg%%p;rqznC+rmi^Xlej2@U}CY+WFz(nnN_hwNq_Nqs9 zwm~AJi8Pt64nQp_@_?DFP+&E{BgK73a9BWBds*O4QDxGH7LCkP8S;j2%O zK`bRB4HJS0yQqyX#)Oy7g#U7OTK!nO(**%wJDZ)-J6*U&1j0UCu>I8%AUlL6{VKEilr!N59nVT1W2E7EO%-sC%sEVW3N@Z-ho=rFiA-u{yDi*CR zB+4xoqb(xwFN3ZPNRCP~)fWyB#n{g&rGYIaL(nHXDW^9g9bX9@A~2z%$r~}Ocq384 zlT|U4Q@&hWq#7q?rtMyXn3)yx!Ja!8d(Gc0j+j5zZxXT0s65^DM|x#f_Ni);Pp*9o zqNmh)vG{3O7-97ThiW^qd~^aYj|nzwLg$s3%IE%-`vh|Ddq@ckEh)L45)+sM($I)H zLs4B5Y`RS{_#G>A106wOpq>Zs2{Pxqd~{=7aJyzujr{_pHfrBjW31%_X!BSN(?;=CXY;Kay^U|-;pvF>Z(*bBusSP~d+{*Nx7{E< z(?&e73aS3#eh0rwJ8e^|j?H8gL?hklP4q zmgw$2qj>4?lIF;Ge7XN&Xx$KQ(~I5|Macvje4Qfh*dhrhln=G{^9J_g`(Ju@e&8r? zU5{7vcP9#HWmZY#KFP_T)f47PSrZ?8ZQgy})*NDAAA6D{PSZ#7q=h`c>d26Pz*Del zJbl!&YwB!hl4y8>XBhD!GKMv>w7^f2_}FdLAPCLr0mASg&Cqb8&!k{{+)AeCvL$FQ`%7%yH;nBx{4RaUYA&MT#5l3O zCU%ddCWpce-YO@sje(j4if8iV$!A=Zwmm28W*+SJ_}M1{qh5iAvf?eDVY+5Fr_qDP zrk%bKF&KW$n?>20b>K{Mb1b2yoii(*l}8^1o|6#-e)C3|_nZFqwf-BM`g|AVOap5q zk97Z&^Lbw41wP&d0riDv&I`hc3!)7R;xh}9=L^!ri?Y0n^6HDvofnl77gZV-)n*o7 zo-e8sFKO^DEu7_z5ai29x)}s58O|&jpD!(LEa~ws8%Zx)s4v?FMaxai@yabjp`qO* zByLwZ{{}XEw;=Iv1RK6v<=nVi}R9WU`61XhzioE(Dw9v~{PH*8X0Ztgu)hg$|SrCG~t4rE`FDx0{?iacF z0{Rt%_LO{cRyiYxdP>%1)-0luXMUR6v|X)oT23<9uV;^u>@|%BdozZ27xsQAU3VAu zz6*Q*S;F3*D4WhtF9%g3e;y3BeP1qoDzUYF<8h7(NYO&%6giT?lX#7=T!W;Twzm_@ z9?cKID|t<*_B-w*k{CS#9GMCsAu?fEBM1Xn@!0*VDg>4(QEI>zg8pDcwqFy=Rb)9k zJK&YPIj@W7z`qT9Yb6N-|Hs4LcZ%~*D~|YR&3`lOt)eY@!5H@ix;5k~>>bzJcdIxP z%&~tcj-~a^ABw}~aHBW`hgBdX28*a`kCPu~ktT8Far#ULGjnehXT5EDH}gvWGCPA0be$!ruO-AD<$_-&vnK>l11CE&3kg z=Qpo7QViE}i`p+}*7M3n4A=8twzr1lRvoOZ7dDFHEXOwC7;U81?b&aX^s=pQlnx5h zZk8n#i*J^Xy~*9In6h5qteo|t-KtuMG}@|O$;{oV*{E3Gs@-X)-LCsSVzga!l8zwejG~mvNaj^J|~D#+!ZUDLWowF-%m<3 zB_zBI^P*xfNU5v^C&O3-f1|3I$4g$Cc&Ztvy$C@y6Fs~z9uu{#IZPduB=kuyWh_s0 zBi@{R^c${kkQbxkRAiVEay*?(NvfHz5aH+yAeShz5i%K_Wn+yN-ozYLNL9 z+y0+hM;HI1ymg`dXwS?+&F!)6N{FsnM<<83LIloR!%N?`j==o4+tyKkkr(?->!{dA zMDn(Eq})4)bJIGKoF|yPX&ucIpC0`_*Ls<^{$sB7CU5;~uC;fO!Qr^)o1Yk3-(rBlx^MP>w#-}^v#E=;Ak#@ed}mG zM1>bc zaJp4@xOKYS2>0l0rxo|@*={FQ;n`j<`}W!Xpva@2-#;tA{rO`|ukh!=l+E_f!&&b~ z=SK@sZ_kfcK!yKh5m&<)holh-EHIvPP}c(ERB1Px=t16usJ7!KxdsLMZdJDKOy@^u~G;lM{-+1O_|K_+8KB%*ii- zVd$}@otgt*D1Qk|m(bKA*J1TwAj6yn;FV)eUd?G8gY|m$^rrn`?JUZpu`Jpd8?eV& zl)5&C>}Cs2ns*-O&f}zo2-B>lhbtN0c^sW6lfQ(=c`Xyxarh4|#xC)xj>M5H^9^WXM3x$1{kv5fzOh*S;~#K9ZS0=RfZToI98$yeMGk<@of zGo@}M$R*1u|5AdC!4fp=Pj6~-BS8tK?h@A$v^D9KJGFEvK?RmJ?Nh62hgTlwv|!ER zmjo5sl6REsl6|gSG6C8TI}H9Pxw=h$QkpqFf9J|ybbFhO%YA$Q9@O3E*qsNu`y4x* zvK%$}lX)O;5?z#U3YhZSknQKd#-f1!c4XIuO) z9?CS-9fQ$8xvvKr>QC<~QMo$C&ByCSt;F4i{2e&Czoj(vYov|-uTvT{Ib7jQ){A}{ zN+4919s4ev??qzh?#jFT%@}#R?PI#Vzo#^SAmgkKn##LM)Nj8%r7l;$JtPqIzv6ad$!l66^cR3lY1HD8>%gF!alSYbst>J;rTH1CyZQmJQp!T^xDKhP8?QnRg>Z zfk^Z>$GD>DSVL{_F;4VSi0HfCA5()`RTcd65NT)U_j>M zzr47NFar3Cj3mP}nCee{fW^g_+?C`OJT4_V)^-CPC;Zqhe+wS}s`|&7jcx0XGn=*1 z&6!OEEH31~o!K@cZ_aG)?)Vnt*(Hk&rPcjXV3%{1MSr2dVBLWb2{O4lvvo+Q*BeB6 z+!~j=0@Pi8?e1^qukyF^4=T4BouMRX2o$7{Vml-Sym$hrsC*ujM5OR?odOt$I-U&S zVu*saSTH_92#CoZ*fdQpr0_bB_m13PFPhR^D4_Kqgz3JahpjYGiu3zIX{KT&jXfhE zEB4EiPsI)-gURLyK$0qg!p>rB-E(1t65~rF814iQkQE1-Ii?YPTWR9VVFGrfLQzIH zdeAWPL&;|~6QAn)(!xJO_(C&p87kTaD10e>0Do+c;~Umu+rCr^4a8SPt+;gGV8kt%<6jpEV8U83 zX^X>o>`-X(EK?8I5A7!&^iuKi>tA5eSPDd`7kMyrAjm$f8Rp`nCZm5%-SZ1}TI{%j za34pU#$z{itrv)i$LOL(T*i6&86+wwKJ;N^7|5p6_{ckX2&U+Jl)#a`)sTFvF3xV| zc&mX_Sn_cE-ggk&PjE1q;CcK+8L%3PiaKfyCQ}~Lhq+B!3}h&u6Iqs&0H3AQ)%Ase zjx=Y?H%kSVOUXOZDgu+z4<)_lRh#A4VFG z>vFNP-I_?;#&Fx+Dpi!B08bQS9m4^C=5_8<~RqniZiLLhd;yQP} z%r$v@n>#-}9&owMoe%m*-{#Ikg34}l=lx}w>^Hgd@+=Xl+uXTw-p%E}Cof@Q#09ze zy`ri^YRiJXYH~@svSzez%er>5Y{j{^zvcgJ(A1`4&XmDxSr%$v{h)%^>1j!aTCbjdGVsThh; z#dw*zJ`w?1>n@?ssQ-tD8}DL@|MHmPO-khYe#$NB^*N;UwN&GM{;Mk1&>7wB=Uiag zr3N`%YLE%6-XEWHO&xz|(0a{{27x4AHE>>6v3jPr$Tn+cz%j+klt|R;*(X;TWQgjw zm7#AxU;F8Js514S{wk)}j?!@cN*~!BZ5HafLahKdi*XH|x|>kEYi`{&xBmT7i_UH9 zzgL58pu}e1zE2ku4QVwwefJzXl(7*CHbm}X{VU`H&!-pJ#;%@gUoS{Hv!F0`46wc{ zKtV<~39>T2fAB0EniEez;CR4|G9VcXE4o>Ln$PXNF)0`qC5WkR=E92n8TK78>wbHP zw@oT3+Qo$qKM|_A7p=!Q`tCvtW&hxN3d^|!x|OHYO9tLby$YD6c+Y?qpPq||Sb~@L)UjAan@+o6=z2o&B?s>QQI1B_Y_PZF0vX|Pr)YaZ z@I(Boo#4yp@VTQ{_#byvq>Fn!Eo1;e}OU1DKtqc(K``fLYpxzOJjEz z!M{>(c~7Sk5i)KV+9TvDvtQfQ#C+3R9>@5tx7_esZ@I$ex8Ab<@4e-|*gty91)ab3 zmP>DX%cip`fN5K{%9|T03j7^{>90n}P_}8OfOl#$z@Wpq%1vfapkdrlui-Ot{} z=+jSAuBN@mR}5e9-7mLt$B&WZW)15uL3x*;yh~922@{mdZF|26fCKX7jabi-U7w~a z0Pj&o?|c+`;E$M4zLTU4K0)hr1?({rZ@T<5jyas4)taMoL??kh3twX$BV!>xVNFf2tR5Ks`m!uew zi!GGrVm{If!zl0Z+ITjL{2UC)a2B6oyYrd*Thq)TH0cXbhVDwM@n|O$WC?R|qIsDt z%t2%}B7hTsL6-8(&>m(YJSXOkbf;+~cW1so1-ZB9zjNl(3L_OOGBv>D6TAjANtDvg z>|G+{3+;2oW`5j|d%3$0hJGRBFTb5gCn|5ry)xS$VQO_#@WS-Iwx7!G&D2jXQ}pVCCbXkK-f zWeKOj`Bcs^a;M5ORq`$?B5Do@f@MncnKs<$+{De`2Ycven@% zg!y^*i#`^mpWK+s)Sz!yNeQ$PWB%HX-7(39n?1Aw2>Df|-t5slNYKqT|Ai=4Nj0(vv+ zq7g$0m-+MD*;HkfN+gf5c*loEQ<7r!`Yb8?pEx z_G4mx0!_*gMJkkVG?9sz&x*3>T$W_d5zRk!VNrf+`^LxGT<(I#skJcAkKhSjgn&aB zA5?w@$X*CNht$x~fQGr*g1%!o-Z31*Wil$({#e>Pp%moxHCQjGJ6OA8IQ|3=PD%@K^grQ>Gc^vr!}#avn4 z<9QX!ccZT!nFgr4huls+UwBQU-u1oi?Bt!Dyt9*ccJj_nR$NX&{#xpKX1MW34lz>g zCWm-}@}^w~)E!#ezsOt}-|uwY_d=;2`3X=-jJy?=Wv^+pYhk$u0SQ3|0f`Q&5A`1M zmz}%^PsAY$3C7c7{$VHMMSs~zJQl;L&f>I=U=l$;BC(S6t}viN&daWnjGib)?e6%? z|1gesYg1jNpn)X5oByz9lq6UGVX|rB3F4RkVXicN-Q~HXg&Iu&QDz)X4+x}8S$vF& z{K@|VML@d0w{YX8Od=tP6opI5RAM5xuiw9b0iPY5BtjB_X9-g2WQEAqz>p(Lo*dOK zUA&zv@ukeUv**t@$YhEq%-Np{%*$mN=BuEs?| z2i8N%1_DW;g?qEX*XEvlQZ|ZmNsO@{dz+}Y#eYWz*XN>){$*DbWbEe-eyxlrp`MLq zs%cnJj3t2-TWmtcCR=0|fRQEcw&|*@V)YtcdA9#5>#R~4rod$g0jMagy!NVx4!{0q?yzdRp$Z0ZhP27fTR@t-JUZT%5QE*=t^13J;W+5>qS@aGeL; z1=~OtR~*2_6mz`s#{^{@azr9y46?=uc}#K238{SY$SlW<^2{*PY_iNX=X|rxEA#yF z&N}xT^v^;AZFJE{6Rot%OtLp{Gvz>8z`c`s%K?4*Tq{SB?p^(oQ5r zC~AbFitoVpo(k~8|6Y73$0twx^2Rfdyz{?D4}2I%M1e#WP*|^p^U6!_J@DU$5B~V# zmrwrr=BJPT`s%mO{`>C75C8n~*H8cb_UDiP{`&XN|Ns6AAOHvWJ2eELVHS}>@6r&8 zG^B!o4us$XkvG8zHn4&il%NJLxIqhgFoPGQUKm8tK@fhhgec^o3QxE~6S^>kER5j` zTL{A$%CLqwq@fOPxI-KIFo!%0;t&6O2*e=@v4}_{q7sj|L?b#eiA)S)C?bG_hD_%m zkJ+8^K#>YAda;XO^kN#m$i)VhF^ppjV;9p%MmD1HjAcw?C?JptRe(Z{Zya78+epSW z_VJE?bfXvpNk}yU(vX7mBO(jQ$3;4_k&xV@BnSD(Nh&gul*HsEEqO>yc9N5c{A4CU z$w*RGa+IjtWGY3e%2u-Sm7$DfDOV}WQ@XO2Uu<9lRfQ2LK#+I56NMN=p$1{?SzBDb8|6lbq)qr#j8a&2+Le zn(y2uJl#ppcG`2E_mrnT!&(1NeEM^r=*%ZS1sc$Q4%DCp1?W2asZcXgF(X>^ohoLr zidoEp78R{%D(q-TJ;KqWYDC^gMG8`qniP!4%LLyzdeV`i^rbG1X-Q!^Q<=83rZ~N+ zPHDPRoAUIhJ`HM4fjU&7_Oz%-J*rZPx>Tbw^{GycYEq#(RjD?$s#v|MNz-sZi1scF zsu>frJ1Z-q@sA#A%}Nj!$eN6!RKIzWQ~qfYqyD`x;on z4)(8yEi7UU%h<&_RDu(&XViI_QVnBizMo~-&4%5KGBqm%Bs?c~+_`(Ur@Inc? zVT5+L!VJ~0g)>az4~sa&B_6SfQ;gyjyI93AZgGqS3W|a0?y~goM?G}RV|(}lt-ccl zTG1N4Gx|;)^FZ=ClAL6YPE^VCP{%q_F}zuv7JRDU$2?Z?T8biI75!-I^Q_#Dd0>&%x66N`Obje^Pgpl1RIlVfg4q;DrBJ! zwK5usspv0#_bXojJFwD?uJ3%skp}U;)qxtK#VEp%3R=*k7D&(#XVL0FQ<-vKAM!VSJ~gztN|Ts1UAe0f1NsKTwIaBEvvQA~@Ac7e~NvV3Qu z4k}Ap9NYh%Z>BNLKw9)e*5YNgr;#wibkhQ^s+fl_&MJyo%tIF9WHE|vsVc<3@t zI?|V3bfq_)=|_LM)T2)I6GPqVQ^$JMg`RZ|)_AgE1K%vrY})sh{nWGgot1f^)|PI& z(ba}~f0>Nrx^p=dV5SEvLNSZ75|i&`9R&ii(AIv?PR<0miq z%18e4kk35jF~51uTi&Q#MPNk~ctM}j!px^d{pn{x!gkLizZs15rc*w6p}rho~@fC+ej2e*I_*l-e9feko;4v2snIB?&UKoVqeAgBr;s7n^7R>hmQSBFZ(NlN$wO_Na zQDr0x?7&_>HVV(vZ9m30tFTe2paxu&c(qW5pVxVU7>I<(d4=eChM0(mxQK(Oh>icq zh?SQH)#FtcL<{THUj5JuFSiP$re5xqiSX4-k+x+k_kQ{%5B7z7_@xdKWQjY+Y8S)` z^w0`{!V2WYYN;TL_~Cm%sD0k&i`d6~!T5{92#m&9jL1lg$~cVRHxbE}Uui{tqOb!iKkMy{Y{y2~TiGc=5ToDIR=OhN9z>vM;kPQh;{X}IH=|B|8K@>@4 zssKVISWTb+2ABX=VSou>uuO`kRzVkqR=AQ>_=GIkgjeX2Eg6$E`I0I*lQ#c3g)o_u zRY*@?2T^4>Q9_w^L^+gT=v3WhRV;;4&el9A<&8=Ch*EioQ|X9Qd6ia~m5`{FRk@X3 zIf$W0iLG{OK2la?X;#daU&;7Fcy)}+=$6A6mvA|kYe|=HS(kWum&(|T2?Rd%*MFS_ zn9Rpn%y)mR6m2)fU7^%b+=Wt!6m0}qkC7>m1(}bMS(*QMnVLzNn;DRvd61dOnWD*X z9XNW(6hRM^ny48=4Kv}Byt$jc*^{~noV_WW`&45Z zp+#SLRk@@`iOHB;iIvIuoYEPc)Y+BR37ywDo!MDuk|=rcXq*va7`EtF$Vt$Xcw&s;tRstj)Tt&dRLP8m-g{t=9Ui*gCD( zs;${tt=+n<-pZ}w8m{CDuIBo!=sK?Fs;=o;uI;+6?#iz68n5Mg7fMlC5^+Tbqy?nX zuc1;Zs*0)tD=Ps@G6S&%r0^pO+X_F@3Z`N)58D!9I4()-k zY)~bnFe(?zFBN;T6;iMep%nIlu(mJ?qe2E-Kn4t3Dy08l5B6XSI6GdukpQ;}tFF2( zL5r+G>#D!XF1RYR^a`&``>swquT2ZJPrI~J8?{s`wOD(#T5GjjTeV)BwOtFgU%R#F z>a$795mJz`l#(C&;jtUzucX2>q96{Mpb4UIx0+x*h#>`YJGWX82`C%5;i0k*aWPU* zC?ZQGRI(rvu?6cu596>3<3JDomAAVQ1*5PI?C`jwAPP~C9i`$ipwb>CE4ZesBvMdm z^R>FG0JxaTx~r=Rkw69-3$b^x3HaeMr@On5LAVH^1Xx6?_WChOF}%WRysB~*TQIrv zl?kG-WaE$t0kFL6AP%CC37Ja|qM!*|z#rMMu>t=ODGp1vVq3oCd%j_dzGIud?7P11 zYrgFZzwfKQ@>{?3Td%Wo5wLkOi7h zX_}w~`2i~X(F!h03cAa?9NZVa+YpAExKlDEwxw4zR z;;;$~47sB4B^ZpmIg7CB(ZN6*9{=jETQJ1!@hPFAss`M=3EaHsabNyLxs@gg5sd!1lpFa~ezxmutJV{jeQ%dqN!yMr>ou6)h4ak!=OuV_*y+$+hY zf-R}b#GvfS)-ej~fNAnI3V^ExI%^B;u^+XI&Gg(Au&fY2E3~m%w6p4}vYM-B0lbb& zxo!N$O%esz`?w12$@ZcJt#AtplD0X!3B&8hi2TTke9;=6(Hz~#8|~2@jnN=I(jr~0 z!`l%^Y$qzM1)!qRrm_$bAO&ME3S<8u2{AniG#v?pA=5Zb)0*%YG)o4OaLR^K&qj?E z_dGRPkjm=uBMH*53_G&knHYsuJ(Cy!R&6~Blhu=mF!}q{M;+Fb!62)gAL>!oD4f({ zz1D%D)&nudtlHAsEZ1~Bywz&a!iv`<{m~`O*M1$+f4$d$J=lU>*nLgdOPi}~z1VEx z)x)fCai-M!vHAq5G`9%lk7@x2A} zogS?4-Rzy;Hu2p*8wFKD21%Q&%KO95O59)Fs>+JA1 z)*2xJ?_Ib*GB8o_;U69eQJ~Wa6XK<+-zc6E-_0@ZO(hR8%fb9z=)np-P2-~=1r4(W zqu_h2Fu}BH7AYR&J<;NS;t+*$-zlTIs>{v?^t|%*U*hn$v&^{po3^BY-$I_^mTlY1 z;@=8lt}s5Vxw^cRyACz{#?re5;;^}%{9hA{%Goh0?IFI}5#SYm=M#?S629ja&gXjG z=ie&b8=>LwT(}8BEd~Glg3WxuP3*~w-n?5dUKac#5-CW!xPP`sL=(--u9ZtZVjKIN;9tW%ilECjcUd7{%)*I~X1RvZG#py2Y z5Mdtb%S`IyAj7Y#y;*QTpW9V53nb!>!3DqZCxPol-VnTgp5dgB>xB#I(;^8)-{S?$3h4}{Z@UWcwhlCYF>0H_32P5j zPV*eU=>)OA*1Ql1JMVQ834d!ZQo#2jt}1`81(_hb_TtAfZ7N%!1*IbQjvw!$QYt^q z+e2+9ldRs4pZO61?c##4qk_RPJFbG zAqA3PCIAsY;6Q=}4IV_8P~k#`4IMs&7*XOxiWMzh#F$azMvfglegqk^p#+Rl7D|~! zYSR`eCL@T1>9FON054;PjKY$omYY3&{sbCS=uo0XH%{S1Y7$bVN{rsz)T$Ltgc78X zv`W(EQ-M;**s}$8Dp#^)&7MV@7AVP!S_8P1poA1BE=ruDEVXG$!Iyn&28fct?@Nfv!(5f>%mp z2OoqmLbL>|sK9~9TPgtb{yJ|9PB_uB586T!tms@Rz=F2OQ;R^U8U_Eq zFt=c-ps!llgdnR}k|IzGB_Po=QV8Wq(iT_JghD_k%~QZFTCrsl`Sv5U)gdcwRnQA# zZL~*PH?uNVU3cZRDvTcUu#^v#Fln{LQu^>b&a@bZo^{|{=UH*G5Ks;#WSgdM9?HD77SpE%&v+GRZVGn=~N?cv!xzeNHGaB&8(8D7A+V%(8w(W3sb6A z?t53rE$;LOEKPY*tX*6QyeigIa5xs$xPABbw-Iq;Z5!&BhQx}r86^p6HPEG(QMO{Ejrz;rN4TDl;B5} z9+h<Yy>Sh1}hNClF>ZpCe3g(S>A1MBYsGjF@jk1s^HZOn3$ zQB!)GH2mFmZS1vn+izEkLW+3YB17^vd3vt8h~-3*4G~|59&tp8f?0Of;dYedMUit1 zap)OG6C`+(w^5fQZ)FV0MLRIF0Cd!>rO&D2_rH{5K3}R$XtU*CgAyIfrX|U5iAl}6 zl7hfmb|L?Xj7j+F3MqV%nJqjjO!TrGDez?>3YLpw;0w~ZXksn|ZP5RM0b|7m>4ZBH zme7Q^s~Q(1fjK%|Z3^g_Le@kSwkV8k6`5$0w!|@tahypL1Ca!iY$Pw-*sC4yivX$; z)D{1*j$HU*7ouwBnZgm|a0AhT5;12%%&p5HiHlTCW;YPpKx$H(i9k-M$e;_|<~Fsk zM;inZ1u|G}g$CIl8CIk&&AjbhU^-zS1v$u!=x!pw%9>N+lBE#shZD-;ja#L?h?Iq~82J*A0JnTji6JxA6Q@GU zx15p`yky0?aw!#fl}2*wBGkpCpcvY0s%4288Q>bz5;o8*G)w;s7y^N%#4%`rPy*b~ z#elR0o~Q1S+8r@BiMkLZhI=u{)@W!$9GYzv zJsbxs#xaT?GVzE7$)^7@BR>gHQEyEg9fEWhxQUT3Nmp!Lsnl%nfV$xYZ)WY@1B#Kdtf)(8QixxUarw zy4hd)PS%<9Ven>?QXr5>)4wM1vOk&`=4fPb3=HjOk z6rcnvPr|$cjZ+P;b;C5a=}cr=hl;EyE@JXV6aGn+yzJqmneo+svYJ`V3Ks#vy#--g zNDY7BXe3rF5sV}K-$0_08CD$ZqKv*XGvPdyAm)tA@fGWLR*O;DI{^8D=UFe#mlS~M6n9$U2@l=pcZd*T_#>LZ$)A1kC7l{ z5&=I>3XML}eptZ@JF~U9M&c`81u}+4hq^z`lo!c3hrk0F)@8{hjKpx0o{<^M+8L9I zxd|w5GNP){wlTNI$Xcs(efVG#Oe@I_rtSY#7u?{QmB44|vI(hqX$x9jNRlMJ5c3KM zO6fT&=CrnPjmwtf4Y_#73u5s@KIF?7H;8~*eQ=hyd?+h7`GsR6BqgjzSf$92qyY05 zzeJMfJ9iDwa_N^`8fNIf@ylb5{*tB3{4}gd`p=6#;oUqLIY%dn&xsBjtT!3TR+sYE z#qM>ohrR4zN4s$D`H`x{kf|<*d)(zd_nyF9CLixg%cvG{ywja8eg}Nu1wVMg7vAuP zr}(cXbM~>D-SKH>eB>YBc*sv)@|DLt_tlVeg5|!Emh+HE(pK@3fKoxv8MosdgXbE%ITB=8acfKA26vbbAc$m zGetalCc^=XC(5@|EXBN|vQa#xL<_`Pv_+5L05S-`GAM%*D1$~kL%!IAXz3bET8FHP zf;Su!ViX4kT%FMoh(+@pxjHP*Xop%D1xbktR`8a3xtyiy4{IEQ$N`Ojc_>9|Fg=r$ zZ@ZW#p`g#n3{4TiTck(O8^oiUC6eP93D|-|oPY&DL<&%V3E+Yf2ml4(K^kO-Y$2O# zVIJpc!#7D0$(bNGqA>qm;$6EK%_K7G#m&uJTo*= z#%3fa91I&iiW?*OEw8Yg50sR>xfe-MNs#%oXatSiXts7JjPVJJ;bOPM*@CUmf>Q%a z_#q;lkjHw|%hkI_R4fQ$k%9>T%nfiFUW~yqd_;ke9(vfdXc2|yp`NQ+9!(epabO4f ziUPj+Ca^dVsaTLugg+)R8RD{q%@_kzp$fgawoaj`H8L&vW1=~8sEr8#3@Sg>+{@h5 z&7<4`U-V5FR7C#{*a8lq0;W8};Nk001DX8 z7UTe@p#lz=0xswRN7T5Nh(yX{PUeirXMs>SQ65V=pqKfu4FbZe^QE8Dmm_?o0I~;r zFru*d1(u}!q1d%AcvO}*N6fH`RA7P8Nc_=9m7dOHU zZ91m-o3sB)v#1Mc(`Z`Vb9aE)E+Y|`g zw9{7YKQWwuE#QJN+<+-)N{~}dF>tNtan2~<8q`{z9csq3(S(U1g)#69@_A44#J)MH z%k9g<@1(6`VhOAGmretXJtUbSK?&W&8@x6RgEM@gB@CLMAj41yf)tRUBe~MnR56K^ zL9qW;;KrI<#fU|qmP8oJp@{?tAlLy}8Y>vr`IbJ)(Uj%UA5~c&ZCRFG*&Zy)i--aO z)0vj{2MVNYwMjTWQkk`aa2uR&I zDS(75phLol0>Aa!>gy#+5t;hfLju!@4O3jjy^s+CARB3ke=*$19Tdi0T*D=drlPFI z{nWMv-PHp_0wlm&4c*g4-CcQG*T~O4eZdwi11_KdjGMZw`#E!Z3Err^%HX90ecAut zjoILJS>c7*;WggkE#4rth!h&bS)J7hNZsg_-YI$8S6dBQ3M~bYfPqW^r<~sJ1>f)$ z-|_XodpsW9YeMv$r`iQNZXp9D)rXg%F&5+;?*5LmRR$~rk z<1}t#p4ne~0-mWUT)L11@7=hblZcTS)nZH$O&H>ezzT#3P4zAnx9#t*A8L0 zDab5;C50BD%od@;fhfNuNf{eKf-J5iIwV}1$mEBBk5M)VeJSKaR^`o-0=Gk{9${iU zzK~S_)@4kSH7Q(t<2U}$7y!{5AL3FW39`}=l>KO%Sz#+ck*tmSkxpFYXEx%tU=1lq z3PxTHF^(Ges=Y~amUS2h9v%m3;TLx~$$a^ia8b6K$uDQQ#NY!TWkZ#m?9hm18H!z* zVrh&I%SkupXEgTbHSTAC{^u#1*^(dyZjhR%5{Me+1YvohfD#kue69bmk+!=LHFyD( zkI9o+cEBvap-AAWOItiN!yIImvvC9}s(EftKyqrtN^PZ7z)C(o-Q=E*}4XQY!u6nlK}%2*4i; zd6fD%r9Otk5Pl2B*(sCuvy6I7w8YJ5H7Gb3COaA1{DADmaX7Ut>M15cyu&JVKa9W z5?ZDOG#fKb2q&#g)&iNuaBR_45{-#!DJF6-`AP9Z7Ygqd5-b_4(0V&Z=7JExqg~U4 zOt>V~^!0La6KZ*YJ&V_wsZn_l@`X zj^A=HXZVq~Q+$sQfhYNtSNWAM_!ZYVd4k`c>0K`#2&Ut~-Q{?V2YH?6`JDH8EL?Y% z7y4T?c@)k#^VuW@)DX94`|5#~aZbqT8z z!skHh@bvy5!kZZbxj&d<+QYbSg;Ai1SciPZZ~LA9dCvd%p8tHL5qXNpKEFT+Z;`0a zV6G)Kn`mJ`=}E2Nj+Rm2FU!X%ICJw#y^sGuzmrK;`oxLHvmBj8`wToW6?bVzmPma) zcT2QS`$PteoS+kQF|FwrMa9(udKn9_KOawm9$iasPZk9X4_rFjPRn=P{U{?kQAq$d zEjY@J$3IB`(*DZ5Hr&Ym{-Bf@b2fehhyVfy5-e!&Ai{(S7cy+<@FB#A5+_ouXz?P( zj2bs`>{xNsx>e)0L=hMvK*^F3HnC#2O590>5;nDJN2cV$2p~hQ6O{?%s!S22tO_X( zCqXH#>}@$Hfs`#)Cui2O*>FoMTbm>VkOH+;(}9wfwn7@} z;KNT!(V|@L$>NHkXLT<6d+6}S$7e1Np8R?9;?<*HpZ>l3`0eMjuMeO8ef#qDZ0i)J zi54?1mKB-?dF7ix32c$p7@8SGV^!Dzr=v-al9H5k1%1dIRGVD6DW{!!`YEWPZZt}S zu(>48hEYT!N=T1I;$cEFDR(17I-NGkIH$21R0L7HxXwHwsiVb&MM|+nTYjR&3PC}V z2&9lll9d!$NJ&9PJ!Li7N?f9P`z^TPiYsoG4h2R~cwI`N2`eE*QWz_gxdt1lNEDZu zp*2mqU;uGusOxO6;R&oda~}4mJ@zP<7IvKZcHE)uG$kK$$|VY2r5L+;S&qWp*W7am z@;kD~B{O((f+>@X^2+}zo9r^nFSk6i%r(b+^L-&dI7(!=;wsW8k7=^XVGM8ClWlkZJVjy$(I%1S{}30k1ib7TrZQ+>e8%-PI;( z9lod(wR9`cZIcevrpH8f4i=ECJS#WsvCBR??G%w((iY@6jq1=N%_s$iW}QCbjuF|q zjux4$;!;T247L0!;i%dxPQ8787F5i>MV8VBISaO|5>xA$S*4eoWsPjtzCQcyyMGtm z5^)7umtK;}O0NGWYEpDpYTnB^!@45Ckl80rnV3wSB&UUO)QM<(+JYp8bDP`!yW3d zhdKNq4udEk2W7-WqsRgznA4bXj6o7gdX+d1G8WH}VhfuXgVwrd5T+rIOs9cbi+=S* zs6}9kt&mc+0^&GK@zf%hKv

NYSkaG=0Jdr`u|3Y(6FIh%BiaE)4egjd>DCVK(iKI#b0w#K#kb-oj75$D$Q#ziA0+EL`^`Q`PYSWzFw5L4%=}v>H(;n)K zTrA9HJ@q&xDWp?tny}(I0V>t0Qk9Sbb;y?1veCLArzQ)_%7{7{gh*XeAtt>DQx`U( zwd((PKYD4CCA0qM)a}|87 zPX%Pb$2t~jC#3ZJm2#8b-g4yj#7BZ2AgQ;pmsBNznUOV3X@>ei`@$XrI zD}^a!Z4;B=#3nYO1h?!*DY+b>fk?r?bwmhw_|t@Diu1piN;jPROfG526Jj8q1Y7^I z9L$JClVayG_qi;Nu8U*b;u*u3J*MRdQ@Jn+-Iy1>3h3rn^t;6qod#8}B4Z-kSdUuH zYIfnfUVo#^-}fTTd*@Yx)fO`eQlz(=EqqAgPNRt|u!c5~TvS6Urz29Z8EZlo7j;x9 zYTlAxuJ0ch@p;0+uK=AqrZ|t5+bQ1>;5`h82=zI=|88Vq7;Qd@bf! z9P>4Eyh+b?YDSyk+yb%_Lz*Zc8`mgqFS1#<(hCkd)S+p1s4aV}Xrsx3M?L>)jl=!o zam!fTH!!-Sglx-iFHjK2pu6+tw-7qfcGa~`SI6|$^q!@d8}w} zcu(QL=f!lTlb%q^OmL;ekGb75+QwaM7U^g(|cj z-vEmh1`E+_LAKD5*#(Kl^@eiP#2Mkp+qs4L2*l{!NE{i&7%Z6_Y0boi12y+4$TAYJ~a6!^31ll#r24zJj{Yc_0 zPUAcd0MbLjh{H>)!fJ$$+1*}uwAG)q6$>d%@$F0Lu}$x7$)U7DqC`qs>0DYYpdVff zDU6*hjKYl^ODiy;EJcbIR0@S4W72fYK#W3EK$#&%BV8$gBm`kWZ2}kcmJu#Q=h(W$v0A}5~EL=%=mDxF?~-!6FvaBxIvNT%LCzMAbY~O~l;T%#k*6TvKq-hOo+TSQtxw5!=nh#j%V?L8hX_T+74Jh{z@0#?AiyEPxr9`EMB65R_VCpW}$qH zyZz?UIbvWamO(M)vr*P}KoVwjl$mlAB%x_Tk!hGt)|)=o3A&=KWk$%{shC1mp4ytG z<>_wV=}N)rW9^2WvJ_g92BDDwP1|NKxQhf`crvrD(yT)kJc)$IvTG27EDpv zaBWy^pvPH(R;eATvMOq$HtVuFDziQ-XQ^ecR;#rZ7Orl|TfM4XY-_6~1h-zRxQ;8i zmaDlA5~R}9IyQ)A{8(rlYqZ|rZbbhQuSu)D#w)butFz+kzJ}!wo-4oxEc;~ZEOF{w zg{#0OES+_pj)|Wkd5N0N$X4kEt}3j>^2M*tR7i2x=51M*y%cG^Yp_bCMCmEAf+#6~ zD9_B_O{u8V$q~QatG>!?zt$|xnkBWeTQz2pgsK-`loc<|QCy{4Vc|N|39;P8 zwMd=6RqVw^?OYJ7pj=CrDM1ii&~M6_U2xOB*@G{H6?@`^OL`)VyhPR!tw$V-7E}c( zsIAn-ZS80tm;D$Vxtl^vkG&iQ6d>&OklsL~p_4Wl*^WZ67={!?5X0>SJ8q2JKJJvH zs|s$OA`nz);Lhfq%V=DincV-+?a*tcg;+$@pXeHji;hs~5RmA0&_xBSt1*r!WI;z! zM~Ec`yjs+}zQ^rqhJOCW&BiS7&TR17?C?6*ziJ67a07Z#XaIB`y)hy|l#w}pktnF+ zOq3#(7O7X^As?;9>J*;$g~j#ir(pS(kvbuV3T-J~pV3knhinlZ>1X%G;Ed7)*Z_}( zejmC_ALRBglu+&IY+lDQBDHlaCrASGE>NBvrqyM^9f_eOrVbv_9n6xBcdo@z0#GR; z%8`uTdP?a)w9y8W9ZG-%J;bg6A;oQMum}MqAk|3Ps3-$In9}GA-1;vLg9|lcp60Qo zdhOYHZGjSOqoojqQB?m3iU`HkvbeTygLBmo?B<@?}xCXOL*lVP6B=aPZP7oYjFlJOvx3rPi zYLY97a4sf{>7Zv!=vvQg9gEBtWUS7OP_#BHUbdj2SFsr>Y-bHqay+NBs8k~ns*Vs7 z1TiN?5+gGijUJCMsaPzZK}hlNhz(e^0dwl*8N(xUvH^ZJA4(*oi9AlC38WW-PsVhI z1$B)S#H03I3q$(W!#S)U<$1=QnvCMZ>6jNUUBp;%ic0&=W=E5 zvMy(Ka9#ffj_H`)p2b_PR}qf2r5LkN#2&BgC|(+iGv7qjL@{VqC0_2MZ{fs~6_jm% z#l-M5@SsRG#8>i2$TXjY>u8*s4GHSZJ&na$=`VyYd2!;gc_i-Es-GlqSyKdtAZvycyvxC4d8!oK;qk1p?S@_*UQsgD zdk5s`emRh$Nt)AMbqElHyLo6Nk0xY7o!5DvfX245Q3%G_dvBWqj=46aptsT9)@Zh6 zCpufKxId^+j+quKzk+NUq4TM^V)fyk^F3gmt;)RZfkj zD>pi{GrF`ZdbCsfc^ofojS!AiIe4=8zz=wP^0w-0RrIHP2}O9KHS`nW=w`im}pVh7w~8T(9Se!3q>~Dc-u8D9J*0(l*#KM zG1Q>G@N;@ZU}Qnnj}Zk$CUD6pqlpwyhP~u5TOYFjE&osqUd~1GGJo_4l0ujSph$?4 zYi!kIo4weZKiQwX`k()RfP6%Jt|o-Dkp+%_+t1My^Guue^(XmSO$lV(W? zEu~GnN|ZYe%&JF zE186?$ncCRPL-%tZZ&B^;75*TH&*MSKF*cwQ-o!M6HNJSYF^>vh` zW1={38esC|oA&9G&VOG&e*gUefqA1MIzJQ(W)*aM=ws(2X_FxCD0y5ZtAK z#wEA~2qaht5FA2qY22OQ?ruqNcL|#OaCb?tq#w@tpXZsWns@VRYU+H0UA1@ZT6N#o zwH6L8Zx1>Ne7Xmd-dd{{#O~)Thr=1o+lM3AKi!8fyRFrar~K#)CsxJf8z9z$6ZU2M ze6UN_cC|Vw)9XixIx2DpL^&2>GtJ<>P!CDAAT}9Y4T<)MUkefl#OAk!&9@}VA-|jU z&G7RvEKiI*@4 zG<8D?=2?ZTOoy6%#gUfw$HNEx*$;bJxQb5i?bCjEE=vAh9XZAYNRVEbX}=;fITn89 zkGk=E6$nJpimV6YX|%0}f}O}M!=8PgHcR(d>8+2mh^f@I6+KE^CCod%ZSwXudrRqbJI4pm?9sgCPgNjn`IzDfD^y9Yb1p0sYnt_o*c1UVIDs`i?k zez`kcJ^KbEFg@?#rpaV-nA7N5_nFYAJ{hF{Wa`>XQ!3#)##(E7HAeh7{d`K6z|8F% z?z55Y_-k6Tn+2oyKW-K+~s3}L-HtM`{jDdhQ2eIEH+v+T z>1ze*kx;)q(YTsymP}Lk1iapYIF?jhoCi^MMvLRkU;I{_!VN)jI0D=Bzh`CQ)5ldz zrcu45Exch$aypRmIYe&R6{V8pTW#0v&tBuM3C02!{w6@?Hrqg0YnvjmQAF(9-eKwJ zc-hETmY}>@CIr8|4ZT=k@moY7AvUHxXDED|FM++mz)q1`l`yd*(MHk)nkdk<7Nl0FWPjJ1w?C0j@1SEM4)+RbD&^EUh2Y;O&Ra^__Wb8fK8 zt~4-{NWs6~On3(E0lFf^nG$b5o1mg2;6f8s=J2sIyTEJkQc*6yl&*#_lx<#)z{P_3 zWBw%#MW$EgzO4=M(PnA>cw)d^GXsRLpWZvjoA_)yDMIqZk}&-CJp1znbzqdrHIGEO$47#h|#NN?Ar24G5nM_0_-2{Qfy` zYU`JjNQ@$K)AbU&e5T5Ao0^UcPQmi*LiP!nGMHLuU6|O<`5-1z6|!{|8JrKy3Z069 zMdHf&csF$DdS2|n&xmrxu49DsSmBq{`_!+2%#KRXv>&0p4*3tv=58e~Q8dGEuvCOc zAZ~pxXqW8wnvOEU*-VwwPZw}JyKO?9dJ4bcH^B7OH!X~;vfy|cm|i+Evvv!@3Y8@8 zWlAK6QASTPh@tdBLvaSxs&Gk~521eInA?t(VodbzZ>r&^6&QKfrFHs|h?)^X&CJLU z1$9~EPVkIW;7z~323Y@qS>0=uVj#FexvHo7ECcBCDwemwZ_~)?dCc){tuscF=;oZY z0i|rPz)WoOG*<+1C!28KFAk06;>1y`RKT>(RGaC%w_`n+UrcN&b>|fu*~Hk%#Z@jbe72clM=TDors{+uxTE%~COqxUZGkrIM zF~9`pHAfEHu+`G(r$q+IgkiakoFuK3H%sN%Bv3gj<-Fjp0<5>*2ZqMk&J>(ogSekB z`eXZ zZSciHm^OPRlGXzrlw;E1Evi1rpjaCeW)2Yf>m(7zck1sAU5f(`L zaGLmqHa_14!QM2%L(Q$$1x#Q;%hXq}-+@Q%#k2lfw!fX;n<7iPh$# zEuah4Y*L8fWdsabRALr<-rtLgX4c0pjPtNDK>dmoI3JPvuEh9ge;;j)TT(A&=9UV$La`rTRs2A_t8lcJgi;%qZ!Y%iL zVow$P&B;$Jf*1k3-zQ+454{q}hZW_K>S2O;N2)qTQp`b5uY!d41bbp=;_n%&p)AdJ zATxU}A5U3&O90brEgXr4bbxClZ&~7SZ`VA$kKYQHSCtVyz~Zn$Cy8DN;gjUCnys^= z>nJ37#MPSILnRkXs1+*W_THm8r}7R%M;tjbbkq$kIVaF?NUT~B8?3>uS@Uo$>*{#6 zeNK!SGJGO>0%ZvN{H~yufkXx@5=ezQO(ed2KaoCSm1|d$yq)@&0|Mvr4XaCZ($+xE zWVPhcuI>A*(1Uv9AohX&$?)&9OgV>a-?QN?TM5K8P)44zxoB%_g<$>@#3yTYG{bz- zjwyt|Y2Cc?=l#Q^{czYd+u`WjxlF>gr2v0L=UV$>ZV+E`fd$}sR9sP>h-fvXd%?5f zi^#Q^XxyZr4$Yd$aG@kyT+(=+jWF;HqyA;>g&Xrdr7Ll=445g9m}52q5H0o#qk*4( zYS#hB=>T;f3B5RMDhPlXvg0sV!sca*;2Q}4k>m!u83@-L!-NVR5m9i(4>it@_7^t@usv4_w6Qa0{f>+wAfkwtn5hf)ed zSI7IOEgT6^E-{`earznBzt8OvAEf7$N}H^ZYzQ1H1k0lHvJW#!sHSSnd)4|95*IZL zS?KfPTGCPgs!Rou$VuEk!e)6&Q%+n{RYdLre|pLnaQfZh{kY5-)K3Wb74Ph6Uu_4g z%xY+}7O}F2L#-{2vYSed(1!33VH+hUmmVh|U|xkfMdEUg#{H^umo<32)L?gL`5td~ z<&vz`g;i2e9Isa7la1hum-K@;E$e(Q1OtzUlg?rMm3dIcTOxIb86M^yh8JiJr&sC~ zh4O@4K%E!#$AJW>kt!9;WXZCv#&|2@WL>SV41#+~+QX$PO#o%ycQtY#t!L_V0&<@` zj+U%4fOf zM)#_9rgQ5slwz$E!x(m*8`CYmqbi6c%br$V_amF~q+ereKS#sTv#B{8ZR&Wd{JlKt zxPnuS^V7Uwhk!fXEXVlQI1Aq-5z&`o-`H}xJ%pF-qe4z1#dy>+8}&9Iftkr%40x8G zQ%yrhzQ_pCqrA7|XPV6O_yEat_*);O%69_MxY#jq<+4&_b3)9LQjO~|db@T^`z!oN zt*Ql@f=4fz$K<6OdP#ZR{DThk(r*ZV-&~2|O18*s(T$jo&h{T;RgBImbWRn>=t}>I z!!=&awyGP~P%B1*B?@Q^IG2ffv$Lj?$iGX&ReuTpF%UzZjEk4#bpgI{Mh5FUl5{rt zwqN_|VW=4d8QRQPzd*B@gS8vBU@q!_Oi0BZ_#j><{J3uHfA@O*6+U_FDF3jxvs8sx z%_*$rYkk4B&B{_fWl|W z)xmn0j3_u4>(ZiL}S$s4Wm)D zoJ+M`)S=K6X#w4eta34c5&d}4XJR4w_=l^Nz%NK5jF+p%4d)u+_CmKgNXP7jRn7T` zH4oS96{zNs)Sz{wwZhWGXso(wuB&Y4x4EN1A2qN;Zc<-^<-M)MwcaGS})9 z?_YdEx*4|@{95Pxh{mqRslmFQQZhIf*0-lt_lxfUq& z!=t9n_C;}`AQ!q$CVRDE`Wr))n(RYPkt@x@l&GcewUnyg0~+wgSyzH${QY>|&^IwH zj7p=XO3N{txtL`o*sg0s>PdPVR^A+nNG1_`pVoTdYfTR=7l;P1iU#|XN2f%PVDnRN z5arBsD7)z;Ne}L`DI7XkT>(Bok^z#ac1S%AgQ_-r1RU0(gtI0GyZpdE7!a*OzmknX z^?^AWURW%G$Zy^*%nXX&#gTSpJ`{VMCg30qN9W1Exw8&fknmS zkYuDO#%|ir46|_&PH;JfdI;JU?@c5PM?e*dNd(SWj46L2#0+#tRX8Yl9BRc89eS`L z9l|Op>)GNDnx(lNzi2ayJy%pGR(#vZ{1!3qtmUlp-{ZV-Ar-a6iC)M(={Q+Gn@8Qc zGPG~}y{xS{!#r`+VA9ZHhWPG^?ADzbpG>;pVEWY4Q`MRT*|n*g(Ox<~BW&CWK4oLI zOLelJG_IZzYntn5QhsRiM))!MHXDi8s*31YJnTC;wY>7Jd!5ztzB7cdv&BU`-1ni? zTfFUqZ`((cwy3POK&ti_@%FgR_Kb)2H1UoU-;NxUj>@c#e5%fB@y^=L&i04SR`IT8 z->xqvT~QCM91oC#4>GA5r^d-&NQ%D9nVd?9e?6i4dg1%!=Hbh4lP`A<-~Nbq|1jy^ z>+Ifn=sxTGhUM3TC(#4U?je-;_N=RiIlG(Dw1=I#@3~*E@LDg;S|2BMue52ukGw?R zUFW6waEY$OfRV&OnA?CE_28?nfwvNacBX?akAv=OgWg?(A0>u-sfR!L4TVb#N16^N zJPxO<4QF%>=SYlXQICH18!43-EjJyl&mJ`L9c%9z`|>!}BQZXZ%>*!U7A+W`c^n_| zn^^9e_~B=ud^fR^{TdAoK!1k;LI?a;p#NWi{(lAfUVGKQfBOAKo&5eM0E_2#J%r5Z zb|Zqd=63V{y8?Y)yF!t?&pajFm}2LF&}&+BMuaR_E`*k3JP%WNxMx)%nuF#k2>Rp% z2#q-paX{aArHe=*Wr2sXT|bQ$iIjj-G2yekb&1)ba~kFP*gZuKk(5xTtj6* zCYdc>H$;vk-w`^#hC0V8&}!Nxe((K+_AP)pkB%4q{M1=OFr> zTVXk&Y(VsisC`S-#P^%rUHm2CKy-eHe8YciVSL+O;$!LW;5Xfn9zmL)Lj!khY*G7 zuE?Y5koU0}(jzg5ib&1JZQ^CTqnI2miH)a2NQu zKq!}W5b5fpHs?!1OfKu$)Rxko{IaB^H5aAYyAF3_yOOAA^;70?}*vclI6L`x3 zD!<%$6`6->df zmg$98Za1Z})s<0ow)({_L9kCJ6{h*q(?FPFqe&x8?#Cr+WE0TeHN5%enhMf~>XL-c1^0TGbXNNnwED=C= z4XcT~Dc6k$$ZvE+;HthWfA>)q2^JGpP_`H*FBsF)!QKvA)SDsgwj(fEDkRCObMkuG zACFBZi<3n+z|sQEPOti{$Or8GxX{O6B9KOpJG0@BrM8Ynb=!^ozk}DeJefW?s;f1O3j`z|j!Or)l&BVQC5PRwaKS z-H)0ui~ZoV#I+~3dN=7c*_iu#d{63OnS~H~{uxVsUv93BCd@xpb2@upQT%@93>{KP zuYRCnazC3s*;FDtaiHOQKbNO5!X~eNsFQU+U#8Kla9??-e`Gsf6Wd(%R{h9$FJqx) zvbn}{;>f&~eDN!OOI^77u@%+B(y%#hUDCwy8*y=)I{%iYQuUKW?#`8^-KplriIY2c z=ju9sYujq`iAz@2w>^#4j>U;nkGYz))7aLoJ@qr6)rX&tA;MpOPn`Mh9jtOKS0i{l zxWpbF)|+R9d=p#}r%xN#!d)aJ?Vbp5GBQ%FguoT>-<8mEZ=yTN*^kpy4R))Gpf zU0eR!Irfk!==j2uH!{eR|LC18s#&rSJpM8X8$86fyJY^G~ znL4|u31vLN>81j_7Sd}wvB~Q!kuOIavZ6~vKS%22iw>*qI*OZfGqDjL0nU>GD--6V zEx&ijj(>_Q0vkPpEpko+2>g^cd2V}OgEqr7yEe(DZU@ExURcXXY_n?KjXH##j3gp= zgg+5cfB1U^yA#=0(!8I|`g{GQNA%EufN-Yq?@e9Ym*cm!&YpR6(`1Dani)21F5iND=V$9=sn)%A!j0$yEZ9a^e8?5RWF-Aolgm;$J8#%M~Y-`Gl3hF0|n}n&=CqO z+}`p!n{|mv5{%H_ZKFz32$G6)1+GQeDDP zL-r1JfUuqRq*j?F=|K^*I8qb^&?^fjJmY`+OAC_}o}1V0JAS-I!$ z`VDK)3W$nrAE66ql;#$R*VIM7wp6r`u` z*t@x8Kw5Vb%h-y`WP~ba4yCk1i)h%Cu@b}DMqT3Ut!w;`jdgQNdUG2PdkP!M@!k!= z+1X7y9~YGg{PFd_I?({wXie0aD?DY+Qug5J5@xJU$)wGI6BjHxNZ{;;-uzn*ZXq>Q zUn`Ql=B2t9N7$>JZ!WsgAWm#JIzQyXbV#`0TttC4H%a>p>&u7hDdD1)!?|e@=!oaY zJ#_OxKw_-5uA?+zqP1CA{qP^ALeq(?Y5Jpx?$PFk;EH`KW-243zC?pOfI^|H1y+%; z;QA@EYg3js1T~TChHy0kTMM%8$M66ZysPiF99Jlm4Bza0wh>r){#i7^hW0w9i5I|a z8#EK|)Ko+w$%v0{orTtO4G>U2(738r$0f!ul~lLyq0j#px>XoV9O`%8FVy`9-B$0v zxBUm*9_|;r|8MA~(bACiFLZlYo{s%Dy4jmNtSn8ow21fbzhgxZ{lpjUW&k+3WIe3y z{|DVVAAX!aq1%I1ulEzW-A=at8{Hlr{s9oQbz^Cq2T?t)V{5kcl9|)9JEC#WN+666 zt5cpL^_zDkw>q;y7eR)UeAM3}2CIL#gk?Q$v!OKGM-3(~Q#&7bc%N&Iyw)+^R^7k@*s%zKI={nBs>wXr2q~jZ&``Ol#s}jvGw)27U#${jGMWrK- zUP;4Ta4ld>uSO+YKcy@abpP%$fN)~;hOKjgeh;#a4k_`4ZNFgtHTfTOGeO-i{RiEA zQ4i|`(kNLcV)w8-T0sYT(1Q15hDX!pQLL`Ic>iaj%ehy~zuLZC{ZosI+8O+-t>lwW z2s&uB(;4#rGX(p=LXML05*7Xw1PsLP`2;o$1hWN@rU&u_22d^q(%$|H-55lIz`cP? z|3)``dbwY}ojGoU2UFfu(oQj$0_b15?SHZqSKSs-GYErKlZLYAc?E837?U1ZfQvW`5eK_sflOR~l= zsx3XLqb*AHI-*O&`{Qj?GFf!*zE}T~NjyDzv@QBHtNs2`t(m}9K35bm93W1iN6TNKQERK)=!+m` zl=LOFWY#nwQO#9rZ`c`2Cs7fMszWk!yn7KvtKQLcFef`EwA(2paJX3adMsDHGyi9o z-ygJ^iO$xuf4Z?=q^^@+2CWY#alV>-w3B5wLTA%12BI6((wcb#YS9Qfd1F>1k=~PC z!`Xq?xw`cjE-%$KLs`w-HWiqGTznu_bKd-JCOxhCZXz0UmyuUEgKS&T0)q-`GD*o+ zktAwb7ltIb7<4_bVqL5JIDg9l=HrhJs+OeT%F>R^3 zW^U*!=2n>^k?bj4JtM6Cd>hKlJV7lxIbOTvrK&mz9Z0+-=?EO4qct0uq5?BgATrTy z3rY6Z?s*yqJ+(V1PJeT+<&B?+{s!<;f9n&y zs%|^gaFlh*VbV*?67OW=x-=zsqsbG|!WMoR%Nij**e0%U1>? zVk2}y)A8Eec$-W<7UJche{|Y;&ak-m`74ppNFGq@l9kwqolikOM!jAC)k`7Sa)%3+ zs`K6==A#25iqHlw=&X5}_CWx9cH=nC|qFcY;QsU#5ZH`;#clDOuv$NuW&0Rv3~&=H!E; z+py&MuTw-$P>s+Ux-#FItd0N`_g4Dbnmc8m_o?u=Tkm-8g91(9zxJieG4Ett8Kduy z>V_t#-&rU9SbSAXkSzR{#r30$FnumXS=dN2`%d?(6US;l8Q_7wF$s)X7 zVm0vkCHAAtXCC9OGURA2?b+JlYzD!c?y>5Qzj-1C6!~~P^*sL1^*_?kzqgfVpI-jK z0kG{0ci)ll;yxYxu|dmZFnORjsHn(2maiG2)&S^*2ow*}A58sdfyIcBD-O^K zq107i(;1c}>2MC^)eU9q4G3XNj%Pj@%hzSdiwwg!50g1op+uqa_6rmhL?|(B63QoF zvhce^+I7RBnyy~}Y;<75t^(5f^bkIb^KcMw0E*Kq9a7XwcT1HgJD)BMqz#FA*|bW& zAwnqBP#^6efZ*uIMoQi%M0~{Erk$G}(kikFe9ehi-P|Xn*^Li>jT=DD!v+xyk;5xU zx2Bqk7z}i7h`|Oj%1VicnK?=y;LxWZ4Vl(vu<(1sL$;_ErTZefSYqp0GX+4JvLXIw(T0HX=J0RX z%fzd51xfq*NssSAH0h?hl&S3ywU)%_2h|;!-f5J&M34?$c>kUV7RR&^2VpAKM+WYE zHie)t>nMY9DNKN#f5 zj!RIE)GdSN{qD3=qcIi|scE1~utsRzcz)xXoC-kK-V!n^pO6!piPKQnHYXi<8I_#$ zaZk5T!m$Tm-)o_gQm;?UOE%7YzL1Pf55%33F6%ySMZ=+I2bjOmaj)8{Inq)P(aDe1 z+ior^Kj*|=?3iZJPq9>H;$pX4mS)^dinvk@Wd;=}=Y`4P7GMXkkv`2Cw=^_@nUB$^ zd<bjleDdu(?(VGwzS01i^yMm_r~pS<$iZ0@ttqYyG%Z` zA;5tJ4FCdF$k7byfkaAuhd-z48~+@4dM0@{ameA`nSJcU@g^T>#Kc7MHXHQ(`;7WF zWn7(L}*+OE7Atbc-SkGXn2(Vq-M~aS+xp`c-?kQRcoe@kK`o& z-F65KWjdb0pQ!1rb|YaTE*H19`$&eW2nneGY;hr^G?pjBUq~1~%{5b~XxeW}XxOkN-@f37Q?rY56G{16CGcf2A0~A_dRe$=@|LK#T zarZCxF;xjSSY>+8IDSBEq~za%z`$?E%Z!VS%)= z$-6E%rG=Qh4VS$P55D4k)$!I8U&!>j4*xnnm;#1*ArBQ+f*R6cVzP#K_v*N_$hf}o za#n=;8z3?lyt*;G?@;}3shXWXz0tW6R5Npz%?LY~tS_3$uaSV5X0TusRL#y-R${1s1QVgLP zp+-ZYGyCpD?h2Me{%5*4Rdoq8%i5K7n0q2``@I5GNzEUKwH{!E843}&k(|x~x=z-K zmN4^5YlHymAl5lGG6UNOgWf05zz3!4x0W2`;|9g1Alkl76eanan=4qjHP)Rl@iWmBN#KS0q9skadfL{G;o9>am*DbakI$=;DYqDKN z8pKk|k0N2R4Q?-!&}wT7zrJ?3LMHXx^lp^d)BA+4ja&M)w zjYtJ%dbBctu^_zs_*g@93kSZC-KNPv^ zC}qg@GGx0PWZy`ZgAjEe5uX{6oQ#C_Z)9J!3)|M`4jPEWhLD{S1FWat|CfpUdbX0ob7h7bse}UAfIv+OrerXx{^Xl?_+b2hk8MR zSD$y^_W5M%^Dh}po$ic@JKvMMJZ!!kN=uv&tAgd=Lc0vY�I0?9<)K3zqLzM+@I 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 z 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�eju>z~d-&FUu|&j-nHhPPa%aOHOs0TeB=QZT8F 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

!J7@ezz$7G{C5T_*h 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%0DZ;rBKX3l@Grkt*j*bsF2fRsna56{z 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⪙w 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 z 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 Z=H(>IB)>fLfju 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

BaB2nk{IT&MVwT{;lj0`Aa1>VfLRanR#md3q zu&4XtCN{XP2v|&MrZ68F-~uTH5k`pE`eB()4j^4=0b_+yNX_Bp<&AcfYuaN{z%`Ug zh*5~IM4M@|><+|2XI9`!Z3-u-kjI5Ei~)vet`?eVyDrfqH8gEagb2hUb+UxO=LT|I zN{Q-3qskrmTZ@2D@4&T0%Qw)Nh^*R?f};0#ZN|~C+Qt*z zzRjC3?#7u8##x*OQWN2xZHrm%M{Z!G!k>Ao2JU>r-ahcdYwhS3vUOm734Z&jN_PlmhYIPBO4kGJX4 z_h^ZwR*oZ4a0LgFJc@}!ig5L&mv8A(<4|yfV4@4>9uVIV4sSlaEfOSkn=XBb4u8J6 zD~+yM@ZGo!2Pfh|nQQkcI|o+{BFPg?O9GwHiS2=jmi}bz*&`Q^ z2@anP$6k$igz(Fd7tN3>OI*P-G?NXd4+&Rs8HbzCKtBIYoPr!5wgX4-1IL@zwinbMavFk~l0HoYMFCrHq)JRlhV03L#7Lr9Ud6;6wT93p7s*uNj|P zvS;UZLShe|Q(Je2FNy#D%a$779ETSkTrZSihxm=>_>TAZ zk58OZ2YHNt^V-oe!}+X9J9odTagsNuHHxrbx?CAj_wJA(ioc+Fm7k!+d64({asiKN zFS2uA`OFpilBcmE+I0Uy^&><2LNBS<7WJQJS`jjJbZ7OZc_nP3cR$T~#ZkeopCMEW z_kz5ZlHDft_fzkup8t`ibty1vo%zN3s_C=O2kgC<*iE zS!*kQ1CsuR(1eqT|C8{KhVr?N3zJF#2q{|z3MgpsAi{(S1xOIEMbnr~WVS4a$98^8t+ku<;8OpUQ8u+AB{XIfO|9y+F`F=P&6^DqCXnKmOSxOE zB;4hg)bhzuQQ5TeyLlsKi&9i;wbyD3TEKB-N?BE}7O7hGxacl!{5bOD%9k@g$)$|D zf%6yc)Qe12anDV--mg;ajju*hH zRzde2=Td+62;iP>q_ootLk4Lv3V;GGrv+*SX>m|=FXdJedZREX0CqD;p$U3qY(mO@ z*`0(@KLU_Z&=e}lIAd2E)<`3cIF3c!cLjxLRY9>K)X9jj|FM^^{UjP*tMz+ENWk2x5Z?HI#%T0K(K9I|jMK z;Ey-;sgRJHjcHI$Nk}1u1W6EyCHf{uJL1VJBfdaGU_$#o%3Onpf=n1euoF(CU5~vL= z8=wHqMmuB@O9>@lv(;9)>{8EG^lCv>8C%ku6=sU%prlHBrJN_d`ldmfh-#3x$C((` zLekbdEvXhIy6L&nLhEfq><&59s|n~uN{j+((T+cpoT(yLn+U+AK^O^~Y(e@iv`T%6 zCVJ4u2Vu+cw9Y20@yh=QZLFmLEfPDku(r-*GtD{66vY?}OJSk_iXOB{QV)`$(M?-O zwDf&ZY%vNMP}_Bp(n_0Xq5@xDBoQf5Zy^QFu!?P=L{RT1#U^7Qde>}U2dN1eU2pPr zZfKLCMb%0asar!@%q`F+711Tjru`;M@`1O9*qI@CXAD;2`Qs|{j`Y_XzjY(0@_Xc1{x{d z%357JRvOQvYz{PRCGCySM}bSEiAMsNZTI9sO49S`QV5A)rmCM#@AsoizCl6hZ!v|{ z%QwV*??a(I`xgI_@V<$gMCopMt8^y70TQr)#YvPD6lEw*86*i)fKMx4)Q~NZ!Zx;8 zP>ed(ov>Vx6&jfWEBwO2J&i;%f@w_zO`?}}Xr(f*2~J(+w+VZo$U?0+p!xyz;pNov59)c0f7Rc8}H0H1%!KsHo z+GqfNAko4#$m1?Cgh+Rn@GhFYK2GL z@kc940Tus5PQg8!h$9C#k-;cT#uucZix@|8#YY;jm@~Ob*o>)6{^m5NYtiNah2Kvc1i1w`>&%RT#|(5u{%sI_UR?^1eD z)208hU>_MzJ4|}RAPMA;4V_HKjylwpW=#T;7|R6<+6tk#3L$@5CSnt-SOH?hGWWWT z66PlfYkqD-NzD}vD?39?8ia=LM4N4{7BbXR5$uZ+umR@i4dwXlUoq+muEbvIMIG|)g;K~ujnh!p>k zO~PMRI~#l0MhRPJg`G0yq{Y&>#x~YjU*c*V@yU)dQrMIf$kC&Cx=4IWjVo8Y!-XYK zX$wxxm??z0a6OhE}~OJEfKLJHE*b4NtU6Dg<^g>+#_O)=8i zO&<1AC{c*h)+Ab$$HWTXCD=YE2AG*ILK>0IEHO!NNmNjG=uq2Y)Oy2mRif2s@+{#{ z(zFHtZY>-Nw4@-nCJXQ)EJy<>MaYP70812c1e){7fYhd9=-oDxWg^( z;_$Q;kv+&L`q7Fql#M}ca4|dl0ZypF2d6MHNS$!nP9<(PA%EdSzhZn45^1u$UJ^hg z)KZHRooGBfGA3*V;F~1~AWv{f!d$N+N}*VWBE>aP?hHicVzS~YKjfu7O+;UsP5^s+ zB9(3navKFAP!lb>jfp6l7XwYVBG~)sG6!jLNk;20-vN1^%HW=*j%f-DP}7H7!3k2x ztGx+1I2RAn4*5pXB{LL28>Y?}V`@v&~!p*8Ncv%T#k5t5${f<}rg1!T5x$K5Z8 z5Ut={E7lD3kT^-1ftayBu`x?Jmo0_9%xyd|S}HrHl6Ru^r(MGWP|W}3i=0MeX6l&u`0Q zQShRd%rUhT$>Y8CFJkpV^2GYQw}b8nnL=*vlPBSSp6_}$dalxARa#xf?dCr}`VCSB zsEEF?qEPol20{k-VU-*-+Ca(3 z{FRHCTC`P$m6=5v7DN@98CAVaEwBTFcnLXG+!P?np&$+5u>={8q1;)-SX@e!a9(Hp zg$pHw637!H+93l8%k+RBp^Qm8Y=EI5ijq89k6Z*P?v2A#n?h)s^Q5923V>h)TeP@| z-WUXfh|EivVP;swEmhwqA__vF-uMNF6C#SDfDI5jMEO;m$v6m|*>ZIS@UTUp?di%kE}7oo`5k%vNnlR(szCV0nf zxJ|}XkUO}7S-e;d{Y=-;7=SDQiMT>#P!NGJgeI&78At-`V4wgffdXuTHI;=;fupcs zk3F!#A|eDu+@C-!WYAR5Rwzv^7)ZuwPqlGD2o4Q`X~brr90BGJ)p136y(I4F&cM}z zD}bax5)hVA4MJ!ED-;)TP>_j{M1oCD+>G2y0b(sBM7Ql8`Jk9q48&8+jf1q;1QJjv z_LD)x1a@47Fn$!KFhyykB}bUYI0lO|A%_Cgm1{)S*xk?#I*kfRc9v>Ov>Rna?8C@$-NycO_E{{Dn0M z22l+pVa}b-+($L}0%h!xW+Z`UI%YoM#9vWf9Aye)@KjhJlu=PsJ5=J;iv~hSB+n)BI5<{Y4Vk47*I4c*Yg@F@}L)&_)^rbK>Gr z_}Op9(GAU~E5>A498DzVi066UT?Xj+WdbYIP@?=2DP$O9RNEOo5j=(M3|3#Xoipr)c9SfL|&N5KI0NLx@7j1r3CjSbnv{ zgUI5EFw8|PmBoBWf)*29{KY4!-K2r2ae4p5KUyeDeg}Oqs4MUzP>pCSLQ4cVC4=6^ zNQ_8 zYNj5^qXto=UTOddkZLX}PK+w6f@+nxN~b<5l^n)4eyY$EkgaYip~PyarmC$1%&+Du zh)8OuhSaLMYN0slr0P?&xN6W4-;4w+KV@pHx|**l->|ysqXa9bI%}2uORiRlvKH&1 zmaDm<<^0T8n;yii9!$`{3l-GXb&>yS?^zMOs$B^-&=}IC0HIdURO7!o$^0l#fP|tD z4$x*0>_QMMrzETezH9GcgdB!py8>**s;k=ZE6q%7pnYq{CQ!dz?7Q--!ZMM?N=V6` ztIDpdy8s$Tm0%jS$!>%V3Bn!1+^nDBtfV~R!Sv^f#HCI6US6_E4+4q|j-PJ4Wl7{l zZb;S9+H9nxVZxvcW-Q9I!t8E9D_&Yv)$RsdX02iQ9=_l8V-{tlF+EBvuv6 z^h>go3%XI*LTo9|0_?ZA?a|_^&k{@D_HEtP1mM1e-CADUk_&)wL;@ymRUIr%3~uDe zn8~^;<-+Z`@a@jxtK~8-|?27{~D` zt?4pK+Fos${Yn7JNZd_Ts=+Q^e6H|*?h+Z(Bnc>GvTT8V&hTajDa6j|Hm~%m1b|L& z5F(>7rK;B|hcKdUN`Ru~8fpY6iN?+d?dEOxjvnu}1e8!o^sdR-T8Y>itK$N%_gZgC zM8WpqFU_PK|I*0ut}GD!FLDgZt6cBCx^8}0-%#|opw{g!YwnqEp&FReIj>2dA$GDWOJrU|QW zq(p7}+APqT#0`5J(u)5uN(dPe7qH|8XbWct0z=Z>njaY!Zbwwe6RSiN!)+8las9F` za%6Ga(QtMMBN3wTf_^iFCEKqM;wO63e-mF#+3+^8UEGs zyd56j@f;uVN&K+<4sl6Tju$Ws z=nwy3@)b)0MqvN5&}M`tP;)(_hObP<(a>zZ%CbM7A>ckGU9?!(Y_UNAmpz=2iM@tF zFUO%!$nG49m8?)Oy@^v6SLCvUMbVHev{*`1-boCRJ$Ohxkm41$6Mpq`S8!5m5Y;Cm zgeII*E8GJarG!kL#71+1N~yC&FbN>BL}aW~O_WzHXaX#CAxAWp%RSsF|Fctz~^(IETP%0kZULRG4442;}--Ne3=T|SRX;xnkKec7A zEs>>1hLryu?AFQ5X=6h}aq=Oka1dZpFHlNWgf>!$aclvaO0{v6k^s~~T9?F9Nwggk z?sgm?LR5#HrU-HrMSXAygTS_IV3nb~gl*Ks90~yTxOFt5@m%-J?VH5vK}3FquTEp|Il!6N=y(G?67Lm$q!o5ro=={ zG&c98FL@h;NxLkX^h^`|nXEwS@9I<4AfreX){jgN=&TlIV2&_d^5ZH51(^h^eJUlp zZX>UyT8ja7EuNjoO&#Ptx+;AXq^xL2WI@*>z0eBxMsPL^V_0 zL@Y$%+)aiBB7CaN{QTn-7-4OruZWz8_Au{3Yr-h}c&1=AaAWz7##dhWxR5&tR=fF0 zP#xNQV`yu!j&lJibR&Z4632W5GN!p%DEZ^e&AC~~6L$E-BloYCkU&xkQR0cxCV6?dcMZA?*SA~rThg664T3r8H z$Ao9@3H5gzRPDv|DViL$0xOMYZX@lxVQT?7wFNg0dT!^2G)=uMf{%m%?P zkCPdshT*nwa0RidCS6rZR8*1H0PW&csc-UxUufrB-#XKypVQc1YtV%&NYDdv4O-<& zR3y?9!NtC4JA7kO z6NMJ^OjwBEM$63^Nzi1a5Mz1}-Zr%)M$QaTQ{041$LP*#AxNd%5o4SY_KN@gN_jgn zGSvrGkaft2Mz*X%B*DCJf$J4uDj&#poXB5)7mIy+bQLMxqX>hHeiPA$6Lu0sbR|W2 z=~eVc|3HgbFx`cLeL|SN(eu&YIZ2~8J@gyUBs+GZQGACx4^bdlvh~F$+thf-O@>wC zB7TIA{rAspMUc5dR!^F6lmYxargPsA;~a`UuPT;N#rxZJm!QWYLIpsOnj%HYCIRgx z2#_EkiU5ZXAtsR!Weh|m5d=sXWvkT`B@(27#3+TF08$c^NMR>n(?WofPA~`8a)DFg*c*0MCB((ov$DYj`vLz(t*r|mk zR!C`um9KO=5k=XyXr-0SY$@eE9<{>Bo)#sF>Y;XOnL@gP?0IO5AO+m+N-nB%hm5xd z+k}grhGR&pD2gHswFw^@5iA&CTnNu40S#2pK?yC?&_fX&w2kbN;1HwZTp@)FNuAnD zxk@)=h$#Wukdzba1c*=*0PP|#fer;2wVe$V(ht0Gr1DfRxt`iGAyZ?Fi&6$5+JZH{ zgtUvdEu7*}A&4|-r5!G$7$dF-ZBjB(jI*#c3A&)NDJgNGKq|OYSAmTTFr`$ ztK+USi?y4ibywq!Iqulwk3r_`q?_E~=wFV=h_S4C{AtDHcA~7Q%d#A{DYKVt5q3*f zlt^eue_Y|nq~rvMbU z#UAmW6drAymIq8L%JY@2dXUd8N^$?v65wKopp{L_hm;e*4RwvzFE$`9LC_)#M4~_u zm}MwG2V4nFB0#5}7^`y?wBQ9Xn7PlvjW*9A5uZ?H7A>&CAM(-42{-5v38-g8`4d1z zx1c9@zC@{tzZ79s2wBi+3Y+(vpkko{x zC!vbi!j4;*)CQVX5QlKVg<9B%0GI_42{5K7sGC$w1W>Jm#7+sR6grZoHMQwY zgCn0>2Zo}MHFV*u~CI-GCO^eM2J$Pdidh5Jn{!b5>Yv(l+0z~Vu%)$ zMaqA5EhBWijx&*2Otg41qcg(En7X4-K{2|IQ~c@>q9`_RB_dB0M1xTtwnV#hyDNOOOC;3521j%oT8Uu7m7-8p zI}1_PL6jv}{v`~%;*9R5+93Z0fNIV`^F3}$N<;=HVbrY-m7#&THRKT3M zl2(ZGmJz8|e!;@I4_BBd?3fB)K73ubaz|wfZzNkfQ1S%08)Yd^Im&pF@d^7>6D;R&zahNl471l|5c(9% zvb-_~W!Rc6--*lIQuCOPX=OAQa?5a*(VCAbwpwt(PZzB73B|nShY(~=u3V9@u$++` zf?0+tYqXs?cjc6F`Okb(vr7{FXhAEQ(GiJ4N;u6&oIEyoeW#lvio(jvr_D6XHVAp zIaaZc?2w6Z#3e$Ew6u?yY+Pw~6s;J=jV3ZCTWsPq*4ECc%>3kG2m9IZ>KwSEa2jtEx#+N`U$yL%IXw{$0zxGd01UmbCYPh85YK8wX!O^PFJxZ#S#cui{L zBIew43lNtj#cQ*{$ZqU(s7CqAVIK2Ck!2?9Z65>!9xa>;_vYPOORVd+79w}%EGvIs z&u>oTgBEF%XB&FvjF@v=PW{?_Nosy!#>1d=W+6ikG17T{!I?%Kmt?;=YV_T^lUHx- zK}Vo%S1xn8&)xr~asLg*#d!Cxm!;3P`IE{At@mrzWDKV35DhuE@>NSUK}J$oP(E&x zhD3hwZ_9g4F28p-7d`NvGYh7*ixbMzo%E$od=kiDT8^3AYAd%p=DCS$cn3;erGd7) zl6@-Od-*r7*I(*e-F4FspZLY64WNym{IWngj9Kxb?>m-g6FajlT0+WRMc;ovZ(EZx){V-y{>IeOfjRHk*1mEw7 z48`~Gj`aUBkTx<<)kyFKVK4?0&U@N#1CfsC#?Sk5Q0j8-=y1^9a8L$EO$dpw2#s(z z_U|{eKnr5$x3*#o4(14@a0;og3LheYn#nbu0-&DG1WnEa2X7r0R;8qncVGJCutVIVskd zLlgg64t50WBQ&A#uBaxK@rpD7B?j$ulo9A4!j;g)p;!aF#4(x_LK4Oxq{dO(T8Eb@)?`wYCBRJLU$TV~g>fMnvLS!tILeVfib7t-r$}68 zMS{YUPR1QriwuIKw6vxjNTF$pRC$)eIKNjM! z?18i3s;tr~qnd(O9H$;IV_8BezZA!)nk$#c=wI%kB9TLJxP~D7&>^kzDzTC_MoJ3g z#i<-`6#m95HY{sI>NOmq9!jAo)T$|1MW0TGE)wyD2E&eMjA)b$WbtGoF>Va$6Czm#13@`;EyuuzLWemJRHD(Mh*5pGr0o}BR zE=Xx0Si=Uh@-$I%5P3pyq-G3dfB!NMeq81jXA=rTxq<{-rp%w_@NH&8{ z#^xj;Vj~11OKeL3B=SWz;YxfasdA=4Ac7TqVH5a-E9k5+fHTdyEkWvN3ydcswxSif z=phoMOP){wz-VoFlOXh>6kCZy4r(=qsGtZt%2 z!06%@f`u=Ur-58^i+JrC%`}g zGyfA$Vxv*E3tdPlV}y?;RKpX~5ah~Y#`Ln9oPra8jV}sPVaKz(*>VC?aG?ZpO!-%HnXkiYEVp#eN{dVG1=O z1)yY3HGgEXC&t57V>MjG6#!4-N8XJl0&Lj|qh^+e6kq}(%c7*#C8hSMr5qwb9wQ_m z%i1DHm3jg!^ChK@LXOr&NIU`z;T7rrt|pAr+n9of2-BFF#i*D?rN;GQF*g1nGCyc& zA#|xb@J3Dp%yCx4Ss$V#9-^6eqzPGq6;elP1VDkJD6n(3dtnU%8tUU^GYpau{LW-&)f3Fm9Xl@9ByE> z21B)EA@;`kiVLe+!IGqcORnobm9w!z5{rCFpB!o`%7tN6>?HqGrYK0mNrp4^d_km& zVtOQj3|Qe!@2X%Ps8eAQqk4j>*2E<=ZWI7iYcV%-jgMabv~pO%xG*YVWh85U)2uAS zaVla8H14mGl@${AH!%MSOwG7h`Z-cKEo=Oe$vLb_JWQ6|>M!&MhIQpaV5V(b1c*-2t zHooua;^}*+Cr*xzENCt1YQqM3u2VC!8ik~DU$}^k*a2J6ri=q-m~ORN@ra=~iZ96Q ze9$aR(~4=r17(=};&l?;?CH9&{7MYOvIXd_Sc=g&jWuQsQ_u`&gA^-o4aL-I{SFEL ztk05AjrDkseYAf0mj}C;j|F*<3AvCB`H){tjz91bL9mJu`H>;Hi6$=^lzNx76?js8#smAO%p`)HM2Ia*)2m0@|7Wx1B=_?Af+mp?d{ zd3l$8S(Ry7mx0-qdwH0JnU#+@mXkS{iy4`lS(*QznVEmtnWq_=t67>U*_6v~k%JJB zy*X6DnTx%+o5ML1x%r#LnVi!Zoz3}%-FckZ`JBsHp4WMv-&vj88J_J~pX<4w^BJG% z`JdzYo(Gzr1$v(WnxGN7pw(HM9r~dm`V_&K2Pc~9Dmq^-I-@Ciqb-`FG1{Xwx}!z< zqenWVN&2KsI;BB+rAwNnQQDKA&- zYqCoX4JGxulZqZf!6-*Ec}9y(d$%c&Jl^qMT;z0Ep&iP=SF$2URtKGhx(7!&H!2gk z#xFLIvnCFtuzCBsSqfGV+t2IJ<6}#Cx0=0l1LPZG< zb7+U#E~E-wGHOK4sTxs2RsZpH<|89o?iJCg2q4zQm<=7gcLTwuzE^vVo0F4 zq)fJeVNzmjl9MQQL?-!6IkFr#QjZlRVr+P%X7Yp#q@zggj51(JI#BCu-F(xHFJUHx z9bAFk@MJ2=_CmFb9H0gz1hpul$0H^QF0(k-)@9Zmv4(eT&|u{=<#JytF_4jkGK57% z@RQStz4#JjB1CdCj$;Z~gBAZuAvM~eO$Q0p?4!bzWhA$R+!_Xpz)%aufH|0uIYe#? z!aca9AZb;|ZIm{)?uaIEwL1BwCQ67$i@n}u4!LuQ9*&p6ylABI20OchQ|vL9R>E6q z!B@az$e-eAu=tT2GNLm!cQG>4f!zGdk zi-23(RR}T+Vk@jgFQx#}=a_{Jq~npE^iVw` z+F@kBW(u-KAhM&+V`Dap+!fyAD_G+)SmHm{XHx?Xe5-BJs?B^qBYKo#Lyn@J&Jx~h zLIG|u>E#~gl3*iJCVu|}iOgrJHmWu9XFPTTKT6UhL@@|GF>8IswS5^=pFQtpUO01&%PvkfFgwIglY>zXo^Hw zmjAAz1c?$?O20KYlBIdiCRv_63AX>PorbPc4(c;FLG;7+ti8H6pojiN`{0TIu(4j<&8a;|MsnVrPn>u|8HLBF9 zJCkUU(yEoMcDA%eOoCBL60tG`jx{Sq07|i1Sk;>nF$!9+6w^kutM;PKvoq6*^?R1= z*spTS`u!@Fs^Z0r8#{gsIkM!*lq*}ljCm%?2vW#w8nems7P=FAg0?7Slr2&gHEKL6 zlj`ftv}@bGjXSsQ-MoAIHoA6hP${HpZQ(Mi6{*pbWB+~*J-YPi)T>*+-rJ#ekUvL` z;aYDs%F@4QV?U2Rz54a++q-9qH|)>AO31#yk3YZu{rvm;M@rsM5hRg-OBeK=uE=7GJ~_9Mhc3=Y zV~sZ6h+~dA?#N@0KK=+~kU|bgWRXT5iDZ&WF3Dt*PCf}`lu}MfWtCQ5iDi~rZpmer zUVaH?m|~7eW|?N5iDsH=uE}PbZoUa;oN~@dXPtK5iD#aA?pdd6HcbR$cR=}R8K6SR zm=Q(h@yTeTIK~!eUNPyVQ>2mBbSZq4o+toboMM!zqoR)LpiBfsq(q{sZp7iDJ1y#J zQBeqxDtAIjAq6Y#Y@sNrzW&N$1e#>!N>x|v;tRB?fAoMr@&52ZHC)zkz6Ze zP}KhlJ7h?qKtdf-+S8&F#i~@U_HY3dhpHxlEr;ZViW9ok-iz;VTNEe2Xah>IY%68h zw5UaqrZropv(np?r5nw)XJ{XvP4i6QYfJS zMPrSeR;ntS)G2B-*Ch$AxYEj0Ju^W>^Qp1H40B8$2{5ZkBeS}3(@sm5T0L7#kOV2= zwbKeK0&F6HK@kODQdBad;_Pq-9STX>lbmCuD>NguR7RTW!N{jRiuG#&8Yp?$Y8;i#sjuP#jt+ z5P}DHE$;4KB)Al}LUAdD7ARKbaNp1Kop0vMd*=KLJ2P3c_qDFy`ay2HFppo?(fXa2 z^OQKJyysC1Z8}?LQo~ShOM*}cmRUm68hJA6tKS$r>`-j`Y9+2=|KQ!X6}GE{0u1@- zLUq(5eC2)(PEX}7+HQ;O%B&NdsVTykBVG^ai~{e8yqx-ig1MzD0Vj1KA+{DDFIZp0 zZG9j*uFuuW(<|p=Qhu=ZiXswXJ)+_!j~^14;CAF%K*RtG)AiK=t$b7pX=cQ_9;zpU ztSbG}5@($mqBj$;l9te6Ang6X1tDa#?8Jv*w-3CmNLIj!WX2ND=h8jAAJs@{gYe$E z5gkTTQKy1}xzxwQD{Z~%Ie5;FW7$dkB{i0nxqfkq|Z2hp)TCx^B+FiVS z!l0FSz6#sNc=qC;Aj)Fl({cbsWdOw&b!-2elmSC2$*!s`u&0Q+-TOSsM|ug?UUpS$ z+8PMhqqTv!=4yL=4M*9RjK%h>*+@f;baEKJ025@dKwhl?t6oV53#K+D@4`ALwz409 z>k7cxuqFyfs6#wJkQ#$2^QuS$a?GjB5za}$9B6qg_uFhN43?U|!4tNpO(nA5ILWHP zO$<5ZpU98T6_p-;U?Q@6OpF^X5l#8TRiARmTr5cfd(>0%q+az>Y%C!n1X@G`C~5Z{ z7>vCvy31=x8vEoA)q7RxTOx@V;%S+Q6Du#t`^jQ1ZH^q$Rx6;je(}z%v~R}4CDyWO zZjFi=iouD+W5%UU&?DSSD$_7z6g9=$_Mfocl2*fPc>fW@3l0BIO0Ri=ojf%Mlg?Joa{_+<@kIs;_ZD~kbgjCrK z#JXEq^BGI@EADlqgk}0>`Z2hTJmVs8ZY0T@C}xb}h;}owO~jn|k^`nsc=(L5Q>KSQ z7jw2Nk?QJWbbA-~jnu`TqRYYRSvr;qcGRMO1W7|^%i4CY&c(ug3cQF=smYXWG z1wvUT)Lf$R6fpmw|eU=%tr;T zd26ZKZDO`0g1FXC3Ogae4qBazBTmRBId#$;UYVhuE*aRY4mk9&KHlB;Nujf<9f=w)K3A{r2ih(B|*2ZSOZP-MJHgZsHLb^+kA} zA-R8ZqApH7T2GV1@6a5py@VL{H;ZAeIogDq?IWv2u1{#p^wL9S`vA>}TS>3Jqvq<)M%rzd;#rF2&+N^)M#(5-l1nVG07^22k5y52D*qD>pg>34U3;iTBr zqXzM&7dd|f9=s#}sGI+jEm|hTfKy(Y{_oG_(>Zfar-3g8B0-5AR@cp2FImhY^Pz5k z>pLTQ^gW`ED)UKii>+ED%=#_opW{ltXC8VT^hM)~31!$IZ#}n%&tosowyfGk9GTue zx=p5*Fe6$aj#YPZ(l1_PeN}HbKa1pX<2XTgTXsC;pGzX2e)ZL=p=EjFu*-AzsrG3s zxpBR_>Q$jY^)4yqwa-Zkt!WV+uN#tt6_RFNo{*rgeZN2PO`~dWvN@`nsS{E_@WCkl z4T{LpxOnS4SSN}1lxTxV*-`K|;`A(%QUeF%2B0`2g>Q#hh8xPV4nFMD5kJBV8urPS3i>$x_WYoa=a9M zIL*Qfl{b`Y0^!I3;02+=l#s8?+7L!U#d3{q=ja?bq%P5S{%7;4KV36!cDDF2SyRS{yMh@Ywd;O`8m z7R(!6Y|)Y+wQU#{poX4erZ+)|P8Ta zN*OXauVUN`x(t4842QI01$hVx^cbQs?TX!cAW{}^qRxYbU5)M}33Dq5I)Ljdt_hhs zNJB@KbVzaE>A{--(_=*tjX>~3KN${3$R8mQEnV40c7T2#*$}=U=K?uUNll~y^ho4M zh&-eySoFI+gA2QQ#-7wO2;^fSpm65Flnq6RoM^Gh9g!|o;xkUg_5srF3@nZM$MVI1 zg)7l2h`%nDdG*$lZ;BuR`(!AyVt_C}2E#}071x1$NvQj3sxisMD?qnT(QX&979bK$ z#dWR2Q?o_7nZ$!_6HXZ}1q+9DlT$RQ`4}bAn%F)NDuEreL4XL@-TvceREeNwu@%5m z955keBAG1~IlP_Po$=)?Ghws{wX>kf{m$&$D{+^7!(JUw#F1FVfM~7U!{Z@w;RgQu zru>|Gu16Xw{|dQ@q<)(MbJYzsYlx@WeteDqSdP)w-YR}XDnJ)uMJx%GgzqR3_#=x( z*{XIYaL6}B6)zTfdmYd_Vepxqw5y$hzx5qa^^A}%nD8Z``H5XF;2^Ep0cA#E!7}t&X$&O_X@&7CVQ8eTR4#YI?fB{1I-pziJ=h7$1p;u=wIpos?lDHn) z!!G-b&Oa9s4+GL!v4!>$^Zi1g3)#jFsTF1Zv#Aok1u4nQSZEk+__q8mEpmvw6sM@hER*6JQ1vrG{KQo` zON8#VKt-FYubNY zl+zD75di4x`01DFXFC*9LE=p3L5-mmt6`!tm+8=Yo{D);I~8OMPe0{GrQ9$I#-%9O z5>HX)&ZH_pI~yLKOcsgjc$O-a;L|iYTS3$RD#@${a1cb7tq0GN%Kv;ng@9td$pOW@ zaS@lbup-B0dM!#Qbun@mz>=a+Ck%2gl_>O~nD&t{XQXxz1bMWIaae=LXWvLl=zfcW zSLh}sGEvNacCgKVZ5L!mW7{oU`eL+IkM%v(iT zi-atlU%r3=G{(pOxqdP4wn6bZSVxpzcM%M_%o4&k94j^ubLiy$*=a=Csjf@@c;8#c zkg-*&vmm?c>bSzeix01m&s@Mi+o-dL2v!=?ZM4$WTJ=^ptfNYt{4(@~g*?7M<}(O0 z49ie&Z>OgtKuC{@N`MJ*iSsh%J7rQxn)0yq>}# zwcOiwpiI&4v)Xz`C#2`~(eBCd$?<90sRfy-nO9S6Ic!hdXh4hrtvJNV=KipYN|Dv7wD>H)?JB{;t1}}F8|Mj$R%*=_~ z2LSIZk?bt^&&);j40-M><}DT!+xGPdJ5mK8tof zU1mPbZ9Y?LUZ`eXa%x_DYE0sEKI!-T^L3ag$%3lvfa%j^ShIgz@F6tJT$RUlx}GjsUjUx-F8gRN`?)U% z#4f+6Sq_?7eto+9HkbW<<=p*S+WT3Pu-KIh-KD6hmDtl2s>a9C1%dI}tCp6l>Dn~T zv8&lrtGTiCR@RWinXnzbrf&nLyJRU{u9ct192e{6C8sH->JR`aoo z1hcFT>7DvmPO=_j2{Wf#f6a?Hw1b&*t*OqgkMt}@kZjD$!s@g)mSZZ4WGq^Y3CzP$)Q|q@N$#n#vi%P|$^Tmrr%dO6>Pg;jUs|um zn+^ZBCrS2U;6FXd`ykG1Zu|cPap-wwVy(1MFz%<5?G3gi2nNkOt&T?fEFwPFPm>)@ zhaW&K#eo0zByZ4#|Mn!gv!YIg8r`wYo$iA;(sdT$?}LaK9(T7tjmHtu5O~_i|NU^L zNOQUS)qN1hLf57($S7!Fi=~R_F0#I-`^WeDAkMS5`ZB+6&UPo>J$c{z=hyA`FPk6U zzrVY~a@e=<#wCfQRY*jnZ^;pX78pb507nLPpOo3Q!wwSJv0U-J+PCHCp>U>1g4oDy zgB?QxdQEDTg6%+@%)lMA$dc1;EJg1vlf3kfnnnCWeD(Ao1#;)TL^ZaGy(BHM&wI&= zMoRPv1iG9vDY&}M_DV`Si}p#+_(o>a$zxYjGPIcxSU5V=$_L80LU6|r+#dDK9O(9s z#60)wiqu@w-ey*9rK}hG^1)JKPU-~YDdkwPOmMbBY30uOLTGJ9QdqI9#%l4KaIRxR z*`&jYA`(slPIQEgS#k-K_fBIkt;{2RrxNvf)Fr=Y*qFN{`f736oB2ZBvCfi;XufXL zf1gX`!zU&BGPRy^F7^5}<0H9nz6Fld=MJuh&7i1{Cr|CbdmGA=4^y%gzvN9UbzLk; zC(6DDi-O`GOm%Y0+bgy7D=Y{(%|P>_Mi4eQL#~iPQso4tF5;fREjE1J-;fT!fp%sa zFb(Z29P;tkQg2N&auIKYZSM)UMK#$OUKAM9C^zU$-l+Dvf=5mo%$c1qBN0&2pl~fB zayZNOh_whS_|teDR=;E$>kC_#@fltK#C--sN3E2%OuVW$6ZeVgOFh2^NW{zT8 zXz`gM&)!nt9S#*0G+SmwqAu~0q_xe^?(`UzfZ583P}^2hO9|4qCDLbC8W;3Vc@T>~NVV(3`B z)lbSM)}uQ^f@r97cHktw8tP142Ad{wyizqh5S!N?r(zFIWD_4i72{U4P^{n(!T!$B zn@Hb{fEtoC^pHMLP@A|!u2ww30%RA(_qmW1hNE77et`%VR3p`f4sj&uG1@T>(enm2 z{Q?NZvmsa%TI;ot3Aplj9oF(H1*4Pal^QtP8;BB-1Pv8TItZ~Ne;kqI4eHCqS+(+( zNV(GpVex!B?OP_ynWO#1mDtUIlfUfwI1@^2Mr~pHLka*z~E`ZP z@J<5tXlXF))C(~-OZ{Pq1o0=0^JciZln+Fz!xZM;t|q%uZYRhR>oZ2f74uaT z6R@+K9xvrYDteK%gS}3iYi2$_XDTupD)-xE zF8q_v7{>{Ab8Y1lEOj^*CyEflO+CZvUR0BVhoj2HwwL`~x|HwFs7d;58e<8^P*>Xb z5^PC=xHXZ{DV<;7ChsM#*l{~~Gj6Oa4O9&&r-Nd!L%bd6su{oISfSHN?1z{xak8SC ztb|p;uNK^lObE~m0Ig5J7-k4fxk#u3P5njfYH=ks)745pv`V@)<3{Cjd+*lII1^|J zK=R~u%2r#~kYs{i(iCf@o52cA2yz1?BvdM)Jd4y&=o3y^Z}ZxBd}SZE>;~Qnz=vHv z7CQvCyA;Jvyg%4Gjkw_etKk)xHA8%iWVKwX?f$aI3JwOsr-piM0Ye`r-3>#$iXXCj zAH;n5 z8mPK;{oD`6RIzH3UFzZ4M3EOZ06rCkTrh8FRyQNrC>`03@FqyA8LtpJG0JMsZqsSO z7UKRUo#J7hQq2(SZ^5uGHVA1Xb>ev8$$|<(?Q^S1UecRU_@%US(dAGpKDGFhmhYSu7s5A4Y19sJcw^v_Hhv`+#ku~`1-Re{0e#>00H`5;L z8-0{y(B(d#{fD6x`>KNJH?)B$O#`V+p&r`iA1#+O_aQ19GQDAIq@wYI)kv zUJTr%pRX6Bodt=0`c3_)RqpB7H#Kj6~%aLd|gqrHQ%%z0o`eW2D{i%7eDNd z$kSu8r<`>bcWC(Pl%*EO_v2J@5Masc-YNF#AW><~#Yu_Jz}+O@szRB-7CD zk7e^Dz4o>qx$DW~oT;}6++&XoOLK5CJq>&F&6{Zo$}RGz%!2+P$XlKQLZuO-BJ7v< zU+(b}{kV1Qh!L;S<=<*jApEUEaNA))SkWeI%IDL?UD- zgkxBO-sdsXIg)`Qbg4g-ydacyo{PhTidq8s&Kkv)Xbwk&7>A%l`%ya9Zxu($b8X=d zZzU;oLqP?s`UUsZhcK&h%4d|}b|&E_)+mz;Cfg%9@r+P+r_j!Z@V5whx!WMK448{k zxC?d|XMY3}LR8eqZ5#5MEhOm83c2@f#Gk^5LEVVKJL3?BS-!YY4$+}-fs9uq{h z4WuUjaciHA`VYED-?tJ75v4XqR8yL6ChTB&?7M1&c@vVI)}8DH5O*=Xwq)5;2YPqee@ zdCK0bq~ip~dEq1xY$pL4q`u$!8wnY^~VMn1w_*ma!Bl$Sm9y2Ic%8=rlH$!UVeSa^nPRA>bzk93w*o!S1;zBmG>Kp}*` zQ8>*Z#FOC0jiw~{RL2?07`OKV?obBKhzQmMzWJ60=GOpwMS;i32!VnMq%WMf?9I+3 z-wZ6~JSt$r#ZHocA-8KvlyNBCYg<$>l6qPO@6>;X7ea|EB5%r0At#)71uhyK1b;07 z_c#=?Yh*bF*y?qfZm5HAm`#aYpwvsAa+O7*EZ`hQ0EgEj!ZR8jQE_2I@E0hyR}!DQ zRSr&n2~NFIeiS5I60&qhRYrH5t0@lPT(iYKBzq5G($k^qK;>qpTeE`V-;3QJwz%0= z!tTbP9M}rUKjX;z6CU*!lQI?8UU`yxlV2&a5Ry~o={>$;uENLGpxCa0Dk&-pr^_K^ z)foW~S;1gdIk~|C9OFv$23E&oZ9H9~SQqE&q*6cwx)3NfG5j2)TTBR1{%N209H^}) zz)`-KnW_QnWO{gI#qM6jZfoy%qo|hsgUQo@OTGUoq)z}|&t<%5r+21J!ki;ZZB}a< z1=G#mqk7xN`4nT;K)y`&jU13U69^omw&ygg=PG)OA8)r)OMv}sct3SS0z5zs>1*;~ zDXO?xe(=}GLi>)r6yDF%=AW6RWI<^t9IgTW+)5kHLT{V?c5Xb5z}l(Su*QA=O&v7W zF}VncpxCkFTq*=tibK_%m7Em8EJgM5q4hX|Nu!DC@4X^QBW&%sMBa@x;cPXle}U}? zg|mHugEB>C)^r?j=`Hoh_t?OQY$&*h)0MJWJkg^`-<_dSWNN4^sX>ZT7{D6HsDw-a zLkK?(R!CTLDjI>kA)T5HwC}i|pNF(-Vr&znDN7 zvcY|KL}i2pJ=ZTNOg`&WZ*{+b_#{S=x&Ne!ZR^pRjdv4km}h-NgMi< z5cFL0jvZC-VgdPESAKsvM&53WLPI&H?no!Z&u`W@Tds>74fmoQMMH*N6BRkMMuqMK z#oTEb^5)acw4%lw$jFhyZjM9YTC|BLth3^=f{9~@Zp}lsO3Q+gCyisInhfPUl(jew z7ha4*Rilk3>^A1$C?0qzF{^K&riBx&vq_@p(YR*Fh>Kv}iEysuwqHg@3+EH)|lLi%AU3*!F;-!BkMYHn#r1JAZL1wIJ#+) ztoW?w3Npn$F!^1El0LBp91_B}Lhq~Gsfgw^R)SFLCTOgSchP7(v{*#6t|Vffjomb39IP$A0OGX**a6 zLmk}o=(Y6+UdTkLX`&2q7a*}pN|y-#2+FJdx=%C2XMkF12cfaCVu@|=P2W;JN_ymy z^|lz{fyWZ?x*y2_yS#X})NB%>kvY-CpVP_5><)V`gn!f29dQE|zVqEUE_`9%N_I-& zBUA`c8Wfl()_OhlQO`?JNuPXz3#&#>4Z0H00CO?I2&`M`@%PtcW$6I{qq+r&?-tte ztdqj_gu{yg#j3UH5a|@{r(eL{JTLW#ARkEu3pWlw35G1d3l<3rAXPz8Rt{i&fcf8X z1Ad#X0*;7|VxeMV6`=JP*&kE)`bvKr3$k<)En6UqdNJui(v(=ZXpNtN2Ux5OE5^|DS#9BQgtb_wESnIMU<{b` zP*{q5T&Q0}T~TOSI)LS1&Oq#S+>OV6aj&5Ve9@Mjas+~ZSD48SF-9auOOx-PT}V75 zKX}7w(5v5f>!!hg+EM6%b7|v4>vtHugozb-J~>Y=hpp8~A3YOv?AU%_z}VgR6axMV zJ|%$f6nPDe9+KUutq5I5ushVHr@^os39b315Nd%a}R>#J+){ceN~Cj-%}y--%i$&;wlW>+3v5ATV$1I zi@xO9yU`S=ICW2?x!4dB7Eugj18~*AwsI4MEWl|z@RvyTcIIy%Fqv&-;H1)T=*%Ie zVnw;3Rf0sC&kCw&lFk|d4h>jpV-gsFOIc9?5PmCzSj3LS~kfvqg9K#153%djl7;J_Xyk`pG_l z@52Rxi?#orz)fVKdRPYLE$Mh6FUDdixag#puTB)aGI#npiROAbUMVf>3urs;y~q2^ zgsqU$JAE)`=E^DS__r2EKqXWQk{qv%D+sWhQ_9gJLNSnOZRU}CZCeV-8O&KJ_e<*5 z1gkk{H?!u1DdUsZtw)8N=qA!=1j0Pn4Bv(Az}xa+Wd8(l z61OlR)yLM&th&K?ocNM1N|}258fmph6`~5#A<+kpA9O7N*pkf0u@75hCNWa+e>ca8j7yCo_1xcB&3?iPemHzuNIwt zr=M!d_Yc*(U;p_FxIb{zDI)uEL53ESw;ASDB)7A#PgM@WNf8;&G5zi^oh$nmpU&*k zY0is+V%;EfYq!3{@_jg+`L)|x%N?2bD<|_C#}=GI79Rb?n&Ek-00!0R7p~q1Q@PU5 z{{H5piOI&tr&{S^O4zn2eoGKf;T3qXKlLu)A=~o-j>MVw5e(1%zWRB!+a)y03RL{{ z$1nZ{Bz|WW?IAY{B7Pu;J*+>|7tO{PnPSG5HB)Hz&|5(95;$Mq+B6+agh45tpq08F z!ly8O-AxrdxhlxSK2pbOm+l>-=pzAak7}U&B(;*WAYBDloGKGcsIicR%nZs=@~WC> zyfF*IF#-@S)Z@f=-fPt42mCzM6m+K6uOAy%64qX6!~hYe4;3RvBn#Esi+j!Un50JgMt|a@ z#yWA`pEU!>T8+wu?iDKFU>7}&VadLQAEy@Dz_msYFPTvp%TSmo%D9nBZ>N-A*1mPM zg4|PmE@Ya;uzm+BTERtM^U8T1b?K{)&DuEWUa7}F1$>XmKlNWlC;2%G+6(dmKfVm` z6?^vD5NViiW~%_QoG|m9qF*{9sb+cG?W4-*|E=(v+rn|6j@I_uPw}-`wG^ht*N>LO zZ8Quuy!C%aXPe~n#Mq6gnX2OJ2Z!#`!N+1w=*l-;_IWv?3X!MZnbHL36tKSO@I@jR zyzuWYS$lRbGd;InI=U<392F(Ct7&tHBFgVcx-jT=dFh+4Th3(=%qhb4v+L1N8lgvu z%Z^h17?Xx+slr>AVyZ$FzGdG;Ox@}b<6xxjjlC{# z)L7wbXc65Do0IXDGsZDi;gV%PqQIt~Uai`Z>8vUEVAA&Id5A!n%PBIP)SGdJ$R%u< z1w7v6wcqu7?Q0l*Wy#l6mIBcCw=}IsZb+dxB8Bu7t_{%wgHYK5F)nC#?^?T`u482;m&7;e9ExjnuZ`|=TYTxmb9?6q9GG=RlaL?@%?!Vc; z;@i%f#vfn`kw@Jz&M~X)^9(d+@|2O&SE<2WE)rRa`Ivk4)$LmI(=xq?SX-U)kP?lw z(CZHoe>05_xdytHeisXY2R6*YaU??8OXz!7ka)BbnDlyFz8}oEUrl_tV~E+chMBA! zH1twh{*-c3_z*$_ZOY2AR5X|{(Ln-D$=8x4O#8`853WY5cd82+r?Q#k1AW=@>Ci8Q z6Q331n1apo1rY+1Y5?K6LFTZt0LaUyTIB+qA?06~=M=4MSvZ3gE489grgXHe=O_M7%J=h%aFtslez8VU>Wg*t1Ui{r);wh3g7?}q#wZ*78r%_krllAQT#BU5iTtjj0nXQ;~6^ypam< zNZAvXF??2Cmg~vMryiVG;b(x1feIji36mfo+mupd&AJF3&`!JeL-3tfcEWugdHXMz z%CD2{fg16`e%~7%U)Zp!MAPov9VD&y^h2y%MxyN$umwF3XHt^X22k7AyETDP&fig`>5|^fVh-4J{}sI!;m9+cX<&y@aKTl}%zP29YQ{ zE2EGF!K$fUT9xXb2AxZWtR-7c8W$P~@1Qk&5?A@|aEW9N3w_3f-^?(}T@bmlb#t(K?4naw^P`p0y%LSjuAU{*mKPiWB0hyy3TtVL zYx1YnO!8l(&zT+{r!99Mva;E24Om{*?zySEKYu07TCvk;=REb9Layq<Fq^0 z_}UTL-8STHCh=!}UTAxn-Tl>sVew(FIKOUN`kTO^?JKW@Fc~{0iq%n7l?#)?yDU34 z@yt;&fA5sfpkkc!q2a$9nXP;-8V{;`^H*J>f{YV-hH*j+hYon6Uc`-`b zkfR50N|0zB&q6cpJ3PGUkO^1L(7I?nNHJNS5FrEb|LJy8c|Sry*MDD~62IRj?)3kt zrv?>E&5j@~Wil^OD^iv{es4is&zV`Jr$+))OkP{86Z-%UWls3$!cI6@4P=q8OjP>G z25PU3tgKIaXBc-TzKohX$M-f5V+1XI2=})*F3^T2*%-WwrEKEAzXHIz*FauyVu0r2 z$vka|#W@nKW0cJFRQgBMd&CeHOO{qP; zg5lgE8MHtXOM@4y-oRlq1F%oNSwE!u?5CiCkarL(p<7oWlRwK%u-Z@EtlpT+RC)?| zakqY4^wdw*A=fcf0t8y8wK2u^Ymu{8XP3AIGu_w7x%yJ9@*Hfop4&q zlc$kicw02!V*fG(B%t&|*Ph`$8SQ%{9WdNvYW&08Tbj%}CaurnVk<9DIjb$l0EDN& z@n&ls-zHE2lrIi6_1iUk9Cl}i zUeHCQV~Z@nyfcklQD#pxy8=ZOJ^>A0-!Ah@o)Q#FpPG9M)y|X}6uyThO_Vt8kG%O= zAj@)hu+)bH`Ni%%fnXECPs5Gh{*55EhD)kxcrCxjN@+ZAZ=8^(!vpndK>Gl8a-yc4 z_$axsj|^CL&8C30=UA<$#`M!J^waJ2(_i*8;0-Xs6*_~XnI;900s|Df3LR>F2;TvA)Bs1y0B7+4 zSMvZjW`Jj5fOl_z?{a`2Z%_a}D9AD>Br+(hG$>*)C~7x&C+0gSjvACm8I&v@lxiN7 z#th0V49fbp5EYX=+8dOEW8{eyD03dbSujcl7-d=|xs${LTZ~!?Mjif8a+jrfqE^#@ zbf*yWSc_C`z4y$M=n0GRXDlcc9&wv%6pQnKp0DzE7_bQ%cEcUHFo72KB5DX4va~}B z2)604up&)pD5QGeNtCt1vZ-5nO$B%YyF-q6#1}6q!mRSmymC9vAngqtA-7^qmnvPr zr7~bVcU8VtW&jSyo|5T9LYY zW5u*Y1#n;xOJoj4yvI{OQ0o+u63-&Q}~0H-RW<>d}ktqN|HpJV{$EuO7e;-0ZfsPVIL%NGIP48ZdkOi zyfo~YiE)UtWD4JBhd@-}!O=9)Mji46o@xfgA0%j*!P03o&CH)zlK=kd!Yfh8p`y>g z%@tS$`CsH@0Xt5zo`gz}NSZZ`6zlLRJxV{zYosM|<^d8mMvQ~0Jh)3?rvoE2!1plV zQpY>EJ8lCN;N_N32qhiXBG8frh%ty%X9RjR=<;awzQf4;?vK3h3(posSI-Cp^yh69 z@Bnn?*f->FL*8FiM|zdZ%_q{_@kRDF(@bRsW=5HGyY8rl-YN@fD^67;=&I+ocztNE zA48i+aSj1D&oyMi23QfCXkh2_kHa$3WVZc}GOganl+Pg83)k~f@M`+UoF1{tOS#-gs`q4MOQ+VS5Ss4 zVfHKGek&1SE0L)yQ6(#P(Jd=6Lo4XTl~`WEJujU&z-j{7YNEX$kkwQpXF2&w#m~Sr z&j7sUY?^lx#Tg79L7V1Tpc_~5j{8{3u$0HF2=mC$kt;|uL{6j$F~DYGhDarhBTM-w ziTf`BxuDK$d%;KENmYRh!ih*dNRD=FOwJZkPgw>p1fg9XHgX#kgGxd-lo(+dR$10p zE9fI7$^?3Vyff7}gbTP*-Rd#TDRPl+WWkLg8XYAKs-lrE&oscRZK#AcJrl#^*Sdo` z%egbUDeH6gO~B*XQtM1^1!W8NWF|X#%_gf+3qg`hopSW;YLHt(jnw+AWdqAxX?soN zOR$ddSq5Q!@7gT6z|(I#$WDP@E-HK7+ShQRT)K`Ir3k(^ceFUZpLpU)Q2U zASrhyzepG8&PCycljV@Rkv#_#V+9(6muZ)n|GpYW&Y*gg2?zWL;VuI;)O=D%o&&nb zr$PF6+)wNA2^XwgRrPm(DY~^OWEPtGQTRV%NA`_HKT(i-w4(hozdzr5=4TODRH3?BZDaD8eD**|!Wf4Frq?nHX%eP0t+IrKF;^m91$_dg5> zKMYJed{KJ%vh^@%`0&-z;p>CLH`j-6@sEPZkM6f8kYY!nDn}@zqcDe~@He6+-baE4 z0LCw|PF$17=;0%DX^c*WQ}5gnJ1Vv7w-Y1FVIo^u@VzPa0}p_Qg@eU|g+-4wf)o9J zN@H+F>w>`uFtbLET0`Mb45hHk`e;MZNIaurv>Qib@mMm4{!@ee#*&G20rN(*dehEi zthnp=!dO$;hj((JAUcia^4TJ_WG+iC5yJU0XfD?zm7dEOo{qB0Z6q19VS*8fhhbwv zb$>0zpo8T^Yt6?t&)xC=EsbqVwEb5a(`v8Z9*l%>lhOj1pmEgX|4L)~6B)wy(%28) zvFUup7<%oOg=ur;`c+R~{}BGNTyHy(r`^?h`q8^7vVW?p?b~J_zXsvGGG2G!c$*)TiBbJSYQ-9YX?AG||4L&zDxCW%21d^NsU{8;`)L;b zpZC*|q8Lzyoy)3D5}e-jAj_?laMMVxQ#~cid&&7Qw^cO!Fz?m%XZB>TPNng8C=Jsm z1(7Z*aab;dGtuut*tk9yrx>|>F3E7H{9KyjfBd;D|ANZ7yf|$f?q6D3d0bijQ^cjJ zUg0jlwz`=*eYdLRpz=#?!_FFAUB}P0vU;7MAp75CdI&I%ebN$+JRN7V2e%$)yYuDK@_qXm&HqCE6@~hmtqkZ^NXCYv8J|4STKgjG1NjaI1FFx8& z`tmH4k+=Y;sx|=4Izw@26@ZLK2gp0m?h{o7#Exo%)N5zq5|ag_0i%QTKhGlMhzr4Y z5o#DF>hnl7twLz}D27eyJW2;$2rpApK5H(IHkm9WZyO!rdwCvXMO;KVqBbm)b&ht@ zDxzK<9Tw|6kM%?s(H^ReNUfd61x^;x-;9nt{COT9OkB)JpgyWVeUT8URm?;&HmV|Z zk(hukW?@$!(=fY8%9t!>6CWFU{PH3>|1!4jlPcsW>>@=L!OCSkHg42;ky?)~;o%hx zH(k3(YoD}F7fFl>+{0lo2}bfgL85puiWFy~063$-Wb&C1Lr1VGIcilakF}X6DxjdIUFQ2 ze?XT?-&G{KI{4(_Ek??ohfJev?A{&1%M`hxGyWRBh0v%nF`8)I=g0D5JjV(+ zS$ZXG#U(U=N_~5-#lp4bO65gPqZgIBD5)z(#SN~u@M$4WGv%#0f*aQD!FXQLgH%KzeEoW%e8@qcl!yGFet_8%Pl z;}GvA==wXnxOa&E!2!`9GePf><_Gew3xyrcpXdL05@x=zcN2= z&NO3&Z^iy`h{t?}b067X$An$6Zw2Gwms#B7;Arj@=>Nxo$K|vC;DFZuXgh*2oMR`F zCCzCkio<`DK|kkDgoP3xDcm;tUx!%YpnNw@=K5$iUJjpgFG1;lJH*v=N9oBb@?(1` z23(X@ipECwIEYXm+fTO&=RC-;(6C+ z6n{C7@=@e2M+K2=l}Cl>JPyaA1eJeq5Ps=&kAq{dbk@H(2d^(zM_` z=Gd~r=CstTM7HGCy5il%T)XuT4h)lGzIH0UnJDTyK~|P_KANNX)^mHnUD)&UTC=cS zVc^TRJ|B%SetA8R*4e<$SZm?{v1-6sA6V6`Ark9Zwb!c_pbobZc3k6m;B_-opDeR0 z+-;m^Q?)M3wt13{n{`5FW&{$&qcb9=$zHLV2SVoG*XeL1H^BQ2=#M4b1^ zo9c;s%X7tNHCIbtR4mtHyx3Aima7b>)>rJxrsxfy@-L_)^1c|>sNrVvMXYfy)`%Ih z9o|g{2c+*PRceI>Nf|XNNUjEiJ-5ZweS-7y1v~j_CMB#YxAe4Wl+qXb+>gbs#VOF? zZcy)Ke<=A8PFhurTFzxw9+s=h#`8bcv3|32(#CBf@zvmUmB6QOi65n1FmEq+PWcNT zmb9e+s7)_A|K8MmeW*>-r7-~tZkNj@#t$Vwu? z9EY{L&_w2aV|R&=Ahgo^(;YRu{JW`+>WWV!)aI6&S`QOUyqbrFJWJ3c#)SP)-%7bN zYG>a8Laa%)mmyc)-LYCsBE-%+MC?QIgIi!08JP)nB$&LS86cvUQy3`|n9yn;%cuk| zqP83$oF7t!D-beULzD7EJ%){-v+v~6OsFNLzB0BtDNmk6CfM~nkrQLlU}DD9d{~W$ zbB1YRMpe8^%UNn6hB=T$ob))zwQ+_hvR+9?ss zG)b@#RnqJIIj0$=m##Bg9tw|?fGPFaP<`hdFW9s=6C3DG@a7=1ixlV*xr12LxFLQK zJ3f48__)wlm@nosj?}eaaQV{Rt64CHnOkVq?pohXr@%p>c8IoBhu|f-X^Aqs$wTQZ zLSgTh?8>*ODx?%^zJP8V@EizX?`US>k{zu%Y03N|L|RcgNsW`L=Gt7=b+g|pw~O(_+EV9r3yLH`)=Kl^+TEIwaE)}i=HJyR zGXpU`2}!V4gyI8qu|6WNMH6aZUTyJnhGmR3(&*WantA(92TsA1@AnJyM}JZ+BPJu0 zeTCNF%c*;l%<>v!WM})g#*59Cj9a&<(3G>W)$=vf1z*yv{W$hzzx`8Du#yeM*}U${ zG%K{+hg(HaQkMCkpUB?*+9EEE{a@t0gycXyX`C?yR_gMysV}`&iNDOn(KRi?&pr@=~AUIb$o;aG3+ns zLdK{H7M0on*Ic$x%T$G`jBenzsLIiLR)rf$Z4xeD_j8O_MLLacl777&;KQhn4wBlU zAi5dMy?7FvG`dCof|HBIlhx%qEWW!pau_KED(4c#^|vVvj|+U_Qzti!ZS*5Mg?}1A z9S)@G=)E6vW27*CsW;ReUD|CrCmnCWTFz4nkK#B|lfP0%U2F)8%i<8^K$BZQ*@a;udlban@ zupd}n#wj6_`NBaUok9KvL6o+)l}7 z_<7-ryFJ;c=9wayixQ2yebtHPxrXtJ3b(rh9n7zhiIKf^#gt=uLFh*BJoo%YOGd-U z*_U^i=$?~jJR&V>d9M((n|JQ<$s4nE4e8Z&H_^Ax!LM33@FuSNUwk`>j%wYad37`V z>H1h4`?LJx55(1W?aw66>1GhYD*=@kpRz;&7GD_i{00#(GGBRYJF%8qNm8nFFc#$) zSm7OtA7@`X1`j^W)qal@Xk<3QE+C}*!3Wz3Ma(>{6-8bXc5C$-I|se*MRoNmYBuji zJouh&E%NR(?f!Q6)x9&WxX49|msPt*hxZnf*ZgG1x9f?QF`K3L-xzkke7iD-h}w}U zJ-RBg?NI>p*m(PZ++eT0f%raP4j*h)A6#c2=pmn>Bp>1hAJS_dNfvK14qs~l1jCVW4fX@IWeo2{|^#{(y&+PuL$hO1+)g;g|SbN3g z>1XmmywtR&IJ(MI=v@>m^wFlh6)Nw37TNy2Ch>!W4n#lty(aO!$o4~%X#PD3{Y{f- z{6Rv$YZ5<5C{&XejAM8`uDLe24K1=kH3?{uZ2_uDjJLIX*Ce1M^i_N7O`sv_CMAQ8 zN8kC*<_Kn{!_OkyhelrLM2JWWC848`!PMcE}d!jSxW9Ft;5X1z&CS^fTgX=VRC{XtpnoasS%<2FFP zp!stD;O(e1;IOh6*X*!rkh=7+dX(+pyC%VKR6C<=_AgE1s9`OT!P2wUk~5UgC$jXo z`S80YL0}2@sWfHW>^ljS)NA@;Nofw%B+52BFb(=L!)^hLirs+a=GiWEQAVgH@kYg} z4}Y@+fsQ~!-FP6>(=}S*(EFCAhq|U%c-TI7^fV))J)Jg}b>93pO(NWY!GQ4aX(|I| z1a+?nO?j<@BBMnik4#dN>5O6;oe_^wtip2#F)I@4E^T%-`vv{`kG6}d%AvSRThK7Iote?`ksrPLl|mfmDh_%dIm%E4$9I@H3|Ao#T5O zoU2O?X6UJ+stybqx7jdNXL$~LDD!_`li2EYr~QK_LEUQ~`BzPX5IL3{<(J|3H?1@a z4vJLB_b>>^#A21%KX3^sbLxRWp(5P)PHWv*Ke=*|8Hu{G#Tw)P6it{W=`~ic3X|iIwp_ zeI2OxjO}f$E_0d_KebZ&_1_h2A9A$8+*81EM0*p1u3yU`HpgeXp%UtosW3dp&+-@G z7XyOf$hq=GbRRNd=kgKDbF2nqyFE|nZ)7D!bdyzN9}_zNyMpCJDoE*<}>mHxmbH-fO^?^@~k+z(tT z{nUPYdGM(N>;iylrH^Q=GpBJGVOjy~ho5_ZKX3`EmG`l;KKE9YyRJpU6Q8t1O$C^$@P^~oR@#TVklEoji zQYbD-@cavxu56F4e&Q0I<@G<|(yv-+5Yw04{3OdSdyt}vFZ*Q;$6pRA2bjJd*3Mi0 zrj;Il{nYu3R{AS0jk15bJ)8WFOD3X&&V0XE7C(FLEHKw_PJjLk|52lQB=MU@rTOb; zm@ZyZIF|M|pCQz;_@Pn#ZO@%Vvc7CF2{8VX9uPjlkB4ihSZ#s!+<$6R{KM$KS{8qx z2L>U22>Q70)@LFUaQq*z%VWT6GxignB~50fdfUaJsXaJ+mq<^NMslM@WADu zehhql9MvDf5XD)|wz5^4Br44l-TZoIwnOhpu~75x=)sSk`#)F~|Eu&sVos~rK&r^aM*gBRZ89*(I5VB0qe|?6w9K_jgV!C%_ zqyA)BP}dp#?lVNU41!t~f1w9Z%cAu=J@~uN@bBq?nW;rqC{&}`?hpKh9yG6?X$Q1Pb~`(2pg0AmfI5T zP>Q?UqnPuM&0f_Z8C!_?s^s7S>)ud(`W^?6+<@-NS2#@5HsOMwf^l^d5K&uAHmiV4 z=pqr7 z37IYus-dJo*JrwVn!FQITOih@y(X*P`VI!Gh!4G_GnsBC`mh=zCQV;PX+vlya3034 zRH7(JIZ`ZRQm8z(FJcdwt%%)+xWXQwS?$fXTT{@TGM1{(56{&%UzGEM7&Lbz=DVZo zDxAkkwXcTf+v%wbfPWhzdD*qFC8Nss@*YGJ6+_r7S(Cme8s)y*fAGp>ZN* z3e4NvndRq~%}Ijo&Trj2eEn~h*jYZ{c=LR6123F9F;v_=kzCq(4f{3UeCK(k@A}4y z&z1@mf;O|DE%|z8G85i4q%x3wbRENOLACS9^p9^9FAU!U+kbegP$cjRU3gfdkwod`={3bV>rKyuq0i+jEpUsm zy(0~#u{nS*0Mg&TRd4F-f7!|M(_a6}D2v|A@H>0`$0)n}c>4V>qip@b#*b0Qi@g}R|9`;I0k0`zt5eLabA4Cm`FkL<$@9a5wa`*FNLj81u|j5zhBHQ68Ph- zqPI$G{biI5Rey20P;wA>f&6T*;y-_@82(5ZTUOLcn!mqQ>a+^27u!E5W6MXIZ-{@e z*U|o-GFJJ*dNTf%G9Kisyk+^_DEqgR@%){v=nu+haRGg+{tL=@wPHX2+bDZ=|G!BY z|Bb!=a#}5~#OhJ*@&BN`-bp+82YY>K8T)VTb@w=6o>(8f`pLf^WeaNGM);)!gV&7H zk`_R8QD4wWu8g5Q=ygWaWFf5NN^eep5I~VEpZqR)kX~^E5V^Mb28|Ae$~p(2ttvo@ zz#Kqt&mZ?-Paltd9YI{85D>5035M_mph$J2`fD0cLHJM@p7AG0B^OY0+8`)!1p>5m z3@8$^;iamp!Ah##;N-P{H`I10i8Fam&>ta4Tl;`DnDw#C#6#$ryP_l^RIDAv{s^*q zso`?o*kWBF^5(v%YQRBSE;&ScMO}cRDjZ(f+C75)238iFF&r1(Q%q(2cwp)Hvg1?``GluR;q+`%0H>9198G9MLZ~a0PN)v` zxG@N3pI}r+UYCqjdS7dfER@N)8~anEFin{bihN}*Dv)Q7(|RA_RpSh*G;*ox>}jde zLLA_&wJ07m3M*X+m+W8OO`~ap`f6c1Q5xA-`^q&b8*Pi$qngox6DxE~dpiPd%A8+h zU2PzFnCzOq+-R+6sT~4WR~}JrZUpsH=9iS+K64&fI6>bkLQ}v;;%BnF&_jx50@J; zmt;y_TuID)4;5f=JUfZ#k7A%fZGF36KLXWrBO7rKDQ9Y4ua^JNbG2~q^JUp@`;%m= z1lcjwy87ZJxL!6ihh)R`lrJ89$Xb1T<$F(}{7Rq}0TSnPYr>vw)dFiI=?fHDP_+XJ zv&1rBtkcNa>eiisJR!xRz@P^v*D+Gy;A>JLY^Lo*15gad5-v(k9Wdyz1T<9OR0o&y zlGJ7@DS#7{5*@>oIR}izh!Ke9dGN6@E?U-CX9^$8^0<&MemlF0KHJ4kwkUV$87)0nH_#oSFsEpgKYi6JPiJn zxLnYUSV{qrO%R=!73qwKfWcvXww{SR{d7hEG-D=q>}?SJr>;2s zCdf6xC<9KsZ%D5Kt!2MzaB1e1kR4ZD5nmgje~EA>>9ZrTC?+I*!9@zg32Y>SWh|#E zLih@WsS10`>ce`sOo`($8t-CE9-`!Ym34+`cNJ>;16}0Q#$s_dM|xs;H;Ii&N!I2A zX19#XxC%ZZ`G4uPC-l~~FR z4{oYYQs7yJs*ULdg)mj`PaB!EFNe!&OUe;1S(PbJ&r#bXUP~!Xb!#oF^gl=#QJ9tt zIwFivzG0o5s`4<6UUZrDuNy%dGAj^6XTY@=im81JGo*KQPx8JOksP}HK{+gdY$0Mj zoHh5QpkkwER8)T5hj^6=h4SYF;S1xO9t_H>z&btp-9*uNhFUl@ZK!S%_OXsXl^B}+ zz|Cocsg9X{)^A~`-Rh=Xj`YOcy2S0G1SVCG(n+BN=Vh+5aJg{v>&cqh+s_MOm$iaT zkL;WI;^iMNUZKRiRNQ=l^WH-z;Kc_GnZA~Xhy15TRvr4wVfjPH?>^u@e{<22CHRFs z0|xNfn|kOW9A<52W!YOFAmhw~M;urHfpW(AnjaanVLAknVSY^{(coCL*w6mLFh`n($PI zvm}QVi@De0CmGgnk%g=jAevl>JFT*^Okoe+r^-K$tE_f#i7!MP;TWV9^NmAcl|7Z6 z9*ZN_&rpEHeq-(!ZJJ6W9GycWAVYUQj+guHkrUb|n_thweD4WU9MRBo9yVNO&;0m1 z;*FQ+r)*QIMr4;l!Mvc;<|cGNTtUqY|4aF);KJV1>9; zgKW@{7E~~1+KG5W*0MAxfK@XoNKG04Xpt5ecFG#VnTn;gmY$k1O!$O&sBxqXn3@Dv;F5#477UD~}Xk z#6$$^CjHQ}os!yCYi?RBOPl&2co&0v%Hk@(fLO8<4khWVBnz zYqlK7N=ZVE*EdMgsVUPR?v?Y^H)C}#QNE$(F6SebfHfkLOh>uu*8ktmE_g3$^y_6 z80bVc(nK0b^dFxWnA^w8>OP!y5T)Tg*sr+e|D?&-OU@MP4T4K2(0EP`mpD^yZoUbU zq3lOJv2=QJGrDljCR)Zac(K2&MaIxH=qnNOG;VYLn_9jhQxO>@i)zecxRO^1SKR6c=7W9w<^QHF+fNf?5tHq%PP20qB2LQQ6C8 z!%FaSI+ssjyCY(~Qs&!`zM#gE6@KKJ|3kQnkoT&rsnQ{-Pb|PfR#Qp&fx$@#u_ivf zCcdGFD5i5=YyrXSvyJ^15Yfl6k$Ng~P{+U64jL+Wk<^TPe$FR_tEm3GpraoeDuAsq z?Hg5QzRIY77*KZ9Ze362(!ZwSxpZWkl{6n4Q>!Z6k#&f5Y83nGsTl z*EhWtg+|0^eVe!CSn9TC z8~F8OA3EhLkqg%RQVU?SA7?H@R1E*&^G{bg{awWCD2qt)7q3J04?rjluW0qV0rS3V zK1CyZf&EFXBO*tyU!yd$OlSLgU#KA>=`0gKTrv(-wiTpP_#|3-9+PwRYO$N}k$ma@ zq>FgM5WCo*!g?`4N_oh@={l4A%s5cU=i&jVa(*n+WzMJk8ov0NANxtPBLnq0U>_wA z@g1H~%vbQ(1=+FPm2n}t*lm=r;A7w)v--mEQAXn_vFw5jvSGkF&rh#(ao>Pmy>okr z%#SK+$34$fr2r%q!*z)RfADh~h-HyR2F-}l&ewyxp!h6@ns>^BI?Iq8hkr-uz% zH-hnQAe@cEN+l0~TL%D=3AGA<+V8v`8iD!Qy%>Cg!hO885!B5f(v0gy=jVPrRqB|k zbe(4svG*X?Fl4Y&k`KlDBkwrmBW6!gIj(#@|9o6LJw89G4ek{X&5F`P(r#~>DjMrS zJZ%L}&pft~T6}oQ(4ARN(Cjmmb?dSMU@+}d)@yt{U$#jnup}+{m?Msz7_nHDb)6FM zm>m0lZ9I=!r_$I1On6Oj?YFImBL; znIWKti}`0eyGW4Z39hUr@L8+K6W&Ka?fRfsi-|zpXwL%dR%f8yB5-Rv(K#ha<21JX zJhA;bxN8uYD9>IANqW2``CQz)sUf;=M!=TV1u=({aykL`1bX!*9>+EbJwKkSJ4J>+ zCC~*NKpkT`#DaEWhg9WzVQiU6_q3cKHO9vg9Tdwr6;tVw);NS^XB!S56Aq{Ag)XPN zD)6LGFO4E44Ra_iWRI90iGU4^|CWv|br&BuBz+2$F-O2{$)8#hNJZ9_q`N63b{}Xi z7fa;ehy8L}X~huFdMNIsHoeg>-4j0b4S&{RG5tPy*3}+1#L?-sJ(zgjc49Wm@`Q%0 z9!JH6NNY>zavOBllvO5ZIG&fvRwe&=2>cD7K&dfx?*SQ`O)PL&VZnrxD1ZRL5c?6K ze$zabpIr{Qx~QZ$-3Bf0+(no$hXT(gvlwh9*L3Drn@HvLTy)qdp1pvmE`l*N;FFzf z?U=xYMbODcR@haN>ogEYP!J=A2JR}CrZ+J%M*7xSVXYBZVGm|l#D*;5jm73n3MIgw zShU~pqVT6#625x2ouL`Z2UbmB_nS)4?1&gWnYc9XNq0C2|Ps06WJb%$nk!6Y;k-kocuUPjz66XpTiAj#O;s zCz_(BD)=lR(yA%9C*@L)AHS#XuWVAkI8bi79qnATY)_>(~e^*Haj~ zPAO|kQ>e}hWPu>Urqkwl^?qS?1LTVg(YYI^R`$rKc3J2m;)WX1A-*X)RCskz1O_?? zZl;=kaWP`!FCqhgIOvIDH_CP2#O%S9ekJ73e;`GcLMP3FK#3b4QkaW{k^#>O)M9q+ zX9wOii`ORS2`>Tz#DRKzNpLz9a3?XSl0sSPfnD^@@|@9L)S|cdHZ1ei1rJZEQFAIu zm#PzLigtTnRe5WOARm;sCYW)5SFFHDn{eJ9_eEfW&(r znK1pjYifHzk&>LA=n@JJk(k0`@yx|X`T9gTirB7nTn*&(wK6C9xRO;oa&?UM4MecY z-eC^Gv@}-|wN$@oF@z+SOSUwowNR9_v@Qp?eQoI^YVCf}O6Jtk>()A$ z=8~V*3gjv#p96)Av`(942vxVfb8ADHrnWku9u|E0aUn?T9))-+tZj<{|32Q|QKNl7 zEoqmfnz#f!k>YpoqJt&=*`{R2^)esc8RNZ!nmwAjDjzvDwg(mb>Al>xh4EF;o$B2{*ggsF zzS8dAhq~4!X~0?WKFt-9zO!1O?$aQ>N48Rhob=yBs*5i#cJN zV;D*`ccyjDEVk`PBOczNAI`rO+(2o-<^+qW_lPR=6c7(13FDA*gHvvY>)l5h(?^o=JGEN#=a$HOwN!yI~|vT(HZFy4J~_Q4cae57=X>GGK~u3{M7ZN3=Q~o7?{t zqW(~83{+lEbu^|dg{#fQoZAU}U^YlMHVS*s07Hvru5z15!}Bgg>bYe)_(2-*oiCmC z@VocsBst{RPUbUGM?5^sGqQIiQm4&wTC>VLV_fD5Ds5x>WpD8`vFuuBd)?pZY0cHb z4x1>?Epj7Dmd{zDYten3v*nq$*P3_K!h-XdcWs;BOP_bYoA)MJ@a0+X*IEelSP0Ho z2yI&kUtNg2TZkrEjOAI3*IG>USWM1XOl@0C=dm|lU2JH5mwl8dEZCFIy)@k_pGyMW zlh$HBl6?0Lq@s*P_741FsHuFlMav%>x_6|>V^l^srKMo91AV|vb7i45f4Mhr@NP7F z)<^rKZj7W^C3e=F7{p)!s*8Aq8ngQD-l8$!K|d8T=v#ES?%gV3`XlmPHkxHkgf4dR zN7K8~9g&xY4{TPOeVgmKfSz*z`Khimo>;keJYs0Pj`(YBj9utcJ;>VQo>~*=t7{&N z?^Ygwo@=FmGuH{**NNK&FyF6}k#4*apQX^=pdMFv>as!KzQOo@gX!A_GwCKP@8&b@ zO*YR>j?7K2_D$~ho4nsP`AD|}c(;VKw?rZrvOKmV+P9WY*2xF9KDy1xdiIF(etf$! zrz}(4EA6UgS*JwmuQe_v!$g!t{$Ub-o7Vq>s?9pD&3guxU`+D&#xk5o%)KyWu17pO zy=L78U5&yvE3Qo2YU;pL6NW?$py|E-^EXVuI+9(%{51?+)Xc%{mXhJf_cqw?1$lMD zk|H~%rfEOaf6RE#lot4rUapp>Yeh1)DUazXawRDBtc=sAP9ypm3Lw3CLq!{wU^AA1|0>b{2DeyZ=2?>Vab}Y?c9Z|2z{RTD0qG zWQS5Nj-P^w&n7laGijt$pajt|rGDG$1O3YU5AXJmFFik9%hccN0&Ylq3nq(8S3fNh ze1?1d8PV(W!01t4_~*f)PiXg_=h1e7FHf*vpWu3(EVl0AcVxkLoRDTMKQGi!{BlD1 z`jp!1ls4;>zT=ef!zq&&afv4oEOUSQ?DZMjtNIzwGfR{0)#9_}v@_m^=d0~R_YCJb zW_a9I=Mqt$WE#$8ygs!VM7(-=q4@ej8FTXmS673>w#tVK?fVOz4{LyjmqOUUKV(99 zp_vfIf07u#`)tq}D*y`_q6)oz5Jkogn8dH%9Q32abY=XR2?1ypM;D4kFxYs`(7h`d z3!!rZ7=#GH_~!hmu?B4P6-wq+`!7Y)^Owrkn67>Sl?uPr?2$lVfM!B!)E*(rwmhR< z3Nn{&ht^n`#2S9|mY9d+5!@f3{=sM4{67*I{c|+yPm$4IeYU@=vHq`SLcZ5n3ncab zl?nMJGMb{UY5KjlWNq1J_|s?mkE2^D$k&zu1RHMnh9Xs+WFdLQJ&2 z(f=iy^_NV@$ous7fj@n=sI|;rBcnfRtbdAT{W%lz_deT?8tY$uwjVXt|3RNE_doO5 z-jyUU?VK&b|38an{TrX{dyVyPBBQC)AmGpTIn*-nfw6|gfO!bD41!@`k+EsX#r-K^ za?vztWhKBUXauC`!ORrilo$o7#H!3)J)yWH0xQVg8~m{d&vT_Vs>sA+C?yHgZ@_Ox zBOjVYt{8*$d*fjgzv-u7b&mTmi<2^P*gTSrRZOluZ;A#d1hK$M$??T+VW$ZY(95#U zQs9-V_As@^Cg}UtKWK^0AO8Hf$NMjs@{ivAciZASrqC!eHiDquJ=`@6~uPqC`{jIpkfuG?54u$HjNsf=9Wo z@pg#=gg3&aFu-jT#f&iZSk`U`SYI2e?Nx) z{}N0Ah^qY7h13s`B>DB8%I~W2GWf#3RO9~@LmvnT_$7v}>e}|-k9+ISPE#|)AK0(kJb49K}`AK-PbHgtoh?vHrh*A z+cXAVGX7GHrz1#1t}WQYrH}j>_q51E{YOlBF(#zosU#G(UM^X>Ix)CrB)Bggfc7Ob_`BU4}4(BU#jO558R8r{kU3n8>D;I#b z=8Q*;3=@iH@`&VnHJ(+>&J&H&Oj#HB6fjLA%&o5`kn>A5-h2v|A_PZ6_Iov+(gi;x zni*dxDz!DZ4D1U->CZ|fX&y}e3ME#qnw7!G#Xy3Ie591JI*RGHn2kSp#9Ke6#QTC_5sX;@7q3jVesK&;l3x>k^Yrn{~4YA5l8w#lhA&pNf`eL zP5N!yhefbHjBf!nI{Ta!%9lzMYN&gcq8a$#s`rFS1LpJ=tBf@=rGMM@VaD7I(<16O zO%go6^}fS9ZvWTlte~{5qR+o!*`M1! z{*Yk*|3Dn+A869Q+xEeosAY`HuP;~fKeFxPzm6mQn{6NAm~Y_z!)+ggxn#7W#ntV> zvGEY8f*;#Hw#RgcUwj75`Uf-`u7Rd;+mf@49e*RP zP4NkrrMQgKUL&3hm-|;v$M3T4W(xU+I42!(pJl;(ED{(&$q149%mnm+2tAUR3Q@1k z#czX%JRP2jaIMWFyMu@cN=(P3*5=dl6iX-!PbW0j7BG7hOTD3wjgZ+Y1UeW?JC(f4 z+&(Wd1JJ+n;Zn@`G6NCfF_lXynJJ{cC>D#LSIFT~D(0FkQEW3+YABhlFuW*LMQ2dy z;!>`H9;(*wqk9~(=}&2$Pj8)IsM*A+VmJ4^LbIz>bG}%m`E<6zZHz(Zj((v91Gh5Z zu2dJVbfKU6vdSldQI{%Ab@;NbI&O^7klk%@oOG@xJfO^w|3G!b^RhPQxrJ8V+Ebg$ z0ER;I$3jNb%M16@m-RJcW*qYO6<&9pp2K#iO1D*G?@0H{_ipD}0PXFfss83`Iwpa8i|R$wkSvpJdbTQ-Hg6w zvrC=g-hSTFbU$XTY?r>sxWo01U_>puD)K6Qlh=r!QVBLx%(?`tF7aa0NZ4K-FJexF zVQDHP@>$+PX%lfl*XhKHXNBw@CS{1OFcQWxxI!`S7y@k3{;M{>vQY9O zfe-iN4V_ogpS|&j*N`7JcHw1y_G4&WNAqgzRG6{~d2zb|8sO+$}VOW!2?#4-4i z=`=Rzc8l^}^kz`S@-)6B{Ube|bEaK70`D?03Z|r1Hh|Ssr$}#(A0vQ%CI?`1uCc@? z+B_YSVPE)Uby+&-%e%Zxd!xBuxq^0wl2>;JT1YSE2aYc)(=rbAp1fF^sJN^z zx;rut`nu#}@y2nd>6j~X=uq<{fiWERgZI6Yt5Qy=8srV>KC^otY*t|B)AscUylYo1 z-W%_O7pIX?x9tx)Tt+pt&$66a*MuL2s!itMmdN&OK7Q#sr^0)d>*cYl_337|C-buE zt;d1Y#Mi~E_m}OMyq|+Q+}823uB%1ckK?>ufi&z>JdGD~9S5afu$zqoBnQmTse+cx!2)6v#?}NANgNE-*xZpE& z=|e^93+;JRC;QMX_>L4>IUj!&7Lw$gcfkR`TtK)pY=gc_ZQZe9)5fl)Qo|B<9&My%)8Yrtv<=#%L)-EU5&fFNCNiX{R;<4k{7TjeVNyLk=cGO1({UAfctv z4(Zn+HHCouWQQD%(9&!`VKN}U5s=3hT2=`#<1;PJ4k?QcJ=8(HAPckIakRM#x7!Jy zS_q#(j+l0inB|C=OO9ADc67LkII4exM+uw8hX^%(A?tqm*1_gJ!5cPyQTVto@S~7* zgSo{b^(#@%IfylYQl3RtG90KPPF5m_)(VXn2bC_j^?){O*YinK1LJ_=No6*na2oDa2cFs9Hc23;K0pB?k=bEtr*O@WiEKoJ1PB(|7Vzxs1D`TbDz z#TsT!c1+qJ>cu1`CP7Szibuze`?OJfKa$6cQ@m7h{P29dWJlP@V7;gLo~Id#vb;{DezwV#6Ih$d>qQ+x+GG@Ffr3qd zg4d1bA$zg~iWdlYCm>|x@?O>NqH?e!qU3{K1& zcF??-5A}}Or-m65OBFRQTDzJVv!)WG7$wG(FT79<^)NcMmJd@@CDmXM&^(l;tb$of z1}L?5Ez3qcTSHYX0$_=umg=}R7Kc?krVn4I_tF7OD*+QtfR;T}Y~xU(duLzzVBf7h zUqTrrBnZKnBk;i6Ic&hHSjV}B z%synt>PvkH-Vh+SG6XmT5J<|qs|Q@Hp*|-BurFeE(FX9+*&mYS^O~d!3`CzZLw`&R zL=@G4Bfvm4RDTz>8CgG-ACRO)d&*g>>T8fTxi~0Xc<~)RZ?ip zRb*RIIKLCLkc8k30otNu--u;nPT{c+0`3VwX_L@D3;^pYnQ(6cM3ewrh(Wx$V1k-a zNC3pqO(@s%U{_AWhvcwwvMN+LNii=|>_9CM8@f^;1C=T+&se2CTbiW-$5%F0O~n;kET?jcPtw_<(vY0G2W8Q72%~r1Wqy4NEMqx-flB%|{R^ zY_Ql2+!(%$U$Mkdu_{)v;#{$zUa=oqv7K5miyV2A;*@3rRIiLolO+I|mMB)CSY$^5 z*RzZ{i!pq1;6boKfMO)MxB8!Hu_OR*vfs9W5U^9R6PlxVe4;Q=t47HY?!{~#H|GVZ zI6t_~6J_%j7;s^ez$8pT)Kf=gL5ZhsiYpGXdfyaRd+!}9ilqPi0FzzP8Kn?#D~mY^ zh^gz$5Lm9}OhptO4*7x@ZLe3>usLSH}FRrn@BWiLTFB|&K@L3N}~ZMjbUpiW~s zLC>vTH?3YLEkU=~Xz{9k`N}f92_Z(@-;v+zMWY{1GeQo)m^Zn>O~cEL0m1R0!S%pz z8@lfLs|i+4!`gX+k6}vimr8dxh2VpvV2FYvDCZ(bDN4PHQ@GKyG%?C7J4P+X;RfOr z)*KZE$xkcJDnuv^OUZL<0y;DXjU*{N2SL6z2+K)={&NSzAEmFrRr0l?2NgHS?}%8V(i-H-FcKdAhKa(hz1P=Ko>E%ES^kzfqs+VOgGA@4S{AitH?4W*NpbgiO83W`?%l<1M)&Tg zhuyn~eva&ZUz@1F8W6N409h)ej4UU92~Zv#wY}T?K({$$zek=K5S-d8c!(nv4%tPP zkuFOr)9J+|L?|5TlR%TfGLsH*eXF>hon%`1F!k-ovwr;0C=Im!ZxWGm>5yR4esk`e zGT9tB-DVB*xA1a(CLuWX?!6zA`_Mr-2lv+l-l0|HYX#r9u)f_4>b8P{q=xS4VDmcx zSNI5y{D^L7R!QcA#IVDBw|!uV0Wa=;$#e(`AxMe4_ZuKZr!_K_85m?bDDEEV#4;p0 zT1jT(N51cu*Et}}kt?xVMKfYWT?#%u`G-Y4b=q9VyHZgP`n8iI!% z=J5d%04hjs!RUADNH2nc{3T*XQ+A63-%_TJk!3K^XK^f~V-I@ptJ*cI5Xe$B7Faq; zfEXeoHdTPKxM2I5=C1nG^b&$hy|wf;dNT>*u*}ttV&KwN0-$aZv#%JCwu*XKnKrDN zKCFg{$q2~c>FlLN99hH|MFz|b0rYg1&$7cucPsi=D+b#t2Fh24#wtedR>totj@VY6 zXd;n7u<#?|nJ`qaL;V(y-jNeR zkTVl+i*vB6P#*EVebCuU@GTp`=R*(=VoYnVU@}Q$SC!Y5U8s}Q{f?D%vh#x*7fG(X zfCh|`h&+|yke)qEMmp3fap!=BxNhY9fTC@EA< zDh%TA5QkO?Mb1K)m|RrzVLR!eNmHwL`C%dI^jbVj6K_>jojjtXRO@c_dT9dR7?{o85toLx0KX}5gKV6+TI zv$CVg)Ye7Q{(G*jI^Y?jWUY(@=9!JqL6>5?SXg zQa#cW=dY}KBrz`(9{OIHIH`ZKye*deLb7$#HYd|MWJo+{+$M$brA0vdl4raD)SRRa zoW@!2>x~3T@M0x|uD<@z4_^T!9UFiry8e=}c^I*!cbg@FG3+jNWouH5Yw_N-ILTOZ z1DG~oAHIdpkfgwk#nav&mU<(0B&%Mz5gOi$nYwBfHS*f)=D6+Zq1=~5b)f0WmSI*D zz~+j8E0=0NH?RQ^yJ{sk|CKYc=E90+wrG~Bh33xPbN<%Y@N6gpVt>P z$G=1D8ipYcP-LJ3BccJtOh@G2-ltl9WN_i&3>irO!hzKW&VeO?V!syPV6u3sLB>Bx!csnQyZS z`qt*=e7ZUI=1J7IR_BYO#g12)ULNjW&W>8%M%}l&-`(BZPhj%xR1Z?3K0xK3?99Xn z9i_@zvlaK1BMS{@kRR1!W=Q%re2|wdQZ>RH@@-lIE8E+2_iYWw49X)gk&rl?^pdJs zb(nh2NgkWJ4>LL16D}z#JcZa!N_l9R!#9SFf2gnE8AU;a9A)zmQ;-ZXpeiPF6h$Ph zUjK7dm8w4Ul#sXoh@^kIrX6#OP)%tC*?lU2;YnC;a3O8r*68!*aDN*tWwKHfYHAhu zclWP^@eFF^MDdi!sOYNk^P2bhU}bP@w$+SC9TZUzW)zw0o}tT&Dj6hb@2Y*AmXjuV zKDQ)8g`=!ugdn4=;ZT6nsAYD9Gq2%w@my7p-v>v*AT9z&%^=OdanY#2;&RrcynJra zJg?7D-LmfDQr$WS=SstFMA&KBzDKD+%kcx%{HpVMLE?MMoxTQTNd*?>(9CZa>}!lb ziiPYvv^jy=0JKnnGFWB`I@tPnR$5pxJkqr_T3#Z)jY7t6rf8Jh-%7HBSYrpt5s1I^gP`utvR-+W}@eKD1Xx~OLWN!!_X5unQz%dQC_c^`bA zT@=JEK^sCTLuQ&!BJj>Ih>8@oCQ{e)hF(5dWLKZA`F%}!fr6)4X%ZHG%CVx*zgSMS-ZtKktU*B%@h(2_`7v^nRC5l% zbApo7N&EeC6C=Se~tCienq z&Z}zi`c!v&R^qnm_{w|_@>#s44ZOkfBA@etDAns?dNI99#JLFg<3L(MDai*&Vw7>8 z#jwyzmZ)o^`Q(iSB$b!^5kOD77<|O36@{>*1E~|FCkLhMZIRPRY5N0JCt3NYr$sNF z5+j9#p5$du$x{G@3Ax}yXv&6?Wd;itg&|R1@cIw)$O1KnhNI`{DU0>10P1CW=v`d; z6=a;^;>xTsiQ!vR&r`%@ zG&2P!#Ce-RwP}ZI4_PL+6(I*BXP5{0aXpfF)}S7-Wd;Pj@Q8VW&si9<7HK z>l&^lW{dsCkU6DWQ^OFBQz3P3My?K3RwgVDQOVo%CD#R}ECTjS7H$GWl*Cj%pjk1G zzOGnGm|ii1aJFa(3Hzdl-WPX^nXQ=?5K0#tPgXz1DPS(CZ9A%ZwoyoR^EC5~Fi38c zP(|Ekl1b;eJjWA9!huO8F@K4J*b2B*77RpMob%U2cLb{8jdebO7OMB++v+jh0#aa* z-a4W<3#5t-;`>N4hUP?S_sjZHkoQ3R3|_(-QK!>3~QdxuymZDdb{t4*RoufQK2PgNJ_6S?L<3tb@U%HDjDbxb1*^CwT4efe9fv60IA za?UEpRuDHZ{4dY4B6Zk$4o4rrhjPN<{VHPwNJFm zJZUw0an&^LHCL1M0Nt1uOMNnc)IJx~whMilCZm*V^KeK22nHLk6E9ULaqV@7vOmAV z4$bhF$zAzYyr)NzU|XUlNUhWWJrUJ^RBF&h>!nMMD%%N%ZP{j~b(K2bap_QLm0_lX zr?D`==2#umW^TZqwm9MFSewIRVWN_@G+*ynU)5$|;gq)g;nJ}&O4^)O=>KBxF5lvM z(?s6`!QI^{T!K3UcL)@&!QI^xq;S`u!QCAK1b26L3lJQF*XGwf-KVGbO!r)~=gf7k zIs0Fz7xmotv)1~40)FftRJV?=kIq=eWdc+b;dO%t(hc^4yl=~G_FmZio~$-MH=vhI z?^uKTpMAFK--sxjPR9_QwQaOe&%Rh9PT10_owDv(7?Na-fXNsM%IL$2 z(q1E(7)kUW07^r^x0`8tD-Hd13FL9-#K3U z@vgDg&&}=Qs`6>4NBiLVxd&Ka^WCOL7uIQLFrM!=)(_7<9{-D2&Gua?v%QrkPuH*eflAGU{Ii`6Xm8n{<9`<=P{@Y$FI zDc1V7;nBDsiOh0SsLTye@)mY_;8OQ-TAco&G)|h zga2^ix2t_=@WcH3*PHs!F9#lZ=A-K+-R?|ue@&p*6g|A2t*g5(tG zaY;LT2Uv@MQp5*2;lscMi)=+g!!&du^>qbV)=k;8BHwhOL5nWPbfD`cF&ok-I_A-d zKrtX8E3)!%CtwGvAgm;Ihval~df z8?QLX5JtBK4pD{Xy{kA%dl-iVDydbm`w|9cAG~NLJZA++V~B@NO=3KsH&wM$GWd;% zk~ma_BGOA^Mu*Wrhf(nqoeobo7=hOKB9bL40IY#2k@=!n10!*YudX2ez5%B2GE5U& zT-&r)y#d5$D#>0Gs*YWvb4pOdDyhMQ`Ne;Rm^w zfaoH6SsP%6N`|2M`>BHm69I2O6k(0naEhyJ5|L=?9JI<_Ur0CvV2JQ@nk*bPNZnJE z%r#1NE=*k_(D$f^Q!WW*+ zbwtZ|xK3f1l&Ocn6=CfpfrxXoIe4@sn1l^KbX^MuFA91(UPNOmIKNBS9}whC4&OJ_ zo60Nh8Awf{2-m;3bZv zY*pw<7@dEn+Iu3H?q&XY(zQnvnX96>&^NxOH%^iNANooMnLZ0D6xBEYp!0DDK`CPzhM16r?8q(s#uXa)>k^NEtNMaG}Z!{7Qq#K~J zngCt&l$XHxT)+t14l(l%y0w3F@0)ZVn|$4yytp2~dm_NRq#OPTZ-hzr^gQ`us{G=r z47OE<_nU&rQog6^X|auC`-)lXnXir?dhC-xcR$L3pil`Ii;KcYu!S2?lk78PY%7zY z6zfH_0(p~%hYk$|vi4Jj2S!6HhBb^7?8VQr%dT?*=d@&#_nMbY;mu|c1=Dk<*{i4u zfh|$PDH2K5Q0J5>j9kXbDp zo{2BZNyLe@5fcT`pdc=03MsL5jMVB~FmWPMdVaqz=17Br4{vEf9}1(B_P| z8qrvIE<$8KHDUl%cyh$%>+L2OW=qmmVlPsMUN5cdw!5~53I}lu*4=PXtCcEo`~b9p zShR&?zJVOG5%i*um|-~oGhIDe$^MkGYE@#y)SCNT;1{=A* znDE`s2MuhZkXk6%J+Tlj1{A7Fkz(qYOi2S{#-dU-Hsde(!eQ*Dl9`_x6{7u2M&<8J zE7pVWZDl5i_ks3s&4Ief0jknJdn7Wmf{4dH3im+zOMFP#*Ns_w=Q1|1Z}wu=tAihr zzD%GR6-MfekEKMyCTw22q*5<(KxOltRf?!|TfO9{CfUo})~r=v!bI@kz(J}D1ha8I zYvRCiXfI{q$bGm0+K!tSDHl>q47Zrmn_e@1=c6T6o0R3low!PspgypVhHaXHd=waC z%J54JD=UimtN4gqxBoBmvNE$D%! z)_$KxxTLgR_j^RnC>yZcR}R5}C@pf%zWxd9MfZ~4#N*7Ixf9i~sA|`Njsbi(r9&5Y z+rhIf^q|ubgTukj)1jtQaOOs{V5hQ%_^_o_mSaDU6&!n9u&(53jXg!MrA(r=wx__5 zsi{=<0_KkaaV(HorJ*f2L_#4pb1|VK;*2;?tBU3HB=&1}Q*1kn+7Ts0)zQnPN>p%(HFu;nX?zEFWX796i;M{TGE#^>^y%&IJUJ}%#=6f_HLG-5>vin2 zRPQ&lusmUSgPVy^bcOV;*|GSuiP1e-mJ8^~m1LUe>6o}=Zt?oK_*{MDU}6Z_5|wQj zoiR1cETJ&f!f@17gXcF*> zk${_y+m+@h!~?~5mzqBIV)nNh#rAX!_A@eap$1WzLJFTOLE7s!)WXHMhz{6_3q`@_ z=nm!~_>PKr;;u7+)MsZyHzzX5P-yS9#Z2k>QAVkL%`=#7_1{4WVnNt%f(y)7wP+|uzA zx${`zc}P@~{t3k3V|eC!jWqU;k}*Fc46p0GT!hZAbHOeXxEAoeE+6n7^JpL69yPn3 z+15XwnwnavFS~Rl)4jcI)dC4s$wTeTP3@Z?Xn1-Zm>7MPK@-;y*c7H zvG?(l*y7#KbXNy=Q3jGBsh;WH_JOZY#NTdd8|>FiEYAh8fcPNO!sfE&&9i~s9gV#pdgcH2C)X^;*+^U9cvax741R{RHGPCB9KnFJLwR zu74K>{|+EyHE%r%5dh>~wx%{Cmk7Ybl&avp+?EJ`mnWiN7;iifODG+|L~sQdN&=`< zsaefXkESwPj8qU@(~MYx&wMvWGsUXa{$5D*zzm&e>*Or8@?TrB z$?kMhj}GjWgx<~bRVhhhM~Ac34q$(4kTh2Qek}OI7f3{2@&Fh@PeU^u$EJQdWalPw z+YCXO2w!+P8Y0ii2GI=~9G!cLFp5`NGP!UsI?4$8vKGon<~Gl5X(?*1T@}(>*WHi2 zu%KB9&O3PQIDXhPs(1lZtAaRLTrWVP9A#@kqM{f*ZZtdU)^wz{bt`o$m}0@~3z#;L zk0#A5eOb%NiqL~5!>;XtCQ~OHk2cF~g<#F<>1Wzumfzz8ZB76pKV2?}MT1g;hOmt; zKbl`>UAf;2J3%B-?g3DgYE4L8tZKgUvpCzHfuSTn#JjAt)Y{ZcHMZ@Mp`y0vfI_rU z&Z)c-dV3_kqT`VvC*As$pQ*N=J0i;mg?d$~?u5-o*|%)mim7p4s_0Yp%TFuj=5_B3 zYVlv57E>*-W|nb2@QU1(F1lgghnp|cWsT(`Mtt6PK5XFqgfI;&m$Zc(<#x0^?)FH; zEy9o(z%Ah)Ru(cXkz?pb)fBAlCopMuDkb?uOkJ*KQ2KtDIwLdF7bA+6#sm!0m~U?a zj59(bP-$63bVW$)J{%Sz!#_)={4LK{a1CAK2Fj5hR3$q8^x%I?fY&8L^Fsh|hz6J0QH|2Dx~Qf$ui2h(wH zmr=+$Y=<)%F#mYv$HsPVv=p_PYg)SgD3k(LU7f88*PZgNAm78NJLyj8l0X=0&#wQP z2z;o=L@R9b9#Imy!mUiQc*M7{KD|6ALn0HrBt~=ay<`SO-R_JFfUQS%YTK8VqnA&0 zgf`}Zy30cmj8#I7M_B?s=iLL}cDIBC2CSAIo^;;q-E~C9$}rs~Xz+HzC==uChicxb znCl;qm^CUg`N*@Guv|gI=0eT#QQrPW=pn?W5D4`!jP4rWQBl75)@WzhwI9@>i^XY^ znZnd7T?=0gF}X}LkVAai`Brid7sB11n>BRs;dKek&c{Rs+%VPK&l>D<<`V`8f$u(D zX4X4q2ov%xsVn<6&Q-K+gblYN@v1cu$_q`@!D(FmKA|>B&pK1|RVr~vk%gM{5|1&D z71k2er{A=-rQ8(Py1HLY0biPhODfj6iW90gO&KN%puu1i-tz;>h(Mh#vF@p0dL|2I zQ*(q5E7E+VqpZhF8KWCf38C}eSf)@(T4HBBsKx~lchOj1vV&W3oU~JHKmc^v`g_lb z$cmfvpSa=~S+}($#qnZoGNp|WRkCRlzBFN|@QwX|3s8h;ijaXx>ta`wZ=&89;vh^m zoc&<%nU|UIDP9kJ%c&cUvFQ&WU7V;6N;=KcO7>~#q~C^gsQKHW-jvvS-WqC@w!C9Z znG+s3aHz2W*nDvxAoRRCOf4-)!(De7W4W3&4PDih7H60_;5>7QqmpE%dB}%7X7TuC z*k4J`4r|_Tt_ZVDqhjoh!Dydbj1wNg@3vB{F(-xv4C{GnAV+6!aimOmR-w)JmMyhT zD9g-b&;T_E62vr=8>~mukGfNQVUR-Fi3r3!E^hAg1jlla>TI874@IoVlyIOW$JO)Z z!!UVUfbbDC&Exn+t2ZLkW&upbSU#LVlMf@thcG%%V8kO<+j5cH=`t+w85f$1-6 zUQPAd<13VLxCP_pJRXB4Gg6I*L5AF`(yD526^o@SLd_HH)%7dfl!~n_keupAcVh{} zqV){hQ|~-FCJ93a`7>MIL9!znJo~)x((ouB&6T@56{7+okME2IKByq7MI0@17+h8a z$w)vlCc?4QoxzB98LtqDzLZ-t4biZNX=y(EXI8xF3#+@wO!@@MI1iHr9SSDyUZ6xDnC7nRsfjB4%C=Zw4-(Ctz-6g#%xWN} zR3D^xC^@op-#5@hE9}Q)YAJRb_cFBohxlqim|u!c^&#>({oJ21a39Jh zn2La6sq4PbkcG;#+nnb5>u8j@BA2JGy8ksqFOmgCqUVHrr;C|)l!foQd&t8YN6tIu zqg+2cry${*slH6J5vx6E73YR@s;mRqZ`w1-MK|f9ce3#y%<1fb)XWdjT9_x=b46z< zw!GpIDkW`I<@Rppavk`iDfe>|@7V3_Do;H7*)tTBQmUKzrbs>^wPh{4Z5JT(nsPj8 zQu`@d)rp6w$YiV>yXX{k?Pjl#17=h1z}!VYn9m#&pJwQ->g_Ws&!h^+`o%?MV-t9n zMge%B%BhRCRDuTcgYTOi{9C3&7K+}gaZ9fgn%{bXy+ItADzC&R?W!EG6T@xW^9-Ca z%vDYz$sQ$@_p4t{!e+RuB)B1nmOf)CU$|sEcZ%K0cz^6%EP$>k7K3SSb*j2{I?Oy2 zsGcbTf4|Hfq^~Hc$TrcTvkf;;)l0BkeyWqzv~H6+Rx>@RuBX??TMeJn1ABifpii@o zps$}IMO$gw8cZ3kt~%a}uxSrkMBm^H${13{W%+T zB=!YWgYUdA=?9P5_UF-;>+F+_!_IS|vZi6evT<&_ua?KgWTE zfG!`&t`V=`V^iD-k%TTYXuyM}c@`QV+z>7R|Kc(m`HU3hbpzQOb81?qSdkn}C-hQu zEoOaA6o5BtM8b2a(sDXR+zOUHN0+p!NZm(I4EBxtjjx9m61J$Hi@OuLBni9B7Xp_% zYI8aDvX(*KPty8zf}k$+k#z$z9m(f;9JgpF^Cl}}oPty=^oICbH(NA+xY8Q58WHd4 zZT!Y}ttGC;+%?e!{JGecqlwvlqX@@rfCi<@1yazB5-LOgdZT8Pqt29_1YK2<*3lr% zf+2F=4oXoTO4&|X@Q$)p9ut%_$g(HUcL3jaz*2CCZfTS0RZjUij}=jx>NSPeOxiOE zi5+&w?uaCsFN6bi_w$@q)pYcGIV$e-amz5+uA@ACFR4SbeBPM+c2{CGKA3{6{Jd6U z#wIGp&RvE9DuKK{)C6$8kkppYLB8-S8rPXg-UHPiucM;w33cNMPUH)=nTU}Vh*1{A zp%?ImP)R5OBu5Z+SYcd1{ahM*dA0!Qoo#r&Z!ejNGU;*B{s6h6y+}3kr}#+5LW;Jp zYGuJ|VhaW0+yEu^0;RTiISu2R7EB&kGYiWeTk_3{8vu}|Fo1Xpl|p_;eW0>$K$gKQ zLV;R+ID2n}pJesout((hM~< z$P7(xiT;wp6hH4~Ia=Os_GM4@wZI4?5Z%^v$YGn>gxlQ2^BZ0f8GaK0hk%mEd%rSA zes&5&B`k%z5ghnlFwG<{R6XWk(`?`5;@jd4X2>bB08Y`q3aMRisD;EfnjMyxX)I1U zje{6K-hWLtIR&(#Ds zOh(gsB~}wQ$)|*@UV@ToS**`A)4j>!qr1^3Zp9sxEgYc%7@;`hdor#{5?wxAqqgD% z$fK8B^BJ$hv1c;Y#^|*uG4Zb!PZUXCr07Ir3TX!(E`RFLpGF;53pjRw}=8b4x@$rDvEoRvNEvhMA(?NqkiNi6K9S-ETNrk3^5FW zGnFLyY)zjbXENA|_N5>1vsdtQT%qL904|dZ$Xz+x9_nc?K5)-Ufj)RlChTLSNkrXI z1Pw#}nW=kI>5q9zi>(N86$VjgAd5MDf&H;&8=Ct~sYSyImV2JWofM}tgIeD4V&zh# zlk_LEDc?20jj4jXJL`OwW4A}^*7@V^WQJN&Mu$79y6o^GmhyUG z#)hjDJ~8NaKMDQ;s_NIW8YsqQd&UVN>juj7+7QOpJ5#7B9cV3FKrUlt0HdD*R-2ej zeG2#_6C*dcW~Jk5CkSE@WC_)|4|}k@>8A2gzZIv0^fcFq@`MwqS9p|<1Sngh>S|D~ z(T$&X7w=!14ZSzv?YIzXZc}4jJ`}<<4294WvGTELJW?Njl-sZ?V9DNf|2Jqb7qG~h z#WX=mIHOFeiJ%u-nq`S94aXO^ytX~%T~a?`Gl57DFc6i>Juq(DQ_2t`7EWtFbUI_s zocvNmXq00UN36%v7o3v~gTq873;E<*VjC4OezX+qB$;asC-xkMz^{BpB96~3{s$pt3C)2Qh!1i?|k(t0g8-9V%VAgbE4gp+s zc!ujMJb=d@^17zaC==JF9Cu{7ItNj?*EyHK2mPQh1xup(5e8?DAAM4!RD?P@j^Wo~ z3|{J$*=Pf#=i{f|mM9573!)*|u#QR5BXn%g6zgSp+5+wE+G#Gin&@0_1?>C#6qTc2 z^s*8$a-zY`Wos+(lY2Qz-2qBgwzKQ>-<%E3kNQ$ONVIiUex=9d98*B}wH0onIu5`7 zQVOZg!m#%w+>h}tByocewin$oIF~77dN!@P#5FS3QoE}<%=MfAp$vm%_R9tGz5 z){TqKnfY$ zr61T)M1^S`B&U(@9m>$uIEVYBj~07~Lbi?Ty4!-thVOu~2ur)fk0WTrBsO=BSX5gd zHCkW8HnZ}+5mn>`!a@=mbDuXsrNL|ymlg7NZ3L`6{_hkhJi2!r$;_Pao~DT##77pk zlUF-563ei#=QFO)x7bbG9 zaF%PHpL=lTtp@Ah{DI?C3Fw2Ju&tK#7ZJ{y7*2OkrC8~aATxO@+aV*JuQb>PHp651 z{tT)~aEvvOD~)5=1D3|F9HHp-ykIoKc(KKFx_2w3un}X7WxK>r@Ot*(yyQ5_0;>wO zdp6;Bb&&6_cq6|C6P$9ux<;F8eZae!0x@*2rFzH1av(}`t}M;L{$wR;5U#|pI2bRl z`|9z`DCyBq)lr&zX2Zfh7VH_)bDt^dWBQzut5oq zPTtW{{*Xid-R;L>&b(7s&He@z+D4$mro{V36od%@vb0xzF7>CSi~)T{i^krWY$sGV zWh^eO&yD(s&gzNNAI(3$FK*=TaMEtR4X23ycJR}WIZSU+N&Guk)RvnxflHu&^;;W- zL*+=eFbTqeGHZjw_=hf?H-T|vqvnSuWinR7L?DF#Gkeg~cja%ljbMuQKKt@cc@cG1 zB85`^aeaZBZqs7!<}TW~`_t$&)V8&lk!XO% z?!I)vMR4|&&cfc@(`V=H|50z*)ald_O%C9KakF}n>2@xlDhwXtb-aH_s#BX%dVy$;4(Ww2a*d1F7!7HV@H5a|~D3EO4 zc$%bkiLDle2O;N~_3D-$7KS?Clv{b{@wPUdH{&ESqTD>NtT?LNYD%XH?I{kLwWOM! z4b6!K7mvT_hpguhGZHREf*|Ox=40pQ@12p)e!9NH5+6ks+ebzdaKxs$f3^${K7Z57@!d+a`4GateG#yj&)Wly~DJ3WRGTAJ!D=)O~4UX`k*LN%`&eDI$^v zu+Duo>}D0fa`(JYEaWJ|%az8C51g6^dz4Zmd+uIm*4LdvWnU@p_y+MpVL_61P>f)t zN)bbkGD^Bh+v)f0sSW#3rd-d0H9Nf#^W4BA#t9T~1h0mLJkNW)4lNe!=tdf#Za|$c zh0mBUBBhG7>ucEc|=0aDnG@j;o*ZXCZ!36)b-X_+-BO zYOrg~3)fpa%d$J2L1K-5`=@Z+{>~xqyAMyP2qLz1l5#x|L2wv^Ni${ZDZ%i~b2ilb z+ql4{6}E={h#d%eQ=R3y#fYSoP+FBDwbleP`PBDD14(>|=873SP6ut=Td(mSbkEvMby7_1K|#A)oi!zqm71MS)_ zhr^1Zp}0cnu2!?fD#Zpm7dbTS8Ct1a`13i?^d{VHY8@FK4x2v$;P8YqJ)L$3<7qWp z&9Ks9bqyQ>UIo2f=o^wP7CW7OL-9Uj`+DVN$Rtn{c8-_aRLnJtZI0x6J^j8s zT>SCv^V`cM$q|f*Rou%vRP+TV6C#J0Yo^HbEZ0o+@bsBeViOE~7h(upr*XY#9MDd^ z=(5Dq5@?J7q%It7+v$EhvIvv`0;`JY0U{^xn93k=?dtR(nbR}s5JfoC%n(()0&ti* z&30z^Wk<~E3#5F~j2uRF1?DJo`5GzebBQC zA4Pwu&9RG9yUl(4$c&@jqh>oduelq=40XfqJi4GOp7*gZc10{QXM?f@g|k+)yXG`p=#;4AKc1NTsFYv~tOc;u z=*$7oOGunX$2B+o9?aO}O56O#@^qTO=n9B(B#+JH49yV{+akqGNXG3nXOXHSH68Yh zbyCsgJ8Gib>U-+48uNQ`^7i$c$=U}>8aFfRZtF=+Lo%32_hLu8;x;Gp7U8OS_c`8d zkEzApvcT5;!ZiDppIIq(;kvqpT<)fP-IWOD*~f$HUMSy zt436dF~V2L6c6OaFjU+u)`I{9soKJ99qVLZrM_@MpiqSSy~c=KCk`wRMgLTLGT0KRND(xu z{WIMTSCn}U%Zd^tE!^s#^y}lp>&xw8jrtlSepkNss1QheSd7pa6T#9LnSeen7uJ!* zr-so1D=k_?3M#cp&w}EPJZO!bmk3^z&aHwsOyt<9Id_@Sxltxpo}Uhr;5a&jBWZIJ z`l~p}8M=~+$uO>jCRd-8kvDvJwyYo}x;{ZcfRE3HMhy;MKnGUP|dQ0N_oM zM!2b!Cw#NT&%GF~;w2eQAm3QI>FPei$k=Kt?H(^`SY1ho-YL5(36ij8{(y{ZL;q;|kzguY(%d1UahVuCu4>cx}Fs99t2qe?f zdd&&{V0HCAeJ=ALO*l;vvXjZmNN`QodLbf1`$P|cQwD}dB|};`SYsj}(k|O0-WB64 z7~cvoz0yrce}NJ5ZFK0v%W#~|QZF8|OZb`x*C% z>sG~VgrG<1CMFY%ofuMyzEuEX z0YWkbd=qTMI2#T$UXn4WsdfGk_l>L1kHDoZ1C?0BXXx!Cg7_x73j?-hbZ%uukrukO zJ(fxmPg!^bdH2seenbC&qQ2rPpmuPvL^QaqO6^cUq^6e%ApP18Cv+At3Cm@({A}!A z|M=_u=NBTdA%u8Q2TYY}1|2;ef)=nFo%14yf_NJbCbq}1(eV?T;1@&-&tAgLnoz#y zZPZw;K5Ep;v#ews+Ga8b8j88rtyDgH&*i=q7ZkIsm8;w4Dx@0A)z_`He|Rs{7Tx4H z`4wb?57HMq?ry6Cvaru#GnV?f?`q?ti$AL@M(v~6)qm5^nE>!XW<^9S+-3X%TkCeM zk=8Ver`S53!!=Me8lg<R6}Gz^e9cv11BTu_I1YzvGU+T*$4FPkc%4|RCG zw_19~)8gc5jkCf0)!0KpRxN`sV)2xa28U~_n=RW3;uw`Vx|O@Yx_e=3+3efqD5+#{ ziV+H*%_{SG)94Qr7st`|eemr4cu?kAjQ34lyktKWWvN&~8Q{>8fNqb?a0j8Cn z#!5AMO))XO{aERf6OYgG3r6TpB3{FvK6kc_Axz}F#hbBj^F>)p8ZKmcV9^T%k6zGO zAzgw=QS%-&9Bw5_J!E9}o_i`G-Y4IG)U4X~g$?orR)h z6AW*UOY&mmDc-)*sFJ3Tg3Mnk41X<(3_gDDEP08msTin1Ru3d;2zbT(QmplHc!m0o z&Kg_P9qJS^BpZ5nFJzi>D)}CQ?t5eMfeQuMcelnqD^N8F z5HFUKd?^Xo4&m&v)^gSkun-vE&=93V5HuYkrKYhf#jy8x5N;_kti-YPRamvA zSxlYY8>&p_h~fOm!_{P)20CG@_hW~%;n(Kj>rS(pPveMRVkchWfSmADFkrx?D&o+W zgmC0oM-CbZMJTlKhf{eCE&H1qGE@MzswG1p4ale631UvgO>K~h5}x_&?Tz{#qIpN! zxf+yWWU|XzGK{FYP~8bz;RWOv$)^w5JJdg%Xg1NB z@JdI5^xLS)Fif@`s6?=~tl{ zyaMT)of+}!=t}G8i-Gi6)y(CXy_slzJI*lcGJt5-S7c)x16Gt()@QKBsJ3;vNY3u9 zvKaYn!YgH+I&=aVeH|6fER|OeD-jlj^#ujm4*BF21^P8Rk@Hv#kdhCJiV=$n5|fUw zjsweiRQQ^5wU&~gp5zxhw_PxLs&diJ$tC8`%cBzX3J-Xchb{43{X1J{4=0U1OQa68|h4#q0<%2j_Ngd|Qj7bd(}N(yW?={YV*S9b6@hoo*WATk~y^jbNJ zg}RTOF~5$k^6J$Vn{geJxt5*YrH7smi|IqXv{N0UjT+s!vozxzQz#AH`W3?=I|db| zEDDg>Z%5`Ewrq#9bmI+k{f&GUP|i;RS)FtDhW$O9A<4m{1m6t}a=o}{9j7=pH;*d& zDmE?g96RG2$}OiThU-VX8xgW=iFflKu~fy*)o7JwmCzEDxe~ZYxKu`6f#*T!K6T8y z_3|m#yostf;VyWeTm@s}h2)C_zD?s7CgR!D^7hyByIt`Y*0PkjXsF;2^5F2hIjN4% z@=sq2@g?JbP#2ozQ2)$DSY8Xw91KiEdyhd$q!Fu3<-!G~byC?)QYlvxh2v791?rGs zlQXh2b6kBCpJl+A;o8R5mB*&+zojkVqA=h9lDWxm&x<8D8uSN2q6A8QcV+H4mR+us z0w+uR&B^z=l7~Bg0^dsIH^|Q>7`eeJ%ww{UsmjzgFkqz^H{MF;HW*X6a|)ywx?mfV zXh;vu85~Ay&vOE+vAHL2bG)W?w8Wd==5`(vjAL>}CT*WqT^f4OsNakrva3noa z^iUejg_0B%-K~<}eIi1~NampN!}Mw^wuYl(i7Hxng_=3&iGfuR80E0Y#;|SWW)rcq zxem0oskHsj&!>npJB6z;+cZb|&Q=v&`?5zkjr$0Eg#|mWjJN`k1I?3jbl|{$=mK9) z8wZ;Mppg1~=S0u-0YeNSt>&o?WXGBc)GEd$MyB{;MSk{+juHY>77G472d8b!j=#7= zD6EKDGYf^s$v`*xPAtg+_K1coKUBTw*LSEmJNnr+h(VMEE95*o)b8;f4$>49@EB0j z#>&nK)_6`(MAH=bG!D!mEbg#Ahk!gS9dTKb!JC(#thG5SGjX%FT;I67;8jW-XJF>4v9Y%up{q|Pr11=_oi z5W$gB@IrktgkZ^|BIfzxmuD)(y96tNILEqOe}NW@Ik;wB7`O_lTY>1ZwsW>5m#C*z z&MEEhyYD9M8LC~Qj;J_nTt@&Ybs4FrfErGdQoL2Fh*W(-8WkeIB_|7(Z{E6;v==s}vN} z|Ia;=AgNr^k#bJbUt6aCJpA|fEz@`Z zyk+`LBXttoQpxW+*hozka&_i^rR#GU zsM|PLmfM`Jk5M8#syBapdFvxTyOt_b2mdX>_HVRI`PsA^3RTMu#@ibI-XZ#W9e>kD4$j!!oc!?v4E}HGBNzIX zAZYBHg*X9pKarZ15~QlW**!et(&O~$mw<-p^cJG_6MR}(?gz^x8QxW( zVreJtev5CxxN`VjAvE5bIdDq-`Z94kMLCKh&stBLjr*;{ zRvLr1PtJY-#kQyFpW{b>wGgz#y6w4_-)DG5(~vNG;n|K^^#rLXu|%~Q)?kMkZ@Tu%u8{=*^tVdgmXr|=(t3{%mJ49~B( z@E@Lx(;Hp?Cx;Y;a8~CZ(Dna$hjh~l`Ohs=OWv%%(DnQ-DF1P~eom7t>vX}Q`sHrT z%&p;e&qv&1}r{i(tAx%_SE4qbN=hJsi-2(V%c$Po$K_au_Er~ z;cx?brV%|a73Fq|d%p-+j{>9-5_qOY-i>PA3L)l61l|RhvV&UJz;7R}gh?$K) zULwUaG9BZ6lTVIPDkCj7laPK>K&MzLr+F;#x%Q@zHM&&6LT)yF<)(;tyj00!WH$Tp z<_|MlIaF>gkMQ=*%q|0_j?5MD-cOKsg-=tu7G!a69$h~( zXK(G%j_7FrPQo1byWNk0#oK4LE?_CY!%Fqs`%r$fPNccBH=ba1Pgmjk816>{#ggP} zdD9cr*8*SmnhHVpt>cE=ZuFR%U|IzuA)Tfk{E2@tv+sM!QES7b6?QN)?)&JJY9lnq zc5uJn_p`>-Mp-EA60Y74@J`gmc#Q3mKHU$Bpw`8OD(q1bJq*bx)g`1d(ZX=>u{`?K zB^8fR(!PcNrncXwG>`4G_&kgnqSk*MR5)PIco?%(s!v}WJK+BQ@G|ZgQ=fULaLB*< zFyT2-pZ$C6@T*SiBwj8{jwUb`(iVyao1h_&gz89AV1*guE1o3a=SQRJgxGS?{4B{*(fS`3EWB|2i>Y zL>*$G$}ry_MgC1pD8zs+&?mg9=xwA~A9)iK-s|1UAY%tXI* z|6iwo3H8j2O5f_{_8{{N$ASN%x;euatH#FT@|pp#PMTEJi1o>z>gHD3XU8Yi|4b&& z*vMFMKl$~ix_Qi6jLli=(Z5wU|FcYf@~0H=MHe)l?O#&B|DO^Q{<%y(S)|T#aK7C4 zaF`Ry^6%EopMJF*Rz01y|Nbwlo2Q(Cz_0%(1^n+#1ZQd(h!_miC^QNb7Qoz|LeDA? zyOpGv7JP5zSbhj^umZ31P%r7DvcS&$8_J5N+CxEj88()i3rvzhr!lArgZh#uA`&2x zB2)V(nH+^GqC&4WNO=ef7dipNoF30aTslv%NSA0(dl{|mW%QAzj*oW*gXU3Qjs%7- zJaBKC+}>4&8L@{M2q++VN6`QLXdKr_cSVjN6G%KigUKuyj1y`ajx5pt@ z*HM<0qJH@NwhmBeJH!?_oNVrV{MD?dNQ|3DzR(iu^L|1;4LlT{9_4=0E$;%)Dl{lJ zDmR0dxZeO69_MC!ndlKU!~hQjW6Q0$7`Pz=_{wiaqzz8L86O|^j7Wxr%_T&aKj(|& z_YDP;a~fJ*!gE~@Plt8w=aJZ9>A8Ec#)aGz1WV9=V_?8`Nf{_G4=j~KpiyOx0eW)z zMRP$W&w47l76l%c=Hy^12HI{jm_JzQ9sQmPAXaApD-=s&C16P*xG5i;n#g?fMz1oL zEbU2xe(*P%@*ba`lb#7|F_TE>WR&y*^$a{U6VH+#T)ymGjt(m!bI^ z&O;j;sA0AL2NCpk-~|S2rvAZsm>9BY!%CYJS&`ydw^?ZZ%Yj#hjic-Ke@+Cg>?wP; zff-IJ8k9o*#Ce=lwKr*)|I-7n{8tm{>&TxEyp}zv2lM~g2i{kUs#Z^NukU=`@_zrF z2j2Z*^^fjPXXkI1FvvL&a57y`gm0XOLJkz((BE<%8U255-%IYbqIh3$A>QY}<9SqJ z=oALgxFR9$o5F;Elz>)oTDU-&3N>=ukRWF`84=N5(h(YLxb0jKa4;PNC1zikXs`@& znz2MDuIHg z(*N8r6xsc@8F~ojFylK9=-?NSN@?d4VeAYBRP=@#8HI{2h;&m62gjSl=ikq5V@S41 zM1?6t0=_2vd(j!6!8z)oI?}-@>qmviaCZehJ(<89M z#-6ezq7q1oK|CaK8x$l7J@3n#mZF>WR7XDd80GiH_jw|)B`5Y!v%1lY+Zh*TfO_^s zYKB>yjO8-!6KHrleqs>=Wg&DtX$2B*i*P1XO^8~zgnnCr@%^r@Y4R9$`F|!)ekQ!J z`X!Pqgl1iX$9_YX;dmsT)u`-B?V9(#wWLHYY&zzwFpu<)6*z)0F5#v?dYev8a|I`{ z?&c%r`d7J6aa{A1kn#wOa8= zTmcYAt+wu1y?JE5>MhD+a7n8*D7R4ew=3|x~ z5si&C(QhlT&HDxLOjAI0N2R^T=<0^jXj3Pbp?#42+Rg-O!+<)8Va_?i#0hABZ=$1uLM%0q0+HiOsZ)sC)l!t-$9@Jv1pKpttrt?su&&I)Ank z4W@r<1tzi3E@?6@=OnG$iqb~6AWSB;6mnLJCz^LtRvpgI2o>RsH%&mSr`6(Kml$H5 zkLhbEx(a5ILL)dBw@PCoSI}UfhPgN>Uq~zSu)jXYX`g3~%A2swE=zf+IGj;=D7EPP znftx$UJ5hc!%BTyZtR)ckgb%=-Vf zvG+f3W86Lyqv-h$-yuhZ%JfkRmupDr!878|L;(0Nsj}bYF%#E;=)9Fbe@q(26rGVk zyOX2WZ#Tq;qYP(CX9ERRc#h?h{^4OgUdDcTyF)IO z4iQDIjSEpIpu`&AZPZ#LKuG!?H+}wTXYaL*{Fv?_?qWo6#Q( zJqh)f(I4`EAN{xfy??I%JNmyo-Cv*lw?6&)SEIlC&;3-xJXnplr(aeFX-dogBKiGS z+;y#ND%+-&z3HIrA*z4eb^S5=hj5$!ao6=W`rrMdyRN-;xnGS-=5M3_+DM7{UnIZ( zsdrryr^*X*{u{s)i>iN-{Qi6Hx<1nzTrE0)U*1Ol|J+^IpCvzKA$w)3(Bc`@eeQGabNZcgo#*#l*L9xT zKl8tNjnDV}d4JxEU_7mP8dnW5JQB1faI$BbMQ1JL!jKu8s~SB-245;u`hS{SuWfrZ z4a}i8WGRy?TTem0?pk!{e^0JKf~aDDze&jY_sRAB`jr+Z{H^wC@A_qh6+iP|*DsMq z50W9hNp030rc&8hWw}#eg^1f~->+X|_prkdXZhmq*RRn?(c>Q#jsF2k`#qbG_fgtD zO6#N-t6c43`cv`xdH=Kt`48ju|E2`_pTL&Leb|z)d&Km+Xs6=z{l5|I?8BCoTC!-x zO5Nb`<(2wx1;qQX<@aDL|1ZIoe=gcNfuo%0Bo0Tm3WR7w4(La+W|4bD>$Kxc_Cz~& zAYq_0#7dh!qmHa2hLE!^Wu*V65oHt&SUa2>ZS_J0LB$^7Y}@rRKrBrrt;A+SwDyAK4GC+g4sm->Gn z2>dVC`u(Q>0S)RTDkeZA1qe)0fB+4~y|6PP8^o_>hjH$XrmI&=q_4%_i8~-CJr0hW z?u}-U3K52_<8@O-xDjgJm>Fb}fTg;dvROh;2HaYj05?l8!2lU!Q2r@IjbZ>;!wOeV zdQfI&D4(QahIm+EQ($rx$F5-;;V2c8^rW%UmUt!rcMKck;#fxMf*abladWB(B=IDk zy>xz{jpLo@P=#&b6fsUHc|->2r)*AEI6 z()doaGGLN+XP#m6f?nKn@YeXBV`_At@A&hKsr@s}AF{9f z{J{K&A&S48Y2IBe-}!i*clRsfoxTQXty&NY=ad6b*s@?{aqSvFc41{B`mwL2;d*w&3{UiNj0~K zc{ggIyJocpt=t(2x(w42hK|Csg9UBEy}HE>MkVag)9k15+M?&pB^*BEO^L7`f%s8z zJvAX@I#EkT#XL!xL5Md1p{r1OFryE~P)!RxK^}h$nu!qx?COJl zl}kCoDlGhq1yaIfUF3Q@L376oW8{-6kpGzgyEWZqehOt!`WXqggkuJ3$Ara0_e@HL zy_I#DExu&kpvg2R@t%yv_7a&`I2+avg(df(Wz+PHPVod}SJQ|}74;jrsiX-$92C_e zl7{S0ZCF1{FIBv$Z-R1qfPHP`Df2LU=t7l3&UCtn;$;6oKu22sV6K?Dj5qpzVBbc@ z&a-*3Pw(gqR^k8;a}1-!JObf(8!UwMEH$81qryh$>-68xa(?KlyS@>Yz% zSrJ?Vi_I>H|58$}U*eNSI#A+ccA3X|{qJw+kA60s4Y-u#@VyB@wtc_I@8%%gCzJkU z!&!QJHr@98_Uk|FuJoJzBIwQXsDL$I$_*Vci_(PJDBjHCpl8+h7_Lu$kf zhBbS|bb;J`cThG)b>)@et_iHC5+ui{3DE#2aDh4H<-|33$>0JQZ2kgH&NZmD^N%u|-*JXC>-Ow43r@$N7TpH1D4$|Zi?C^g%NG(H0 z+W*QyD)zzvPH~X3h0UsYvec7?50}wW~!X5lRf7(xU#5^Z8u#GFLbwm&!;CtXv-an4ysf#M)_IA6>!0@c-ea=R%!oj}VA z7cmXV`{B+1=2%dtzD@-Kq)@Q_?jGr=0E@Dv>4 zqSA;gIZ^;jH!!2tsW_5@;6r9CJ&Jd@-M8Yv4tNyhnH_&=;F6SGv-wlz23*kj!5YW@ zE?N-ByBAR*v}3mnMyfTsPv5F~^Qqa@xgNt_s*|Yn?sQ)gyE?yQt8DLp8GAx+ZuZn1 znFr27^TqP$(-OkHw@i>*;w{9!dpA4?5L)n`p3YxfOepz^+WLtnHO++i)AuwA5)kM2#NUqkCc(1&hrrHG`iB}Vnr zFpko*a;0M8&p-g+35q&ZT{kHx5PdjlOILO-MF0;1aPAVpFwi>YB8hiTovI7eO-W9i z)$7n9A2Oh*QwIq)k|c`8YfLb=#|`$&p2llTpqTPL{gORk{UhN(PQTxx$^Toz!LR-I zm>;F4H?RCiIIs-6?e<#kN5a7?!&0#*h93zB9!rEteIK762?yJX=Y7U;8m39l|I1zU?NpgqZ4ZHETrWla<|C0DmfU1Jh(9dN?u91 z&ejH7P{X$~)sk(Ecsp;uxOZoo(80WgQ+(ZIWLw_JT z)FQcTkN`96A4qGc%fNr0kx;mbYN?%=8^=t`ObSv43Iv}-2t(5B; z$;d*KE#W>5K`w_x_Of^oH`p#J)qHu-+h-&7WuV*f?nR{SW!Bv1&nSVO-b0r@_~pKJ zE7KfSM!JV62Sk0x`Y0*@l&v$0=8&LMu$hZy3`oczSIJMXJD!@wm4F?^ z_g$w^l(&M(6YeI%48c8+F_+SKx)kjmgfPR}d{-WVwGOfX z76oMMMDfrL$cjBoXU$SK+8GzUkJe^1N!q#O%awKLrXbTLc}6Ws(DM*l5S8omRyL6- z9jx=a&YOX|JMW2#f>WKWp9E<_xoYqBC7+W|Zs(MDzZogx*ibp?H#dA;(=b<(r{1_X zO#h(tiIjS;hn2rv(LT9dzdX^b+MRrBNBCTOc|aCN*k#4@)wk#A=HFy1YtB^0u^GL+ z)VdLkxe*zo&a3RY{MemMZoJCz^V)-#=VDJgHGbMy9iuYKsto(`DSGx;z_mA5Ww+i> zwmv=_ur~DT*tONhU;hEtfB3VPYai?X{x8@5q2N#Ua{cj#f`19?107Z)xdxp><%=|{ zQJqj;?MMyccxP^?8B|QN$XbaW5s5L2mUUuc?9~8q^sUAu)(SBHO61~MUyY3)eMPZy z)AtB|aF0256c7G_=n+x5D6Jlfhir`Xh*DCJ&cq3F$fb5kg{&olkX1kRazGNK4)y zn*40~2sa$5`&KyhdU~-Sg^P-GPE9GuofcNrABaNLrH4r(Ma*08TJn!&nDB~7m^0k7 zkGIHZ3U!kTfa}+<)}`J2T*9gdAGF~}OYKmb6O1Aa@`3BK{oG1)$>MstRZL>1@hhcBM;%bEM^s(e!!dA8ItX*slvW)yy3qR%q%qg9dWa-4!`*oRbT z#bz1n25C4b-m;KZhX`3DjYJ$zE986TsZ~Zl8VAM{aU{Jmd4VItH!Eh>yTXr!^5vj_xy0OMAd3TH5Y7{sMm z)_qTfd_GO#^uZ#{lvGFxXL8D*B(o#kT`cN*Dr6gl(?6j+=>9zwl05@Hq;kQ{5Z!?(k#n*pJg}fnVW@=XA;nwcI_mJemz>RD+}~0mqc&g?n(-Di z$qjp{kjr-E|AXF-r-A@tze9ci8d_7R5lJV)1%bI2b;mMyYvdwXHM*n0LN>YBi>}1v z!&KfEt+!J$HbNf;j8ZEv1-QDhaA>Q zAH;K~@w_HCoauwn$5|xdSv{=cEUyRYbfqur!`SQPjhD^d^i_HodtAEt;nlOqKzQGw zY{d&FqrwC}WN>f2)3{0ZQQc~=>Bg(LXg`rc`?To7m7wIu zvhNE!v=CW*d|U4yUAp~1e(-B<%jUq#UQRLNFr}4^!J*iL{Ovb`wx69TYc@F&8us+5 z^}!?8-VN!U4g#Dfm>K{5TlHWc^Y4p;_C4G$!w*VtO`$l?Z@of`Rc%ctD!$#C!RY-5 zVgBSIu#RkSdXg6=%7H>rY11RBF*PV1hG>8l48&0diiYzdMV*lxoMSaGF<~@)K(JOO zaU@y;a))X6$^`iEzzFn+uq$hZ9mI$W6|3eZhzwK0Kn*U6Nb^p!-*D}bDi@BYo+#qf zL-cakn4`~pMskkYVT4Orh0cZ+>*d;kU<0hlGDnN~-+84-uBX5*exA{~L$9kTO-Q^P z`U)iBi9~tTreGR?e3!WT(U7`S?8-p1ymBg07M$wyL|BZwF2yu?JzZVyHJ_F;$Q++4 zeqe1@(`kFa;R#r{5<)L^7H$|pT+gIXzRISK{3>Ja&pUf7k&G#qV zN0uuv++3X<)9-vza+sNz}Dv7yz14~FBB!l_}$wVmlfn|PRnMQ`Qsb2PjLLT-A zt=F@r*9XRFM31HEoGZ85{b*$*eW~1z*4bKu+uEem=frQA&-=T?{x0zk?yuuEXZJET z_VZ*HiDmzlFkf?5`nM#^U-dj$v;b zkrN9ovZst{BQgjs)n3GWfUTR)BRWPMVn7jZBDLE$YtR-{_(LfZsRHtAabXt)DQ4A7 z5g@_VYS7h&Kj#*H4_dUr}eln6#5GP||^< zBJUo1Vh+6&dgky)Br>{ZEh&(feB_}8Syv@h;HuS(;DNkX+c|U&VxO&d#s-Xwwknm*nKU@>x{>oBlyK~Eu%TbPd5)KxsQ6I7 ziLilX;!K0P>alDCZU2p|jlp@wm)u%?!KJmiJ4|JoTm9OXR?uEKf56Rh7I&h6i)-70!Z#z0>`K* zN*9Vc=m0%0Oh6wcOoeB1BG*vXhrNpdvX-K|=hyLu+v;O+B`;_L64{C57;%G54P5k6Q!x@7JTDHQ$$%gWW6?XML zw3pWxA5}Y3VoMnz^O|*D-&FWs?!$wmN54P5OX0lTAel==q@J_mLpy$L;+p$F&Cb&?L@y+A&Lrnq8 z$)PnjD9 zvEc3CK-AFR7@%q|EinCMmNRDdmPz&f+t>6YzS6>=+UU!TFT&|Xl`Ob`$Gx0jOhAYW zfXya7I*QA~)&<~dW|zXj9kb;GJCFjKj{E8^kBNsh5%c1x?$8$}9DU?9laxDzo=I+U z0Rs}iJM_ZWwd+LB#Oa9I^S}&_Gvp?l=x*C{A*x`nGgA5Bpme)$*+m{b?pU`+)~_|J zzS_;q4^+D{3F@u-<5zGXPh$ z?PV7ktN~YQ@T_Mgb*e>|&1inZd%S-m`TgJH{Ts=jjNAJU+LyS}4`s+JWtlPcMDYp( zVF)B*EZhtrrsl$6i^a0WxInX=i$A(F>nd}{h)${@i&jATD_p3Wjo zA1NZQw>aeAC6`l4m=ho3*7MF+NEzatSDDnm55_-8e^yzhp0waJtTz`>066*TgyA+t z4>g{DQ*uF*)1WgVej{=NAJDs`E#)_@qb% z++1TC$$=%ZLofA{7)Eh@o23VQ;n36KV_Sc3keK)xLAAdC{r&@Y|CsV88@T_G$CTr@ z*6)L7yq+!KH$DUaui4A^b(*^D3u@Qy9A>oWCy|k)&YGUQ|yIFQ=SG9PS zKxm}XAoF!{x3EgBtPbxqMNY-VE6*Bjl^74H4`vl$CZHu|@m%lfdU%u95(DD|c^)G< zC2*thvE2OIgPLU%q9G}TBP=HQ-`Qlk>_)6|^h7;p+syI;iJ)=Tf zWN+ZcH26bXX3t0-!rwc^Qx9#ja+kHVA3URymUSCKmS0pFj6AxLeapy0ybL~Yma+ih z6FuP8_CuDD8@bdYrSR5m{R{Ywyikak>SMd%h!(c|EvFeZiOXsCtwW>>)_BRnN9;|* zdD7E94bEzE@{DLwD`b607t!)24f{pb7qAU2FurCmkMOl9F0Wh=V>2+r;L_uHMLf0R zE?Zc}Ly9=hk&Gg+79LgOIEB}Bv?w+Xeu56in35`@7XP2vecCB zL^g3JvY&H$42V`e5n1cnW9BO9%(*8W%INe;cZ5w*W2{K;Oe zKmVHG>?khQ33TvN&5$KG1DZNjF29Nl(WmazrtfMX#G86=*}~}R5D}FiwjeyXvumV_ zA`FN*Dp^$7Co5}4FMLQHqQSH4KJdfIp-mE}JuHygaEBB*O<^>} z*4NwPdl7ot&6V@+7AK5in}{!>yjojXl94G%exV768<7|eX1QctWdVL#vtHETMM|i* zp}5nQmO5A-!@}CD32E(87hL}q>K#ygS6`kGm6=Gs0mJs2sJMx#b`nJ7;0C4+sI*d} z*9dWvL1el`hV!JGgy(jDHt%dkim-^3T;#yXvDA!)o)Y+(Y|N>hv9!W=cZo}vjnG{6 z*`;blvSP|ZCSW#!`>0akG*YL#xMhw7Rhd$R@;x7qb=<-JQYF^@p-3znX3)t~?lpt4 ze+V0H;V4>VF%ES%sBJy}?QEIGVk_&FAPeJnp~5P?N+b3=53<&LiP~4aN32AxQnzy# zWX>@Rp?x-sM|l@?gtE;srRzmEH;MYTJpJ)Fe*#7lZm1A9<{TDKs^ngVY=l3^ZAvd5 zvLczrhUjL6fJ=eKV&>k!@iV|nB(n^>Im>`$iSGL{(M7M&9~HlUHJJDP)_ zziC_ehneL>$~s|7;cx!Fv3F0KwX^;`v;5y|?1huTRbtS;Ds)hyPM|<_5eiiI+JoxI znnKM;R%UUh7FqUhw+|YS4_+sR`H)9D83fS-9R5Xm(@Ty(PNR9iYZaGTtRErcnA*-& zFA|;&KKrDdT<3g0k4}PP5C(yb;MuNGi-=o{YZ7#e4e|^c%MlDV%A)jtm!9hVGd^dZ zK>z*uoPA{cCmXxoBZj0P_KTS;;~!B>gWF8CDc~98QkH=fD6Q zcv&%TE+iAJycQL~1tlX1WM)K&h`(NqjV1|b`cg~=8RM&Hx-}P8>pCq~X;um2&}pO{ zQU}gs9%Dyvf!t6^l>!#VIx!VHp^;j0ku-7cvqju;bviOt7e&s83Tc(MAe2whB+<4O z@twx^oQM=o4pT!OvPbr5=xU<{R*D5ST9BD2g!~otjJyLnV@Ld#G;ExST~`eCYsvZBP``nzGpgHu*gnHIitUJGY@7ZVZ}R z`5Goey5}%gmxap}(L^x}n!Kok-j); z!p&44)fZ}^#1K#EN1~*yVrZ_yxcS7*A>s{qTVI&&Q?Ah@lN3Dvn<*VFAMK>n&3L{O zi_Dtk7EBa%zT8o`Q4)468;>bDo;PI}u%ns1el+IT7w>}?#jOrz8s;uCdb?5zh0UC(L7x&31fO2-7TIx&F$fey?&aR7h{W4$Qr-hHSj06YfmKm$a-HpzzP3ABc;_s&K67NV6zv7F8G0T%Rc-Aq2+mAFLab#U^ zG$r?jU=Y-mIiSCudN6_@D%Y%t1kCF0z5{nl;r>9P^-rl<4` zBhu?KO9{f#XD0_v&RJv@Zk9+~fEyVt)nUt5MC6kgjO?W?(|bZags#JfOvLMP4}3i& zYy11X`~$9!fA$crhMV{u->`nIMo@eZr|WYHljkHXruLMQsyVEHS#I~_=q5SeR~e`; z_*6NsN+sSK3WmgeR$JiOC7Gds4Mo03VcOoGIwE4+44_DfCx)kW z^X>S_D>6;9n5KAM=B18WkP3@9I?+)P@}FEWYyN0Q3!h{*zj`pVm6<6O+IH z@YzRve+c5+FJ6hB?kzPeu0uV+h-+3@)cZW&FJs*=W8E)fwf!xoxW6f5-LqRU1CCHm zj=6g$$Nz3%1KpuCuyOr&1Do5o1~yiDle#h3OkV`wFZsDd=XlOU9#fS~dgtl>cpLHT z^lXdLJMl8V=C3TWl?`LHyg4p0Jn%HlIh+K1jtmqsOfbGIo?%~-%C2Y0Z4*MW5M?*9 zt;?T9ur2lJpGw}D?V@OR0JZ>_*8+Wb+RgBTG1MTr)qcrC2dMvNY05qt*yn%#w|Cp` zqk(-iAlbAqogmu>n@Rj;+!T$jP`2WXh_KiPZ z`RTt^Rp!S*>|~y%3+HDlqO{?3fvbF|M2(8h$`TQ^H8s&86aw&uMGW__4rAwj#d@(} zfyu45_xsJNrRCz`-i?h*6*Yak`^~C9NhSNkH9CK@;Qx~+eSeYOU!?aJ>5o78SN_9< z6#uBty!~hBd;k3Y`=jrDW$Yhv0sDE^*B}1s{^l;qZ@Jaq&^IFDeK|^2pSHk+(p=NF zN>RoN(AdMY5{Wf2N`sWHFLF2k&T6a%6CRWii|i5PSwka@@ZcU9j-i11w*`;Wa*scHU+u189|kfOl#v^{T>y`n(_EzOVgHUL2K z8X%JD0hI~mobavN5$RWmiu@Kf@P9~et0VNM!7M51ZDX?;ncvde>Pv@mlmh;e-Uj6R zrXl^F-u6R7I-r0+RDfA5zG+Bv3~2ay&(>7h)dLzzbt;;qo;G{VRAnq@N?>KaQ=Mo=G4;w8xtY5$LNb{v*!7bDbEr7L`QeggW$xq154;Z0#Zmmh ze4D%{fy*NW_IHC$91ik+N<3R#di9Fp`N>VM zIDWx3LADMy6MwWrsW|CaA9f~5WqRSvb&Yk{Y_j%OB|?f0UA7w-cZ@uhW}?gRI^DuX z|8<6qN8Ia7hoF8az(^$>Ma`MXS(MFbkb=T_W-fZ<_?2>s;Q~A0^Ldwsy*=}T-+Grp z!atDa3nMuO=8M9>@kD$a&yxjwvb?xAAsykfSd29ZA(dv^?96Lz>42hPGiY!>%Bggz z!XT%-Z?~g%uzV*H<;avx^ zuGB1gMMt2Y!hGW6Am(1R44rs4FfF)MH@A?6Fflg3(d;3)*2nYf;M!e=$ZfL_fLKwq zXfYwQ9EC(i_;=#Gs4kY}q^bqbC_Z&M)qm0CX8rJmIVaElxhCpx2;Za1qeDgkOATeF zGJKaFnAu7-KD0W0<9!)(My^KJ3;;UJk zv-z2$?{11>|CO1OF3)N#yqeo$UcOPB3U20W#(B`000D2Dnbu$PdnRws;XL7W*a=hZO+nRxT^hEpq* zS^P9@;*mF;qhFGzl5K=t7;pIXio)nr8NBf9+-g};1{XV}8lwEGFnK4)plEvEE{+e* z2WWRAJX?n^zD4UA2~s8%LH3xo3C@`oV8g1wm~q#gU}n!@#u4o~WCX0fIe`nCV3sE= zB47=@F9qpu!YlQGFZi>zl;A@i8`6vliABU=~kCKyIk-D%cM#@qX7syi z(DGVDP;oxZfyT$ ze5q%#lW~+F#z)e(HNczA$(%UD6$|O$s=V0Zf5IGHawW_gL64|EC+q9=EHS1skIyfN zA#qOfK=$}MYssLxvwDXIViE56*h8wQSxfh9l-%rjwnq(itatSv`QsWZz0TdA&-W^Y zJ+e&3gLF=e3eyHZsyCi0_M!$YGAj&>1f9h_f9Y2$pc{5c3vi-b;cBe(r2fUA7g~f5 z(7?9%q)20Zq#Mh<2HJ$|S}#4rCt|AlPeySzX(c*uyibsxJhCwc78Ipn&N$yB5Vm=&F3b3p?B#~}ep~UO{F8<@-j7~i+#qLG4GjZ1)XQ$IS z#dS{(B2l&8ZWD3`tv0FeR}VIW0Sq+bZQ#KLbrr7E zQGZ`<`DMxGzRIKKs`pg^UzSg?s7~CK{!o|pWyQl(^~vL^4^8!7-kiU#`sgA@3d&uR zDd;hRV^ccj)~CF8VeeF@4qp3s=WzaNq>S1$OZ8Tt*w?kh*w52q@3zQ}`Rl3GYI8Ex z+ryq;H*ybtnbUi>J(82ZiI+LCWLmxRsO;7$Opq7;!)94%3T#3(Qq(8W)MCF08M$5(XiQ1^dD8K6;y6DXrC zlnGa~nNqZcU9=SzW$P8~fQ@!)i9R(E?YtH3$`#|L6ysqR;}sm^Lm#sl%gw?{>k0zy zip6g0#gd$3gOy@Kl)^9D#a;=Hy*3dWz7UI2LdU?+XfAZT9XgJTPS_1bU!Oo@7SQQR zahb3>lLdU9IJ+mRIp3Fk4%1rO`h?JT1H2`S%_NLN`6gDKB07d9eI7t?)nxvc_;Y# z*NN+Z?CUi2C?tSYo9k+A3vd~fP)iS}gE5=hg?hqLyn~}5ttd|AXztb&*2xsE#S|nt z<%n{s07GiCSE}7asF;4Lgng=Hc52__RC$Ip!Nt_$%4y=e`f0H2G&Sxt75&t6TuF=( zvUp5v4La$GQbMf~OC1(iK80>jimmrTn=mAp*rTnpfwl~2e{6<5LxPQRhNFH$xmkv# zeXPMEvA&dR2k24X+Wh(2mXCKe%2j)y>SKKMMr_WLjAgE8K9g9o5 zvQu_-CruGf4C5h&wxxx~6Ju~hncd68qyb{o5-|lxihgqK`~t`inJ{UW@7bU6xs^1* zm9a9((ojRUT~@?^qg&P}7xl?6f--K7uvFY3z1hykIk0@i9LEFjuUiYTt#mcy!U|CA zuUn+A_Ke(57(ZK9kmCv}{VMTL9ODy4>z%BS#jM9ZH$q7_CfaUH?%a66Q}tY>DuN4J zi7uUhf$F%Ji~Q2j*-7o33DfA%0}hNDDvY1Qv)dIJH%1B@HGpRUgu2VQ#jHYwUdU;{2&yP-32D5AsbSb@ct64da)|xpz;X+aS+m6A;?p?5gD8Ll!B1E=3+v85 zt-MVtqGqiCU>ZFt=w#Z8k2@59A{Jj|Y`J!?IqGl=>eF>apO$#Xmc)DEG~O7;@}#!M z7)BB^Ql&NXN~%FfiH3Mxj~=ePCiiys6?Q|$N)5&hS;l2q#`4uGbsA++r0gY3Bc7CV z>vCzi1`Dqt&Zj1K1yh#EU6-X?hn+07ZEGXl#559#gP({AJMBZNq><(JQAg7Fm0M$u zw@_`jQhjbkmDgi;9nwv2CiRA3t9Gsxg`m$FvXrXizFlkxKSr-8P4c> zui&d^$u>*yOgrHtB| zPp_{@S}RXFuuV!;4If;puf-L%K4n}6;18(WF2pntTX7A5qMC&Q55vZ@%8b9>YpUj{ zr~uU*00IJbjacl@vV0~Lm6R84!hyr(g)39}fod#P70n3=En&<3k&FYeH=FZ}29nMW z;GG8Ip0=D2$9g7WwN!GmbAYj}%!q-sTg&-aBbIgyPU0EkuUASuKV4a`!P(zq3@*og z#x%aw?`m7jS82z&SLQU-4BnL(I?r2&<1O77xwodm(#8aU;%-eW-$$@lOt+?gemmPVUd0!Y9T=hdM=)#>Aw?9`kfDjmCTW zVwoB48Si@MjcoUx^zA*>{y^pV1LZFdl=#Ng`0_q}9y{ZU+F=41wKAi8i}e_rihaY8 zS0mBd@EEd~QWvUmh?<-g|79xsn?S zX(isf8O_^zg?n*$^V#F&!N=DQ-G41P@y2K(oYIJ%G!b#~KGJTSF~u^jCI8iv+aND= z`cNl5>|w^$tgNB2{JgP(TVsVMp5RYD5g&?^{!-i@{6I@;T>Z@xjptA5zC5Ytd)jdI z>BIR6pj=YyR_+Tjdb#DH$BD>b@k)IW*J-hqmnYYyQvwY7V-57Y7 z^!(7ofO%MW=k zw{E@M;d_CcJ*)P0Mw@?DH-A>EYF4LX*5t*kS@Nu5)$|SCz#B%v(oeDP3Ha7=YvnpUk;lOc`+ZF{0oZ< zyU`eTr{=<$d~UyrL&34eZx5VlmFzeJ>3L=d@8vo6=EFE^Z8mhYTv%3p5lSZ;r@-0^j}v5Mn#ry)%d z*PXBxvI(Svmc1)~W%%og?&t~tKtrp!qLTtR6!B)H0ex6y znaO{<)bX~SU)1r=+g1K|(ApJbipF}_yG2Sm=HIGo%MPUe?9%XW=zJ*c3qZadR&+Rx zHl=;R$Gl4e&Y35lw`1m`RY6m`$KRbbxN)kxgGS2;>l zxAuh?_#D4Dn$Hb<Utp9dWrZ=~OGHAZ&k~7Py4SwYwDj%1zt=kU z$Y=RR%Ut<#Rr_B1!W}w^m71Qv=zPWnXgTXgbS2)TD;a-lwW)a15P5$2P4iTY#M_qH z%(HJ>7fLJMwyiWRzrDHIC-JU*^U>LNx3=agC`=Up({r~02PIeU&~W<7M#u42u68jg zuB>*0^d#4MAhy11ykj(xxc=pbX>$r?<^3q&hPvitu~fI z?`1aa5IX;QtIgK@Z)h4Wr2E@e8!&Da1v4rF+LC`<8j6@ak=;B`R`)IqMbyQAxiswl zOP2;p)37sBG1uMimxjGoo5#e;#oDzbzt1kzsTf)M+G*SKo0ecf3=OtNPAQOZCc0_0 zLWN_|-X*)3hK5@}`JyZ)#%Y8vD&sC##3jXoENt3)Xtb=oCQzQA>2AB1PQkST)!{PiW&W);X=^6_`nqoE~E1P!v^-Q2eU zSknwKTY<}vh*JSs)a;&+5TMPKIx1Y2q!>~$V(3ntOMykp42QqCC627mJl&8F;V>9f1=m+o_s>aj!cTX9&85* zvVk8CnOj36W`z_M`;GF>BQkNJ2B%^j91-%AG!Wx(VXw>MBbkBC{?=aJ^Nhy&L<_J( zoYXnU2q%^0ER27$YVO0f{zb4nwSzlBM_HWqbbMV?Lc@T+YBmbiP*?7A%PqQod2mIZ zts<>@OUm! zHYt9&@c_Ks>;1CT)%?0@51nO8@7#1@Y(3%abE0(zuhTL^LssW|qWNg(8HR&FyEm$J zmiZPJtzD84ZH>p|jiOuUQ~j0U>kVSICzm0WsEn43=LnaR${-z~COn(eYu?5huZRW3 zmI`CZDE0xPFHfxNsNwUO*UmW8uAA3#UbN8$o^#EN3=pV3QCY%?pZevxTXI0d`}5S3 zH}cYVL`nSQ>PyBDr~BB6`fRjgN>ce-`A?H0$;StCZ)KSwKRuZkKHl6gbdHU+<>{0( zYh$$Ewa6(en!M&j*ufW!F^^JS5t zd^6$;@)Ge#=_8xdgF&_Vm->*mmTzVwyLyIMX$*T-4)Uu$`9l2Al=b|LXY7?HFHJtS zJihui=)UTUkHa5semwc^+PtdiEdN#)%ZqohS$RScj30W&4@CUWpfJ~;gOq<$4na9G zdKn5+gSaRaQQn4dhz#PAf%Q^1iMG~;0#cUEC?JJ{_6JDmON55M87uT*Z#%~QEvRM> zq-6P|mH_ub%HM&M0d1S_AjPi_{$C(P`nc_Pkn;2m!#9w!P=pr!zXVdA3Of2RoL#9U z3lhz1`;RZLP(aGz*SN9o)q53hnw|yy9HhvgBZvP2Qr4|6`~{?}{uzA*|6C678$n8# zg5&NEf3a~F=Y`K}WU=bc>w}8#K5vZZ$$Z%y|1G|P{}&*I{>E)eQsGZQ%3sSNeg;zP zvRbtT1eJ^M9Ls0AA_Lc;0Rk^LXzLjwXsQKVd1q`I0BJ!W0z36Yqy|zB`rd{>hCq@1AR!Wk$hJnz_K6g1k6;POOMF9tc45SmV}jdWquf1;C; z|JjIJU@TdWxrdLMTMIVoIuMJAOrnKHBYbKHT1L#1X}C*t=BV}T9$Cnzq#HsW1ZOGu zjA0oC=47(^2R**mcpoj(AM$b7z)cL69=}Bkj3B$_OdU0G?jm8$=-t?7pCyPN6ig0m zOH+CkT&6a!e?Np@oc%+Cq2fmWhx=hW3i?}+0d-p0k;t~5LTb2|2CEMyd`|WdV+2t{ zSR88TowrQjL}urEaL!FYxU6jhNo7fjb(#T?rO5j@UE zRzFkz0QaE*uWSrMUK_A1`kE%Ni(`~eA@va=*GRZZea&1S(3Ekb)PdUa!pe~GD#XJI zlTH!4-f6>Hjc5|5vYULdd|GIeOQo2mvFs;?dj?$(CGu9{>`u$GYQBFc9M-!eM`bwC z$#Yyh!r0e^_2xvA_=lS0bCpQ`dv;_Ko4RX_z8(_yCdocFHF>vuA5H+kW)9%W%WvYm z8S88x|Fz!apQu~o{x2@F85%UgTl#xpW?(vlR_rG6LAvo_T@j`Cq`fdRAhEo$!m{cV zrA9EpiufSUjWbdwr|CzSS&l!^TqJPsjcBfZc{_ZsM(}^(BD)_N@h4kk|1fpyUkoe% z;vzd@k#W=6MxJ6=agB-MXL{vY4nf6G~i_;`4hE6r}rqL)PI+De zhois|+rG}8dxZpch6uNvd@`rL^lajE0*wemf4@n-C?=n&#HAd}J`lGq2pX{!Kiu0F z;!b5oQYw-3oXjyB8563tLP}qNgUkpn0^R@}1ZvWd(oQ7Nq&BA$rjM~^5@rH%N9);9 z8Am#=3p@-ZA3GF`hyev)AARnJu;AnExlkO`6Yg79ni#h>niT#NJ*|ng+n3b{oI?=6 z33~i4U387Bz=|aK_(6nT22J{vB^o0HyX(EH9J7UMQAF!dP0R&gAqVZ7gW4nZpfIv2 z9%SB&pe;;}sOiq7t`XBTcw!QHryjbyQU)-w8`-fpmw+BatFlg;c^~g7+6jG$WLP)! z6n8sBSF5KD9T<#gABQT7&>PT(TNHB;a%K)MnlVnZ#I9@#L9CH>$|@rfevndnZ}G2I z2AHUU@j~X>C5`YljRK%{mE@$il~A4a+virtG~17oV~mIJ9l^QJ$rZW>M`5$#awYlX;4fxwS!pYIZ=O`h7u0R$v(t#ua%bpkxba%=TS zp@-z}RJ55i!a4NAxr<5i6q7lK$rXSM{z_>a#ry~LRnYiQp+faxLsz`P1adO=Y&+o` zeUy1@O0}??xy=9Uzr)G75x@)~?8|Uyg3WRmdqL51 z_}@CuZUpd+0N(%c?Q74gzf}N#{n?ZI7oD8A1aa-ZjcqQ(B~$we_H@xv$|UGy7Wa_FxAdDrZX z5c?;}rQU?y{>cW{zjD~E{l8U+{Vx`RzdKfL^w2*(Lwlo#{>jG5KlMWJ?i*I3NCpQ| zhPHamoPcN948L8r1QfacdxOn?b=mUodgxb%Hto0foq%r*Km`&rh45ieAYV}nmerGu zV-Y+Ee-H`hp&r36)6{yk^NUvaRk5W^mZ7>nlhdqHk()O!$^yttv}A)6to;;CK*g+; z#}0Z$5EKL4>XET_0sD^KkC9f%rQvB0R}{rWaI1IR2dRKG2|7`HNaz`ZH&}HqIQF_D zPfx+HFBCC?EP_U`KIrQYFmGqD@LKEtb0F&P4y>Dn)IWY;-RPiyvVnD@gMM!zb)$p+ zbuN5wbkIN9Sox>cL6TqnL6QG~`RsSa#1@-MfjWQXe0ZMqTa({ktAp5nZ_lkbm7g81 z(itS%p4Aoqhii*J!T{Y!lAG1c|L^U8|LeoM8;|TyJ+d1~awAFpG;}ocS<@l;SLjGE zBs+dVJWZuS3*<-)%|R{n(~$?sTIzZW|C7OPQsZFeZODZ}A|7;rj&k(?WBo+OzIsf($z)cge*T(C! zg%@YPKQwOEBRA`jfBgXT&3fc!J@S9}Z01Ib{QuFKaHB;M9S-~03(F4sx$AZgKk)Z( z9}NgkIvjlz-zYm8ymPj5^hpMX=Xgkg!tr<*#`gMnL|tt6cvMrF=VVMr-|=MJ;K}Qg z2@}uVlS%VXp3^DIM90%# z+u{F2Fgh>(L@-jLBZf5F^7s-+*^yJu5iDG^XbKGCeX7h+jJJH%CBS|G9A<(}mRn$G zR~-3k9XS;@7PZ9KM~CW$M{Jtu^77>0FSIw+bGV*{3~(H6XeW>h*wF&XRzGpZzY$mE ztk70}%U$f;$P{Z2`z z;J^x_4E+6Y)1p}*y{+pnvi(6O_n4VrZHo$Peq_HQPVl^bm#={g1li$t*#9FbkdD<# z_8S)GkIU-**f)~=bKmGMU~&FXR_BHa5pV*NU;{Cz^~phhnwb3Er_Ig5?LYo$b8~R} zPxiFAag=Txr5i`d?yqdCySZ-pE0@Fn_f^VY*+lfaLF^kx>BdpIxo-J?*HI#_^S;br z(Iowro3F!lmC8~cMk<3l#`QfO%|eY!W{KYBhb-PFptBwZM3z%u>APyN1r zy~e}%^2nd{Whx(xW)2hT2l9D6`#zXm9wxRD6!3?t3_PMfO6pZF5d6y(mvwy~oqUc` z7YPc*dsGHp@%YKsG1-1~>bU<=rw$r`dkXCi8X4gBZ!A#^T-qe_te*`w7*K#Fe|84| zf)3C;AF@E_culFN09Oca)*}^z#2tR3OGeNzqpr@L;&+7*^Hp*;V1@MpVATVbTabdT z`0J~9sE`ZuQ1Yoyjxf7h;gE+&uFPtY8=JO27$REJU#W}9K$MTW)?aC=5G2@BSzQx0 zP$2NLLt|6CO1Jq{9snQ<=-lW<)uKCGP)=s4zVaslFj~2;bamp1eYeLt+G&fxW=0&= z6))>&0zJ3U-4Mo__H)c>a?`Q0InofBCi?s;t>j zjq%=#?T=6hij>q$vd?wCyNW*XxtsU#+N7e~V>#L(ZtomDW3m@4Y`T(~m=AW&mZ#?v`kjOJt*ge28ehGfmOY=<2QjszA zE0tcROobwaj2nbbXUTEkJN7MS{zq$?GJnE=I7k28ckqqH_m6)E-&lPAz<2QXy*dwy zBml^3<63HQ;pMmQpEX~@!1arTGY=vR;TTB(NbS{w^QEYjL>Z}T*r3=}%^dBl`>eQkeAxQf^SfW?;FYg6sv zZwNpCwCUfgSN;QS8j}L2 z3PuZrGKQGkA<}5Cr{#dQMVLcZoClMFNJ@sqZSLd(M$WqzY@k4JEA#y{edXDtgBXXM zT<57IfSk{LL`zsMQ>h}z zj4}^DcDqx@DnR2sdu}%i@TT&<2P7Ul zwPJQCJZ-~G48nW|6q_5WBvPgwZiVO%fI7*aM1s%>>}dr67#N7RJ>*|Xv`EXCz*v3U zbq)tDyuTfu&0akH_rtS+jgNQ#v4>}WV-x<~xBXTezN@dDzu$x(Lpw0TMkx!C@r=pB zRB`6J>o3EiwSR%5n%z>q!*~AuYO&{i*0;U;mM!1E<=?-1|B6fVM}J|x$g{XoGR z2lN%Z1~Qb}J%L;%*@RzW6Tm6up=_ATMAu7Ia%AmK;im_gGIm9>(2>GmwP%?m8%zrG z$K}28-L<@B6DdsU_FvE2hm;wxpZf} zJ$Ek;V*Cj57;sd2<){x4aP>SUioRYY$wMR}G7rk8(x+;4_;)`OFvraT{>EoQ%2C>; zdg1SmYT2Jn_(z!l!oPl0gEg>V%03`XN+==gYm+|+U`)WzhetI44#@wl%<~%X^Wnjc zz?bz;MR%5@WI*c(1u?6p!76gPA}EFI94NBJZf-S%7Z8^K4 zJ~jn5VIqvPg2vioa~*Ci)*NoI*v@tnHaB*E!bms%?1c34o9k(a5Pe07rh<++0-g(z zYH4mw%6yD|p3&L-jUDGDM%}0POHZ%Ao%E!WUW2`8pQE!DEqb8wQX1d9CH|>XTK^qy ziSP~bgg>?D?d-zkE8KtaVw^uKFaD1Se2Z1QUh8pp41@e1CNTShlHVq9BLCz5 zG?l7?kE!BrKPPZi;ium)l&Zhz9WZ=Ws-nd#RGiD&9rNn3&1Ya%aB1lMSg5uvrl z<#<*Q+Ji*7vF(}_K#k=}fBJu7DF2h*@ztb`0DND^VaRa`9*LvCOKo`YI8uX+<}YC= zzaA>oqkoEi8SdUXU7YYaC;pu?_gsG6bDB4*?%8qv_iIR>eEc^I<>xU60l8jw>YOKu zgUwB6`-@mj*BO*uOD=(r<1* z#^7h}Qh(onY*B`o2veW*F@a^eJKkEskRhh`nx=mfIL`u(?=6!0fY!eTq1U>5n&gh7 zD!v#gJYnHQ`rwxtwl2O+=wl?<~Lw z?>flxIV63};yH|bdn>V#{FzBk+%F8}z4asnSMQc$scW^;7^h7!i++67vRYS2hCfQ7pj4KgoayAQ3qzU0gE{Z2e4k_w%RwGv zvSj}!;VF%+62lo`tI!#>r5S97u9B1a+P~NUam1UrUW#4wWM6moP01{vU%)y(op7rp zuM_W=u63`N)x=3u(3UZ81@NJ_5EZ~u^-W=qfUQ?JEcZuoYd1P7ceFix z68A2@yi`7s=*Dfkr9DwHalElqe)dz>DoYXGNf4O6`;+igr6aC&%a~Ns%g9iyQlq+y zC-yZb>)Y?AbDsO(&lc5i+|E~1g?%qJ3*Y{@+^NePy%^!i)Q}xQ0o;iW3cn6`+PzX;aBi1)h(WeJH(q-GGpzGl=A^mJyxO7?cFy=^^ zvcv(yePI}>2CE{wQAM~xUJf}=f+DZeF#I8D@33WOhhWMly=pS@#ut>AwA9O8oPPd9^G3uBqhefPU#lm8Q z|I39Xo3e`P9=wuigbQ~cn**sd;>7sGJ6A3vzBAxTC1KcwMM2wEKqQzjv57P?#o4=G z`?vM?`o15KogcdxC0}Ai#;4HBEhv;!(~+jI;Pp|i5egquR~5T2C@gz7FG=lLuQ*$d ziWtXHIx!=IdPvA%I%$dKVWgTAu9Y*yQYlLXgh|P$? z6u*Q!(sd?Jt1*aDW}G5>y({Qp65dDY$&JdW6dgXAVO=Tg@{x#YH-?sa9fs86dm%y9 z1q>B9_ee%Ee6Ah=y6r~qQK2*&-yO$b0JjyP0)83DEwyj6dYGcCRlF75{ckqTrHHY zF?dCCSV-W8TY(PTli?;9jYN1c?lJUo5>Z29j5>>XPj+#GLrelp@EML z`gNgsmUO)dI78u3`n>BVnR#v{%7kUO!!*4g32rbBlXc*xC~H}fpxlgwQP8mjGv>1+ z7@i|SSS)D3n-$KES?ON_4C;#$nTkc~7m-Y!XDe32AEk)SnCaqnQW$1jap$~7YEIFc z!f_E)l^aP@Tx~eRJeB2mU<#7$5G)Ivg6F2lVOHcYUh>HcERD{YoIJA0#=Qwl^p#pC zqvv~-M)IO)PXgHEnM$2tMr1r2@9b_fSrZ)qG#x=E_~g(IGnLn}j_d)E)l%^a9*P0m zF+8hq`N{MX`E@lgOT`L98apl(=Sz@Y8Px-vL|CJSc8oj;bYznCp>pkuuXdC5-UCD; ziW9WkC!J0Dudg|G05c4qe7qz(jz!@uXeukQdG^dDLbwQwJBT(F8OVX?W~OXT5bm&B zSmAQ`i*A^)8eb6Inp2X>knuR%GO9l4nazWul!JXN-Nig9Hbs73WIXEoWSK%#KOtl! zTRNp>&T&?D2u%Ae%SP4uA6%x^mN~=4&gXvwTtx1`z6I#9f=8CWl(^$2N6+3~Cd{B43 zG&Q}1U0Z4Ad8Z(^FL7-Z6KEm?BdT-B!i&Gi58ea6s(;B;&vyV|eLWwvW6Jd4tNcf? z$3iZzFozwR18mJ)JlO?gNSACx59nUik}giZw5%i|7jQ|&;Uh%?O|ThT^nA|(d}1h;vPX!9-0jhn&U`z~duYIWA#5ny zD=QCB&5*G9q!UaJA}bD>7kO$Z4iHLoJP-zKSqCy`g-Wv9`~=Lei-Lvf^pk{w@DE0Z!4^$GcqKLHg33@?G z>z)|3mf{wETZO>{vQea3-XScILkwS@B8p{7(p7N)ezHAf1(vxh&lRo%88{TP&3T_v z=6EksMg^{(=n{2rw*MwrPRPbc~u2%AKRL=m}`xFLU^Me-=fAXHPA&3ETo0oMH> zwnfpol;wq2r`mDIy-#dVoFx{;WMmuD{Roe;&EK(z!PvH`nK>M2vazyqrm7QydU&^h%bz^H0pIKz%CaTVad)vF781mGq1wo&7pYqA)py#Wr#A zB5qRx(hsD}PbS${p%_a}KQ_!f_0Cj?Ps3Q&<#JJNn$A#0%VHW%yTh0zV9QSvm?;&P z=xSkBxSA!*m_a}t2wgM0gFu42`ykje>R7?X3t`|d ztExw~YQou+ferTrQZmUo?Y60M;KGi1u|Z<}xpLH`bsVCZ3AsEanYQ{AU-DE;gTdMe z-MKgu4kHrnMicA`pmAcJs;HutL4KufnuG+*Tr#h?O^Bh9Q9vo1BP=@|90C;(-WEYM zqZclzkjqlPu)-s;Ref0fsL>&oZ!H%2;!y$X{h_LFD z41wN!q3J|v!z$YPh~A_u(@Wc$ML4*k9HZjNC*cAmTgUPxa`|>LSyI~QaZ5u^@Hfdy z@8wGQQ<5+c30W)x7hFvD=rxZEZ7s;vNez^$a@XcIs2W~EG#x^0VI41Fj8Rc%{o&Tr z)k;DRkQFHPt1RW1xaq0$%jHL<=*YJk*&!e;Y;At1yl3#^K)-kXulp}SE8)h5taaS+ z9{#Aeq6MJYy2_D~H{Dp^njvlUhRS;zbvR3nBxqGw7ByP@LFKaLq4?>T!$jI2>hJ`t z5^jUKjHtrzhk;*4y5VWX~T$b^1@^gYO`d>J} zyKQ*SPpu9=R4ChmmpDNT>-FeLRy}ImGNt-lR6NKMk{m&+h%fQDE_96|-nh$*BRvR= zRzECtP#_+J!wUQk-*5@$D3JONR6)1YRAHe8cCsk3#{;)=!d0C)hq-j{Xa&LL7V#wP zxfkz+N3{KHTz0et5|S{rolW_!DBMMwcJa$uTtR9}O%&NL@EEH-z#%p?)!1l(KV1kC zHAta7xRu&tmZpKtrNos^g5iBP7ZBTFUS509LM<) z4K=tmoy=cRE0o>eaR<;lU5+_Ch=F{MVIKKiqW_4p_lS~`^d;DpDcVg$icUNf2aNSH zq17nO=(H)fX6fGTXYvkOy5rZQjDk5rr}DHUI_z(>Mpe~=$g4{Rf}0;iklr_XK{-ZL zMc#|$2;w^JjVh}a7q}PW1Ij2IgUl5O3#5JPjK#C)Q;&aoN#ig?DNwId z+KY=Oe&zasQ`X`vu}&PfUWYY|Lck$&=7qDo#g#qDi>dy5%wRj@t1JT$y0g5vAnhA9LP|7av8ZWEzC-Vm$4x=Nb{w z2zfdftV|@uGI?SeD+6-yGp$aYxho(_X!thYhR>RnH)Ixcg<{?}9L)Cs$+4nk9h$0U zaoIMvpbyXPS%&4?%o|=uf!0cMPje^EnI`9v;)anQSQxv*20~D3NAW|u+A9k8t;HK%v5g=^4^XfFfU6yXoeg)J`F8e+vW+U z-%RwsSU9{jo^+X21Y6hHgAAKEX)R<+mB-~EwS@Pulw(6k=k_APbP={)3 z4!&3)^7<}pEo$0y&7I1hQq6HkoPxJ9D1Hd#M8QawS;kFT9q^ggf04Kielp+Oc?a@( zQRgUU1OOyCPMkxR#coXpk4WML-CKYlabNR(kt^5`ZxfL>ff$#6+-){FX>}UTAvc5( zwGNaJwuQhRg#rD(knw<;lWHsJAn4oUqOKEM{<{ksZM-TJF?TaezK~4EZ(e-2=F6s9 z4Pjh9G*!F1%k8pd*J!KnG(h4a>4HaMaEIh`#!BVX-Z<`PP;)%cV%3s1bEbuj$Cn=G zRd!NTu3*Jic!4?dQn!LE7v}yR<$EP6?g(4SlteA!$l8+jqmjZ%YG$V?8mpD&WNJlf zI*pR07uko;uNjZHfqB3;B;Z?mDIy>VdR8euQMuiPp4qoYorPPb13&teIK}oqn(Qx$ zt-&lN3BdE7jGM%9McFysYiwEfzGz_0pQt=+G)jlm_H8b|G$~iC4to6dv*oGsr)tJ~ zLl5S^@)J|~Q7){iLV|@HoJ_%+vk>}>g8=$dgkVyCo2BgjaZ&p|r3CA>Up!1w)EFQJ zc`#UQg`6aNaK^7X@xy*%X@}o`wB+!@=FRKga|7cAlKf;>Ot4G(eHcvza_mPe?Y*PO zcjRKkkO`NND!y?%tbM^g$VhcbF z0Ozl+0Rl3MG68tlP)d+LgDe!C3~ES;G=~IYl2OO;XXPkF-;(mhq|#o6p;$CB6q2>A zRD-yH36<{Jj6KQRQYbfIWkIhXzH#^*rFK6+TSDy~+Jz94T>ei$w0kmm8}y%R=95>&9X25cZciOklz4HZwHMBy{~&;gLbJ#P!ul&?};a<|b^ zu1)QgqzuoT7Me{f4=F_*oXa8hoI1FYOPyoF5yYAfE)7o+il$7ocV#ZtcF^r-?8K}s z&JMWxl+{}rpkLS8XYW7E7=Af&#{MxOG>ZO*oW^mT=bimrz%V|r>3jI?ds&;9?H?sj z*m=BiK(@ScIeclOq1?7@aB*pw;I?W$2#4CP6AYwwL0?JupxG9E?+Pv-U1_JqLn0mE zQgkd6pcR4kh`Lu~bB@W1BtQl#!1g79fj_6+T!*L|o=0lONhWo9pWzhR?+S~_qqI`u zBff+BfL27xp37E);hatIHpspvelM^@sjv5Pi*01{UHN_KYi?Wq+p>70l3Un#vDY7W zA-lap{zj7O0Tl`(L6N~P@}6e5-CZ7KIZ%~E;^(QW#zibww(H>GzFiS!QdXS#FvJ6V z^ekJSm<&FQ?S>V{AC1jZ#2k1ojQdeRd9GS7dXcsl#&H*`l*{UQeyx%H+b&UKAsjo! zd?y^Q$gHPQjUr48@~DdY)KV$B(1Sr!+>gA)Ze1!a((PO(0aHsLGX*T_#N3`okI11f zu{bG9yfs{pO&*}pEtVHY5){Y#X*Etw2J^)Ul}AgYs=^$VSq+U>7u{BJdvQzjvozGU zRr1pPG>+6yuo)h|^$;2-?$GVivBwX;P2KpBRjSfnaceI1Dd6G6HgPGOsKEW2;oc4z zyY=ba^b(3QqTU`Bmb(|f0&geErFvBZ~6um-!CDXpo z@i^2khN7maU*!3fqBg7RaeSse^~#nY?E=j9*lqpw$dj$xW1k(A1*y%vq3e#~#&T{@ zgd{V3&{aLF7QHj`{G_hfu{rPF(~V}&`hk%&*_i6h=b9{W+RaeL{n@=8e~&edmWRxo z2AuESB)}pTB`UkT8;PD?328h}kj#J9ljiIxAUjj9fUN8{VEN!l=STA9Wsmf$?`MTW z%9sU(^qb@;apbWE(*X%=)r^cp&CuS;Le)&QWTbW0@Cjb-H(Ye!qeA}i!D~kg&N-Rz z<+gCbpa3?P&}?$cylg{jcIawmuy0QCw`rabvCeEYU+dcecbs^Jxad=5Ap5Z zGuPP7hq_WWOH2$$kM+&U@YjHBc=BxI`0FnXU0GA*=rw{)^lZo`Ug=!uXuxuXxrIMW@r`rmv;(`mWY|+Do zu}P%q%t&HwwHkRW$e$gChRa|9Ewt?6ikA80c4vS(j9pYxdjyNm;#ydBps1#qPYMRz zz=!Av7tshQDFB1Da5G$4`m1^m5?{8j-(HjW^v;AkV40+M)K#uCxIVz#J9*AT^rXZ| zQ5i^POI4e}fs*pUOam`H2`ZsN!Ihxu7V1;tIEzvN&P7@5b`yYVh7a^wMS`DbdiC#m zXw#sqnQ>h-2$dg!5>I4QwKW7gh&|@-QT*qcqii;+_?@}jJc5Qz55GJjwqp~ux8Rsfz zSgn4{+{!_rtiT$M#;;O^BC}Aa)#O46iuw;-ktmG?j5qd^LJ9L(?xQu$zORk1y|=bz z($tUqoY7f@BfDohsftJyE%cO@F!XpqgNiJ2f4Ro7r`yqA@MzZZ1 zj*Rc6Oku4?YEvtm`LekvxjTx2n>fl6{pJfA2`mbh_PTXqB6@3i7Lf@n=s6!$0i0K1#!luWb~BD$#t#*UBOrq+f?49H+_XKV{2=x#o4q#o+|H}g_kaO zizg*34U_{WoKR5IgDqhd00pbjSym$Ilo@>#Bwh>2EwG!Vd38(P(d6qE6e*M z@jiwjxenqQxx;GC-?vjHabg%7B%CIYqb!od3!U9=H7TKu)KMtyr+rpG$N_O)>ta0@ zuNZg1t--@_w8&CrYEz*>yr4&l$?*=DsHrX@^CwJPK7+4(zPiVLTCp)asI^x~FY!$L z!uTd8c#-;)MBjAv{n%=o2NvCAPVlWd88wWz8xInrf(QcV8^&DV>vz|hjUFnghjhQ# zpy@E=qrW(AJZ>R>-@~$PsuY&jOcbBEZdu5B5tC1GJ(^7E;b|&%-_U{6u05Bq$)edO zLrw6QH~NgHDVFZdgfmMN{1qn1i-gz${u`YBy!5`i5x{T>I;8#$|_hkK@g~gh+OSl z+KKZ(wZLW9lO|e3+qSwr=-X*CJg_dW`5j%cTlQbf|HU$ebVdSH%8Cx}9l1Sh8 zm9M$Brc<`1CGl>%w5D8y<)_Gw&`8BiG3sMTkUnc?OAAkT5z4iB*T9bF`8BpV3;lr& zm8MSwXIy0XrEDza-Dt17*?^8>N-V1B)@%Dwf}pRheKzg&aE``6xvSzZppF~?2`_G6 z?65uFjGHWp5Z^HgE*|JD!?Oxe3+6hQU$eM;=Sth2{2SeDv1yukm`>Qd0HVX9O~R0< z=Ca}-FuI&Fl6r>p5YT+vvP+LZ1iXa{n+?)o4CL01Y-cFO&Z$~dkqM~YZ7{xrG41^|C7Ima4mw-2lksVuI zvl7z!Iz8{$g#ol-nGrc@48_m!nWVTCRK{q$geen}`353*?h3xS*M1jhL45my_@z$7 z&Q$c(Oj5^UiF;5l+ysBH1lQ+T*mY(^3bM7Gnj@V0m^rqUhtLHWaR(Sb%CCd}^VXM~ z*_8!J4WAC<#?X=K1KjmTsD#OsBs(-#!x9DKdNVQm4~t|V%!+qNfF*{~(eRX%I}r#I zT(t}GgkzB$VSax~)>LrTLYNdnoXz`-^a4#M^cnENO<8j^_007RJUJXzo}f$6Uq{f| zZqrd6iA#S-vDSMR;YD@u6^A#eeI1d6mKxu?$qXgMd8hw3_&_rIBE7uEu9L-Y=+ssl?f1?J)irOY}LZK%JOU9vE zUfR8{;)iX+Gm~X%(rAI#4=$ny=8E9vF~!jLX;Vom{0bI*13uZ^2=hQ)V|+et)v?aO zo#PC*JFP+f0YZmx7tW7W@NPTX;7V1VXz|R0Rl>}%C_kTEfFz?{QE;{}-j{*Ft7q+* z{)mjEWCS(esfhxL8J9;!456tmAH+9`FE(+&Uv76V*MEUiEjnZC%nW{~TTE7?vB zn4yJZ<`ZopW1w(udQ8zD2%8@O{@qQdLj}m+u2y&dI3SQ*aor~!y zlI29p!G2w$930*@+&nLy%*`2i2n~A?!C-Y#D-I3A8crl8WV2`t2RXszAVZ>8VO# zo>=A|v~t(4zYf_jCN~?6FkBMX5k#of^xv_U?KpZvXBC^d6iZ44L}*MUnD+G3CP#?? z1>6lA88TA3rXgi|=;`6SE-^?`aPYf(6_^tkNW3qt!<9N=gbynCBZkVM(`v?@IPRmd z?nV<10`~`|U+XFp$zX&JQj;xPk-vWQzECOx$7=3F*W9}- z<7$%efhhd0ler->)8Xg%?@hzr(aw+Q&W~HoPq>?o3Y#vAHwDcN<9%qhd@(;aZW=!| z7vN@a{rP+Tf+BE81Al3Ler3Grex5=<58_SuJmX4-$5?jOYlGFAg)fBs%Uuh*YYTh9 z5yGo2+qX0iW(+F>`Q^Bq4^LV`O}P$^7S4hn0=}e5tGz?=FZ|j7H_o1~eg5HI4UAeS zfBbO2T`30E@2{?r@x677AVMJ)uM1>y9lr?7Km?M(rQ-!ZHz?q(FA`yMf1s>}C((BK zeX>;GJd;XQmc!-S{%MvDI0(OOPYe4oWxhLt4&H^A(wY;mFVQ6w0Y_VBI;GEge&E8!EA=5&55^@U9A#>aKf7HfNt zaL`!6{q-P0+K&&(aSssTca)TJ*)6=tH~j}mlX=4Ws7j@zx+7fTBB-MCkO6P03$L5` zMfj|_DM!+rha*AI&FIt3T21R5&BwclAmbk+51p{|ddpnAlP595^xy=(c$)#uX=PWN zslFS4i;h0R(#Z1aiU)-nm??n1y9~3DbfwA1Fx5;{z)Q+cd2dVMpmV=Ioz z@e_W8<2rq5T`+aHidlGVRO$hgBrzTmv2XL(>8Uly_LV9R-s!L1`Ov*HFtPJ-eP{4= z=M(ns5c%#f>+Xo??x@o4*c)c9LAh~{-N}&M4)=|zg58N>_jV@scGvgzPWSfpDBLmj z4_NmPMW6o2L3H2UKdCi)|Jd;~M;FQ>cShRi3Sf;#Z)jy&bJVjhyLjzjINNB`tF{Vc}QM+1q&zJjN~5 z+4{P$8%ZGf0XZ=z7G=4aPqGQmz17R=bQzLXkAqu@Y+d|)qxB!2Bf-+$>V@o*dWa;a zEoSfa1J<674azdD;%FUMUTJaXXVJ zG+M*nD` z+$KLlCo?td>>Mb25JTbZ&?MEL0K%ZZh|7#b=wBr4izkL&Bqd%9`PL=Zc`qC`l{kJ) z-MGj&yU4`3%%Zr=X1mN0yUbO-%+tTje{xyid07~GS(JELTzFYhcUjtVSvGn3`jrEW zdw@&7HGWHi!*}HP{(zWEyJf-1hgr-#-8PIbOVz&c(fb4pX3np26t3d`2G& zTbx66Ufe1k&g~$+AJTqkc;XEHSf|fY9gbh>Q2Js^o-+i2RmCmrbMiyTX@FrN8FGCt zUJHOrv^9{==E><$C}~MOQv^@rd5$hq`1wdA|BM%Nw8VD(iuI3|2Dx(IZKo*0&;{5v zY3^_~Kw~u|FQ9Q+suC>mx^jllsI>e|I#)fP3znp7i*Vb70MlV*dIUILf;H8#@q#t& zc|H|ey8DbbTZZ>`16$_H%L}$Fe>_R{>|kmi_M9-zM)uq&$xHS;q^cxGe!P(nM?tb( zBS&Gn&m~7ucDN*Gaej&qXGw8MBWLOB#!Jq!ihfD1*EKUfTyGk-8@W7 z28>A9e6VFz@t*+nd?!8VVo7z-ccuc9Ez4XFx>C`<<9VXv^kS<(p-M)rz7r^`Vutyk zQS|)_!C}Q$HC9oRDQCkY>y5WtM`p}em`t@3$AmcwUpp{%vAS3YPgxjSoj{d2Nfk#W zt!zY9n7_|yyMyAhAuSk1U8q;Y5zS(s&1etkul6K>9F*pA666 zdaH9wo7G#mUcJFs=X}f{3`z2HE{k6`GuJ3?OnkA1m4KG7?vFsm@cTYTEzg< zU=wXxegH=Ze)W`*9gQ4;3cMR!&g)0FY8=&~N7i?x#5ffZhKZ$50>-+h!IDkzl69mV z4wqv*g;B|3$F}>&?YZ=QV*quq2+!eSx?m)yZZQO8RCBBfA6qb~zpIl*Iokx1llD4Q zR>k=zDZ6P0F3Zp*bOqm12$Q{&TNaQ73gTCY`ii7gl@#~e_?Rd5!JnaPU?Q3h&ni?& z6cT0^8!oo0Mt^vv>9T(XS_ zs2*vi1|AFsFW+Z%4w{kg2DDtGBDG{uGOAoJ;Ry?InvBukU_TT%)U|Yn2#95SpO+nd z$lr{LJa7e;SI4sM>OkD@MOdFnatP^Z3%p<}Ugz(aF49K@LHH_qIJ=4m-NQrKl^htF z)V1HxyBGhAhN)Jih4s5@fHIDbt-sXv4f;EkkQ`1g`(y?72VwGMf72>5gFJpGBpYYN zAwXV(TcUN}Py;wd(h4Z3A4Z~d?x2q3 zTP8!B=giZzxD6e>L{D<3@t5}6Xk<7Z#=sCDn)z2NeeY^eZO;=V;G~5b0JY` zFJTr~rBf|-#0o674$@fE)016pm4&g~)*SYRz1F9dDZAWHq`8bfp+u|mU(Q%-;Tw%d zPgK9L+O_?xJ3ZbnT2qt1>tKvOJGr1&*Bs^OFrHfzoMfWRmT}AF z;_EOQwgs}_DTxPw8dU3=zUU+we{0v@M|tWRv7393ew%=wK*}tK@3V|?Jv3H{Cs0M0 zB-1jFquHpvKKjlFNDZ6ne}UGD{bt;k&}$KEUnh^ixBR#|Z~?8z{XMW1*MhNZiO{XS zqj&}$AjQ4h>{2IqeQ--4oXd*e(KhtuSd)e;ByE}Md1+@nSi|48?6I1QWlqJM0D>=J zc%nwESBck<*8-TfW3JH6?Q)3B9pJe3Wy!RP7fhgMLBotX;|w1VOmfFsgN8H=_@lPD zip$7)v*H+3M1|5q$FUOpga$n(w7fpZk=7Df;!3LZChc?E=#Y62B~Vpn^Bk!X8i{e) zu>vzmc(xwA4s<3Kuu&+Jv52_WI7;FQO9Y~xyiKczW}ga|JbtjDQ`M+9Il`NTV=|u# zJ0Zt3w3b_U=%%mr;ku%oDS7_#lV86TKM}cTrIyH2XtnE@fJCB%#>hIFFypi#u(qb{ zFiz%i*Yxy{>(ijTaB?;^p1zn`6-osuhsZl?ZWHKv14#ybE-roYX+O9d9PZ3gBVFIT zUmq-<409Z`TsFz+HCDuFxfLAvjpxbBBUNlFnEqqv zEmH9A-m0n9x&Gz6&Co?p>=H)dC{~RfTCM^f=#!)h?;u5#1U8b~HbuPA3>C*i;*GwQ zZ)^mXzFeec(mkMhr~Cs_)C5iE&i3*V*4^N%>)aP>YtSDH_kxpBKjLtivoQGih$FT3 z^dXLDzi!|K(fWoTnW;!R*7u-X#=b(erGchdutdC^uCIxS2u$IP(ovibN78LD)I1JV zc_wsCv@hVXo2!L?Ik6=qp-%`WAc&a9w@mMC-=501k3;F{d@mBi*1yDpX99n)5MxMv z6c9)3b$C>R8DFS>75Um7%R=%wHf)9SJB2j*0#nAu_Yf6X7bI8bu2GwWNj;tVIr18; zfMyqrDKUtK7c>?BN#=jBcOGm}X6e>0pvVYC200mIU`9j zh~%8J2#8W-5F`tNQvz}kCvyZN%LR)$O(tx*ATp6>}F0_DS8 zpy@<9^lgU9>eQrq9LjtE{>!ThEa;bx0=IJ|`>@Yo+|vPAD(KL=1W5GT*s-s@Jrt+g zfvmb$;SQ2qW?d6L>iYrju#y5f8_GLRAUrD`Kp)BYP!iq`9s}}$6PZ*V zLqB2MC6SuB4;ykc!LJ1B!Lq$_<&Q*>*Ne`AWPl7x@F5ob`H!~mrecPeq4R)GDrc*g zfTIg%W=MVQSofSXGI44m-8T|&zy69yG!!)?<>grq7!7_bB6_a3Ie;%VKw67I9)5zR?YCKe`(k0oNtxSE3zkA8{#Zhv%Nh9d7J(RMlUST!bS zz_nYj-qIl5=~*iNhb~yyx{S%9PXjR1fg-LsLq=mLlE5y9bY05uCaXuC8?=uzk+mWQ ztbPbo-BJ0LbQ$+t8H#}SI}7rwOdY%920n|@EbtUqglF324~SfyQzRJg6m?ZuVtI4ef;zZsP+CxGP*x4hns8=hxU(cZyC7H6Z5)eU_IUAx4<9l}VComFC$p?+ z`c`~!(PlYz#)t6K&dj#K*uNhkrP%ymx!2Ajb9@lRxR!>L|bM8Z;J-)8#c z1q6MOR*=bac4dG#q)O(z2wD#ajLeryw?t^6D&)MBa9IVk7C;9rp%W~S*;Vn?0`Z;I zh+6?s7_8CwRu9bs9^zQVfX~(*60OCuSw&u7dnCLT30;emv5Hbzi`Q9;vSy9tFHDqL zOVqGRGG9xww@P+pP0A}ws$z*#8+}#Dn$}U61|98D8 zfXiOUD>U=cIWO{Di;7zUIPh9UGJug}>*;mY+k`NQO90V9Br$$#J~+VIbKJLu%}&?4 z0t{12f|aBr3yF{%AXpXt0>FV5Hj-6oUMxRITUUpyk!rte7z5?Cfyt%U+yZibngGPD zONiJwdr;laDX5z~lYEjlCEjHq1A7l}DV~l2vOIk+E>|qx^;&$#9}3v;3dM*fdEexO z`4kGP0@I1^*dRjW%B5gjL4D~&um*f&IT+c#2ZeFixEYzX$%KR&v&tl0dWli;G%tXy zsYE=dxCFn|3acczvLBw#;mf^_n6-r}*-F8R`-qUaw~*}^@A2c;+ld0YV#%dfX{VyW z1NiWslmH5V9dwYeB83g9fd1Ss_I#j2VO840rQtAfdlU!WbIH1*&N`E5Lv~{QX)N+J z8*G>eHiHAJsVni69Gb*|3&Ykjdp4y{N)aqGaMS z7PXd3Jl^M3C7lo{|kQaoRG z?hCcZ3+?5Q^|c?Px|yqFE={evA~~{4S!qjoC57`-1 z#a4H{76pc-dNHd%c*!lcK(J*mhF%{r&K3|PKQ6GX;|z8! zyE+H8SHvJ+;ZvJzfb&iB0FR0rq83z4ZNL{HZ}BP12}1MblsW{1mBn!ju8uNe^#G0W zfuGXfNm#hZdSy#hvzDpPe`r~kF?=bfqE7vg zT`Z6UR;#hX^T}^m)tgT{kx!cnd1>Z`YD%pJE*~PgQc;cfwoUOMAXHa2N8IC3_iDNJ z=?w^cOKrQ>HcOhlX2_lIKw4ygMast;G+;febAZi1FeKdxiqbcKqPCt9g*fAH@G!$M z!sK+zv9zQ)u6T(b3bq(vwe|)wKfG&Aa8&W(@l`ulsPBpmW{pnou-)@L>jPd$!(IP$ znBlf-`DT$kt*a-IKo$*)=Z1ptB`KGXeBc|XJru5Y-C%^nf9_c^qKD%BUdE5|%d%GgJGZ-~)ndIz46oFIZ)u-!u z$MPi@K;?#5e{K8QlJ*V(H^PEADcs`xZwG`c-Xler#DE|N*PBHHJnneRf`#0(g;Irq zl9E8*Y7dr=J!B_!X>R;(Mb_9>oeW@S*;V=AcTa7H2!^nQ2f}o*U%7GS>;iK7DlVS} z>C3*QwluPo4wE>2j3VHD`vz;BV4kzqJ*H`EZ{dMP8g|`NphxOytZ;F?FugT1(X+;q z0pYM+q0)E4Wh;$k+rs6?jpg-S(PyXFickG;?xj6Yh^6`%bgMVJxS&exX3cYTqg3S1 zi{ZpMyd>$HN&WdGz{a|JDT5@uh$G@h-p^|L5orX-h}37rx4_R-&$b(%-z)myy5-`* z*ZZvYzV=g0nidNx6XWogB~p^nL{Y~d4IJs@t@~6rtzS@m^8e67gO=6SyY`f~re3kh ziw;Yp7dF`vk!SKLBU89b)?5?=v(9L$J<7}QO81?Kr#;VU+`J9jo{RL4H&x^`^{+I& zx`%sbvuWVWYg1fE3ErBF*6j7U1N>HTC?9Bexmo-@{|({h5ykt3?x!Q&0i&wTo_x(? z`4bTmZ>wsE@OfN0(p}8x`ug0O^{k%CrsY5?nkO;Ig2kmILzh0_vRI`Gv+IvDG(CT@?pSqv-j}Cho`1d*zr^)Ky3jiBPO5;t{iQp4!t`GugyzMjdfNkIdy$332K! zhYZsVL=j=gR0_peDrZZ_fYlr0tW@(AGo?f)9b3r?H7m_W8{^MxG|LTM1WB^hh8GE8N;ke6LSphK$m8E%jj_8^nSe3V!Wk!ZQrk{nOF{$Ix~-DftTATNGSH_<|@jhCn^ry;54;&M=Z2ba~Q+k0;DY7XLeQK@r5}UPT@MXkHlkJz6 zgf<4-2q1XMNJ0dMWAPe&&tL|CPi}yYOg=)ngVKtlwDGdzS)X#}6@y`HNq-mTm`=J- zjv@F9durNlhGg5JZsv!l1U;;UB||;zm3=C`oS3S+JX|mERQq_kIfnagyp~h#=X+y2 z+%GT}F)S>Pv11Fkw$!IOAo^irctGr398`vh^^|Z>f>2(q2105#@><$149b{6a(jsO z0QeGH5iYbjq8dX%TF|11;2a&vugBZN95?XQ za~_VxyEHaoLL69`rHm~(_Qry0w6;hNvx;QWrgGX*J;+ZDD}OzK6|Ao$vgF*j&VXd@8{+Dq};_8&Cj^dhyFldZ}qdqV79X|KFC zSHHXR#CHtGdQSWdqL-Vj(`;VuD;=A>jklBU%Q>y%>8vUh zLU?3uAE*om^zesN&ISc_<=4F^qgudIj-1+RzLrjk5iCKv&be} zCuC5EfRp5kvlqaP^QFjc|5f=*%dMDM5qW6W)+bwh@mF*Y1(?g=u_KByKK8!Igzke; zM{-wNKLWpL+IQG>8ZLKK**?)0I4j=jx0f(}pz{!ZmRM-v5?`(_-|awC5I-e7G$o!Q zt~qhKOVIy-Rv35wR%R}%(=EE*Ts~Rny){Lb6JIYL%P)@t8KUyquREuGx*N1iln7I{Zp`F~)hq?I2i#yJD!k%RDiz35-P{ zCQQ91D>*3ylwrCXrgtz;{-TS7H7F)xVyJIJ<7MmhvP!8C2*a5VjMus{Ch~60!j(0m zHp=;!D0Qc+u(;f;(9iR9JR1vi$Jstv%{GzP%4gZ)TbED$bB6^9_yR17zIm8nEBU7`@-BBRw7intG6jyd%E(mFAq#B^G*0 zeIci`O~!}9NELavSHoPz87ra-2XL<~V#pG;I6t+q$OHU1m@eZggfL~W`2#Wo=kBTm z-DTxag}5xz`>||%e#B&aBUx8U!^Q4vgZO=NTxs~$tfE)CGz=BAAMtkcDqdDibeD=h zGR1_-G{!je#O3Q04#<;3$sFJK#iLQgDc&4ENQ$himBEJDDq;p)|vApk~EhoAxHGLzMWSIh<0G0e)!(t z&@EPnR*9ZziQSM;Hs*2FFg;;)1SeiD<$Vl`%Fs*3KQUN-pkO@!_yAM^L?~YwEawy~ zc*R%zE-@P(tx@LRP_T^SvMRGXzr|p2Hfl=|bcRM`{J>x#t-|?%!NM#=uh&y^PQg;j z_LNiF$r~wV@i3n5sVyEaH*5>LB3oDTrrL72NUyi9bgJIr8w{3;xwa5ucKyDF%7xBo z2HAAEr~g6(xm{_C0udd;hs7|LG4%BeAIkB*&a*JhQ*|iO{&ZUu!Blh0@ex9>YGr+< z>E4G$M>7L2gHm!0?}h1=cy|>2Q6;x6NXU~1Cm-@NJokOg=zP_Tat$6BDZc=EkvmCB z1}SU54uGi25gLW6aMBHu&~A0c6X7tr$1`zct;Un%O()X0vc$(I1*7177$HaHgPJPI zTqgZRSxv?H*P#W_ox_n60qEynCpsg*@BHiNc2)fRb&Ms@QSos`ER_ud0#t;FnTteIBCTG^Z{EF?K&6pFAY(%po_=mBFth5X(ee{Zr(o5Cr z;^*WWV#fA+i^G1mGs&*5Rj)cF5=Ih}d`UA^e}{(xWLm9mL^9IGxPO2-jNEkg1%N0x zttUm=S9$5`-4qFL-j5}s@P8iVUGjkSOzz_ z2J2!pjLd2=1`aM<{7Um#e554B`Xi+>Ud#L(8KmpFwv=cX#JZehnqak@Y?)WMoMKzI zww&tF!Mc*>GG?{%mFBaO?sc@b^27&&Z8al+>~9+|aFPvk;xw$+a+AJ7z!E%_(erz? zQPvBH_#oDIFI_1x{8?AdPlNCI$yEXn{Gcm;Jq`46(cHc-|4P>*V!#{ea?A!iq>!MG zqyI|R!+?;vgjAVHGGYN3#bd?6phQ8!qPS>A2oZ{yH;!R)^=c~%>LWPfr78}S4ASgdgy*hL~9q&8m4Ns48vS&>e~ih@-K4UeUJsZ-VfP_l_4(JQn@ zkFJ(v^NsZlK1atOG+7W= zT>3f|+JD`}Hm$Tru$i-Vl%%pL*Z7L1z)5$mao}Zv!XY|Tl#0YuIY3U{-8Cj}dK3p$ z+q)YS$!z0+w`jZ&@yX$-1_Le4ACGqydVgX&?Z1CF@cc)%)2t7W%yQNj>zuClUv?U_ zpLi-1p|8gIpIR9k2hESPOC-;^wfp?crv(5w{&98RIbt#B{1C_k@c!<{1wSI=uk!U3 zvB)gb)m3RC6-0#&-ho#c6R{#t0pdR5OsD`R6Eaiy4M1BAN^}UGk180!ik1x$!OqAZ z$i`%Vp+q~84CSNd18Iu_uc#H2p`Hgh3{`zpG&9*^0H(wf6^cx72rVl>sYW{67E+Z< zO4)#MN578^qKYc-9s_=Z3X?UAEX6O91e{dJW!AEXHeXvldum23g>|>z|jbpqb zX8$7$lYveOp0!8U^A*L0Ty^}4Vl!h~qo9*{b&g^)j<_!M6~%_e_~s?oxed7f2uPt$ zP&8W1q^;h5ZUZ0+=(#|{rSiD(YW;frI2BpW$$G_lijkLPG^`EoPr-Cc{N)DOsTlS} zqwD2!IVw_D^lf=V$vUFF!G@u##*p5aX1~5ZN+y^uC!|-7JDPXxm9ALOfz}OkR6rgf zBVeBR#(EBIuG9!8F#?ql#iy@D-iu*lzUzDeYI*aiv%gBD*pn6z){B9WYT1ET&Aide z(@*Z45e!TVdu%NXh+Qp9Z`?V0)8FQn{@~W`5*K!Q-JO$4@k!JV0@1pkAPGJsXFx+) z7&Bflx$_5pg|5N||| zqW=FzyrtOIej(mzKO%`noy)UU5vwmON@Ert44V%rs z5FFoc*3bSO!4ap?;MtD8jbsx%-Z!7g1q1k#SvW`k0RXoEv_Rz_&fEV){}IZBz+W5s zg`LA!-*&~!!2+*h25i8qauAQmW$$1=5Sl7$-8*1xo!9PNze!$q|X8k`ELc3*9$09Yp-XMKIT_pj)`f2-}B zsJ40cBl@o`{OrF&8GbekX`=!E3bXLt=k4sDKX1=0fS8WOU(efAaXp%YY+1u<9XVWx2deT7r#n}lnGT5aJh#1J!t|WC2XNHj zv_BBteDAdkIhq}>r4phtP+ZGyh!BJge;o!#X}Wtb>K*esk`wJj_dp5&@bLlb0)1MQ zwDOx1!6mlSVFPt?SBA;3IZBVF?@IE>a302;@wAg|*2FqU=hzY*0&-?c-E~by76{0R z87tdouhdH5094>F4(HQs>aYQPZd{F~ssP%-zU+Mcv2jLuwYc>P=>z~k8EOB_B=23> zJ>%-_t&c_;XIvr%%>;Lv44z&s7tw3Kw(X_+LhRaot#;L0pAWT}qCOw#@eO=FR$~Gn z-^`-{fG4XA=zM^;uW0U{?sQ%|`*bk=l^8mF{NT%{{m-Yf1`b%FN>_ctDWno zQqN9!$5-^9sLvIjp0W zO130l_x1kY8?&mweaF=f% zEf;UM{8-wqs4*b!j&93sor5F!AzVbQTEs+3+e|7~TuR`%A+cm%6cD9J%?4 zZKLA6)J2EA0~|hoyNCaykr?XX`bG`I z#3BNhu=1|;;AfQ$0p{73R%=JyX56g0&MU`gLg6-9a!aqhdtQK_Es4Sw& zr=Py(nhQ9V^lY=gDVJV+|Krw`Lu!;YG$se(ZKT2B-Tp3ONsrw=c6}u{9aDzK{)hw# z3hEHEk0?>D=C&v#7YzWL9ST4D`~mN7)K}K^ujs58X&}n48D0#5u79WDjWLe;nDzT~ z_Qwtv{`P-Ghs(cSXC=QwXaBx#YmIi4`KP)qtGK-^AD_QC*l$iBe_L`dtnGiQHtSDi zZ4(Yg)aMdxww|u$6>l|e{KDG)W66DR=gQBLE6uU{RdRRRDJ)8MJE+}$l-#{8#zfn_ zZkGI#y{g5sjXfym^YeNE-f`Rgztm=J><@^4Uu~9tniuEM#0gmL=#6E5>CvQZ{pPu~ z?c_ZE&Pr~s4~ub{_8*r1+1jj|lRRf!zgnC1bG<EW2J+vef8VX){HnQ@{WKQbq6^E#zat?<*nRm}5Kg`ZGv z6ASIn6Tjc~OW)kdT==E`<9^9=UcIOeXNl#!#ZAXdwCW%1023=^HY&To#T!*Ww79J` zqo3C?{rV2@H~rGzXjIx78PSh^i8`P2vRj1KO`6~|3VkdDkB=yQK1Wg|TfK-D;}12X zJ)w*wfAvd|#Fgj&@-T9{gV*PEOkXvsIj2TJn)7f(6(WB)iiiF1t45VR8r2Uz_e-W< z>zKabm+DJ&H_qW1DLyIF86UJ^yPpBy1NxT_a43P zC1Qc(wkoIW#qF@SLDE%Z)UqU5vt0T~bwiVWy8QjZSE*c#)h@YEKKWgoYizE;TnRyFc3?syNX>Z5+X<9&x_eRGfedo}Bu>kG+X%fc`%ykyjzRv;Kp z99tW9{*>}{Ah+KtC#rHQW0N5^x{o8klGh}-&JdfuOBqH;5pub75KCYt2If+;a8-hr z5M9pq;R9;Z5L9e(Nl(kDcz6zjD6$Lj0RGUxa)FAoJ5$CfR^r~q0$41WPBC^5>cPuM zA0OSRY8(=y>9XWc%Zkv}=!&b$iN36vEQ>o=l}K0wWh$8s(LvpZ#2aSQMitVs^S+=} zn?;iHcFSQqW=4*t4PIst>ajh_jjt<2g*3DR9X*|)l_JbOX&J9vQSs8Y7G?GKh^Q33 z=+beV0wH~&K*g89zXWW4+vR<85pm)2{*Sx7|EilP#{$M>x3old^oMi1f1Qf;n6;KXXlFdN!FMjBsyFo^kY|j66OZcC-LB{;L4Do_wTcUqVBJ&PN zH&Aq3w=N+xmoq_j<#+Hm?ml#==~wNd=oF^uBXaG_rkQd}5Y=DBd4QKg`#hMu052A5 zE0UvA1xu9y1>l5vfi9a6A<(olW0Pz($%%%fWz1u_WQ=lb03W(hpSID;v*a40qW%!m zy)a7``@>(n&-v5r4=>Ep|5dZ}%{$wLS-LPw7vuKtk5v7M&64J?o2BoKRGD+hel<(S zU7fdv;H=nKSQnP(i9&PZ;f3Y7usp}p?klAitGz7Hf5Cj{!t(sry;Q%L5B()Y{%1-U zTv(n9%kv$)oC_+(zl_52|L-ii=FgjEy0APKOo;zU^1HA+7nbKQaGpPe3GqiwdDJcf z+!q1vivaik*8%S1UzsQqS`fjZz(Jxw_AEFKVlb8*5(nT+QKluNSO{s=y2WSD!l=z* zLN*Pj=MIaBq?*j4+4hqLnK`oBZ7>AQQ%K#ysgiIN$q626=;UM@lCbs43C0qVM%c5& zB=mt8`d7Q;%vYn(uyUBM!VnUXvCt%u+`zh|c7-ApsE?cJaqeH*!L1aN)B&L)-CQ@+h1{ZU~AuTFdyy3(lFC}htr%v0`&XgHEi{_r_ zXkLY!)Ooe@)OPGECFSbJI~?S~3vUws36jA#Me<_pcCmK5SiAjyv39fj6_MNx)B5Jx zP5Ll_?`uXWBAa?;^~NH-=~Sq#j5>4-km$nff(E^h3i=eLLInD;isvGMeGx~xh$CIZkxqAl#qloUNEf{J zf7G&dv75Wt&HbUfx!b?f0gZQc@J}KiI*cTu&ci!}C(obn^C~3lohPtQccXlAVlHgY z%3$`z;OBo7LtPAhE(SmJmv=+pa#=))T}ZI-Zm81lf$07(Ug=+?urE^B7c%rOkfDnd z_C*T&B8B~9k@2r|VP0s>zd&m)QrMFhmZ!1y{dk2*Z@T=my3MHu=l3)H&+50|wfcWo zdGdeRV~~qU&&8zY51sVC;RTEF&!{zjV$1X2gVDY&5d>RgQM96y z(vOKJn9K&F@5yL!eZ^>lz!u59I6q;u%Vx0%q_`HxX_t6M+1 z=FuciiuDp59I>BD(D)LtM<4BwQjP6rC%p(|x;pMR(V5STrdX(>^iE{S)xW zi?P(jSnA@c_%FCB{)xv@R^Qmhtwz@??S@@70g%;WRfR@JeXBh=Es}KMr)^vx!|Ns` zbkXx|oI)=Vt>j@lgvK&5NG^w7Ht&LxdbxU?T zsNFVpJ86SC_I^>f_IJhK|IOh3Kkb(9`LFe_i-PQR6PsII+)aYyI zBqNA)XgIB7S-NxNvSl92)E12vYgJoM_tX}Tmm9W)U6HLTc~fmUT%^}qS2|Viu+Z~Z zw!Uoonfw0wbZ>q6yXQV=xHNJN6?1JN#O(Tg4V4R>(G0Tba!;$4dXsM0%=A62UKz-c z2&a*6tXUf_P%YN)|349ud`hpTqG7cZuVr4il%VUnwv=cX#JZehnqak@Y?)WMoMKzI zww&tF!Mc*>GG?{%*nPQhCEe?2ZRLp%2HR>z0Gah_W(c@wH7kODeKk8;ift_?PQ!Zb zpU!HBrIEB?uy0f#|J|0S#72cgnUyD%%%G$aLTLLv*Q@F}+0Bjp0dY*ugFzU%-N9=( zbLqj5oWSP6u#z2dO>{`KX$tj^V+8!gS&E{cDtC%KkYfA4Sd=kl)m=) zU_|rI=fm4Kqdp(KbrVzBnhCyk-e&zA^TCJJ{PHiS8^6`w=(OU6A(w$l-qngByyFXs z$N)0KU*PEM_)+v_{N57TZw8mz*>rZp#uvVck62w0oT}&$WH$X-102e~7p)bM z!^oVR0=vE!8;N9OP>G9zF)@pE_bAml#pOjXFKTI1wz40VLxqEE?-!P{*_eO{^Okp=EohZaF5CT^b@*90}oF3pQvOp zv!KWf`V~1mSptHgm%E*fi^KPjGW^iS@ai+wHl3rY zwMQk!gj8=jtjVgk|s{AJ}DIPotxGFbyX~pd&A-`RawA}ozqacz6qcTjf zX8LDD$_AQcp6zqaW zR>eV%7nyEqcPYK93drwU;?jK8!%5@xsI6p)Cv~{jQo(tq$kv?0Kl!X*bEZ6HMQ){` z`AxqanR8lilSRbXhXEgcs0WbWTEb{(ZD6{8abcgd3|DIKu+d9@U{4RM{ zIoBkPkA^bv?+#JRTf-7PhYD!&3N-tzGwe=B(jyOx<)_zmrY>7lq~9&N%W1>$?sUA> z^>TUew3V^VWcv$+x~kBG_r^CrP7E%)uqVoITEFj`7<%Peovo*BbMNC6_f%b-Rr7lb z3#zxP3IaV9oLjDsZjP--);EbQZ#g-CoZjGCZaVJ26TCDvvw-2=jCix{N7ZDAcIH;T z&FMgR_0t?kGw~&}{Z@dR@I1x9Ndw2Loj}aD3+tl|UD9QoVQz01uby4y?bdv?XXz-i zMB3@rcl>rQW$LX4i}%x4W;45~A3v>>PI|Nj<2$84p<0D2o)$RSyJV6-UM16L9LX$Bs}Ti4z_o5kGDEeJQ=@>cxx413_DL$ffCL0M$%^NdUO%`baNnz3^dekVPO zG&|t~O{>xbj9uZdJ)=7}mrxW=$DZjcKRy##7y5WQIdw~^T2pk@tbBXw0$p zVxP=V&rZ6$RkuQ~c{PB~J`6^+9ONs0UcY^IIx*04R6p=}>)x41>WYlRiP-fArC4Vl zR~5Z|C5TIv$HJ}Zyh?HD-a(oI&VOd4~`|x z2RCw+cJIbSOop$th1rsZKai zP=07?Lj#}zIPA_%ST$PaKQ>_?Y_NL)?QfYd;}Vu1Oc--d1PJ{H6NYm|rl#O^6fZ8g zHkr}5J%^MDZ%{~yts@Vslt$OHrdXzg@)2Wnk2+YZ{97h0XRPI`3A2r5`yVFkIx->ygcmfpjCw@KyhIMHcFaMt|R z-Fa~!o;d2&y~exCCHAMZ@GVWZ+p1YLd>A{a~Cmj z$m2!>?=N4B5p?K2XQW*QzNkd*vwmNA3Jm>0w^%ZL2~`9${mINj=7LC_+>L^1AFyNv z(Zvd81%vZK=EIn(+>OJzTUfHgc!mVC!}*s(79#oT+}=fHAu3~{!wIn$W8iEW8nJTA zOz|3u_<-CvH5`(qIAt9KQ-Zqvo27Vlk3zEqeJ3mPBvU`3ajjeCJS0o8%#D(9-4q9|gpH0=Vat2Ps;&BML^o5v&yR0xi?!jZ-3!9rhY(7bmUr2V zegbvlALFTYenAz9eGV32q-965jTt0MjrMhXjgd@MBdfyf>kLu9Dk3wCYWx^EqVnJp z-*cF>>EXnY+2;NvcP3RJSqk^V%BQq39PMN&x}|2o*ore1MJiQZn;drRX0kvZB6y~o zv@)Fjm@Hh@pa}Kd<>(;=PE}K;Xi-$w zP0(rIPf<8aJP2c;>~J1&0GSfbrB6CgHkRf`mP)izFEe~BYGC5d+9c(ulauvXkTty3#mpyX7RqkmVFRNOFRbZz4Qr zq-x(F@tHQ?wZ}MV8-wu|HXn;c@M`kWYs;TjEoVLLA`W8F3)xDM)zdgPzU zZKBmocL``q+muR_kQ2=ros~$;k~rZ&$sbAh5N`bJiI~m{^h)0yTV=tim&hYA`M#m6 zM-`H+S>5e6Vf(fS+Q4g#%zXZGMyT_qaPk)Ivs%xsLESkHJ+bb!{%BgcL}rmBD8y3E z-`1D3HjQ=}PS_PV(iTL#n0^hLK7*5G&VX7CE{0jvk6kzKlw-KUbCZQPn32S1$mA;J zgZe<_8ow)OmhHgK&exY_?2M$d4J3mRBL$*&g6q&sNu(16^R)X+PD4%Ag@YQMu}vRs z0;UaOcO(w8!L6URCH%za%kD z8A4f%r%U#wSBsAynX28j{epmQ7vQKDpV^hvm2PHQ-|bYs9)W72(~t>_YrR=)Y>K1G zZ3_}`n3|AL*UJtsRTetB?w9u7Uchvm1Xwe^yLrU%Y+sA+0xeqT7sEZQ2e!kgG-HKexwZRy-aKTO)^KDF|HHyh?L0ReTI_w-P1TN;6H4Q?q zdQMXfZ7caqY`&P6-V@o8XdfzqKhK37Fe#*>eUKC$xNJ-?l}&1@ltp51Iq&;=fXv24 zQUG^v#@EmuCr8{O#5;4rZ)A_`XaY>B8xlRIt%!WffKCo13goGPB839q0`O9wqeN$s z81H~Dvxos(}o zKEg8L3>I84HHo~b(`CgPyBV(kpoaDR&K`u(QH<0%HTyv||M7-$Q1&S5gRxgdM8+P< zmQjv9=-md_sIrKihE?)W=aAwfI?+5hjMF=Ho!+DwFdKqdvQonaXir4|XMpxJ|46k? z=EJ9fvPPu9=XIiLc#V-6QG;t|j2x|?^bOZzB^*r}0DG6x_L+6#Ot)*v;YpZ~=}i^v zQ_8lbjK{p=SL{h@<66O(0KphFs>#Sed7{>$t>l?JPx8YJyWG~f@VczU#!p!dq0bPJ zQS>c$iZiR;^>^gjZ8(GnxSnt%xJGDNtu8C9FjCCOI1Up`@?%nf#PEz+0XN@xxOr5P zUnTrFnoVY47c2_8x4-jvgpB=@desDiv#&MW!fOKcEhJDAGRtPyz6HDWGJgbE9$cFc!HMlVE}n?te!P?E#yqm1?J^ zL9NIXGw2}DXnaAB@6afa460?KPzN%Rv5+Zs6SCklxh93fKdOoTLY0~i=bE|4YPQFV zL*q*Ys%s4QSV?Xv+<^HcC&rh>Kf&7d*dIPgTXmIJW}X*H2*i?dNRBMs0S2J{*z159jK;qm|m?9dw~xO^bpXu+@`L5z{0lz4lCeAv1=NZHWF zOi2}W_imLcM<^I{e8vx|p9N*B6YP&*q|(y9CP6=F7cB+cLOZ`AxZ-Zjs@p6Q9t~m~ z1@ii+5{7F8*X1$6vK+EU@i#jhyjajv4M8vK(5?A&$-M9r@f*&IkssNb()%qh7Z~i@C*{=t%X5mv00=YJ_7GjB?*u*_Rj{o*luy0;jy8 zeJF18v_Qj85FnbVA1jX7aaZZ%2Qat?A|$w_h~!25Z)^gh&6EAcglvGkp{y`Du85HN_`OT|d*Pzk4n zgm=42ki?Xfb_`S}V>hIx`4#cB zK|5_X8no<>xD_$Tg_m>H@CdcubYb(l-H{o=ULJJcc)kEL<8gG|wO1QI$l z*~aXipH!5m9{E0cQ=u@pDAJY+O47O1}B5pqs4FgYNbGr;6F$fzKa^KI* zgJA{7Ehj}p+R{NMpx24x%Lt*Yxg%Zywi63zFC+*->w?$iQP&L$Y=9>YhsuFL{I%$9 zXVMB3F$!hePtr1YiErS12KnL4;j9ja^k%DenO#pw_F1S#e@fJz;(EsiK=B54$S8{BC50i>0iDcdYWaMP3q6)ES4zT&gk$&Ieu&`G({RzD*ON| zEU_V2HK&zSM;sq@4r59()e;U8$jL-gmOvW}v}iNoWd=R=reqe?q9xu>J@(;JQco;&=k0w(V$|xj4Oo*&Cd%$E9E7XoYPaLNKlgi@*6@`W^oV9bS zVQ2aJlfLj!-afR$Z!eR7VT7iH(I+Hv?Iz$3634|k2-}xbRU_m$v_>)c3H6~Q1gRPh zV|t(_h$#%h<&K^1B6e`$0GO)}-sO5NSlN0CeQ#}iH7)@gEW{jNygGs3D4;1UNK3=& zB}ptQGJ(^J8oOYfsn;zl#1~+_l)dBWb=x6Oq)RhJJMj6S$*HzML9H39wM18NgQ=-! zXt?J-?6DxL8QD>>VHZwoC${cvtPm@TKfmS+QVkqt&~t$@vb=mU4Y8e`yvPpa*~D9P zOQ|7+E~{a&p1+K++;1!n>8nhlupKG2|rkngDju$G1jdOFr&CybW4a3)7dfKoe_NUWeNC7 zmnyd^1elED`@~HGzcvmuOleHN%jhOiBeY=?6lPe5sg|ln@Fm1NJf{bBB*Q1(DA7_I zVCH$UmPmEOyNHAKtxVKnLPX*OZ_OLx7IfV^E=ic4T^t)~8aE6sSsVF`LZi&xz0vx0 zVO(0W5V2YkaZ^2(2oW8C^0Rf(Q8Y+wXW{`?`9OWLht;zwHINIV4Lz2R22}v-T`~xT zo!lvba2_yi5Px;i2ok3-sQvP4p7B{Ulv|U420XYKJ(y$F!EW9?6d}f0;6b)RQ0E|R zMLH-!o}p%bi=p0FEmT1W+Z5akT;u3CSS1gx-5V7H{e2+^2gZdgtI?Dd4e1f-0vV;59N_T+ao~=grL= zOMs4n#ay20=YE?uVrZi6oU@#ow2vBZjWt`Qdps}bt}?l#PbxQ|${@aJgV}7NC0TyZ z<|NO!rwUlo$AWKauI<)b_RZAn#~aCUiyi4?I2t!dZ$r-nASkZFwPuo9qoH*7JOq$9 z<7knyn32f4T(N-ZDFKaf1{)bb1}k5s;awH}b>$dS)s3gB77|>5o^(|yuJ=765Ytdp zDbNljArly>gUMYkKXn^m@`T5vNlzB2YL@7KD~Hy_3^@&G!*3yZwP5+AhwSdERQT-- z;(g3WN@7AHz=L$Nv_rFk2*x?!oZRlREGeYuWu8s11VnHCx=wyN@1pFYO0wu!?s`9* z7zw>0g%G$ab`MshLenHd>Q9tT$smI`Mli0=kLe4*u1!ph9aR$C}$6uV>1@dlL{LUi?1@C$|7hk&m8n(*& zq87tO{Pzhn?d^$mST$H8h#Ed8bwT%{QEU8Ns)nAHW&cxwh9LtKFtmRSQ8uG^=U} zn}hyAI+?s*GW_o=sBP?3I-m=W#fAGn2C;v1Dq^+4JD!&BdkZX3C4aI@G4S@XVgU8? z-TwzJK+(S--|-(`@*N-YByUO=|M45I@*eNu6#<7rcIMk7g8OHm7!Lx1(zNa_*G+9gjSO(B)d}VS++{6wuKv4 z?p(Tc?cT+kH*Q+JeXsfj99ZyR!iCwcb!yP;!>CIaqaBz;LXyV|n^xw@7q4cN5hN!W z09qqr!w@lpP53!Gx)LlGe=v7rVXx-TKKVzbb~^=`y5N0y@4LW&-H^eG7~qR2=JDYWp>NTGgA@;sE1 zFj9&Yck^*dhLB{^$(O3^QA&$iu_%cylcXt1D^H5jCnL8|Vu~t*#Inhn#5590z}A$a zMTqcR(@q`#1T@fzYGLJ|7jYto|BM0jM5rEC+8Kb9q7)rqilGS7gpEx~ip?^`R8uIV z{U(^{AW~|v#}<1gYKq8$xG;!OimZ|}Ax+5Gl&2^*VP%t(XnIN#gUU(Cp-vh4YLo%m zc{I|5wt%!&Jv}Qb0by4iKrF{To7Ny!Bn4AYamOY1ATW#TjiP!6K-Z#C)*Yag{f5G} zpyITQh{T0JYo$<AT1?MG${QHYB4|M=L8}(Rn^Og4 zm@_<)Z-YMcoJ|5I1;=dxRN(udK}cbbQ7o|)Fq>TzrFazl-EIrR*}&_nBZ)0+qKi^^ zT?Dx3MK2yqX;2zt7bO6b0d{clEUpqg16?BP71?e(^^=ug(++@Lt>;QgMOohOPW!Rn)G4@ z(U{DVXfkcH{~SpK=9tX00aIa{U>j2oA_+X|k&m^6W+D~CBS}c1m}Lx&we+|wV;Urt zUQAmUp>)aUK}vLs?9wBD%*Mi9)~nHPVF^WEA#j zhd*pFQdgYrq)zQ4N2OrBqLM-h@`(Z&L@F;ZIWs0knF>N`Q3{+6P&7xPtGv9ZM5$`; zi3!qz|FTfJteA9_tbN2yE9zm3O_V}jCfWik3TrpuKrvmaBUnhus*qNY!WDZZgJ|Ar z4}ZW`BvObfPDydRnMrn}_DB^cLV{F(Os}b%Jr1-+>IBK=(P>IJeY- znespdX$OXBT9C++VzakftU$OrhUgXKYQNc|dci~nWi~`0`K!h4NFhBg95ik{5%6Q$ z|3He9Mv7CC(Cm^QWs6a8N)x2eF?{c;I$zm?44lyH-o(q)C?AZgA2uOfe`An#eECr< zL(S-ZQX#;>?xUmV843%cy@f%FrQRtBuHbA-G~aHjCD~O-$$a5Wq0xE!k=}%DNn`Yh zu!);huosoNg>{8Q2^?<4jU7Ya?v~orR4lQPcmxwE7}BZ?%WR5OJvlbBjH?J?AyuVt z)>06VE}?ztnAl{`J(Ge9tnkMa8mcS+8fnOnl|((-oSRnE>z4LlMU2IBQi`Vk*P1W*uoZwRIlm$@7vFIiL1FfDi&+Dx{~~CA+48f|2LhC z#|9aNKLjX=XBR{h@#66sX`Pq%srw*ajKZV$c3Ts@3*K(h>tiEPsB9Z)+hQ3Bb&pNL z2jXuN{!ko42Hi^0a(k}R3+JhIzVptAFv4{P3y*|c?E$>*z-`S>J>GT@B@`;Q?~y_~ z+G?o19Hbo$mUBW{(a0};T3Mv9Bb3_#D=`ef4Ge)+r6MG<8xH`c2U!5;L<~35SlFYK z$@tJEqD?KlxJUnqrAGk^krj<2QV|k62b7>qbCROc2hI@A@;AW$xR=2zZR;9w#bS{T z6P6INQqJAdl)%ExA@#_jwKNtM)TvHVRd&x@>p_J9@N59!4A|fbveI}p|G0}&;62zB zg7WOKVlvJ<@6#H@IG#7(`GmAp(cUUmUo?tc4k?ZV@`tk5*~8d}Y$5d;qFs&TWTj;) z$as+>fk=pWfJIi6Ehy}dhfHq^T+jq7u+^1{#VjIGm@=uV7l;7B&mx0jIukW{2qbWb z_KTNd(t-?wl_VGg(V{+xD3p-6urfHL55u)cu@n-Cf+2IPcuPR?+Zc*)95$nf>$$&Q z8i48>fRSUby9z5?XoG~XIQhtg6^s?D1E4>O6jC7zp?ba}L_%aixO&Jzg~&Jr>os0M z2uUe}0cg8DnS^S)g;e1}6PpV<+qJ_}2!iMt0{aSf@C7bZm6<9s|A$ZlW!b_tOqEtx zkj^Oxkzu~QAu8gK!qoYi2>2zDN|nnijGIA2HHW2a7HDipo zEgO+S!lal3i~(#2b7MNKyF+L^xY{FyNer&tVZmi|h+M=q|L;3C-KoWmi%fp}W zLG2g?p)5+8Tq9*^1C)dkNP(pR@SodTkX$;5qg+d1k%Cni01gC^b(%{2*{stMJ@1Me z&)_iQbEpFfDN&*f+-NFRFsQXunu=mC7|W!d;e^fc3cNe8^P&&Y*uE`@%Fy_+3u`K{ z{V1ki+Ju=A1zhwIWGjW60YIfn5?ql;|AtV2O;{I}iMK(+3qi7nQYf-6 zQk2|~gcN&AnRv8#n1qBn82PNIjaHE3n9U+3o}86s5Ev_tRLwq<>CSaZI_eMog(v~--ymu zn9ePkC+2jgnS5u^g$~s+C=_o=6!EE|`M&Vbf4yI7ykqGGNKqF`tmSFN83k{b++NxWXe9 z*IBfr+cn;zf301=VsP zZY4oEs!bcS*!s_gl#LN|EL16gSaVlq_A6(s(kG=lY&=XiC2UGHhCc? z+~8Q8Vug0iiwev(7Kair5O0koTHKpP#m`GQg zWrdg3iRi+%38KW?*3AvbwWrOU3$9>G|F*oXT54RdXv($ujmlM;+rK zo!-#!q-uke!<5_YjiT-NLGAFrf6-m&yN>V83q<3Zje}gRFhW1PpY(;_@G#%MvYdvX z3L;_Oy1-wm(1Kp6pmgI^)XHDMOP%47l2Le` zedXQ_{+Y65h-2~KiCDUm0O7a@VNx5H89A~`G(9^r4Hs_V+EC$)m|=rZ$uf#iFKbO2 zP6%ERshZ;8AQs{wCSt+RU<8?sl%S3a%mp|1B8bEN0_2{s@M3ITGxiZB2-i9;FeI6ctzo@X1Y?Qd<3X0>Nv7mVw&Y93Xm8(Z!OZ$6rD`ehW}2(7uq#)#h^)MfjvXMon` zg+2@W842;(sc4oG|IdgYg~*vFSsw8b3W&aFmY7i%;UR0@lVQG!kZxz4;U4;t3;scv z)qrP&&ghR$W{%e9mEhTz#z61W7?o(?=7Nj45-Eh_npH6(RW1m}87r{+iS=qS z9z_!-E8~U;7wKVxpKuk2q2rAZq~|;c(X#A~){5e=hbkq{p>PBm zE()SEnWdIH|LF7U818KeP?#DksZjahLq=%*FbEDDidMiF62fC={u+Z|hY{u+0e-l8 z5I+Sh2uVSi1Xk#%NDGlc2n#EN*5u?5vf#>LTZoCOmnHMJ$CRg?H=cwAOl8Q zE!2FFJ|CN@Jo5@kbRkKNId`a~xZZXc11lZ{BX0=umWZh1EHXGDExM0BKO;#ubEq2{ zK7SAe=&{VHkv2#3M+eHtpmRL;pSJ`&@E{_4xT$p12~Vv+&U%_xul3JVb2nF-k$@Gd zkaRa!bO3qw$%v&|kDp@?%dapnCIl&VNM|qi_Knyz@LV9f8a}^y&)Q`Y2i>Y9>5{`@ z_axB*@L07hnTUC>5|==dmsu1#fvk5&+Hcu{{KKq@*zSm^(r8ktwqcSu*^YOQ_jB{m z|FdkjEU{+ClY}Ok=bd1(Ey%)-!IQS8H4$Z!!)21nR(Ltd5Qb-W2U`?-H=?PalaU{& z4{gp25BFahq@NHZ{sgAmdTM*`cY05GWl=V37I~CkUSW&!q>qvx0mzuYcP?!bb_b9A zizcT1_N;e{H7+p!aRp9@s6t;uR=_&dQPMReM1zp2L2R&;6hu`qB|Cx$Hl;TiOG^fe zOlZl$_W)BlWEti2DWuSfWkuC$qb@`{d$z~cisHh#v!}#=sfsonUtZ!cx~Ag7Z(SQh%D;MWR<&`cMNAd#)~{WG`zqzagA=dTGJI@V)klji0IMec z^0Mq%m3G(wdDr^$$BBoiH(xl}$zW3^OH)GopG_DtcCm@7iJr{@dz57|TmgtywpvLU zFhGLAgbEW%A~mYjLW5)4)hakZ$|!$a3~nK1uT?2hwp_JQVsSu}g$N_EZ0Yi)%X+p* zwX*k*RV#r?BuHshuNEm*?d*}-V6dk>psm{ZOQ=AT&sLk3+S;=6BFwB>x3bhSs@8y| zR5=~>*ou_MR%8q&*)o(A8IkrBYSDz&;1q>Xw2%rLR&3rRq}t6yYpc|j|0DyFjH%}j zZrY6($D}Q@iHs71SGjWT>{1d=TZCEJN{DelyH*cBW;V#qo?~~n+z~wbI;TiiWfTwC z^3`B!hzYf9ss}M=D_?Bg5+x(BmE_)i1*Z0^SEc9d+P8D>?)^LX@Z!glFK^y_goNo6 z(sQ+G%K%$s4<^yV&ekTL6MHWnGr*Nq7}e9p6zdJpMu2^_QBV>*N%3G$?Qj;sUMxi+ z2}E2dk$@Dn)U!cmo7B?I77vQpj!_1l*I5D)kvM>dTfkS3L8J^=q7+-uxJ8Sj4B*BT z4>p#NU%g^gw8r5=+jwxnW2>ebo3QzV8klz4yk^-j`l9Z^KLPt8u6_g4YXpub#Hdclb5lG@87g9)| z30NRzNf}selwuh|QJfg56kWc#kS+E^TGLu6C1ej7ThyeX7UawnB$=crkkDGUw6et% zqD?R;u)zvDEV0EJdn~fu&w)*4G9O1#~= z@I^t&6caEOR>r4AcP>YNvc(FOJJt8`W7n|(IgX@jgH*G>C~V4EG4M)Ck<$oO7-^Sz{i5?kD7k7%~g2$O+@E;P!3LH5FV=x3;($C%Ri# z8mgC@1?df#Z_L#7r0Dnr+UzULvLGEd)OPAPfjUVnMV8FCtPK$o_26vnhqg zS)@u~PJ+j~5}pYrB}`wn^hdu6(uIW)sRiI%vBMQ6q%^!?NdP%`t5S`Geh^teXKr}G zDN?bDRy>yFw30<|)yO9cTFGhr#f8gU=1bMe-DO4*sfD!0Eh-F^X(Vu_#IPhYNiZGu z4AP?X>})3RafK9a6{`WTf()D>AOXcUfGwKuRd$q9Rz04Hu0fduMNAzZ7SLOQp||0oQJ6k|jreERmEKq}^rP6?`@+&j~Qb=nvlF-Z%+sV;-#&l96N{qu|s*rl{^rQzoTN373uckGoB4#qEJ+(qD z<2)z|SXGEcw$M_ABq1j?-3(OJLe!I-|3q5md@EezDpz6U@ka*{5tXFSA}J7tbvfF^ zM$*$5sRSu*3xV4vmRAs)RY`8FYScps3qQ8>Nq(#-5kf{Lg$$AivJt>5#)vZp_#}am z=bMNhJCdj=B!HGQ3LPuhb+5s0qOi5)VA|^BybWY5J)iYZmBL24izJgo_cI6-BLE>X z)B`|9^QxKx1lIdp)?=BnTYGq}OoA(vW+I}l3JWNt8m z+5kZFF+$eDXa;db5`VHJugryc{{owdp|IvJthAFAr0@_>%1}agv4$>RDOrTkmlNPr zY8ACu!bNc6ioOtL3jmA4QdT?^0A&v<{w0}*&F7=Jur82?eAw%?m zCX_&3>MZHGg;vhu2jTW2nKApz^RD;38!NL5!5-jUQrDIYb9{eyiQii}AuDdr@YuT^ zG+hGuaT;jwy%W6f|BQEeJYt9Q2SZclIhlBI7LF^wdur-fV);+jojZHvJM3f6ce#7V zcb9*O6c5M_e^7z!<@uf5X-~G3pxz~2U;Bb{@AZfjpEJd8K1`rrEa4yJ_t9UzR%|c( z?Qv;9Ok=`CX74C7@iL+Q7jcN$m>%Q6P7G zMPERc2%aDcrr_{ANR+9dv78G#ai11YjSG@T{1gP<)u0aUAP@E+UZ= z7@A%ft|1$u54YS-8UhO8Axj)~MjgIH;h|4y*^8B_A$QzicVtl>X5Sua;OlvZ7UE%d z3?fdcVFXM|KO_vHccXC$0I)D zGOC0z-pl?;%~q(0G2Tvl`QKs$BjQ~jEOy6LKw~hL*6m52Ca^+&Y{)mBqC1u%yA&Oc zVk5O@t(J#NJ*Wd{rHMJRGceMBT0 zp5t~*q(ZVpTR@1>9Aweuh)F!iL~#ZS>Z4XnWO!f;Jfh-YAD$=6r{UlfL6$NpP zOAObsK&5A_$BShL_H;y|c}K$h+2&z~in!LUP~}X%J>4n2Os)Y z-HD%aYQ-cNgoe1KS}NK?@Xk{;+)=bi@sVdQnjgrFBL~^%^0k7048UaFjzQfE>LCTj zFe59nrh>|3VNO9ARL4;yK@?~WR>kCEj}#*{%h41I*CKSCyjE~Gzp zC~t@l^hkko%*0B3XoW^ZxL6oYeQ1Zi-HFC1x0q;;_C{=R!Gq4FlZ;LSR-Zws|7h@F z3liigSaB$}z~GYXsDJdi4sYMQ*w1#qRfh6$67JO%B zVT&ZpAWQPb?YKp1`jQ^)g(l2kkOb33_=%+Ch$a-JSAmzKN`gMkk`_!VglvyWVpfhc zs+F~df&@mYR;m^%7Yk}ag7F5oEUK%9q7;;BOYH@%Di;~BLz}cg2?oo9phdI3>4nT7 zqdrKC7OS=15QO}dcHYTiFlwrL7_x3_uukC!@r8^XYIv3hlCZ-ROvNY=|C1zy;v-(D z6ih**j7g{Nsb+NRto|s4wCW7n$Wn5urv?qJc4LD;NRKibNr_FL09StWl7(o&n)xQR z{0A4XC!v0<5PHl{a6%gl1=nDeNPtjkQWn-EhCvaD+|d zTwhR-UmC2T9AgS^^Jr?>shQsJ;2H4MxNRBm9LrOLiBH$0NeFuE(%ZLO7z9&y2@E7 z!31oS{Y1~MC`LMF(AuIM;`o(sz$l9yM+4;;_qKyCl)@Mt{{}~pLp|`YKq%6g_<}7# zOHsThN+c6vlvO*h!W1Zu{*+DJvnAG!2toh87@%7y!@hkV)^*?{KhFdSu9k)Cca~ z(1L_b3FTF&=#0(4$?YIbSq|q$Ac=>)$xdL1J;)f%KAoeK2EdFP`{@bUy_mdVEP&Jw zf0hlsXi|?_8RG*%X)~&W%UJDB_m9@f$*HA zw@HsnsG6YR1(}FWX%G-0eXk95#FTJ=E0!`uvtcPHH2xSdsgefsaK)MZRdYqe>$GWB z{8OZ;);I@B0&~F_Ek%c^ibc*}G?5Ayw4$rfu@o2D*`?J?V9Zx##i{+1&%j4jD1<%O zbh!EmbzoXKc?`Jz#2u?p%|wKazBEh-FH3NN*R}zc<@5lsfkc{#e|&UARLgc!R)$8j zStnr)F;CN=4inWIL%=2jd>a4s!uJ{1e!X&G8|L zKuAXLL@mt%(Jj=&KlrD$xx@q{Zw93Vk*4$dkQ%A6f;$Yx$_BECwZwlq3xq`nM9c(o z@W)AdicehaSP_YEC_(LTFHjiwZ-=-D;*ns?g&p};ju;30IIL-A*d&cAwp!{>4M2i1 z$v?A$r4Zza$ZAn)%_{lJuSNtFOcq#;|IRfzN(9w-ol3&JgyUk|&hbhLJGyS7!eLNh z>LaU7-pRn1CfrD5R~oEDO+e` zR>+Ko+z#TH3!mRI;t+@eJc@)&FlrG``n&v!9L?aa(|SQ93|wddQnh#_Oxj;9drT7M z)zV`i2aAv7EsU^~!|X+Dbr0PY|3p*|wntd>80dD8L9syY9vA$Ittl{J#s`tIL~-45 z>s>^j*4c3Eo^D_|!=s?%Mvx!%nTIG@M#ov;(&+6f8E(r;qQGX<0G!~U(yf4z1Z(G6 z=&MA0Z5il|L7WKh=x_3_SaYqmi`GaRuzXxVJY0}YW*nHm2!+U@cWJ258iR*VMQ^2v zhObG-&(@8&U4+3x#u${UgvNC}D3bIvI*pXVhzx|1?+lHQ!sVh*V?53jY}^)5&Sl7j zzf?DK;Uwi0*+sY!M1UKwmps59C$RC1TvU8#V@NwRcKn%+a-m8LnhU_S3Q#sYUzP$4gN&IxMBu2^3QvA3$d0YG!V=7oLZl;g z?25F5U0S4mL1-ro@%n>=Mk@eC#JGiFQncDk#dG8|&AcsN@=!bF1PY}_+{O?>bc9b! z2i1;mr1c5!^Sb$D0!|QwmH4UnOl|V#n20osxwONdR&nfObM=uvVWdBC8OK_1LGQCX z?tSNd>IH(|Pz@D5KnxH#kYGWB2N5PzxR7B(hYuk}lsJ)MMT-|PX4JTmV@HJ%qDYY< zL5jc#1x1ofIq>8FkqMO*%1n|5L8inhL153JItS()pakJfp$mr! z#3^*8&7)G73QUqf{|c*mWITo?NOfdZsWOiWOpt`CB(H9^NToTz=-8Yke-0$-RB27I z8~GBgT61btfhq?is40_R$ihVJs*FOAuUyCtFE@=cW`L`>W?B9fJ(_fB)2C6VR=t|_ z#Fh&uTa3NBWb2Dkl8kBBszR$S-Tv1ix5 zoqKoh42g!q+q}s8Cl=;3RNHOW4 zBE=R~wva*#DM+aYF2x8;XugxmL$JX6=rd@)gbwV`yn^t9PpuIlI_blKG+||v4PlH? z#u;g>QM=ye|Eo}{5ut(f9e?ExX!8nvBsHN%3Wi30&>f*I$7RHdrk*VO7{)R}?FX2ejg#3T0AS8p=bd@3IEe^;-io=O-}JOTB2!{+#2iE8bL3=Ab|^&q z3Q8ghv@nDSXM&XO+3T;t4*OcR$i~fPh{jzAEQ3InDD8&WvS^c9N};G+vGLAZ@4e^T zq?G|$34DMCC8AKjhN77JtE~8}5Nd>oCP>HPq%a&ImIoN49^Uv=@t|Zw1R7z!NiW^> z(<@?S009HXa=EuN(n54P4C__d4!+Is7$U(0*qyWfgLp}$w4Yx0Fwn58JT_}wq+saI<&Nw_p_E$(Yd zAAQl$zh5i(g?6IvB_Jf4*n$!yu!%7gOKB8S-UA^R!Io`-6}I4l^&UhVku*pPN|OTn zn%BIzX<=C*+@MH?mcbB?g)Jd$kOp1SrWd}XY8$K|C#E2u7S7OY19%V_>R}5L#?U1V z!i@?`@D;RjDR22%X(gRR)j7Kr0O32u>#U0fKfY|#$k)WRMEAVm(j;*~Jk zf*liJiY5jSt1@mWQUel*f+97h7ey*kt(XGwqM(UZL~3&b!kzVE!iFHW@I@BgJHfN}VkYbr!Kp~qN zVhc{VW@G7wnSCTj+f zf=C5B097IcI?#Efq|DeNZv4tzbxXid1Yo-hd?n2sE|BEZ_W-j&chdTg@ zN`JJ%I-{tEJN!5S)ow;X_=TuywZahbj*=i_1zbXWSBvUQQj9Ayj`IK-%lfXE#Vz)T zFT^;UvK(Y59fHsRI9ik!!IvP(A;_0JmSNwrRyie+L~_bN3gOJtQ0pPoCe7$Zv<|kc zVFdE{I`&_-SyikDS-_t(x<-4Hp>kTe+M@t!SuMJl&26r4Of%EfDGNjso0ISdSus$E z6iYBwLh%3%D~I@vKDXf;4F)#2ZKwc&7vpmvc7kZHV*g zF~w2PZY+WfA}7+hBUQVZ)va#zYe3?aSmFjgB((*1rEpts|Mp2F8YOdHs<{P8h-8pu z$YFLjw}}mILcEH(8Y{ziL86QSow6K&J-7gxRq^5=aH(k_0mBZgpm)Cxqx` zMlN-;nVS3??-+~_6ytDk*F-3n?!DSk3^d8Y9f;yI+h~Gl;XnLz1*IfA09LpHEbG}q z5C>vV0U>nX#5p)C{77%14}HGB#pH;<$VU~A1I3c_iLMcl_fU_7Va)Xw{7&ArT=H8>gz8y&+L`W+;z&zItBt#Puz$ zN>r4Nf*vb}fs;!vFZs%2o@}ts^_4cOCdlue_gfrU)Yg}*#;fmBox6y1?nbqS7+)bP z8U-0NjZsVwz_pU={q?b*eRU>vg+d}Q_rupm%uz~l)`_HO|h5Q5^R@koRDLPjh=!Y7ib z0WmNGHSjz9Zv#E>13~aFFed~_umnx;1W_;r|5b1WS+E6N@C9Ko24!#tX|M)+g=yGE z{d5lpNkj)-F9(6J2ZPZ1hHwXcFustG2Z>M!nQ#f6&97vtux&&H5A|?q_)rS> z&=31C4+HTJ1rZPpu@DiF5EXF{8SxMo(GeRl5hL*tB@q%Wu@W(n5;buWIq?!V(Gxo{ z6GQP6MG+KDu@n)}4png#S+Nye@fBe)7G-f3X|Wb<@fLA07j|EaMWt??SMasSp#MluB&v+*0jF&xD)8W%4# zzC!}XF&))WG_+_N*YO?6&l|nNVB`@V?eQMT1HN95h6v>)$At;U?p&@h&S$z zub%I4-~&k@P$C4$kQ^d`=1DpLD<(&BC(}wKgo9FmGH|%7YotKHWCTy_L09~b%XqRW zh3;nrX`8->I_wB&G^Y)wK=JYiXpFMl8Rtq4eSE{McxfgNIrGs<8uA;lKl!KkEw4FaS|;0tIT#fqBi zx%eqS+#$C-;>K927NjmKs_rsNLb3A19$s##gbBY0tS&pVIr+vU*&#V5U=!Lw$?}ZB zB7qf3A&00_KrCwt+R0G1M2JKJKzL(qxL^Y6tQDxu7KW=MV5JuD3g~J>3k;&GHbA3_ zXf{fr4E)9@oijiuDsfN>r2=OPvH~lU!hHTFE&{2!%8W}+s~)hDE3S&IC z6#U_m3`{wggU1{qti;P71a(%ECsqc)!Jtn8{M0yfgUsUS)-Hw1*263b;%}VoMGns; zG{=uT%s~vufFvQ<|Fj_3o^=bRRSKGQlXNQB6oeEMAcvUpw+N!EMn)%T^;}!#>KIHC zLhXPeq!yZo6>341d`!1WfmeQOQnc!$Tw+q~fl=9FGK`7Ctgk$P&-JE_xu!roW^)R_ zh*snbT_u)_eCO6ApcDvBn!utJIAJAQK?_c7IVIt5R4hRBRCBsXC9I}fS5o<0mOc=~ zcMhY*u10m7%PTA^qo53dM!`weD*}=VlnON@C$?yH#-Kop46X#CkmE{}ttbo&C;rB= zxFq~;lsCA59rRU`sts^bO(Q0wuHr0HH=(j1?@q!=QLW3R>wknMATk zsgIs)OPFF(6W7z`HgsPm3XGE7O!6R9C@BahgaiYGZWXsm=!KL(O7DbOdeC-NXofE1 zg``3YG);y&P;`YiU^GEDD1{BgDdSF5Ar5jeaCS7*=OaKxdWW}qz2+yUXo_}?BSnZ; z3Cw!I_xheCKF0SsROf}*!4>>&yqGh5-4~aFmm&D+O5QYn-}io7tns8k6I5u^%oTqD z*wv6A`2x6rGq8OPIDuQueigWZ9r%GEID#d3f+@IyE%<^lID<8KgE_c^J@|t`ID|!b zgh{xB|4sOWQ8Gw0H=+PZm)JQhjU%Rrfti?vfyQ}wsmTQKD#CqyOp&wA}cQo2E7EL4CjHQG64v?k9l6 zM}7iwd#>ktzEX0O_=qtALAs#*zS4fsk1dtPe-e2v9TJd17-(j6FOgK{s?>Uv)G!f= zY*txjTsfA7$N`?dcPH2)R;)^l z|L*8K1BZELlR<(8LQ*p9{v!UYW|&#QP%=qrtq7so;6+G@90r0MelnaEC5nAHfJ-9L z=2Zc9ETI5u00c<^*9n^3N&z4wdzJQ=1R|Re3ZRs>pr6F(lx#~l!HOe7cVKQ5D77R= zsUB+KKPpJH8t%Jx2luGOo!@z4f!2&j!ipM%GqAEGs&8Zgr(*@e9*o1m-~uu>iiWVN zHz2AuG|NBi?sNxs6dU4FtVX1)&LyDT_pD4c4wRl6r#ngzSpq`u2NWmX$A;BOjD~P72wq& z5S1Y6LAq5bO768-e>;V3wX`dzH*y2VtaK?vbP5D3#Dq&+OLVJotj0`pAj$yMy0$~u zXVeNsffBr$=84)GT-l;}M<}!)#DMy?B(wQSx7*u|EpC6E1VIg13h=u+|3=Ge2O`f5 zWkwYv33hf0RzbM%)xn@tolvcnKzm6E)*{@NAR>X2_*N=Lp&zU>l@npdH(ZB}?m?^y zodm~uC}q9u)3p?Xa^3Uo1VjOT)T+F75~TButmuM30?OPp+X#px%#}~F&3xoEI;HMs z=+3gd;@6<_A;Rj&Nf-%kjuez&iU5ifHero8?zwrVq)pB|v%HKhhzl$_E2zVk;-Wel z)yGeFOM1kiB`&LuRH6sRsiw$}k;4@l4MGkKzFKKaNNXZM+RnAqO*u#tz6zfkM3uS% z+iZ!XWM$S-(m1yuad1nR7X-`GjhUF@HdE41En-h*otSomiabeU|9R`rccVJFOfgJ) zaK6`vS}Cwq9fUo+6eKkYuDUEEc7I2qH(a+(Mxju0&99kizwFAJWaog0g5{XZ(i38K z61>4X7mM_LEdHZVBmuQJ%0XzysqEH~un0@HU4u8_aua+EfNp&o_h{Idyqbc1G1()= z_i6e=eBQE^a?eBLr6WRl;nT4s_*}fj`)MnLfW3GCS3@vRq%13Ke@&br?A_!YcqLYQ zdh;VDZy1a(hd!LgP=I!mV(w+5SLc~tPPBlGQ0bxcyy;`OJWAf@OJ#q9t-y^&G=iS$ zM^X*(SR+y$A|_+v!TyE6KJD2ae%t=-;Xdx=e(veM?(P2W|M5QW^?vX9zVH41?*TvX z1%L1fzW`o9p}+7A|L_q%@fCmZ86O$N-r{%Ic7CMsDZld1wL{N1JIel!6@LAOuOc?z z@?nuN(}nbjHGD$M<=kK!k>9 z^N}mHVp<{`_J5Ih9;EqEXhU$~Of-{&YNuvG=s|ku(o~39Kqz+|gwO0^G3};<3^4SS zp9YH~3eaqkF8XJ?SUWV`wuFmHb&UkaX^$&8z)LBi87_il@(dKeE$hErp%c%YudbtGpEj- zJbU{52{fqCp+t)sJ&H7^lufOgO4;(1lr2(QlAOFc04vs#ClhW(+0|s$jasutX*Gb% z&yWc>LB-fgNk=VGsXpCgD{T@9NfuJwqJ>o}DN&%3VKrb2m#1CB4oEU)09vnO!+s5` zWmLZb8Yyc0nl!ZN(WFb8K8-rH>eZ}UyKen4!l+iH7AHt@n{F*u9r@n&y?4NG+({lk zjzAoFf&t1WBIjF?ICPH0Z|833YK!%u77>$C5=AO+;aN8|+@eIwfHqSqK8->Var@}E zDM}e-YZGwb$M-5p7)5gT(Zhuj352DDa>c#IV1o`m2>)S(5>7~Ag%$=S!AVplF~t^R zxTT&{TZF{e7A9tO7gQl7p@k$SlCjAc#T6D-5>TBaL17-cRh*4mzzEeAqtvsWV?O1z zQ7KbsGL=LWjbslg?M1mkWiII`QCAnWlBES3_z$o18g#Y68E`ckff4A zhR{aYMd0N_gto(%76fHVMk%%s>P{>AIXBZsDYb_jNr|#zPk{<-G{&MG*3-s_axIvW ztOSuV5oGHzXI`XJ@ugNmY$dcsJN@)?i#sqT)c;1Nwy>hnw0(|CZn@^3i*CB=(qv;j ztXL|QTch~Hr4)!!I{>|ENg>6zTL>f>yirQDMJstpfETh8)sj#Wq_o3IRJM#rianb= zHJC>Ba59Bl9L*$dO1my)k6IO@6vd+e)?&+G)2$SNCbhH@ZC0by;$$nM5X_1#Q-nNG zWI`r3UqY^w@l?;8tjl!MPCpHG)KVWsseTEUIsnomO=ey_WJqyfEB2rl0j2Fs!O2t| z51`2a2z6CP(Cx5SEqiA4j*{LJSc+FGMOVraQ}xtB ziUj`=I}sI2cqK`O9mR~%;ui6h;THA8?f>>z8zBz)L~ckSYdwQaO?&OO-;R6kd?wM9 zS`xI)#RTvrHUKHIpJd~rQYaurE64Xftns8gH9$RFbTks>#pBG^p<_>h(1>%|J2qE) zS#^GZd`Xf1`9>z>Pbsw7!-_;xOy-glT99EdDP&+ikI0_ zbO*r*N^pV{tYA(|HGuXA3Q*}8fGZM0j!9WgP;MgwCoocmO{gbP%efEnB-0LwAjdmX zU|1PAF%ZgG&Umg`T*}<$B#O8wMw@`qhhT(6B9eh5?=xB{%0QKgprtA)$>c0|LZl3SY$C`S z(MF=sHZE;M3+8cLOnz4nDS4$K5i3b3S3-r21hIN>?4>V%3Cv)&=8IV|9nuhXFaqvt zZYtr=01BBSQ{^QAlxkQM%+roS+JYS|dCcd|gpf^?t#}NaNEBpsP5_~Eov;#1N;dd4 z#35%4z>>mrKB68`qU0mKVNMj-;I)l>4QmOZry9rdL18L%p$u)PLxtiSH_zX#0nGjYaV36*5=H$@0KKH@L6>V_j03!21qDX;Z zTv!nM0%N_$IL49gK+i@5DAeF=ffcnVnkb%WQc3-eqEjeNBsxWr$31kbTPgpBwl_Cy63$oL~II~6={8Ua*osz&5Sm8CWwJjl|C>1-N z)w4|~0F6RnAX~0^9^!oQS#vF{WR(Xre3BxC1JEnv&Qwoo+9H%vIP4}8pag|^Wk}yS z&{tmz+t|vMc3N=C7A|QQR*-@fQ|QdRdK;g-s6~}$X$nc&kt=E$Y!kaZ$aj`BGZ@k4 zUkqC!zOs@D*{Shng-nRd)H~Y*D|o>SZcqe9;kJ)ElyTmhPI%1hTZ)C@TKC`1A z4e3a$F5+zq`XR;E45Hzw*&(hlTa%44;Qx8R+9wARoDWd9|hJK!5w)~jDDo)oFrjL`0L`XRg&mZ>og{Rrp!#VfSy-B zn=MW3_OQPV?r^^r)u`TyXM0j^ajSdX>~41(N5Tr6x_jRAuD88|*_&S9d*A%-x4-`l z@PG?^;O$N~!4Hn`ge!dE3~#u@9}e+|OMK!7zcq!lP4SFteB-^uILAK@@{o&sw_%Y5cEuer@{j&sXd+$J7hiMD~(bDRr(=n>~vQhr>Bq#>YPLuWvoGjq-m{`_;%zvK zU(VwkF35s?M|U!~cWxJhFKB}>sDnAkgENSOK6rycxPw4Agf&QnJ!pg!Xgl5a z5^R=#@AMLnWq_i=1fEa@4DfzRsD)eTP=NPzg*RhkfXWV3llX7zIXW5}MXR{DO$$GKh$1h=A5P{2~b! z_#cC4DTzoPbZCM0lx%|-1sTGKl6Z)j*b!A=f++Zhr-+IcM2I*c7>pG!A)yHvasLoa zGD`O1WBE}uy`n(YRS&+<9*)!wq@XItA`u<&Fr&punx-34@nZ)O7ZcGe$tVF#;00I6 zfT@U$*|;uVXcJ}A5ECFkfTb2G<2-HPKXrjUk^oq=u@JT}3SuM)qu^tGR13M19+pNM z$EaFGbdJvRHCX{zuAnORAdt?(0SYh@2f+rHlxd{+hS~^`5$QD8HxsQ;3rny7SwRlT zl^6uE1#4y^K{O;d0~I0`78gM%{=*9XKm`*J3An-~TW}GrA~;&0KT*I+wonR^v=05? zCb&Wsn@}dANrX$&^i5fq^I!v4Kq*0UzS{A2Q=LT3|V1mj94I#x@wi z0f$5mEz>c#)iGMI4wMxIV@V1I#7bPiT=vigC!vn?usF^`FlZGj?9oD|RRxytkWML> zgLx-R=n}nhkr`P$8#5O?JOF8zN`RM>l4-cID&a{eobZ=bKm@#rp6Tft zbf^S>`DN*We86RPHo86gsmL{E_Kw?TzEl5L8TymnLSc(`bq(f>HtC&A2!Bo9f7|6v5#ij{R(IORN z3z{~PCh`>6HcF9TFo{xXQIG|l=`j^E8S_#KY%&V=ph~EznmyB+B{NktQz9opjn+t{ zb!w+PVWc#XAv{z>1W_{ZLQ7jlS${GW{NoCwuvn->PtLVVEQ&1D37vE0W5@UqO=>UO zDK-+Z38%BCdP5s*fL2rBkmq@)rE01&!JbMXGX$|oPNEyPDE~_)(T>MbU^m4M_OM5B z6A~{;GXe@R0CGvQ=s#EX6r(^3OR$<|2u@j*HQ^2uk#5`5N2n(RHqS~?ow6cuA05U5DEXx2x5V9FW2^4^WXtV$%Yl^$F z1eEZwF6)M-D6vahr&6F*Fi|vApj1`R1(i?*|Dgn;TK~0In>ky{SW3VJR{OPK>jhMx zm|$B8Wt&Tt61H7HvW7&qZ|fCP;I?a<6;x2SCPB9ox&%u=jZ4Y2fxEO;&;%th1yis9 zep?BeLj~l?1Wd5FOMo^YQHT$`x zo3jf*37SKSIm-Y>Yqp%g1WPcx4?6*q&;?9Tp7iQ!10ZICOT5&IMxZOUOP~Z)Frk%T z1%11`R!g_gO9j%~1x>&NLQuU`K(`mGnqW(}kDIki(7Rpmuu71)b;|@)fWG8g1yz8z zeM`Q~i?`y-1@zmyOpvwA+XPk!vBe9(rdkOUk^hlaAg>^sWYPPui{-J-YYBILCG@$9epN zc)Z7V?8ka6gmK)*fLw%sJjjO}$aQSUiOk20yvT)2$b#(1k*vs++{lpJfeA4WIbjJ` za0#9a%AYLCp-jr7Y|5pK%BQT#sm#i&?ElK1Oa(&FX|sHZwM@&mY|FWf%e$=0z0AwM z?90In%)>0q#Z1h{Y|P1w%*(9I&CJZt?99GgIM7VZ(Ok{fY|Yt>&D*Ta-OSD3?9Jf} z&f_f3<&48SaRrWW1y*ncPO#4D{Lbpk&hiY;^W4tx?9S?(&+*L9olMXFe9r)F&;H!c z^$gDh&Cc-2YYY8r4Q+W24S5jF&<{<~5na&}ZP6Kx(Hkw%9evRrtpEGJ$=(YtEt4Av3nwq=dCXWa#~Yu0JK z)_AMdX#Lh@9oKFRziUkiZOztb&AfA61#?~2Nk$&KQXISTAA&8shi%v$d)R}G*v6sQ ziQU+Yt=N*i*o_U@lWp0K9od;p*_U0}kFD954ceU@+Mm7Iqs`f=joPby+N~|xu5H?{ zE!(k8+n#OPrG49^t=p;%+quo#v+dig4cxd*+`BE@wO!o5joilF+sS?0!QI@1g0 z+{z8z({0_(9o^YY-Pc{+&#m2<&1;Zd*t9olihUD2JOEc<316_po&3q2EZ?9!-}TMj z_if+#ec$no-~FxM|LxxaF8|*W9Lr;UCt_{jkcQwf;SME1xK`i<58eb4PT>=7;Sm1d z5q{wluHhB#;T?YAAfDkP&fyQL zB8Exeun=-iFyg`VhA&gg{R=z|XFRxaq0e&~vB>5oq7i|*)~4(B$`Y1IMhF-Jx|8ar&i@iLo@$eq5;x9sN*9L9u^-aW6PY}ND>1yygzD!b>#WWa=j=?l zQ|!VX>%ji%Ku#JD6zZE7=dTI#t2 z>aSt#LbvKTQR>mI8s+WdRZitT&e`=|<)K~g^N#P2f$#f{*!%wPf<5p)KJfnDu~d%m z|IXM-An^1~@DOkC;0@+~zULRO=NWJD8ej1pALkgq@geW=bZm>%wZ3V$J{+UAAKlLEQ$HPppRu-%>xmESjSu+2F&x?c_>=E= zW?vKLeuw0O>!`Zy+`bZ9&+IU9>|O8dD=zlB&Tghp6N%pwfsY!uaQ0rG_iaD>-p=*U ze)V9B)Cvv!iEqPGMxC(phb!eGdhfTvExRG8ZnOiXfcUNlSve) zJb03z$|NyYHk1i-rAve{S<(aGl?H)~e)^AR(TYHX$D);T+ zuup~d<@;CUMaYpQPo_K|!NmkgG8@d?`6Oh`nk9$6%$f9Q&!r8b7JZTR<|(XoGq ze*Zf-YuDy?gNMC+JonAxsmq^DKfCYT*}%Idpzt?aR&$$BkTTMXglv9wm z=bDpD0?;y}@G=QPqma7{BkYj8Bsv`6L(?*(ZNU%&98p6SEo?DG)m)4*Md(B<@j3}} z)Nw~1d-U-~Ac2e!G7=~I@W_jfWYHicEnKb15R-gy!xd$W(#j%btTM_8>jSPy?L^EH zMi|3aoU%?lncTCqKh2Eq%PFPA($GG)Y|}U` zOAL}Y>cop}veW##@4yOivsC`$m2iuvhzz4CEq8qyOs>2T(~I7#?45Tgwxr7HD1Q?xY2bY7I-no*y;+Xq1Jj3*Ua3(wF9zg?`!J zp!E{EUY*n8IcKTErkSy%uy%~>cZ(KlY`b)vLON=>&6d9gxgEB@Tsh@i!2i9A?R!l9r_&Jp)lgK?2mwtNctGE8u z%8INpPdHgiwGttkTvgNNVQ~ND3r;^0x)f~S2^uIrk{4(KuKTtSn zZcSnel<_bGz~js)d10bV{V27l=Pg-TBQaUAHf)w*htXLPqSUH{}br#o-$EpUHx zU429+x!D1Zgta>mri_TW^`-DUPiail*!32lu}zF|YnvCx2sbpgg^XuZV;aM_MmV~0 zZELS4>B!Z>WU+8u5+ve)bcn;)eJ+UL z>RS=7S+^I;>RM8?ov%6<#o0u0o5C5KH!X!bZL%sz!s`--g8!4HW(HKC110DQx#=Vi z9Zyl30v??X<-FvLuW<|fT@xW_J_ou9d~v$psM0j1H*K_kB5l({BSTS=;_rLQQxomx zq$S{q#(*td>GS@nQ2$+Mp$RoJm*r`Su(v*qK*(D9@*ji$RmYC&iUOnsA z&Vu%{mmMu-LrYrGrWUm&^B8O6CZugq4xX~5?QCsZTmRhNR=2t3?QVVBTj2gyxWOgv zaE)8sgF0(-4!R+$teDTDMpwGi4PlS|G(POcw0+vm?sd8QUGIi>yW;Kcc+Fd0^n&-i z>P;_s+52Ai#&^B)ZSQ>TTi=oLMtk{I8tRUffanr>Oxq>D`xR=?)Bn*#rQ5Tp0SKK zIkOvAEyw@DagTNEV;=ul$U!D@%#2Lq9Us}oKvr^%ot$JOGdapbZZedYOywyTIm=b{ zYEJWN*X-stzyDdzA_FF!PwZhlgILdb=JTHY+-E@l zSc()N8>lrlZJGqAAM;_TRPL2rZlHD-RVt-I;4s2FR4v^ z>Jnm`K zXI$gU+;_+M?QxKQT;w4SxrjG@a+IfhRsYe>cC%g1a%;yN+cI}H&0juko5OtOJFhv< zZ!T@1w_N8vC$hRbTW6CYy|uxFx4V^2GNwPh=}~uj)v11UJ7YcRR?m9Zx32Z2dp+!r z=@H3Ces;5`9qnsZdx)2-a=6DG-~@NE#Usveyx(2#6wf=~_ilH;2OjW)FRxKYlw!Fj zUh#8hd*j>gc*s9q^7!^Q-E`Heb}nA?n@4rdaqjb>|6J&wC%Wi8AN13Y9`&Fnz3ExM z`qGC!+Ftzex+?i~u|qxgQ{TPReb05=2Y>9t*S+wIPki1RKl#Z2J=l-`{FBXl^3#ue z^{Ib->-)CynIfkYIsbj|Cywp`Cjb23`(A#*pI`mvXMg(JkAC={KYK5wQFg@&H0f+DfXKLb2KpOU@SQ$W~rz1Uko2y8$GR6PnzJqvuj3dFz*d_c45 zrO48mL~5hv>pkFOz7mAK5mdeuG(qQEJ`_Ab7mUFbe8Co+K^eR=0Q^54%t0R9!CBkB z8nUWMK|mrbLc z48scpLLCx96zf7YTtidYKnHxo33S6a)Id7qzznoQIgG$NghM^dLnos>msuKnfk7KA zL_$2o8bm}AOhiUpL`PIXMgN4vMwCR6kvAM1Lrf&YOx#3GjHeY6t8q$0HXKDG9KYhA zLMTkdCtSrTRK-?gMO1`E__M;#a1n^gC{oNtUCa?q?8Q#>MPRHx0h}t`_$r{|uYU!2EatVenj#qm!t zNDgAK7$G6dqezRC$cwz7iNr{b)X0q7NRRADkQ~X6EJ=|x$&gG*k~~S4R7sRvNtbL% zn4HO%tVx-)$(YPZn*VIc5pxfS{7HyBH=%4db0bQ0WxBLNNHTtnczPVGcMQDhvb z0vxaMNgArB%>U!9ZMu`E+D-(_PW5ch#A_RGM49-MvZq<4u8}dYxuktLrK_3G+S4-6 z+)T_2P00*U107HS1&{|AEA%`G*#X7Vv6XLvQt!N-0ko>DLekAMQZ4OLQ=7~=Dl^FZ!2A@%NRp*o zk{MkZvPN=Ds9_hDF`M}$O$@zIv9wbv+7PS-8e4YR8K{mP9>5bg_is(Jnf1f=?qc@0xMI+ zDTm6Sl9H$Z`qa1!Ra(8(6;sk5x-IOODoItMMgUp&O;%*>$U0VWWTey8&xpiB*4coc3TSg5lyAdj^ zYFWSiTfkio;dC^iI#t;W+*2c2#9iFO@k^l+PsWX0$z9xgt=n~tThSt0b3I$l9or1u zT(mVAznWaqRoT)#UDQooPF3C1eOcChUD%CX*_~a*v)p;bT+-@X&i!1^P1n%v-L!R0 z5u{z>Rh0-a&*Dv9-lU0%oi7R3?F>fK)MMayU9Ij{8^+yDKU z%l+Nm^iCU!bH*8MUbJ(Gh=wN&QvP0WRR- zK-o_;QST6yoh_?ltQ8D`U<00D3Klpp&7-X)J;>bFq7&ay3c>yCqxMB#-aX&oE#dV= zVW}J53a;REGO*`5(IG6@8BQuD&Ab-QVI5wv!6nt=WT~8zsRBYEj=Du#%)Af^*mVRlNj_C?^=km?yT>lPfj<#o8?r5IY zY0!ONnJ!tE4r-za@IGs$yBEp6Zwe(`O?rZnbI8`skkKYM%z_ zc>e0M9cik@)jGbsP4Q%U8p5(}>!n`iZy8c%hGe%kw5G0We&l9`L|DA;YlZG&Ir?Hr z`bLbdPpf87oCfQi7Hh`#YR4|iF!Jk7h z+ICOMu8bH?S!g0paK7y1o^IuZ>;9ccl-eFd4k;ieDe4B*@Bh}))&^D^IxAyNYp!b4 z@Lq4$1#C^~GHbPp4USf7RU}lFmv7YQ#O~_-ZtVUpZp9Ye$Y$^BTy96jJn`(l64he@ zZ}5e_lDH1-QIn`st#AZ#@SnnP_Z)Ag>SMiqVK0GP4IlBq&Dt>4EUmUo0OxPv{%;p= zaTu?}ks$HH)Ms9$aU4J9!F}Eb%kiMPYaiD-(s4+-K~Cc;#P9wX7T`ka*P4$ zBL7JspK>d|ax7<`EZ=f2@ABwMaf`mA75DELZ}KvSax$0klJIh6ta3Jg^T_p{!wX;t z*D0lj^B>3aha7S}?{nGZZEgf};C6BrU-C0AbTc<}HUBpwKUd34E}{f#bV>i)&z>l{ zmY++X^aj)PUF2}Ka&t}(^)9?^ID+M}+3mI^^fXU&R!8$OA9Lgu^#e5U+I+i89cQ-g zXIbBMhqP|u^k0~=<{|EGUWb-qS3?dDvDwsQ!aR0oS3~#aBKT&d%9?hYaV4brB~^d* zZSVF&U-fsC@@M}(THoV6cIflwdANJlTmKSl@m=LOJsN05BX0lpo^N=F_j$-( z8<|%*8^^7pPx=BE=-N^GQgiya<8!E=`hFC*G*0!J&fSO)dZ2%JuLt)ipLnWg>aj2T z_LOt8Hz80@d$w=;*gbN%$NH`Zd%FL5hp&5g6L+`&&AspY-o!${cTVR#A%`A(QD1w% zPaLVoBIXc9Z}11W6z8k>j`mZIO1tO!yYKw3Pv2OVd=>+7+9FjG+aKq) z9GEA4*I$(#pGmo{cizm{>O}A))^o&veO2-Fd7`3@uWa5Qe!|gw`GnTNZVdhOq#48c z#w>MG5_;*Md(g-Gu-1FxkFIk6PAIk@JpY?bbH^fn&wlc!q8Ocb0s3FTyV!U?&O_OK zl!pKE2akt4;BB{fRy*l^*)iWfm>Q>j*?Vx>CO=+>lKuYS$S73|oVP7R_>t9C8hwr=0TjVpI9-MV(~ z;?1jfFW@!^7(BL@yGdNk?M zrca|zt$H=<)~;W}jxBq(Knb3c*#B-@Sc2q%ybBM+z4$l6$HI3jCjNT>@yW*vHov_* zxboz^X=Bf>eLHu--M@nmFMd4v@|>@yZG0ZH<=&s)t9K5ZaD0OG<+pcien0>I{{I6Q zpnwAs7@JuqDMZsk5`h#EOCzb2V1p*9^ifF|T}a_f6FP`shZO>)U|C_2IHHMOorsi* zRf&b7iz{{oBUvx9SR#!v)|g_BH_j+yi#{$GVp9bYS)`FiBFPqeoh8PkeemH|Swv9Q zmzi;wJ!#oN?4h z2bL=2ORA>2s;jNSimI$O0;wa8xAwSWtvvpytFO5B3M{R^<|?eM#l}iisLL|jEN%K# ziPmP$Qd_OH*J7KkwYkw}r?=?&C#bgLf+{Y#=c1dgq?KN(uDkET8?U_c;&q@%7RKbE zh#$_HAglfI8|141@4N4=2NN4CvI;Xitg*a0yl}(~A4@UB6;Etq!9&v9vBzPW`?1I) zlU%aNC5L>n$|9${vdb^S9J9wBdm>zPRIlD>%30HBSm(yOU#{x#pV(dYtFq zp3S-F;)OoC>F_3sR_dp--n#3ruQ@77I=3{t)wlo6H|@LQu6yBw1CMy)!7ENY)sG90 zeDTTq4ZHK?R^Ha?Q)(F{XzUipCH0p--@W(W8#*?geUh))o#ww8=bp=f4r%)BgFkuc z@zZbU^jVq<<(2JOZ~3Fz*Drtq9AJRzh7wif?Li)iP>1d%lZ}W(LK!+01obtv-!U(P z%iG}bjE6xEe*dt88WbT2bH_0PqEJlHYZAD$l&RHC3xD*PPYhFN!yDqTJ7>yYx6lJW zJb?>{2BFiPkdwo-&F_dx1kn93wVp_APg;qJp_OX5#4BPki+C}W?SMu>2|92hU(`tg zTe3h4qH%;FTw~%$=tedUPmOJaqw?N3N5E+@kNjETT3`sp{msXGi&~eI0IA1AA~KP_ zk&av7#Hi0nMot8=(<9%Ghpu+$VCp_ zjbHg{)x8ur#yFM`mv+=89X)tQUjDLCCv)X?$+Fd$O7Z5T5g8~+GZ)g9Hq)D=gegsH`ZaQf@tm@nWkY*PQI7s}qe9K4Mu`g4 zVHy>22D52CD<{)s;?I*zohntyB|b-zk3G{tOZuuxIj{axs`v9JSj%cwXR%V9WqeQ< zX>!1Uy>+NTO)6dIYFDJ*6`pd%tI<4qR%0d;lqt(pR0AnW!u~a}itW-4)3jCeB`2$p zod4$fg1A^`z4WqI6zekCHN#L^PP3vNt$E0~voYT7R1iX=PI;%-y7Kk4d7Wr%X)D{> zzH_OhRb*gQ2UYD=Nin4~>~4!|+}T`}Pr5l@4+TZUtzz}K&C0BF3CLN??oW{J5w0Pt z>)r3NCapMIYwaEg#`21>two*fdU1Qy+rrnj@@=n+{0iP9_I5pj;jR<6mp!T8H^2hs zOJmm(-R43^PSc_0fH_6o26ykegXQmMr!`XuV>rW!k=+GR>q^Q1mtJivWg}v$~eb5E=_VlH`yK2>%l-C-BUw3pIxqGi|>-oJJ@=*|k%KC7t8!+CJ;~)13x2r`;=2VaqMQkDM@Z33Fr5e4EkW7Pn@; zofdINkK6=iHMZMLvK}{5)<863bCs*UA3H}mzEQArB74&H`Q^Z2&b7Nw#{cVWgBFV3 zJgh1CS7G&pmM=ywIK@pSUIbpqt$540h+(pElyqDs`Fh}_MgH+9S19D=TxzwWO>Jpg z`{goM_6aNAHEqk#Ai#A}6`%T9O!3!`Ok#DB3u*JCpRB<9eJp}!O~WD<@!t7vxV|Zy zy#zm<>1pw?x5|fPf+O8y2bZE@smNU`p1M)pz0J^7Ev+jt+}B~BJGqF>J7be~wPnov z$uT5yjgPog6Ee2oSFUoBhdSodUcBNP?{bZuh3;9yd4I`XoGAT#?Lgm*g##({hL^7B zkCHs;(FO12YJJ{V=Mz>BTy@raj(XgB{p`;!?;$EU_uWo1*h~MevH$Cw!oww`r6Lt^ z&vqWwaxuE^o1d+VyNbLOEPO4^$Yg=(bmSa2y!9#FZ0ct`@sD>rw97C4z>V7ZE2Ht* z#wvVYK9SNeKF-gGytY8bW;0wB748q_H z%3uxB;0@Yf4&vYr>R=D@;1Bv>5CY*43Skiv;Sm~P5+dOeDq#~c;S)Mx6hh$-rr^og z#uZ8d7HT1LWFZ%Bp#*dx7=B?GlHnMdp%B>fs;qAt3r;AQIvr8e$(Jq97(>Aui$_R-wqOpg~093kt*}TH-)lVkKhY zCTe0QQsO6OA}DgAD0*Tjn&K#)Vkx5HDym{DlHx0-A}q3^EV^PW+TtwUVlCq0F6v@0 z(&8`XA~5ozF#6&p+QuY4BFZG=GUijEF{27SV>C+RG{#PP9iH91nR$iaOK2kqdZP$_ zAUJO01coC9exo^x<2jP!I9}j7Qsca^-w7Jn#8uP#z2iMvVZZSogW=wuNL=dSEwc|xnVE;yz<2tG%MsB1>QshT!WJr=^ zNA6BTo(tuD(z)3qO1fmWv7TcEk-*KHy~!SfxgNjaV*tKnnE+p5ZP%qN-27EaPa5T? zB!F#Po)R#}05D}p429jD7f)#)$Z=oFapP4Y+pd_TNP6YbbR}4(<5;3&%b6dE9i_F1 z!zhS@D2Rh5WI_}mLHqrd!s*Xlu3f~XAf;RoiiB+tbMyH#g;7D;Umrf0V2C@3aNre5nw zo$5{9S}>huW~RICr+WU!XNKl>g62AigIxL+b|Dt_^p6R0o?`R_dL9X52E|`UsB2Ux zc3h}`<`F#%#9*$1I5Z;n5HKZ=>L`)6=oB>NimsqS>}Zx& zVv`=JgB%14_UMfLcnNFaOsNr=>M7yfRVN-n!ccxim8uIX>j-oP7KBt@aZOO zfflr=luiMT_UIN&!WQ_bQ|9QGMk$L{B95|PiwZ=eu4xnmDkesvrp+Ar)tQD8%5@gR zIw0mKu)}DAre}htX&z{58pIZm0vWt2C;Y}FkijNE#ufzT7Qia34ge{%=oq{zDGWeh zDuEV^!UQM*MMQxnkO7O5!n5w`COG3WX%2utI9LTIoR4 zYHmn@x1K9g7DTm1t3pUYxWa0SCP=q#f>GeAZ7i#|MxwJuYi>xw7$Bp&iYs4e0V&vm zJ@|q>BrF$90V~u)!rDSBOu;5dEdRrjf^BF)#BKp&N9Dk5E{IH-aq;AW}TCT(iMZcauI=|(}+Dx?lTt*#)h z;^<%~fF_Vazjo^+Zo(Kusjp5!6ih8d;A#s-!5C};m+l2ZkiwZtfz(3kDDdegl0u@o zs+Bq|Ci*G6lET<>A-xiWrTXckg6q^iYO^W?w9c%qDuDz@?V0MRK-8*YNu~Zf-#<*aD1B!6>l8B5^@0kO5PYf-6|5Bt&d0Bp<))&hkaIa!c9@ZuuhPur6-*>S|yX zFZX_LZJ>p*Zh-sBuM`-?9&^?Y8U|u)_gMK|8d9Jxl;5wu3FS!wZY-0w@71uy8AI0aI#%E!-=R z_VCKKEX~U91~;!B&BHjXf;g0Fdj@C{XMs6+U(Ups=Vs}fY~9@jBq3`W|z zaUBnU*y?GHa)Lm-teSZ&eP4?JB_nkU}lc?%N)6E9j^~jKcAjg6rb3D+IH* zajIF0;1OHrXRhV+3TPx;Z(AtAxfaA0jDiG6LalnQv=;9+PwM!7af=!&vI;~5tZyYQ z@L$9$I#=SkUag;YVF`1=p|*3?elr+0Yb8oTi)ydfN@%&pvU04rV5JThYoz5X9>k zP{sKQ>)cMNB#Z*po-I2At|Ygh7YjuHqVbaIh1n)A5=`{~aKR|lDjAe3w36#s`)Lrc z^Npr)x_+xsOmz@2X1aDPRcrw#tl-awNCItLpGC!|E;9?k*p8D@Z}<`mQF_0v90eZNISb zCbRNt3jgySb$EQHD3I!Q2Iwk8LSJCB_hxMO?k~3hE4l*fu0|sIva9^EFS8moUcm3( z%Cq?vMBU!(x#sUTO98EVGLw$N1~>*94>TC_wRTHE9CK^4DzNxuF9o-(_ii%$G3&2ND}jQ$s?6dr4Ug;%&u{`5uY$Ae%^Eneu5e2eF#&IP zaHkN562v@=!V&{5QxoPmWI;)Ov9S8fL+fz>)axD(s~10XnzA6*PJwL*Go&T}8gnU< z5)00{F+vRX3X*}O`U_%9HDl{B9rH1c{xM6WYq_#3SkoyU6Skr%1S0opxju9sD?ku% z^8WyAbtcnkymBV4PPW-1^g^sM`mtaspK>bGIV+O^3$}u6D}W^2wgiwuD-<)1!uIU8 zLoO$}nx8B%vo$;5?k%*#Kjdx@YymPSFPOvJ_=)9CkhqwD>Oh!kG#mG5jzV(3udhvO;ktOkb$fqyhRgtre1a|-WhJCK0_pzy>Z zD-MS&O)CK#v;!?eEKw(PNjvQ;lY#0zJz+zzhJkHV`SZqDPX8xQu!m#eV~Y?byZpN^?JbN1^RYc1rjj&?2? z&~X$PIu}SnI~;Hnu!1YJK>$oZqT{kI*McXfZ9TZc4j;N*vtXf50T;MKWh*d_mrKEq z$#sr8^n&K8Zs%n81+Km;CNgWd;x{-uW&dWgTPH9wA}+S~MVZelL3DGh_Ora=`a`>Q z_%b&cSoS2C^{vAycnd`4i$1o;tM-2HLt8d78vb5Cs^&{;w`%*d?}Zew0{`e!FgwVw zD*!XC1~w}b_O}nKM8m3WxaxR=J|nk+BpmGNhW=*9Fbi`6$@6^xg=mP5=x*-jS6<#E z_Qd9HB18=GK;Y~}NT^x-M0s zW672^dlqe4wQJe7b^8`>T)A`U*0p;#?mE4D`RZMjDM6CJg9R7n8P>32ykY+dH(vZ0 za%9PqDOa|98FOaMn>ly({26p;w)4EwTQ_f=Y1F3IiOP}$wuHj61Jf2uJBjVDNYifo zT6?x&u)f(|EK9uWLxIM{Zd5+JY>=+Z*G3GB96EN()XiQ+%X*)CVw7%diCqs zx4*k(oWOMh{GQ&6dX+dSi5n|s%%8i+`ZLeH0u4M6!2}gtkiiBWeDJeT2B2pE(onn5 zzSgvGX#kLz6A88?sM<uZ&DR?#FTvHSyzFvdC*uB*X1+>=0%^!yD^GzA@$&_WG86wyQ#WebUdQnPO!aYTuv zrRnI*Ezp84!W6hXInAvg+(Zo&xY{hmR3Hf!T{S^5SzU|3S7n`*)>_Ys;3Y|<*i{nQ zBFGf6Kc^dzQ~-H0Rxx7zL^f7ioqZPCXr-N&+Rl<_6p4#|{WUA5T6{625@BblI(PPb0tdkx6=a%$Hv$^~KlUex-~OOsfq3H_U+%9stUH19k}D zEhR2Esv0Xk7|V(8O?cmGJ^mQv0}peItT{a$a5-V?yi?gZS0*nu8PcSHXr~Y`2+<600aOmZU8X=q63lw z00{p82?!iWu%N+%2oow?$grWqhY%x5oY+tS#fug%YTU@NW5kReLy8oJq5$&6_xL>fFh*r_Y~2g9;r=w5ZXeNRujE%CxD|r%fOt?uiw9b14FcEu`FQ% zg%K+zcsOxm0)`h4d>r|3WyNI$D#5JSa%aJyLyO)hfq)bOrBA0uZJM>})~jQ~p8dME z>)Wzz=f+K&_2{+<2m~K4yg2dWQc52;&U|?SDW{z`pDw-n^a#JRYv0bgbZP9~S%d%Y zPGEd^^Ww>WS6`kz`t{-AlYh^BZE%6Xl@H8c+~ED<`r*ggf35Wgpn?4Tm*9Q_G8kZe z5Ju?NX#$;Q;XoHs*xH2^Ziu0W9dhWQh8cb+Vu>LZsG@{m5hvh_2v(?}f(*iVA9OXw zXk(85fkY#WECwlLT%`$Aq;E(bspLRQ8p-67PDYs|lv7ICBzZ%E<=AJJC8pt)o>8VE zn4F3E7-MB}ndO>nnzdSoyT#d?oVv|vXPtQR_8Nh0R%P9v$x$aLa{B!_D1d<)%4eU9 zHaZn{khT};q>@%j>7|xtis`1Bc1r1yj#{;#fDiIV(5MH}SY#BW##m~D_(}h5bF6yWwjyp!%AGFT?XkY|UV5fl=kg{6s zLf9D;Zc*b3RBl7(q7*4m=`Pz*y9&XZ)|K>9x#W0O+N*EA{8l-oyzVj;rkaO+N$|lI z89ea9ifO@W6b=&r@nmTx9Pq^$>y#&*dUnk5$9H;cXU0q|Cm^7O9_k#9iV7-$tXhbm z#kSj~Y_fq;%JiVQ3xS%Dya2byGfX~9RP;i89<5Z+VqK}yx&z6(Xi%J1?djE4XN~pN zN|S7qs;=V9BdnH`%u?LpJcZ|8jAna_lI6Lg?CiN z_G&ni$R1vJu*oV8tgwL})vUEYQcL;Rrp<`?x2CbJK@>Dj9?{esF`Xkp*lD3j*MH}n z*?L2_G%mKNmvr>GP}4dv#9O>Qb9;^@p@8_)JGI3qt+b9IDO-%O8EQ#Lk%R=9@w9hHT5LkbCeQaT^2Wac z82|_PzXF!#ef|?l=#r2C20CzMHdC2#lJh_YO7J*Is96TJV6zG~5Ft^J#1=HMg-u9c zGfDW}L!>~$L=_|gDU2Zu2Lds2*rF9vc;As=IEs4Mq8$@>9}NG8n3-|COf~b1A^lY7 z5TCKIgj-O;2_F)Lm%Z#iN!Wxf?BR+jOp%5pG~xS3xCJRF0D-cLn$Ucw#@Pu(hHH#h zc~ZC&pY866>Qe~Bk|V?ys*z`Mi=)^eL&VtCjwV{uT53cXsM1&@kz0c#rUsWlo}kTv z^!wm}PPI9(Ni36@xtxvW2QfN2ERgs~q9zX#1yZ!*hqhqf{79k+d$eL!2$7#IGsCL< z)#H{}dZQFJVGn!QVhR%wX8dMZ5Gjy>6s=h%{X}FokC4J1^|0lvDA}6)k%E0lx~4x| z!G+sMtQJ1xL^8F|4u7H-V>+A}y0|6S1fKAanmD4NWtC5Rs-v?$@)0P$&vg zV3icKfDldm5|9h!vBZJ&1ymh>&*WCkY{J#Vg(63IhKGk#>G;ts33>%3oqu36PSN4>w^t zxoP5u-l3xrl?b{dMq#i%eC0b&6HisrF+r@&EnVd(uI=)XXQdfKZ*Ad2dw{iG_%h8a zN%6&gHnMrlL!Q2%N>iJJNqqRdjKV6$Ukc$@Akynn5(Zo={*I5pV*Y{?Qy>6U`C0}gfCP{i;i`l$eBq9;SegJGNR@Nx z(Th%mg|Zz;D+s`ej*!A1DwVA*kW7#$RJi{k8rniVY9YmYHj~QJi~=j{Q43PEf)uuJ zMU#E@&x33ka46XXFqEQ}|p0l)CFEz zm_iAq%}09@@#95Qt=RN4Y#1i{)I9$a>t;JUM{=v2ll)|D{P4}cfpoFExl1i}mU?R` zOo9}@WNc`2&a)vOw;gJ=Af#d#ZT=}C3#0JGEf-3PTC`&Wz!lrnN-h~x`Dc@3^BEcH z(PaK4Y@vf~#RdWewMea}cazdYE7%c5CtX#Nk<654KTVUlSrv{c^ZKcygwev|>i|Li5q%4p(*R$2?w#$koFpoJ}%9&oafmFb}~ODT-P z9_%d(mZ>Tbdl0}M1UTjd^jr^t{G-OQ+yXmj{0{>B{ue=>pWN;7`{LVT3sZYj-_Xs&cgO#jTTu_<*SN-#20D#x;f~)wUjjw8hd;P5fh0_!osiwk zCMw%}SByC|`^S97)CyccN_)mv+xBSx5M=RmXOdSx15s(I$9WOBc?)%Y@*{x^wKfp- zc>P-j{oD|Mu1!KTePGwzMzz$m^5N*Im%SKgOgnQVA zY&&L5z;`4`APM%+4sGBL0q0l1B?YWN0A!#5S_MO$7;plCdjbJ%HZ%~vKmZIk1xrDoKw@?Zapar$i53xi5Rc8;g zXnRVg1YNa7HYO0iKmbkUSX*>!&#`c%Fa?~TSngPl1OSf#cnh_63sdVWmoM6jwmmR_0Y_5#Wg~X^Z7`Stqnarhz{0sE$FD0LN8g z&@^2i1TpMz3y?)aX}3fhMs`wQZ0#Tr*hZ5BnOBb{5LTy-^dkoJU<);ekHiI7ZZ&}N zRvyduZrx@Y+NX-Y;0~G99?xY9tZ1Ma3r$84a%M}dplCNnKfiS@J)(V5C32bI;a{BWqdhEWf+BhEL2Rj;FSJA2FbK!wiE?p zFnqSq21*u=|1eRwNI~KRX*ACDmTNG6q3ixMQ#C$cl z1!pFI#?%hQmrMqc8db((1+iy0^iAvsPXaLp>PY|>8GF(RXcvj2?Lbk<^iBHaXKO}3 zO9gw6hNL*E1QQ?$zx15b#tEQuVYWDyTQC8yXH51+pKnx~^FxE@>7(#80g*5Y`{xcG zc2E2Fqx*J|UPPgDCPl9|W+CWGXhxH(vS+3to$NpWT;PoC0DEFqP7=U-wSbH5U`*4a z3B>fbmK18NHfoSaiLLe=p!BO`<*TBGLBtwYAU8zMMRspGLu*=2 z!&F&d<$7-g9iy;gB<39pWkc*$92Q4jc)F&yr3th^58t?pQm_i*Xb)usbk8P5&=Ido zbqhTCGR{VT6a+&h1s!??X>nDm%NUBgIBP`o9P>(joDguKsBe|!SNn&Kq|j4W>uL>HD>Jsa_av^ zM=fTN6R@p>DQ^k|9b*@Y%4$}(w12;qIq^ycuvi{|wo+bILbbpS6R-p-drL?3H(T|U zZ2)nkh>`^RwM4XMWfwoM1aT50muIA`JQpb21Y1W(0M}}jrm>!`Kng{8S5Ytygn2?F zdP4=rt;tlXw8&0DhEzr=5N=sm3FC>I5FCVSZ?fWv_O>=gd9~2;GCb!+Y{wddS(p`d zm`k;_)|!(>0v%eUb_x(FVD?p;>m+#hx<`nsI$W8MtrcD}xWHO9I+tTp)kI z6tG_-6~HPzI(KKh}w(b=#n3D8l`~ zd`hN{5Cu3gsAalT5VAGDaN7#tn;I9_ozpvc#N?je<~|nTP2V)Vk~&coilbvlXA9s^ z6BWXIvrMj33s+he&$S74mzox0XDWDR6Iw#HRDeBLoGV75-}}GJIb4U@ZAUV*&{t&% z1*6=?3OD3oH~7HgGX@hS1rtz9mnuF?NTZoR3lChVzvN>qR1eCF7<&I^4|FWYxAcZw zxn{}qCZ;i}A#!G_dY_`#A=b-M-PEdH1c)WlhccBofhfB+L5Rb8YQw>Lh4^Z#{6UQf zRIB{Ti8xBf3VCX!lTAf#5+KJe39n1l1xqkYKNPrWcb8H)Slucyt%zJH#Hj6nRuRCc z^}qqTC|7c~ll5m-^#E-XYh&xz3g5VFw@9xXKvvk&vNe`%0^yQ!A$yEU`-znqL^1md_h4hc@DGJ` zm|{>5HWo$0CT#V5T}Ox=BpFMOWX&5eS(4d%clb+T2~ecyZC?K-1>AgQ7dmDxv3F3(oxW-9ocf$HEe|kd3)9dEDLC88kX==lqgMUX|6$ zR4fHXnOTnbTmjdxUsY#rxv5cItvwWq9_fjra6+B9&*}x2FzZ_zcerzlPUUGrFIo@q zbVgFrxrT|9T(ATmn3LlIldOPsuB&hf>2{fUneyejsQeQPqne0eeXD7jtw~^tk;SlC z7@*nN2nHFZ*%_Z%+O3UW0nALeiGpILq0bAZ6q=~)vz`?7WQ$Cr5jbbS*{Vyh0AySb ze>!{b%SGv1OvkhYgC&31R(>iLKYd!=(z)FBz|iek1_1vxO{u4X{L7_1WPV!No}tJE z?eu*Cihu*bV}m?Di4eg`Fu~IZq0Cpoxy@usumr3EXzd`A{HX~k{FgU$;L006l~>)i zX=n|;5Um=iN>;`Mz{L7?K1kep#MBC7Y#~hioGfXXte~MsoIb)w3rav@`Zi`aw1yax zM1JOBG=yiy+oIBRO(%LoWk5moDO+hOKdzKMUfP`9NPQ5x?hDn(UPs`a3-!sUy}(MYt`Ls}U{$l7L02}jctLrxL}+!`GB+zw^**1-9r1tDh; z`Ef{jYtjjeI~_~U%nB0l&r+*Hrb~W8`$ozN9ZdO2`3kn_HfuA>38q)5YXw7MjcxCK z&vXY|N(5V8C0+uNOcqfZ!be^^enQwG>U;kyQG(r*b^WRO#swzC%PCvA1mKoIwzzQl z9B-}hR?M;-|<8kO6xtO)LjaTRI zpDBoa=Tv?Z#Xp}<1_IjT<>v|n`p&n%?vp)#(dtytzEx{9b5Kn+O_}VCLn;DpzhpB68Hv=I|1h4!F&Hko@94!j>VB5R}MY- zbc@rS7kBtOyK*UGxNbT+K}iHjwd#?XvV{}@w@QYaCj(xRLx&MKN>Xo&)X|F3+ts(L z9V*;QVhjRgl7PSnc&f)2du(aP7J}>mC#}o^L+e}qX?oSz^(@?Q?R$~;F5wI zTilvtiwIqmVw8H?*kb>SO|Z13vYI3zqaLGPw9i6B6~&TD2}sc|0ZG`CKnnucnP7=A zNZ}&AO-PYc3hjUsL#OtBGxX0b2+R(xS6`h|DK3;yAc;A1-AGXVmaOluR&w0LK=G2$ z1VV>ubrHpq2*{BDS2#&9icx%FMS=vl)K9z!IBh3YMHzBPi$S-T!a`fPXtzsJhGW&1 zO~Z5Qiwtc8Jn;CEB0skpLJ6XJx>%y68QYM;KFr$uGt~qu ziojy@6dhTvT3gvb34&;X*`kg<1)dUhN1Yf-KX(eNL|>1y+KAOCSH ziG!!Sweu-OD$_~JftP6lh}wA^_nM^8{ohhR-yQGXpf-4cF zY^htRQn;uqECSY!Ni3JWRZ2Sua6XM}#T9B(Q&FNqigu6!CxF=kJ6N%V2{`3#NSYUY zuA-HGn6LkBw`kLPez}by)s3RQbRPs6+(891xGAC9Fiy(^{ z(XZNO9)fU4SWzICh9LAS^2qB!?tsu+q96&))F(5f8jo-6QV&_Kl8g~*he8M!NmEPV6_QJ1aQnINK&T45#*XvNRC0FxvW`6h#>8$4?)PNlkR1-B<`e3 z6#V2EXx^$K5`g8Ou<4?Ga_UQfX=PJdAuDVubZwjPl-l;GkOb{-rbk+jD_hAWwRvSu z3d^Zj6wS3@hHfjHnjb z7ZQ$eBk|>kVrsI;k{|__r18vL(%4^;oTMgNkg!I)D`AVQ_qwd`hgS=kU+B^WN$cs0 zWom|yjkvaEBL;6!WGt5!Z?}*Ou33RC9MZ)svcfmM3L4R8WB9qR$5$aCknR6l5F5kS z#YTop6o{-|CEu4$+uf-x#sZqMp{B{*RWHp>(_hk**}H?J?`Y7>WplE*#TRMImdjk4 zIji|I5T0$G^}J_3uZEJ#0d!&$i<#;~=aQV9V|5fAXxkS0lGiDj2BMIh7y)NayK*X~ zw=*YiaYO;*i9%zjgy~D0wbG>a?ob3mk-w@&fVO#cZDNQTB-L6aB&{{BaeeDttEAVC z;q|V6?Q2~VyVt?C^{|nhP^2ugd9Ue{kQ({qN8W5UylHNSVuS72P@CF;R?WBLVjptl z$XY@Et+nBzZl<1w-CAuk$>M$5n6=hs^R~B`&FQT};Yr^!oAozrG5ijB`&g1(8N7kyPkN4n9Ko^+-!-RVt-`qPV^D2sUK zF|uKWmJiNnn4x^@ubqn4U0XufzS-=CJbNP3uE@0u=8bJfd)(FD=C9Y??sxZdCG~E} zy;F?u?Chj(#JUl_7k=-1zooUg9RV%SM764gw`n8K+|%O7JjCARdLhr+cEelVFQb@! zxDCm7>x`16{`27rpJ}}>C-r|<{o!3NXxPKvB9OxAYtVSp(c}MJl2di1?{VhhYARIG zAnkqfPowo&)V*gBF&tCJodGpZ{c^}`&(}`ZxtPzVd59(K@m zKZG#EF)+j(q&Hk5!eLy%6P%6D=reY-jcE+V&;YgwoyOo?ImaMzOv*Ge#8^}}RiwP$GfJNU$gJebuCz%_1j|emOH3roN;FHaL`z3H z#f%gy@mtHnBeb_1#kZ0)Se!Jv^u}LYKFTA?Jp(u-{71UTMcL|0pE1VTD9oIRnPFUw zC`g&XjHJVKjg)MS#MC|D!biunLN3fn+knQ;q_=1U&Fqu6XB5rV>ddrM&DL1IZA`${ z96v$pG1z>?Y}}{#dkMee2_gi-e>{n;#L55I0?yW0mEqjQdPGhNoUYAujRTBFf-_D6 z5F&~p$N{{+9cxbL%o!fJz|^2N;1o!$M970wGZ9?K^CV9~qc&wP zOFa!Zl~kQH%dku&Gd%685m#Z()3A^-ST7}9)`FlG z_;8P)C=VEQ*N;kBeJsY)1WhRzlmxN2(zMyrB9~TJg+sBd(Zo_(HConezv4o_*GyVo z3@#koEf}#)*c6!fliCcOE>>v;Hz9zmV$-Ra#x1aiTEMc^crs0R9Wt1V^O2o%desU0KSi-->fwT1OkQMlNI zr{IEixQ8uBq1TX%Mj4366_^N_0#|T{i7<>&=!N|lS@%lR=JW`AU?~Ed8nKseato{QFm+2+se-C5S&-iM4gHoOmMutU2r~+i+XY5p>>~kOC*UIvi_W^dyK# z*uPc~g?cE34)k7!JlgO@!bW?v=XgQ3+$8&Ky%;n!`mD&o8KuU=)XhLvmyF5VFg3wb zEy_#+NsyM)TD%RF&O;#u3*i8{(Y6GQG6G=G&!X8^F%6|4gC-FmNCirn0ls!(Kz2)( zp#7UBR7tbCnap6RjukKdAXju#$A&=Ib`TFP?M=a(JV9}VO>hN!xRu_*$C-NJ)L6Ws zsNIk4DSrDKWrg6>FxVup30C14DYP`EDq9X#VFmnHEcrR>#NtRXSz3HAOoI!CsUvOm zyoeDw0?Q<)+LQn2;HM%MV4Ce%)8syP^%(r1PSk=3c4(QH<>5JtxQJWZ{))3p!DMHlGvOhu~yw@)?=L8%2L z@ZGIMSg2@)TNs>u9MnQ(UO_CJ(DffQ;$<;TKnmVUBTY~g{*VhTKxy!piIyEg zMY#xE_TSodn4<_5`iPhuX$b$)7No5ZYqyTk#gcG{jH0O z$XB-DkDbQp^wNZx1||G(n383VlG%cm22t_Tg89Je!5Jn+fe6X0+x!x#~9buVPm?4Rnt#+BMUbRtn7$ABXQn0@Lk=b=SZ0E8N|GRCX zt_c6h2s-eph_$W@@d%cCmIUjO>Bd75t-vCEQ55>(4b8r6orT_%COWEMSgUS`)Xr+H zkn7OX&o&XK_)ux@ItqL9ZYkiGQDB2j&;oK`2%-(rhkj_<)DzjfiCwu0O_O0nUD{I{ zn?gG^+)A$Y&0F^R&8lmn2zl1GLYF_uR0XSvC}?g0T8Y7#+$Cc0C&~zzfTjV8Ik=d) z1AHH)DKJ(cAPXxY;N4rrRW%X`iP{O1Wx=2m@n=r4h!;vC27(Ya}pgP3-S?r7uiNC0hDzRo`)=b!TqHG)}{L8(z{A%nF+qW*oH51}FnF_)^^ zqkK^)TtUA82k;FOU4 z(?Lmh2x*xpNQ9qSiS_u``xpaEy{1iwDnVQod!cTQNcZ^QaZadcy++`J5Ro$2Ih+!z z{Ov9N?hxO|j8#ixop0Zn;Ww2kV4)S5hF^=BS_}IK>~hx+1{?Z?=n{$_;Qot<+AWA* zXW)wx+LE!9SzeoJaW7Q@`T?I4Ed~|~y?1@QcUJ0-QLq$OaVnfelQQ503vmVYW|LLX z38W(#??U=I^1sW{k5h@K1+hF?!5}=r5yNMNmU$Wc=&T85mzo#~WNMLm*sM7AQG9du zhmPbal^Uf1o2qddp_w?QA$^H+n$qW*qCpzhr^EWv!`AS+tUzalIn@845HLVLAd48( z{Wyul%?TWaKOqVszDVOD2$q)P?h$h;PhygLol?y=uh*nc35GZJnfD}!v zY>`nS;UK~!QlyY-*D8qwi3G;9BcNo0M2tyD)vF~1;g*RQ3yPG|awUP68C}jKu!Wty zfgvBpoS7u1ONc@dit5*j%t=kQ1R~s2uT@GZqim7dQZR}ZgIj9ZlJf9oJuWG?kfQpK zqP?m%S^3&RkU$hx1bmSqP?l82o3-3(w8}H0PoF?V_6%uolrR5IAOo{x4Dn^blTxsb zvR7)cL`n9JN|~UkmMg1~KSLF&Y4g}kwk{LULMrVRtYx>HMToOi8!4?^adC(+%BWf< zAD)e(*X=|C4_({hLQo62u(hWnR9>C>N$l2@4DIgyJNWS8$CEE_{yh5h>dPk}(Eh#q z`0(d@P13&LeEa$n>~~-PV1E3)w_ktw>4%>|^TkJ;b=~n7K@t(b^;uX-!1tFFn~*^Y z8SO09UKE?u(#{r2Kv^=RCxIonTDiPMAelNMz9G1b@~{h zE%lH=+mk;D8L5y<0?87SS`t8onLH{PVUONPDixknw5LTou1Gd!nf#&Y#ugxIvf+j- zJ{01JE*3;mnNfV!PMZk;N2aWBA!bu+n`{xGZg_6uVxWI1DI|YYj=HLZxH>eXK|@N~ z>bDZ2_-t-IYEhC`t<^Y%0(NdutD(gCiBzDp+CpWvy%l8cuv&8IB^UKdh-oVXt*dM+ z?6k>X1n`zRBq$|Za!e?eOd*XYD2Sox2s6Po% zNfYIBAfZ*Uiv$AD(VX}lpsgeVQ(=~!4x%hy*rNe|j*4cWoDHpzgmjvbkWw_55oRbwI|)g0vq(>!jSM=%l0xcni`&`5Ae=B`Em+Z} zjKK*hnBrvlxRjh$w4*myG@S@hw4(nO8OmJ-(ZV{Y;*rQqg-q7EOVARalsXYIV^Y}? z)&!D~LGFx@&cqqc3}QcH8RRd|LIh^m53I3~0QPW2U0}qeHwLF2 zC&5&mAQ>lOp|X<;JB(c%yo(wwESkaD0o$w?lBb7czDK^RF$q3CRBqaZ*Vgyb|S z@JojG+NDj}ksF9ep%(VoBsp(KB_%*@6BNOkRcv`S5iZU;4^xdO?X)-;p>bWysgX(V zLbYo0bf-Rjp0}R2#Gw+ks75VnpaS)iq!K`>O>L_2n5xtyTq&tUqAFAYC)Jox6{}Yw zl2yOjRsIAjjqTYgLc_C@>Tv%gYD0M)*9t<0R@m=+J1n8s=#`h%O<@617!g$Xq?Z4z z6@Y^YjA0})8{(|BFbhm*W8lO!#XJxg$x8KDQ8nF zx=OWeCZzC30cH3???hrD4dIC-w#0_|=-n@gyhy1 zwnFG~Ap@A@9%L$_s^O{zurWGtDqILv$of)V2s5ZVaj&mFy1@Txu@~IDx zsmMi7UC|{y?&6TWsAM1acs$>d0EK$f!>4Lt9A<$_i$Nr!3i0S6Nth)_gc&0jNr4<@ z=@+Tg6)IMdYg9#Q2MLmdt~HA+UEkW5EodV&ab>BJCSr3GA~}VL5GM+2icv}=;HNUk zDasRhbi&S-QZdzCn{&B+_X%)5%yrf#yu6(uyk4S)(1jTK$}GemM_`bib1c0R!QXIL0$RRGT4V9 zo?+2w&fGIJuXN2YF6fCreQZE|XcvDx?t@5y%Y_9Zxh?IGC$Fu!=D&Lg)8p0^~U1ek*8BoYOGr%e($Pwvy_SKiq7u&sqI4I>5HISph297bV#N7Ki|fk@RfQzIlj6&=pi{OpLSwDY(Mew35e+L5(!m57Lz$Wb>*0A(bTP5fD^*#blvL_=f@ zN3j1$8+b??Nd~C30~-VnnVF5I_y;T%gu>MiDYQaNMSvuXK^J-mZmds+WQqk+-~)l% zL2QC+0ajhq0|9UXHlf@=8PXPA5dp}^xc~?r290+-3!}+aS4fC!0G5_eP6T9&2C|^v zA;fnr1uJ1qnH0nlb_6@nm9mLRN8rXLE+8k)7Je>EO;l2%j93af#d?5*Z$b zNX2Z4mhg$EQB+)c-N0bfNmXDQScMYwVk6cdIAs(a0gD?tL=bL9RmhZ0kb;pk9QQ1W zT|C7YUJT%Y%?19HH9-?M_LNHjpg4{rId+FrZPijel~WCdScTP9RTWlwN=URLRDJ(d zJ$98w`#kCxe(;1g?8H!@%nc^6ReCf?$@fSbEnpjB0_^b}6)Wqzljxwnj{b^wPyoGU) z0zzsa({v&5!3yf!kK^5>XdEILE`_bgQ2tQGhA30vD1_?V9vpRqmc*n+d}KEQQ2(IG z;awi{ePnnfgr*pq2Feak){d4)pC-^19kIgTDaKW3BwckOrBuf#lm!78;pyoP4ejMo zoXgoYrA3fJ*ioKi6<%b7q^C$lVk95aaHUBW4*)$1{S_p4n2liqUTL7^h^+rcEFnZw zYT{W?#ASNOV7(+s9?#$$)9a0ci99T}4` z*+~eQfhb@U5t4u;$j%H%kU>a$7#Do}L=+%Fmb{F3JXtk`34`ziww0K^btlyrTB|6U zxNu_>C|dEf2f2M4^R)|C83~fa1gxFgxTM*)?3B0s2wb4&ao!OSLYBL%C!~$1zYrQw zISfV|=cXAb5L%OWdS`b^A9@C#a>Ni^&`b=K44bvu9g$0`s7^hgihIUqemclg{ik)H zr$Kbfgf5eEcqfFa5rDGjckIY|uBR3<(hEZ9dZwtk+2^;Nnz`8Lh{FG;HVH{g+y{hu zMUeVS$?&LlQq6=Wly{C>mKf+nEFmel=aX*QjOH7Af((#;r){ie#J!rtQ5;JMC!EIV zjcF&x`HaWy6vug7o?eBWK48nyX%vjXCTOVSSOvC`f+QdcD~!TJ*%Hh}=45W?hIWS! zDa}qXjfU=2rb-v5CeT4lU3jq2%RxkzJVaWl5l{_9ZNOYY?cb;l1#glE(GdGuaN-< zukzH~bjPN8>ZW3A@x+8x)WxvGMJtp6-!#ojxJ0tbg#Im$RKWkn{s~d$Wo7dTkVKS% zoc61~GLfI|>3t+e771(^MO(lQ;17+%DnNl!X~HUKLP2Q4I;?^?jDk3I{UeTsPhbbF|HP+LA(f z*8Yg>{VUq0t;sM|IWc`O#=s)v3(?sznp^L$6jq6|ttZhjG1Wyt>}%M{-di9}XN;uyk)NlNDM z6`s5zSE|ttDR@|JvhL>Y7gzF(g*kf0`w_SS(D2R)v8P{v^LmEQRB@%ZK+6Zk=oLj+!o8oXUb^r zgPa;1fsH-H(Y3s9yPWTbLY$5m$0%G*x=Gymh6=lk%H?{m0n2Hf3Ly3>Y@gDpttK!8 zCrI9o!`>poCai-fAVCsj0xM`jsfN}#WW{*Y1haZCs2;Fdb=`QBaBwo0<>gqn8gT!} z9P$Zk3nN$GpkMM-UEv6qcBk@*fwqMoE#v2taWs(8%MJL&FxdQZ6(94Ki;j| zG7Tknawg~PC}atD_$}Z@fZ%FE;wk|MkFg}TvMVnUB)_sOf9|s$*I+E>GBsUR(r#n! zpNt6+b};5yD5gL@gj~!rGTWH&{%-I7t}`#^Ge9IIx~34MZ69pCa_6DzroY3~*4eawNhiU@#Jxat9~w^pS!nBrZXB>PMpo3j^m! z$Fr*bYe|2v+PZ5IAyDA~j_|=mSi;S97*DNkXb?>vz9P>{hqO-{krPib6j$*RKVTFW z^`2&k7)L=Qh(g73F~wSJCS-zBGjDhls5rB;%4jvvf(KU%?NG4c(0=t#oAZ6N;y5m; z%X$Z`f%SU0b9#`q1di?1-XJuU?IJ0%jJA~awr4;`Qy>SFXp}W!uk9skGA6q%VsrA_ zTJk!^2j3EaI?Td2u!1O9Y$;~~J7oXtIIu&-4x17WYhg34K##U*fArg2YRtiFYA^EU zp04cbrZ3m@@U8YRYbDQEvm$4%uv=u*^0+)Eqbc+UGv<7cz0&p-Yt2kPJ2VIRpeZ%*%*6VpF z=8bD>N~cF#pGOyl&q*6`oNE7Qj~~QB=$X%o$C1BWq^@viACbMTH+gh!u&&Gk^=h&v zIHlsaY{Rtvm0uCxAMwfdvjTIN_i%0JG;w#hne@A$3fhHsXIY7q0+MoGjpCm^bsfYby zg(fK4zd@EDwMv=k63#Z#{Y1qibWDKD;F3?oyfOHL44WjRL{@lOerpM{d^dQ6=R|Pd zru%gvmq(TGXrR0b_c_v|ql`_-po$FI6imW@hlkSgx}<-)6!4wWz#yjcx6oo+tylU< z1p9jTwIQFo_P!u~r@L`HTA_UZBfQf!Pjw5Izxio~cqCZ}-*HuiQo6q|HC(gPD|8@wZ{F%xX#EMi%&jYx8?FfaC!9vJU%&_TIBub9{ z$X^87QgDGguwFL7=iq}!Ted^TAh@kT$h_3TLlJ5nT%dFJMmx8tHvs{h}g@H!OkQDylwGs2c~l7$)vY9u(4 zWJ!}JQKnS6l4VPmFJZ=%Ig=*M1OznRBzRLok_1V1;w;INfX<>xdj3pGFo~2XIfWV} zDmCgzszIX=02);PWXhhcT9Ii=K+4IUTFXX>(yHASQnpG>5W0n3ttlG2mTZc2Z`ZOd z_x?R8c%&4zq?GiOGIpeV;)hkIT%r8Bd$69g&nhPNmwlf~;5ZSi&tOjH*@2 zHAyX7w!D`7IdJlqUAwv^lejO?D7D&_y2lAGfvn3-jHGFYhvIrIYC zizSWJA|*H}wva*#B~a36HuEn0@4|=*>ySeZGd#_yiCWRFmE!yovBL{f)X==hV2n}5 z8ELH1#+q*by6UK(u98Bqt9%NQN1uxFaVs5>v`WdKa$K?~+swi#vrT>?3BAGCvBfQW z%8)_>(pHsMt(Gfi%~Ib5xVm9HX8#rugzx0#a>L&me~-3Z*@d z9Vv=UYGDOWQ3q<(mML24wYQZtacYH+@TA<@V3#kHfZkd*0wRv6ZSoe=0y8ZL6l*!7EgXrIS~k&(Cv}5*h&jYhO>(cA4!UW6{R`< zKZ~TZjUH(tPNt~dHq#noWefr^n__~oeD^VN#=>q}+sq!T%}2yd&z)_pU3))$=4T7L zEDNI%2~IF$O|syVc!a?sLFIx?ViE?8 zG^7lQP)I}~;gGa)!XO0-O>y!_VO*srH=(H~ArT0gzEnexgozy+P(l<&K>*_1PzrCc zhb`>EtW?njiMFVRtQ4RGDP)Nht~g>6rGOWCUC|b8VHeUSwE%(HhX73^K$mLhyn3K9 z3ELt-JG2r7Vm2V0QXC9Gx19t7zBRTj~t z1xCJ+AQVu-K$zIbCweJQkD}HK3(`VSswoOdXaxZ{aLE=jMUSg=)GMD>$SstjiKMtm z6e2ONT1uc#+iIdaYGDsEG)oD}YGNz!R3|!y#gMMx0)x0kkV9@lhfxSqBkhQ%2o#8m zM+DfYKsCx6w$g=K8P0liNX}6PDV>qb(z5n;L}XH^h=#NUD}0E%C}`m=)XZWp=U7W^ zf{%`Eu_xh-8J64}F(Xps))iYp%}cK3h@_Al5|t>F`e5rJ9o+~>#6v-mj+CS&T?tj7 z;;5jQ1f@?(>66gHyii%ilS@I16xm56SkAOMu>nn4z#^6n;UqzxDU9&{(1L_56i9rV zu!o}9LjY3vqZLU*;wc};3aVQ5L=>W^FG^90x45EjY$F9LHX$0gsE+__VTBSZhqbh7 zl?)q@jV6LKGzny-9)jEJaQ>xMPK?h&3F;{W{iCc`j+TqrWN6F3srq( z3tO}Sl9D{6RU5g41tftkhb%)GPqenvZK$Y5n+>H%XVi!o);gctivsFtk5b%Xtede9 zTWTSi+>nAnVG53D2;h%W6lM%tbcGTYKoU*BiXxM$MP&&B+32Ls9j<_+6!3c7wh};U zO9SpE$gqVeuxEd*&6`h)N*4X_hc7?1EsNUIlf5prx?qV8T%}6?$D|EcB;2ZpKkRXf z1S@SM^Qy&jazh`oNJ6c{rHF5Vm>UgWmkaE|>ojvSE(=Y!kdv|pgFl2J6@f^_Lk&@i zO&Vhv&$weAgz1imv{L4+^u`?o;bKIH!4d}fCqN$Zk%?T>91A2%RJs&R9R(_)=8G?g zss%f^0NMRO5>ZZEo)oy%jtz{6B2$o%cJL|1ER|x+S|A5SlF2GbNB}|*+moG=Ig(*X zK@y`_;}rD7swPKKlCHRm5;o-ufBIR8FAS#+rN`r&yh#d@A{d3W(yYqPnLYN zH%<8nvSVrrWGhSRF5*cFZyvQoYC!c^W^*?z)f7s6OI4mr3of1{`7b&{O-lij8+A!h2Bk?M0#bmsKR3-u z2|Uyl;NjF34CRz^xk72|qw{dc?W1!hMv4dViU7i%M(@~8qb{OHHT5i zZl*GpsSIT^OBv38u9XC}>}DienaoNi1u4?ZWi%st%!HjY+mb|RM=KiKrU#npKrOhg zXop{$0>lSlO*{Nq%h!olpp2}=9q3HLChAd(ERx0l;pp}AVnIva2b4&#A}sf1%GFx3x3X3UsVWK6auadLEjX{@ZLI|x*sE2XEdG$}*;Fkk zm&?XWfHIbmT4&bgIiR^#bP+q<-%!H6(`aE8{lMz%4J(zc@>Qe)v~2=K7ypY5nxM{4zudc9dM1}#KuFZ-Qle$P0S ztd`rv7?dytO`JGl&eIHJv|zd(=`pOwAFwAPjPEq)Lb>E(6TpKr*g?6%qq!`r73=~e z;Oa0DAj1aHjdP%s7mRZxR2=uA3j?tCl;LC8@?2+4-*+)5~g zgapSdrJeGPESgM)kmcP3Wu2_47U;o|+yIh>1&Anu3&7)5)<{CA2>2eVIHpKTcqsuS z!HMw1nskYas6?aeMB1juP*!0I!)aTtY|Q*@T^g?09MAzd#g>3#odiiG7-S-BDJAmo zB#1)%e54)PU<-I}T*PG*K&9I{EZ~Uih2R6=s*r6A>@h?|-pUD1R;f)&>5WoJkp6H` z#_5GXLJB}G+(4*Y$Y2g1MhgwB!+PQkiD@LXE6CRTd=O0t zfLquBPijaLhjEX@sZBr*G86(2iE$MFL24kN%}ZcPB7$QMjg7dpWg@n~49TKg${-3` zF&r<+xH`-vvSMD=gCrs#%(8509K;QprD3|rhxiB~s*xl7(W6{$1qE^-X>2N#M5SD6 zD5`=hdJHz6VufxkRFup|c52FqMk1@Dr=}*TtfOcS>-!8V{OG~=2*R#B!+Gq%7jmP- z$Y25_A(*O*Q|M^za-+kB<@zST6ypxPP;K(ssvX`6`aDAv`k}5|D>v9CYI?%W5Uh*3 z=#cCt{@m*&M8hWu!!#U=Vj!y&Bp?!WYx5W{LO4<}w2D8ZAeh`PVxa58VzP6B*z{AQzpTR`5a{LR)mZ~Br90VMX2*RvyvdO zGdnrP#-w5gb?ir!gge7CgmzGcRLIE86W&OuA`2o2pUiVIEhm)B%IJX%a^o1;!wF-> z?kG?R0`5e3auu0P;C?7k)~gliLyDqf6DZA20tOzDLL13#SRCb?P>q*ZWjLfN%g7*z zaL|Qd3Db-v3M>sChl2e7kfkKxML`Qu3;e~*TqTOoty~(Bijv|~{Id=>qq$a5zn*NS z;Pc5GW!F>+*8tHXfkhHlp*|VTPjs>kIH5x+kl|jDJ(OiaNkY4#=uPCPi>{-~o+xrg zVM>cp7}-NjqKsR-rIX&|-XKyU2}NDLC`j4!D3WnBmt~B|0@_G{LmiMX_2oF#Pofe zNHynxj%HwH=XeI`gl*4m%jtwpW?Cjz*9P|pqUy}#b5sTExNZvwvsWs|&*aW@a6<4} zA$D-572LrlNh|LE*o8!jg8(8SI()0a+`&0zk0=2zBk`&f*g`rK12Ko@FW9T^tPW#N z;w^kqIVvwD!sL{^vK2Of^B%(jK~FK-!5>@$CCPRBP;UYjPd0HXH6ah{WbZv;qxRe< z_Hr*SiKq9TsU#%AA5hFOiL+WI0xp=3Ae?Vb8HbK&lXx!frx>R&&*EsdLb#yI>e_E* z??zWg(-yGjJ=^1f9t>t!LGx93bQmru+@r_ftJcZTmuA2 z;lHA5fw0yDvo>!ygao%%RKYfEV?+jX#Dr#$1<{r&a)dllhzEzPNYJy_($iAZDI(l+ zT0)7O{A8W~2!MwUrw(gK65KID9D|yA7CyMZ%+N~ zQ0reyZF#of&Duemw4)uCrx+oX7+ZG~GZA-8sU1FXmDFjEnD?&E>Cn1D3yKXw9FU%x za}LSz9(^QG+oEKzZFEYuHkV}+-shVLV2&cnM>Ydhzyxto&TxZedNmOgnPTK-W`FUJ zmBa~`n)A?1rw$`T3pN2#MIsvzKqdu|qT?^Jg5boJ!9?P$BCr*p zRIkGBjdW{#PExH%VY&VV{C=2bS)wZ4MK6r%I%yG*>J==1@9wJV!XRU*4ymeOQnX0x zE!s-BgsQgeax3cCV(YRzW~+!1wx~>zIMFzL1+R;zM;8?8x zf@^nRMHfke@g}7d3dC^V7gluZw0erdERzgg4=4oJ7J>^bT0=49MZnySj`Naw;BP#z za>Z2S#ZqE+S~#D1Z3Pikbt+kg$s^JerF*A#{;KULq&l z?hvL8>2cTthLwyZ1_E|34G>ZEB;I6G*nlhuQ9^tfYZ&>BWThbXX_7>v9Uz#Wkm!xb z%||hkop3nQnBpgK1tPVAp|?jOTk(phSse_;+QLjAnr@m@r_pUk@dmkz%pqQcn` zZM56En>H(?2&WEj}M|6*NKPo$k7slWPEfWhNP9WVtQK_)KS>BgS^$X(;!poO+(5c zXV^*5n}%!MLr}`AVg1U3%0t#W#9abE9E*>WwG{+YR<9#P661lV;YD~f%Pg#FuLVpfiWYh{Glg|pk?RWDV%+0A3a<-EKrCc|e!B05mpf&ILv zJz;2L-VCQ=7Frdw& zJKI)AHhi1@#U}DyUt%O&L}Lp?YDN9O5H z#Zd4>& zc5AVc$MGhCgvWslf3^y%@y8+~A78~t@b4+#=E!zOikyRvJO*WI^EbcqJIHJ=h+QRs z@u<9lY-F!C>QN})mk8(0r?K*YupsumVU3MxvTBcykEsTU-y&LG4|PEOtS zi@$nPnB^+J`Dc!X5%SP+Jt5uYFQ%W?Kjiv}ud zKFIe8GH|}{S45caOa8GAzv{TQ4jz+*St>(hr~rb1z<~q{8a#+Fp~8g>8#;UlF`~qY z6dxuaa8Y1Ji~~1jlp>|0NR1;o5&&7!W6FUcNxC%u33H>v2o-DE94O(Y&Ye6L%Ipa= zsL-KAiyEy+^Qgd_OED&qkR-v=s7VM=g(?;6Q>R)9YW+&pYSyb{$C}-`lx$O`O53`9 z3zw(@s|4oSrF(a7)s}Vf_SO5h@7{rc^ZLEJH;TZ*fvXy>8aJ}!$&@QwzKl6@=A0qf zLX|QVG}F+eKbKC@S>S2WC%3W|je0fY&apoe;CvgV=H0w|C%g!pWANd^rQ{@zTzK*0 z%9A5U>AbmewhDjx_FV8Hb>Bj_b2pk4r|!%&y%P;@nYsD4+IiA^PvCu$2=nX1r;p$M z{M%&l$B(aHegf8K)qn>6C!c@tt@mAn4o=qpo=VJ-v|WTEO~?^bie(s6ZW0RAl7$p@ z$e==eUB}XcDl&9pWG!N5-ir;%coSbVR(7L`xP{bGY%TIA9zi{xINM17|$pCAFbM=q0qKKy6ytkcbh5w5-t0iqlo%Sqf*Wsz!v^Ur8vCgkyd2^;lqx&DCP7wcbT*W40dF5E+|nv1)^+Q8XoY zQIN6)u|!Q}WwHy6F)UF~6|1B}&PJ5~8g1Q12`+Bp8aeK_<%Uacy5<^b6=+G0i*3B} zA`~5PQ8j0rbjfLSZvxQi3ovk89#n5b60~E>CJa?b@S%Y6`Cn6u!h~wXhzg46elw|M zk;Q}N7T!;U5}HsH8JRqh7WK5@?8uFllu&>Mp^RsF|CJajLE%ZDSiWyEH!)3k8YBff z2}_{F!v~SfsY^0DYB5FFwTEe_RA-kPsRu=&1u0zQtKQOqCb-{yW1nqy+Gww>cH0P+ z9VpK8&YkLq+J!YH-_5&il> zm!ow%L!GlE`tAkwJh~FEU;9wvWGI2FL9QK70Og^_p1Y7-gHCi&qc`4Angnc8ODkMF zWaE-WLcS!s@wX4ZlquF9zmxLYzvKLL{~s?b#e^za8kkC?fm+3Ak^@_lzyv;U zXa$h~D-tFVDIkm#t*}QKLXtGqNM&&Jp`gyVMhb!0!X9Lh!o<#^xkzQMEZt*M6hI;Y z;}{20Vmn_g>ajvsNTGy~p@|lZmcq<&g@-IcVh2AsF@{J*3j}Dx6rkr78WMnO^{53Y zSW%A;9*$#f(!>v^7b(8~)n|lp;*V64B83$Oaed3%ge~g91$Wqj6G)@aOh}P11%xnU zYJ`dro#;X8DM2Pv@gt<9Fp7G(LSX}`7@(xE31M0COi}=2D@Jk04RFhj?byN~E2+d! ziE5RqY-P?~sWn)xGKK)GC3kKmm{+|@F!IACtYQVLU=ko{y^@u#e8st6?(&$eVn{1W zDUm3&!WCp7g*{3!h1;#hAxWU3Em}be4pK6U?g9#I&dCrhJku5kOC0F7u!(TmqZM2D z-9RG2ig_v|G!T)dJGMZITVRu0vnvG`n5dd_LP`_!Bm*maK?>j5h9FyDhd<~zMupN6 zMEt~LIKN2->udr4h?8&yHI-1#@;!5UQB;j-CMtzm*nIP77g{9*<6^q(6z3pLUpR=s_Ij%+P-m_(3V`?O?3G69Oe*ba1rcR zz6v&0jDSRe2n-m9WC$XoZK6+hI!MtHRt9%iaV|*-P<;&9LyVXak5}{=LF_Y;pQ*+` za6`x#5LSxFwxS-b*u>QyCj~7aObT!0p#&r$I+0Zpu@JlKCZ6cRL(!?5E87Aab*3M{ zs?3XEB!dFH^E81(0iGeb2zvYqJ;gE-uv^SwMeX2PL}}uVTR@m)33M@=U8IvoTO?rs zbfCLV0ktjv9Y}7qFf7ALBnhO<$<(aYvIH6DRCqOrR zQwj^oAO)=_(MZFjlSG2D)x;x0Uc5XUYx6T&s3-iw7rqloB7KWvFabzB1y?Apqp(X7 zD-=gPC4J5{Qot}kZ^4PCZn1*)9Egh%>QsS{0;uVg2vdkkilf#dUmzhvv)XK=QMhwE z@O+*B{q#q_{pHVpn7*H;@dxTpiyC|aE_GZ4nBcZfa3pLcpi{~!!B@LF)eAI9tB0fD z5zgm=&&5hd6bvE`5`YVe<4***rimO%K@yakz#=~^iIx~g3HLE0D|}6mC`f`O#2sC< zQKJcB^)a&`(t;+Yu*2yxn@5JM3TP$4GjqSLxvrQ3tfBx)b~u|RvU6Qa(9;efYUS7w z7+tt;Lv8zTjn4(gVZxW4L;6TS*Z^&zuB`$V3yEQ6S43#WqeKozSCb2;T=o{itwY^r z*4xfrUPw;9g;5ZIp6N0-x`&w+a&H0N0y*UoZ4pw!odlc&5GN7&^>IT2aub3aoOi+h zG7t`iq#Yz@;I`u|wDAeV+*$xFXN&kf>AzU^{y7tXWuDf^C2FZ&GF1oo?bPRQl zsBSfD3uc87AqD?o)mdURs)sO^glDBJU0HauC?)_I+A&Xn+5`8S;92l9na|~~6_d3<7*P2lP3Iop9_|ph8C_vYs6?_BQ@H6C z$YBp4g0n?arg=fki2U>^0V>b~XhE9F!B*^0c02Ceoas+4tj9!6hCL3ERRq!hUe=d) z+ahV~WDlf}WV!=L2vZOKuzbWaWu(vst-wwg^c28{FaiN*Cn94Zbu26)faF9P?UH>Y z#~HbU9j%8N^LG+})KpTS7)g*qDWrTr)DC3e8bt?G6ZlQrLVeaJQ$fWUr&S9bxCQ1% zXr@zV?xzsTf_%khBCy8=5l8@%fP8zz7E*;(RCQHlD28T8hG*z_YiJp0)i2U93hV$* z&W36tVK1WNFxOt z1Vr-$RL!?Vk}z3qkV4L7UXn0q?BogrfO{NpTbsZNGZ%2Bz)qh5NOPNX0l=w8$CtAbg$(M)f90 zL&XX*H-WZuM92jzV?lq0=qA8bAEwnuGSeq)QIPi0NqFQu?68h0Gz!Kw3ZvL-0x^58 zPzuMFcQ=JecLYwX&`v0Zj$b56Oou-8Fa=65Xdk3O0>>f%Ref!siEObEU{nTi7HsT9 za{Wb={#BGmX_Pm^hD$kMfKy(afI`NoYP}TAU!_P zIWI<*Ljq-}5e50QVH&oDRe>;DfNo>JfgJ}>>%>8v;4JIa3R8e?q~H!gH4tXBdoE?wsO5wgERFRu=j+Ja+daVJZwe)1Q=)y;hB-STT@^=MVEKkWL`4% zHSkmmwR4&cb!Oj3atiQ0CK3s?V0=)e}a8j^>WePDGpR-eWwh7Bu2B-&w zI7m6u1cU?uiF+hEk7Wy2w3hS4Bc7yNlcj&?mN=y_I;=qdep6skqM1Hi2x;IoO$noC z1(BZ0sXHiVW|zik8H%ABx@jC5YMBP2o5qwQ${uDCK`WsEkYo>Sz*%-^qIno=cnE8I z2$c$iaatr0yk-_|1cP|fS!WRimdJU6Mq6-DEUdAV}Hsk}OWEGjmOLIX?s96f4#7yxDuf~LVqqljZcNqJcuiZ&J z1d%wp*I}+lJTG;r^E7|8u`Kpb3#4;o5V#dvkT{nEBDO$H##xC#R5=4NJuoH^vomb0 z7n)pPoSaBmN}#3Jgi%ZJePnQ%_C21X-~|V z1Yo*<0?Sdhfv{m%P#a*Y6tM*t1XRs3Fm8hXXk54nv_nU;gN3MhW~fnT|1^J<$blT# z4ntZHnLuV2@jK{rf;q){+2@F?2N9vse$~W?ag=%*vQn1{R7$V_0zs#mxno*NS+@bU z7-g|V8%c>~G>OAdHdQV6$^U9Z|r0dsQE?VolR4M-df5kVuOy)m*-?yhVr+V`dLV7?)+LLAKDM zQ`!-BL;%nj0Waxnx;q<4REgE)zkLP&yaMu#^bn33QxVM3HP*^PoJyaYs=dz2EOoY` z_I45hXK&pk5QTN7%rZ{mF_6UaS5?tSMMNON3m{rSUCsBW(1kgcLm#lBK_^)cD7giC zH3hqCTCX*x&Xxp)N-QIlpGbqG?T`~LWR*PHU_%=_Oq{uRB8#I9c03ZPXa8Hz_lZzuPi(?SB!xW;>54AHDAf}>< zv&h3jg9I?4O!h;S)k5W@S@xj+XEC+210e~i$;AZmSgoK0uL&AxMv_nx68SfUJf@pY zyPIEGfWQf9EHX1oMNQy>$fOXV1VERS`3v>%zDb6ff6IxkKynrJzDxl~29XIhi)CO* zWZu%7VY!MdCCGLaBx#vAt?*``#0e}UwQMn#K;oH%Yq+lbo1oekp2@hBwLZK^w8SC_ zl*NdxPz&u7{h^)~qMZiP8r{)pOwu<|hkfW^Iz^Ew zoh7r2yQt=BD6NN&(iJC`qX{F9T`3m7))jsRO62QX(29H0ibLr(ACe#}2>=8eaaR!N zcB3&6jETVp(Y?N?YmYVmNy;{DfP$%tL{X!PG+j|=_0U46BT4o~Z5h01LNktf`lo%m zsXtmo@J9xE^>t6TV6U1Mu^PQr1ici&S2%G)NK{|{VZIT{mTqXP%4z?RwbkwVH^)8@HEv1*Kz#VnNdz)X!WqtG|QY74ATtegl<$;ug^ zB$z)(NyN(v$O=>|%976%lYCN%kVTsZA;hX0cxYs<RxLmlxSHu?FmnYXjg1MI0cXG8*3yxT4?QjoXLsT4Cc2$Uy4=8R4QRXe;z9=4s zqL)P@At)?4 z!B@i#QmaV+z8bMyNDKg-rEUJXfm!`w+zL|DCUK{=dI1@zt;N?;lRXod zj%|*Z9>qagoM`Vpfz>1|(~2trr|m{lSoO&YD5;$+11tPCf#KA=B^;~J#aP#Z8rbW? zJIZ&9MOs@lSZ*LXA$W~l`bF(jbWgl2Be_U11x?gv+8y*wOmSKzZ<*6|K`b-{;k%0- zQfS#TgoY#YKgUNLf=QE3#ywxgJ`eOZU29OE zbh~N)Ir;2=0vpI^iDg=lPwi9&S)*IGCuojnBvqT=Qc*gb7*s*UEK^bH9aypexK11h z%~|h5?PLpbSz&t5VT@a_-1%}=3sPc#I>yL>dG_hm$4(Rl8B|nZeF;5^Va>Q)o*fmp zWLcgBc!D)C2J^^HRH*c7`%Pibi-g}!n4Ez;ww9@<08-gbm6eMJH5x~@LArd-9@b%> z!!Ai6p2K9kUxrh7j|5&1QKA!6+Ic#t&xp>Fe{m)SNxD^M^>t_0;Cjj5UDN6!TCKJ3bPlL94e`R)zvGN@$1E%PoF%9X(D!7($^ zhPgNKO{_u@17E%Rs_#*awD8}i-#)#9h&|=QPm;tZeERc8YU)R7`O5t8lkY151JsYe1NAddKm-{iua#D|U@ttD z-1E&sz8)fKFWcJFFfR--ltPnwA{6Z>vDh22o>C+XkuManhStNz*7w>Q?I!QUWBbMM$SQjUXidtPmA1Q7!0c zV~b5aG-xG-W(`)nl}M>;3zN2BtexeuH(!4D#mZbZ0~UB-fS#1_-6xx7u9Y=xAkZGo^il38w!W2@04iIrA{1UJdq zio3bHnT<|!)q&_UFfTqe!AtE*M58M zEp!k+`|49LJ^~_ne1q{99B}*w*Do->_uE%rJRq6v{(cW##{VbsUqpIGCB+D5EjbMS zeiWo38Bl>}B2xp$^guC15KIu9pajXZKn!M3dw_D2oCGzJcC;aK9Q+^&O;|!W4Noy+ z)8KltS0q^p3_9wPR_bi%A(M0{M3|x#Hh&!a;(swZY+Lt6%0 zk|{Oj@j`&pTOa%8M?U^hkbxwm-TtOWL?$v_n;R6xX4DFM;0be*qvRDW$;e9HicpG# z-I+oY$AN*;JoQ@O3l(@RPUew%*JI@>T{%5iS`Uw@q-8DLm!SAns%hUIuM%EtY9^zS64OOL0 zQR)$6GwhC}iijzRZF4VQlxO#xcuywg6QBF!Ts{5&xji#h@r=Gs-|m(HJW3krdX-@RkT{@gq0)bIN7SFg@{v}ru-s&pqNyYbgEh-k;G-b z#+R7@fqU#c2yQTR)U+m6vFG7uWA*u1$4+aplSPj~*GWdqUM#a=EFC7tXxWn$Y-wF- zTG#NGRSuCMN4;rIMTJLM*v7WCg9K@9KYH8$k@~HqfHdUXWc%BdDlV?Wjj2mzdb!~m zSGlhnRTM_S4hRLQ6`PmyeTO>Ki^jL7Em=_b>T@6aP&KLoo~l*<8{h)7Pr<8^!YKR!AyPES7Mv*8 z%hvND3Q1uMTL2&f-$)8lv_}hD7=w~ft6vnKw5(*cCX3D5Vrp(R#a#UpafwUGnD%Kk zn#;(bdJHGl800uHw9~F;#EN>j0)Vq(vb-{a$|Iu9o%H$$lWFBna%qAL-Qo+638015 zdO35I!t9UFshO%EOCVbq1+p$XV>t8wG_sJT^PH8K-#AZHW1u;aLl6S2pCByIu1nbI zRCBt|4*If&j^~MNb|eR*FOaM~Y zgB0%~VxFzNOpWSR+q}i?ZfV=?ZPWJJXw7k45h7f4+t@8OPItT6otF-_yCLjOVW|@0 z+`35MAyF7dNgxSrGSs6WWtf6M%ECJW*aLED5d%Gf)RV~D)G{1N$R=$OtlYw^D9e358N#FYxHS1W{dUfz>^@$odeD{gS*!^pE zpBxy#|Lw`y0i5=>uYEplAA8x~UY`IHNoX}2ML)CD(TCl<&4kN%6 zMq!UuK$`%zXv2|2(F=D(%^lFTMbbt@icut-3@A#%7}z0gGW4u#pJs}rm2RGmq(J+Yu%(w_h zj^8s0NkA5#Xt2)9w9u2ZD9{8p*d701EfBJZ2{4HfBd;`T2Up;X-7pqk>$O(6iNBBn zNU}L_5xgYh1d|ZJks!J$kOE0y1tEcwu+RjHBZUn(2|SBGE*u;?t1~eC!ffe6pemz2 zQ?$5{iZdLIKWiP^nTkS#H?L5`jY-2mbF|SqKEHbiEpQxH_?Uw5!7Y%0OkjoSs}p;u zh17tx$NM`H;e-kQkOZj#JdZgM(r|?~7zvlzI2|c9O9YZXtPUJe2_&oqPT({GfTZ68 zzUT;wCeaxOGc76Lz1|=o#S_1hus;6~4M~7J+EEq;d>H4FHsIijD1e%?c$h6DLuM2h zZp*D_^tO7~^$7L^N~ktjkX0GE~%x-Y8>l8C~`89>2PIA5xjZArNkyGEG|D*Ng> zuDi+lTE?0Glp^Nnue3uu_^G=F@vpi2$+xpR1VhU2F*~+fJD{u&3@eGgGrx9#yj}v1 zXln)6DXhV31qINMP1qs{5QTn#L@8jtB;X}7APAz6!VvqA;Hxz3^N%Ar%ieK?#;}Ka zsDI zxysy0(A1vygE7)%ztMa#84FECsxklT#yPpM`_n&i+(x)^xBjCyD-)KGNXItdy-j$+ z?MecE!#GbtK}kyhd=sHDcpN3jNDtgVyAn=;%(zS;!4iYEv;ecSAOlWloGl}bP%{*m zON+1n0gO#B7FW0nA_21<6d7YFgOHrafgr+~3(4H8Pxz1mlO(qFx;Rp(F5vh%-kC0} zQB4D76EO@!1)VdUJWvhVGdi@GJFG)LGc-38$Iil>J7mKM{S2E4!2ZxRqR^0^X$Mw_ z5h*}|$5TW;v=c|{2Zxb@CXs+dP)j^yg<4<(JPeG$BLH4Xn^vd=JlP5TS+(SF1rsSO zhN*==v@R_`Oule1PN1EtIS9pLyn}EsEbYbL<0~9>HV&(fcBzPVAcaG0PzO!Z@yNDl z47X`?(`uwfaEnPb)hd|cMnAc+aEwjZ%s)TnQ#1n&d|SAMurdTZ3zLuvNvydk__{Z2%QH)~OvQSg5#fV8P8d?bl70 zF+vdPC4oResZF_pYZXnvBOvNo$E~RajobvqCp3NBHp(nQQ>Zurv_#|3KAS^@f;U3T z+->CCi5Xpb5|!Ino2`7AC{P;$`i!B;2-iu`m3xl77z)`yjDmm?O*1b|dlZ-d6~l~eHleN#X3t?rGY z;yRqSij(Dfsg-Kq<3bgjz_L{7i~1!Zc!G+5#M%f+ySp!Gux@USU+Z zSr^XP7nY#ZWZ}<|s}EXVal+w1xgs6g;ny;gzcP>DpSjHi9tuL+(ynvkr)8Z+sY zS^U1<<4jk$i0DXN8fM_hm0T{qvn(#6gfhcL)7;NGs4(6v;}YYnA&J7A z{*q2IsoB~i6*-wGR6ePR5aXrOFIH1F4PQ8&Q$lW2L=I#ON?-T?jo(IwUr64Z^myVf zLz6fB3hWXXYfUdso+sQGqViJY?v+*umf#3RDp6J-1G``iCNNiCWey%NSXNg+7R^+? zWv_~1o!ww4kYvaX2M})M_%Vheq_&LE=A5R0!HUFC1ra)W%`02OZzfXOkKs_8NRyXjM*X`EhPp7vpx{^@4a zXs?qVq0WuyDC&PXYNB3h=s;?u#vY(%lYs8$Sl(cO_GhZ5<*453F6?E6Mrd8;YBZ5( zvW950?qRV`>pU}R$!hDNX6v_3YPW`Kx|Zv>o@=`vL$xlFk0$AC?(1#->yh4T!iKY$ zHe{AYY?v0Lb1v-mQ0I1L=XZ8zcXn*chOc`zWz8;S>CtDk7U--7ZL1dTSH5i1jxDhM z>V!`1EMe%=KAf_S?X!O9*RJif!f4#)V$a^|zz*r&_G{nv=#g$*+b(XNTIt13?3Y$- z<~}6j7UId4Y|55y>V9tPE<=3I?#-sJV>a%o9_`To4sYpt%(@@m#zZT3d* zADV61j_0>hT8ge=hGS4|8Tx?GrC^3WD)s*5MYH@5Lgl!(k^k7xQJ#XgY6ZACGDs z_ir8tZa)8QaF+8lHFB3Oa&lhmBPZ}AXYwWgcW_1DUi&Rzj6#$&0(6?i@GHM`P>FF4 z=W;I>?@muJN)L6KG;2YJlEV{@9{G08#mSr+sK=rFc?T3%cyL*yp%LC^!nRB zIqYdgANPvstSFCwO<)7A;U!jB4meDL-rIoN*`&gW43UGJ0?r;~Ngx6c1LjoMYQ()| zRGV$MrVSyuG=$*A-6_S2v=9OW2wI94FAl}ME$$R8?oix|q(EDsxI=MwcQ2OVefOGK z^X)ye);IHK{^nP*o^?FyI_~?*c~-qvT5>=b*-$*Oa$!+)BF%oXbQ)s0ak|*7Vk@j= zjHyw5eUK=vO$j5s`M!tIaSH!z*`Md_*Wvd|OGDo2^(!v$R?fQOQ-`3zH^V!rC^k|q z45E*SG`O{J${wB;JI-4|h!(EEpBDoQ*1-k&7h$-_7~(MBL_jn6Pr~qpSk(>R{zZ0{ zg<#!?C^ysC{TD%l-!GTW!aVEHD#CcsUUpiAv)Kpx$+j1BBP~{9IKBk1b*z=3TsBzGJEz>c8rE>9YF=gf=6>~+GfI~JRx8#f^*G*5 zoW8`F2`FU1#Kf7?ug2D<4;~sGe>&R6;TOZc?4|G5#&%xWmBQ<16u*upmrjD4@uz3b zDowa7Y|#muxb~kI)yFh!?UIQO>_PuV=YVXj^5h*;JnceX#k$`gibR#04E0f;|B(|RmlIa%x-rx53xVy$e`Oz$_glcmZeAVMy8?wMK( z!T@C@di!{w{Zdmje&fOHcW2zziaoNb`Jb*607EWOev>xh_@`YyqR_-=7fAM*F(Oll za>J}FbEiW97;rFa=T!DJlZRKXaomMPRuP^oKQlAS9Gt1m{<%d(b&b8qxItiWpnWdX#m>(DoPVVnRI&Bo7ki%jeU_>*XZEPhC&kZJ_Wyz6N zfVZu%*TWg4;rbwUN{+HCLDXuQqZfh4Qs_HIgB zH>7T+IX6)jrMdmw+05{WpDD^VEtSnR!XdIre(O!ymz?W^GSMl{|0Jt3Y?;5 zRmY*jQ4{r1(^-QOU(02w(&G2qQzb}XBYKoJ7>~f<_!lNgMn@|Ul)>Llz!i1ejxF-k z={La|rc)=L_P%2`*g4lK77@@Y$OD!J`0RhAFjueo#J$=wr50d&vB3k*!lIuR)a$`e)uaucxZ*a#=s}MM5gDSn&^)z7j|n9s zoKav5rzr$?q#A-*k}IpT5(iQU*V8P;W`mo?Y9RrN$N)N$^zDwjX^sf5Jd%t;&mzu4 zg$UicJjl*@2VVe(T43B$N)GKV*=L{q{E0QuJ3YxU>Vsbwz6Nk*$W(-eRno+U2guBx z=-Z3jO*+{U0jkzq$i1`J%iKrcd>C_(fQ2<_P|z z(0rrdm!2Fjx~WYiGV7BT4PvqkCkjWU(+A>Y=6_R-9x>l%A0rdfUfC=R2-&LZBu z2$dVl#_)c(naqI0qZ3Wl0F)cA8XjUkT{Rn_W9u-qX$n^2z4$|K{a8VU78WA6JMzBH zkDBlYvj{FRj;+lo7P+D{epEDSBh6c5`pW^S`}Y~UWMm?Bk~R7_xj1gkKJUptc}WP1 zro615ibBCmT>eN&f;5T*J^>-& zrO*ixiFqo?fNV` zPUP(-t#F3|#)soDC5Z$fcOkS9G`D8kMC^7w#Ze5I{$Y7Q^e4 z6OBV`_}v;4wOftpD4{$GHZ7)G1Z1!yJ#c%)ypZD#+)~jsow;q#cB>5#qSC2J}5tCKz zWP?jGw<2Q^51;XI?RS(&RN5&DkAuZ4tixF;{}?epD^W7oeVr~gk!L7W=Hz2W{rhIZ zh{m<7J6Q{Zk#b6IvA)trIhXO4s!9OY@m;?;iQbghOdo5%O_kjokI#$Qp^(eEA4t3F zxYWT8`{#{~2M0nPw~bS@BHz<-wokL>hW!may!-E8D#*-^hI|zKv1NY*>lR#E4EUiCHi~N_c&ChMYZ;`P$%01t-1W2YU_hr<%=QP80_0g zdb;n`GMOg{`34dbNy6m%M01v(W;Q%)-TQ{W95~ui&o2$V7t$9)1L#*X**?F1SJsT#Q=oIG9i{?~`Jrf(z8FGiqkVwe`o9ysT zuEWa)whsq)-^+TGXq}tZKCHR3c`dLoU;XO;F(VNAqTfj6ppA~U!S9LLu*c`KZt<6= zVnz}h6DsHVW{cZt$y4rJd|9Qh@9EL^qJGL4-4rMM{Bes}y`@j*TIKO!xjOX6-o@+7 zxopX+ua%NV42zdbs9!XbPDl4@=Zja(i(S`VN1}#-IY~p?nb%`iSAAtM*D2Jrx6hxP zoj1C;^oo2uU138b7nAm9;U3*uFhbSx{ra2NY-IS`@|7xr&kYb_w|f&Rh9c$(RzU(t z`TfQx$nPoX%RXf8a~J~zj3a31<#rasDtg>B-vC!>$sGZtn)IP7@>`P2*kGdLaO305 z;XD6j<)_(;_R<{eqYE6_i#2aRKm;D|%<}P^>ijb9L+0{3qZO0XC*Z6Ljw~V~%+^FO z(l~TGGaBI6U!~ke?b-(5XK0Y31=BK+3Jj16=NjuUAf*fuvGVSkY1pi~8Kf#u&m8QK zP^wATS9LHdgVz9vz~T%r=N>gOF=jDTYDJi`B(*~_)OHv2iR6;0PlEzeR_BkYxsYIJTC6JuopPaLeHEHd|W)_qHu5Z=u+?)SRa~S~~ zFy)Stwj-xa>J$!!a|UN3*fFi`+Ich7=;SGF)Chl+ z47im~109na4bu@FJ0se!AfGz16|B}8VGKV#SOC`zLDZna8vX>lcX&&Ko2?E zSSuGbPY0bIoBd25lcc1#8L0GMjnSkUWQ{115I<9Iogj56St&ttjS1Cjg|@_bYi)*ew9sT!K{CEaUYm>qC>OadkinL{A^mCN%~Vg7Ti(biPv zJVSZhwOg82h2HHQx&p0WKUvB;fPPaa&@q5-l@%M#U@*c$&MoyOH_ph8NYovj#Zmf2 zO1{3QnXzdovpJJxkF2QxdN?LRHdw`;KG<9W$Tct?I^9(mi$QHi^3n;bO%qE+xeJe> z6QSO331M~_Wk(mnuC;n%v9kK+!?5)Fw)tb*X$@AbPHfoAZab-XRwSbc$CT4!yd=wd zB4@z|SP8A%y6aFOwOSiMv17s=ExKYghAOs4fhG**uCG98#3tE!) zB9BA}II8W5tQ0*lzUyBY3K-PkSP(yXjb&zqE@=*|H|)a7 z84A@Iwn4~AD~3xNME;lzDCD;7%H6aX;~ovR7@+E~wc)UL=Kv6g^_&+{qp>{#%8}>~ z@Z`|oPUxY4rK>=>M7P=#q0X#mZR6J9FapZ!La=8^55F0gCOT;`Z4Hp%S8p8FNtCoG zh${!q1p`Ijh52#!V$EyD8!OJ|g~;1U_0>dw2Ec?Itg!Wczy-mOT!zn>>2?6GrYG;W8%7L*)(=V0ItM7FD>|kc zI(8yDM3D>eU7EvHYTv!Y-@QzKe}jXW4aMRa@FGQ;#V=AM3z{JyO%6JGLB*b;CH+DR z`r)OD0*{=RZ^UK>n>bE+qO0mBpboD^L9@9f$8 zOA+B?F!cU%&4&;i)b9K9d7>-F5ZMtm@z`=%UmUKeHV)kINdx@4@x335@@Ep^0D6a= zK8i0kj>m70d3MX~PWJ(=<0*y(9B53K{9&B&$IsK+(spA|un@M40FDeOiz`$V4;?AU zCOUMiEFjfZo}>J;orAfGyvMkWAeHka3!n|bLokL>f#^360!WVxq{Ip>>=w+*NG{;W zIZA_FgXUIcFT$J}D7rPt#!5O!Pzv+%>kTqIu_3B&<)|XnL`cV!p2p2^s~5{fYS6b) zEXTPVV8y8^F>Z6p2?mozwVPFgu$t#;Y>ad+>6yEen7X+%j3Xfk=snKiV?!nu0G{vA z=EmH&ifCiDYh#s}yis?2vk2FWx_0DiJTp{`DU}Kf!)3GL6b*W*uG8k&2P;)0Oo zdU{A74Sh9DFpLw9TTfsfg1=1xqshe4=mc^e2CYIBm}2B4a@8cO0U7~C(rTRj+ng^; z4gjfGuaf6{A{=~7g?u&K%sx-cJ84pRUFgG#1+d8Bvh>=GoEFO^bkF)_kk95*@VE*h z+9rQPMn)6DqDne&+(3THEFF$^L5%})Zfry`+00j)XeYgSRV$ncRB|u#au;%&U;+hHOexTWT8(4;790e>o14J|t$nzZMGjlH)GLYvQ zj|;Nyy9+B#Q-+R!64;$3kzG<&SHKLmae@+t=e?}-r&c@yl!CREPi$*f8=1F6YIhqy ze2WYA)s&Ye%1s=#RxRUsEQ|VN63UWF#-9v9v_fLF%vVAnNK7|U^QMN#@7{7;i2+7t z_|#}67u9dvqVSMbgtg-#5)1no6-sd94jJFB+QiRs4gqiJFvIXl<|I_bkpX>V@#?Tv zi=%I!)@EK6S;SB6x72wKw5RhE|LL%bf*B#6slVVCqH>C2-oZ_1$)&w|(J3{JWBg^H zs5~T)`w5Dgt|KxLM}#jXf;)1|cT!zYE}1zrJt6oA2`h|mbFoIxW}B9~Rw+#SGeOaL zRLqn2tCs>66UQ~TZE^8NBqyKGz&|wcty4~EW^Q{M%#1=uBz<=W=Q~E4{2GP61(=*V zTDUMf*NSRbuMUBEmg1l;Rv3I)5i?P`M_>J8E!HdjbcVF*XrX$FMmZ=*DH6ox+i}26 z23V2p_4A7D8MM*qpaAm9K)fpUC|O*ZYrJpC;x@ECWv^`qJ4r7hZK<2evJuE!lgL7= zkQF^;JiWPoYT*sFf|Vby6-rJc%nb&W1;00RQ^fOqkH<)>%+9&zxO}_205YKtZDA&)11q{Is_0|&Q zd(!S95wzkxlpiygy?nCswE8(6AsGwdB=F@D?l-PzE!z7U-02i#>}a!D9UrV=$=8Fp z?4z0FC)*FqjY)B3&A)j(rvtO6jl!}peJ9MQ+R7xQo_kd&`J#S&_}zU!FHW@=j5(bD zVJD!a;OxFoU91n|CnnymD@tbJSxOv}gq zh&samSUC6b7(aN31O>%w8IgZjd;arO8Q@7FmBu4JJ{zsNukFCImY1?00MK@@}CzgP6?MoD7g6Y5qz<#6j^F@g68^>BatvgkMJ;Tz2=2GAb| zfJ-E(16q*|#--$S?NI}uhm&w<)p-(|$wgDYa6i8$HiySCDMUo27&G=IaNw3F7RRIY zCG(ioy6T>>B2qZXhp>N_TQUcO0`|b#46jDZ#U{_I-TJ-cqotqX8)U-16i%j{ktj-$ z5NdTs^RzfN#Rdb)=kEp+UKlOze|Om&iKj^x{&15A0F)+_yAR&f?@g9klcdnxx*yEf zn*FXkp!Rq_*RG#0{PC%m^G1KFNVLwy3*~L&eC?u-AH3an<|=HDhG@jEcY@NBMT`<1 z2G92<8ZA+aAAGORHl{*9(SG`PfBW}}?k}h{1V|9uicZLVOh0y~Kk_Qq_jIoahasby z7niGGgcVC@KK3_}WCo{L9n7GNr(yiG4^{(5D9J*UxKDmlL@V)CQ=vCI@wd6wJ(H(? zC*eRJ6Od@rLl-R(|7;`?V&6NQ;yc#MF5^-QXRZ*m6Ipg;`rN-1awgEv7l?uS*8l9S z%t@c%gh7IGXAAyOv*=33*`Qcw^Xnnu3*U&JFLh5z)NX-<=Rad1%un(e$`Iq#vbcJR zZG%!`kP`S+3*>bqNFw%+vgEcg_$#Tv)1R}7FAm13RK=PX zXKh~)cj_5Stw@S5)~(Pa+C%5Gj`mZ#ezN1?%GGqz>hF$HFMBY-SC3lJwLKi$rg$EY za7nsxoHS-@(nfvkNqkS+IL7j5TI`)3b75K40JZF0JrZZ$vm>S~9B}L4^Px9YUumaB zmRi0jb58`&Xcxpv;l|}rbbjIRoLW6pr(&i4d-n1zt>$KCDEr@anvR`)kG1;6cez@% zBX6>_E@;`4_}0UswCrZg%{laRKY66-Yw4CZlE{|gckSO`UaJIcM9?%3)9$w3LSEQxl4zXU z3w756b__NxF#1G&AYoa_BH2VCm<5N|@KfZJ65dqhug<9F5n}p4<~A|j^C8|t&Y256 zrk|Pi3@#dKe&7PB&qKP^wC`dA5C!~A!gdURbov#t%$+OlN3X2R`BHXMrbS8 z*?^;(Unc7P(F%&?xeVbVTFA8=18d7S4XqJ+>?VL6b4&4h`fv{$K|J7gjwC-a819)! zpugNs)`eEDw^;Yg_|MLiXP;1Z$bpzB%Y<))&Nwd>X^FftHF0w3IHQ12iEVQd>?LKe zhJXfMdC%P9T@l=UUmefqxzU7h%J-IfGrS+otmqcWjVUO*cCre;0i3-Pxlh)-xf<1Z z*g}nBjo=(oeVz0bU_7$z@8IW8zn`*PQD7qDp#Z$POt3K&txCm@q`|lw%dnW9r#!Ic zN1*LnuA6Bfy9t3oCp8X}Exy+AXEb#yS;;QkX8rXFh(3~<>v$GRvi*b=N?K`DX?c`Uc&f>j!QS%hN)x%IHS&a z*qy4pNsY?!|G>auppMnr5P+Z2mMTBkOZ3TD4b_2T5iI>>r1@EOKA8c3E)2;Lr(V6v zS;21wV?aVHVt;=E!&j(-%irktAOmSsPMlK-$gM^}eX2>Pgl^L^mKBd_2*#-f0s>-iR2>iHjna@ae769I}Adu>hc|SRA`u0*wKP zaz`pmF#s-5r+U^WMeuhg|LsOi1&gd1iSLk_gJ}#ha&L>VdQQ@UawaBjqdnING;W(JtqSLQI{0Cd0X9h|XWGp11lw+O{O zpQf-6%)hpR*`5q3OQ_(!rU>?yUx{%}Ly&NPAP*#mD_<4bK`vuYgx^Y2cCVzknQv#Z z(&IpVka_9PA_2Je7$Y8E6S*)Dl*2Y;uW;dcWKM5sWa?{|^zCCiP{CzfHrjC|CgZbY z;mF*I+HkFFp#VoR{%E?F_3lqyZJ1+vw%HZ!%Vai+#0R}q{Yx)i3?A&#Lc<|_CU}b6 zQaGkWXS3b#4*N1?-1O~s@c5yoa+DclPe+zDpcvVjdt)V!%77e(G?mY$wt$QFy_giS z7OAfNsHJASmcqmXvsy+XSujzQqH!nr9Mv?Xw2QFDoE@ji1cLn5!U?Tk;ge=A80yvL zV6wRgfkZ&M*?ak4Z)7O?^nFOm!!i$8<1t6Dya#m&C7)8Zyqw(7_0M_@RkYmOYer9x z`5IIXBfEd05KME&{Os^LPX7VzF@N=b#*9NuI+)b(hIz5V!F?lUC!S6@@@SXlw&d7; zKTf?Vkse$}50*25bohCrDP~CE{lxJj)q*!L7H3SapcnZyQdtEe5ZwczB+P&zM{Wy= z(s)P-WKp(fGL(S1jrP<6qhj;LjeM`>ZU?ZeeUh!xE*1^Gjn&=vw;b^Ml53k0fccuB z)y4$R0>PChm1mQiRfw|aei<$xmrFx?{L7f2vw^;{()xohcitUa18+o}PH|VE!&Ra& zdJ^~jSS*u;RiE>A-)wbXUR2+r8sR7A@PUEidVR}-?*A*!)TbL;<{|{v7*uZLLu=v(OD`L7F-pKrt}{VTnNS`*wAnF_{_08YP|00GrelI$ST$w3cN0*N*n>Mt1gF}Ir5XG>V~RVw z{A@NUC~0<7VjcBW2#kg^W|q9DjB>^`gc#EWqOrJ_l=KidhJ_JG_~QYk&|}e30isDDD%5}{lbDg1gHX%7W1B_(&7;KE-kdbe4xwN0vI{k($ z$*dU*90};v${53Tr6P77x_5|nzuL87;!5o#EfXA!@`$wWt;X-IJMW#Y^9Y&aiRR*q z<>D8k9qbYrKIWKS$MX$;29ZdCo0j+4Bhi}tNZM=sTUsG1Z6qx@_mAnb1fvj6e>|K7 zKvJtP8LFl@&-n2XsUegT5_5j(kn>LreQtB@;J&>@5y44#`dAHN3TW1%VBMqtE7^%Tw zDNA)JAsC>*?;gES+SU(L#Yf*iB+aep!x@)P9t1KGLRV5b+e1_ar; z!rLwaV#*owdgg5z<+?wy(u<-j8S9o$G~U1W?FaASD_(`DmXwf*n&1nXbkbXrn1$k# zXiBZb5-r4ru8(L`48ZIZHNIf5wAz3Nc%Sx{Kbb1@AG5)OCW4t64~1PczqUg5m2fWE z`D965+4tsq`~|jn`BeSE&gxHcIls~qxA@8}$w^ZY<~ev{E6klo0`mfO2wg)8$LO~K zZ8ppFVI<|6)nIzOWo{8$HuQ1q0Q#^DR#0_Q{X>B*^cR<5ogc(El933&a)YwF0)=r! zeRd5w&c;%S0Wx0m7Y7!+H-v>Y(p$MTJTd$&WT?K6Ki5XeZv~lMHsIOYPOPC7pV(cG zGg}%pTO%eEnv^KF$DHw#{_Y$@ZC0$u=;_%_>mwOh*xk}2u2BjPC{r-&yJ4u;HW=>kwVD2Rg&LA zF8lb%Q&Tvz85=Vb$wE$+7}UDNC2X@kK~zDV7L#3rKw4LXiE%Z7)7FE>)UJTOl@rI4 zi&0X}gXN`ycEp?ad(~1!S5h(f_j!$iyY(bu{yZ1Zhdyg({6CO@Bt~36d@ErnZmaZ% z{kN`3couGqdQm9W00=GQqi!b)xDCxo&|K9jtBa$s^3wQYu;6s$wt1&UOMo9gz;fN96~|TIAZ!ez(8|xzjNK{<$ zlBApmKffU-Kd58WLOGkFse}ITe(XmlwhnZ`J_)-E*6|21EJeY>mD(eU!4j#AW|@o; z!N7>;rV*;wyJBSKjh?ixl2|J#B1!Xw>vClNOi`L~WsJ*!b?WefmI>U*EZ!wqEa-4S z&+j=c7#6CoSOa8Ba(sJRAwib}`fFCR*7jN$)+AEaTu6?97}eht@xNnucPamr$m18R!I9^ zlncc}`hjmWo^25c7f6xlMWnHq;>9-cl^EkLTE$k0m6Z6ET_D+*J<5J~lN7fGd0XNm zXS==SAJc6E1;>RF(Qpgs!7v6A7z3CWS$rlI#g$sc=N12>(*2@|e?Fvosj&LVtv*n{ zCSN<1+9x&FvL>3bdV!cFG3m`^ijVO-Z{yVjZxq|N&^6X^FDRK=4%1wn*?Qpf`doRP zddk^))j9sd>fj$6VHV8|*3=Cy`clEOkzV4(ZrY9M&~&bVT5fAIDb~{G8X_S+^oN59 zA!e*~>qv2nrn2U`KUTMX)2`jrBTOAH47G7bD)YcdgkKZWp`duQYT8$2W1k64doddlPssp@_@{0T^x zDbbhQGW>Ub7=va6o2JcOY}kxN8~lO2?{0+pt=vbF(%6~$!U%6+H2(Z{rfgyMEG=W#KSm^PoI+-Iq>S*w2>#W-o#o*O>47_EsfuDzmNmoZ$If4Tf4 z2MQrkE|`9#jQ`Y+mt_rxdC{Ai`y}@ zI|+t6$yqz;5Ae%{oqWUHqO4t)pW9`$d*2NA8h>sCC-42D-T!U4-<`GJzqmh4dr%{? z@+a$HZt>tT{A$hca4YL@Z}ISm_UO#;=ql^zcJT;BdyHXpjGcXqzjXYB?u5kXggpC% zdg+9Y?v%;slr8&|Yw47a?(DhInFuQTOnm9=72Uav(Ybu~xzf_PD&56vqYLfq3;m@F zBf3j7qf5)|e-^9X(_Oh3U3p|*`7B+1qPq?>x(?00j$FEqq5GR)^fx*CZ~D^TY`U9# zqno1ao3f>wD!SWmMz@XGx6Mnpzv%9M8{Kth-}Nuu4b$EKF}k11zMosVU!r?hGkVy{ ze%O0lt)@er8KJJSQMYvTI5Y>};kxc5!TFxK3JcWqNLwY-Rag?rdfI zVR3Hf1d-Wn=Z3MCZs$b_?{4SE%5m-#Bx>0_CZSrC?i6OY@9q@kgmCT_7bMy2mJ}D3 z?v|D}?CzFTcX95O*G<~&RUkJ@_bOX1clWAVvAFiDJIHMJYkFAA_G<@(_x8Vy$Z;Li zjceH+)K6QK9W>0l?;SKQhj1Mt*OP1yzi$_o9X9PZ>>V~AcX1uHoKM;w{kYyNJNkKd zxp(vn4V(M86-aJ(+|Y)@R({-0AhLh_8zj$t(gD%7JL#mbEI;Xb>al;)O&`jA+QXb| zciPKdRDRmW-MD|+&)>~`HXt}3F9(r3T(5+&RbH<~i5y<9#me*kok@VJxk#a*G5iH$0?~kI+>U5` zXw!gP02&So4fnrbgUjxjLjQk)&2ux^D6rncey@f?Zw@dtElTQtiOv6WYUs@SVw=wY zKh&W92R5ik*GFv3=Nd!#JYN1+Y*I2ISgghLmK6l!%Tnds#kxFCbg$GT@n(v~UBR=7 zut#ik)WnHs&*{;bBethP05x#GNM1(Zn)LI-ONMvmPZRSaB-|;?V!UQ7SEOX{G?~%m zS$lJ(6$Nnrq2{l8w8p>G2v`~=wPOmYM;a6c8K?9_D{Q8^Jac1CR?qo|nt0Z>XeVgh zyZ@lZ%l>*p+VzyAEEw5AD*>##+pqehJAM3NNIzj&z8-1&?uEL8wi+)xQ)7p{4U`U8>4M{~! z)9IIk`bTVd9Fsrl@27bOb3I}scE#kpzWJ^KI#~D*HWuzBqGjV{Rk|&o^NT}nvHrnE ziGvFro4mYQcg~b!sXbPx{JqZ!^gmJa)V`DPA8N2FBmbc$qqO5!$^PkorG_wm0Qx^s zWABup@<E>{T8t9ecsEpF2^wyu3TM=rDDtZ+r9!%dGOGz=&0PA>0Vcx` zzu3#;8jMeZxCO#6dD-0!Z4pk=QN`R?9-^Sn72lY(*rk|)QgY)lO&Fmmpk6+JVxpgJ z5}S}ITxT^n2Ga{fE$JK*jC4){*RbfQDa1aB9)+--z@(!9h|nO76yZ218Lm{3GP`*i zo4O)nZf_FBeL-r~({N5=fjB4U1pa1;B5jG(p|@E63^1QUv7>|`ui3M#>w%(|SG}m= zk2h!8XoSU5*oq?oROdN3%EeIfzL5~I^ITALF^o-dG(zt@k7BS`PDD>lbpiI}TOymh zyk3UmL_z@#C9~p|Kpc;qG^^H`)idoIkfT@!dlAm2@`K!;RNpX&7{{uDk2k3S*o~Fj zyGWG^pu*tCks%{#qmtnbdZ*Wsq0xz>CX+WF%JV10rH2+Ybk+dQFyRQjGd0h zoxg#gk(z3?l6{BJJ+dj`^)dyHaO?1XgNo@;mD0P{uIWl|N7SsXz6!!M%la3Zr23E; z-(SCYUGnG90%)_T{N4)QAD64i%q}m+;q&-UfUPW8`8uE~VV63-o93}_%O0o7MtdQ* zL!_Kf>_~2tY5q_c@#{`D9K5XLhlX$dvS@a!Dt3%jA%&-%aumkPbjtfrdNl?m31!v= zsD=gDj*-cyU?A;RQP?47WgccPeHWWd3v~9dO^SIEkee(}NguyWEl+3L9n^Z+4mi<{ zvGk66N>b1ZtY(#7)iL6w2h{AC=T4hp|U8hmRLQX0?mFZFh;En z9ZVga;iC||J$|7(NYM04MM#)J$)4E=(Rwe2^)a;E5#-PvG}GMat{Ng~t4ya)?`PpA zo#qH~cM1Bkaf!o$33Uk20Wi6qySESm4*gr280>$Fv}ngWXdK-xOE`7NW=NrZAn8~k z_ZMydt>Fl|nq%0~QmCD{jn`z!lh~M+bvD(%efkflDZ?$BBEx@&d>+nnp8VLBSG^fa ze>g8z{jsY(d^6ena8VueW8YHsc6RRJ5;^?i&|~;^@%G`W^~ulUP}RFtYSeX)>d({U z;k!+7)ZdYqpXWuY_q+P2o9W@7myN^shd!v=ZPi~lQ^OCJ&8Yk1 zm|u5Ws;HYe)Wh}guZOE))WhxLTbRNRAnFIy@x$`;!%6XbJcb~c_9MFX15x;cMg1W< z{$!s16e<2x$j2N^f7)w*dWrx>(Ew(h09MZc_LKllWB~Vc0Pl4GKSiK`XrQ1@ps;74 zXiDIGGH|obMa)XdfXURE4G%Yt@0BRjTg&5|-s7*p6HJq!x5O^}D}iZiK`QK^vm7EU zr(mX0+K@?7Y#HNMm!MS(TU>WGnJ!}01{XPhcAQfU|6uy~V{3v@+T%aY>c4~WaxHxy zD*>&*!opyU9%8aWjsD;_pRB;GZ%AA>bqP^UqCjFB9Fi9X?3TcqAZGMe)hxn_^+T<|1Z_ z=Z^%PFqLV6JQ7|c6^C-f@n=m((V-i7dJ+$Nf;>Dy6L65CBU1}IsD#y;OgaM3ADH?( zipwOz7(Hqw2()cQJl!DcqC<+3Lo0WT#57^$zT_n~jR87Eb-6IzZG-bcu?!|c{@382 zg?8$3D*DEdamH}5&ewdhu~>0YahfkSkz{8$;F;~mUJuagkvQTwAodHA@4}Ld)}#~D zpLyeet{U<9&xm>BuEIe}>z>4#Zt;CC2^*wf*^c;BD`Jh~U?BZx9ieEN+{A{- zXn0`w3-p9BIZ)39@w=3F5!axTZF695Brq5EB_%P$8k{T#ip#OULXV@)MO(K5RdprA zJ;!BP`Jx#YM!S+o!|;W>4GXL04c!c}nG~8q^_N3_kf82!wQx|lE(n233{54rhbP5w zfC!Vs{V@$&-BL8wVbNYetNzI%aVk~FNGf9X&=-bM>Lf6XwB8Hhn&KcJ+814ZPYUwzI^qzft&;FA78e_?NM{Y`5(TV z$pQcGzUw5|-=ZZC(r`4f?AfTh!;GLKW|< z$t`L5601m~WGy}Ibhn5{T`sv79b?rG_KxF;)kCebqi2d~a+Mm}N9<`U>?oq;<+b%D zSKAYN>XkHq4CS``mL`afUMWU?5YbE3$Q|+;4l9pz(b_w({L{YC*Z3d4970-YGFP}) z8960PcGP@6sYH^7w;GmNb!k|y^61M^6HNeeq4)ox%h)IV)lE;TX6*jeWy2oue0mr8 zEwi-@w#U9{Gvk@=Y47B_k|A#P#(ig4Db@K=GPiTfpLfE){?+C3d?-;>(zjs(8C>pB z_^m`;n0XfDTd@+`TasQ6F9jhF2BnG%9o=7-uJY3F|JCKU#~l{`>hd=sMXj3#p2oK| zhHpe*9<~$p%K6u*=T~7q@|P#N{;x`n&Nz z5B?4}JHUIy}i=@U-<9S9)?&Kl6U-$0Y~X`45Ykv1Ezs?IOPWzaz3J^4ndR;fX1%BDW8B z*9k1ka~R~zxag=z#QJGy&VwMUUojOOIwnSOq@dcfE-3tGY5S`Xwa?=H`pYKpQ64-R zWr^XjWjk7ADgn_uKOmCcLyaBUSqx%`w9O@WOH#oN1Nv_U7~Ok{{0`>m{!lTBbC2@A zZeoDShH^`<>Lw3JLo|IYf zPnuSjaMMZjv4Yv_7MyOe*^|#Dx=eKh;HP4FuozE*b?tKY9%xoqObEi<$*;I)_`>ON zf@fw#A-feeJA$HNMi9a;3YYxEMp`rG?_e{%8fmAAjOfgq+P!^RcvuNy3}3k{75eoY zI<>3I6*3*n`wg|ezNXq)mabdw=T4Gl={8pY^UCxDvoly`a~28)o|b@A&eGoWLWCQ? zgLpxHakSyavJ|>69VW+!w48od5ilyb2-jpDMp?e)tp~dMT!%T zCCQ~c(i~cieQ%2NYRf!;oH`_vEkR*#*oXnLouRI8Jm;73D znl$zE=8fCyZHUp@>Eth}%jzqW2_zn)N=H+C@aMPhBu_M^d$Me6lMdF6pX)36I5xyS zPGQ_ToO*;BHjL#0aKUbH*H}Zju10IFt)-HF3F=Kl19Gs!!J~g}acI5aCt;;ysM7o@ z)fE!h!R4IXKfft<^?f9|(zQrwVOLKiuJuir^B13mL+`8RWy1IPvYd;jX;YHsqE+5g z{fn1+o#}_sRlZ*n5}k*pyehYWq=)@W4_ZYv4-*UKbY>ydID)O)WAE+YVar&g6m}84 z4uMr>5%G@Ntj?N>wrm4Ug!Jb1PlYw$@118sj~TBp|05A)f?UGa%#}pn*~E1bYgBXB zU7|xZpFIZFXm78(r5c#L0uk$s)PH;6Dz)*+1M95fe|yzF*CrMrHaPYF_UR1OCN&Oh z@cR7iHzxX)(v8>@NdG&Kf5Mi==DH#zqJfHObNx0f#cio6?aq8z;nGjmJi^c{FkHgy z7j%KJB6-e^m#e`Wg>PRdjy+3Htoc0OsGu*4Tlo#?z;S`c*ye7IXIeo$hq>fjEXMmZ zUf!2(2$mOXIRttWtUIoeiDx!Cd$7rd&nek1gt=;;%zu5}yoj`sBsRdmokl7vmIgC| z%x$Bmhh7rb+ zuPMLpzj0W+AbV|fM#$`bcDp22h%Fz6=6LFx#>rU;Z3|CKWxw`bfz{?|;kN_BvMqlx zn{+@a{B*-}dZ)>jh<@^|2B&H=u1lfx(E0*3Pd>Z)ZYU~7w41!l3;YHg0kypt^!RV= zo#j&-V7#S~1PKnop~Z`(xI-HtfdqGVD_$rRC{`?xph<9dcc(~khZc%MOQC2fR47nt zu)TBV&fMLZyI=O}{uA$<`91GB54GvNuNLIs zFa_(FqH9bE`U%%jf`OXOzhG{#sG2|Z_&b!K9!gNN4lWN7W5UVQqUcRY!wMynOk2I& z;0*O>`n%mv^<5ar9RetZeaCAe`_Z&7YUt;D5x;$RW|A7D}w$J3L;{{trdk~FI&9hgatSb#)#wo@H$Ygq?B-hLTN ze7EQ-*nf8tV=nWO<5|D~Q7}VCVgIjy7`Z~tM=x!ayuZ9@PP+X<{Wt9A*Zs!oyN~T6 z!mf_rHy4WyM*jItYTv#6`h7*5ARX;j`zT@%SxGeDj>S$4NH%9DmP})cD~>_yxC8~Z zv)GMi3(DC|V2PjNM)M{fmty#eEIuR(cjbIY`uAa*Cs}IdxGY6_+hQ+O@hWF8P2MVG z>G{UxqkmHx@8WQgvfTd#lSF{-2T*eoL4zy{dcT7#yLj@$Y)Aa`L5@>a?qRN{=Z0Ih zTOFn<-+NW)C_iB2#bII4#K)te=WnKuN}^AM+)JMcBp#JT5S<*Crm+dvmZhk9eym8Q zXA`RY4>Mj_Zj6;sRe5BdK#s|O!6c;4%Uj`k7x(%9Mw3J`mj4Q$I>4#_gC@NK0SG$< zJ{f^OEBq%-YSbF1&S=#1wOT$?1!ydvB3XR;7Q4wxDeiR;*?q#kpsnrO?D;$b7efxO z{wGa(+~&(f{zXH*%L_X+$EMRXBJLXYWq^oL=!>eHu4p5koSdz-i=18h^AHD0gn0^> zt9?Ew_`6b7vsF^rU>00xL!0h0q(j@mwQ#6-fc;j;C({U057Yba?M;+Rkn&$uew6{C!?6{lZe!qj6)}oeDmx~^V zP>aQkPUvOFceW9Bh72gZb%#2^J^Bk<7w}%kXV4tWmws}QMn7CLf{>vEsPuCEd(su? z`P){oGj^m?LrZH!>tSAg)Cdn0WPLr#WP|wkk?$Ktm>;2#q*5Y)Z@1^QE|i>3+8Qiv zI6RIlbzs4a2zndROk^f;ca&?g#%M+fqElm&w#L8}JO4^}`cQD3Be0T7PClh2E_joL z?ABJcpXZRDynhP@u~Cgb#K7VJ?&G8wd8rLL2a1XoQXv3Y`|Qf--F&Yp60g$!lS)|J z^l!~Wc~UyFjwVKqr4iv@yS*p;yCJs@Wv3ddQFEF1`9-~_F77zBrHyG}ri{1m*4JQ9 z-AkD+TY%@AhDonG>%*}1cHsHm>uXa^cF`X;;jk-I<#oB*RNzQJSkx!xescuN3g(G|E&gVQq1y3 zK|%zT2rL5ca}ZxX+1QjI&qt`lnNQ(yN7X&57)GAl6dpqgW14wE+Lqn3GFGp20YI6& z5my@c@XzXyCyEZT5KCao3luroP1JQEg(7UKFSQQ&g~*n@*sZIw@w9{`g4~4oV`o-* zRg$3P51w4}Ry!fWrtOB`waC=(DQp@jxO&D=R&Y79%R5fjcz%jqII)hJSV(0wGxd9! zTo1s7Ox8Cx2RNe(p?<5~fvfI9%6N)>q-157Xas`? zq7JM?x>^vBh7@q}YzcUZo7S3k=WeCo@#+F;hHeK@gjPLIytOAU4WrshJQQ6-Wc~9Y;rj#hO}OE%|3)+G1ZcyL{}IYbL@$!ulXaRhg6u4f(W(w@7w zb0V)2idrXAQ}fMI#!_HPo4aYz6_Ua}seHovUNkB+E|4z4$FDX!4W65H9X2@>?7HMW z5fT*((8l_NYA0zK@vXiDdGSup5z&!*u>B=9Lx<+5>tgX|dwZSeq(=M8X}F%Y z-}(0po`(-~^xxm_T2;IH9bPvTEk^rV%V@un?BMqM3%j6Vaz1h^KVIgqTO&(@SHIov zqLKVRX^uYA;cxsjFOZMF-Q24TqjPW?2a9fg4{kE0vFX&5hMWBwrDpdtX(Lw0UPN*7 z>u5~^3l>0^Eoy6{nm$pC_x7JA0FBF|0yf9g8xG|)+-Q=j$tn10f18?tDm;(WUCl?e zHZol2c%_`Vq*l?5^KMKSUMzwA*+S3bNn(C*Yw z#4sRJnI4fc>Pw=c+MS&`I^=%^Ag4NHdT!;^Gmbz7Ty$0jG`>3)e@tlDqhJclAZlqQ z2nwC(EMu`}9Coa*8EYi8s+Jd}kf$EqjWfBV^}a55Ay0?n<>Sx3LOVxHooOvEp+GGH z_=dCwb%+U`%gh$xY`EwZHf8y1)ShKbwf0z^AV(a2fO)l|VubzYZk3OkQeHi@q8`&7 zc8ShEkiY3peQaoc0hS2A2v%4L>Exrm^b1EwtECHaA!&gvk7(YkMV#)?lrY*|K^-~* zu)r$qx?qI_Mvb>QfLlV%mr+KDI6DB=#fS@c#Eg?QqlwJmT;J39Y~YsCVNN+6wYf~f z(m@`b`GjG|&7qq>IT+gAihFn44H9by5_?cI4O!dohYriw6fjyQ#=*{izyV)_b)P~- zpDD7r2mEGydf7wA9}+>B6-mXf6xfM#jtcYjSNzriY(qggRx?NTsr>{9!~bo$(Z;7P zg>)~1Iu~H<&$7ve^$jmnd0(iA{h)0$&zvns-oYr;Cxk@>XFKm&{)Lk00*(9bDQTI| zWX7c*9oZB7lL;m$|DKZPA4>rSqP#El*JHJeq3M>(ApK}ScwmH_qmj|F3b;%6UAuB) zlxiS9-hf;)(3BQY5qZiCx$sf6Ac5Q)x^KFaBnxy z2mv@#jRHNFdt4QiVg-u6ipiC-G!%&01ZWdUxH0nqag{D&Rf>!BMs!2=n@h^j>F8rQ zXYOj(t&f(2|46$qx%@NjQ$OV*gpGetqEkzBP0b@-VWbb2y00pu6&|oLrf^#Y%q#Jt zknp~6C%ipDdH^o}-=_ z2n)9sKEiwP#W>u9e)+E9?_%H74)l!+^R0I21P51MI%O|4LW3QBLz}jRX&q__(qw3j zxp0VSy3W9SBJd+CK4>B;tQV%yLHF{#X^4tR|vuCOAmhja%xEH1e{Z>3(UZ}50Kndt0ax@QfP2h0x z4O%h|V|z#ySkd-76J7(z*`sLmQw3m?Njp63=uw6j47Ypwj*R}r^}5mdPS@oL`nOk3 zWGf(_l82Sp%D3)LHzkFP0kq&XLr4WI^`tzkS8c(`>b{#i-bCDTNK??2R)8teI7+wv zmzGSsfykJd?@)HUdKeix!Zk+4eA(Osuc|7GEZ&sZs!jP4s404^qEw!KcIjFqqL&UM zq17p>8V8bEqzO%E>Lw^xlbX6;4DQ!PzdalbbFHOe0Sagsv-De@c*u8FB>&=5I`zYx zvCB^^8T^TbO_g^@=hYs$L|=6mIy;~>`+ICo?^5rkE|<3dURRq`FSx~Nzt_~}_!)Sf zn=2-THHiu*Rp3+YLsXY*-x`pxmoyqxz{G3h5moVctlc2(^9M^=V=xlQTaPT_-R3!K zZOQKssOz7b2t0JtY!;FOR>-7(X0Uu9x&HDl_H;IIPXQp6W>WtL8p8{CB$}GziSB3^Q;?ok&j|8 z==lL<_y`)llAL+by%}T26+deQh1(Xqc{@^w?Ry=+u2O5Qa6a9&dMgO5vMMU&??0S& zyK@yS4vDG`i!^RfHZyj;CN43(ek79d^4lJW{)bjXhl<}a^i-SHVzvKeooXm6Jn?(d zG_fX@;h}@8D@!Q*XkP+m&wZq$)Xyc_@`~Yapo{{-ZDg6+a>lIc;8~<7vV1)p6t`vw zGy6&8fsd0uT=t+ND$yBgtJ7*sl``q$cXL#45Nu3f*TRvf!#6XmW!(f#CY zKM6i>c~QkQTS4Xrb|X9J*ILVM$?Jfha1kw=i@G2dY9}bt`a6{!y5G*}C!D*UJce0& zJG2=B7+p-)Dw3Mn8cTnik=9rqL~JOPxT%PTg)rzSMaUsp?`Ww6TglBv(oH=jd_fC! zG$Ne_!mD&af3-UOcEtNcq6esIN^DZJ2AzkLSpA`N8v;OI^(pMHL(-lW1$K@WqBf-x zm|6|g5>a#MP>^w<%|zHF{IzkH)&Bi7{SQ!E-&Cr&FWSh=1?OV?;?Uzqyvek>m*%_8 zI2Fr#a4#N!_DiN@A-B-H@pC^7nGjv%85f35DmT}x_j&E-ma(q0I7El*TK>-Cy1Xw4 z@4~}4-T9Ygj_S3nJ$d+Rlw5v7hTZaU9^4Eppsw~V5e0vBUSKH!+fqBT0#4I*vi{DDjVy+f z_2-!u+ zhe%8Y$8eG(5Iil6*^s;Hsh*v#iJDmuB@HKd6`yJW?faH?laixi2{&r>iK4X+mtTn zGrioM){hIRE*Wn*_S)|e8rhHua9@7+`vB1bhwSJ2S0Ql#1znQqx+2T$LY3zvoK_d^ zZz^?*H43dRJy#oT2je-dWltyRZk1zouzbP3TXcc9uimwKWW3|v*x*62%loDG)BL8^ z8|sExHwXx}o|(j`Rln`#J-buXcm0iHI$N_2-VgYCG}^8CzA)nY>~ePL%XX1U`1Mxj z;O*;&KlW$SpuanmbdrL|c%hhu(E6k(V20qUuEY}SrmllBXPVIuA-@~TXwtvVs~;+# ze1(0?+S2a;2meMi(>ZqdXuP8i&?BT*KdtFzWVrq|LI3=d&nP<_pqFTMQo19?8}WS# zMx6q9Bfud?`2@ySNZg8GS7B=%8!dCt>|uJOE~P88=F+Y!_dZTaPr-Cc4D;%wfJTU@ zi%SHA^>rH0k}Uv0Fif8sgl<)h!ns{5W4%2{jgY*RfkxVL_0mQxzki3dGdd)Mul^*wX&pvQUL|D?dM}l43f4>ePY9H@BlX?F z4JT=$uZ+|->G4#ppVm`h7+BSM-C=5Gor*tLkrEnP5m~gW2d?o1c@EF=r`B0@@qE8% zaNi8Glr-5=FXa4TDMEZDTfg;{Uog>%DZ^7Q;cmRV6Xsr3&j;x+NDu$kx;7Ng@4D&4 z;NY_haLyL(KkKfqsHy9N@EJa)5ORvQOw9I}*f`9y4?1xx4BJ*XE{G7YaxYBS-Z&_f z!Q^`67YeX>*5+6Jy7kEIjtc!)*XsKZ_pdPcCI@XEU$v8wwE3DRtpzb02(C2X3AlI{ zDl$VUllr8(4QKP`Uy}c_RvZ9(qj>!`G?e|vnIH9kTMG3F{!pdSS}m$Yo`2dI@Vc`0 zeLywQfY57An!f>y+V}njuIN5exm^9Hr+vEiDDCgl4Xsk1?!D|sFP|M1C)~78K1p{1OClWA%XOifzyEDmMJ7Abhk*;YG9r|V!@p1e@c(-S ze113LYBr%b@~2YA;7!V9+PBD?Z$Ie50D|%a^k1J#jNHu$T2^_z{;z?aKH^*^rqCjV4H?+KAUrg)KwLx@!ynYC2N==|u>ho5@?_Ku6x zFRH{_r}E&x=yTk*7?fscRsA==IU3G6Cs%EZ%Y8I{49vWzB#YN&Zsqf(KvB(*pcj|J z(+K?jJbE;>7(X{4P*KTRqHfqO$2Hw*1A%1!_^e=@r$+Pqw04HzXalc*(r(^CDM09H zm{^XEFD%cPABajcl75CKP&lY?FPT|bK#bg}SSR=%DO_#Jqf^D`p(zqoiLBAdW;hJ;F-~q6qii-)R5gP6iGm-wIfD5?hKZdAc^&kp`f0r*CAetPs`Jw z;Mp3vh0A_jQ-G^7SXe1iAT>Yva>dFwFFXmt7I z+FF{qEm81k|GPSF^?G#2b$$ZNv+)XXR99#)=FZfJO|102r%F*|-(u}7T;kRLMyfBYxglHXQhld&OV4{ZaW6)rMICbDjyIxd!;ai> zVaY0xZ(~$wEi-v{M(HGK{-RK0cu47+rqIc6Rv|uQ7S#R z*mN_S$!f&@)H@E|ycaPrQ8xbsk*cA0^Yjjsmt5@Gs=UM41!9Ff)?=<(;k+uCr-1D{ zew_h+4BA4-cV&qj(ICW`k7>Bmge792m^S|hRA+tUXBZ&MhigHw{>wH*g#gZFbYWkf z&gf&FQW;8{=BvzNN)&2KA|CpzGSAX6fxS!ICQKrk^0T1L^)*LMk$j6ZbKq==e&feb zxg>TV-VjW%steu${M;? zIqltA#>p_f0;UbGw$J7nO6l;1j43ACnJ8vVPW)*6skB={Phg(tKMk4>v%5|AZn}@6 zsEQ4cNsP?kso(DsHq+h9udQx4~dhJxcr)Q zK@aMQy8^j>Xf(_({Hv+?L#2*MSvue^x|GDxM8Wzxpqqtk>4cSSPIE)1e2<(SQei`n z6c|md*m28B{OhtC9yBWNlccLmf?|W%cU(73F7X1_QQL7qZDSkjhTBbP7bg|g)5YT# zXH(5wo%Ud?{m(`(Y-E6xMNo(rZPU_CUh;d>Li+bymcim$Gl%Jx1oltQ)x+K?zl-rE z%{R}Y%K}d`{t|?BVTuE{&4VLuHONLhd;+3xNE|Vfp@SN`OiAKoLg*LPUfq8r>jV*Z z8a%+gzXywRlCj*V2eX4P4ABpzq3>_v{%pm~49}?!ee4tYyY*1gft1aQ_*$EV zdamy~ewgx{QMaa`scq=zY=IydYwk~S63P^ibsuGUmSB%a{xCB+8gPThP+l-nXRxNV zh}`kU&{RAuWqZ*uG&prmR)A;{1|+KFJ_P++A-+)4r=VhVR=Ca3BHF>DMF6TKe};vQ zM{>UoN4JpPC1z#YANIn<{jpY9jaB+JI<()5;RH~mEf7hDv`C7NrADd7To0#`?UNtyLy#`h@(>Qg7cT2JevjgMu}n9+k(^5?TYqsgjRFn~P|3p@iZwB?W~$ z8f~;AQP23FF2es6*t3%88w_GeH_nB?WNHJhz}N zqRrSyp1A0v5V6d52z>#8QTa}TAY2Wn4ISO<$wn>OBz>4kr}>L|@~a&QqNsVBT*`R| zeGd~#Y)A&;r%qfsMdp5tqX#G-H_^EjGg?Nz$fy52y&G^**BxhACzUI_)gg&Y{Z>Lt zZ-^E|fCAJFW86u9Dbl`pmPnBwa~9RV);7GdN!`vN)^#qq7HSlwD0|m`NZB~%7K)dU zPgPNs%vsK|Mx=_48+;~W!hh)B=>Xko?f2`2sb7fZ=KhpQ;KEV$_vc&Dm0HjX_mtD` z8lrY4g5;+eqm`lRbbQuIU#4W_Hai1Z^M5!k%km~WIX}2+d6>YZy1#Ruq8C#{{>D?a z|TS{|H@lCGkYsdnQtOP!SjnYME`>+cBu0dZq$~^nWuTrGc{Xu&l?ia9;<;)pb z_#^~;ql)%hAq8gRJwTKP=*U1a{vB!Vzf{eFK%pGz2FV9)Qk0U!m}sv2Pkkj^DsPfA zjPl-Av6z}a2~F+^}Vl9r=-kZpt49A zvNeMK$>U$+LoKS}LOOwAt*o~j#2i!+dZ}MYi5x%zZ{;d#lDy8CJzN?hI)P=983M|> zVZ*AJ0D&YyirohE8<^%0II97@W@f>B=nX7W%q|Jwr{E<%aj8#HVp`KdqqxW#|E#t+ zG5L6|qeXI0AX^WOvYAX)(%y_@2sAviEiC`d&z8})UwFuiD+c6-^e8<0l zTl}Q*og6d!iO0;A{wafE>oY_t{ql*r0yI{Lia&vWQKvgfV23e9cv1O9hE!~F#@kry z{hrk59J?;5Y0;G_tBg%(IzT!dUd{)zTAr)nVjXlcEfb989iV%~zSCPk9;_l{V=7~d zDhrgjZ?=s1VG_efD--&3sN=ME4{ngc1yW6sRx=?A-v=E3mNfUXI}$GzERk*x8`U(e zopdYI%Ov6MHkc{*|7Yf zfudU)#s`gE#NZcVyq#^x$zEK*6212fkgVjBIUGK-Ny@E>rDR}>*kz@UuVtD9zZkNd zDeLX;ij7A1bCi>lCXX|1h?zuAab{|)N+s9lQLgJ+#HzYnZJu_5`u#Wy0bQUjC$+FtsLU+FGt`6onI*HmmNfwPY!1Q}AJ16yRM!i|lPQ7u& z81mQNdMEDA3X0}>ys?<00_Iwn{cW>LZqWK;w(+j5Drf2AGj*p5|fKE$;l&$spopbEZObAG~e6!h+oGXcZ-*U2a$yZ?u+%^t{4;hSLA+H-UYMVMR-O zH9dGbPXsK;pln@=n;Qk#gI8ZTB*G`J+`}|nkew94#cp3 zQcGIEiFu+9{Uls^we0V-2O66 z`A*kQhIFJ~^~WxvA;vLc-=A>*sK5XG+;=}l7IHo;OgYFmEoqS`qz*FTB0Z}^!F;q$ zJ~<31icyYC?hCES4pK9u+Ny*JI~~LbeSJ7smdg2%Oj2-d#u*iJrudNzcJUT)udf^= zg5hJh5YoZ!g`BVCQeujLKanatipPTS&_JSZ9&MR zs|9zx46L~B>wdGud%;|C3nyF@*i^bZ-xEY*ee!lNu=m0K-CQvbHzZtg`7OWLO@{JV zFBIhHSCkYP4*lrsC<3^xY)_LlYYxTx;p=k*)u)?YPI0eADG9xM3g4uVzIMZH0| z+_rl%S446~ScL2y&~k}?Edj>? z00N>p;-zsYG8zq0_isEC$!rw9b*7#(6IdP!$pVYTeP}XyxlTt;1>anZn9!ZTp9VZ* zNet}tA&B&9eY6ZD>*6CV|1eI=RD%cVHu|PUg6drP#Moi1?4c_OCtItCdVy4ZVj-K1 zC*G`aich}Jq<*2y#=cJag+YU1u2mT{S*^~r5n=_z7f_fTIo@WMFZcSKUQ6sx;qMtY zdH<9=oXe972zuKkH9>}iX>xtFtU7*O4(Z}A9CI+s1zI=X7u@9XAgY99-!X1Z0Ry!} zHTzY5b;8$3^qFOg^7s9t$+6695#ik)pHS7=pHqK@1|3X_^#INOJaPD;N{BGJ>PBcRJY0Ih{TY8hqjK@ryZix6*R>th8_>CL@rlWl|gT{0D0B&#U zS*4Y~-kt@vF0s&euwq)Rtcok*2a23ss}mq{?G`%>{vUl%O(;8v{OeJu; zRJEDrgUDT)sT%6C3>d>$jNuDM5i3SSeCkd}K*$(L~6=BTszHqY(%hQ{iug z7X$xx!W$lFNK6R0m?}$7^XG?466PULPh4-~vbs>lMh2(Okz;KIB0-cmLHN9!NaYvT z$M_|Up1zxnympG0?mL0Hdtn=)wJ8eiuT8BZWLDD+8~vKpUC(%{-bTU~*IrUr#FgF1 ze!@3Et88W8`p>3Zh6nsUE?M!~g5U$g5;7XL$KM=qk8K;)$SwR3TJheARJxJh*I4Cz zvyZcmd|~A1?CbG1k96buur%pGZ%?)+%-_01-^>=j&A%HjDmR_I=;-UVrN)&|m(+ zIbz^PNp4z2;e7XC#E*l!C*c>DTMt96Z;b%Vx&42H=dGRbm%U<00-aG-@|CHhtY9kf z;D^7Bz;6=zlBLCko72sJ#g(|mVQo2wCuF44qxGalI#Go}yUvm!gN$vo4w)ioc{6_| z(}oiN&-<`xMRrEHua*_{+^8eMjeV%KlmaMx|Es7&tbsW zQGb)0`@Sy)Z}?mxkoj1#=8m{3YftHA^f^l5AizdcmQx-!@Q1aaI7)<>F*R^h_ zrnrKJhC5SqE|-@`+JY89tBJZj5`=s{qpA|}!}dNY#WyDI6T&|ml_f#-l|zE6igm-u zJMN`_r9E-@UUh(v@oQQeG4ZlZ&A(YFaIy$W-;ANi8_=OgEK*0axln|q2;n-SgrdE<%aZ)Zectg%bcu_A zqPU6gJ-D=<`6pbgKpeR|eJVk;?#$45y=?ojZu^qWhtFi}QE0F*#;U`aGW&E%XX^F8Rr!{_)*-aIMI zPp1nDO$6Jx1Km`;`XC+UOj_%{2y6*(I5mb+U4<*%B;iB&_0W{8F)A-Uww$N97zlVqn}yuT@04Xn#~ z4Xk>?u+i`Dhgx}M^yQ28F&__R3%@Us!S(^bq9=d%6)?8Tm7?+xz^dW6ORV8&LS3i} zRxZ-Jc~zSs8GxRQoi_H#3T3cF`Xy`9&0+OBMm`&vQLAh-7)QeCxp+r|m43c!5#Tam zY(BK@)$unjVwPt_KC9Ji{gz*hqs*If3xPXnD!+X8rtSG3ePkWFBXS^ybrmSYkt#H51IPjArzew&~+1UP41(8gxQ z0q{@(?hIc}{bOVN4$fal7BT-0<_M!dMX0ny^JSR`)ZzG@oFMC?qB6G4uHXqQvmba2 zZNoDW#X|^wE%$P&IhoU(+w_eCVky%}$;E_m-2Q$Zy%22quZLBPah0%Mh-glsl zd-gSGxQVThqiJ8wsv0ia5_pF&nW%TDT)9g-TOn&NIs=7_i7(Y27+VF5u|OMvk~5Rg za6z`%zaeE7c4ofm zL{Y9#+i3&f(gP>9K}O)iPBq9u!9zqjn8jKIJmyHZ2t7qgLgK&+<}!sTrXgAuc(|Y| zO3rl4*$-*+ifxjGofQUy6fp%jvLVFH>H%O@up#02Y9b<__f3aVT zTk{xB4tk?~h$Lv*1qfZodcX-;u~Vw0S;o|Y(K9fvcD9JZHdZ2Wc50(NSgm`3@6*OP0E0NMEC)5z&WrO&Ujbs6uC!ES2RE zwM-(~zl_Bhs?LQJ=@ZV6xxI>^Rc3mG_2UMbiE+I2zRfvX~3Un=GxKzD?DWH|urE1AB z!gzL>X~Zi22Dax}1&EBCG0HX4dxP)q1&HJ@1=Oro(C z9~VY8R|-7R$v$W`^vMKoCZnEyWV$EsC6ZBBC4FRsMV;$+tO!KLnBc0W zm~_+_8+kel)+MTnbflU6$Znlsjb}_w9?NhISWk||d78cxy{!gx1`bviTBay6^UDOk zz5wLQ?uM*X`@o_Ln3m5ivNx^XSCCBnP5p3WSWEr5f~GXPIHrbJNQ*XnIKgtD zsj6uaQbiXHUA~m95Xm5N99viX{Q8_=HueDA+A?#L=QFUNp**n@{%3lB>~v+jc~JGB z+eic4vmd<6ONRucUK8K*ixwR>3cjgMW%lEMHSx?6rho1igSs4NQ`B8nUhjaKy+UmeM@k95m zR4lASr|~xq@sFr)kG}T2W{XL>ax3+vTRa-4uj$RBTy-ey$n(*gp1dMvtyzY$Y<+=C z%;~gTSEhJkT>2Yd1%z6=tWUu)B7qfXmr6fTMv>~jCF=XDR^Ei1M_9i)q!GNn^I0A$|g`XH(b|7SUCouO2yhZ;SxsQ#BWHH>b`pKb~jL z==GQ~pFOb%?cl?#qNh=~l+#A7oE$5^=7HRGwK$KQ>BPTX@vkjOux)BHQQ*l6bonOB zYcxWoCg&)gr+%V*rL}pbRChHI%So4#nreBnS#XtjfWftqftp0(R%#CR-dx8A-Pr73 zTB)vx*>&9xQ^EH`ULB{pSb`f8{1{DM?30&G&|MILy*X(;dicUqp5)8dW>vg`p8DiO zwnf-jD=;`|Kd>+g)SMaMQb}J&uCugnQ1T^QLb5exWxD!Uu?J`nrykcTkAE!SBic^G{5yUu9 zE{RaR_S54$6~#pl#U0eBRuNV=PL;U~^hkdR+#$7_*zF|x+nUm<_SS-Cn|turFS zW46HQEsk3fj60n;Fz`j$Q{|iQFfPE)EJbldCi+{|-fyQF4;kFz1#FCDPXN{5rYBN{ zZ+mZH0V`_R7AD49wNB;sl(&~BD^4zo80MmE7aV@vN1VmH0`dB)>81Hc2)#>`&*L^v znKtbl{QHWAa+epg<2e?7gH@_nAHQ@`!zv2Gl2#qEOsn-IU&P4sqHI09+DAtHN=dNy z^ebOqM@Bl`>}|aO4r8{KYtXOn5(*Nxq1Ra8D`;0#3L*Nte2V}M#8p5+Z%I4Fb+ypg5_q6ZtZhSPu4Bi$n z3G%4>7t6qbZx*`JAEw>hSMbcq)|%uOvM`%>Gq$_`&d|pB@zpf(C}}ZT(1eDc=*eCx zcoBaMl(2W={9xqmldPMw=41@4A7gT!V{-Ltp)e<#!xFCIVwPIfaysu05Znt)R+|{x zHhNc3>Xn?QrYjJ_<*rppGyW440IctL;WDn3e1>=|;H5L5Q9Sfa#Np?IHlq8TF(PwJ zH6t&a`eaOZ_#}RiE2pH;(6tki&a)Al%iWCs^k}u;dG=U9Mg^qUqZeeSW!3>S8(7vh zVu-3;^SRvKLYinwvQM%p(fgE3%2rP`o%OYDbz#*S zvB?QKB}&`jWG|cJJ;TuwT9dujB;s3qs%zBo7b*R}e|yjUj=EOroedkA?OP&HF8^h+ z(C|A7nlKPcI@{#2ksW(Xj8I$Bz?=2k9l?}KD^xh_IYO2`gFnA}clq3(lNl?+nu=;se zyCsWl&yv5Zx67T6C;&`tJqFboOun&JS*01+8_o5(Yp|icVQ5H2(#Xnt|JL}mj_x*z zykhEfe7J?YQT#E5bEvuov1Ozq;~&i=TDOdesBCKZi%3weoOqW>^H`F+=f4tGcp?oC z3*&ocLz6FD_u&kK!07JQF**ip^cYAtNSC0rj2zua zcbDW(8l*vx5(Pv-LID8_IK6VlQ#jsXWPin<& zbywjzCUbzd1%ED=CL45m_NS5gr>B_RhZ!@9xIVK~tyi!|zp=r;Tk{d|MTH z=T&*nS_xU;G&I`qX?P4#1*&#vn8`<$9t^6B;(NemLsD?RBBT4@}r@eqX!N1aR# zTA16a_oz-3m|b(7TuL=dB*T_@HdJDGxR}hT@202DtO1})LM9?$EHGJ(AiZ80nO~(R zHB$O}vi|0d%e)bst!wAvk+jxA^P+?;&&TFnY^7Xp>welQy!-0e*D)A4wOGE!Qm3B6^IBU~RG2LDT9MUBf|J$~j*RTS!fuux{6HS)(_?Y|{4Sy<}r{s$Oo zrvJUaDy<>k50+}oU$J|8UVq!2%)Ni<`199~^MkclFP=TSyCbAD8X^P;<3-onxrPSQ z95FP*&0Otb+<<#}DGI=YCyR2Va_WY>lt{^WZh#)~IrO8nw9z=7Wfqmx@mbj8nq&3y za}gHgUF?)*a!@$`WLj9j)EHFnce*H-l|K44&-gJ8;wP&O)z~#?{C8T_XI*tWMeRNG zgcOpeYZCqon3@rnV6I9*(r3B$%5u+6HQet{em&AK%j&9-l;s`=0qi8#@~zhHqw7>H zJ2L-M{?(X?`U2}sjvVtA%6zRSF}EVx=ANEa5nD=hH5i{P)h;%T;jG|BJ&eJbN=A9s z(8GGA#aqlK7!%Bpp{J{BJ>^FK5-N9Vp=D&}qGOV^MB<)>q^u=9ui_)bo92JI`g3TV zCX)lLsH~0w@Nrr}_k@USzCAdA2O3oFrqkw><<9e4$I_{yYYvgvIhAXp(m*LHkl=Z@ zNrDmWcKuPx|9cxj5wuo6wULb(G2T)IA@rk9deM|rvSB8qyGOTePdDUoB+RqH)wlhaAfI1UCEv%-{NR%@S| z=_NY#J~icx(X`v755C^Cgi1PInJ9k2oV#S2ov2ds(g=7Q93|OCZyDB$#k|&J#_4vA z0%Q`+zx1fQH7!N$d2@SpI22t?ifsB?Jud#h1AiP5%3Ax#Y~`)*@*QuYMBvoJ51bWwo6Bpkw?6aP`%zu_QX$NV;e)D8Ouy zJ1nhF8_aJ`_nlJ%Af=`U8S@+NolA|E=`2fKU#d&4ZFYa`A6H*`jgMZBffyT&1Sn^c zOsqyj920VdHu3T}eJvnLd&h?SJKM1i3iiS7`9paWupLQmT5nHJc%%t5F!BOAu0%sz zKXv7YPbQwilkb`HCO(yJqwA7q*8ES6;5A`}>woL&0;TdjiLU3#_m}QQ1O*w@OZVsL zu;Lu-A3G%>f=wxMm-~E948nXO&l{e@Dez_te+Za*>&s^`WLbZO#~^qn=9Fq-<;?>cz-J&w=sy?V26eP(%>@r1DN78hX>`8UTNN$rH2$`r z7L-l?RYr#~#_3`NC;L^sN#_b;;PG2A-m|H?k{|Q!ZT_lUm;r^t+?rvAt=SmXNwa`} ztxt3KZ5NfF6S%Db(z7TMJ8-2a9$rr(^2g+r#6Qu!X`vO>1oewB16l=Zasvjg`sX@= ztzsS;e1w^u6uNp=WS3e3ik5GuRew~jc6mp-PlC-g`3uT*UhCap(h7ZdecnN)w#K#w z9&*On%{6K>YwOq0E7qg$k){kEA6X3{c_ zIAj%$eB{)N6by~lR^V4<`S~`O%-9qWGBW&z&UD&G zdQl>{WEf~2L+7PwH*~U|(sZAuh6zamfTYI{8by@T6qXt{5I#IhY zMyRs7w?QX*p~=;46|70n@^+NtYmbIdYsmYayS9<%-HQw}7E8)X?a>5_x2e4IVI5|z zBMio8J4cv%B6?aN@z=Vt%~ne%08hGAN;|9o2?AIpgNppXk^o+qR){J!qOD9|U=kO= zSAtNRX`JLA6Aufu$w?%o8qK(uLh||tClFK;l!GallMkuKUK$Eh{E?FYK1@@NNVkT- z*gtGSRymXaay(|0{yEUY3_!7HrbUD^%lZ*A%hts`>X#=D>CPf>v}97)`|Mt`5ltb! zL8Ne#F39h{yOB&ACWPGu+Q0p1*xO;{T&AV#Z)O!a8AtALbgt<m(c)dbKwElpRG) z!M)-)^+&ldF!oCvk~r$Imr=M~VCu+Sg%>_#?59`ZfI3^s^!LeVQ&an;F`6*r!@6D^ zf`D6h*K3q0*{_>UKxgn5&hPX$S>DO6N%Xs~E? zfm=_2Oj0(_kh-1lRK3FdSuY{a3d~XeiPS@ZioFU@(~vF!-MnXJkR(4`02}G>>p@ul zIxT#_AZhK(gjl|~$60AIr1QD%jkBviNw6m54?a2Bp6T(ARO;hf+Kw3y>($OkCV}C9fFCrBv+GCHPuYRRj0Z0N)H$; zwZ1fS<&h7?Fs5*>+d=Oz337+W&PCd$JJpNi_RPi3H`8h(E6J3agx)p?fZ!YzY}|6? zM6$rwhH}vwGaBg!8W2_c@&E=j8gtfGC7hmQhcpzpCrA8~#;mvr&nH4oS|Z9z|9hIo zIi(s;{!bW|K+yM%KLZY4IXS064H$X7i{!d&o`o?d@Vsy3s=i~-|ZvyWv34!wCJuv+HSV(&+0gtN(3FQ`%yX;z&bw~glR zKM`Kv`z)MYO?3A|m$D`%@On8_I0h(+cJ6`B@hw`rd$ygdJvOW56!Gb@bu6(>Y!(M6dc~X{E@S)&?mrz!@VTKGbp(XzK zut{ts^e0^Fq1-Md-}0|@nqNcX2?X2=6SL*gQFns8iiHBdBg-!#krLm0wIY|jN4%E7 zj)i0aym$6{5hjy9h{@5XX#$e7p%13Z|F&2oH0LbD_PWKm9<9j99}=`Q8~k(=xCMAP ze#?Q?A~rbXeVf?MD9SQcZZ`cD{S4)oTPRbf+!Bzg%!xU$9j%6?M!ck_<}ls6xzx?w zky^uOuHnX?yaa4}k}K!ATm*x*=;`C5PZXif6j0pZEY9^N>Trq}_pWBy zWLgPgDw=ETyT~uklfA`!PM3|7%><+{-b=|!Yy4-nniu37M}Bg213mNbk@nrGv=#Ux zo_`n%)}b{*85pZoHrS@vtoWEYiTopPP*l27yWxnx84>yM?PuxiD2~Z8;bA~~nvTzp z?<}I+APaQ$WR?vY6xA|sZ{h>xIr;j0wlsY?X*_A4Os6r9Sn=%u0$oz-op+XBiwn5+ zP7`bPh_A9nzXf+pUUxpa&E{?w(iJ9EWfYTFisv2qmw$X}@zXR9ai<`%eWG~Oxc3H^ z%+LRs^lzo)!i1Nlurse!Bjtth=6b^~f`+MRKnTHQ1m!)ucwsD<$0oSeSi;w=gWRyGocla=ymN?fM><1C>kIM)-rt_ zyy$cwe)#(5f|GI(ET?WpnMjkb>$9$1V2R6kbGhl#CzVGNV?G!6KX?GZwj^aPw09HG zpU$0S-t^hErt+}e(E4aUSz&+j9WNp;Mb^r2@}YONvFEa0a(7pL62a*M?J$})wmyF+ z#d>#L!Zj#LL`Z^QU~gUe`70mfqmV>`f*Ob}e?7_fX!lIN^skAoUxr8!g9D4`3Vdln zK<})MRo#SPGjGRbxt~vyxMfzuEtKUT2r(D&7!$xbAVYF#yR zPmhkQE#FW_G_63t?in@lH+pXm0N0i?JOgQWU?Yj{%~YjdIrh;0VDg~Cmnpy%_T)^8 z^f$EW&8}HwlBrGn!eSAMUx~jpGWZ%nU(UCc0(S@!=&A{xNy){|(W+D#aNiM(iW^a_ z=}RD-+;yTRr84b3E_9&P2N9P(R61`K7oB--NK!IJIbM|mj`^y7vfh%W ze~A2kz|v$ZasXa4oR#PE|*C83kYz*%NuM_iWBF{TcXhxi`^$=Vh&XkIOd$H#E>8lwRhwrkztJA&;b zJvo1}i5?qf*7D=2xlj?mW`JA-(WSY;`H2DJxn1RXbrnYGzw&}ZHScl+@P8+APgkX0 zgl=bT+ga&tNt)_b@74 z1xulYKP-z6;+5x-CB(mTSAS8`$|yCWxS~&=p+la>k*8Nu(k_lPz({k+*wnaY|V7*SiOsN=E6E1Q4E{S=j5h{f(FXiW2pqVyJ2! zak$fxdta_$U+&Om4y8gg6hXm%ff_w1`?UE;?&ZI$nVSY$bQebyOX{G7KWjK5e)26^ zLb_(G02m~4E`?5Qp@Q8L;VwQ2I#RWCJAd3A9AT$k?HR&xrBz8da#$3bfoe$f) z)D1eF1aDw2uuU%a`?NYK&*TdqP$onlF+O@2-#Mu+An4Tb;-b@ui(6nKyBP7ZV&X)f z#V^Mqdv0F)zEhKg{l6ZcZ$n)d&!0X{JQ0&Utn=eO*@0}&CQ$FcJ18T%)ql&8vKsu+$QrE{0I+A|nu6r~TKGWw+wZbst5 zr|YmPPY0&C_nLPRh`-fBs&q5M%Cie<)8j=!o<%!7 zPMPmaZ2If0A)B&lC-<%FvB%H8nMVW5^byah>+xJn}K=;&lD<{$7 zRI2d4se|psiR+H4$J_Kg8i6tDw_3aynQWPnwT4;@_AunKO^tr9<~-t~!hbn>r`Af{?A<8dvyg9l@e9o3umJc>iAgIWwXTGP(5*#(ly z^|-f$G?3@ZFIh}=jqTq&xBs*jO3hAv|9-tYe`>hUn8BQ0Ok2(U>)5B&gzzxay|(&E z;TKHW50P)qJVjc|d2h~J0)qeuI;KZ1ze5i0H9w*JaAiA^bxP^}kB=8k{n2}Z!RI>r z@n?4BXKJl;J_&0F^`CuizR$nyVpYq0_5JCO(7Vc_zF$ve9}6T9r}CfXJ)gf}6FAz< zyy9Ybbs73@j^QMVsydslIr&Qx?&sj(S6f{%UuRzelG!nZpAnjuFUF-<$~ zGu_pR=|x$>^RdO9K!9t*>0uhy@* zXT~P5DuvyUOIA*$!}JQ2agtTj*}_(R;dcP3>e+m0kIey`RLy*`@{`{;0O{JP6kxoj z+o!}NFsV*=XNO!I94t_A)9b-gWvYbM<@(Lt<#fbr)imPn#N$MvDd4!?g>JWX&yqNC z_sSnaQ4l@{SL;R{o_iakyXC#!N!GJZ2pDJh=u1|!MF~XQd1ndoyspMr{0Yhe*JY~^ z6?L~>$T=Z0rVDPexu(t!?Exr@4fhUd`;EE+OxNB>TRZ(y_YhDeRk`=#(`=#AGisH- z%P%Vp=4ofXf=X7**+brR5~^S{2^NIMn*qa8b;oEsHS*7DNeamE8Lj!NBs{d-uJx;_ zXn;D5RDdyxCyvM(L^J;E$`gMV`{b&VQ-h=s1SfOSv1Leq#?XbBCe!ocM}c*;?J0!N zq0)2;pwpM*yr3(YB}Q6Jx+RlSpEYwx1*B$^@e_~sQcw{;<9qjl^(nTDw<-XqEVO}+ zQ?{86&M61e9FV0{<%5XV*Z~=3K?>K66Wt@&y17%q+R+dOou8VT#@C(TIJd?jjYx=g zo*9J`tIpC^YL#Px0~klA`LC>*?8g_2*yIA67Sa7!OpcK4%BgO18#i@Iy<$q|z3prt z4h8Wn8wfe7?>nft>YP17NBliFDm_5KK0c=K26(oPQ0sZNO|U0$gq?O@aA~+Jl1V2&X^@ zX=KZ?EYL+o$tg`KYx7fjnqhB!$y}n?e8|Vthtvvl>!#h-!P0)x=~0lNm2a=^udY{< z#HN>9`hq=CcS%ogbS@t$oj6l?IQeW6V@WcwV^U$q+1kDu3|(y+@6e{QW=ckSapmW_ zeJsxEelWoe4Po%3Y|G- zPN&D`$UJm*;W8joxW?zkqI;$dLNYc>=;8lnv{j;5BiogKYA+Ffyz(`4%0zpYd1ovE z5;;uS;_jQhW0wHA&q=4_Q}b zkc}lMB&YcP{`nY8&=;rgS>Bo`jgJl=dwQYB0<78@Fk`A$tI!*=u<-5k->tI5a1Iqy zJN*}b_tQCn6=c{!P?>Eu;H(CHZOci{yDut^A3~{>o_*0p3%2b#INbCcF zi&4xjWy1bSu6Udi1#I>We~%>L`FIAwf4ylI3B8)F$%0Y?mnjjzk%8&TaR~?$sYH4x zLzy*|a#N2Pkq9CZ!>a3wCQcKvLdAdLAxvvUK>({?`ejN)wBY(xD&KGm;YV*GK$*JF z5DFDk02Afg{bD%Za#>8XX4#!*E&R53FI*0U4;YU!prI{Xp0Sp~07={-hwvMY(SbJx`Pqc_FQ zF5EO(u5z+Vp)~#b$HdNT&qyDk6SS)`dEGkp|0!#J8P9Ri(s=T+_;6 ziI+L*&0Mb;^~A%L`nu880ba*ehKRN)$NlF6u+I>)nzv(uL2b!ip88XY;3>hjI-hzi zk?C$W^G^$HMW>A}54Xk=(jh?-Jb>@O&Geq7F78Yz9S@3W<*4EXW8ri!?UQMYDIIAG zD_C!MS{qTbN#8jp((IeY(m^dL)54eDXk|(PeqEizJDu`gyM$%?WZA6G{qDHV1yAw* zEHQYXcwEGAwh(+$Zf;LO_a*E##fP8M!T()0wM2YN`fzg;{Oabk<=Gv@4gp2T5Q*rS z3(8}ML?~pK(z`W=gL0Q#FJuJL+!~k8y+P@b+raWy|M{0myOO7QaPAzz1Qp>u$n%hK zo~71A)a)MZOx~DSNgK|M)q!<1WKuTBH}x^4Bgc1(NfpsHd=l1yOGsf#)7vj2|7M?C z%yQc3zt-%Q-XZ@Mi=<^UkkC+0cH2R4%NBCmZH5c%h;M+wWWS9Wu*q(m5nBU(f8QofzXD|tI^+x&M&byl!Zs7w4%hmAP(ESArL z;u)%El;Z*0fI%?ksIG@ZRuB42?n%pR`cGYR!HnqoELr_Po5cqRbV5V;C)F>daVK{7 zpN-vkuiGzL7>M#1*NCk5!A`V|O(J(cV=5R^E;76ADgP^;4g|#C`KSi+R zOJ)1D1epe%i29FDiF0wqy;ta9I5$)Y;VX#oK`ND#WhPg6U6ue~N*|=bce|L^A zSLamG_8Z_`RLk8XSlZ9bE&uT7{-5*}4V4y1!p6`AM;ov6=jNUntfzyxm9Us$bgUV~ z!+(l@Z!FT%&PiP}y`fyYiQd!h-Yo3}-Z4@Cs_om~V;)g%CS)|-2{gvd8zz&98qXl9 z6`q-ewWsK}gl7`atXfRWwC*^vUJDqBX!`nQcLIR+N+h<*=*2tXYn0#b5y`M&ZYpD+ z_k2+Ra~8mu$`dX^Q%0wUCHX?eSYrm(W0P&e==e+Cxdo7%VtRw|qHrAt3qor;>YI z_4Z=9JcPz@3Tg?iV<&UFbxocnL2xD=VL1s=567k-=*n1u;kgEA7((SI$_0)>Bs~8t z8@6!CaVg0}ugcVeV3F^U%YZ)sfdJiQ@XxAp*Qznbc*a+R_LMIXKogwXFe0}WE_w)Z z;#7UB#jY(L<0#Jc<{k)F8|luC(^CZ%77-S{d^s1aCA zN?42qk}N8+loABd0-OLTWj>zcTyUj^ncRY+*@#bTk`8Sbv!cZkluHny%GW<4Be@@R;+iqW zD-KyoO1D!ZF=7?res(n^353&86N0+5IB~<0Y{u+X1ll^SD(?u9Jb`HHD{IOMH9rf~ zaWIG6%XsR&c+4o2S4-z0_mUtp2ziJBhuZeW1|onZ(v8_0^d~ zdL)P$0^-bIk4bp=M#Bs_Zs!;$#VE;NZb2dclO15skwYpJbT7ay7v4m}|D+~6#nRLM z{29p`6|^|newjX`g1%`80Hrmk@Ck6f6jTfljT_JXa=@R+rzWWp3$?Q$<$*Or)o#n_ zbaxd}xtO@QB^-vS;Q=bCcG;ugfQ*B2I$$Yl%gwzeHFiRh0Z=mxoe-L(MYv( zkA+K$S8hozbJ+B%Ek8(&9!eCu{ENovO+xi<_HbRv1TRMM;@KB)u2Z^5Lm9gek5Qjg z7)}b*smdQe$suIwD>UM3Q73q-e)q!nja8?FGJ&oi3LZ!m=G#fA&G8cD)?LC-?{Raj zIxir3$F1hxfmJD&4e2m)M^PNX1Va?8#h0u%2tmTD##^)|`E4&0NkJ$A6}|W}r9_YK zZoCrhG!o^c%r4fflc0<<8Wvv~&fz@iC|hKKx3XZ>f7KW$uspyV{9l{Y+cAKVOw}XB zD%dJ!38HeWA#rCPUU?R1J6)X$s1jMS_SLoL*{BW_j3p5??!99C>QobPR5N!~6XjkL z(iMEjTl-uvcAd@=*7i8zs5T8)mk#uK#Z{N>UYDC#mtS93I9*qKRQCc{UnW>zp<7?& zUSE?~U-#Q*l+@@Ur&ZI@9Vn~5zC*X6%e~>2PPa9zp?|tz@TdVPjh)(k{z|v8u)1M9 zv2j8+dEva;g~xg|yKzZTcSMb=Pt5`1ZzXP5?NbHbx&}dCmY>Bd460IxfXw-5o0sdG zXF!dHBQzcXmi{iZ0R^3u@s1GY-Rg3?k9ctwcD~)OK21^WC zuw=YDZI`OjeUCDYFbr5V|JbbZbhCwRixslN8dA)z)GVhxck;k5@Rp5EB4nm zM}V-YGP**F1$=qbrl3bl-bu31rgBA42*AJS8>KmHSERzR=bW2G<#ys6LiOoNM}IH? zxx&SgBanjF=3cx-{auYe^+q;sm#bU(y` z%fkwXNiQZ1e%t>e!${*eX`dFn!xe zU=lrAUm;pSE;=s>AyZW{+B4mqr0S|RgReuXF*-o!ngo;G`_Kypmpx$dt_0O$~<$7SLUT!9#Ko{vyrT4oR;=fN1A4ZUr{m1;Ktw0FMV*Zov99AnRRHgoLwp zLgYzgva}nwt}l%Rh*XqF6aGcQ7%pZzrYNdGAUGnqc~M|I1ldQC$tWa??vF-Bl}6@t z`AfF3*&&6$qsVIE?-0pG+JhCP1jc7#UBpaqp*+^vaUsqIcEXo4Z6f<+08bplUm}i9 zE`z^YAnj7FN(*572q@rO`XBpw!|`EHf(RbL9yCkJVgyYZHl@_Uk>|0;VW))AQ1K_q zByj5FaFf5^)#PePLO`VXa0(h$CTx1zA6GHQ^a5+)X)#|ial&?1E3lvrr!1Q9bn=d= zei!nPHMDhUgm_8#X_f?g47>a~=U?>wzylg%BaLY8?3*wO->Y%lN8LLvL)g<837YS-( z+UR9E1k+uWGSd}cxHVQFPAkMRDDByxz4T?hr4Xt%!dl`~U3ZuBG@x2qIX1QoLh4ah>wP%SNx zw2ra)i~iLj@D^8H$cn!S<^b(-pE^|RGnIFiJ5coJ(>I|x1^=a`_zh8o z!9v1Fi2i+DPP&$S=p)Y!8#atKlK*5#UFR?xldTj#S zR4!WeKZPD0H(m2MjKIn-VI?B9vjggv1n=}^q_^aN-DOLRM0XnzQl#XS6IpEA0BZ2! zHf?8HIzbOJ^>3a2>=%}w5K`c7;7X^?@na-~wp}5LDRog26i=dq%Q!2)>?O?@@{vZo zc-DrSu7y%*;WgqS)$4Z@{-dp({g5qC;v}UQNoCRxR`)$(qL8V05M!zpx39=4XjsB+ zWFrH*TIvTI8LaLrHh-Fq+7BjC&G}-;7vt5G<@ZkUGZjm#`&QF||L5&c-%T*+;jDNi zou8HW!6c~0!M`!(4a>x#SfMl|SoCnAY@ar!8Nx#Qna9_{g*IZmV84@_$nL)D$JUtU zPmY5Y`KT$Yp`DzsUvf|P(YdTn>_%Lx9D-3bFPe{pqwaEVs)r+i$C^j1A$8@@;rWKt zgh)F z>DK(|_Se&-iqC7qw7Vtdl{RgWQI<5MRzfC2Z;gI<8aXpc>qpp< zpeUq=yc!QxJ!b}8uyJr>q5KpSLec@gVL&iQ3YyOcQo8K|eW**-V!V!!E&kfU8A?lr zpjUhN>O~n{ZuBd*VLe9GODvRk;-H8L0M7sNoxALgw3`rw1R1oae$NTxB7H-~`%LDK z{k$N`{|k^dZ0QN}WAFpNQQF8zUUQn`A1nbvc6I0H-1qp)G?*pnJHeY= zn=H$U6weN=IqDSo2szxi6fJ;Recwn6%;gQvTpynadz?i&uA|zpUX#!^B6h0|Zh)VE zkqwjL`WkkV@qN1xZF)WhsnQ5B-@E+QbF;6YC=%DAD|!{dyZN8Ty*4j@(ohj`+1Wo` zEr*Z zkdq});qKKYXqPpZ2D!@E+|&gU4q|)Rn-7wN>Hyjm$@MPlNAzZ0)kd79Ox30W6$1v0 zpS}sr!K?&FSL|n2H5x=}EWE~nBIcsLcVxV!U33g0jCa1V6BnrgF*3ll5;!H~1k`qB3U5U=?iW zi{yr?Msj}AAtdH}GW$-_QP)dmQTn!}YKV7P8bHuxJ5Jxl{;9G>U+^R1joDYOApTBVq}z$s8om%PsR?J2NiRr21Pbb@psz0Q1Cb>j*Q@(DjC%%oo<@hKXs$|iGGhI%Im=< zdzQvvT6R^EZIaR`TB6NgXOl8k==N*@@C*6nBhu`)f?8KG!Qwlx(}1$g9BL zZnYITVea(}sosXgFnnwzp$sl_VYU(vZ$MY#$4bn^GoXomScRk>0ow;&UR&WXVXx%t z#yBpb8-c3sJB+SC01$oii>iVEMEArrS-J02c#0$UrZb1P!=oZq*X*XF2VrJqY&Vm5 zX*S@tS;5YE}w96%YFzqSuPnZWmAwIYP`M;-l?ls2-!=Ldr%MCs$12T z%y8|=c@}EMKQ8I__OhpwdvjlXx-a2pm_6Tjce}BnLK0Xf`Ol-n6><;0m;CEdx#1c2 z^#Dy-7ip{)XfDi6)$3X$Az#MQTZ8i0TvvYIuJ%Ntr=2;||8zm(nU?ze@ifW$j!ycz zk=Q+wPC}$Q#pTYJJ3tgi*Xyr5)8{d)cdBq&5z9TII6hi7)lx zw6}QUJ1i_pk%N$2x&mrnF@H_ZCsM;BfXO1eNZJJFn4D40WmB4uhx6|=IFr>T`IMFHa|0}=TQN5=;8(ZDr}^EN5`N|5av z##v2U6P=M+>BuwK*%2U6W&_0Kn=6;g-bV|CMrD{oU^E3kh1Eq#GV9d|eTEo))oOnBBdC6W@i@w`0%pFRvD zGEfBQAGHzk7{y1u6tr97%6xHH?CO@|=%Td!%OGUpjk?(DYW>4&dc}>ZXN_lZD!{wg zYCGhve=th|RyI95ENeuI_~LodAxz^zd~K+)?em9Z>gg?=UmuE92Kvvw`!PmfR&O6;74JELd*<{x-Z(j zeJENQbMZZrQ0`t*`*T{bmVGB}a(;p-8`@sarhQJLl{hR>M{n%VB>&YmzX+_tS;%?1 zO<<+L>{X+=oub42mq%xsSioy+Mdaj%u_Plw>E%QVF4Of1v+j<#-A8S4ymv@}RV^CK z{^7`|&Y07ur{PwW)7ry{k@RvrPAnRq3Dn~|Xd*OhUrU*fGt$U*Dw&f$7(O1GPSaO9Qcy$jJHS^pLhhlgNEmFDl_J zJiEm(#eeu}atBb8Zn;hKdaP+sP&viDOlOjJXK7QwQi_gm>aQpzp6g+y2<+BdwE*Yy zL&xo)H?!lG8Rzll$#%BY>!BIzKy4+~kHA%n@dfv`WKhk=-1VGcJ!iknV*Tu}#4ow> zOIf^q(JEF1^uDD3(Ft_beqvy-P>gb_n6X8FCUMwTk_LP^n@wiU&$|2d+P~Vr_>^*V zt)0ojVpqxx_+(uyw^qG{wDh1HyDUes8K<*kRQ~uxvfiG2F~df}RIhTcIJnQ#3;O(_Om|Qq-sgJ**1lSw3>{XRl zxOwax+`p0Ua!Nz9w#HP^e;V;P{NPXUd}?B^fGPnejmEZt&PDlEgikCVcGo)kM_|2e zCP}H4VxLXOxX4rAWWMknrh|}4mA}5pw*9*fx+7;JRDM}C*iUyt&yS|u?7viN7k!ed z37u1&|5o5x1QmT5x)AZ#zx1B95Ox7o8){5POh%lgQ;CTz9oX<(y^ z^|94K*xKOVtNL@+69>L08(q}?9W~ac9v?DhC$moShql-K#hl-r8vL;SSZo^H(*J&V z^vA#t>$51noA5^X>2V(TBIMbD#bB@*;eFEgWcFItHfkS_mbE6W%-|f=CgQbQ4obkznDZo^aof z-2}pLvhX2teK?R6P7w>IEP_*I!S9_6Q8vP!yr#pns8M} zvMRm$@Qo0A=bxPCTe8E^3LKZRP?9caXDR1OH5XQbQy;-)g5Y*Uz_18@&k_D`gg_%g zZ~%cCMZ~-r;RqNJz8U%FP7p0ZNGOj;UXFSGuoLF05OjtXtVA z&zFa*s>Bs};;KCXxMbbr5Z%1i>B?E%rhtO7v4rM#x~-IYMTbOHJCyn2GkK-aNn_+) z$v9E?OiqYi0r^xqty0^-jKY?JYX^yUFVVowOjG4_jl9kas6LUn{*b=@I97kcQ(wwb zdoo%7b&>vbqyEf*{_L#&+&lgG6a9r7{Y6UT5-W0982LsSxuTC;#UkH&BG&eKC zBIITxa%%wjZWg)y4*C8B`QZk+Lus(fYOp74@bMo#P~YGa*5I?J!9lpeVY0!OB7>tw zgW~~%lUak)cLrZi48GkMoKYH{vl?F92^)S_HoVj~yuun@dm8=-H~g7w_^Zh9ccbB- z0mGYF!`pX;e@_hWZVU;ij0o9`h(wHtRg6fGMx@q8WL`%1B8Qkfpw?;HnC=eS8EP|p{K|zoxI%^cY7m6VQ#h8L(Dn>Ckp;!h{taB)~Z4~<{ zisKdqr9yMEp}9oR+$v}o63t_c=Ji7JMWFdp&;rG1!6vlOAX<11EwYUkJw=P%qQ$9< zCD@E5MU16XjHQvrGS#WXD%-{nPK_Vl8pEkfRM|`r zA|`4oChABN4QmrkFB7f12ovoT6P;oc-6j*gK@V${g3*u zVrqgkHMKT1^D;G$FttcAwJbKpG?`irnqucnt+!2WPE8-(n%YvC*|C|~ihsBwu2E?Jtu%jy2F(h`}8k-v-66T1V3PesNW2c+2GlSUKPZ_2? zIj?z2=CkV;iY*^jPI`t7R?_enCuHSEPE|9OjKa6sHZ}u)PKfPl=8a5*OmZ{mczvrDFIKGMCD?%vHh{#Zd{FZKm{xC&5x-yX}Fs5XH) z7r1i3EA7d!+p?z?XaqUx{kMM>;GqBZB~|FIr)8$@dq>n?MPBw#HRR+3oWDp&NeD;? zgb4^F{@J7L2nopV2ms`)+O4I-G32y@*s0dC(dRV(-yY4S%0n;Z{(st|JF4dj|JkG8 zz3!-4cme<4_UP%(x;HgO6}rW`UG=LC79H-}(_IZ~Ew-bHYaAzGo3{R+ zJ=zrdvU$5dL~eO*=4H!=SCPaNIr*>=_-G8R&|5v*Z+nw?ZoLxy(8k#5JSmU){78bm zxl*+xc4S}Ymp8S>4K{OqUB_#!4l^al{-B8&O(m(Zh%7n8hkH>J1C2`UXR(tiylK5f zN51dpyzXfr2%;|YmjrZQ_io$$X!+1Gb4U3QuRL{P`Kp3pf&J1Y^;n8ttAC&)7Iw<; zUyJ+;czE2OPkgqjKa2O*BguJdccLj}L-OrzeH|?#OW4eIy@xf_IrUz6J#pmP5~DiH)d%d z;gzdf8Qh%y$9w+&Xl(TmRzS#ju>jkT1-R1#$Ub~P1O5@72DY6Rq|ChAOY&cj_O5GXKs0v>JI$(jJoFmJN*qOKR{+M7}_@5Rgd- zRl$UTH0qu12!NXE&HCwmw4VMnA|hor`w&MXv2lWMB8PodJ8-vJY!a;2gGcqU2P7$J z@5O_1K}*_2;ZJfd-y!}qC*fbPP}N6*e;|LkA$|mXd8BoJ&toy`PuO9V#wSU29}?BK z?x&L>q_|o*JA=uEYBs%Fx>7S9k=PF?J^{6pXWK8f2o_u7r%Afb(`WP9O@sm@a%=Fj zY!Q=!$?6Q!7w|S<<@g)sTRjw>uYE*F?L7J<(7N)UM;aln)##5XLkNC@$6P2Zicyd< z*CPD+R=U%PQ!MfA#J+cSa)dq<`(%XU+vVuaZ(y3^Z3UFb;vmpV;$q5<@2}A!9cSNg z!#$A`{M2J!bz#*Lzx|&!+t~uFd?d{KFEy%DJ&eX4tv$^aqF74)iaS00TRTT;-TnD( z6XkD1AvdY7+v=z!l3(zB=$NP0Qg?;2y4RzHtoKB;ou4ZmDlQL8*FPDxWi~8jVfGR5?i2%(X{n#geESGF1P%mRU%jv^e6GUmFXZ?_+N`FGp zcnEp(ou}Ocnw#Y5ovMk10ABbP_bo{(`zan)bui+@NxgOl5e?6T)>KXvEL*$|d!UgF zI=@G^p>fB(Dl&$raU1{4`a|xMI4u00&X#X(Y7X9>9iHz9Kq%=Sv_gpcbz)Gbx_o;vV|$HJ z${yo((f#P9^BnaszW%7$)0E5aG-2W{57g<^)0n-iRXuwVMEC$sYy|6L&AR^~?k&IK z{JSnsAcae+3U_yR3j}v}3ju;#a18`^E8N{JxCaaF?hxD|xQ7~k_x(IQ&-8Tnnisu# z{)B7o7vJl1_TJ}ASdNr`S*pBa}dkWd*O`+0VY0TnaO&X%*V(Q1jWEvNwzV`!Y(U;@pSkl$zrHU zri(2jPwAA4tGZh;DTYLdvI?Y!O8kMq^Pe)y69}wu01Cp1kR%vqh;z*QngbNiHE{6r zxJ4U7nyrSkvryhH^2jwH_;0SqajpA%XsGmzhFJ-TX$DCcx0qA=8G@X|P8kXn{N}?D zFv0LIRLL-t)ZKJ0R@x%M@2*Rpwdcs~2e+4nRDdGn5 z3k|vZ>(vCnq}Z*GhiO`*f!Dw=gNzv26)N;8xiK|dP%c2ssQai|}u zvNnDUmts(LgFyyoHNb%t+J{N6B0wArCGKP<1At(=-AHRw!xVBD(FB^JNjm62ta;e!PEosxHG8r|H7&|nk({SV_fZ!LcjFS^DJl%8cp$Kf@GrKC&`3E|4}Goy}e zvPty1mfa{szvY`e}e^+ue|8H3(uvlR$h|5?kYb3a;SBS|bScWGI6pmoWt1+Pm7KDDK} zh0N~k-^4D|jAR&_t*v*Hj}zWhf3n~EG%}IiCF^WZ5K=|DM)`SNDy1T?O^v>iTZpb0{_j;_ zS8i6|;T^p3I`nRyIs)qei9(&iW$aUI;`n#dd6wmXOHq@ZdK%wX;+~K9{H#{t-(LQD zyMtBTeZ*@m?nPk!@=|8w*ufd2Vo88D5kbf;n6pja^NKmL{IG5j!CJfqCGNoAbF3`9 z&NyoHU5K4fo+IjmzZxcZ4?!9Xg6DYfgux5C0~l>e+K_p8era(7!dj4n zXoYty0n?;i&0Z9iz$?VihXXeIYZmP~3XLUD2rcMlP7Or)<}NxTLB3uNV7l&6*Y5c8 z(}gHOIn*m@eGoN(ll7s7srY)`oHVrXosyKD{SsFiV%SM^5Nu;4V<(V*1O{vbhA4_H z9%x9@UkpSdCPPfR302z{?wBWvb$ZhMBN54Rgqa0nwUKDMS3&><>`PKHU95v z>41*HnPwpIC2Q^i%-_l2Ll>@hc`6w}@|uD6ysB2auubiXV?YcjyfA)u`p1PMw{ z3w4y7qQUyTO}InFVj}YX9lL*+n=M?A1AJbDlCw&bc5GG>@JGUD0mRUzFd(}X3sP+y zfSr$sonC4fbGlbc??yR00Ep*L*V)6{Lt|A*78#~Wh9Dk8l$>A}PZP{#gEo!Q4HA#k z!u;KXq9F_O9!VPjJgOA%y74%oU)wWtY-K}YD6jSMre4*}3e_wZBqJcyd)o8x!?DFLe>l1r4(1Mx?`DTnKPoR{2fb$#g3Py%VgizZS|BiL|= zbISsM(c4enXF?7^AP;a-L1rE`kJP@bhA6{5h348^$Sh)3l2vNwF36xJkG!oAs12?g zBFMijj7ZAB$SYLqNo}hG>XgeM=VdEA74gjoR#gK$kGXoTAvt;S-O5 z{RMperJ(9u8zpiH+pvO@B6;;q!U7<-n`x%NG>_J?S{giPIzQ)B8^}XN#E6t0Dd!lE z1KYTSixZ^w$FUSKPx{%>vMa*gX#~snojZd#0t!iVRqOZau6WcU)Sv>be2k%48C1f6)Vm>Q4v!5H+ltP-3b>o`n1K z)I}%yRBXX`FX$7YCMe#n+1I_~hv{NwRA>N)G#3ix4=`#f!x3xBQ#r;Ho6Hap{{)Bn znrYB6IN~WOdhpvJdC_LEI;CJOlea5l1r7+P#005&!+stpD#46by#S&0EWH!IzthfR zy`W&jBG}LWwoX#UPoljc^T5a5vCvgFgm$`KLBCPU23y9vQIC;Ol2WmI^6)jUQZ#>U zFVuae43`H*u43DJx1`s?R(fhRxnp)EhbA^>Kv5b>2T8TrTP%3P-erKZRNJg)8>MkD ze=p*>qPD)fB8Fi|lk+bS1GQ6#wgdc&bs#R$@;v+%*b5~z;N!L`NV8E!Lv}^$jJcU0 zLz`tWs2T;#Dpya@BjzIyF69sbd6>uCt9__#13(>7%j7!BdoVCtQ=0rDirc_HpTUmt zw6-D@tn8f;TkQP|VA&~*0%t!8@-BXMSY|cX)#rtL={X+;y zq?ojaN)L__b?`?4RTFmG_ondt^tqV4Jvo|NfHUv2Iylx3f~z?|L_ogCFHklz+@z< z{!!WI{B{IbrZGvY4o(F@b z#YKwhNm~L*DkuwEIShv0I@;{tb#>|c`;h-SS~4K`Bav7Bd8g8*J+^)6eroi-n5l{K z7gN_Nu=_N}+S@>fUAWF0h_Qs1p36(&l7oE7c;3+ga-xuxQ#UzjBh@0er zVZR8?rik~aOAkhaW_Bj)*-0m%3ScWOAa@y+Qy(WCQk%Uv=WPK1WlsVxGak8z^Rj`4 z;T?Z-ekQH@-0<^AYr2CO+*qL)C$Csk?Uj@qkha1A3q4pE02F4-C(Iy|2y5eSkC(>`x>&+^& z=tX>1p+W@mV1^@!vJXHUm$5-@O!fF_KGgzM2YkeQrprVkMlWAMR*7xFH zXnDL<4ok+4_?6IrXlw}kqT>FkDyp9$rse<&uuuMJyeJu`pz{cOM91?qwW&f5q|Tg# z1HUYF`2mRqyyAMJ;xGWg|vUa)8BRDG3{`bN|ferb)_n64M?XA3AI&cYd>} zd?6P@Bi+`Sp%`0JwS&g*aWse&?Z=xURr)V6jnwtN$Y&&5>B_P> zJ^eqUFA*{mi#MYB5YG|b7X5YJUP2BGeylE?p=4}cSHzN&1*j5XdIMB3yuY>pP+vUP zYO0_WR1ulQ(=ne%zCYh$F}s@_`VL|9Fku@vemFF~d2uFS?mIFT7NOPzNn^scvGbX046@d6g`B=vxO=HzjdoTHt@Hv^CE?}JI;Vd^?X80>5FT!!GFd}IX zn;0@}VU1X;oNSceU%ICl7;oEFOS)h{KsXi<@ybTLj({jEv3j3Uga!w>w1^3hIY{;c zI;(&xIp9;Bbbs8CC9T*j3yOVnbO>Wu))A6dd`F;dS^$jd6Mt9(sd1h1$5;mdrvm#R zRlNeIv{N`H+)$Y#8F4s8bpDT+7d6TbB{aDN9?$&J?(D>&m{Mdo&hb1H=HqH8r2v$R zZGsco$dZCSqQg=J+5E%d03n26NO{^NABzWT`a=X=;@eN?w6wNaqo(#}AJ^%?CQe4a z2%cNELQ%vOO>(?T?;nfNfsEyp? z$gng;rxVM_@cLjiifeLTsV|uvQQ&HM9uzejdZ$I6=S!fQ+Kh&AnJ|0~hH)8Ac{IWj z&l4)EOD2<5+o6N&Sb?oAq5^}fjFG9`khv1w%u3p(Ib4&lSPZxQXq{2p6xjJu1zP2! zeMiEGqJgV`3UBxQR*RhPZlmk&Y4yqrPUvzH1t&&skqgm%@R-(+(G?!(Xo?ti{UFa+ zBR0)ot|lGbXEs1p5=pqvaQS^xG{Ca?_gky0b@C|!jlOh6dpTy{$nsMFK?6f+)RTT( zz6dM0;yCa9o-{q`I3f;FvX`$OR=>>oqC}Gvr$kSL?ZmOfXXovokQJaQwQDxEy)x<&Uh5UmNBF@Gz^H-Fkg>nqOk0@GG0eo^Y?{?H;G4kx7WOfBpPjeIrNWFWe zpQcssS%x@g8n%V(bd1r=_{0gC_IyXvHs5YABolcde2fhYM_CU2Sx2N47Gkp|_02s_ z6f&jhEjMN;QBj+p>0d?2-e!Py@YdDCO?W6VQ}r)fHxwd}VV zmXmnBha;t1&?x4kB;=WU=(BA&CJAUTnaWl+))A8`73Qs1%`*ep@}kmZdvoq3XT(Aq zOli2S+JE(ht4B2+$0-C#@1(Ed2l((Rmm-e)0v+p6q)H=6?mSc<@}^!ww?DmxwJVR!iJa zF#8nAe-uzpU%>JWrJ|LLxNi-B>9)gcv{DHc(C}n-a;wyTudH$vSpe=Xp){jagK}qU zm`hvqflVdD+cc})T=}n;j~+V~M**N9C+D6c9j6ucA5HUb1xH|Ab{Kn3P!OAlkE}L8 zigOvbr}nbV2rdwVnUTP*4wbYu8O|5lQRwqz^<;vI_Kv7G_gSUJP(*Q>d1&-c_g?Q z=0YJEMiqG&1{B@^HL?`M-*b8ET8nM%jo7Dp@>nA`mKrGJid%OUaeKa!E$>=YE#}o) zOd<2~Ypz#@++0EO|_aP3_ z&ADKDg2Jw3XB5f!sWir!9kQ=8!#rs+5WXI^E{SC&xcoRaI9va$R8^vYr!OFX7`|TK zflEkGFGW6s3h8|E_lO_cC9{v!gMBE5zw30qDZkjMJRFj?5 z8dOEy>_6zs-pTZIlA3IZPU-V6licTW9BP-if0Vv)EtU>`%V$8vOTYowME46**oG!A zey|jicAlv4i3;!*iyu0!B8zVNt&?`OXlo4+eU-}$MEz-{wCLdK(G>ZGOY{>QnPq%S zux!#!Z-@UTa;l0+j@Up21d+hBDr>;C+VxZNUozbBb_BPYf-);(+|{MQ5E}okC^b{w z)#XV;70GP zcJL9=YbsdSCEt6kuu5UOAfFTT3upbvO3K4C|J9}3+a;-Rd#;r?`BqeG{Um~T<8FjX zqPuT@;j^@$Vh)n>6Bn_OnxgmGp0InHw{rl_vfK%S{dn<2?fG}o@}3|;kXGa^f0d<< zHj#L`91HG6><_Drb&lIY64NdgT}0S(TTZn;&{dA|A*tj$Q!Dbr2v24uz@?YlRI_kF zq<|2^x>y7u1mVZBo6kAw$_i~0G7#C6uY8Taq6 zUG(tLN$KeOrJcUQ2$$*TnG=$rn z(aYYDD@#|=C=y5Skb-lA1{M9%8EGWMktn|I7=;`U(*+6Qk%hyHYBEbmo+Fpkm1tGzsD(qn4^OU(_$A)Z*WzE@JR0vaT`7OlNA#;p8LK}%zRaV% zVSc7lRYS6wp-o!GBiD5)DnU!~uqHz%nT)%fYA|1)5q43S*fJM-NW#WKU;ed5tk#WO-?c9Lf?tuNxz*oSa1Jpxi06gaQ}sPo<)B>A3CIz*R)}`wI4PMJj>CkuOcUvf4swSi0VagO5A zWFsjm?+d&lf46){@e5;#8)`0;f=&-*(G~V0A$ybIl(0(AC&pH`=mES0G;n zf$sR>jpQG%_uqTocgqBbgcC7~BsWlH8&PzQoFFr7itPa=F$%%R4bg#z*x&siiI6zu zFZj_*Q77Mep17voNlpPYr{K+|5L~AagQt*^rjU!KP#ULD`=`+6r_lGNFm9*b!%qXT zr$N-yVD4#5$!RRjX>7B%Z6edS!P9t2)A&Wx1dY>#!7A)y6vX}0B)8M~JF07~c@;0J z*_ddLt=wnwmqs>*5j#*~cavr^sEkSuqYTHItdjEY_lQ3@Ug#!486QJn;K%e+L7J+g>&($APB zF^Dy-m!4(-QgVzX4z(q4|8%bUx@Nn+Tbo)l^rSu@EZ5*Hd_@CE?Ia9EAN9(+XM&7W z>6_TQ{L07+VxiWUQyC%z{K6bRayfa_&=<`x zeJlgrG$b_$Au>MJDf){M{O3}Nl^)TiQh08E?K@8`^q#?NGI*)IA0}vOszG^ja3FV4 zIcTbi-!csP%R_;eWuV$aW6lzgekuN%2z3ldK6X*48WHV=z8KdsOQV{v<1^^t%4f_j z#^*v4q0+bkgq*l&x3(xvsnnbhYW~PuhS4LD0mc&qM_C~Vk zyuQg!c?BpHO#bP-zY!YEhn1j=E_6poWSlTd7~FTOjJ4gQY^b%a~+p^QR5Lh%;=7Cm>s9t3KV!eDm8vDd7v5rkJ+*BcdbIq_V`aW0& zmnqi@B>3FlsIIb!;I@evVzl_{H&XE?O7bt{rcJbkP4xXujJwVE2wOm$EfCEXm}d)9 zY70wi3%ip#%|r`lL24v;%eSEfpG2CqW{YTHD?I`3u`+-dXV8sHlB`L}*%*#OYMV-H zn|gvySx3{rbek@Do4(k@@@b3Ve4v0&ooRoY zhsSM)H)Mw|d56DvM?$e*U|{FN!j6zs$=TixH|oEGQ}1A4V3>s8@xipgX#FcV1uFr8 z$tCLv`0s*K`Tdc2{~4UZq=ex^sw*5$pi?h57_KWCO=0^ok}3PYCpeWQ|F7WG_3`?D z2B%0AT57g_g<&!pj{5;XodVMfeAfKc3v+ed|sov)I#LxEoKbyZIYe|(mJ07nOXDdEWcK&?6 zzt|bgQSR#e`}}Zy@_VwY3kronpxg8V;8^3> zB12QQ8?V4~w40zJMZcG*p=Gs~q+?#Tmu%p6w3lKOLcgDCnryY7W?5XepKjZ96b}bO z2L%2r{`T(Q@i#sgnRm%>|BLwBe^rr8Jc3B}Un-JI$^36ok+_4}K=6lw$HUGK*Ck5u5nXT0h$s5E-)1 z@AbuMQeC-V!@8v~e*P`~7Bk}cA1c~iar_C53xtv=W&B%3S}@QKGz#`O~MpZHrC z(5ItO9Ei`foRAXuredCRlw|WiD(ZlQhGi-KQBmhJn8EtcI8snF3=+jjkFew%4=I?9 zWP4LFRFBGaQ}hEEh%9;emrvJOjzV%r6im{n1`%f;&en_w?lTePxNUhYWSDU5(+V zzhnsl{>omDnZ3|1^TAd1>`8L`Fh`WaIq$d}k;5%fol%rtC#_8WJ9J}h2UcmAGjKn< zT^zLY$r?8gM{k;2GmIu*wrKvT?;OIeRkb_|UtGNEaZq)?acBr-w44V|R~f8{pA7K) zRy zG)6??yQG;yOXb~*#h*M2gEmDJL0;#5ygJ9q)}Mo}tzB{EUmW7LbUU25n%Wb#nQvb{ zz*ersQ<)wh1v5&3g|GZNZ-KJLVOm$_Kws=%W@; z{Y=G(%A76J9}8O>p(8PJN&(KKGMa!yVvAzl^dZ3VYt&#-A^`jMmsP)=Nhk z6qqRF(vFJweL6Ilw_6+QHwO$lJS-F;xMKSLp^!oqyR@%nnry))wHCN78O{YJ*KaYE z1Gmat^i7bRK}f&yEn^~Q1FW+ov=>Ii{QzS07N}OZ+zodId9W17s#RTjTiW zBLh(`Uc#@E(@aAvL$sJqJuyVGDMDAHho!t_24dIgOJgPt9#{l6#pRAc+c~l;PNTMB zu`+<6sCTf^eok6uSx!+q((#3&&MVj14`>mB*Tc|BU*ExuSF}=82sghW|a=0FsA@T0wH#3n%5CXS(Q^ABk6d(xdNT19E4jk-46Du% ze`5R`Q7&CFV`3`K@s2P!8umD5ASQXToVnO(Nt~C28imf^43#puI4_5-vRn zL|A9?!RPQ8lmv|c@>#5_rNWBY%0NZJ!;9h^qx+Mk11|TuLBKu;TEDAk!j(%JaHb1$oi2@QG=pOkKr2R%{qvm8I->4!>;&4?; zg)KL&hhDsinh@TxEe!96Ut}1yVbTiQ;EabpI$v@Z^|9^VhKGK(nA#`{g&hKK(=_zQ zGi4gv9g^oI6V{nZv7vHczgG}C2!d7Yk{LJrif7Bn681Y=Htx$r!UwY9FAr|_yRXcn z;t!Fsyr>*)R<8WPvJAPw=u21#Ige0VdpFt4-wO47<7pEX2FU)1a9zP4k_Jyr$LxBZ zmTa9#ooFcL9Y0d?ewxk2Xe^ahv<^ONohwyp zEY}`C)@py6uZd}_v`{?JTYXw+nP{wbA3rgCep>9tXsQVnN|MKXUK&zrs!JI^H5Ytd zo{DK|z_&iN%9!h4AUV{n_nDM(eqP-i0OtP6`X!w}7{#YGQZ~8%woie|)ZLu7d`S+5 z_Lt;_*ELTkxx#OsKTI31+1c4S9Or)RqicrTExou(nC_e}Tfo?sK3b*A2>q9ByvddU z-igZ?@0T62_pL+HN>}k2FS~S5<<=4HiL2!Hmp!)F))bU;i0kOfKHfQ;{2T+wZ|CJe zBqe-25F^`+J?-$J{FBOIm6R5RkC(VMN^edKF}Zq{(PG`xd~=MGI$OV!fpW^suNXzq z1fO8xkI$H-v_RhSztS)M3Uftjg6f@rKj@pf=#&=!X;;T2SD$LrvOISWcWk`aPZQi$ zho=c;C5a3g4F607eIV9)y-Ja%_0vK-Nq|;e zz0K#YAJQdRcQfqm?#OU?t2^0D>dN>Wth|cmfCpqiMAe8X19!ifAAbj~-8JgBcnsqz*vFzZ- z_q`StsFlk4uEg`l`A@&a;4tSwXe4#Enp>7_b9y&lhO`uOwXjZKqH@V!qEjM4CFb2~g zpfM+vWteUc5+T&sKWYivj}L6<020s!Y5>Du*#U?>;pu#YT5On_7vZy@Kq_P8!cvMf zOJH7VMD;^NO-o<_UStE3x>60OStqhhM^wKhvhyLb8!xJtFRD)`YQQ6EC^c%NC2DLb zYT_Yk3NLzwFM3WVdch-lDK&bfC3Ji3-b!N{@*u_(^K~NgBFITAoQd zX-RsmNe0VFhL1@`_{k>x$)>u==AOxxY01{D$+pYM_K(R9_$f~ODK5GxZk{O~X(?W< zDc_b;d>>Q%@KXc$Q-gF)6&vg(=wOS zvLDlO@zeA9(+hRei#^jz)6&aZ(<_(Ls~^*A@H6W8Ga7U=nmjXF(lXjwGdh+tIv+E- z@iTk*Gy8Ni2Rt)}(lSR{Gsl)QCmu7W@Uv$4v*vWO7Cf_-(y~@sv(}cgHXgG!@w2y^ z`Li)weRe&w57V-b!^uxzaQX`I;#yb~OFgq)fnjuPm$HesR=|YR#Nr`uJZTD}OTV+F zY~u#NGrj^AZLYbgDVjw#r=zd3XfC;lJ4;ILuqys$C>Tr6)}lF24w8eH=MpJ{>5b$l z%ZEjbf(c!u<&g_u7G&eFVghf+OH&l?euHx)s2Y7k*ieG%zllq4<1) zudeLD9#vZqCS9mapAQ^Lq;4yug)RDs1BCgnRUYBDDv!qhs>)*`j{H{TQE*T#kdDN| z4pHEXCzFaHeIrujD`VMYfMIVYopZ5b1h@1;$G@vQm=xrGWTn#uG6^VaX{r%w!AitZ zK60)M|5SP88U*4P<%{+FmEZ~gTb1XIcBBbmxI7W{jYx~!{~^*v+xQ%mCzO8^Dfo!u z{{WFf|Nkb^9Letg0g-xUni&3zNJ)xnJx=f2U#BbWe3^c-1bd# z{16xpbJ^%~`}Bio$`3!OXSE&{#L+bNh2`cn;^hf{Tw17yrBhZ~ z{8XS+-gJCiQ8NH#IH_z{us*43*)Kn-?zlTX`O%HQcv{nkV{=+NL{o8EH^y^vT0bSl zc-AndWpmcJWL|OBwB~kl*1Q?Qc;2#`Y;)fF#xmz^r%fmJ{tlgtfBqZG{ONqTJNeTE zgGiKC3WsZZ(Nh49y69bU45Ir5lxDi@!_t0ZnLnBlmjguZrs!{8*`0Q@gVUYQL&1KQz1C2-p5$D~z`KVLOWV{9z|fn&ojfQQQ7;FBP%fZ9mif{P7?+l;!ELFvb4q zsI;W|>A14_{OP1-kmdQbVbT8itmUBk`Ml%){P|BeBJ0b=$FE8+mqWBaUarP?|GZpJ zNwfaFnbZFI_jbwR$KSg(_dkE{H$z!pA9ho|zCIq7{CIsjZT|E6d@;xheYsiu3jOu}TJJgLJaN!S(%Ke9BQ1mVW@Wyfxc!zp0ye_^`%~W^QB$bU|=3tRZJay@2?g%(kd(j`Brd9uidJ@5PVXu{ zb!<06sc2X!hQ%TqZSRneenc((DzQ|dh(UXJM62y8sV1t3$wGEiZ{;evWvqzBeR$OH z=_;igt(YxTcFcs}I(0~)m?LF)%v|6)Z7Qmmt3-C(TJIm0DduS&9=G?p&Zzi+%r_{j zq!&<^DTDl9hH-ST4zN>jBryMsabW+|VifgP#rRi?Q9MKzfd&f?veg%g$0;}V7R&h+ zL-IDpIbx3hM3KqjC=6c|j-&t>;acdNO~(V7bbIHJ|4WNeie4&#;nV-4#Tdncnys+O zexezuS{RnJeQTs!Yyn%yJ%n8hsQbKA{b{Ai=u@D@Aj40=nrc7-YyE4q{6E7uHMIzA zzIz98W@Jx+Y=uW!nc)P8UQ#}M>Hf&uFixv1g=~2eol--Kd4bv-ro3$6oZq{tw^_#S z{hW~Au6_WhH$P;Au&F1PKaoze5pEaq>+xcSOy*j?I(=2N38(X5-#vd^%Gzr~`{ijo81;JR_YSi{l) zwf`~?{SH9ihF{W0G+)9FK`V#H{Z7c!pBD^c$-XUuT|A$!3$8<=2mS4rA&wxG}61gHG+wfDg-i1lYmuX%MH;L9_u)^MA=V@hpW!;VW`%&1cu z%0#wJX2RRw7X` z=WZyuhD-|$53E+db>A@d4l9xwkIZgGNdYB;C8;9fXV+eM+n&*Xs61z2UeP3fOqW$5 zb41N4Pza0biazrvXCzd*qs{Kn7}uoNQwP8%H*hDh$p@6rBSUFD!0*)1Vbbanz*fn< zkNoWP$6kh_STxnQgR8ZgMt}6uD0Y$vU{MGA8lRco-rBoaeYRM6PQ25$d(cp=$kKt)wgr z3>FPClccyP4&0aI6DV=DSg?)3^!vx!i&DE)8r3!yoZ<^)IWqDERQ7y^&dQkesXV;g zQ&#!2I&ayI#%I|2fG&bf1m`dX94$6Y%s!;ufsj%qVs>i^(NEsnL3|D9g}z1!Sg5x= z6HI3#Uq||e31U6RU9M{Me@f&%cN{4Q-40uxX6EtO3`3RSnWOYqPg0^=xCKKUzPcm} zqTFrJ7VH|^cu)(HCa$CujMiET!0ADrw&^Mu<&HHkFk?QuAmXA>Cl<&-;t>@+RDM&_ z_!5mDniSK*S9gqNnxN&}cQi{Av{vWQ?v>q%J$|?u2Iq;%SzZ|4QSgPJu+pBDXm~!( zRfaQXf|tp~x;<&UNcz9(T9>Zrq-6uR&wO7i4&*4p600QRyj|jx9t@Yng5@skzx*;- z`W7G{FJzs@7PQYB`#96qHW^HpKB-&XCZStZRr7%S8@+J_I84WrKGrb1z#`w>PC^xY zfXw)*L~bQiqSogqen)W>T&n<9Hy8W6VW-A3*$-8z_^~07B4MOoJ)2iyPONz*VZ`75 zEvrfYCcWsQl9zR+Rf|p#Wu0REKxVdTNN0igv*{AAtj0v5&lr6nuI%8-S~-qMDP(yV z!EHLjq>i#*Z9`Erd@Rr@zL~w?j97m3bN6didVG13Qjku(*qM6W$tkAHRKqB@7DK}) zFQ%$)lg)dWJH_)ktXZ-Aa>1jKUsB&95Li1ZBzo>OZVYnyM?F8Xv_1q_+Zg5JEOhxI zd!(X@&jsvw@=XMp4f+vd`#EQ}Al}~(>EwYU0_F+}giFa;%gaUcUZ_xD!{QX(X5#F* zRB=DGjKjHO1w6UleV=-vQ=j1{y6{+%|om`03lK(VpnEPE1HuYLrhK(duP# zrYJJlMo6~ZGMN>PVtLps1e$7_$ItA&-^Mr?%`Jn9=S~^VYllkBZHwdQZtc(O7ctEp z2a12ZR-ZQ>CYn3%g@EudBCxQq|J9@shQR~8SvUXl9R()8klw(iZz!%{AQnrA0?RY5 zP$Y^*^v!DHFd2a`qjp9iJJO72u*hRHg#Y_>hl77JSEk;;h5@^jtT?C$B}X6;rIBI2 z{B1`;l839&VzOG3NfCk8|GlF?KU7M&a~?VIV6ENbZ2R9<8(`;21MWYqHXXPBX0>ss z#cJH@{ZFj6LRG_mb`<>Eq(Nx2`u}dV{dZt9(Yf(&t1b4`ez5cZu+=6O93tf34~K=R<^;o5f$1q0#knEJYeo6V1g0qfK)HGOyS%3(L(ZSj zh-|~>^(263U3&S6OQlM~QFS*$24UF`$c%Q$(H?^>q>p7)rCzgtF6y3H?E>swc z9dxV6v*Uxl^&j>nwG#zuXvX~|*GM}5)h4Q%o??Huo2=>Gf*Y`&zs zZo)91-tU&U`gpNxf9y2zO8L_ne*VHV)%$1hJDzkwrR(e0YM6cd+dI@; zm4$m^y&DNVeBEpq+{4sl#~6PgU~B@zv>Qop%7-ScSN(1g7zZjb#YHn-Ur7Nzg|ms$ zTy7?=iNIhl?2@s3$V0P``9&ZVN?eqN3~Ptif?OSi`T>n12nyqYNl`5uCZmuKP6;EA za)=90TqVaMziL{Lag2x|AI8=%lw_iTXvl~sY&0GA_X$ac#&ek9FVYnSuJhdg5k`Q&j`LA~;&i9L~pvQQxW>FFrQfqC=@e+}z z$4xDP6KtKc7RMw3q6&oh}#Erj75;|)L}TN8(M z8&v{Bl1cC9ki#TR(VauBD~V$dK$-=tJ{lodLB0+J;>T4SMfI3qY%lHaLB1v7AR7`j zr}J8*oaN#)bACCgml#u*~~O}9=}DS@aiPF%iXXAT+-Sxt>7jr^%eFo z^h=?7%^3Zq*UEjF);52Pi%}}X5w5cOTlYv7g3(tBuS?Sxv_fv_OIL_UPpe)cH(#!Y zP2SHG5zz)WTj6zE5qrX*qrE*>n|@nqDU_!(JF?K!c3b5TU14w_x7Y=rSM4!gVR%2X z*hwJe;frqTp~0}!ixOT+CR&&x>?GVruuvJ}Q)w!FT~vo4$(mNXqM?z$G<=s-oQ=+G z&%}ro1=OOTf7FnW9M$VY)1a^sw6j?z&~1bcHBlny79SD>%;8KV|KKxF5&}M~Zkw3B zV}_JStay%y|6FL9!XDxaaApgr$cALL>{lrv;=48xrmxn zS>ER`bUm!M>^<*CVus3s9p)7b2Op}D(g{;7_r)F`JIwN=4L13d_WjO=CPrV12xT_| zS^h8p72B$?u_mPc-4ePt9vA*Ao41|&#(X$m1Np*Ixb`=ay}Ex)8b_(S3_^m@hXKBc z+8Fn-HvNcg79%jX5;c(!q_g2;N!4LOkHA$!XAVEY&0tN5G4F!=8OVb|C!xIO&Jckc+5z zC`R}+6^0R^fqAA4$Eo*2R1%4ivu<5l|7qrr^H=P>&?C&0JhHV@E|>Nb4%LszHH}v| zMC!KI0#0zfk#^i}xXf=RO)LuO^M=}wf^(U(nM2i zO67mN?)Pc!WcGP(9-Q>yU$c?(0lKwqYpMZ_VtmAD2)|ap?iQohUfhm(zl(flQx+iU zb@sLIXAk=w3*S-Ooocd+2|2oSBt31sL-0v>u-@ZW`3L;9RSr`y(h;+6fr?`!Dsm4m zG~7c?q7xWJznf5{LZ+O=;g}E`25YXHgb#4CuWiwJv!omJyzHHY;EgCg<#t~H>JHPr z2aY5WafYnof2UMatNn>-TWF3U@FWas1;9M($&KBTth+Kc*dz7m!`;@cp5;QwWf`+i z?y&QSXxH4rmctD1JD-1wB~>FWLzNzS312V5lsmRtOP2cuUoYcgJ9cT6A4l~6hbE1_ z)Lyaj&tvVb)Q11z`^Sko5^RV-<|iN*B(wm?_ahFp$|jKoma94 zw|j!nM;-RPKY7YNvypjE9B3czn%~+{=q>5z2e9!S+s6HRMgitC4>gKv-|SehhM*68=mgflMD z8>~YyvduuMD%-#dlyLATL$Y;KHCCJA@zV@A#R*8|P;hplb)hxKDOKE+1~SdNN!NNa z{9o+7^_^g6(8FFbK5(s@9FJ8?`E| z0BO>Jn$My$T?yKR1yr3u-AGV8DyHwuz7+|oWsB+ezJ805PT4#5`fSYPS!~*H)YSil zH2> zK;&hhN2C;u8Hs%3q~XHUreHqhWKu`A1c(PElsp7+07H5Ql7VgYTuQj<$q7=yO1orM z`j75rxe!3h^zH)J5a292FkBR5n&pb5FQ4xyQl#g73@s@%h1|$0(VB)pIlLohfL;oT z<;QpxN`;Cjnj3MEkVb`yPhQ2?^u)lR2v}jI61*6fzDmioYMKuum0lcyPr%YtX3z*% zhQ}pRR0*$^<2P1-8%-_-MD46A$l&39Y?ZlpD;5(=B?~o4>8sC1DzTw84p70=CD2lP zdE`L}zFv`aQ056=6iztnSo5uXF`17gbbN+fe^CzdFW> z{fA@TPk!Yd=~6rrb%QKiM%a~Z82dMVHI{luPcfFg*-9yd-e&2SiViywBnfD_;#WAk zEo{t{17*a8qPZNYCNC?|W1fn)mWfWPQu}$zAI3Zfl@v#kvq|f=y}f z-1`xqf4`sTbj0x~h_i*q8=%dlGf3sO`CtHNbz&xnI)dwPv@=NgaBRyZ=5QR%uMQ`8 zM!1gR$zIqWJrmxpIeLEY^on2MaUV~~P&!=ktJ>okU-fD%rCHZ~{TKPwqj;bFK}x6pAb!;nJ7R_&^U(ZC zc(U*(zmjqe7bhwLT}CJjGSD3S9P^m*&{@2LDD~JPNV&og2by1fvSs*7ekI3k(-@1i zfBS0Y5Bv(rd^P5IFgd3)}m`BflVvybLiQZ$FCNad0%eua0fED`nH(1Zat_TqjM znqQT$2#t-Y`W_}15S6mY!~V#xG+9<-#h1)EtziY?Glyw<28_48d;|GbKRqDOKBjW*yeXSJngz|Tp1Wop<-FG{%AOf} z?n%>}@hP_a-Zt!o?^PCWvRwT1DvNi1ln=P}cd~dgtcugo`o~37&no1E#;4Q>%aPoF|TXs%kN{} z`Iq{@Yc(c#N(%!tCk>G*HD;6(3&Wx(ji|U93s$AYas88~jAu1gLKBP6eNUPTuGJ#t zm6m3*PFgBdYHf8Umgc)oS{veO?X8uTm)e$2+B%-qI(khkzdb)`@4Hs#9HI1jjpnpt zRHe=}ed6_&=xOIvT%CKl(wklV)2@YQb)M}LZ$9~+cCTEk_a0Gtdzf|F^IoOi_tnJP zldjXp`*HOTx0T+VFP-+DJ*y8mop|@-{PYQcxFHZvc?Fa9tPfwcA((P<1y}5>9~9pZ z%Bs8yH2Aw&Jk`c%w19-7`_EZC`RJQ>ul<2X1_I(R+_A)dl>`23tLlFpE7#ChF8cpf zIpA-fvj5z2z}9b1*`K2rzdvQ66t@5EQx?vFj$-`dr|f?*ih+)m5C2zD46gk?^iy^f zE3erfAQIZ!|3ehxXRQ2Z6oc;SDPu~vKOAE#uld7MHp&0$Uw_KbvGPAXWhaZs@_+X! zyNY7`>rdHL6yxtdWnx{=C2If;{wJB0&GEv3NNJL@j5vm9D$K+Xamyoo{^uMY8k)w~ z01ZdtmhbADquHt#@-64V65n&x0u#RGNwx_Q<1jSb1wuwR_@^J^$(8vPBMY#&BQvmo zGQj|oA<=uI{lgYhei&S)X1$b8JR;2?q$vewnvof27?L-5AYm*rP;vBn_0gNzTLfT# zg^Z7js7TZz9Uwk(uooNqFS!O3OYt8DwtjMrzx?1$y87T9JD^uYfAGqoKX}Uq)6pNi z%J`v@!MRuN<#RZO5`oMu29FN@N{uiT0(4*t?Ou-4z_HR|->lN9#Oe;Xaxd$pO1vnW zt4yO?ZbQ45$M=?{d=k>`t-@ z*XFO>%WYqMj`ar1uH4H@W^d+yxtD*h5D6Lmxk5DD9WT|(`vI~wRh%8$Bo^f!G*|zp z3en4=OJcPL&9yMhm{K0$bM6P+xC!VC&bvL{@Q5Fhy3*)dw$|LJUi*)gL~1{YazP za~-vh-u#?1b{rj?Lsee(MDmmHjq zSwPOM*kNK?c+s?D>r$4R4Dn}YI^}WGK1bAg)U))& zet~}c+|}=}H(yLpvyU}Qz!v3SoV6!35!AeVp{EXM`8Qs_dvf6cTFc{<@%Tu@4bp#y zJvWihnY4bJY0t-??W-QX;#aUD%do=mK||~9dvMxYkMo^W*z50kD==w^%1~$Dzc|~d zcmJlkfBP2B$GTnS#-!ZzI}!y7jVgd|m8(w179L?OTHhnOGxX*|lfS|V^h~6H$5g?^ zINF0j4}uCXSQVh@L>3;2)9N@OuD#dLfi3^L)c7Aup6JD01-4AB-j<`wC(dj)9$s+` zX`R%DpC7zO8jp>x*;$;@jw@XP7P4-B+K*JIp=;1RBWI8bjiM=p5yY{v(E(-Dgp?WJ zJl@xBKVn-YCz@=fwGeREg+^=A=Rtdrd=VvTyy%kv*X!4c!#15lRdeFbCL_~@4#C2u zYeqd)!L1!**l~B87&?LcBNF4x3Bh0ADh`geP|+uetas)y!UUsN$Yn??vtyY&W=B}2M$yhY^=-K-`UHY$*cfNmg2bB50Cd%mQvNa9u}OXP(OR>HXV z#N4qGOBJ@tLdu|W#GdQj49-!$Z0by;D04PeVjvB(Yd7NU&^62`Q{+vLXX~*^*&9CF z^6F8vW>O;w+BU5BUd>)Mb{Woas1s#L1yjpp$tdJ)uxm*^X@2Z~BA*|QF)bKkracj`?^9)$_DH^qru4zeV?6nI1{|kOpn?jjnb_` zbSS7Xe`y}`3#3uSC{xHJwPAy%>?UQq5@ib0+NgOk&W3UAmxKE`GF5j`RjQ#Gux^x2 z`BEBY+NOr5-$N(TwqYe1Gn zBNU6hYmZav_hwCbvt6z7rqv4m)8M_>?l&G&xQy(r`EZr@2&wBvg35*$(8Ln+D0^C#y{6a&+PO8&xy`WAS4d!PI&SO;k7`WEs4AieW_!+QU!O9b+MV_m)^9zD{0S{p=F| z9dtL(`f?PHo-V7h3RL!dXSlYoUQSZeB*=Y@uD0PQhgNeV`Z$9lg2jHXB>7!*1NEK$ z8^>ByVk&X>^yr;G5rgksOS#TD)Ie0(A`gXOsv#(O?m3BQjjBn}-Cm_D4s=X>_> zBlg{Kd#y_5$Lw&4P;#2<3ilt_wlW(GPqMG7=RXU!e~`>fz-W%jN(BTEAZL3$!q+Atm7RU#onXMwx(%$F)IA;ujH_&l}<;o1xj z`S1gi397nw>JrMYn|U5^98K4syPs%O@mVQxU4iMT~>-qkK9qwK$}okpkftez zFZWIy884)H%D=)$uNXV35H6DUxKH zJO?k3(9<(0L?>m{3CL!Ql78d@4FY=yQDp?tpluu)zExHaC{DSZO---kKWv@R+tv=| z=m_Ro2)=z5%tIBzD;&bF8zSf(BAgK-+7WVZ^w#xPA(B*~Qo^A!x}kF3p$ZwHiXEZK z3!$oKq3Tp&2;neI-7szMFx`wWG{`W-S9|j6s(ezTMI*r$z8T^ajds|-CpYd02YC59 zqRS_2HUz>E94+?Qg=9n45sz8|unT-2QiZ0hlXp`_zQ#5qz8hd+Dx8OF!F_2JDO|#= zqD_d)2HL@hf{);4bVOYrj3TxS$fJrb>VSC*N0*I)oYCv%(15CpfPz=i4OB5t&4Q2& zF|--MZSSQpGh%ucV)%}udw(yV2!k!XW3j@iCM*8w@(EQq^QwMAD(RR4MOa3ByLJTqUZ%dEhts)OB-4) z_XM(oB=Ua1t-?ewI3cPrLWF=uNfL6?RV;6c0$va)-wFM(&4W#!f`t(c7tz3+2Q>{R zi!?pdvtgzxq*P-^_PQiv?<-Z2rp24e*w9;S%rSE<#@qk9oeN6BTaU_2mP1XV|6(PF37EwZgpWvk$&A8arVUX|zrxXq+l3aN`fW+DN_-Q0)ls7i1mEyg2@MvDVE(E2na zi7yqWF$Qp6ut`CEt-* z+Px^J;5~;359D6c2XTA_pJV%BLDOJ&vka_3pF4!@@Uo=OK~gBTw#-tlAm{Ti&{3yn zpaA4lN^H#|(M;p+a?Cf)~#ec6X_+bs)DDud8hqI}sO z*@Bp=z?$lntQ*NWORSl@$KU*CM(@*GD+(+%eoS4ABwtI^^4DP_#Er!izU^^ zyA<=fdYCuX-(lr?ZR>YjMnQ2{jqB1NW6I(!9din8cyJ1Sel7(ssKbTV?AcJyK^wDN z8o{ge8?Wj}<_z}qK?meyR5-OtUNyMz0yUPVk|JTjS-4v%SX8~N(FH@~o)}o78iaz= zl&3rL+o@DzG~JT}eA*5rw&SP?(gpbi4r1I!6gRRHhM1XVH6@Z~4K&7JG6JQV>Rb6< z9)+!kbCUubKwjkZg)O=ml(EUJJoF8w6fLZ;tZaiMsnWBVW3GGqwEz{`wadvZ40MGD zDDD)p-zZeI<>q9& zIAgXyUF~Yd>Bdd!+S2b1lj>+&W=4*>-kAPzXjQvZi@?iJWk z9PGF%CSCstc1*?+(5j3QZ^XuUFt_p5oNFZ?#_#a!#!!#~KHVAY3hZFIX{Q8h(rZMh zWh=%3;gxgMx{nYyIy_2W*8Jhd(5`Ypng#mC&`3bsPgTafr zX&Yu00PgwAV$%QFZJ7KpJE|3DXpEv2T}8E7jXEEuH%kq_E;osPX(Na491Uo;sVZkSF|0S^V`!=lH;NRGWbp(q@{9a7@ zpWcT3RWS)`$q`*l%1?c;`-ftZXTbk#F)8*}e(!g%Bi$%d7a@rTJJEjtJL#i?EWd%B z>Zj@K`f%I5?jnj}?IG@eSWIG09}-z|F_Y*izR7*kbpQOo)aN^6=qJ`+U}q1=(9aYl zD@tnW|L_mRq`v|?cbR`*!=X(+D*$H<2-dIi5F-EuppzmcfCJe6cmnP3EbD(W`4A;5 zBoh3M$!9#VK#BlHMEV!yA=OO&+CQH_W9FEmn`!+01e#8wV$h#VJ|4E}J8!Q}pxso~ zb>a-u-KO}hH|fJ7oWbBvH|MqDBd4vlMns^WQ*X+FIE0E^(S{uCFS#Hxia~5%wi9>mj86X zkdgzr8v`8}{?_CZee*4P4Y$Dz{tFS0H~@+j{SV>))h_g(c_Ub^ygARW?$F6ru9Sur zk|c;~Mz>T-m4Qly(Rb)r!lgze9Iorq^tZzC)*!guX)u@yFD{{7t81G~w~< z4&DDrozj2G8DAwP}{R*X;;5yI+xVYSC(!U zRMc={*Esp0&Au7)qhepjBA6+ievDmWS7k!)Vyc(jj#)+an2a%W-(k_>kpueQ?1UzJyX6z|qul~+k?RsN>D`jePA!5ou!2T8HN*}ahO zPX9QHRq;?ITIWR#6Rxar#_2N>89uXD#oLchWV=IpZMS%@i>k{*iQy+cqRaYU?N^_O zyI_}}w*L6$H*qA@#JUp~=F4_8`}JlKTkzD2yUc}erEhlRdegtq{LHCP#mnFO>G)2d zCdLx9-~>cyC1Z;}wj|G#k!3Jf@0a$K4*yM&RLJQ5ZMN^DZy#>(2cMaT`>bMCUh-O_ zh?fRK&tOaIx`^8SPD@M*yclfVdF8T@$|GSQI_x}q1 z`&?!s4*yf&|A(FL?Eib=KQ{}6J@YsC?~q`t5NLBbj)wm)Z|J#A7|i50wwp7iIjD3S zto#G`@8}f%;rb^ASx&ba1@9Z)y-bkwyZT?v^e8HfQuBl)-&*EB7$!_SYx9yh*(CA1 zZ0LeWIICUhcv8BSGu2s1iLX57pU1Fs3D@*!gr! zB2Njc%8sHzRzpnhUx|2j5!vVeq=-l5A7{MV{-p-jv(EwFzP$sGboAk=?g!I;U%^*H zi+G;zhl~B|BA!WW)uXKC?_0tzI-h$zKg#>VE|m7-y@DG04jtMwb+rpk=$b26{ZeIc zv8($6o$*HBq4T@=U_#QpFrs?Wlzp*>RO?=P_57r*`{JW>Lig)!)zhx!i%;G!y5F8Y zM`ye*J_nNYtl+8rp7Ex9aW?$lX1srjc+eT|7ibX=I^&)2c+Xnx+tTunla3dUKY6|Q z_V(M4)4nGT1tDtR*FGoQ999cZye5M3VSCa=i!E|U&`|CIvN(U?b^C+>#g!-~@oj~2 z=lZEiZ*8hmKHcU!@AId3jJ60ZE^f64NI#d@3H&SD$NwFwul$q$DIZM#jDPa~?VTA0hnh2FN19o9`Csue9VJhU(wal0R)9 z3;gu12QgpIX{kou--%DWG8g6_{!B}{#2WehvVB~oCI4*u_(NJU0wE>&>yPKB`1S}Z z4!zvNK)W`u0m;A5(LYa#UyX2xf4JuRza!kgY{WIw6}iv!%7R(HM9ZJG?j<6IuvB>M z%7|O+!V_$Ph-KT%KqXjWP%lQCk0EE_Qg18tA&O~fkw}>;h-LCN>@Ksq4oAvHD36&X zlez)IN1YVUMzSo@KMHNcg<5_^C^^QD#LGIGjIlVn04c-ndr_optLrAtl)D?-Qk3Ph z^?%h3nlA&ZOA3+blf93!2oWqO+==OCBLz`W5OE*og0SZkp*UFUd_IbFNe>t17Y zaDK8UPpCW$lztUWSquG&dwsbNdgC5w2%pDH|zSx0pA_} zqrH)Et%uPk=r_hrHA4-H^GYuoNid+q+^hB;k(D+g@L|#u~GmBy@i(HFlZ9^7CeHt1?X=|BU z%qt;AuZ-l+Q_T}3qf6mhG89vqiSogg8%dbVQB287EQ=N?ii)t!WL<57(qw%rk?ruIHBCcAoj64NG1?9RV^w^hc$2Vem~` zWPu}b7h6#rhrYU&MIt#<0+mh6kfg)|wEwN(L`$o@aF`8;vXo!TrV`zsvDKG8ygar= z!co(ToXuDMH}OqxntBv_0|7Ncpn)1DGV@xyj$#K0Txpp~wac4>F5TEFIn@)_ zD!Xk*!KKRek6HTBeM?Z{7iVQojT|acgN~Wuq}6c3q!|(zv;it2_ZT$GaWR=#BQ-n6 z{t}1Tzw#w_Tvn?Y*xps1npH`%;W=6E@QEa>;#xi=Ddd^>H|K~b_WGk%V~K_qv- ztpbm_zyfskMg@qk`BF}1SmaDL$Z=;G^TJ-PcaEM%K8(|Vd(V^*Q8M8SdOe6uToLwF zkHFPwG5y=TrSRE`iV5Uy0TDbxh+RP{n1s<7(jqAlG1?HExsLC5De2XWsXZ0uazxuh zL>We_h+%P(wWx^M{q$-fk86Jj*x@ef* zEoKo!k{~uFVi9yXAXKJ7FKb@N^3$>Ts*`c7C^i+ipv_{z}gDDx|+f9 z?MjE_d~8};ZnSW~c9p5e{HAn~(4+wcStN8r^@)bK zjzs%*m;sr;y-wlsC_ZbkkJxJ%Vqux@9nfo{`1URFwSLBBD17cIBqe@l6y2 z@ZBQiwNHn4oEpQOK}!sK(*%PBIOjp(Yr@P50<_W~WZ%Vt8}J^=NbX4Z5rCvE0b!_2 z72P@~e0Nq?B+@0qCfz;wr#$R45l|0UXIH_nB z5Ux`9wRVN*V(;vTw}R9V4=wWr`O_qM7{=SEld=PR#vzJ#wL%+Q$j)ikWz?fUTDG2< zgWai;?2A3zijrhs8Y1op7q+c1gKHg*@$h286xS~^1#{}E^JdjKmLG*Cwmoa%<|vi~ z`kk3SijAcu{Z0+zbuR^!zb|o#}hWOI&x;syHDFO>_MbD7gnlnMtqb=#d0TP(DN(o*=ld58QMgDjhq$ zvHrNrdH<^mWQ$Fkx$lK&dtC`rmOU3c>M2EO#sDPk`w+LqEAc8!GaO^?eCo2Vk(NeZ zJg-I0%+~Tb;!hfjRY=w`w(ZxoJZB?(lmjrF$9fp^mf7TL_JvV1Uh-W zU70iOxQTh-Fgem88glE^6YxzdmkT&BddX~2KhT1T{KAzjy=Yf#y8s>j)y{BRi=C~l zvo|>CQ(7|LKF9j>!rw0exA_jRlgpiR@<#%$gtl{AG9Agcn1g61j*W(Ov3l+YX_}ud z)*5g`-Vr1y9x=aoxQgQl*@xk}3{2A>eZ-^Ik1;jSyqUGd_&rEIz=fO53vx`=uypd) zOHh0%xy4~wwzxd$q%dyGZK&J;IDzTi02b$`VT3dEc+7)_ z+PyOrOlo}aSU%vh^n){|ec!-p|A5P=gD)%Lgj=g+cVEX&kBNiggKGh~-HjG|b}zN( zZq_Zx^y|=X8ymKieNLCVJ_yY=;i94U^RSYr!*Vl{gJY)3LzqFTIzU7LHvXnN)&g$3 z&LhYs;j1Bi)}f#rN$rC+(UKKH9Ch5GI2BEb)QX)-IK&ga>Ai437@z$W<-aaATD^2fo z0G|#Cvf1~uwLFZ+-+F;Kn%H(_HxqO!jUs`QWH-v{E+BW(jxN!?;!KaEul7Mmn>%a6BCu}Dd4Al z_a}ou4~y_?auTE~3OnzKYo`Kc@L=sp@lU=enH=j?Fd2<#;pUX+*JuIE3*>heh@~PV z?X*#Mt!-#|K-cAfgg!=`Lp~wLBuOpG)r>}JlwPHh5eOZiVjs?(Z6C!Iv*5u*2Oh4W zCPS@P(58_@Lpr10OG%?fb0br1uRGhYY;|Bef@^#MR?W)!oUm%Y24fYS$j$>jAw=C)gjk~xbS4&1;3AZHwr zoFi!hylae!t@O!Tg_KA2dk2rJCW+&s>~@LZw6F8v}A`77A_4maYu$|;&QU%I6;I;@GWim(m!WN+)P(|IR{kU%5twDAh01RHL=RX z7qSgeZ!N$k3{;HWF>OQ0!-K?jkc4%B92REFf<>s+umpGE{kIjAU+%J`B82(2%+0AV zB;>hB=?FG2=WzFuC2E}Q(+7bm$LSz%`2JA<=AfN}jiX=-bh-tO??L!T0Ot}*J++;z z65Sgr$L0HDM~BMl4~zYFWy^6LI-z)SBY8Cq3K9A6JNq^%T7L8w*bj?RxELB6WcFe z9(5_FYbc-;mWpgVgWD$KeCX4zrYuJ-K?NvcoT&wR5iUd8T)9%>7#T?HbnKy0`$tjg z-siS(=Q!gOq@1i!=O7NLsO+w0?mSFJflTN|s;Lj2WZzJRTL$*#An+q==)~;3P4|TP zimET_gng}AnFMn8`Hgu-(kd-U=tj*;c!14VZY`}A8`0WNj%|t?9=r-O>pQj4;K3j? zH9HP_#7Y1wTlYs<5N_C5{MgqSSyQkUa%q2Rm^Wtl4J*l#&hx%VdYCq#6kxpNsc%Rj zSJ#&^J}mx}z!9o|t3Z+3UL0RcF4nB&?pq=s%AcX93AjUn@*MrF|yF0;#E|=2BGkZgXz7%@0=jFp`|Jj^4)?r?!z*R}r3grV{w$2|5hx z-BS%wKUIiG4$o#R0eq%(WbTU0E5SZImp2GgH7_Dv9;|jO1n-m-G|m$9%f;T#-h%ZWLi(Hiyoa@dDEyxRI$DppZC}k|o(nnA0)m=|X1eBsxfm z{YDFu(FYI0RUH?IMUs@R_mygR8{;@P4!zQpvxFJDYpv+s#}UdiK%tB`Ol*^}-OnT0 zV^suRrZsKjif;vMYFG6iIVfh72{3_j%EZs*a1`lq_fUm4FQGb{mCaP;FdlQUd$mYUQCvK(oC+|ufcLuc><;BKAnSu3mDV}37T&cJAXlv6KB)5{2xIU3)?eT*4{ zchRu*&~-dKnK5&4KFnx}xel2U+S`XiHUdi+6$k!rG%n@(n*?BnYjz^^@Ngs3({wA9O1MX>?9 zta5}@GCGe^=rd~snM$5YYW(PT_c!uF7#^Tutd3aDoMCF0j!V7x$j**K+ZU~`CSCMi zfD6r>>?vRQNCDb&1y~$nMZ*!xPUd|o< zy53c?d+EnPIcM%dij`K@aM{!Ji^aa|0i-5p`OG=tN6G5Q=7`||T^~K^1I@sqg-)F> zC32*ehA}di#X*zbGNE13rajoVBjrR8sw*MOC%g#=7QeVOh-iwW->3o;8y}aZxPz}H zyjaqirF0~BZk_DjoE2w{-S9J!;=_o9ciI3l9slp*RF;qx?Fs9&E*I;5%>5@z4Mr65m_?irO#x%a^aSGWSUaSD)ln@I6YJObz z-cLKfa;qy>8X1ujIZgaR*L=S8cK04ePN-_@C60pWT+1}27?RybMNUj^S?*$Guu00r z*1YCN&uZ*bSx*q!<)}s zC&X=*#o|8c->S^%67KNSTve3!4_;oaWSF_mnJ(;rs76Z(g5_)bfXT;TGse|-XSx}j zq1G&pYa#aG72-Q=l4>c8nC>nqn$k(m70)x4-Y|C6(Gs+as_XY{^M2_>F@Y+C1I>*{ zVBQ-ytD^OA-5mt9$aruJDIQ&aPpoS-vOu_W?kaH*`p9Qj4IItM#^wk3Qiyvt|NVi= zFbjf7OYr8I`{|r^Q+g<;tghxJ&?O^u@RE0g|((6mr^%7Y9m<4O&=hTTwU#diE57WehgmDwHQyXSxvkt7=bfST>h98SFP2 z(tpBA5tlL$rqqqQH66DUKzV_1uUR3c>vz8wtO+<70#aDZMKM|5(8MJz z=?Kaeeb8d>^1-u2)(}y?7;;SLaoGv&EnU2s^|(S$RqqrQ9UtGAEb9{ zYcO$ft$-M0406ONBJmIAQ!u%c6?|ah`L){I4sUx1G^8LYZRl{Jtea9&ZVgkC?Mt+P zR2w0lWVT82K8*m!L~(ks#j3WT7UBr!uq5pEH2{w0@LG~R(^g1ztz1HsmuR0nOw5wh zL~uvt=&oV!k+MAXwO9kPbVX@S6xUAnrfBx1a+XNmXQ7_0o3|_>!%#{@EZQV>)uueW zPVPQyk|N1T8Jf8`FY9@7xt9oUq62c4WdrBh!oICjXxqaU83Z79wVu|=3<=ezX3K5k z(v&M7nju5!*?WoSZ2f+f>~~rl%wivQzfRBUKnU5jb~_l9W4#->wO|(f{o>*hk4F*% zkEuZti$sQ}AM@+FS}^7r7FRH4(bPt#=csd4AikhYXE)pC5B+S7l_?~f`<>;TN%bycx36w3aUqUDO@MY zxrOa5Nlea~+_ezpUMs#MXn4TUY}SOD}DBT1xbWpoWStRcc_;*^Zr0&*nnA zlCnLOCwh)$NL{JHaco8t$Dqm6D%)vT#5&h&OAm@i|2=^Bs=`ef3y zrJ`CIUTb|Z=JszNsi3RN~Q_?B4h*}eO?E|hKF zD!_}X*mTn;di!)G9`B}cZRUD>sLmHf-@R(ObG8Vc_upshG4I%}^s{>6fBG)s)(_mv zLln>G$~cO_wpn5{*9*llJil6ofC;86$=(^7?ejtDo| z6^i4kei=gUUVuwK+6PLS3L%;-z>$a?AV_Kmx?@PMA%{VB@zT=Z)CN>m0^(_=bJ9C_ z3VZfl<4GTA+Dfix5%5k&LRof2xJ2Q`voxHR?{w4t3M~xHn9{Ox{_Gk-!RgPo@ML(? zrem%7&C4GOH}^BEb5SG`%#reoa4Hhtyk2|97e{#|C-!P}UU>lYEk%$VkNTSCh zP>`iKL`C~BG0=~VDrhGqr88MDlED-~N4iZ$0=&EkXUW+T2*<_d4WYA_ajjO~q zn@>8vvA#ITpciU++oMy7msi2czGv<$sV?&^%gC4?t47ZxpNbh{)@BO2Y=xA3owRN% z$(p@PDHAB{RB`a+%YGMICR9(YYA-jNzI4x8q&@RFQjsl-oc<}BEdkXHh9SnD9+KM! zooeiB8yXLj%8xxyRRU-#0^kb+Y?4uY^b~W2Bw=hpq5^7|we`%|D?lC8Y?DacZBH=H z&Nnv2uEaV=B2yw8#RHoj(JD4p4q23}6JiEqmAFi3i2cq;2j8Jy*u!%f5I9ULVx)AFxf`>5>IruVo_yRPJMf^v{e^HY|C z!lqOQq#LcoB27j6#of0~82mGH`V^@{9uD#%*|%1=YC6ZlZYzIXU)V%=G*#g!yHr*y zwGW(h2_Jj{VT}%P-A-!)0Pi4VmwSD>Ji4I{w@5LB=N^i`tO$hF3tdZjH`41=K8@3$ zE!L{tBd!xzPv{&>zQ?z@HrO|5Adi?B9)0LG)p!}}H6(kxIg2VRN>y9x z)&mB(jqh4D@%w5{@l^kB(d>r@UKPdPs=nD87~wo_*H0%UjlsY-`*3(xScCIX!~fFo z9kb5D*unaTd)&O1yq=#WN#+w??^P^g6$^9_wFhER=RqlJJ{}^+W)n2Utmpx*gNcq8}K+w1%(y<&7cY3fy z8&+yP^?b2i23i4`WZ?ol`*^Rdqx_hJ*FiOLqfV zUF%+;$X?^rk5IqYW{C+Qlk?)i+spo+h=secWCTB>Fjn6ObSN1~wF%+U#8I^i)2>sv zy1r{&zJphEC*+mPJ41XqchU;)X2MT&cEK=@ENkA&$LtaA=Ms^<_~knMJ$?F|3fx_z zE(q+NTeJc#s<+~+S)REU;w@@Y5+fjkD}^fG+bc3=GK?rxzkI9He^iW5P$Mb#gh_^; zpeOSi=S#|r z<+%QvZXCWVUK@D>8S^bF7F~f&3QJ_t;wCxgs}d>_&h$2gA|=jY_s5;Hba*eRx1M}1 z-NAdsOuEQGk2&NJXhGBNnOQd2yamTV%tad?6TT4C>x7p%XM`J<0)9|Eylwco=S%kM+RO3FL zWl+PA4}k<0-w|2f<_u;~D|&JoQWIBbgdNwIqwkL$;QWbaJExC6my z`}76ucdL^a7;THfP4N1X83qqITkN8^M;{}0AJh4YQr;D{I8Q1x#S$=$xV)wgXr5sm zTjT6=?J=IY1$LqNhE?B7)2cg>cC8`hs||&Uu&{Vak!4q8>nw{u4Oy=ZL4|skWp}sd z3IJ!c=6h$i?|ZSV3bK1G5rV>Z#s@gg2l(lfl6_I+&D{jj%OW%5t%asIKWswq$iUrL zF?uO7KMs;#&nDUkCKX137W!mBODgl5qksXA$^DxOc;p5Y>&aoG{R$t3omh4 zR+`MSAdz?K@zC;ZEtvtAo=hjgShca(_zWU)SXSp^>liio5lv1qiX?+BL~`sJ-cc4f z=w_~SLMU69A6?(Vd5YJvIH0iaGhNyo zZH{0ij{1^3{aBU%cl>7G>tWT+F^0G5GoSREhoLmlx`r6QbnCjhWc(DbK1W-3q5Q3f zqe&YI?4YoKK0@@eGx|8|6;$z2FoB8_JcReE$oT1HOj_`zQi5fkMn9iRx?~F+9?iinMuzbDOis8@ z;-3vgBPTUP$a?jt@9RAeQ-7|9L3&}TOnQL-4ZjKAgm;@tk$lB(xzi5NYsEs3V8j9mqRue4=2H3=1XYdEFa^4zb4=pJUzjmoSK zL}XZRLSM-cH_^+$yoa9;K6_r0dV@e6wn}-!M|5Ox8oxCfjv}9JNjOHd_JtxGzLnn5 zsO`7OigO`q5{X9zg4q~^X|;d_RB@h_IIjt3gXu(eiU}?a_ODg(@quInKhpMF<+PM) zreq(Dm@kIr>qaBa+S7zJI!tqhB-1=s#uBKoj)gVo=;QVA2}+%Dwx7l>N#eIrT?x1iuNOpe(yIMG07F2$zXwDhWZ@2&03}=zR4GUb zHD#E$;f)w!2Y(;~17aNMJBU)fA7RBPLv@Vyun=4cvmzwO5HySgK^o>elJ6)Fe{_u_ zDT!;vD1lg*iAb9G2-KuO3N^I{sb~uEkd#`eIb3OvJ5ASrtBr>smE9Xurf5L-kfR7h zCP0hQe_fCctIEX;7>03+E)kJjNhGDfISy5d!K;i2ZHUh+h5uX;iZe;XHc-Ha{hm-f zya?Ddqw}$$x;B+D5j}F32HXT%I1!F`*gFZB3rV_$!4?mx*yFejv{Q4~)0leCix_FWl;Xo*x4O+z`o1&c# zj_r;_r3t{BE@)H}-8A8B{U-h&K6- zEf5;VBo=$%1m@j>px_Ru9Jk8IIX^2%xtvqwLk!Sh4iNF{Egr8`G?huO1 zeHsHIj%~dWr^(1C8j6Jaj=Y%Or%}A7xyr|rpyhszC1dHVjP#Ok{&A{rdft2Kp$yKE^m`Dod z!Rm!*h^}x5+@Q>p_#~zlyq1^~jWe>lL`W?SRRLMPtMHDoc8{)M3Gm|rJo-n401e(~ zi5P*D3LHPODaxa~M-t%zE%4uth?|8p>eH=-$;eQCRX(|q%4ofrecKxH*tZ~Nm`_<- z($+*GOPWZD^=bZj0`Z4r2DwEyD@g}CX_5x9yv>F2g* zt`(p!kpvU5MkTJhi5=30un{P+hk8I5gXrTdRDvjogjx%ncE|{aSZ~L0NxVFV@JCnP%drZ*e z9c0Q}=utT6g`ixPpfL;oZ~uot^Rlbivrvn-<~{z9l)xS0 zUGO8o@*RbKfQwe;a5BgvKH7rv(3D!pjadQ@BuLxATXj{J)u7nE`N+tHAcqRhiB$qz z!}*8~VIIaI7Pyw1PkPq1Ac#%Z;g|q+1ldVQNpQlh4Y%E+@)(Qo#OfEu4DoBgQuorR z)uTKjbJXzS1;9Y}s}SR(X&B#OkL%&n^@;MRU4}`3Vy^|*Ad2~0>Vl+SRX=y-*bSwC zkwCGCm8%V-cHl9n1^-x|$c4~8i?lo5Xay}03St&BKo4|6lR5RG%)xaLi^gX`o{c&& zStdUXJ@zT_KIn#Ed9O9)7=#X|7@K%rwxnZC7}uXI2o#Eto_~sCw!M@D*p0%#`Ii^x zXE}|~pxo%}5RR${8q#A5!0C@}X5n-ZDSEXad7}MX=&|l|Mky84WrQlscjNitwpsw!OA6&HvOiQ(ih^Q~Y*7+&i~b z$e(k*x4GS$Z~w{nk|h54HGaN!pPqVjj{?AuEzpFMYELji{yw>kG*RIhsZqGO=>=GO z?%*E^B@xW@cv0Lk$dC{;ev8lo431NuP&{G*ztgpc0_fj7 zf}6hG^{fU6QWBC3lrqX6sRB~ANRg66N)#@g~lkI&qeiLdw<_n>&XNEg5AK%7GFz)oR6s;3j{q$VgF0 z)!`OazEb*ZhjM~Rgeut~1nbilDJ~0L7AP2nRJ&RiIhOQDRU)g3Q;71_*;A7}G86g| z=IHS7LjO|sN~v`yArq~s1d~uCqcBMnNwo@CX6RT`JHDp&Q&f~5R$>R7d;mY=O`abaDUu+WDIk27!X{5kaK(x+3eZvAe*_?Mag$9?Ao_t*UG7q2%~JVo1i3$M(!n%fE28tH(o`XaKzno z-$gJ{J?|-C-9Y9Q5E6oI)D%TkAh}WsLlf#oAA*)WI7U0|wJ}^^Nkou@76r7&1}Uzz zvr+__P&5U6Nhn5!5-WW-273s;CxH}WaKv6aZIH6TL!+!m5k>8(=ADoAe3+gDN=QLY zc>k@G(uzH{gJYL69 zcA(~z-L~P1J1)89nk#OboKjeT7E-2opR*qgM+zC^;bzkoKfODuO=Gaa%19iI$E#ti z40m5j*B#4>EmI68?k4xm)XEkQPZZa1&ML&Nlm}aM(_0>or(gk56p-&sGnG=)$^Qcn zCdEg+-4yJ2Gu6VyVEKlZ@}og1~WN0{<#i(oU4eIF+;V+LACN00l^P3Z=C zF6*tk{yOZ{W!J59v>VQ$$#1t+)rPBScT-hS1S^#AEQ2dNP8`-0yxjv9&`N{>Pp3CW z#SgFD@XH&=9d}4JM19HMZwP)v+RrRSx=5nA{`e-hWxe^`YH$6_)r-%*`u{9X$KZBJ z_@5UE6ac>IAdh%9;g0-*1rhRP&p0K^-}Sg<7zmzkc0S-(6|Pm#@`jTG=Um@1h8(hI{zrrvX-{IrA{JI zJx!3ZItQ#Gb9%`-2SG?e))A&oz?BnWDlbAHu22z*}oBbQ8Qo}0NCT0N%1rWz71Q|P*I{!2)4GU`2cEVPj%yq0! zo@JXzU9zGuZBHrbfjpQRjgy3)p2Y^BcMEW5frkBecdy^cUhTw z@3Pix9ahKHtt5bTv!*?5QO;@@ajZkFsC_MLV=LR~0Cu+Gs%_Lt5!2trmt#$GOKTAt|wHS?HkYnd6Pl z0IS>0m2AYf?o}!)7z%^}WFoDOOw(|2d&@ZXg}X%IFDB_a+;Zs`Cj}lbL8<58bLH{C z3?3tXISac1I+&28D8)?_``!&xl%Y7$!Z_;KQ)!}?xc?!A?lg&FTxmiUOE1ElKF@gF zz{+?i%p{i!3o}|5ZZO3p#_qOk(#{+2ZzsYG=YpxL;dMUqmzb^bdq+D^zjCPJCcA9+MOD~fseMYm1X>4dCV-L!>hV^&kENogTmV-rc2vS&4 z==_#MDLhf>vY)s`RjRQh(roZ^R9O(`940_O;{UF;H&*HDSo^;@fv97mE!UnL#E9n3 zFl~$q0AoQ^nI{lOa&F zF0N}+_oc-i%nU=Kpb7tc_ne|4)jE$}avpg^hvdH1(k0OlLXWrQ$t;R@X6_qfm$+N^ zg*f8PrA)%ltR$mANtg*Di2^hQDJiMTc>fAsN#)4X9<|U=P9{?ThI!bRb-7TD+Chq) z|93KbVtutC0+*6Dg~}A_3EBW#5Cx@YI3z1fPejqzhY_ZeC3Tekf?OL`kc`W4p-JqZ zP1o8K06j=4#Rj_bkbe7@-!tKYS2UW~Z6j_tnr9uC^HP9{Q;b}Hj1KG*FaN)jn#Gu@ zxIiW?cXB+BNE%|66of~l{2Au-S-8*+c+tg+ ziNf^{fpCPA%)|zC%7h5oys43rz5fWUXvpk5&VKll*hv~;Ko<9Sknb!=4e?(q_#bXD z)fUvls4$*RFx428NyXuy^r#qbjZzI^O1;#}`_6vq#8S&Wnv8Qh2Nm?9<#<29aQ$(@vTRD~970ZO5g!DXW^TI0((O-rp0 zW<)_=w1Os-MPWdaBt_m)$o~@;w8AY2iY8tnIkwR{QUoi^oU`=expgByW>P;UVe1XV zNwmTwWXlge$N3E+Mdl&KQJlqH6cgr3O2o-0Wyg8|mGijRoAl6|xR{@L(5bxG<9wY; z>YL%z(0(k(i;(1ZK-#Hf*sa9mO}>dpf#gqZVE#FsNyJLishH1I94m~0?~#N}VxiA{ zojGAiPr=|zj+ml&P^g#*nHUpajFx2e;MD1xpRmDxu)-FUo)s>B}E=Szei zm%T)Co?F;(!p9uPUkqP9MT|?(%O`=#LMYEm>`@fFgcQUGx(Os;P|P_!r!OuYcv9$v zs)lD=Mt4%E7W9N9j6#ZlV}<6#C@`o~5Z^^bQedE&B&0{ah*Dk5oOFU`w@v4j0NkE5 z9%4}F2SS923jbtrR_F&M=ZO|+fJ!Js)KhZ4O}(^KdJq^D)+U#-Q=RczQQ@Bl_5}jE zNC5tnmz)PxFyVfzibw7sjNHhoI2B2p#eKLb#SDbWtjC3XANrV}Ej%D&-XBOLi-zpr zTZrM&+}}+2M`kEnp9+L4ZYj7`NC=MLx8T#EIpr_PQ?j%I!<i&PCqtO_akhn}{nJdw#jy-JF> zDQ>t3I~ED}C5tOeL73VCsXC&ij1HMp)s1+`Pq=ASk%FkD+5(CSTrHOYD&R;31}7xT zEwqB3CjZH>T2+roR)Lfh4Ka(3*h8fHM`JQcy})a+DglvLNwcEGtki2roC$pR1beUo z88oYz*hIP{8g%$wmu{>@62)X7#YQ9<^TZ^xHjDyPTs@>?l-PrKw8zT43M=?SN&SR7 zd>fqnLVD2b%d!h8FkjEIN|4GPb{fa4pv_N|!d~!ONMHm*-iYhjqInL7yP;T6#Zg97 z#-tvHB5@g?hU-d6M!tkZDTJ#?fC^dUY*jf?MvH!R-+R%%gRb#8yeg#8kv5sVGX+42TfKnfil0{DY>nR7RXctkjIL zK*T5v$Gg;mD;$X=jE67Ch;WcW0xZRpM9ivuQpp(zwgxKDMkIuBto9y9{WacEWTZQl z%v%x&pF%IN3`oR82*<@@ez2csoTa1ci$WNLl}N#?SlvR*2e0%9)NKlUC|N_0ftLK~ ztK=NBy22JnRt*|alDO_szFJ4kO3pp7mtu*hjsmhIL~Aly{W98myoVHwLsNJL%BH2- zg@;;ra61&C>4l}#?HU9-NTSB;6tLew)Szde2*qT_NsxiiNdl34VrPLwkiye>nEy$r z>@bA*@bvylkN8O&03FpEXWEb3XD$;H^LYy7Q4C`KzZ?+0Z}L8NG-NeKdzDAWz@vuz)% zm<=d}1XR?+>>31bFs(+kU(`$n;biT>l|)61!CP=n$c&08e^PKH1!dF&8)&kBCPCEc z=pEbbbR4L^ky}CRhbve{4O4{#Jf1*U=blhbGVcuAAq2OHd{K`^rfL_#?q208dc zD}iIAU+DZdp#0LCqUP(4&KM2tafFi~ta^03(@pxNK|4kegYk&9@CmXygB zki@L;A6mKu^tPfF+(=3QHKp*#S&*y$P;`sr2vxbmdb}0?o~0YUhyc^XsiH5oc8LH3 z34xGF8346CIjnaTpQXkMrj}uwal{eU(2Z;Y{f>eJv}RHtT^u*W8;xDpw&-1xsV4zv7p>*fmokM*b}*GhCQTZe4q!-75~+ZUiP4#aP$a? z|Bwt9xJ1~Bl20j48TyYTw8!GcbQ_v0#l78ZE@2e--%e-ccU-ktwGZ(0^+cTGui|j z%_3baV>3=tm?7k49ELbQ%)iBS#pT;`=lcs7=t@L#WvQ6&J%lK%lLUAoRCfD%BDYLjMG0_KBj ztUe(o2od)542ZD54GmU$qcN!5X=c6;cY0WQw0KZguAyWBC69E;b+5;yGrLG8Kx@}S zUh#YFypN!R_idiHG)r>o&hur5?d65C>pDbCLIm`vEUA=4Lw@XvO2Ck7Xo(|mkXUCZ z{SLr=FM*S2hEl}pZL?T(*%(>pFZZ$pBm#PD0XrHq;Uobk3@wa^Gac80Cr5MC)j~rs zead?jf~M{^`$8u$jg6xO<<@vp`NKKWD9;e+e@q9H`s} z_BO}e)adPS@Js#y2+F+~-PiZUIO7M~uXZM_`K) zE$a9B6LJz$08hQpDFvNSineMc<#EMiBQ|x^(4_)%_a@VbuV4QP#80%vBw+j$^b@D_ zZvm(U%J6k_D>_3k`(xRv7;^uYl2EBfHb9h_B1MUWBoUHqX=iKH7AadcIZPmhmAwL+ zv}|f+uZL>RYia2peSq zvFBN-hm6G9Aw`KPMlp^Q=AaA8w*nTlr?&JU`z^TNUaRS|*iaIsAKgexFA6f)F>Vv5 zl8Az$g@Ox?lPOTD(6#*hX=Mx5r2ime6js{#Wj>^0OuN&5>P{}>TK3VB}Sv`topD86)Gv%u~7;$8w*a=T$^P{LsPe4=hfpRdrg8-YLPHm z(Ka=86ls@=pv#3^<)~4Rj{kLb3ndg-wbfpC)lfTo-#t-^g(Yldf^L_JBHDLHA*f$X z$Ot&CgT*XBi}5NZ8Q%Qz`vy-GC|s!^=D?%M0G!TxLtuHZ}1HLN{;O2sG&z*y}+;nT^r zw4c&2B&W7s>h5pZR#ES*@_zeK4p~{#ZPM7zSVO=6j?!nm*$&+CDCr&zr49w;(mutP zIvj7iUvrA_$pvrx+s>nkJaNDyXT5F7Jxec3GCsAk^U9%GyY0F&23&E^)hi%z%2cOZ zs>K5j-t(_v58L_Yq5qE_Ur}Fc>M4H_(s;T_t*1WWrV`FtsqV3VYe7=Ff2ww=uy?Ad zQ2V7ms`Q=e87lZKM`&EU6j&ZJ`<+$*n^CWQ3H#n_>=!@$jn946TNF&BurEK+Z+(?X zp#0?3z^EuIbQp|E`d^slYH&;gjAGk(fj!n&vW>V~uNw_?gwQjWW&aib0A4Ma)z&hj`P>)~MLU z4KC_FQOHk`$mm72kxqTbi=AgQlpHB|2t-l*q8m-uJ0h+xa9qp`WdNy0N?lGQTGHI3 z*0;hiM&(adZ2#lx*4VpjIj<&0T;e4$naN7wPkc#8LZ|GwnF~JdgH6PVMn)083$BoU zTM1w(uje&w#q31>3ylmdGfEBSk~I0s6~AmbDHLk*GP>N%4O8SoM@p)dvWjJBjOk3! zM3Yi;2_`YInN4kS#gaq3oY}Vd6t;wOaH=t*;mC2zo8Vx*-|zLTDtsmVO+ znNNK}3WrT8pZ27tO@B!MJq^U?J`u94v2bvoph@3Xl2(!dHnXAROu}i@wZn>vMwbWO z=tn{NPEO)c3R(anHX#|(%lt_T(^4sD7S~dbz7&%!r72DQcvGG3bbddyAXKO+J@WDN ze?v6@w|-BYVwCFc7&sFZF7)s_gz$Veq}h*^Cq z*&_AWyf&6m~i(I^~D-rOUS9Tgfcl)IS68d z`~TB^dBwjW4CE~zC0JeR^0r>73Rs~+VAXiAs0v()gsbA6P?6Ou3aQdAV~G&A_*bx* zX`zWl>szxX&@0-aiccl{;^)@SE9eTSU3(VeBxpE@T|6O%?TXqEwh+R?^>2nVIAoxj z6GDm#D}_g>(oap-zE$>CPEoWPjs*Ezmusnd9J0A9g=8(`rBv+*dAZDt`5`uODS5N= zX7m;}!g{*Vmo$MS zS@r11F%hU@1Z&E{Ytsr~j9Fuq1k4p%=-)s|D+Lx!fvQ=PN`F%+8Fx%*i=_3i6xQ0{ zq;1C@TtL_^S9#Hi*@F!piNbzc zb>%nh@$WUOCK45Cg(hmWfl?PbJz1R3Sg={f{7{EEj+D(N=(8ps(y3lc3Q?miG6nK@ z+A^`x1d=vGAzKuH46XRZ6vh^4Es(+=te`rjGD07BsLVSCK@F>H(FQIf+W#@ZA;XL> zj75t~!XC}e^Nv}grD}KCAgppaXb8y)e{iA<3LiXlBRI3Oca_jAw>dK7FdBx7)!3oCnf@<3^>6zE@s3E zinekr*4!na`s<>8DElspn1qPRF0TVa$TFNL?viY~9D_%0t{+H21OMbG&EO`@t}Q!u zCF~&Yav+HX)eO|&13vx+J{+TDu0+>#5Y*JeIrO4emM=N#3<;t@3q-9=g0Rk9Fimz0 zZ~7yS^zJ&!L%yuYF_w_eE(2z;1WCA{6m9`T#%#jwDa}$U2jOeSYN8Eeg9?9e3hM?X zq@WgDfeS)M%~+upSVc=1t?p{!(K4gaV$e5W(iGF0OwN=g%4qAw(^Apc6r_(FpCJVFVAQPED~ zBZd(qimxq{K-%zvFLdQb^oRJ|%x0pXD#XBDflVAKBzg}p{K?yD1|_hu|FmT?YQh?yjVD7w z3+ROvHsB>vL>S-WAeK-lZw=Rk(>VX5GgD>2r+#au@ zWDyqC5-MEIn;Zk2HsmR|%jPOBGSVV8{)9yUg-*)OE{TEj57;p}iF*zR+kArP4G^!+KxEn#1cJ>H%c=yh-FN6<=>K%3<#+J zR)XJ(Vo6$4Fc)GAU}Ow_13NI&MkoqqMr0$_1aypK*NS6HaPSW8;p=3OspxAhC6t6} zXe#vU#%{?ee=jo1Vgw9zV(J3)KE>fGBl=w7sV=C*lubz$@K}HjqDBE|Lhmh_luh#ER+Jzt zZWQ<0z}c{66BH9qrR5Q|;QU-d_*kgMdP8b_=#P>~CtN069HLR(4(TS)Y4l4)3#JrY zf=5+UNG#?h2BS^9;=Tw_Em z6a_3o0zqv-H;BU?IDvTPZo9g$6?hfYCQ)vtU;-WjDcU3?e8V`gq&3DsFOcL$6yWOC zbqcP|72wnDLShLaqZGI#HlhFz^>Bs8tI-BAVv9@H#+4MfL_$g;L4~6HvIsgHgEjCX zRby}h%t$OGtyNlqGUY}J1|o|>Vmy#S@s{H1ga&6XObbTB7DmP^$JJ9shcUL()OPMy zCv??bjuxLTdwN4!_z&EAgB?IJI{yem8%s(hTA?t?qCd8-AyLoV_+r}hqHU^T6I`V` zz@kMDl`wOyLNqKPT*V=%1}e!>E)rq_LqaDyLITsmzoaxCp{;U}Bq{kKI_$wu62^ug zY9~TZCBpP2T<`Cy;@ghPE9tft*a1(bjP~p^0Zs+<++uQ_EeTL%3i>AsCNS5yk4*w3 zO&hFpWm3pY$&)%Id$;Jq5W+5^BtUM#CKjYcab*+`g*B5v6C&f3^5bHploQ+{R|GIA z!38fqRV505+5$vbi=uy%26nYC!iEB9x&u2K7xbD7`KYUC-8O>T(pXQiH8=xyXm(#} z0WhxQN2egn#)A_KGaM1QY*PXf!C*5)2=f&+2q|AnqWInfJ0zhsbPn=7 zvp^Ly_jW8nA8|b7&g%ZPgRX>CHuw<>pdz4z?ucUHlHgqJLp5~MQI2yd#$wUPYxr^x zhJpA<*3OEt?s9}90SF52YLCyD1P|9%G~xz4vn32|WIW14Bf>;PDuNaKa|>Q`G~;9m z7C;lkf(y|26k!u2O143sbqUT_AqpT57vy2L_dZ6#70O^g_Og&0s$MaIK?|%Z zG1DKnZk$6d;4Fq)*j5fv*6a7&QbNU@xhQ_3`Rk$1B-B}dqjI>QHhgGr>(o0o5yC%&IiXPEBthcg z2u7cunG^Oow&U?0Ii+N)6s=#kPQ3%VA^=R;pdEf~dVbO%Lyj}FCBv0q?0f;3w^aHP zJc7tj)1vU|Oy!7Vf;>~afC8%ZWej?}lgJ;{CB z;glwN2__ePQe?aFcOmo zx?$0PcIV~Z(t=UBjLc+e$7W1QL@hRUS5*TE5Wq}g^DwWKW0B&PCBa~)g^->|zC?uI zrgkkHg3xmhJEeeLcQYA9!kBAfUljY%RWnK);!3n2SK=fou%kk1I7brJF;2!eTAGYh zgDC!*KL~0R*8*5tL5`}C2x*qz@MLmg=EY zsQ;S{GHRiv?Xab6P6|fYkL`2HZ9$ODsA0B1*4-_OkU|n{t{@0xNVU8Yb z0A+yV9VG1bo*Lx(sMje{;1xJ>JMJ)J#zV^}LzDNcPM zFuCD`M_^H1=3%A)^8CZTMO4dHDXbOMS2JUTq&TBOBi8suiWc?JL@N@ZHo0Q#>=K7^e4|VbQb+bV+;DwQzmBQmtsKx2GyZt%H>u2TVb{VqCkOBwOZL~ z#i~^+DG~&3YSr#wt1S&1k}|kS!lr^`lr$6wG9<_?TLgXtDJ4ltDWmL7EdOv)q|BK# zYudbtGiT0|Qgr(K2{fqCp+t)sJ&JT_f&vjhHVr8uNs>*rNX0}dg<)1H3Ya>LB4KOT zkV_*(5%~0L*sK)`B#6RxD_W*-<@OZ0RqWTeSwlvUTa&MprcKL&)r(fFUcv*Gxzh?t&&QbxKt8&DM_G7LHyYiMSxOh!v6|P0d8i?6hC># zAACt%L@h$ar@--#-&$YP7X6=$DUkwrn3RpvF-RYM*cRTfAmr4=KF zPI>jyNj>^@(^U-#iBn-EikDdwT8!h0J7lD26l6(k*4dLp#R%q*k^MDFJ!DKWMNg`= zvjulC>IB?UZx(l*>k-PN zq?TTasfs(=7vLr?l{jZmSOSHFpXBw2(oLiOsZ*$pp(@j=e$v!dtSAMj#U}N%(#C7D z0+o`K2hI9wdOU&Fn1Biv&=l@){sfs$9v^e>9*00{y z6h%o5{hH~5?6wPUyz(lwEmTs~Xsx6|?mMqfl@cYz7NZncUJ}-E`L4SU)nki2t6hnt zUwVQEU=*WNm9I|!b~j|dKyB=Cd2*f_a>*v2++Lvqjl$W zZP<#oFaHcQdOc+vbkRnG_o%8{2q!7gN1K>5NIPOC$rj`}4OG-aVa?)SOIQ1J*kU6} zQK zDK`#zqqeoPA47ET*GlPXAO|hyIOv>vGRUxa+c`$9jJ0 z#ay#`xie=wq-TRZJF&Y5Pdx9%AHSa7mo7=Rcp_Z~)SR`;A*HIHKj;9p%Nz@6#+>2H;SVE#S`!Ve8Fgd_yi^H$;@mE_Docu~pB zUh=kanP*+%@`;8>!5NAO1$`y#p%3X}w;z&Fc_uMf62`y|g+QcPQ%KQwkgiSm5m>5{AFNs!6;hCbU_a>zNyZQ@TS+omQK_K%cu2=gYI2gB^xpp{ zr6n@#Y6?@>1R3n%ii{X>Oj-gX{}fe0R`zd|ZUK=0)VQQq_AffRRO3=|^hyMgL6x)I zad>Pi$XI*^{3Eljla^(-Up3OaCS5l7d13>Y#rjN+Z8km#1$VUI>#q-OwP zluJs%RpuUOL+$WK&m}{tsuE8P zR;L52-Tfeh>15Y6DjRW3~6h3r%a8M14OZnikPF7XI}$`t5> zQZfmtZ3RDjOA$shY!m9zGXEf1p&)`iCM62l!e>VMAbZ%OBU><~p&OK%TId-x@gIc8g8?m(ve5YD~MF#94qxOh{3+orKY^15A;DT8tgv@rd zVGBq)>lWm?A7+Xh%PdZblNVwgF(@-E1XsXNcWRnz{^gwub`P*Gj=7OxTymndv~F5r zk6R#@GiK#yL|&sIh>*h2QXqvd`Y45ia9TUrb%&teO4NwT1sfxeAy692&&yn5V#E@{p4qLLc-!q=fLIgloH<>uLHXU@pgvxo!)5qogL z>Kku6=4$G8pnXzIS}L|H8np?0<}wPButhxzq$LSN`^bdmDYmnsZ;GfUsXqNS#-c@- ztVn{f7(?qp=se6}vhy#LU#n(eXHqWjir)oHqNhtVqvL8-YHJ+$l4n__g+xZgp0<2f ztCEr}!nI-IC1>1!f3&9f9{4{yCwxkqra|5_BKL+SrlFf9vMZ|2l)ec#(h5)|0a_q)%tCXlU~@`PO2SnOyV59GadZNqNG_o*DZwZQ0bPD3 z6E36>JY`ZnHxQ`>Pk@Il^rlB7H3reOZ$*SHqYxp!&@+M*Uo!Ve&QP|*fc zV+e~7*#CgBcr@VC6pRHiAmJNx#xM@^62Oslcf}Qp(lSy&4*SLu3jthgxL0f<5SpN5 zh~=2YJGBQ4j97*hb%2yi?xR(2Iz0>M~qz#UU1UQHo>PGwiU zvJ?)*JRU@g`M5k{qK{|uSpp#?Zo(>3QZB^O6n8OD%<&O7(-)w@R5b(|1X(O^gOD;b z8h|vBG?5ho=^B^8fE8IT)A224VTJ{O1a(o0ZN@bH$dWYlpZ67PZ>02cp?#4GMI!;7*S8q zsQ;3~CzW6MAyx^NAToC}VUst(FTcbpUZF(=&~HQXkIpkrO=*yHA`&#=^ zV=xbwZt139I^>08X_zZQDTnzoXQV1?`I5J>md4YQxDzgz0ydmP6XW(;65&T)shFSn z9byTZ$s?2Mfsa9Rniq0Gh%uV2sVQ^hn({)G7$=&sX`4k+V7HkmaruQ~rklU{I@k!D zn8KUGX`G7rn8&#yI0bw`qMXn96Hy7BDl(hXX`NqLo7V{^CX|o9shz)>nBNICD$|pF zQl62Co-w7K4Hzae(VpkIp6_X%^O>IPDJbrFpYUm)_{pF8DWCQEpYfTW^eLeIN&lex z>7N4%pbA=`32LAV`k)PZpaF`Y6Uv|!3ZeR$o#KfTZp5J<>VU-wqTf-SBWj|=mzyVQ z9^iACUecm3nx8OAEHdh%j%lMadZRUpqdTgjJxZfLnxjCZWmOQyV&_Whtk3YE#08r(wFMecD-cN~US*r-Ld)VoInY0jGzms3DZ1i<(8V=%|q@ zW~C{qW(ld4imAtArkN@bg376%Dm!fos%~jMqiU+h1E?x$r>)aBUwW!>s{g02+Nqu7 znX=lNsS2i^+9Y=ACueD^zbY@H3aW_;ti?(iq)uaOZYZ_}*o+M3q-s*LG$C*j2J?81IjT9i)Qxgt?EbyTPx&@h-DX_=+ zuf=;905AdgvT2_DcP-nnp4-s-mKKuWi$oi>j zBYXt}R9Tn+|H1wa>T@nH|OuumX`Pg~(2b-`4Ht4-yhAxNYUw!m`oL{Mr(8SFD$Tv!!m zfkb|%N8iCr0wG?wXlPo%3Kb`K;-v-c@P|)zY>gF-+Tld1Yn(vKsbwf4?(|Yeln@IO zXj9-U43Qui)+StlX_Q74ZKe{=vPjVA5?d0#bT%KJnNqc|D6lqTCRP6nrNB;6foX0g zF#f<&t0f5zLm7#L7#bHNS0A)}B zPNr2Q%!GfKi)R&NiqRaRaTe_~wn}D$2hl`R+*+HnL`006uJNn~goq7s8g@yW-X=~xLXT`6?>LZv}3R(tB}m6 zWxL9FT!{wMQ(#}L;18S-ORZ+WGf~Fd5<^nkPNNrpl3@RZ8{ke80U#>3#iTI6_V-nQ zHqX-<(+tlzGpBgFx){sOk*B?XfJ5g$(EfIHKX z%A39yBe@n4Ff`?V%-r88u4wr&CRNd9-Q|_K*_fKHXU^uhd9B=e9*2@AGTi3u8mn&} zFJ@lne){Fj{jz%w=+Swurn=^VZs_@;=XILjhtBAGDdLOX=#ehrgZt-_F6n7rsfBLo zhu-JYiNTxR=z?pi0SoGk-s#pE=B2*pm@faRny%_~ZsckW>90QJqCToPPU~!b>YiTd zxnAe29;vSG>r=k#%K7QDKI{~1>&ZGhX5O%=o9qTw?9Zt-NuK1fq-BPB?LN7ye|r@4 zdZ3Tmslg<%(LP|f-lr$g70*r+DTGWPJMCW*AmDM_ij;Kb4rZ~A=8)1OEiQf;MGDYW z64OSiK@mHNenx#JnB397S8q+mh%#p?`5r1oB_h_&6oE7iGx#WH#OB)f-nj43uw%z@; z5M-bbf92ma)@Y4|k)$vN!|UW1L2^oEyh)^5=>9xoLKQ)^KuhQ|oS{mRwL~X-UA;?( zT(${Zz$`o)F@K*)cRs9AGiQys5?ftSTYzbDm}nPaR&~`Z?e&Hap-9}A6{xd>b2q&MUq5UoD>wOWlu^J zfo--}Y?V++gaQ%@tW?QzWy+T^V@gO8;b6N7N@ymCGHRd{1xdEFbG1c+l#&V!N+hU- zm8~f@C6-aL6sHoIS+#EE+STh9s%2DDJyJBcuxf>MQ~@ax8nz;%Q&X*0Tne?A1SDG8 z`QtPp$&_{;x3H^cG>Mj0wrtZ3%sYv1;DTlP9@DOt64!xe*W;2r2`N`(l8|XfN+)1e z{zz@f!m4PJ;Fxdhw-yon+cu9bq?X+=UQM$t_IQfy%*Cx&WiXM=?#DWDxKHYtFWDIjad zmc&j?6{yvp$xDNrI^B}D}P&wlqoi` z2hiW5@b1A<+L7*~QL4L6iwHyWCASy-x-N<=bEDKDPB+!mAu?713_?0b-C`ooMlEtB z&ZG-U3Q_tYWdr|1ziX70RHa~L%L&-@^;ckn6*f%zhBfxs_2xqJrJa%}X@eXp2q8XwuA-Hi4H6dpE)N-hB79 z7bqVSxGATdZgSE_fgO^7$sr>EX`m^bf=a3@PeN)-tO{5bS&lpQ_+w-FivnblOD=0J znMN(JunpL$<+sCLB7?Fh=2T(5^mmm_x*Q`>jQpxHc{59;95w53?W-K zu@j*SX`+smB!b$a74am9WTKHCPkaJR>?wr{z$CG!l?RWi<-5fOEFjCrn1#%&mbMn? zxS)9pA85b?O$@sNG^s%K_?g$f6SiFKY74z0UIQKYz+kxzf)msa=wdP>Jhehak|2;2 zJSYVM@y2zcy9_HtC?d|3L}_G5+~<@akWeYcLK>USizwxnv~0{rKsq01EVK!OlthTi z!=V3aP}q*g&CXp?pjZJcrX__?P>NHeVtYhZMJ%>wBN;p1Z8`+Rt$7e%G1)>H=cfft zAZR5i+Lsja2AMH?c|X@{2D{7I5CBq;Sh~#T%*#m z_((`bGA;CRnj|f$77J$OKU*M2D+)k{QQ%93^)Vhw=CYBP7%!DCQ6($eBs{pt?Q^e` z8-Rus6rSuVinClvCV6>DU6eiY$7H+S87aQN>yuH-RjM- zzO`c*m1|w?NNVNFI>!v>43iDhhKhXqx~h76XGrEF#O z^H0kPcCwk}Y-imASkLBXu%RVwY3-6$(~4=asby_z(E?i6CTo@%jcsjhOE>@9f+?oC z!^ zO_@X!z;1KfcHIJ}{kC?%5yqr&XF|hf{YR5($u3!jM3cDK&6ZnB<&SJ>&xS>zVHo_+ ziaSb|A9eGct=vh#YLdnYQ&_I3)p1^~d%@lSMhaROG6-{=7nR-SEu-R1kqM*)QTc|* zejzeTROVz43VF&{&Wezfby=~_MR?2*YF7P@K@K$wz3?CQb1c69&Cqh*1wTSOPG zZnZ_kQnE!o3h?F;*%Bl#DnOs32OxvM*+XMc-isXi=;*=ZKfIZeisXmV3)*cI3(_#d zBz@+@windF?FyWP@}lh+IW!kSu!86J-B-`=z%OC2tml_dTZ4HN_8Kfea2MQ2#JPAY!+I$RN~2tBgDol^td~w%&>aw`QPL9Bs^_rmUIC?G<0% zSux}o%$-k1oxnLs#2+pliBl4Vd2j8*!m$xbHsazLVVK1%mc-)}GH0&TlRrhIM;*41 zfU2;gc?v)r8O}2!Wm_mR3Ni^bHF4)CNc?j8{!P6d#zKYc+du#KW~GUP5&;b{=r_h0 z`E$=*S03LybhF%ua1xx&t94LbW0(Sg>{J;WZ6S?*$uhhKG?E~fQC?*kcZwu1KENTZ(IwL4>Pm?eNqWrFpk^4-I$@Vp(o|~)9TCxncjzqXTES`#S!sc~$>gk~u2K zB+qI{%(!kQK#E#K<}eQRpc05(i%mcyhajI*fr=q(74YZ`8L|a@yA1S+g1Fm+$7vTv zdk~*swf@?QxeKGSBZH<{5z5dN%77-7$qf(+jq&-pz-Sd8DG+-&BymHZ0T~5W_#gz- zCkfGlopB923AYt|Gswt1&FHZ9>nd|A!d?m<^1`6vs0`Hz9N9CW0w|6LDZnPVjdj>3 zz$i3M;Iq@X4R#n1DX<(TNr2;fh>BZ?YAXOXsFWI!yn|34bPBkvLm4`}Lp$7vX3+wA z7!Z{Z2=tMdNkET=*^Jsy0zPYpz;U8|lLC=j3B&(6ioh6>F^o5z@Sq!U9R=9Fb`TwJ zQ5u*lm*;~K=1a81Kti|5IaCA-gaaw~Ba8*wgxa8qF<=Gi84O$4IPuA!m@&5a;evzU zAIadJD0sF}0mO{M7469uRwxo%2$kLdjc0_3;0Q8n3?n~z3A1~%rZ1 zqpM{Rv24MX>?Fmjd7f`alR^Y=eOy z5DiHPpg=^4Gm7i@4}-uLn&hLJ93wtrKAQi?$KPv(Hn_+u0N8k!;zgNe~g&=p2cR4A%)sCZP$7co%|PKYBT@vHYm52%~QVA?#5C ztYC~qS@$2o-WPlxeJ=z>pX@8kOgv%gq=;^oRmesfXiG4A-$5hfo68$i;lz z!RN3LF+-oN$sEry$g{L4-aJU*YB6USkZAFd6B!T%kOYeyGFD&*AqkMg5sa;|iB@pV z(lHcXdm+qo7)Wsi4u4BFaD`IH2`k$cUJE0U3(0}Y5T%5}15E(pn*!vMJV{_7P>i{dq&Xxxz7f%=-mEHB z%+R!i2`y!oSGawamyou=z&V%o#2KG5d*{pr8(WSRkLU4ITWM6{L)&*}|+t z%>wZUqwt?@JBw{JO;J$}d}OjrIk*$sG#Vt$MGh^i#yeAVldmWP4|;GU3!x0pvycNx5EwC>|0s?DnG1Y53WIaWAejPz z=oWqa2@bJ^0l^b!(}L5{5(NJV34kF&uh_Gf)I(9}96i0l2EjamApt4Xvk_KE zHBzvX7EzFk{5D0|Aw%H|eYr>vxi8Q{7+GTVMoFdEm)cOWoeP8&kZR%$6)6P-37P;(9t}(| z|N6VEkwaR`TXo7?p!Kf|#EZYYc+>e5ljJ-57 zff?#>1v+&I=1an?*a%SrT>%w4^!ueGL=S|!ua??ddeVy2wcMB>FWBAKpl}KdY$=3O z2}}Koj2c_XEvR1oUC#wpaae`-A+V|YqcZx?xxFbME1!uNLdR7v!PSeLD%`CYnesYb z^e7fPO26v$+r|HlHH#Hqaw=b)ivm%o+^k;q>6&Gu4FHJ>C*#VH!@886GuRqL1_{t{U#)y-;EEeXbk6 zFaq{rBYuk^#^Jv`VkQ;*w!t{l#D^&SEbCV&UCgE&k%iTHzfAV=~5% zC-&9dD`PcYlO&EX9kL)SUXwUpI!g;$j^Sk--Om^jt*&$hG>f(3z073vN-9F-sq98Xu#s=Aw_AHmgzQD z;;sK!08X%iCh#a!Hf2#31QIkl%P8^aZa!#&c<$oGHWii!lq-m#!yJ)gfG}>3yTj7 z8fL*@>hC%Ve`1gGsxfd59uH#Au?T3eh^g~p?Or;uE}JIUUel=F3j+O5e)Ax70__>& zy(J4O8@cWEdaoetFwrqC4>HTnKAy;kE1TPouBPm+P=YS7geI^ir}4QVlW8%T(r*8o z?CL$; zYU7Uaunun~a%2&w<`@s{iS-Hx|KhMSij}bLx*n5kd~XKZLdgEEC!_KA+^F&<3;3I? zYm;x88s}_ma}bjtx6uN@KGMaWTdj!Cu}E{oZoNUuvaFyoVRbbS;`6Knv#kF}b37k( zYMQq1BC;`mae;Nmmw+-bE0&g^kG?LJ_s%0JCRV1)^O$g6V}^{808v`AZ;1xa_>_%(h_p*f*6k zlk#?$bK>RHj;0%-bCY`Cd6v#;XNkXiZZpTAW-)Ev)&diWr_bhFw0-g$FMw{ZLvVL& zkR{~K$z}!9bWQj64)t655HKCdcF%4WA|`dm9d241c$1PK;l%6pN+${5Sa%LdYGknx z)|fh)rfPP(jfqc$|1KK;FHDs2gpv>pKV88v^{hLS_%*5ZdYgYvcPMEHuE<9 zb(siZ`grCrgOjj_49Kq1VzF~_gz|oFbvl2wHJ9gC&)x)cbzxQOnX>ngk7x!%*||>{ ztq0mz&*W^Z`m7jpyAQ(f4Ge9pGCxWDOXpiNM_F&1`1+>tzy}NZCcFz8+i{-!TQ}*L zNc_E*AV^1cAJ!K-dWrttY39w3q-OUZln@Pz@4oNeDt9LngYXR zA{>|?iNYui2P%}JB_Y9x4h=?V=upbShYvdH5{SHC8eGLzxVjUC6PR7mk= z0gDTzY{~i5<-xHwJ8sdKwxrI5KJPljxK^duyKCdx%-a_6NS7i>nhmUQ%R#_w-IB$~ zcB)LD12^h4id&{zD8$*nx^=kp09@X7$nGxkHcDrq4+lg)}dy!J>(aK_Y4Mn;tbk0epYP!RQ6{w_Y zA!IJAfYB=3W)(`i?ozITpQsY%8Q)F< zsFD|UBwSmvTL*{NEL~-#MW{>NdP=mj6}=Ek-C|4Xlv5l$Y)XyH0qyJ&g zMW;ha%UZXN0&OTDjW)bK z(S~qrEL;34QY-N24L2RE87H0cP=X5dqCW|lMS;n)$W7BKU@M5xaC1SHUUZ`?Y-v+q zxYL+6#i0fLpHOKxP@>_qqV-DY9pw^G4sFehTzd*k@oCkoT6J$q-~y6)aJ~zHXC1(Zc^6WGg!~rr_{~j%i$v24&gLT9uACT#$r*1lrT0wo*&5$rQR! z1uraNwNhy9YrC3Sk?8fdx}~b2u$P<-d2hGEHC?N^mlo#@H@V7n$^s}+1u9Hn5>_}Y z6S_c!1$3gH3V@bTgnPl|I_0|^y=T-aCpj3=RgwQ(ig<^bl-wqzz3@dK#{yTa6oNOu z`5g-ty1)b`bn3NCpaK;bKsx=Vmn!qU%7Srgl?HbX!knvD5qFzl3Y#^SX^jeo_3L4L zPM`q&T)+~xI{`|JcnR3`0uw&$;upg>#xkBUjWtDu23EleOSmx=mcSJq6PODBtuc{{ zY~&*&Imyet!X>hp?Bpgx*$YHaGL@@r}D0i+08;=Go9;f=R4#1w*B3+b)Re9E==LCosw{#3vK8_BRbJwxq>Aa?dV2B z+6zNaG^HzT=}TjpDNV3~6Z*+%Pj`CAnI1K%OKs{?qdL{9UNx(AYfy?9wAHenHLYuH z>s#YG*Sfy*dUx&XUjsYX!X7rUi*0O$?dRCaUbc$^0stZT1O)>C0st)D05Jf90!{${ z2>$>D2pmYTpui*s6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!UGiX2I@q{)*gQ>t9a zvZc$HFk{M`NwcQSn>cgo+{v@2&!0ep3LQ$csL`WHlPX=xw5ijlP@_tnO0}xht5~yY z-O9DA*RNp1iXBU~tXZxJ3Z^~FwyoQ@TO|mPB0#P{yBO0d5Reux+`oVW3+5@eutvXA zwrt^&xbEP`kRwYrNmpRyjji6e(rl-U0wt3}iylpSAwtJ@IlAi7VG5TrWl)!%O}lnr zxpd`%#yCm96oL|@_-7zmq)E<#L)#A{@i~k3S zd#-ton>cV;FJW&{yx@s8cetD(`1|91&cC?-F@B=(QFNL?t+?Te8^7hJ;DQVuRUTbY zY~%`KWw^qD5{3~pU264J)SmzwI@Y0vAR<>#fCk~!Tzoh6_0WDO4&fJriz!|- zVn#Sl)m(@Y!I;x@A7Z3{0%X`Sg?kNow^NV61?40}Q!Z4cjVCz?u^J z6Lql{8Le<|9YH(d6hRWpX+hU+5)4=(i8(5?Xl? zX^@?cQWR-YEDlQIq$!;y*KvC)gdJZBaN^1qM%5|BX+-j4>;gz%E!`m=;N}i9iY@fhHFU6qdxBbq2>PuTva=B*g*7gY~&?k;tXIf*_(@M+X0%!f3QjGHM2C~%&trX?|Vo%p>ro3$wlCa`#DQt2K zxc0N5FX?G^){BBBYOywkk;-@iOj)wDFb-SP!xb${8M}Pp4_8b&Y()O+29m zT~Rsh5UDQfi^3Mn1;z1cYECSPQATWG3OAI&4P2N&$&g11dyqnr2657rkQXzD&?Q%K zlR_7}cFEJlEo}@-kjWy{syb4k6<_uy$%T%P4Nobea{$UI5;YB;+I#me~r#MVX z;c)d(92Zg+tx@RB7F>`35+v8b*ucz7s}w*h>sFFZ$7->_+j?X9+8~^itt(Xm04KxlcRezwN>!U^qY{!Z267nDsB?*czXV{^ zszT1EpET+gx`#&jjZ0xe-P#rTm$@^k%3gwNhc6g*)Hb$nt>>yLCnjdnwUR*s5m;b9 zY{8c#XkimoRn-){Dh0qEbynMoq+wSTq=A))rD-ft$Ci^JpV925B)j2bBO5@J6|8-h zvsb$?h}i&Li%TSpfFuM$hA9-*e{C47j3P@$z5lpThx23w()2RYf)SJqNt8l6f;s^y zY{9AR5anbAz$Cl`s%9q>pr2fXwB=S$ASNYYPQ_<2c8F89wWaN5QMTO#Y@&--M3#s~ zaz~FSVFC)+fU25Bkh{?(0*(A39t-ErSetP9c+u`4!v*BBw2|>}k7d zWHRw+DmbEYZ|zXqEmA6lRs_=?|6uDD;x^pGHSiycE9?np>A(X&O%mEWSJ5nE-za$4 z7NxjFC|_j{0l0$;K^4e^l%Ptrsm*>3lRy+q>JKmegQ5~JCc~1+RCf5o7H#mWLTA|u zl$z?iCcZ@}xPYN3)I%UgbYJ57Mv=n3YX4Wp6)=E}8|Sx0%T8e1f;;i11^>G4&E}yq zspjn8J|AQt_N|K~%txvOLj-WAti^;0y0u|SOEDJPuYCn=uiCYX6^`k1yzJ{&O$b1h zFsp|<{z*}D?RQt0-s;y9%pL8}MbBC|Tb%t1w+0J%E~cUjIqX4(Rh2E#+G~Rne0fPd zlPcH2_OD_{EjK5w=b9U7T}LpRqw*%ff86`b!~8l5xKi$_QZ1j37iK@6sAda)gEq0ZJJqjSKJtjp0IxK*Nt=k^4-PRV)jPS=vF_u&d zW$_f!?}D4F9b|9^U&)*VN%(`Jm;bqiYfEuVfirAz?DB^{9zO8m)sNUEG&KrI5drr# ze5ki@$5tbtHH4pftHK4i7Z(;=iukckd)ykkiQQBD23)L4EZ50XwXjo5RSVu7YEUPZ zx_2F1>TI1@`>x&!QF{AeV-Nra_xOu;r1y*nd=nAtv8v;MT>zY@7~+npaDJ^ltmx9A z0KVDAumxS#$INJZkuO|0Y#+iDc_xb${#A%jG0U@Zi)iO(4GeE#DIH2qRFJtn*Te_7ddmyjcIi>l@?-U3s)2mlSOPrDdtJJ%1pc#O2pbI z211Hbv?9bxqGWReTv8Kat?)_U1b~1wSgs-k2}OYQ@DHv~24}MgdecGp^C+ccfnOvA zuCO+oaA5H=Awd;PL&gR4hhk)aX-eilYI82C^b4&JWsZ|fNH7ZYR!cUvW^Ir?t)OfQ zz;G(4W`K7pl5=qOqc^`m29P8Xo@6nj7gvo`Id=m);fE%C+dX1z0#vrL<)Fv`%W)Fiof@@f2y3rU~Xl2AM>Fl=Fn&*AAuNgX9-W z^fU!iIARsXLzJ^Bum6%yuE1(&25cVZNJdp@hT}iqG&gHSW&}k!rm{d(SSKd6iLH=A z2POfMa6(9QiLSFUqu_fhcx<|&J*4nn_C*eh_e9{7WN{-2qmVt6qeKB#Z^Z{#TQE-5 zWFEwl5tv0?$U#yjg;E!1US0Hgt>9mX)FkZ+n0W2oj;!ErDB$S`=6dTYf~r)4PoVl}sLK1|~e zvBi!6w+T|f2@W?{N&t3ig+aklC#|#zVIySnR1YJh0C`ml{SZ`J?Lt71kP!Y>B*L)~>QpHVURxJT#nFjBAz?m{-)I6wDtYW6^K?f6$+ zv@7VP1k?B%_YyK#rCKI6Dp2QLtWYiXaa#h=KYX_rOm#ubg%I}QRD~x$*)xyQ(oz3ZpPLIHriqsW^=$D=G6=g9A>!Fa>RNq6cV{#>EQGNrPQB1;24ir^7@} zWKhz?D`UV_+5};EC>L9RN@U|I=D`X_1UNcsI-uDu=(IIUT47dN3j%g$zf=$A!%sK{ zWD+2Xig<%`v}|b;dxp~rk*EYpV1YA;5Sc&=R5cgh_d^JQ5Thsw??N`DvR#*COcUlT z5dWn;t)K)8K&4VJY;)zO{=f-sB%g@$sARe;-t=DfBofVoZS>(imz6RC0d5$=Z_)&p z$+9ieC~WeiNbS>*cgA{rG%>6Pmsf;&b|+2k7@PW|NdossBROy*_IDum5BAfL`vYSF z*9ytvM@@8a0GM{Np)oz#Z@71KOd}ASuoou>XBH`NOOlc7u#p+0cLLEtQ=kR9*l50^ID^KTF!?h$Of_1cqc0Bbe zQJ|DwW<948HU(Q^WL8+`l02-i0aG9~)xxo7DlvGpU1cY&;j$NzGDK+EgIiDv@BgBR zOB4lgiBod{m&Ma@R1|j8X+7hJml@G=;+%WdcwNIV!fiQVXlbodQ9pLn{}oP^WuADz;#M z_28U#)}8PP8lrG=pNohGr#4E6o_=*<2iPiusW!ggMZZu>3Gin2LOfOiohBs^_7h?S z(PJgbWIu)>k$^aSBb;<`psm0Kha&*JG>3Opg3V+&q|i?Q+cZ*kW$z+&fd4819Qvq1 zG!aj@Ktcx^C8az{Fa-<5XuL9c!zl%#&<{-bga;>oY$!H~#E#}uaNg9TwZMQ|;GV_T zO`i!k?x{kr=L@>*L_Ono@v@sxsp%yzzW$jf%&Hi zdgEi?JAUs~zhtlhwbKg6s{nY48+%$gxhpoV@Vy5-w1pK;-Nb+cp{PV!i}p|oxOhpr zxK7x0smxn%#p%JGiht$1jF%)$9Px|`dt0%ZEcxa>>@bui=xz?^E)273rc*Fcpn4PI zk=)p;gqmE>^1eXiQ&4$oiqtO1dS3GChd4Hr(7H8mtV3G!$7P##k^lED|8!bC`C0V# zbB+_RZ8s2)Q;`>`cI2S09jSP}Aa|BJ5asj9JoTDWmH<%@kgi9PR7H=rpvH4yFR^(z z0tdOfkt}ahFR3h21T!w2`LKJDI;VzR^$=TX*A5sYMH@_w<07b0Nipyb>Hcl|fcZP{qTeX)%tKdB$zP3DY7gE8BoU3~?z%F~s># zH^nbjdoJ3nc&fzFv|P6rC%&-BZ$7m^wTUb*BTW-i&iQgE8~@=l5JrRHJDex_qXTiN zrsShYrLv%@JV1OnAP1^Zhc9{4zrI8ebR!TOW^ktlSQ*xS%N92rswC4=QfD@Pa|xfs zq=#$MH^Tv7t`Z6D0AlFGPd#P}lRzp@Mo=HvL97Xf9b|0w61@pAgOM;0&kJV4q%7G> z7vI-#OgNA-h>ohFL{X|X9z=`7`B&(af%8&016B*0`8Fn{N>h-y@Dm)AlZt-Y4~ol9 zY3;=A;}1BR1e|b0dc+QGH<$z5M$j@Br0@@9qiKYlP)cOm^?V|S+bX9d%}v-zS!|`O zfTc&Ir8V|xQee*p1z_#iFe4^Ss`gKan8cadkCh9U^Z%;}{jfMnR($_-r=U2TXI8}i z5PN}!T4ai+)$ONIX&9vhmE?OG$#*}v@qPWPEB(Z&fFs-Bxt^EggO=kF+P1}}nnhl< z+1MjLrWTWm(T*c#LLetoXnT*lVtx`6H>C+lbNogVm&`r|N9p~&0taWR#8<8$a%Kev2ZvJS!dKxWaL1e95G*yeH>m;V3WX`pIyA^*`#lZ&cU&_C2i}-*ClFI0 zj7df@Xjzk2#Cmj5%u#!AmUE}noILD6vL-tPu>Zp=+?>(drI7+aX65%j0EK9Nq(J_& zwtl4H$0bfxhfwAtD{OdGcR4F2WqDd8IO&ZW!v#5DLvPIYn(%@>t+g#$Fc7@*uZkHj zbb*$;LhBrEXrH%miEdoNcs{eo)ks7wD&2agM9u%T8*vMd;AXeWCJ7vimvy1ic_lTo zIHBv}KPhCH8bN*FvJr-hXOw9 z;h$S!-2}v$L%B%@v-IP85&4;8|eD>yhE_PmM-_K;q(&&UlXp>Nm!%!62v%6v! zViSVbWBP1WlVs{XXzyBQGrp6aO}P?WF`fYZ zX#7eGFLmLbSgTqHT!A-Rj?scpi~rYU$V_m_H+tQ~E9jKrb7^**06adLvfu=capOKm z%_uMR+z~utiRE3bJdRy2HEoBs0I`K#t9G{9k&z-rK&^IdrbroOu#J=mNwkn6C~=B{ zBoQ=`Di{)Bf+P}>C}e1`)h3fDL)s!WK?%u<5u~uP=W2@rB?5f@j3A(95{_F6l5*t^ z=9VNR6=poRsTC=cMh)7s$3+RpiV6kPvsG#f#+_2BN|`zVExRd7#?}JcZlwgF9qnGM zMQV$Zpjz1FrJLaA;GcF)3b@&BivR@zNSaK5R=`zz1`&3ZTCm>Sj%FdFJ?OQf&j?Yr zNO4MTF5kqLE&h!wU5%9w(cTb*vX@HQt2e4Cz>3Rb{n zDPzFa>+Lg16al0JFfHv>OBHM@f)#gp)S`t^ebr5m*Ve*S{#()H>m zh3FFCB%i!G46!J@DoHyjPFm2kR(xSDiJunqsV4yl%+RMOxGTxP+WgTg!~zB2P5>=_ zV(LWh5<1YQmMn}y3xzbi5HYV5vd}=pR@|@00(WFkKrMQ*$ijqPJWR*{H;hpU0-5ws ziWduW5k(lKJW0qag*<6V!~{U{L52MCM=U6x)NV!zG^ypdo)ENt`vK3dz z*vi33^*nJ*1_S-`CsTUewf_}_5F3LXf5@0%&6cV5$vZ9=^Nzo=neL80GJZPS<+ka2+o!eXo13t> z(RP-MO-R{9?-suUOA4n8d+;zVYH?>VyccJ@amOF8w{QqsaYrl2FJFAdpK9J>S-h83 zNKu}lEqU-}s~u|MQ39SSBRNeU+P;ni6r5a@bsjhOmxX?|ca?e99drJw^%;0;H}**q zGDa!X_@R9AtCiY?N85Pnug4zc0=GSBl(|wy8Tah3w@be$mgms=kiivybhKF>)gtd( zu?1pM)`q>=rN`&rgj|3K z*fP>VF8^9Y;ZwM(=R5G#M}0uk-sPOfv-VXmc1+8a?NaDM8rJZA`{5k`ZTP!-wGeG} znwAcm1vN4?PKY~1ViJ|OL?$-TiBDwWvM{)_;z^2VCtM$4PUgeR5iNM+;vyGacti$@ zi(DMa-^nu7Lm3WFi$80l7vBiQ)4|b=fMO$l9!SSJBFb6S3e5k0g~f5{QH=eHSz`o9 zpA8D~N`91=(43Pl2Kjc&nJ;6%K4CyXP}GZ z2npHA7eWqoCA{7(T{z1x_Q!v`3mOt#`9fWe5QWY%UKML;Oj-g(bjf_&A)Cm{W?~PG zjQ=CzDEl?cIcn3J-{hkz$EQke;t`zZ^jhffM!J}x5RkZJn$C)eC@kvin)RApwdAuX zX=bmV;=8B+`guqH(KBPna;L1Ku*PKBlZ2QnW-!ZHuYmsXj6Z2iATM}PP~uRK=+v3| z0_igL#nFBBp=9MRgXn#)*`!m(%0W!ZSk>(xgtdAp;>d3dvwz)qy!PEC1sh zs~toImT5$c;b8D&5h>W{G?+^e?fTWFmYAlqQrJtfB&QIgv|_8RByE^ZxY?})y#hFM)TM%6n3+Ex;GObBfIc`BpNwI| zJ%d>RQ&%0mXb7@4PFBnyyao6mZ6fLe@pifsnv9CfE+oN8DL8S9#BoV5yMfDM3fxUI zcC=p(tt?PN6cicXEQJ7LK%BoCV#Kby{@smP3{2`TMrOLbQ;@SRM zss&cmBG*oR)Mlk1iF(w76`me-kk;Fs?{auBt33%R>~TM(2yUn>_Jm4( zj#YT6Ed@=~!yfn}a!rTSrQOtz3$6GCcz4aL#dWZEkl8b#Nx=noxZ-0zX{$%^n8OZqN(^zyai}iOCyD^Dn^bVhs=uW!G_hfW5{j{x+H|WvT}VU>Rb@{ zn+1Thx}lt_PeqX#(VkSeX|)k4#l<}qZ$=8sD78=m_hBnJa@%4Q<(8h) z(o2{0CS0fwVw*i!vPlS@x)#xfC3kd2!1@;?*_~>WQ6ZN5L73)Snd3^XDIyGYYlrWm zoL0yceVf0SN)|jp0xejDe&7P}>$Q*pkWq<(dT0kyhzK%JK+WndeLI!|TrH6!1*IUc zKck=poVSLHi4JU`c{7bo(732tzoD`}C3r0j;xsrhmQuKf9^5!}vM(*WF$wU z`?2!j4WHw>Aek}|!$QvB9)=Uc&e5q2L9HyTLM^z$EHo^N5kn07uJTclMf|KB(*j9Y zH!&1AOKdwbkRUBoL`~!g;RwYnY>sUykR!8)=Hs65phUsZ!tNjgEf6sd6fC<)f=CcD zp}8_o**Pij!zhHq3_}P_JVg~FJ25O5r=Y}5NW+O?LoVby=LiZh9I$N>on&km=MY3L ze2752A1Umy;laf*BLfA%BEzZ(C))zKql!I?Ml|G-uF!<$;=(tyLNDV42{H+6EJZon zvqQu}P;-TMWVi!~M#LC9N@NT!A&>6hF~#ADO!T*(xWfMsxd<|t!zxpz2LmHTlQ@p! zl14kVtALn<*uBXJiQZeS6{DYmuo}UM0$6JW27^haXbB91$>U(ZH36AxqqZQVK4-a; z8QB722??I;9-ojNf+!X;u(~mLw6K86mH-WdV2FAP6NRydqrl1C0~o2GAFJV#QP3KP zbA?-oNt3t;ljH(cs~MQIg~jl`2K2W^(}K3UintjN3;`gWinVRRDQwd>h$)Wr>yj~e z$@+mxGs(lN5DPrHN`zqtTi8Gd0g0>lju06Oh0zWVVPXjxva? z%&Z50NK3L*0H~{lswApN_Njp}n5_Ih67++B=ELj0#X23HgDGq$q`W;RKS< zf`a%oQs6PvxCsF$$jp4W=NJPHwNG1M1(}Ed-pGkkAO!{83!4~&wkv~?^S1;rjZq*D zo9V}47zKZj4GS5-=z=%IXes3K z7`oVmf;f%gUJV5_p&d{^(NQJ1Upd)6TS+ZG8XfeuG^L~t%o+)kWC2DHOw%KSv{yNA=05Os((jI&hXy-hsG{v@;uVa_s*0MlKY6(do| z*t>d|J~Aw{WXw}o-Nuf*9lPKTkQiPz(jASlFtpH8R1^bxaDy!fipE0?6|)Yd;R-Wt z-5yzyR+x=EG|?SR8j9!)tbja3R6~(_LvtZeH*1RWK!}R7QVq%8kL$2R>o_P;q)vjA zmdcv@V=`7d(yOqAGSCp7)sWbn$q@{{-J900nvN~tg4#fsR3W975=v>~5OG_tyz~by zaFlUlhrnH06Oqse+64bQU5u!6tpo86LUh!2Sqx&imuCaN10e^kWGzW|74wN1!wTuy zDX^jyVq{ePYz1~`QC~C+=f#tkJ%}wB)BfT*iixwjTV9N4=+raXDV007`&{F4it!y@ zwQ~rv^9hDt59CUS$Q9AW80x$vQ4@vX_9O>i5CE$_>Uk8o=N(V7D`jS;K3AH&_prQm zG8d?8V5hSVhX4?k6^;v@jXi^tvTkUs&v`;qS}4)2FqhqH zG2T<0$udn|Euvoi)%79{Al@t#fmJ225`D|GuqhTvX{mDC-^D<-H;EIz(Hp%P$Cg>G zhXucG6K2*k73?$@Sg{H2+?jn}<=9!_5<;!H+eh@Yk8O=@6 z1QLm6qa5RKq;2K4x`lQ)s}W=Y2<=p}wERRacOzK3MYSdH6f=Q3tNE%@;BDLY2Q^07tYVehFpc=n9B4HNFfjZy2F}S?Ar-I+F&v1 z`Jn$IHQn(zGr7}WSWJj2|LPct#Q65L>-q(;*MskO_TpA z?sIJcOIz4SNdO6ZJ&9#ih%2le;&3fhBk8P|5puiE(*Vfvf*6FDPb;z0Vq6{a)tm`fx9z}Ub#Mp|Sw_k=Kqts?uo?=Kj=46fpS00t7Ek=|~`gz|1TD;3m zum@H^poRrOc{M|U-b%EHlb^Nay|YY|x8?71g_Ok`+p-kg}#r9sVQ;47L#1NDKcL_6vsS zd^w4XXT^x(fXa2eQa*=WkBou{0%W4B zNm3<4m0Cy%AZ5!Q$1+<+j;YsXicBd5x2Uuzg`7czWu_=dqJ^EUR;@O++9HKvQH88X zk=ZmsN!2k}>v3e5bD#h=5X+GA+H_#OTCCcX+M+~d6e+Cg-D)MlCgT5^IA;owk{D$I zlOh!)5Sbv7CIL|%la#XZVv;RB6SgY#)vAD63CVUm9VN<`(Y8vF`P#D;86}RlY;-L} zYgUd!IotHiaCf^}N+uAudHl1KO{%jB*koKf=~h#od)}!rYnjthB(cigaf{m|V_0R) zn)~n;R;-q{?3!MR;DTDWObMMap?>y-mfC7$bTkokT9oIWZb=x}-hRzF2O3GO)MA^2 zB|SHi6rynrxL7E1L*+kznQtC`A;buvefG42kw#D`hmukQM?M z)E*~OWQY=Ujg4Xt7e|@|-Aca+so!i(3ZMxsb&V87E360r<&OWWZSk3j0iGs76bn*G zN`D=)6`T}RbvMd%RHFA;U<>YN+(k>eLxz)&Id<4)fts{g6i8^HNuf5$MAJ+SNh$$; zj%_AsXPQy^rA0J-W$8$eiZs$;IW;sX@<-^y-)Z#V(tw zZIP*(A*&1}A<0%71Z(K2Nl7v5rN1(ZVXNBGm~2xVqKW30O`VJDr78{kX;u1uN@=MA z%zGq57Hvk#K~hY7q_UbVyeUcIYG|9jGih5erVmRj>B9f`jZ%*-Ln)ytuP9e5aH`ZM zArhs-ekK!du52;tM23dS*kQ{WU6LlGj53NQnH@>4NrSSR>0wrLcxy?ZE?qTfyIDw| z(OQ$#=t=7$Mzz_HQr-2TahJ5&x{k43HA!kahd14M;~nwRVK=tXc9~L)tKFF<{x(Wp z->Uc48X{aY<5?F?s^MRo#9d>g*n{5XhC-eg;FRN9Q{r?d5rxvCeR*7(wzQGs>83A^ z>*$idevy*)kiuNrP9BGN?M7>}ia4W;gFM=tZLB$Ck3o9U^r8d%bBM6cEd13enN&UW zh&|7JNgMn6ee`~ZuRel+!Q0LT+aEc;V(3>7eq#SJt@~(m^sj%@XIfGZ5)dtX_^TiF z_7PnvLFgkaP5CC zd|~5~v;}t5VhOn6`9uI50gjel2qi6$ zqZVYLUHFa|zIA8;3XxgVW)7&tF(&X=uF}X^3P{E^vXPDLO2X6lPio!_noij|lRN z*pzd_M>eOEob)6rjR?xdXr+^>d}ZJ~LlXa=fDV@2YZQ&BRytb>3N)4rpB9ktMMm+G zji$m@VXLv;RciPwIFFmCP~O-^Rzj} zbgHwR)m)}K-x*JJ!gGB|`d=_d0><1SJZ(}7Duy)!;tSwYoA>xzb7ESO;Lm z!P3nwZFEG{D=PDfSPA_yseN56WEcBb2|;PH85)lkB=N8BwMsLaAOlm#dbIPMZ=!Ad z=1)t4zr(6lf%*GcpK24WvCaxfc=eA2HH0GqmC(W~9W=?>R**DF3b&}9RrKa!~oCzR= zY<%%WG=XEU=#PP0$}DcxW#mdpLB}UC-}Sz96db~c6$|TH^ax;$c z6D!@OB!E46$@cJP=;Ji`T2?MGkjE22+ZeKcJuGtsG}~ll&g{~Z#T-}v=fB|zAQ2sr zFJgQdWR0|96c3ao1j}RUF;>=d`T-P&98JODNLbcmun;F)fg8^7iIqaz^+=$ECRV7% zbA1Wl4|@Xann-&|rC9%wWuK!eI@Pi`U}A^ww$h3fbH>r*Va1(f`I}afQI}zxbvsyL zYo0vjh@K<%g!qIJg^wqSRxx#N?MYy{dC4jY#aVr?U>FLljPB*LU;{S{KO@Xti*^cWoQACyN>;%Y@A52g$+w0!vvJ}5K)@Ab_oA)v;myigtVb(+13Kk1EqWQ5Y82@;DV`luKV8% zc=p`ZeVW)Z3SV3sZl*P5@_EObgLCrU9r7I)T*3aL;qr7zl6pO?v^H5Q$QGkuLsk?Q zg=L7~M2GLVMPu09CPbfsr4~{ZkKl-geBGM_@LsyjWvE#n71Aq+LYG6$Ruq z#L8)hmCgSgVQq}Kz*tu~;L#YGOibC`9nHIij#x)^hpjHW*gdjRsquqxXs$wfRT!z4*giHoXY~d%((z10Rl+d6A3CLlL zK`ki9%;3jRJjbSag$HJ1uTTgC0U8Sm95_ahti8tVeNq68BZ73sHIhV-h~uVBpJ>cS zDQN$R!!_Hy`Nd<1Ta8eiif}>jc?Pj%V`GrXIEsfsZh<5$$pfWFW00e`X+n!|K}QIq zxCwyN)k3-1#1z?x7R1H`w$QEwTG$-q?tqfr+??gXPB!{d@u=g5m}F%gWSdxpBzR6& zXd|AGU0rCwhdh?QF^Tz|gseqJD=c6~dfYSM<7YUdi*N!C9+=~_6(2R1*vTSPjKXp~N)!ak&dedp>4vQ_$zNCn zRD8rsoQAlpAH#7$oDgAfe1sc*gSZK7N(u8xZ+W=~MWRR}<60!3&|A-mk=<2@E0Dq?wsMmzYz&pjt8+(qR*X8b%y z;t37JV9#{gLv>O_0=S7SP#t^Ng8*;>MRIe;PLPsb>KrTxpP}>AzBb2s+FJS0ObdEoeg55+xEimcM{D%0g2*5dp7(vcV3RpX? zP3YJgC`m#+Sm<*K2?T`(EBFFO_{5*&h<|?RgM7qk#0OB&AdqewQ&H9`;h&X&n22=^ zbaarGCd7gWDZBuMi`W8{9fyu;s?YgDDGbjRYyvA31VTyyXc`0|34m#QpjJr7t))mU z00k#RDX)xyscI@{4MpWJD(`UEMmhKjq>i?OKiI=Bl-zM> zK_ESm!EFbOoT@FG1i<(L2AyJgj~`k9>-Exp`0IU!%D$U+}i5ksW#FHD=Zr4IS;74S)6SXVHH_8{l-Vsg}gF^O9(*WbS=3c zEE#MEc^JiYS}f6d#s<~MPqe`ns3OWqCx?uOM)-xBRo+oh3X*kcbm*Mj%nMujP>l&t zDF)t?v{o-Vo+PY7yt>ZHY{4L*C7`u~&{Rc`42FBuMO{*!0EGX?c#xvTm|3lYME_M; zbOcg$22E%^P?H#CI~bt7g^z@s;RcG*kQVe9qa>wGu)11|N{F0(#<7W}vZ2Vb zL|mL*L_!!zh~#NBM(oUR$)6|<1&N0ilm()ef>T~Zn&8H~+>_^ULO^cGIi7@}))KaA zM^iyZJ__Sk=^pQ`+r05;&>ChdxI-x@P5%vrnC2ED4(^O?-Vukhlk+@s7-P7>CejmnQ$-Kd=dG6iJs7gzxkRXc-CQ zuA8c4VtRN^%rwT>5|QN)O6(0DX?7eNx}Jt8O9Dv8AZ_RADMSRfr=UeFCqyt1oy9C} z0$qJw(OpD)qFs5;<`;3S*lkedVdkOj8`1d1VHhF=eO5tK+0hUUGSZ4~cB(MCoZnOh zU-ib6p$B_xf)z%~>I|~Nim+zjaqvwUye%La=SJlDO)UaftGM0NZr4eKTr5}KRA_9d z8R8a1uozZ{K`_M3JYwjY6COj7#T+b&7)*>6-6Y_!8!AB(IMB}(jls~B6?c;*`w?LD z#6j$sO>v7EMFHco-t`DqgUFO8AV4q4T zjI9;j0yd3oT0{~M9YqigSLGSr+1ATZ?K0J#W1Md;zFL?P#~k6$uC=ML6zdhva|vhzzdlkhv)EwBpC6R@WzEmKqgckpAJcKaDi!# zm;DWoqm~%v6v~FNfZK)a}LGJxB`CE89TUwBV#1TG9s33XvnT-sHLF1s%;_G zgV~jZt_GU*m|@e+mhjZrI~y%ljHYOA0UL^hIR@q|hSp~Wtp@nzgkHBNdh%8MAu9x; zgo&a+cm(#XreAWUw#>xr6qCMi-(jnN5T@;AIgr=P+U#@?l~ToxcTRWa6v*a@nPHuxM1{e1gEA1 zYtWLZXFT@0RR>T+XNbgf)_gA+1dG6R4wFpjaUAS^sGsKmBwDLdI=U&DBZ)Wy#S}yW zEwsWIOtn{(0$T)2;w4cb3c$FIgpM|32eHLk7F+FQXygS`VKj#!EE_Fqo=HJDbiootixY}5NW3y-nb8;u zZCETsMG#$WI0k4vx{U)`h*N}8IFVPrCvCF27PM#O-sQlt2?QaCK)jn9Ziis{r$MME zofXAVTH^u|RMgGv$mSJm{z`veg?)6g6mY^waKRMpgcIo)xp)bnVFh?@hDI#Bhl8AE z$C_~t2KFJBhUrVDjxDlW&&wR86o+`IHRsrtsz;!lQ~346Q_6WBELC>O+<{hf=xQ{j zbBLE}u@c>;oi$=aSJGk(Oax9N-mQGArVp1~1VucbZG;x+GTE_(bx6X^rP1ny2$Ph& zr`kBTb_%?_#1t59leqtdu^PnX_qKJdC@wn5j7>r-bU_s~Sqvpkn;XjXjX`SUNC%0? zogA%__OOoJ$P<-9x{B#Xd>c-VNd^1dZ4^Y1Ldjz*1i}J;6p(?9RBAnriE(7A&Ow}3 z5YiJdAZ2j}_xVMpKM8lt?*>FQk0LAtj|N9Dh>jp^M^q@YScUm_1Z^yRQ+Ia$L2A2U zWe2sxKa>LZatA<2V%5qPsaCB7Op%gA%BEVbS{ZETkCX(4QUpjW*lNqdhOO)s5p)zC7E;B_z*S)nua+H#wtAKj4$vy(oR4~>jiH&wAF44 z=_C;Z9uM46v{H-21u$f1i#O)-JkM{I!p^Ujfwm29>a8XB_Vn?`5J0wwB3g(z)_{|( zjnLlfiMaT{W2GK4+-ndq&ZyeLIpkDhPD0rVnqV^tMgh?v0dOLY4Dmp;N2&;m zr08%czy|-cZL3h6jfM2t^>4LP#V!Oe7PjSK}MFjA)nze_^H7DtLt0*r{{VmP6^ zqD_j+E=#;mRV-q!>lU9N%o|x>gc%(y=6dLQK!a1lWR-Q!1%q z2`UEbsU)2eF(|G)|BNC%ofspD&*G$Dj7v%>^=PmtXp8GIpoY>(QpOk?j8DZB8`0EM zQ$^~lp16!6idifCQ!b0VYQ>c;ay4?*NmcE0r&TeE_0pYgHT76tSq;|6m@v{}lv<9` zlc-G@l2i$0dHSlx|9tvZCz5=+6(e*7X!f#Xi)A&_3)5rlR`+-v)?8h6lFzGA?BRmn zZF&E__p)a%oi!(7IW-nZuP~dcUd3v}C|{z~by!wOi!IJzevPykCB!c zb!k0Wj#7*D+Ox3cr@xLF?5GRVdF89Aesbg}S(ZY=k>E4(Yqgcy8E2=P1j=creZpDq zr1HM{?w}J@D)7AtcTzLrB(;h{z8jpor?7YWx#_WO769@-12<3b#4$gc?!q-Edt}3K z_Iof={tV(LMOvwXfgpbFb0MHG8c0--VNFU>NPFk>cCVtS>rp>_k`?)$QjJ@9$AbUY zwqK@t{Z)zD8&q0kpPCOD(1smT9?WV-sYhU4l}?`GcC-JURpyg+KYH;C>)t|YlQb&* z@?v!#Dcs)&ssH)uRDgn)?bhc!_<`?q(u*GNOtu82K&dlQ_{=5-2Drj(ZZy!EPi^`( zISoo~bUfi;2pgC@4AqMj>`7VX{zSs~y+?BUvk(QpHCM#qoeRvPEHJ6kE_j7|{qas_-gC z)=T3XQy3GSSPNTBgyS9Ys4IW5#wg*+;~xPDNQ)%_ArS1s5>h6)tTibL`7!@iARE&% zn{jM_kObr+1z;anNa2N+^dt$R^rq%i$&;ltCDm>grN*^`3{mLJ&X9P@JK`*Ev3#TI zI(ItQ$&Pl4nx0~`z!*DP(tfhEqz5xuOk)CaTb}xg7TC2+X+m-#uL{jDr4~E(-ojC)Un6F_Eoo^IdJK<@`DaMnYXsn|9Kt>8rc!COus^>oe8c=}_ zG@HsK=s`zzz>#%^3#BjxCzzO+CyGv*?~JD{n>aR$%JOSwE8$@6<`=k%2S{e@Qns#;PU@oicdHib%CT~ zYGZ;5vZ(H~r`iOdLP6FUTXN=oG3;szM>%-1cRgp#HSXPvh~6%YcN>K z$wD%!UChWBAUm_9Z1$_moN8C209n#j_Av0;>t9Q^(VVf(Wk!P>(rw{$)%U2iW3IVp+|rKc5de1Qh3MSdp=V_*fa+{^#mv%=H5savaDwbzy0 zeK7(1%hy7Jsf8#6(@A+6iL%58bQ2;3D2uB!~4oX$Y9HAZid3C-R$tZvf*JO(<`g> z36d_-WBXZ{S|ut)XpzcV=qXjMLxfV3EC`xTng>G`nNC4kBb7+9^~_S*kUQcMfhdgh ztZ{WOm>4ICc3sJ8l(P~;N+g~(OyMVOmWf?X`y}s3!7gjsp0$1f7FQ4*q1qIUnVVLhZ+tOIYI`G`GRNj^3w#O>46Fc(UOyo?Ob8BTShiz024du48)E+@8= z8oL2)#92!~YBy0#z@Ke^*k%0C_?szCZ!(dpd~qwru%0day7VneFL;lYHA=(TMN*)< zMPrR-%9GcZg+_0QSf>Q>+R*JV%63BwvVaOj!D{fO?Uas|sKKc_=m=eD)ea0>o$g98 zNQT}TBM~Zqk)fpqeJ%cSuJRJ4e-O*Y0tns!h|QuvJ|y8eLSqYJ!xg}YePS+IG$AaU zu6MwTw36k*>Vg!0ugE-30zht0n1bYdffN6@fFRbQsS*%SUQ1Jks>Hx-fLx1NRK-)G z;P)7fT9DvcT0sh*685gfZUaWPKof$=KsKW+V9eICCdv#^ReHlKv_KNB1S2}4laeJ<3~?p2 z?;^H9622}zs%0>er4s|C)6neR@Z>wHY!Pe3*3csg#DE?aq&HB}5JQnvj7?o=@m!*8 zOFBg%9z;$a3ohbs#E7FwI8Dw#DoX!|V+^<>Mp(x?GO@>0MU)n?$3`*MwlTvDq7-Ve z$}*)C6ERR2F~o3a_eAl`%%Y4)p$#$%bx1?lBCq4l3=jo_QZ#Y4Izv)YP6BSl7d3#B z!X!}8F2z!~s_EkjVu`|Re56D` z2;wSYk1EJuD38M&_iYPU;Y{oyIKE{RGU6b%gFPg!F7{$C?6Spp5P5KIT3YPql2Gud zaC*9eKR9AhEW%M3A~uHdi-3%EBH}blQa*sw7FYo|yrLu=!r&4DBdqZ=Lbc8% z;u?t{TEXckWsL%*g^of#UMwU~ZVu~5F~-hG$`0NzDa~MpC#$PpaBnq&Z!aJMBq#(% zu8!ueLL}*kMcQFOEF#rhgW;ad)}%laSZ54P6FR5=N-!fAw9z+tzKu-R$CAWq(fs+i{qc!%T3=F~^@B%ih5=A>i zGc;u5Ql_`m=D6@tGbn`}>|hH3Yd%w{KqX~Dq#*dlay>Xf0Wxe9y3*I8Bnif0NYElP zu|o-RZPqaKM{I2eje|>#qc%uzFBHNlaDqsAz{Kned4P2>DxO@34gc1|Z2@gTTh>8Q2pD5MbWfiu%1E`@>=C_>1#pyaw0 zcP_9A0XEsqn&JwB9y>;{rBLh;rz*U}|@= z+_#BU7wpFE$`kv@eq^6Fu@y0D^=e z7_}pHWFh}#);2m)6MzEpIH_H*uRxPPW{+YE;$mmCz!d}KKd(ea;AXr5QgSi! z4lUP|^EOrkBvQ19bSN$o6-c_)u8eKdI*mQQHcH~e7p_scFoYAA@)=n}@tnpD5@kge zEoG!&Lbsr8#^5FZqe%4-9@i|bpi2+uV;|=#QEsnq zV|_Iyqj4>8jWn}y3nsJ$J9ax1V0y>4JU2-T;U>2<$L$)TH7s{$P|?}sE^V5Twa%?- z--G?wO;L)YQEHQ|IxZ<^RW7IUAQr77tkE9G_bWz$Hr@~@1`{VF_$qQjSsgHgbpl|r zky`&Ujv-6&U^k`Y+=SqCLQ5FV7QQS{*rAS0We7tSFZI$0OQMnfa#1vdf{(?So-pN> z(=PwS<96^db%lYgaW86vJiya58kQ(Zj#5~7gzbS7L_`20VKB{>Di3ZuqPCh|Q;cR4 z=%#AlCY2PppdBW(46X%8S}YQd_+i$h6)=-F%up2ip%pfuTO@=PFye&GHVLc|>!yGm zD7Y)Tb4|_@b(8YN+yUaIcun#RJv~e@W)Q7@tL=>MW!Nrq+%5|WHyjy)It1i8j6yXW zb2%O|wH}t0_o6${Y(PJ+CG!VnA2Nr^#}{aMIhtfmzSPkgw?%4s+P=>{mhWh|YDNEh zSMp?0Nm=1d(nAu|w)A-M(b!}8;1qfVxNnAZ^m>SGQY$NFV-VT275yS>rlgGMLIChW zGg_laeV00dx4%3z4&A~@Nwsp@WAMOPNY^>N6i1qSLqkdd_1>Zl+QFV>u}T5eRJNfY z9AOLm(2;Xo)pM$BBBdgiv zi{X_jIEI8j3?usCGdCftrxsaASTaHQi^@7vxWqm{19$RIINh}#W*8W&DcAq9vMZ)! zVJ_?|SiuRqF5nhZ=%B?kwBlojIAA5RWyeSpp5w!Qc_;_71t*q^P31YX^)rEFgeNjt z&Umy;%CL#&RYyB%fJ_RspcYD@6x^XN2m+!Emae;k6kdBXNC6_0U<&-W6au+jR$&Vj z;KfRzg{|>2rhtT9p|xMz6>Q;yQJX0|(;vF-$2=tv$Cg^$<{-Fm4zH@TV9U(3_A>~3 zW{jw%DCPEL$Q!<@N?FW7-MV;~SV!!|(+kOZ=YBjWOh#hF3^ zS_0uTOd*g2lZCZ7+VTwd4I{=?OCXRUT6jUjf`i?9Q6$7KnsQnxT?=qR-l~oT)u=I- zn98j!DfPA^V6@a_6-FKK)ai|truNiFI0d_ytGi<-Sf?Y0l8*mxC+{S1#r{N&XmbMZ z=fbSQS0yqe##=*3(GZGclrX57Tdr7pXb6qYOSZhfUfM4>?H2z4Sv8^{E`a_-Ya|J<@1nac zP9ilcek3M$Fxv>kMR+5Xt78mw=oUm$oZXo=AgZ`RuS^4dnhoMZ3lOH>&%jP6mYgZ5 zt({~q%rg_DJCiz73}Q85=3(T74O)CGVx%&!Q;>(!xsQ`ARFn5D%OrLVinpLCt#gdK zT_?dY>vOvo=`a;gZ_F0K!%)Tbrf`IEXNz!i5K=B#|IMihx$F z$S}Nk(V>JS4#}{qMQVbkTCUnC*(imSy>_-(3b6krMIxzIq#gQEb_23d$(0+O^uUWzhH~B%&j4Rg`z&Ak@;J!0QnG$>pOHu+(3Wtq-C+gG@P5-W~R{CDtQrfih!;U52890wBj=T4D*12rCtR)nblm4F;iz3q^;JTtJ=}pN@2eWz{IQn582} z3`U_ODMcEY5m-(lGzu$9WF-J80-eOrc2iQ>R#-GTWzm>quF2+pPGY6xQ*F*kCu?&- zgkXz!-G!r-ogEehV58WjCS4?cMW~N`UL|6Q31ZkMM2Xr-7jg&rXX&GSPU+}dXnm?_ zLM3+SnE+d`)6y1Tw)iK5WYm+UbdF{yYN%Fjl$ijmzzUueTX@-uX&6mv>!q81wW5iw zHiYUH#O~*4vc}fR;z5b_rx2}?W~=|Hq_XjO(P7boo8N0vj6q6Q(kfbKyBKvk;#csR znBkNf%|($#E!xY_kkd6Z7h#IZRj7&n+Bs#yI|9rwg%~C5Byqr!vMP!i#kk3m1-A&K zMD95R@+S2h6cj50#R{-Q66N_LTL;616=@UQh}O$%fvVx6F1z)zzo6Q@u+G@2jF74Y z1MP0o4ijzUo)~5q5n!9ltF*uiZOj(cRZ|O>)(ib+AQ@7Uxma`Uu!1z5m~rH#J+`>r zPKeru%g|wS=Q!Vl_0=Jm68mW@?zahHOLtpdF9h%5gK@fb<8GT)r?MW;Cdhc!pUhA5z z`X!0SWCD*UTzC8a_3Z*k(iNr5PfvaCiO0+PTgwNjP}tCYTw>kg%y<@FsvG!Mg=(PL)4?s8Bsah?f9CmmXzyvCAfedV*10N_N_M}ip&ZlPIp@+iwu*e=-4upDDhG|CQzU*(vpdY|l))cGV>^48$H~ z5RMj51-Hg3KnY|pr7d7J5LhW;E3I&w+qSS6$5i%hEy3qrwsI=cwt@>%SWsic^R~vG zRui37Eo%+LPtwAT3>KAZVcQ|LTG*pYlP%6=Te1NKv{C?VXqzqAF$E>;B_*}>Y?mN1 z29^M~wden2VP3xrUe{$2MO)0{&}`Brf6(+HOtA%TrJxB`xNRTatQsknj+eAx&o#uF5QaDgv^X=H?-a?N_SLz+foZ!7v46fc>D zBa#?}D_enJ;Ya{VFQIQOfU5)plOjvT3CmwzvLse)7_-jfw7i}Q&*(02?6|)vi*dLaUSc6DNHsZkF^CS zMDwAL#6%0~NQbfL}Lg3uq*0n7@n}?%`w@;PdBpD=io;)Tam9V@+@KrD8WGR zeKG$BCT-^=$QQ-&Nq`hu5u{D9f*qIM%XCEz;tAMQ$*gX53bFT6hLCfnHDx4*H^Ruk zK!z1vVG4|g{1P>1j1)0xsDw}@#1qm^`HKHD5np^m4h^{Y{*mDt4D9q`X zKb5@nTx#l7cwBDRRbDk`$E}ab_=+oeeAxc4U9`CAcOD zkW^3^v1<-$9XWf;aWKGGZzg+u;sjpcjKWF(ot6#iad~Pl^lxCN$q=)f0CwE7L+h5q zTR9ca@|-SlySHxNhra&`Q;YxRIuhPshCU9D@s&ynbUJ2hmX(`kG`%dp*<&V1@&2@daC9=F%kg zc7Y*OR3L4un1>hktunFH<-n%4FjIOUf3!YJIjAEzWLKMp;*+<^36n#eNR^~56_ zsA0sz)d#c3cC$q8Gcc}_Gqba-N`VzMGmhCDKb30AYg+n@zh1*Q>5Q&@uOwQKjp{W*lc*&b9#I-y3*^@CE8VxoA zA8b^9Y;zla;W-UP3i#)c#xD2SD85ItgA-4u4OH8qT9oD#o08oQQW>@ zc}#a|m6lh^9%I(Il!aPlnX`O#DRZ-EP#VyG87j=vDD9KxH2;tvPape)cH<6F%aYPSQSzR zgsRqa06qIzHkY}m#U;Op6+E+MR3VUK@64wfr(M*cRjJI)Jq>>WFxgf&?Ge{v2o%~8 zm-RL`oIKP7MXeN!OJBb3@+Fd^W zuQUPPN`qf}u%2sJuS&0>D(bLg zytkaTzlv0>6ro?e=3n|-L+!V9HF~ZZ1S=P*F0|vXah_8#)T|_MQFUpk@hnn~(8^q% zt?}ir)z8+NUdVFmgK6F&g#;)k#a@V zkY9DV9`#fJO^2}h;<@@0|B4vI!{_`B`DZnv;Oa_TL)bRb#jm{ntifgbuD0fPLnnW2 zOjwnzOI=q(qwPSQ$7bCixJjI;-bz2hhN)?KuF`(aN1H$-7T2`cVBAy0RSs@mm#-3O zsHANWJj_;N+}3XPXx{rRY}nOsepR}UYsq75-15+<CBRXRq|Pe5)mYE5sL>GY98)j)`0opFeCP9^@ehr&v&%nOeGb zkAO%Z9nzYTG~4PLIUKPB#b5N&^I}muI!;bzYyg+%6Z~42n&MwZ&?#8~3NrTyZNT-C zl_|7C1Ks+FpLLC&i@wsNX{77;1l%;@U^`|~wjtgu;rWH#$UO6|T|6+s#xu-Vx65%y z#DA}9Hd_0inKX}OBF5E2dzpMLi4}n~5au?;ujbqRP4|x%)V=HPxdC5uWMBpP!78nZ zxqCKnm6D!46oeK(;vSe~6pVJv$vFDkK+E9cOmW)0kXn-3q& z2-YQ{p-f0MH_IH&PiSoYtgl8^8$hMXR3^iE@%B>WziF_J!-UN!h==c4#&Q8@0ovs{1;Uo3x9#Zhjj|Q_(yo z>X)Co=PFG0q?7);GTq#xGATE)i(_q|cVj#t-^{dYti7{ZGJw6daz7OFlFE%M!8263 zahjGU`ni_cj-k*dqW$4EtTEr(p)c6H!q8g5kByF^W~Xfu#ZQzz^{+FV|$W`!kC{fXUcIih(%C3;dK${TA4VqcaZq?$=a^^MtSs%CK|K^ zgf}uV_&lU$>X>ns9d$6Ssi`(uN^3_52uK> zDA;6Kvze(ntbCquhf$C|rm!wBvu&OOKhL}5Eu8`fY=E0G7#}(%Ad4dplIlf$W z425QZM0aN&6Ldww&4u6dixOcPmKG|TEKBqDzB|~bJr)fP_f-Q*XAV5M>rUO;p7piz zc$OCJT*s6%K7cB2*5=zQ0MoPwx+ zii%(3EeMG{eS$P0IEQ@2TOc5!skNdYZ=yBgV7N9gEB6m0_RWAF%wOV~yCJpX8nex! z_$7GM{~3&f@j^I)4a`?# zHJvu$WdMeAu$A8PZPN5p91-bncqxto2P0TMC2zFghJmq-UcbC8Q0`wd+;D;7(!Ttp zb5uN)M*0;wJYHTE>zV6R;P9zp~!fsv^lg<=g=O+oPSYa-Q~2@ld#<~CL%4DIdT z`ts&R*4Hf$NOjgcT^*L0y=29!+o-kzt<672K{mm0+}viAIR{h^cwoZGZ`*0#^YhmV z;EnlR^#R$i{B4}T-1QufWT#j9cke5n2~rcz~9xdwZ8~{T~<^P8$F`!nZvrnBeZMp35tUMua>x0OXt zvf9lg#Yca%n>iW2Uq>jv`1I(7T3g=g6UQU26H00I1;hO&z11Vkiw2MXs-ThvDLagD zdjeVKW~v=+O%f+TX?2xv46D6Qk{@erd|iAcFF<$Fg309bUpPsAxLek&D5_OkYgj+^ zTM0kxbmaH`Gx@XH1+|q1Exok6vu1KN^o!$1U(Y&?Pb>uMCv-mdzfcVs?(1mz{Axiy z@fqhC?7&?T#;;z83ykYj)Nl|Me}~mlcgV-Q=(D7iwMR>plp7 zd-KrL&b{Rz?OVXZ_Kg?czAo^LJ?5PF_U)29f*Sg5(fIrALiwk(?|+ut(j|4hAD{j< zE?r+}*-WbSXgT&0JGVR3tPwE&?*hiGevSw`>|>KG<5VCsQKHc|UaYjIu)fd(e;zUx z{!B2YmjTFPmlj%tC9NR5D!#<4^9Kz@WCcA}AULFv8V6+Zg&qpAsQl26Uo8(u(YHt2 zu!9aSoK-n~>>AU<(8up+-kn44E_^u5F5*HN_C(B7u85~U2kem#1VV_sWIq0)XV3EU ztK&c7)=U}Olw(qXJeXcX#2tiRm)W&|Gk@8el%5Yi*zSsOVfPMB!XVr!I+GrL#@NT~ zUAqvGPXaj!bQ6+~^PEJ?N7e>8tzs3T+%aJ$^+E$nX6h zc@C3TrMD#cr*SQSU8vJuz_?4lnVu+7tvRG8BXASNMs!P)PI?TdPiDtAe!l)n#L*-; z@sZI#PYYctA6fwy5=vy&9Z3#nl*J%QpNEtMUcEkURK;e@(Kq{009oa+-Z`mte_u*a zqshUI=gf!fvB{)jR~s=X5OZCqvR*whDv=BPcDS{AY*MBcN6u}tc7mwV%l#H$y>zRS`SatSB;{7 zgez-oW?5-u@4Z>UWCOq+$JGnU2Mxm0+oGbN4jY6h_sFh(a?VheXj4_=O)*%cuP2Oe zqSnbz9}5?3Y!cx46=o2{%bjsAl$yCUz|}*)=;IbOx_}nY08@2{ z)Rn2G@0B+xdqZF43G*?^LaI|*2-9|-q!CS=blH&o}W+T4;0 zX93uq4eyZK99lS=FNh?5ZeUYNXa2JiJ*$QwZr4>jviqy2V{*=F@lDN63vh14^R%_} zGY;3P7|yO0I$-LKIKppU>X&W6>SU6Ej$@VHYdCBaLtyN|F{vT6?e2^N@Z1_$1pUPI zO0;k9tAkp!FAPDl==%p)d^5Mgl6-&n0SmACHeDb>B?o8C`wy8kqB5PCoU^lMH?45J zZWE;XYeY^+{8(bYOH`~?OZ&pc$*q?>TDp+5C-o=t7p5v36?Xb@S6sL;BjLxAMy(@Q zbR~g*=!tx!cuqwQsxPCP6_w*-j04whVrl>5$;Lv%TYiu$R_2I{9dg-;#&f5R|DKyiI)zgEF+)(+@a4z)G=$FO{(^KJ!VhtDH!1l z_9_H?u_sxOB`(bMk3B9;Ct=s%Snad#R?v( zRGPBC-z8!*o~#!mXiHELc4^IA<5wpk$WKr|RAxCcO;7-Uj|UDpgWqTxN~ojn1a1H{ zd|qla{#z@#536{&?!l$(eG7e$-T@NUR+wP)tj8EHP}~Q=(VJz@=vi_94*1l&r!TP$ zzzzacY4K~5nnJ&53?=~FabIt&_0tj?FE30pVqh*D&rv0HAfT{WWm4~AUjx^^Y`Fa&;aFgLN(eq}m*u>eHzatcpuebx*zFd{qCQ1L2j$#K;~Hq;!Yo-kED zBJwny-&m$yovY=lPNFsxbm_2f{F~M6#bwoT**iuW-w&Pe-FHV@40jd4Gu0I{0V@6f zT(G(@X>qNQ*wlbB?w2;2-{P;UFj_)3@Sry$iNs_Tc}2HbqSYe2A0ldXUB?!SPG}P6 zSLa+0r9hjT({v??Hk<~y#pEONS_RfQ4rW)gGSLnX#i7}CKnKw7`a7rDCI#a8Z}U28 zV(I5*HG?TSG`W7z+OLMCM(^Ftez1Z)PPz`JqZ}InyLU&Z-lHGxe^WTu-V<5& zjZ0A-+wS*2EkXrMxIXrOzLUK%^`t{J>CvOoaJw&VZ(B^LnoK+D?at$6UXrW}K6)eY z@T#V_zsl&F`1+rRH!aeoUvW>KeihhGL0u33`6Pl4AGED646gf++b3Gc!pOQ1cUSrzMqTK-*B)Zq6Pf{SeJ_`%?6Gyp4~jSyl9yvfK70-)Ozp zw`}7~>hJ1*9rJTGa=M9TcOQmaEa#>n=62rk_~{{Lv>*95zDj@b(@NVZLkJ0HRGQSl zN(dXjP`je}DGR-23ui!MKGxyzhgJXUfQQuQ!3?&&?Cell?~)QZ!FpOCxszF3UV6^qXjL|g9AWuZ<=L@dwe-)8t78Njd;CH*$Bg3c(uzQUZb#{iS~sH~>_O`dKqD{6d)LFBGz4-%Z{4m5bPb zf0xRWOVxBq)Iq6{tWm{zMjFWXJ=Y>AVJB`%=c%E=UAMEXmqXQL<9U z`qvAatc!Hdl}D$`3mCk!%ZrI~hL#y~`D_gE!L3wn)(vl9mYkr_DQT^=ZnVG~v)hZJ z$C5(jFS&u`nPl_WZ#I7)Ey5lR`irB#JQrO#A`sm%WGPe!xQW-;VB!SGiE4144dr;>3JN*RYv-{wEbI2{_V=EV!;f-Wy;$RoutXFT|nGCc&1Px?G^bv4RRy%2xtQ zs6dgw{s2l4xwnTw?u&p0CW)Iuc3y)ON2gyzX1)D&P5a)w&y0c;bJ*;=3nkUjCtPJo z3vCE)+f9Pb%&%ZeH4M&m*+Qu!(M!7H+{j)1uE23SvuS;63|3siX88Bu$*BP7gO7-> z!gLi!+}Gs9rP&XLXo^cdwd_~2sl}Cc@bQ_s; zX8w8|efT-hPA;#0iR3XM*@4yIerMZBgZL&kr;&!@W|vgN=6ToW9CAHK@OkxALf@^IYR6}!%XsQymT9PAf_;flz=81UY5T^ zdul~GAg89G*!eRozk-nKJB01&DDK-GKB+tvU7v4^4+rFr2LGKbJ8)}wNrO4lCvEJ8 z{-qDYa0qpwSr*$?)o>e-It#>s7C^@I!zl^zH}ly*m5Z_iiy_H`Nm#Zm7M&{adpSyn zf%KhSm}~{rAIhv%gApuAk=1YdKA*&}-Kc@awB|ol#+zAPC)xrMnt>8s73Y+lr=bACsZqWnonfUNM?KS;3;jymJT3e z)kGziVs)=Lv8ddP^Sm|3=Nfl3(|j>fKpNIZ4VkF6RAXO=G)KacK@?vZ>nUa+<}`EN z9cYXhd$ol9sZhXJPs5#&-efS_IbPtYAd^=BYbZ!w!b^^4&SnJ3mH2SG7fH98GUQ?i zkxQ({?8!~ZY$^s(GqSIAw_+E3;=anM-jzK#-kY!SEQC2R%g3fAi;fj8>G8R2*M`;6*Itdbq#9U)E5aEGq#z}3nc%NfHKsu@ZFSQ z4Yt$1M0LS8O?9-WyQnGh}wk_z(67``S|+q98& zmS=mq6m(WH%IXdB+K{#kEc!+aJ~tEtk`Q>QV*w*ofX=??sH({|jh?77p^SVaoTN~I z`B!pUS&0rg0t@s>KiR}uET!K#5R-&)otHG|9Y95BOD;|gUu-I#yo&;~E#&AXx@VL3 z!)F`xl6>w$hZO%STU(}!TJ2W%rb0V_gg2QlT@pw=s)la4e+T69#UU9Kl*^X@zLaqm zZ(?BzwQk!P{e3tjJE4gh$%HSBF$o#jDJkh2t0_&fW4L&5X280!dImBc@qfXruUfn-YmLz>LZ+b_PTChXMU6*UuS@~)1pKzIrK(y#7zl= z8GtF2#dDq%*b!zfevpxVl8tMzV=)#h5QA_?|K3Ng+hCA{$Aucnso?^4Mi<)%A+)Fy zhwh5XP@8y9m}Q-%ICDoyc4HxlBi!ZJ#(a1t@of|`E)akd$vTJ$U5)EJeUWSW{FX#7 zFGIh5Dd(6W?l=3{^ecfUs$&=1;a%KO$+FG0-VN zh~0G72y6Z_oj4*bbtEyrdl{b5k1v>Xeqovtf@~L(@Ds!tIuIKr5`0Yo7;Pd`CHcd0 zl(y^Ae7D4x3&%9Q;YR(Uyv%QU2|FLmksW%oF%nAjCQG*A=xR6B^K@bHNn`nUvP~y; z`P+6frGmJ?lLC6gOv1|zelPi3GPR&Era$XE-X4Xz^$Asi^^^i?RuK}~)@}9>onZWq z63-kGKne*F0FV0ylUYJ%9jA9^0?81E6%atzJTy%s*J6LfD zh6IZ;7o+ozYF#htK(ya=x2Tl^E6lWqSk(W zXX|0t3#60exa-4bttRoGiW7GqvbkLsIa~XSI2pSgb6WjIx;=WTfO^P?zo%)IZTK;}o$%9vOliAZBi{9{bQGfZL{Cg}yH%K8y*_~f|_CglSr z?HeZjA0~s`J(JBnOV~YI**#~NJrivs{z7JVT^7zeSE-_5Z(uz14|XZLs^_3bxO| z+;fB8miL1pmuK(ids{#LPX(LJu&-@zJdsA=;p@Kkga4^uzcB3Y_%vT2;rW5(=1e_R zU-o}0*v&c7ItGNssbbw{Z`+(NQ%u<#zwGq+fBqnJe&zll=sh&VV#J7#90H9cT6o!i znb1`_|7px|m)UH++VkVTzg^znp2%$7@kyyAO?~IDY&EAC9ttn$TBgTyx*FONYJO)} zXnG#3e+$FMe2fC*9ok1@_|&u&W~e4!m{agW_Y7OsB{{HUAQD6zfl>%ZJlRt?Wdcly zm{WsCxGPS`_B?n$S@fSpPOz9?AiEm6%Pc;bWSQ=xp7I8f-BT{Qob}i>15;tuf_DOh;T>Eg#j_QdTCWIJzQ9f%0->%5s_j8k(C^9`AuP zQ0mFRp7jjti?yf~f;FE20>c_7>xuiNeW1u2v^(|v>vzpDCA9%nkK6B>xcL641Gs-t-F*Zeb0kpse`Vvzc?{8J90 zW^)%3*eFg2Z0*^M@Io3W(C+M?zk11r#uNCLv4Ykx<5kmF=$@GOY^M3+Y$6c!J6Le1 z_)y+U-*wP4{l3V3w|}MP$JHn(aL*7o4*k4QpL^N;coh7x`G$G&pr^~P*V>O+f%+iu z-vG;7AcJrQ-QLfQM!KfMKfUT^kw##8=LQ2x3+iCw0ky(EIk|5GxBnGKM0YCbD^*Jh zC>TtOyr*Go4rl`)DGgrEGE{9MO+p1LQGET^-0m3s<~4uc%&pRGUuwCdKZjqabjtN^ zdPm;;*Zwu#X-FtvWbQwNB~{4}wdwu5%`X>_@SIV5iB-1$vP6j@wg`i$6!I80_aKDA zyiN%oaZ39#(E!6HY|Bk*CHabkx%Gqw$4XY2u0=U9s}TqO)jHfJS}MHD(UK3mNzfQ1 zg6y@FiGer3Z{m?H+WW~mK;Y|aomnlx^ucI9KZLKju5v_(QBam$1 z>x1T~=W0R6x<*$qPcDjJ`+}$zXYXj%e{EVM+>}Yvw-vNoPVd!?rVB6dCF1ZqTuQRJ<7RdB7dcgwgXStK|ER@^MEmW-18%8>?j6=;!NjIc}N&3?VU zL0WqkXVk_S_~d?LP`B1dpvm#PMj`LLdQcXlSXa6{BZ@C2W=MsWA3v+_E!58{gAOc+ z1>T@Sv1>(Qfte54AP?v#Tyq|3snWPm!udQ#dy$$=rMoHaZAUyHNw;RGSZ*Opuc}aC zR&+6oKn|UD`znBc8Fk#CgMTw6V+y>|ZuGEqXbj9{(wik%M zrTe$td~W9zizL{dGxbnGdF@(O_Py1wHeY$*9@~E9w@+vMdCHG3x1I#1rL?==#&`EK zwVTVu+pW8IKqhUeEm7+9=hd$cm~MriwslTF)5gf~`xMhrZ^i^7l+vqek^qe{Va>bj zC?OvLl&db@d06gDNp3Tqjjs89`*7iEBb7E!A&*YI=)*^jMm#cs5r(Bxk@4qbg@kgo z_vFctL%cEgr$E#Wn8Ci2&uSEKxU(N&p+|C8!J1iIO!~_WQl*V_Fk6jP>A0n^x}M9e z?z5i!H=4w!JH|%wFG0!W9T@Gd-Y{KqrZSUc>;N|NOXsRaKRS`_-Kv1vvOnQ|WV_Di z6*BcLw(U3niu_-&3&iTE;O)`8{l_a$tCPm>YiH&kHJ|sgqwAiWyxd@xAY8c1%(Z2S z|HG zY*NHxAZ6wsigEsD^SY|)kXw@bzL)#KSagMhv*Wk3hV0>vqQ#_-`q^(izQQNz%)e4A zddtA)@Hg|=-D*C!cRihL;GisAAO1xJSYhpEA=O;c*bmAV877`{5saKa3tu(GH0Kae&)XLmI^ z-=HTz1Su5cD#dHIC8C1%;gkV`Yg7Q5di)aJU*vyyh8DIco<0)(<_PeA z+wt9_C(Hp2La-BWwVt(?8x*wKHgB4b_Zp=v1wg*oXeqVPinXjjV~b~g8nr$P;l@Nm zxn7(J!M?zM>>DIb`<1F}FUJqXDPC%5+HRPNh&ACJ_{%+`;d7{sJ}Je<)^2N5_+fiZAwVdey_6qF4daD^c7Xc^2e23 z715V*HLL=B1l=D~0-p}-rz7(qAZ1az(YUhSrMdoP|{iHFl`V=NkYiP47stpZmNl>{H*8~65s9GYj(g4#eiS$zo zO1fZ&vGP_25xIn+oPC1jTE_d-plb(;?hI{Fl+w3YWe2lom*&PmguyRrxmSnMnFo{~ zx}Ls}Ry^cTVzQEB-hG6y0^hTcmjPnbBgQ&bcwZeTgrxOsD3$YI68>EJ)^K3+m9#0X zaNL40$AS-G(SPgGc9!(3qlg z{RO`fh=k^F8TQ)Filg6YM%?;I7*~l5W2K7Qpzz6{Gq+GFAd)OQBx2mC%tDRFO7?qj zDhW!=+b87_FIp95PH`>zO~VW*3jDSYxo$%m^QOrh_!yW5Uz@5D(gLZ>P_&Y1WL4>& z-D<4Iq3j8oWB_#`9^fEcC-1~~eqU9fI|#>1S?!Ys0%$#Q(ePMT-2r&szE^nF3!OFDvtKZ4Vtwx{17$y)fk6a>ib zSbEf(5t+JbIa6{Eaiaf?M4lWtOQC`THH0?kbZ5jB2a_<_k~*WIBI<59Os}9|Ze%y7 zzWFcZgnSbB6O4>A#l{9mWK&4nEm8VTn<7aAyqjczxN)9)6iwssT;T{zux^haajq6M zdDr)#(%l6(0$e>1rNMvnZ;7*P7BdVjd9*6Sgu)v+!~#W8WowpAq8g|w0E7~V>H=mT z7&lA$>+i}k-YER%D7&X2>mL)u#0%5fGhEV02;z}Ds*_e+*INjc!khN^K5e|4E$=BS z^K*r~DZ}vlTd^Pa#=V%VRJy|8nPPjIbpKA!#DPm}NQzBVqRTnQ*Pz+Ltd1vwg3#dHEn3w2y^n4&2U=YmWDHKSZU8g6c{D}URm9@WcD zdj?0PPs^$^RRty!Vmm>aBzIkPJ2~F{GbxuhDMvYBKYERjBZ(J;c}G@w;?m){ypc&v zsyfzB4CtRYchu&%Ya4Jow~T-w9ol4;YQ&Q1L|uS6F-6)=BvlUJ-;B>2S21rZ3Kp0c z6zccSDT`L4@tq`4!%DSxx88iRvDnAA#1xMqn-Z=`$q?&r7uEO%gMFbxPOt}-(u}|6 zw6R`m_W2c{+J#p>`pia@oWw@Sr7F0ISood1-a>%{j|*%$CTPA#PzWw!bS3=Xq!0-j z207F;U-SR8q59eqAqGQZ`n1(}b(qYFibqPFm%tBs@y%2r*CY5~Q#jiezvgBh@;om% zSNj4kNOha(2-dW`gXV5;h)r8${MjyKtzn7F0u;6Ry04yq64 z6bhDdKkv+Yl5eE92=qlZwEYH+VFqS;pLHi;fhBluW?Uv>Qaz+60uBe{^a6n$;nf6l z8tGHKKYdb2HYhCSRKaw*Eq^e>l4dfpriZjWA4e;T>l`nG9?2mg^PV_QU_WT`@jK$~ zA`LF&JWX7;R%eI^Wn-I)Cp-l%@wv}0FGlRjsZLfS;z7R!b~+`qp^K2KL1;QihYtT= z@Dr`qMp3<>y+UvQO0O!P;;RsyFq!eY1Di^aKj7!%KkkhOm`2yAM%J?-3Yc)juSQ}R z5&48*o>gKaTGiW>FJw)0Wix+4KVxu3G}OH73$uuvrbqx>Wc#mYy?{Kfwq!G<0~EaXhe56ck{~A8mqh~+rE|I&+lNt+ zAQp~#En?G_;|8s30(wsIQ!)kA>1pYi14iRG(FNOBr38O(pXT46=5+M3$RyJ|ttkXQ zcTi=_l#~h1aZ2=(Smd}U#Wi&fB^Gwx|3S7Kb8NG+z2MrO#=9>IHpAZZt;l?Sr?h-I zUEd^eX**V*l}5p|@JBOYM<%n<9a3^*--a{hagtsBQZ%#@wbP539s~18_cG)edVLl~ zCO+8U!O3rcS(udv3!jn(EE5Af=)kVx7;lynf5^{3NoOOLJOLuhh@L3TGh%atyCaGZ zrvj?7`mGW`(h%oQTT#7hG6^9DuSP(&qF`-0sl#bOD68L}=rxO6H?eNFqa%t{X(09U zFmp$r!fDD2m%;xygY{I2#s+~Ot@YG+fx5f0R^Xc4t71nRV@O*F1K569A!{D-@_{E7 zc_5JG(>V~(iR#gxwAP6#p*8a#HYO~RI4&K~#CT3Rmq=JY@qa{8^W6FA%*Uj)9cG6g zKxy0aXMQBrOl$nq5@4dgSo;{2HJQzX36EXE4LgN6*W#WcOifQo&CtFu)886KVBdoK z+qbk4M7+{md!9d=Xi7MPJh_z>pT_l!klSVmHI+T~?;QU)wzSNplg^iixVv3WZy3K_ zd6L&%bHxQ@(sVdQfvMOdF(fEvO}41xC&|-c@1Ti&B~r{T7ME{^>6~ki4#Ya7!rYEb zCYa>P=>2~;=k3kOFi4NPTBs63o9HF%%XtHXQvAQ$X)N2Y(HTE+aDCxbB=x11#XulU zmS*O?hh}ThGwB@7+Hg&)qe$Yls*3eGXY&H9Jo&F}_!k~>mo}|Sc|t~&zS%%cS}o0^ zy2J#hBwiUf{*ELo#9f;*+~s5_J&y$cYE9ak3V{=V z@TZ%EIt<0{auz07y5;N>yDjk8zR*~fR+T9Dj63pWL#O22D)DN8%^f@FO*d#U7od(_ zSdNf#`z3(;mhwz5XFwd}-lL)3)WOysK5IwAR8Dm^W}?AwT5=)_G%c<7U+LSAaH7Qw z>)wO42O%2OI*FL zazbC+9veV{9~rp1_?t%n&mn5E&bkezKY!I{_BllYHTCIZ95mq0;yFrrj7cm+0`Fq((CR=O0pEcO^||+~ec& zLf##3SxK3Y!c9K9i}2K#`Z)X0&w@ClE#&MYV&Dnlo8&nE!K@7JKEW#)dpS#U2!yq& zcJ!J^C+Q!+)YAOmYOyRWO8)c!GRa^ z)W zRc6;1=3N6f<%~1eKsV30ybCdoJ zMG~=Y`(q0Vvq^FYHg;#>NEk%%xhBqwuj$Tf3pdBq{l2ZmlK%X?LXs{T&C{C43cUWY zis*u?6xx)HZjCe_qsWzhyX3Sq7YmoY3lF{+Fp0Dj$CsXa5B##?_Whm9m-EF}T=X}# zVW&5H&5Msr*f07BjeB6a?zMEnYmHvg#5xxV*?di0roAWn2Q5<3hBhW6pK8Lr6~8Y) z7Nz(?&@J-2vVV;<-t=XEm6|J4@EyQ9T&DHTmJK4nWCDL%x_*!ry`E^ZlAxO0jQCrh zhvXq`n;?tM`O!Cx7042!zxDKb$r+ilti+$4l{q0)Z{U<1^kr1Pi|Bof2(~x;5$81J; zvWZnjhW5J3SV)0(-CV=lt1ieYbBx!|D>_$Wnu(SKmTT2so6HT3%AQl`XX&wWzV>QD zWRNm(wN>^_bc;Er4;fmyKG3*YgjH+;Dzm<&;Y561K}#ErNGv*)QC_xHsG?x_`!W_XuvcLab0d$=!WTh{B4H23WC4 z-f!>c$HpjupgF6QZ_e|=sx--;ej0iY5%a$EsZF9yRVA)um|Q^>an_5BaL@!Pj!$;K z`!whJCCh(~6!19Zr3mlPRZ8Wi6BteB={L_(dWDYP2k)4EYVS}yJgtx_!~?rT&LWuzYGqV^SsX<+`RDwT z9Ur-}I1g8ve|_`;T0)_=bcdY+e{@c%Eu?hQ*1Y|(+NZBuNHshg8{|a4K(eO(e3{b! z!9@8L7{eIx^*mIf#NldlT4T}faY8Vs=|6R|S4V1JJvPNRsFboNeBYSbF+!a-%Vd@7 zSX&O0)A=L?JFEvNX~I4*c$nxtM(g-ZE5vz$&zP-%-iL!|5yGG6xlqg{@cAwaqP z#)#kDA0M7Yl)C*0)*;kS7QYjCO`}jbk%gaOJf6KzSbx$jh!n-9guyu16ASlF5l_9Z z%2+Hyg-JV1!`ua(rtU9>6RZ4k1F_tn*bB4?E%g0f%zkRaGBT0NXGsttaoQVwLk{HG zHr5TNdsArufjG6&CTE3jlf!F0nC!Mk}#%%8w+ff75R?l85NRsgsO-ZacGu=nT z@L7tMYJf$@H|!CkOwwzKq$6IX-8LTr8?KNgtPY z?PDWgSR~v54QKEWr=+cdgET1b8w*^zryTh%oWQu8a(=5q#y_wMDB6pFuR1nWje!>$ zMoZUHr3t%p0#O6??mHqcW4=%}#|rokSF^e78u3wZ#u?sE9WD-;^m!UV$ti~%QTO~* z)>8ARgIgP|J2Cw`$K-ImPyEGkPV`2dHqt5T>?2{k1bXADW<0)K1no`6!_||sbX~N8 za)&FD(rV z+RsZG*_1gasIZ_Mh!L^lU*U02?;FCfx_Z2cXpkFUZ!=+NNP{x%4D8DuE>SfQp2y{x zNO}jOz9u)QC2*WH`!c!kJ;Doe3WSKH+D7U1adIv5>B2&C>&sd$1CJ$Z1iWL{5myHT z^k=&}xL8Bf-x!+ewuIMo=gZUwZx;i`?6$g0XvILAsjL@Uv6pU+RN4UH42csHPkvcM4Y1wGqtzsFnt3c>si`=y_Il zm4V*E=Q1AbpESRCr=UYjF zv_^HhH|Nk(o_6O%C=j`MaO#snKpn5+vlfwJDYhVAS3Z}oSZ&U8-Q9C-XMS;V`9IR%G}2A!`MXv)nDHfk z6F)$tt?_)>n|`*S#&LkPcXjjUr1SsO`kj>Z33p!N#i5ciRo|qH*vin)J8#IKrBR*# z-5-#qmQl;*uWvHGC8KB0s%Do`vn?ni!{j3b05e!NT!FCLn$5HcOeZOKfWbs*ej2d1(oZjF(2@u~2sf-T2i z2`$B*p_yr8RS5J2_b9R`z=lGC^pH#H{SEQvTH^W`oxahs4@I7!cJQUgO$ zoli!69oT>+=O3d{wa_Z}dBYj9L@wDCQCvpojnl&iP zF*xZNakfev&OzA?U*5nA2rraa+k8$Xpoq*EoH(tHTbisH0TI`ydc`KrjSHFDY7^sw z5qcSl;}iXx6ME$e2tJ_riF|@+n&jz#(Q95wXI{c(f;&NU&BVS&h$l%QM^=(UoXtpb zObX6=4HVf&W;QVaFT>T~X-8>JxxWJmhrCp*tR6~CmMouC%r3#QH@i1YC0I=jZuUO} z>%As?;DGGXbeYrjuRh{Tfji8Ou*Vg@o-Ji39K=p9I;j!PCsV_KmR7^o4PYl25Wpdx zk%2Aq1&4SMzw8%XqO3JmkXvFW$?!?aWh}^qCjk<3%J}d^6zW@}pke)BKxpECPjWn* z&=}K%%1D~)NRZwIOr#`LwWZD~&c7lUQ4J-DmsH8sm95a#0iFyu9Jc9)Q*_6U=y8!e zyKKz_2;ErEP5Mh=ieU;xlDXCb@hmcvC3AO;A-K0pLh-NlCj@J~_1;Lc$4$QmvzRB2 z!z4ME0TW)tqa!4tXoK)WfOwy##X%3WBQq@KwS%4j=gZk3Q`Ouy5=)Fh2w^keQJjc1`p&_8#p|4#OBuyo=qxoENK`DCYpb#Frgxz*UB%51vm^9|C#{6U!KZt1cxr zbxCOwt>argHCLtqd{HZe^{eb%d_HNp=XC_P_iK?u$cW37UoMY;pz(CxV&cFCc%Y?N zMZ#uUZqVfwRn^XLy+%!oMnS4PYYkdj_$1E^w!EL1NOaKrl(Cbq0Iy}fGhHnsKoSvR z-U?@UU1Ww+45#2L0JqMU9A*&QvAPs~6s6h<$(Jq^4Tlq^Mo9hAO>GI|E8S-ZHs_0J z8yFkt6C%+QU`7=aG$ZO%qPb$2y8Dhq-zc?3KpRh!6#kUuAd#TfKt)NY zXHr7E9!FE`R9vo0k!*Y4xd$Cv;Ti+Tck23yxR=9pS*NVcWBv~SbwG;0po(<7QZL2C zpCq{g=oT{2DJ`%CBIAw4VFjn~j-wljNo>~H^eR97(3O)tHN&;Z(!n;lABw9KoFIxe zq>i9rwx8j*Eig@C6R+ApQ?(2lbu~mox(s`w%OM>u11pq{<1AOxLDl?;wun{zOM;>? zltC*FgFwM{ppIcPO~W{;A`2Q$P|W{sVc3-ERu7!311Sm?bU=Uu%c3cRUwJ_B`mV>r zL$J7?ELyJw+O%!yz}iGN=aDUol?!??6s~(MCGbmw<=KfKM8wR=@G>mr#87!7+CSMY z^?VP6D?3!>nFpY;hH zWQ9NBy3eu;+qf(xSj>2{DO%Ld-6IT;;5XO!*loGj*g}X}AU7pISOoh(lpED+g}p`m zyyQ43W%7^3nZ=>O2!ALAn%oz@;16W#FJrTfGLQ{ch!8F)z`1Y-Ly1dOtRn@RR#(Kj zD_Ob(Vbm$~5vH3meMth_APN62KpS46SV2#Na|oo zuS+QdxeItv59)u}F`;mXOx1++B7=fJ0^QvRNdVw2-~vg|Fx)Ur9jyghzzOV`#4#vEkKnyir4)>` z*0h6>5L49!VAac`jyOdVLcKg2@hN+_ye-gzN@0_%Xx1-1-o&Hc<-MuW$QZsNG7L$M z*oBdwD~<`+(OOC_VshLM^|f`m!JyH;!ki!E3M|GYgpHd!Yg(5m?3_LIlkoJjYLN{gM12+#srs0R*E zfVE@{rZBWM)d`Ck81Wj8dT@h>bPL1HiYq(iKh6qDSx`g+S4;WhyOPyo#?35nALrcO~|vbpi&49ESq|lCqZd8;jen= z1ofD(2UEL9DVjFf(;j;|(Wtt5=_Pikw5%9R>7(cZCJI>bDdhcMNtA#AJ~9a~;7%cE zx7tW$?YUlB3RmC)gN`b6b~&w0NevB5s>#Z}>dQ^Fu_tTh5M{yG#g1gg88-w=ji^9a?NgbH#q90C#CWZ~ zBv{%;Thsq#gCB_?gN`LwULm?HhRc#AHul;ywh0WRyxNyl87F-1nzg?O&;*>dTeo#> z34ra%hSP^IO@ti_EY~$Df zj!dF36qK+~i{)(YUK=(nL1ml|pI~Ac1i{y=3cv+h!8K!$;|OyVTPez}!M@f}U@eNg zDwM6I-wR;Y_OF!)8UNDKs)*3!iwFhiFFoW{TOeH>rt}yp~W!R2%TyQbHy4*&tlqs{LKMZv@5?j$e2^|*3Df0?@WryI z?Lq&D7%4*4T=bR8xXbC#m`56x--o1NTi}GOF25e;Nem=YjY%&re2eMD(#Tnf0tDS! zz-rg9seu8$-$V4QCM%27;G0X1ky>EY*$5=if>r2+hg?%O5h@LX2%4gl$Kl&Nzi>P( zK$4~n2O|U3DZD&Qhzje%@EwXQk875^&a)-vf>T@$PsDK;1xTPLip$FaXoJVeNq!re zq2Wxas5@jw@(gx`dr1lij1hR-OJ^P9*ehdC8zEo2OP~>&!ORq%Rf>ZI_mE>cS~)4f z_~bw*n*Qy*dT~oKGw;HxK0VeJw;)YYU`{RE1ZOOorYM7lyu+6miXm%am>tYgz#ISW z&P!HcgUn32Ox_mUbZ4l6+3J=AQ8pCOtcrwDcIrrop(zDqj5oUliu4)@OH|D3PA`hT z&awQ7$5f`DRg(@IiJ}3=BvV-Hk^l|gF~21RHh3I5Ex}kpFVNaNX6A25$;(zidi#`5 zoWRh*EJT&~_p6}VKS3{pFIu@c%Yt``{0+7KB${mQ_=|9EJV_|yatC0?FBoAARuBdE z%`o5n%t;&t-<{|Zk58*(16y9zv)Ve#Gi-A4ztH)O%CJ2 zN&hw*%!S94Cuya~31xp7mNbh}Co`K$2uqCk11W$@iNuK4RlM5-#n;F%e4PJ#P7R=Q z$*bUM?&H%pZ}T)6iOL%VS};_pghXYR>NVxagb|6}YLdqx`1tMp3ho!53dvnG^JRuE z$hlp4EY;v|XtN;|mz0o+;4n{52>9+r#6;AgmEB$1M2 z466bP+u3T>MhZcKQZ^M}=uk<-BwN_|Yc)k7$dDpOk_>53V1X?qSF&vB@+HieGH24P zY4aw|nBzu4NpLelk_b@>NFgdgVbGyP6=IA+5Gcr^5DNemdK4-|r%4hdIcjuj&VfM- zlCrf)fs(KhkU~|MwLsS-Zl`*snzX2dr5S}r&Fd3t6e(|qcBOk)%HRL7e2Wt1Yw~JR zqIjJSWh-~!QlJtl8x2d}#qv+d@m1D)Dk-1%wOkWL{gc3XflHR3K4!(@_Q)#7Zmq2^dy~85;LeT^VNhVMy%Fr{abhc35FaGR6o}ak|;IVuD5H%!`Y271kTi-Y z>x>dfSU#!)Q>utVAwQfRSBEB3T;s6x!{=&fZDXu=9ZoFvE| zfFQ9mEW7Qx`|eGdtRo7%^|Cl9x%n07q`m#x8`qKo@#`A7J7*SbQ<6)P)=B~9 z*|NpJ1`kR~JGIz}C{al$TJgdmi#)POmu0b2PpFd2E}s9UN}%$}F^_y)T%wT%vdl8m zoZNE4=1fvmQjoz=J+>sgiHzXF6s%&Kkg>^i(9-nmuj&4LHP!?>nDwv*5k#ViT#N0l zX&09$_1H2Gszobjiph0`QCxQ0nrV;Zv7&bCz4uE|Xu{ITqex1ivuQsiSfK7c%QwNZ z)|VIKD_gl$0a~D$^@lhUUgL48Y8b&Nk&8aMLJXEZl25FJPP&10v;O*kiNiiS?FFAy zJMLqzBNEC=Guor(jrO>>tDXU$>#BdTNj&ib2ERP3{SCkC^8-@-DePwpn{bA z80NA00kDA~6Gs6oH8__vZzj6Bo&%8wq+P*;KilIK2QBC*=EWpfFq26IYsaj*q%e7- z`%nwV$Gx1O3oaSFA;HG6t^$Z+Yi(i)oN)Lv77B512`nNKS#m@rcI;^(Ibjl`h#;vH zg;~&%0y)Sqz!?fFJ3SK65)E`bDjT!#7Ty(`J{F&vus5X(A+#J&IEZXb7Rp$J01d) z@C-!~ma`mOxbl?(K#^UuQiwb2MyjM#3uGj;C8;DK7|ZbyifByKc{u5~Eong#%LHf= zk^{Mx%qj|6_?r~^se~57Ml>30j!X9G7@|zzNZQO1=rFB9l*e#;;h% z(p-2dM-)j^i=Ng?%0(^LQ(rZ1D+SSnV7B1UdWsN7<9w=t1au;_xn)pNC?y#t0F$^Z zr9`bTR7UEg5`Q(U9rmb)FE%D9!I1w8VzG-0#9C1nQt*-`TpfiiIHA>-SalO-Y6UAM zhM?Gp)g^-(D<@ph4pK0+WCR&S+b)MvDMW!33MtFk_GQ&kkfJDq`j4LS#weJ=MIs7e zg~KE}p~Dt4CS+j&>rsq^S67g4xkpv^}qt1}v39qd1=Ot^l!!qbe3TT0$hsHvR z^C)4eZ%hik+OQ=2IOmLsfr{8i7}#*Xhl0z0-Z4w4M6`yH1LW}>Z_m}^Kj4|O*^Rj#yQ%wA=#O6RsL2FgpuaG z(R=2P0n8O17k~_;(BcO@_}`_mNqL$%NIhIJ8hdP^zt557akIRVaDrs2C|>PVO{vv^ ziRh>WV8zhDT97D!I6p0lpPPEQ5)nmV3!Bi>2JTiAEo@<|%v>{w3s9C)d}Ls}&81$q zDk4qv1I?_c1&8~G<&x03ZK5T~VIejJSGb}K_5C49%1lgZvP3Ft9z{J0Fp6pN>6hD8 zbU_$G8;M9^40;K5O<*b_L94Z6i#~Ijr+_muMK(w+VXZA>OWU0E)gB3{TmI;Wq&OQ^ zB6ltYgKt3>V5(Tl-iH6=e;tR;@lr625!*y9Vr*0?Fa&AN5nqr&bs6~1xI&t#bv?HA zW#xgv@WYHPVSS$p0;l$jY{G+Kz6~X!sLpkN;CINixUzL;jE;f;4PG*#~Y=n zQ9bJ5;_fpF7ap~ro2o$}YkbF?Tlph3^p_x7>2tioQ^HbCD~+5x-Ffa{jgdvwn>qk6jqF33!`8K#R@`_yDPzKdjES>lbTUUw8IrB zaXe9~Rd{G7K?|oB+L4P})yEe5UX;D87EpU9TB}40-l_bq@2;0YG&6~t0#L7m~B0osQ2?H~AMlvWsog%pMKdClM0$&wh;m%K+LiJjQ_#FrVza*-Rg z!G(6UMnqlL%V@#05L$f@lP%aoLr_;}NWy)@;LTLmsNI$fwgVe+1q&8{49cLpJ%!2T z+f+cuM&SQoJ2Z!TjK+Cwlt$DZ_DMnL4BxR^ zxB|uCn?m5AJ+MI%P8!hA7|#fuB!!UocuLURhoEsmDq13~pxY3(0w=r-Pzc6+X^~Ns z7cHU(TKJ852pSo@A$t6Wg1Oxd4xCUdp(?spK|rEhWs5C1T(>X~0ePT1BA1h_Uzm{r z{>=YKl;qts<;OePZeP?Img8ZPP5Ud@DxSQRqAN;a56 zRs^rzmPa_AFmeLMbOaf2A8a|KEf5-*AjzPN0bpt1j>sb^c_c%Sf-l5j@8we4U`s=Q zSQCku}6n5`^z1Vsy2FE40C>VP$kdl^`<>-8 zwA@T`3RZCn(!CtxM+x6ZM1gyPA~J5+7HG>9_)WTTfncoX1}Fd)9p;Co;|74@P#kAs z2n7rJf)7qXwjd^6A*W;BOhloZ4@!knMTB6q!-h@N7{c7W7>kWH%dSjP$f5sRlyL&W zoJj=O$9Yhv4JOnajsZEChbtV}CKyBlNZ5{jD2P>=dkmPiYypXxNbgOH+D!q*Xi;U& zpta1E6I#?7KFxhhft7)TGucE3;-=V1m0gJlR=uQ4#3Niq%wt+*L}-GU_#-K#WLJ!W zKV%i4De9fILTK8cJCH$>XoMC#P2Bmy6ifkEDc;YK7hoDnXdYEPl!8KbrJ4NT^p(AxVrm(Tu zVl@d8unoCJL?qP1x@y4~D1ojn3J3Zr%ibr^q0R_4m;69RL`=&X{@_@knk%FPMa)%R zWJ?)rf}O!2#V7%ZIcY%*SRVGCWnE$_u3}Q4+C#J_jU_;MN}*iJ+JEF=jqZuiV#{ZK zn)mbw8Hu15($`dV7f~tCN+kh#S|NQI+!RPHZTO8PHmp5>VbYRD0vsX4*qItNgjN|6 zUj-s_NazYRjnS}CJVn$fxM)hK#AEvBRMN_ag%}EsXda><3*P@sOl56e0WMxOVe2Wa zy_I3CwSgnj=La#JhY4;8VUJgg1&2BuP~=oPa)HolLN-1pT5!dA0^I1fAK2<`trV%I zaMf`(#~cC$I#J8l#^9YaW4ryX()HVcR9(yZX$WFS+MUwO@?8|9n}SVDMp&Ueq-90e z!fYwQ6nLdOtS>{j0vjp8r8Z1MkcFPuiILd@6|Cw-wn9dd7iu!Zr{!JSs04_S0$e5H z&aUBS&Zcmn(r2Ms=k2Ok>hG3{0)9*Yy7l9=ohWJ=Bt#f10+&cZh(bTmC2mC)iY#Sd zZqo!)$Wj{Q0k0V%>IrUn;%1nMxc=u<7=+xkSq4ji`_%t}!1!7zC1U&%4Y?}7_VE-@I|CO_=3~oR%u*J!Vn8(wZf)q zCaWf58&hH4>B-lzi&JjzQ<0IlF_#>nPQp=~LYQWB!G_K@Ek}~U7KkV!wt=~f0!LQM z9HQE+njGIoOxWVlDlFI%%wb-1C)I6*CKwG!ts8(04J?+5(U1WrJk2FbXdeL#+WtgL z$xXh%Z5dSOwv@@#-e^NKED};2f#F-0@(CkB@_RmWd_m~pW{QQXa&8CKQhwnEh(S{_i+DJ&SeU*5UJ3G(LzZWJ5<^JiHm~C zvfEuUViaJTrbW#RZvl+KC_GKIjA(RN*M}!~d3QKiG+=98AW@W*8S9X(S{Z zd&CTn$>-@(aM1);J>~}Y13jV}T?y;*RaSeoWM_57huI#ht~4#(guhZN7t2JF$f^=7 zKp1l?V;~;g*@C#X<)M_cS#njnGD(PBtnICJ<|S&qiZ8xu*1nGQy_6ObYy?;CO;ipwd_o9>;;s@Mn5i$Mpe?lG%wlfTlf}PD5fsHG2+L?#O z5$#IY;fl5hKBCcV0T|zIg5d{sI!!y*=!*t!h$(mHmIg#@R1}QC@?LW}=J#w142%8q zM>tLDQSZVIl})(rE{-$`fyP31Xi-Svlg{gW*x5uIRqzH#P`IQSUiJ-L&X^^S}OlhIFgHXl=WLaVLHgu`IDZjm&q zYQ!|%c_#hkQAtcGgpEW<0%=AJi8N+8Huju6IGu+%ZCs0~A6W($9&yW6s~y%Q7C@wz zra!8LJtR!8wTdedIaHYfNSyzICr|+(L3Ho+CJn6{iMX3T+isnyDO?V;PzVGL#^FGt z+AO{zT@@$O4*V8mWj|9y4ap(bgBiZ-m^^1$Qi!<%}-m`fU|X_vQyLEzCf zw*2CfMftwsp^%D2fu+%)$39shDVhn=h{cnBW0n#ULD+K`UB@YYqcu0K1e8ZA%9WVL z=gn*Us=Z;yKgEX)VUa$?-`M>-R~HaceQ{fxE9RBrtPZ=29TU(KS_g_%4eEf%2Wvpn zr_7CDXvpkF30Ga}76ku?_z{G(ZOCOHj{hlybi4=W69t6$Yh-_th=ATwPn-P^MV^A1 z4N;WnUpl9Rb@5TUTttUtME>j>5bv`iVNAZ`g9NHne(n4Ic1S^<&W+|Td0-O=_Z5VZ z3kpP9h?v;V?lV6xUpf92uVoQE2Bg~ z!i*d@Ry1j_KuL@RE+%xyQsqpAC~@X|=rKtYO|@7}D5w*sN{R^u&OEA-pv03ilgeZ% zQRPdU6Nkbqc$NPs(V9Ia*$S$pD^sZiT^1C$P-;<#Y`LCQD_0}ch*_I%JXx0S*(4Gq zZ9%xnR=d835hqr>m~msrj~l0zvQbJBDU$4w61unVWR8uD39CQza(#q4s6qqqtzE2b08;&7rQ zk_Zbm$5Q`1Pa_Xo?CKy7)ypa|9ytUNL>ZAxQpqLhD=DqdEW?Zp-I&yAyT5E3u*&qcosJ2BC$62!_DJTuKV;T#i0Amgml&O3GTZ!NNP9Ec|=7}PS&Bod0^ z$EomyEJ2VMRARkE9dn4M2!0~vphqFi)Ghy_kOU~FG^H;tOzWGeBI^nbRn=9iB(%@E zT-_o$R%v~VxG1!6v{w1nv`mUzcMX=Z_@t0RFj9q0c1%H)ZPwYGs92%^KIzP>p-g*x z7NwZz)K*b%Y0VMbaSifF6LQfVw+l+ZWH#M*;f0$~6_*`+N zY^(pg>O^{xB)G4mW_nUgg=5SqTZoyYSm4GiX3Su%GFI_beZQ^ApiMw7`A%1-T_C)& z5Kgi@kXsgQxA9`0t>*UZLsla3RGrK_lYtIeXz02X&O2nerAfYOq3gJ5_}~&!>iIa! z_E4u^LP*@;qEeW}zOrTOT930XAc`bPf)O!_i%tw{1Rc~lrJ;kQ+wLk$LK#X4q98@E zG;h||T^TDoa+3xFUyj_urSQ8kxyk(tyt`ML>`=-vw{Wcqc>++tu_bOR!nw)D%R%?r zUc0P~cU1b?&0{uIs-$Cj3c>!QsHGl>Qa|y)qd+xFrQYGDaC8VkcUZ!k476@R0j>WH z{cD^+-JD{j=DJz-12@lUQb|Y|<mOrASb+K|FopuY{A8PkikT1=}8n=u|)ncW==^MLp=(x30K&I3uLJxg#1I0R!mWY3DEz7?#j># zTaaP_hqPiJ8}~)Qyp4HTNuq+<5yvhTvLhfGU;$c@$2Nc|Cs|CwCfZSkNBzh;e+=Xx zxiGjnd1{UnypSnJK?ct_4U?oO04qx24p)H5k~{K92}5ZqyS>PW)r5|dJa`!uQptO3 zDu6v$K?X@qp@Y35MLTLiiZ+l!m?tBSF+&;6J?bTYV;BW1B*_JCc8L`JXvI7iQ@C@v zV?p=eLRSj+A4#e)o7ef~7F^*DQYb-X-b*MeyvWe`6fO#*xMwTuu?5|9DHF6nhg;R>*nn>0TF0|twTfkJW7UU0?_N7Zd`6pv83P{4Z0-)_9jdA~M!OFW?&YDei zO!qdD$o~XL3Q;Lah(>|R5w&9jqOb9Wv0Rk_X)8#5&!(r6@&?CD{1n~zfM6{+gk}$ zLL>%yxM2%v$;$~7l+^-o!5v8jm_wofJHl?U3{@rHLrQWvaAD7>-5t_e@uyArJqm@# zG)^s)3SL1G$5XAqSDzkOMu>1HHHZm~{47HXdk}Ck7*k!E z3~-9$+zxdVTp0jOa6MNtB`Xlp3Rlq4Vf0EW-+4h;%fCiv)(- zAc}tMls0Q>DGM#52|&)&9^~xH135dMm!Vh!naIvT9~|HD9PPtxO#+7hX$zt{icnf0 z1r6yb1)uVdabws*QRC%H?~eI+aOu7JBXTHKk;pTlF&eMl;9sN3-L0t0$2ewF@<8$SqhR?z%%Ek2?nbh$c}SdTbI)F06T zhNVCTMp_9b9+AW%!7Q9P6@V1%n8IN-48D9F^ zkd~DcHUy$tmzG+8DiZ<2nH~@IaT6jTRU2JpOmS{Ox4K?zl-6XwR&QFigmSeG`HW}~ zMIjO|l!S4J+D7jL#?^@KR0a=z86%Mlu%!^toTQM)pH@*)ordFP6aCCQ-hva4&Q}M? zoW8teQ%c;-Nqx0uokbRa6I_ra7u&kkFKP#cwQ#SlDhNy|eo>e<)?F)NS{O1UVG5(j z4%Qd>#Z$YH6@{U?0B=)(Hk2up|FjG_Lb|3%WM}{De8aHW9T)ZgtfChLt{|J*VGl04 zH@tl-fZ5$^nMbx_3eFoRf;(d!Ei4pa^d$`$Fd9#$7i*D%w}lq2R4loQ(jKST`WAk8 zSV^{n6;!s()aBXY6#K*P=ZVb;S*k+c3`+`qI}ZK;14x38BA%J)YT@43hO#%86M83^ z*)iIRv0sN2h_CwOfBN_TMA4?BNeEd`sNqQpaan!)qPJ)7j*-;s!P?FF`&(DEMR{(R z9qOyR^$JK0PnN49vPA(Jq|{bPi^hN*YQc+6BT&|46ts>MO0BvsO$tV&9$W#HLdhVM zKnuvBFkHb*+F_Xh=8dS16m*A*BH&l5uK@o#u+)~xt>(x?EF+XQ;RN%@71$}7N<`jb zZH^RxBAjRo?x`N^p!+^zv4pphDy5s`e0F@|^oH7uO2=4%i%jHH8l78joB;c@E zLG(;5(L|?$66E6INtgr;6?;MxqA;{lF4ZlO?m**43M zD)G`HfB{JXU|tB&I03Kt#y|hO?&R`ok`(R9vQaP&M+z>jQ@W_S0!f$zqSQ|9($MUm zI3+ChD>)AH(n{+URcQ(e(HBs|iOvanoQ)OeVb&BvteQ~oI;t=jZZswi7TW%M4jBn4=A_`|q@ek(>;ef$iU4LQ zq%B0WpiEdx&?>Vqz(g1Gg__JVL9q!XYNO{Kqo?Rj_CoPAxL^uog%#YP66dO^iIqCu|!ED`brc&Bupd8Y0LVMC=zP&D6BEM1drNIn9>VX5Q`#FsR`XE z@K_Wj(Q5%L<2F_($GY>2x@dy5FXdR$Diz};X{=7!!~mxt?A*)i%9N%0p$v}CG9uwL z#F0APp^)Cl)T~Y^r+^)34>RXsf%oI0q>9}{u0mTOx6^#;r?t0rAi7mkQAUQLDo|W{s?*sqEiQ} zBTi6vvJf#Y!aDG(LEe-VHh@oL3zcq5-exgYt;`nOfww3{igJ)vq37A`p$&p)0yilS zCY zkrQfx9k#$7N}&MCV6yI#50!@yO9+lsNR6xm3THF4?r76)5mLD8RB_Qj4~Q4Xt1QX` zBBiff7SNcu@*+kJFsu=4)6^ewb}-1`%lL_q+OI1~Rq_nbm=5P~L`rRmc1<*rodAo< z_$Dd4#5Dg}K~nclA9sQ{GQl66Ec!&qoBUz9s;~P1h&CjwA!BAbdaqdQQEMm8GBmRL z*h?LM;U+hX%HF6d(=;;(5}n8iB`K^nR+7bZV!dE9$6)fns8sfBqaHY6lFYP<+M!sM#Bn;3x0?baH9Z9p##fcN^eE3{E4m#?+m}P zG`{x1>ct_Q7IRYP%mDEeS*F?AlLG&yj|z|#-$Ja2sw4a|J51sjIYn5ptO$*@K+7co zsB@0;w=bQQkz5I+geilp137)69VTuEt1FRqaMoza*j`TW>M{zeXwy0ko$#q|Sx#{h zi4y;#ElCG2>H06w5jT z_?7$(VfHOVu;ZJ&uGIOb@u9&X_-n<-s5seFfK=Wv3(w&_9FL=^ndGmx+BkRt$Mcrv;q3#{=X z1d8s;s-3#TzxK#FU@57%k~nUo6hbuF5E(=&nSXBdww%;rH?naY>@SeuKYM{3{{~C? z(Y?MG^~R5Y087E_PLj-oT_ewwC=W~5WDCl6fBMNMYXdk9>)rAzrMTeBUe_XPVF~}x z)Jw|60c+vQX3>&sqo0b-SROR@-U~${Z0^*N7;#xc6AlRNp%ggaBqg9w-H!7rwd*L< zSo%pRClr>^IaEg%Hu&_Q7?e2D80$8|YRhm&%lRv#sO^}}M8z~!vUl}h`^54GpOy~KEHVvG6KvA%_3+NTr75NYHhy z$iypu!(_lP z8zNx+rHZ$jZ?Q^y`97G#c^t<`a)aP^GCaduabm)zrJ|p|7)ZE*4|b zN+9;|Av_CbB1U%jvuUf4tt13g4yIj4oruAvPbktSkP26C(OltGW2VO3?Wza~gB^(N z;wY9*rLBy8s>u|8HLBEx1*8;km~pDstz2g+%u0|W!>?B*j&v9jB|!i{5=co< zG>BA!4u6_V5+R8ct5VWVjObTl;I4!V8$OIUamvAp8#|7wknz+c67;sRH6?Ib$sVn8 zz9~hordqAYluc>%VQPk}AG>}HJGN|#d}rIf9W$%J$_empV%5%7yH=&A*rj@KBSV`Y zlO&K-%N`dcjIk~!$$Vnvf_RTAVXk{&@5)=++1m8^`pEDJal3yHKmJm%^6T3-`13eJ z%1K7mD?mysq}VcCYd2LEniQIlVjxUuHOT+aW_oQx$`^0pk{}MFiH7 zq|`%3Mn8?T<7qu!Db|lyrbSS12}B{qCKK$X2^pL4XkCeFuE{1>fVBx{VM9u!R}y3l zr^Ez$kzx-iQv{Wo6dFpgg%SxSp+x~oYQf)XTL^?Cp>Lnka%nLHenZIqG#3sAG&G;1*FlX^W+C zF3W7QNI~dqv^}v0YhEkX!pa0nDA503J#J*SNiFrX5nw&GNT);;l8jNnxwf=Ys9UWJ z_g^~&nAeWBVHRMnJ!SNDWE3&>`);9mse7lpq-Z-HUQ!_23KwtbHA(^YD6DM+nzZuY z#TU22s9UUiXiF(vAlZ&Tt=y~jyqJ+U z3Ms7kQ_2RgN+C%-!;!+bEu8!*!BPK_Qp#n2HyUm|eQwdHCiM_k0CCAyrUiwUm0~6t zlWM}s#qC}OFLetNYfmfG)w%zL;=~15`srJ+Q#u&~mIiR(#QH)z)4K1ztV1JG%X{!2 zk)>mb)`pw!>0~^fvKIJ~u?5G4YQav>dzBZo0#k78V&`RSu}VGD*}Rv3ZA@XUhUTJI z)h40kb?RFB~~LN!(IRu0WfLeT&~~*{akSs>Ue4# zL2FqQ76_#&gh^Z+Fw}rpv8enl>^qc^mAG1g9_k2hg)FSkg<1&1Els3O^fR5+3edU3 zg{B>)lfndkv#oHgjX$Jth3U3ui@oq^3lkWHKfu-~CoZgUv6I3SAcde!*rODHivlZL zp*bmx;$42a6ve7IBB1{yXlq>94eHV+G&20HD!>|08%`IREnEy>IIIO1^u#gEaf?{3 z03c8(hrCumD~610q+x2~$Vj%wAdxxJwc6n#?6sp%2r>^RrsSk?`Q$re%+?fYK}X;i z&_C1RO%z7akALw7QS3OO(0KE+acxKvS|C+#I(NPT+zeK|!QSJ<)R!J5Aqq(#MLP^g z7iFr;7WF6;j~e#M3c@N0k|0oJG{y>g&?o|=l7OMc*oqA(;aB%V=M=Uj$#}}sDL|TM z4D&O?%2doB?zn|{K#0dEJkB&~yxJD^6dGrmjtb`K%MvFbihlfYQV}JE-42N;FZE>%A*~9-GrJ&3v%!RW3|Z{6(%K5Z3E4p}iyWhwI_)yR>#?+zPI{&a6_OWj5@-Tt zL2O{hND8zpbAj#nrX)r-odk-_JoY#rw+<$SgyqgkP%W)#)qaKJnrdCYY>Erf5PR-u`I42aQ90cUYWEyyBOi{Jd(SHDc7 z);E2FEp7eezftg%c_It2`&Cb9*yDs-#1$IMicx&jIpE0lH>P4%Y*S@A*~H>kfGZ{` zHF*>7@AoKlDYbfC1M zq47roE^fsfmB!yF>leyWhLh7GgvBICjcN-p2!FP)wfa3OH2PdyfG$%i>^U^J5S6H& zz|0DEsI3j0aPH??K`c*_`B;}38_i^k(Ow3PaiaA z1~20!VPpbvS8%_xz*c+{hnOTG{VWD;ZB-@5S8}zz@%zGie~7ho5|l8}1gQc9OA7S` ziowA&UZdO!i=Kj&z*!TLr|o5(Ubb(d3{;(f1Bz3#HHfFIqEt^ADm9V?3dae~qrF_J zDk@}Vf{2agD?U}m{%m0FdYuQ|`PBbVzN>#2%VU50-0#rMyYCv@D}VUlFF#?p zZhpmlJ^k!&|6|zhemOON`&Ej+{kJmt`*%hA`tQI0m4bZ#Hy;!segbHK2l)RHQ%vXRAcoT1@9C1g18Hj*_r-4bqe;o*d5cqu|$P*Jtf+whd3W$O!v3@J) zg8v79FDMhxCxbQUe%EJ%Ch>te$b;M$fIV0eCJ2N>*m^2Rgc8w!N2r9cCxJ_-5;W+9 zQJ8idD1|{tT2+XJS~r4Oco9O#g^tYB6YrJLiRI$cFKRgIu_SZ77E} zH-}GGde~8ic^EBX7==lwhkxiuP56gUXfy?gB5w$YN{EP97>9}Ih`h6fb-0Egp?7>J ze_Vnkk7$PImxpAiiJ!PTXeftLbs$~wCSJ%9cp+Vl1&URee{Gl*jky1CR&f+vA`uwZ zd9;yxqPK8Ip;N4oQ@7ZPQuu>lIDwOLXpyrzXmK+XLk3qwaSy?XLLp?VzzXVwfp@1O zmo*CJq%MjVFT?nSmbip|s2W66F=N9D15#%%6$QkhEZ0|zEukyRLpO|tAr0|HIfW?U zC5~7qhV)z=wHf|7q6p87sUTBj8*_z&h?43078%x z6EnpMwZLMRkr_zhQ&7ZY*28H`$pw{S9tA)KoYq5%d4!?}ixf#!8$)YSFfS5AJ?BvX zF)|7SL2fsbOJz`D1w?H1PzLDpO4z9cVRb%nr7R@@bmAs3s5B;ZaEkGYT`7 zKUzRJ>;RX()J>JOOcYczc;TK>FbUp-7nj8j?^FN_R%=*!6q(W)zn75JgC3g_9LDi8 z^pG)HHZDar8hrUB(6LDl;~!-p0mZ|jHkg=4XpUKSXk;*;jIu$Il>}plBt0YnkpPTg zWGATkFnvOzwNy3Dlr~(HWzpji|6wk3xjBmS3-(eE|KJV=I-6D_FcpM0{HSIK;vZyy zk7p`_0hxzTI6%j89um+B4mqDtVknDeERc1hh1CC%q=KR;bU{SwGlCXbr;|Whpa~4Y zaWAuzTc8Qi<`*@8pri8Ji!k=LjM+$54>x}}rosSB8rQuu)^=~D3Mmp`RN zOyor~k^~Bn3A8|(p&323 zK%z_uFk;jXWU!*w`hrzCiec9qD5KLWCFxyF{4C{i7DTkhzWvORH zq@Z{eA~}b4Q>@*EPh4@=Cvaqj!eE08TIc`+#a&Br9bj;`;tmCh7TV%2gS)#HFYa!| z-K9u@;-#hSEbp^#HrZse$tL?B+?(9{yC>(K^Zg`%xPKKXT0w0MNF=B=n==_uqL!E3 zK8ZCh$?A9DeBhliBvB~tn~H5Xw5AP6JrfV8s!*S+knRZT&&VTXaXEC;(@S9C7p!D= zS8sUy76H zqAY4W{60O{r##xf`BN_tHORr;ESM4q%@1NJ!(gSnW&v``mq?0aO21{iqI`dq!urxc z_ll*(q9ZS;qk;GBA3E3Zs`k?LK+f@qw4>*P@&t}IreTeB^5KzgLdt?{39CND4dvbx zQjv3P!S+faj+L53Hj#_?9o>6^ z8xi}^%vA-Al7Wu#68-9k#;Fb=5Y0BR3#TohRxV}kl?9QaUkuNNUP(1MNA$l@8RqKi&pPh0t{#3FIAC3#r`tK~ z_GbW>eZ+HvSP3sg#c9Ov_4^)~5zWaFE4&feh@rsA5#x>ium;b^B(+p}SN zyfM#>;o;GS;6JpPPJSu={&Ff~ys|H(!bbwqNI4(LL6g*&M8NDb)Yya0xZs1&tPc_0 zQ)XxDdO)z!aK*eis>)r8sK{_p4#-+aJ7PArzGVQ|B zkbsSe*oDd0D^!cAjNa^(VIqFAPuC9ZXHi z{tjmBNy|o^ur2EI)}Ll5cqGL`;?2!l_Vv+aD@K~#hI*B+Jfy>Bqnv|IissKuqi)%_ z4}}6sd*ijGn|DCFZ39>q6C@ngiP@o~Bi>*)*g|7UHsAAVSDi!iR!cPLY}fic(s>Bq z^JsD^TV4?UE3S6mg(-@(!Fu?GKe?}z*382j;;7bvdxNxgln{xs)AxLi2TLaMiHVAm zxjOcx_YWCV2%cs$y0pVQObcA+%eV}Ci0!hSX-9r`uaJW!yTyRexhBYx58BR1wKR&= zc*Cswx&t-^FHQ9ECt*l9ef4ZuXtr;*Y6e%U4y|aH07Da0Y%zx`wDc!sPFC^x@|ir5 zW451p&cqnbRHQAT4WUafG<$$xUP>#k7+`oQF##9VR2Tc#P^HlY6tT#ZZ0xXj!+>~a{pn{#>~;kVK|r z@T39TM-33$Jm&Knw9Eq>3tGt=L9Nup&&dh_yw_YCbJT>(#d!4xb15th>+$Ic2^!NI z>LzFeZLiY|C=Y#Of%%)-$aM~v=Mz>N;aF-=TI-v$poc+>MS4Rp3+*yfB>?NP zf9rOed*%MnF_iKR*yX;te?2yqfL#494h%vyR-Ue3CL)@~>Cst_-c!>2xP>j?=&p$H zw0{uyO3`B%*Phd*5ThXn+<5W^q6pTkFE-Yn>mppvA$M9U+o;ml_wE^nb}ew(B_$)~%R zq-v^4XjTin-Pu!kBSrc7O2u<5vKmEGP6Aa55Q80B0A(nP3S4m2$`*>2%t~J^VHsg# zh(_J>sqv$y0p%5l7(}={#!}+*H;;?W5xvBVs`jrA1D!c zx#D03a|feHGNGt!eYE017*3)rMTvS)Vk{evw3W}?|E^$jTCXjfXq9V}2%d{9p6XN^ zG`n<--js#FGz*>R7Apg4bek2O-9#EHlM`GK;~bJ-PKP>-H#1e}HIz4D#Dz@`a`KTu z`M!6YHXAEfmZJ%bYP6sHW8Yo#FZHrD?X1#o(|nUox?9q=C`-*=n$u)GyDo)#kT71bY15m%B-t>>w18 zz{P9{U+(K311rE0(T>ZS^qY&HvoD5z9Bpq)cqd#wzLor^O@inxP8U6qjOLujm5OA? ztofV>gY3ET`2}J8pPuPnS_i>Q#v+X$^Rp@Dwlok z*BSNtMKGzmBE3*?y&^39nibBJ<#9bW2@7#oD)1@3R$^~lNG#rMSs)hS8X$c)`Lc_F zL>c;3`yE1146knLC4R^|)mPsSYGp(}H1Vp5Ki-n?lA%0^YAxHW2cDQ$6)R#kiIOUa0eY=oT3HJUOKbfRXs{2iyf<)a)4H8^(hE+3#jf#Q zh`Gf}bEq#|OV@S1;~AeYDA+mo+8RnO(Q8nS?7uM_LB@jAJ_Ta5!an{G5EfP?{D%;5 zS>23Xsd#R2$rqD2Fshrp)TrMxzZ9L;6mA1jP6~nuW-x22nVv6v?gv$&aTKo<9*p)E zimcWZJ~)2M;Bp|S&7tw&v}*w{*njI${B3ZQWqv(T0xK-HCrPRL_!PO@WztlPER2(m z@&c8QkonCd?$x;;E`qwTVRTLy+2xsVV%=%?q15+=s{r!FHnNcVwF}ZFDk#|t?~y{hj`*z{C}XrdJf>P%2xK|WFrj0XW@KNM!r`+u zn5r4&f^7KKOU3wOWt{PpGp*TdC>O(qbAqhAL@@%gVxfR5SO)?d+XR8Al)r^6B^pE~ zgsE2j{300#F8x-Ro|F9T3DY9U)AD|^^OI*?tFFZ)yj!3LhoRH*nq82KIjZ@9(K`|Y zm6#t;ZvBJFhf+zYmp+NvE(lVjC5chU-N(x;~_KqA)xy_AQEI%;8+%*JvwW z1}8zqs6A(*1WA?67R8hFw*sx>K{JKYUqfr6bzlOoB8HCtvO@1A$C2S}ARPK4@PS)zsDtRKruJ#5Sf8ub>CzNY7` z>r=%&s~g&CO-q0clDrE$F_Jb!|Kgh3=-f6+^|<+ ztNqMp_29Tf3k(ra*q**dG)r#@8S!p8xj{V+iz5Bo7E2IWlDY!tnKr11S(3z=YVn|X z8bZ$~w_56&l`CwU;P=iz&&Vyk?u@e(U>-`=&)d)5?S?z;Yi@F_*wF~juk!U{W%GAa zh|1(N58ND&pcPK)NhthSrxkQ*W*E>DOOKuiHNq|ehf))3F*OC^J4>$!;;~8%vpKO!Rc(;Sw@B=eJGqI#;2Q;6J6;Cy$?~3(mbGMTgyOWQMp7C zid9SF4+xRabAu9GX?E$=dzlZC(obUS7p9-3PDZJCU?T#EiG_^%bJ?v=K8y!eb80A$2JS`!ju^{j787sql*= zm?GruyR3X_rM~S95i3aF2WJ1|v1!C8K)m9x%w`|HGdnazPalmTvKA=^N5=I8$S|)M z*8@)~b#dYzpZjM=TlQJMn!u9TtSz&c#cqp%gi@-oZJd5FM541Nc0Tt!5N*+I4dSkE zgR11ne6Oo3f?%rFO4!)UFP8w511T%GG9!e&7WM@VbhgxkuQeZEdFBMSs9yBbM}0(F z;^j&z*6(^$;Dw<@n=sNvpeGH95&sNAT3RLrv+A`IG`lvwb2oF4?yr;Gi`BVr?$2Dh z%6oVlLCcP-`6g`$UPu29h2}g!T5J;yA2g)%qM;H^s*qw<;2t8#VPDPmah&0{nw@hj z!(gI2lAEfFmbg;1%g2(!iK~4X&iIlC5&;G>X>TzRXhU4qS!(Y zLM^~}jq=caLWW4gl|nrGc%gDN`I;m+&FY3w1R}Wj9EU=b+BMg#A8LaD?t=wMu zV$bkO7O+(8)L&>7NvuvbqwW z%I7Ulum~$h7e>=CRcMvQz61ms+2 zlN5Gzj|sSBi0frAL)arVTG_jMnK7RhLCt`giY%JUZ5x!uQ3HkTyx5KDRfG0r7-r8t zMet&2MezF2H74Mv1hWT0gL}+!rC4(l4fAL$`>qnc}S>uqsYa0;&2rOp(MDvuA#gS)F+btd8`qF4Z!(#(u$8T_NXA$pmMT>ls+Zd zr*p!S0?3Tw#>t>)G@JnpKD4*@@(lXMa#6Kzv394c)9x|gt+Mtlk7bX(hkhZ-p6sJt zjwE17Bm^`@7I7m{RZP0a8M0Ioy}m+J1Ulsj<5dM}P`$q$w%%0;BL!6$gsSWiwaijh zg5;Ndo8!un(FTOCF`Dt{BWWTdD8?yl;eGyR5_izFxQZy$ZdU&dN1IXnE;9We1NlFh zv2YY#is?E$-z-8yAIOuhutUj!5bjxV^u{<(f7AwzQ2U!V~7yQQ4523ugLN22*NFkXRT84M6+WxGyR3wYdyI2%i5@rKX%(2dG`6Zi$XI z;D_vLcYg@a03r*DN%z??H&%#RgRiEMYLD450l%WQC)H3eL^ygHR#f`$KNRTa6o9F8 zOhoYuP4#Cq0)?)rOL*#795co0S;yHUi~IFho1+i|Q0ip-KfkDq2rdE|b$pIl;N8qK z8jaG%8SKAbMd>K0bQC9h)f_5jc~;50b~I`)XKN&<>s3I|P!L_pZ1OE$Wz2Z&;Kbhz z$dZ0juJK%#*&J)vTqQhe!TwUHZMTRKL&LBD*~Awmi$NCuX8YGz4-Bop(7^^a@;# zD_C-0Ty_x9b1b1~X&ZXSq3_Poj11Ay3y>oWv3{~7_3dfM$^vnQE`>Vt z!EM~Sri@F4;MEKJxQkuQ-kF6w^(8vFQF+hR_`j6$_^S%dxN;~~ZEVlgps`iVvDJ;X za}dU(j$OB4uOuIgZfj9M}|z6fja#kHa2TEMroRNnm1-YY_2exmgmUo z#jfwUvL*^F*)Y~dD`}RqtRC~Mn&m7ga%d+*qRwMKe@0m?e2&5G`moWwxpe|r{ef?C zHne8VVHBvH+Jg@|r`dk!+H$+i5Ix^6JKm0Etsy2t!)cg?}V zU(SLPcb7rcBD6%$t815qOdoeT4olqd*P$T~m1ar6DmHDD)L+vOJTvz{Yce%!8aE>& z5M-Lvj)tYeEzMkB;I_OoWg|rQZ}aNu-<)EOjC<7PiW$R>0xiAj?iODuSV`RKAy!Ht zPB#IzJu7NZNMXg-y%tP)8-lIJs^8!F^-uugUg@ zLz4@WB^r?wu<^m&wt@9l=LhRYu?;N~lYP0(UOtn@p{J3iZJW5YFR)E>)mg*1O_#7p zm$*Zz#cu|t#->=dAUB)dScB;y>-}bHS6UkzQ&Wp2Yv0;UUBS3Vfj2tcmgVU?g?2k1 z!PZX-_?xA}DqwBlA@-C2P+t)mEzt*qCyy{y8?-o%rcp*#2plZoxV&57YNbCzNZl99+M%HFMz>21lhNte#4so}3b~vB1 zX;)Hjb!DynsWkdNWlKJHHB8(HgTM)aS&i16o}>GRC;vqjb|89yq98f z0o*i!xXhPcY>6HF4ZDm^rJOBAzeBm095iz{ko~y6aCtAj0Z~-A90)g(v7pQ^{v#X&!Jn#{FiNY_L!!I=V9lsTE0Bgyr~T_g>zn( z#5!f%YgscM;@R3^ro)81E=p0f_7DlPdP7%jIybBzR(>6n0B`&24;jP? zPM;oE@wTtfU!;-$)s4|P?F6j++E9#KJS9J0=EGm{&?$LIw$JqPJ88E*%XT)Cnt4;| zN^{!^0CEj`xtGJ~=XZQ*eLPy{B;J`Rwk>xJSOU%kF*s;xkc04T+!Ic}0Zk z76AeJ%l&7&IvG$Zsf zf8k}p*oJgeq9zwNb>*4uiI%c$l-9rg2XC{ zVVXfo2zh;_=E}t?{l@#8?{B_uf9>f(p|}vCF9HB$b~}OCOyxU4c!I|} z!C-mj0)?j__}x%0{P5kd=Uxv)AF19m??u2;?e-#HHjk*2GPfK*@$19P`!W1WcKfly z-xdg@o1IE6;v})gX8gf$x`PDzmU&AlQSpT+#q-zpvxxu!17tD=hdrZ|KK%(}Q1NTo zVJS-xDU-GQ$BI&C2>tE8{M%Qgw&?GOwU4A(TSU}z9q&($r0oB(*u}j&WjV@^V5&SW zj1fF7&kGEKoJb~R>e$Psg_X~h#CtgumevQ3FXec@cQ~ym#}Ljgx2B}ZsG>!nbWZge zi9?d*t4mK!G8Dd1rGIY6!u^hD4ue>D^f6Uc8)~sf)7E*{v>#bu&}y^Gu&U;VRJ#bI zfNL=~4Fj5{4M$E8N108m3D6Sd)D8tmh?C(3=?;hVWvb(5ou+`txx#rp+iDM(qapx+ z@xAKOrXb~CFcyiu zTQXMm;d7|I-?&?OZN0lT3qh!~AfBRv&lZ4xj009)Fe1p;h<3Z~xA+-R^vG4r&1mAy zPZd)_2n~vl4#W?U&mE+XSU(D@c%@NC%98o%ntxkoIs7H{MlIK15yPJD_sO%hbL!J- zHf(SE{7MdAWXP8|E#fRmuRBD+`o*Ix+_)W75{h!^G};FPS|x+3hJRfd-Q^a&&7k1# zbUqN|7rlM8xK+rEV_g_)PA2gw<#t0Tq&s?<1U4=CBRuQhpC8U@J%Mj)C5q(Jrzi`5 z4s~qnS-kAUphEI124+Zd&yk|hUIupZyih%R)(5h%{y^{?5BQ>72scqKD4Zv+68Cu6D+FjFsc{LL`_fl}p(MRHqJtRHK}c1_lq~aLlx%6k=vf_FiR%<$ zs3LVu31g^_fraDq5m|rxP+W|P0t+9{UUF6?^z|qe!WwBIt|&%tOoL26D_uF|3TyB5 z!aeD=FnY?<1NZAJ98$IAFtii-I0&Vs%jBq#u0TAGp;Hk(Nq_688IfqDzc%cV4=Vk! zm`nyUQq1X!XarqTs0O)5uQ0}>IcJ;bj#DT_V2~>&7!`fuXYyX(0IV&@s_Afx~M|W@2kS%9J-x4S%+)Sf)7DPnZN(*LLi1u<-UNo5q2^bn5@j zu9=zGx^EYP`SV8Pf=c>+rYZ-v;+K9PH;^V!FDZbu0k7_rH~olLyl)O1q$kHy0%#rr zKQUrcznxns$^O~Lbe<$#|0*QlauL!yRm0aNhB*mbD8RQB^jRyBih^}cJ# za(`d!|Qq|^4y{S{(j^B%Qan04Xi0_8$zn5B>kdZ7wr^b)JmwO2WWtce51Z|pDMpauH z(hvz$e2>zcAMgKq{Y^SodR$wr@&Wc@u01TwEJPv5u5M0|IN7p>jp^u{FUy72khvGsHMXTyBgj{x$!ZA`U? ze(Hah5o(=#J&xkUH(LgL|Ji%=rccgklRalt0(Ww@ID>FzW|R?wZpK2QBoWVb=q=(`mG!U={V? z(LnuIE5YIq!IBgq(!wFA(x6;&Fd7=&F8~k|4S>duhDM8~k7@g#QVj?Dxnf;@UobWa zD-3F0Fc1!AP|8-UFC2=d;B(j*tuGphhss1fhc^_DB{6GN8joqBPo!~Mj%ULgOQ*7g z-<@uZHI{wNlMDvYR9KbI7LhVQO~#ulv@+qjO0ktQjPOd$Pft3h=XcdAoO&wl%;xIV zM!We+lZlp^^)Igb<2lM-YBxK4ZcaBRzI@*93BbgqRcWo;9f%-dGo5U$-ycCTDCerQ zH5^W){~t=VD$}X|lxmg}x&NzFo9g)TW4kvP_l0Wb|18yh;EPqoqy%k+RiX-+2vn6=wm>^sOKA+5qHSt$ zm}=;iahRqbHpZB48Ff;UVU=s}Ez_YT<6D;9@EB9}yYZ9K9FHx7qulrR8Ao|OSmQ7A zgF&Zd1tGMC$AwXXna4#DRKKm@?4{Z##pyP`Ul;(G4^JfX+^Ja0b5dDn%F9w&D=UjX zW>!{J*P=jdmGvzS4mF>*l)l$ie`Bqx?b>5y|J;bB%w9Ld6n)mvBj{Mw*e%ZH+_XU8 zc-A~F?daSx?=s=^WyFD+vvuX8(Ru4pDqC%PX3O`Bj?1lErOw->M^5tlZ&h4f_-^e# zdIr&@0(>wHAHcqN_#Q01ctY8xJqo^uZ>6*nL9>HQ=A8+{_4bojiX@+6z%lWC(k z1(U>Mj5){L?rUA_H=o$a7r=wi%|A#z`~>5Q@n`m(b?+FLtC2ocQ7_%bDnNsccDR@b z=cju(=lAt#a`{egC+nzH_p`*2Y0`fjQ?H4@EUIzp6? zdGwztd}l*51vavgiW)a{5~BbM{N|#8iXoWNv&bN_V&;~;6IV7(GdVG1I$!}0%Ln;{ zAkyJ{98K(l*F4b%5E9L3j=IlK&!nfg@uwe%&`CB+a0JI1H&`T$3uFPfgyqqrpIIwDwG4Z)>1A;8@#GRrqIgo5D6wqwxU$!qdB@^GjsNiP9R7wtc8L?w z5KV=&&N~2>t&u4FOFO!v8AeKBo(?PbcV^eG?TAz5d82df-u{L4`g$ybY7+|+f~rblH^s;Exz+-CND&AvmhDrK*UE{g_`k(%zbQ5 zj;1qnh8-kC+&I__5jH%lak|g%p_WiNHvKDYj8++_g=MIN0h@9VDlw3TGB%f2jjd(z zcS{R!HRK>f=r!W(qNJ80f=s{9@YX)4Z8=$*?W01#o8%VK#`%3WdU57Q0CFRS`INdFz;dTQ3)}Nx7RaQg@|8zRL$CTVP)MZ*iw7?Iaxw)hN@*ajZdQgB0lo z{Wtop4-HtSQiVa}@)5j@St%r^ypG&7KuW~|;d`R^(PA?o=d5ij9ihQ6Akg?cq7$db zF!Xs#gjIDR)cnEM0P2!lE5?0{yQ#?;$pWKe;feUnyz>qfa?jkT_myPwp}D_OS5^_w z&y3WBrPVn=fMVlL9X!31AB-Xz<*TT>0*PB_i$e0U;XFY4eq9Xq>=)<`Yf=w?_h>0R zfG@c>rH;+PAFYL}J^rHi2p+gk)?7Nuw;B(u5c#HVk@68j0y*_e_aA`rK?Ihg7x!I-dSryOW?;>nxP z%n*9?t%JrIdQFP$wVT+!SGVlaK<57Qz!dd)mjtEfs2o~7wgXu@;5oQb>8-jBI+&)d z`vVm!+Ud3;xe!LvXDA)o`|NefUfIY6NcIS(%rhO3slY1-B=VG(%9Ht^6 zAg7f_XW_x=%nmGz~Y94PHcm1L^o#r=xh313Khm1E}*qomB(N>y&e2ZRu z)4d;6SimHleJkLX%4KhCE!_@jwhQNCKHqv@oZAY-DoRXi3-#*!mrQnICh=Tsk^Z7v z6InHK4#e&cQrSK3C4aG`=VvJCXaH@4S)n98q}}Nz)5m?j_2pFHKzsO(L?kxWHUBVC0Nm)RPu)wXz?Xt;Q-Vcrq(|4DVtmPf$<%00>Cm@b@^WH zY{xqbD&GRu0?b%9GzFfUiN0dQ(SXS(kQ>D7dPM~XX_-MRNwwf+F0xj(mc5|0WNVBB z!=ZP|7*dLU-$a83aZF_)YGGy!gBr{8Vwk%Gtu0_8D9+`Lo0XndDGcj2U$Zd@j)AU3 zT!&*^uC`x9!y<>~(u?!lj?h>=I4{JW0|pk5!{ThRH`)=eXtA|`Nkm~9lpZ1uX1qEu zZ9r-MiD+UAN6zzo_;fEx(vm*k6br=ZDd6I!dw zR5lCNm=S`?0RncoS?YS!QZmdG;s%Uwixt5Z>WT(;a3xofL}>VzODW4x$h9sh9I0Lm zrKOPjkbS8QqmaMb!7@gQUKUBfp*R3_LLYfFt7l3W3GhOu*z*7`4Q#RVRMB4xT!S(M zA&}UiM(w~`+vQZ?et?t|nR2&Rq<V!^V=&TQ%Q{;f;lA)1Ag3>7OvO3v}2E3BF=Klp6un|AjC zO$!u(WiA0pk}qK3lmmYFPGlC$I2fi)n()?$8wlqH4nH*%G5~YhxaW&0aaI9|W`x`o zP_BCmC3z73Dq%x0j8CK-JI(Kkhaece{!OXb~EL zv(RMGveAsrcTzKa)AR~0e(EG=WvJ-~Dq6qPm3u}bIhOgBAAB7m()(aRM1kblwImyr z30uMA2<68&2sv*OERvMoi4>>c7qvi!v?Re{2MT*`(M1OephD8j zay6PJJI4pjG;RNHB>isAG7pNJ#j9&M0Us|qWY$h;7+Ho3?=0M2F2BuuDqjqv;+kM^n!UbK{ydI0h91{hT)++5D2&t)xM=h!P2ahe=4ES@$|6pR4y)4k%^8TF;q;x{SZ@D z4J>exu~fd{Q`Fe;?PD-D^G?)Tb{Ah)Gg<`|VH@PIzG>el;KLz8v-3UYZgy1kmTgUL znfZVaf%7;jkA!j+s)IAJ4A6u}M9IyE!=qUJK5Fo)@q5*Eq9Vana3Wi8Ln&WdS9=2h zK-fhjQ^!$hZMWqYU!qHK8l+5(`f`w}O_Xsxv35|w;uqpgk({3q*i$ zUY))6c%rAHtu_6X{BMRgXOd~g-0p(678mm%*J9DL5y6Q=LRRXDeZDX^m>O+N6tKX8 z{eEbAKtW7d{q6Tw#8Ja_3HXA}7ON*2fyAgw5`Hd?xP;n2&yY|=DWSnU;DN$cWe?FdC!&crAwx-F zMd^k?!D3--VA%%&j!^4eMdYY0IFusdE1fhqf8WQFnR7E8CO~&7!0p#J`GyQ@PM#92 znQpDi86z`uebNM7n7_J!aD1f|p$E~fsHGC5TEJ5wsj2Ms;cK*F z(*>_`C>>3E>tw_W%8@7-pBChqYP?l?F$l~oPXHis)&ND6qTr!-@3`e&%llSqBvd~T z3kt7HSTP`i76`U}2LpBqX&N-xM0&p@hy=kk;D*{m zU#gPc7=E8?%yz%0^P+AfP1p1Yu+1Kp$|C#zYvp7Qp4aX9z5@neu!CjPkg^cDS z6W%VjuMI1dtwy4jT5Rc?+RM|I@=a~5)6}Xds(#%@cQ}|~UcK&8mJDM6_w0nI*c0N` zM5i$ryOt_H(1(B1nddCEFs#rdTmVZ`h*`GSL%pScY1^#W7KrTLY$stc-c$9xgR zTU0Bw8W(gTBAJ&uIV$V%HK6rB{(Ng|2NDi{XEr>8~QP4J3oNJ;5^@k3eMy@bV&lgK`J$COgKlm%qcd;{H74QJTjeD_ z5>nEf-3aUbH3h5(BJ71;3NPq(a43lf59XRY zdR=UGeR{^_CNMuq2wz;g78)zpZ7v0CzcFQTy!JgJNtSMckOyTsEoO1{dI4bIUUb4g zT)ny&{M=H27anzz7|)!*eOTu>U>R)c17shbSh1_L5kD!BG_Dj3IY{!XGZG4SpbLlr zU{saU_?70@L+>zxPr4Ti%f|{9!4{PYw4N#);;>x?G{ryHRPII0RIiBne~lAgkNqB{ zju&8RF84HsuxCnYIl`M$0(%8HB8pdd6cc{Lec*jtmb+0W3V zE<-5CkJ6B1A&yLWTAi?pMhu&|m5MV^af~Ehi-N>invhl%9I#pGC=F$?MQu$TInPDy zH=Y7Zy0+HMy88BAi%aUBLpr*qpQZ%#--L4LfReCR3UhQz6~_vhVfH1tr=~_thUc}7 zf*s%WBd?&WJX7}_-+gi%=(d`Ny%1m7ji592v500H);9~0&nOg+!f<4K`nba1s$*?V5Wl)8;MdE3;ATiov>L9!&-@~Y>cnV|h+3ka(OsP&v!yR8a9F^K+ zq8v(UQrl09@`l$O$`h7eo%HI0Kt(Y59Gqj<_~I6uFLa60B$kUGsbPg0RibaZehTs* zMqmgEx_;UpywL0>%p3g?MoOsSMo$Eya2wmC@o_)X^xANr5<2?x*1;sPeWr!Tp~GWE z)!WWvftoj`KHPBo#B)_EFXwIz-t)n8!`?gMV*1lF(|3#bgxx;-+ug|z`)OPTzTfh~ z#owQleR_0^IaWR0k28I@wRT~t`&V?GpzQJSl47sh@H-AZ${}MN#amQgQP%TME;6st z_joG)cy5wVX9LAbFPX_hpaC$}RA{lvdx;-lAF#av^TAdj)%&-p4gtlp@gw9~2&Ks6ix9@ip?R8BU0BQm1KHQZ%}d1O#51i3oC zk(`~z3ugtZ`87oV&=x_wiYG>)fLs95btpWhpUml!Ob!ow{Grd;N{-lSzm7yPA^9r) zi!phbN^|5-cH-A=6SELT9xPLrC%oCm!b?~H$aywtG-hQXpF7kz6ZjHi0QFqXvyyTk zLD3wqXoix!SaKZOE(kAymr0Y!J!ct-Yk=ieBqCH0su98WDlwl4ts-Om(w{XeX$|n2 zi6=G0FBOu}S1FRpYY@7?`4BBDgKAZVU;xP*Bov7q%B8Fol3pQNCctKcckmN)z3WnYPB8VBP?E!0any$^CiE+$cyd+MqcUJ(_*oA7)P>NvPe`dmzKmqOa0Th;N_lB@@@Yd3-=40JElBvv;#v7`Eu426wXkw;ca zClDD#@LdK=SJEI=IrdNvLX=D67h86Fj=USJ$GO2E0GV2^D9;gS08&Op_0sW$201<#8VMqx~W z*n>$iA?7)c@|P$O^W~)2lFsbmiZ*bf6eZup#1}`*hV#-PnRrwubEJi&(>$LAiPXQH ze$={ZL{dE48I7u}^NSn2>JBFe)lY6uBAq;1q)@^Fq9dt^^L!KOqfxcXFSeiV;+)0m^^GFL@P_m=$~ z=2UO`;>ci1z8Eu~6)*V~1pAl2?^5dh#yz5#^O>Fx|HvI9lJUb6grS@`wD%(#(X!MG zpaoHg3#C><6ySv+4DmS1y>TtL5G|yh3`ge3$B^=KJQ%Kac0_Gp%JDH&kDWJ35@Z07 zJBq@W==|IF|2axhw9t-Pu%fB|K|g|^lo7cF3~`6&OA4|2KhJ6iav46ZatL>#EQFvZ z2Ro8H`&f1@l6kDrR7|Mh#m9HT)Dc@OJA7XGt24f(9sa1=L7 zzzQqAB!Is13sb}haziDHSf%;MvN6zv|E+qosbU9zXoXTpI#D#LEx1T}136swvnFsyMGK%QA0jvn8Mw6&$&!T#DByL-JaRF`$RMXfzx#75W=4lJT@?*}17` z6En#TtL&sGAP26BG$LdLk#Z;N%MSu57p17nH5o#3>qG$St|ailDLR{W*sVzWwoQqG zne!wnVEYO%f}d z=(h1AfG$`9DUbvlOAYcUzO-qQkJ3VTX$NtV0Ysu$bz7NO#V!U)Y-8mq3` zjwEo$2CGB&n1CR$2mds-C=wJnVTv+*R3xa*n-I|$5g2ltt_l6eAvBdJD~J)Lk|Y=i zD-#MLd8(c1I0I!>YnmD49036>y${Yx=?M8nbhu{ktREf`BqnnjHKPi5iHELewvqQG+D ztwGtHZfO&iQ9)(7)#n?Ra-l5mV-My#r(}gz7FwrjJ=YKHi1lfR*38LrF$!$`uBJ-U zAEPW^6){WfK#k(8JfqkIA!La2LJ~w{&xX97Q@gWDwJfYFioSA` zPWlXTV+E5Xh~Q#BeC({o(u;z651Z&NgoxF&VNPsmInQ7R^14okxT|_#yLW5Vr}cMu*S7gikc9J z3UdX|R9d%<2pfyqazqH5^Oi4-JJVpk0GY-K_^?MQJrHB5ry@$w*eXRLfK0sGvo**I zjj5c3lDNT{{{Vr+xFsTpY&J1_Tbnb~WC2sTL)V6ANhoWear6biRhESaJW+hfm^@0V zHPurk0Le<+QneR^m;%mn(My8b^!<+aB!Hp?vPMIuBoKpoCV!-W#h|ThjneC63O{K;AIzu}t&)k=C zVN`%JW(nfEtrE$q=HBjgy0rZkQna#sh1%DB3-MtBCqjv-oQZ7 z%}kTX{obfE;3R=v_x%XZ?T(+CJpK#Qf`SqL?3Wx9QtotJIT;8dGczb#^@E`?u*a=l;hgw(yO(p={)MRBjs3d?w{uCUI?B;WV${wlPs*Q+eh6qJm z)%yi8qlo4_w&#u@3igW>QYZs&B*uLnjLM2Wa?|H_tl#D1U(g8FVO0W=5Ry z|Idg_!Ppsyeh*Je!GhYSD)iWP#60}yHJw8+rBc9;p2a!dKhJc};@YUXM3!`-7JP!2 z)`L-|V62t_!s!}e&C@2CV~2B+l+Kz=5X1Yq=IePk$@J)LMM%Ch@t-4A>51e z+yopOI9pd}4{vPS32KtNI@`dNDy>4kQn)>au99oJ%?{$_ z4)&Ntn~S1)OBQXOsptglz+G5*J;r9^mNadJKHbF!WkWPWmhrOgQG1C zA{ZwKM7Oo)w6=@{i5%>6M=jOZ(V6jS$L^(Z3H~!qnKm+b51N4MfjE%r;86k794I$~ktEB=$>w8^K{@hMBGq zE%y0%7$1T5!O8Yx*OO)+cEMp7a98%;Rd!)7=k3r^lhJl#p06I77s7jY*Ocqg%XHyCiNcE-)JfT^iP?b(A_oQr{+|93}-_8>D~xA=?@ z!Oj2;p~?6dQVl=x5)m|-jF;#w0(Q3zpFkWMk^h>NWqIf5_@NaTj?d505qTQHj528! z6{S|8<@f?d4v`Ofj!z=&c&LEw4xtH-Y4;6{Cyl1>HZpN}rO!{Ihk47Q`H=T{$sX{Z zwP6)fQQltpD}!T_pHLG>-5eM`GK=eVqJx6!hByxq8sxg{2jv6V}HQ|NUm?65IPc{`zObB~q%R z-Z6T^%9fJH2s$79?Lgpl!Q#wc7ihALe6I28!zvR3C7Xbw?*0AmhoCJ5|3b0l$&Sp! z;~c8nQdK>auQSx~hyUpjf6I^mhhWf>qW_L^!Sy=%k^zV$2?P=xsDJ>%gbEijZ0Han zK?wvB5Qy;bBF2mwH*)Og@gvBPB1e)eY4T)4i6~b#ltMs?5-CYkvP9^T;mw*lck<*Y zGiT4BLUl%oA|c7pq%R4mM5^>D)TmOYQmtB&qE(Uuk7n)am8V685~4(K`t@wkvRKh3 z4Xbl4+qiP)(yeRvF5bL)_ww!Q_b=eUC~59=dzL2Q|DkZfR*XwA@#39{4GR{TSg1wH zAKhMNI&q=I$0##{{@l5w=7y0gvu^ELA<)+hPq(anF=y^*e& zNaV+V6L0RkE@_2DRYu8}nqg|=Q?)N#-ElE@>=mmk8JRlzP|BUd+ho7-`a}5Qt5TMq z(4zasFD2Ty?(w{SjRBYuZT<0--*X8n7?Kp4)UpMG3(mDkEt~9A-Ac;UL`o}LlqVrx zQH;?FDIbD(B8n-_C0`Vy)KdmW#?eHYMc$Pr8bYCIwGes^iH2ZG_k9);DK9>>UP1@; zgqV;B^|+9d3E3zX0a1`+i-l4)lo~}A9mJnh{{|MO(UcC2Vhbq*m>8r&Yq>RGLOP1+ zS&k&ZSLR1u@~9%8ecpzUi(Gspg(PEavBf4^A*v`D znfj*C1RrV9sii$J>M25-j3Gs-m?9KKE3I&`CV>PXx~idBRH%ZYcsyqQD#TZ&_ zDn)*y5WohlOI4aEv06}i5=~l2DygC*0SVHmtV&9!pW%wDUyJpS@u8TKuu@Metk}}Z z1|Le%PAgLokVJh|ZDNZ({I;QMfLpNhOPZFo)DD)d*wY3?_C?k#Mp4w_PZ_1y(#`~H zQnuKfTChWgy#YED!6v@g!-YGykn$y&|1Ys)%NFceB*iGcw8KU{ws11re-6RQjt1l^ z+(yXn*-5UG2}PmFx+K0EZ%0vBSa3&DjAL_=FyEUYDg5$VFV9cG8G$4Uljuu56PPtF z+b9wyNV8tLM6kwZY;wS?X_^R3ZrZezxUC57i~q{+$zSj}teKnO+YqiTCz)Za`r$9aB^ zQm9{NtzkE|JpqE3Q69b+&G``Z|0fghZm3VPujNL>Ko2(nOg@^p*cRMDfK42QJ1Xhg zCKLcMjf|m5TH01ZoD#Q%s80$QqSF1ql@X7XVG7?%NcFBaxs9|4d1{K9h1xNOdJynl zHS&x^@)H5-nG0FSnn}yVqoa__XiF|65dm7!Kan-BiLIf@O+?X;-?fhbT5!?kk_Z%g zbjT^yVG@4g1FoD%Es(ZiLbR$i8h7g z(ogyiZ4hrJD-8d=qzQC zf(&{4loO*_8O@X{i$SbTq9hTi%WUBwQn(g>q+l&Fkb(;?`A|`|FbZ;J>qFK$6gkNd zGk31DnVj$tL&WfqE0STIn{Z2mCIu#Ine$bJTIVS6sSs7Miglzk)fQOyD+c0=Rho!s zq%aDh521Z>jkeF>sN)lV~$;)E)pNSImCQ&%3JjY3j4csIG znusT~q7=|_?#mv3+o4GNSx`BuDxs`eCnspKG@wr5l0R)Gv|e(>b=jg68U2t1T$0dH zF_4KDX(81*qRmZ6|KXm<`by!{qk#1oMD6Q&E zNg>gWZX#ngnQNpRTMqU7weGHNP)WOw!zWbyE*Z$KVo&JcKm}3e|w2;rOUd7)*@%^a7Dio;@yh{cyl!2kT1L%-G1qcLa)`? z;ykS2OS!1M|L%BKhX`X|?M4lE9&w3(gZUCt*n?jCYKJe->p}HOceQeq#3+2p1w{d@ zZ0to7gj^!90JouQwfF@WLZx0Vl7Sue=$A@gB4UJbB5^HhZz9_;oIechCPE+K*mlcLar1+M=IogjAF;!-nFh-5uj|W<^&lK=3J>Y zxDA}B|Dfo`gD4jf@E}T(Le}2g=)WzEUuB5s{<0Kjdz3*{>}Z9BqR=20c^gq&F^yR} z!pvE2L{I;_mlo>g3M4XY(}eys0#oH`ul1{7H*MOtUxvMkunOARwjH&J^=2-Tq86d% z_KQ>%Z~g!|XNM~}#*k^jG}AmVQlzdfA96TE)wo1u3|<$DD_olS!=Z#aZbAY)h1AyW zcl9mHrE=2`htwD7lSGK^2yl=w%r{h9XvZ&;FyZ2H5GtJ!*n`GCfiwvUmqFJ;EnKlV zbSro1G%KB;aI5RlY9fg^0f|j*r_e!Bod7SN!YCXUDrdGr3ToRzbX5u~dQIW+Z&nE3 z|Kmp82FcO4RazG*e%Q6FOF_4-5bS7U0uePXva~E|kuBOV!M|$+Lq*?$Bo6mCf!QNw zqopw!LS-#hXj`6JaLN|K`$O+OC{#sBF7hJk54~R5ip*bvAc@Zk!A3#7jkk#;3|}uU zT>eirKYw3ZXw8+>fs{}ED1Le8`T zCy)Z3<%|hkBNupML-d{CU?NGB%LJ}Ok%8YM{?;5D<)T3 zVI5Lf*GshH@!gAdRgOF08!Ki`op8}ef}|$CBwtKV2p$b=TwdwyN0q3{{`5=Eu*)V; zMCo`p|U>5*k#AMuu zgRsM8b)XV>PN%E_0kj#QAddvVT|JP1lFU%Am0rIfj8-zFU>VUysD!&Ln^ywV@sL9I zG=>(e!!Kl|*Z5d8Dny?Bq8QpiH-XCx^_B!>5^cR%*74${yoq6E|4x*g5UD8yGXddd zT*L#0ibNa)hV;u_Ud*uBkWNw&RveFOW@a!Z8}jIhVZ7O%)el_Ure-okZ@rYM1sqH! zXI#Kdl$k_M2+yRgA1M@_JduGWu52t%OV6l?&r*$a&ciWFs$2PIc4JX@wE#4241J5Z;k zfDBBaMCa5aSoRT(_2O*>;&vv=q2xsQUBorEjs%3L)`5%3u}*y+N_o&D&M5>z>IyL( zoJYu#8af0fC4~1$jvOsec+KZ_9!lkzAT_qm5&5X`0R>t*|3vNuokGlFtW3e3)n`tG z-&q8Ka$adhz(qCH#G5G!sCmdiq={`Ii&02H0$@l9h1FPKVMB18D;(b(Cc)B}oMi2i zA!SJe4T-Ys&*zv3h1iM@t*Jp$1(*-_)%nu65T9}iX8ik3>rV_wKme66KmLUZOh#20QoVZMm#6%)41iRP^ zx?m}|ZXzF{#AzL$cV(Ea#2wKf3M=S}+YKALdL99|{{p-=4k_5nr3@LKk=a5}8LKRc zmu^sAY0Ahkq^#M4S2dKQ)&(-MiZ7WejWG}s(#xR$-SOSTYW+%szL#Sj$|fw>eU3za z?N^38Ca)+2_=6wehU5vlMEP#`0b@?JTutThozE4-o<6ptF&&iZ6fngp$4!6+`hUslv; zxV~g$JkRF%58!oa7`_Yy#sr11OV;M09FdOQ>Xx7k8rCIPhZGxEJy@)?#LLi&a3RDP z+*`piCPO$^W{BP4>XxUiP+a(w$^DHTou#=5|5n{5*yr3t|FH|byjq9lnd#vzju;F9 zC>wWV$1h@<_!SI)hzP>a%Yzln4h^nuEkxOX-Ql!DlRcKJB~b~n%?;AZ!|{Gb z_U;evqL-E_%=^CE38gLn3I{^moL4dgD>&3x@J-h7AD(61y*7ol6fW|_Myz;FIqjvP z4lqKHLD@8?RKlCz)e;f`px^z?O)yP4k&=j95Aw9=VOSB=suL@`RlD96o*_gt1(Vp7 zT&ljn5Lw1d@|6MpV1BU;NAu4ReU?bmU8P z-vkbs9BFYv4B6UTkul2XNEjvB&M5NO4qIjryh-rF`dUQ};H!)Q3Of{zrg3^Qh139G zS}h8?S+T8zOpEaG5caPjpN0C3#w8AfS`crY02}y=*Q$Ukj5*Ji5{~MjO=Q^)*Y+y6yowA+QM27bBL#Z=8=ktZ2rRuFj zQ>e2%15-n|UN9STJF`hZ0~0}`ZP3XSo5Gx^he@zIiEB? zfAmXWk+GS_wBoX7CQY+Fgi#`AOEZz%?lUc+$7r&V7-g4`#B_Jl+UHf#^ICjLm|KsvVwp)Mpg|M_#6VZ@>YLMt^XKBkCY6M%41Yw|RTU;(f zcxo6W1#KwxPp|fETg5Y{v|Zq~8DchQ5BEtph)m^0eTB=PMpK%MBypeBh_KdkPd9Zp zn^6qvSwt>XF9>45U-JkmQdf6o7zKv3c6FaOOqw)$gJp6@Q+uzs(g4w5!#90@)(r`_ zT*RQCn73@)NqzGwfB(0DgUEajxPc!yf+x6wa7GYW1z(@GNyIgSlkvDbI9;4FaMPqt z1UOgXw}OB8P*ewGdxfW1xN};Cr`#wIbM!^awO})cWly$9#3+iNcv8^#iI_Nu3xUcc19^j{k)ez)kRhL~0bcbIAE&^8}Z3ge`sF8P2#*P{o~(P@wd$ zVx5bc%LaC@`E#(XWBY2NXu+a6kX#QDqi57{U(jFsM@{Gnco-3CFWQ~ODpwv0X~WSw zd5c;bpd{Er?%?uS70M<|K~P<9Rs&F@=TL>(dSA+~mMz*gwZuhjfwl0I%t*m1bS{`b z1fwg;ql3#3ZHc$kY0oqWsK>KUH+zF13ale5T1$tAEmdMb2BL@iN}O|_mlpuqO-)SL zYsnt2hiq5;|0|K@#%YMyNzNXP=^74^#7!g~D>zdwLb|4OaJlEqB)CE(v3N^JFP*ax z+#yWA_)44{YV9=F-?&Ghs3u34yT5}(^4UU`F$mKX7Q(ZT>2U%V6_0V?R^o~~%L_#! zdxTC7FDo3?o)EQ7Bjvk5$|gzcS_}E79(zJ448`G_nppKre-peZ(UCWX_xZemjQ6C` z?*@GHYFCGH1U-~|sOoAK(`c_YjeG{uXNhw+1SwQdY(~wxkU>-5#-yDI zyhQna+Wnr)PzeFON2n?p91f~zm$E>c8WMTSBRVH~gzThA?JT^D){Z1$>Y;Z9IVe{@ zMb|B7|3rOpT`kO>uYRp%TZoS}UVbFs7}Iq^B;)%={)?&4nSj z5Yb4`Fjt_ZcX(;b=xUUILmb41^iYGW%fH@# z|I8Gp2Qd=BO5o|zgA^qcl}Vu0Nt%+#klG?;tVps03EVt7*5DRWT?r_$n=)u&!-o+k zR=k*TW5{ zgC%vd2H)2-^MkIN6Ck;zJWok-r;s93A8ODo+7;_;l>OqGsktqlGY!G_awD!k<2E6M zlv-M0O$sgMdM!4Cq-b!p_zr5v9x3`GAc|2&nTwU_7V{~y#qL9Jz|Ih44XWX2|3vRQ zo;W-Wy}5?cA~n-UvB$R7q_Yvep;%hbAl2p~B_f*SBgK~O;ww>-nxr7bA6vKsv9dAA zEYr+0(M(g#H4n4P#8GfEtiP8yqN*S%+OfqR3HAKtArm!er5-(PA!UO4q>y9`?KYWW zGbIX&ViQ3LmFpl@24#f|cL?1gfhe}Rl8ij_OHRF5Hxl9aUYiaH}>(+vG~6o~knfjw(WoG+S7a zpgzRv?8w}Mw0M@*LV@LV)mApBkF+h+?bDv4Ad0mVQo$9sLre+fio|Y>|BY#bTSF?h z&H!1#iLW+2(pJ7yNs-_}Ni6oMj1E(+#~*(-CMb$kxN3#ab~4LIig8p$wkwKGRJBm0 zG@e3%;z-=2mUf6$xTAxTpx2gq+L%rWfgW})At_q1hp6?~j9Ticsjk}Us};NK#l`yD zY%{+YvW2Z$4Uz=YRw5+87EXR8V3b(>dDj*eUlkPXqSgkF6_Z1x zO=?A(6RwU%0rUOF{64RX^jr#DAP5~pvAB=Y@A zbnL%Y7>oU&QT%B|uDBA4Lbb(tlr3`oCLM2J0@(5Ap-mc|`=AI*|9aaMF2*%TM8{QP zGWf(?yiGCf4H~6Z-`S~Uu2K5oLMf7XC&POwMCr#BS0XIxNGUea4()ya>7?!KT5&hE zok|n6FdWkYIGph)!FxbUNUn6oDJLaFAPw73LQ>U=tznIW9rWM_K^Q{LXv{H$u?Uq4 zHHB7%%Wc|moNL+r;V)JkAegmy1}R)gAPVU+NJ`KMqz*~J zBJ4nj8>d4RsC`5y{Yio(`c=Yi9V7};v{;8E^2R7gYG?6^|CArhbsul~y8B6TwoaD)+koI6jJcBl&4UP(QDv2in>Oso0f%G~w`If76 zR*FPsk1?~83{-Gu%U^+%Lk3C0DB4j`gaEZI*Lg_W{|r*m3FOL(YT=25bXSWjnS~)E zvfcI=)4iLvhIUTd0xK#yl%Dj101b?v;h0)0h6Xi{EHNAbrf}5jL?Weiqn##_We_s7 z;-go6;3CJcIH%%ek&&a_Ur#zt#V(eyjpbk!FGv}I_{3LJ+14o=rn|U|s&oXNDK|a|B0O~6(O}GE@}--qZrarX9VB?Ru*+j zgURNoPs>X^V&a!V{p>CpX%_yh_{l-aXB^m+u47T0Vim7gGFmGW?nr^uktC0C%M?|! z(7LPSx#CKZv_&bn!#ttZW?E#lK9qHL~K$E%52wo(gDa6t>KaK~XUXAkVX z7&Bz5M>Abvlm$XX6gV+!Kd?*yyxNMS>T#PtVvI~dv*cK7DFyA`W+hJ0Zk>q%4u#BD zqC$d+i#TKPt6?2$6%zziKPeM*%QG(h|N3S%AG$07#6XXijcZFrK~S&fLXij*kR6T; z3RGIvj^hA_+Q)-a#iB_Xl$PN`Ig}4V%A?=tS_F*^3`(LKJy96&#nLT-hAz>2x7 zfgW_Bcd(pfl7RTs$0HB{000tTx=%Ypo45AVApFeL)gPCa^2xZ&96|zH=GM}DvZRpp znCE*;RGqdm)gVr#2)znzlLgj9{{q=jiCXw$B83p()2(QOKB?V#|5Z16^6jKO-7E+Y=VEYOo8DUMKj6(|QjpS`|T^i}k3zZ~XKmAjHR2!8W|C)d_ zC6N5d65CB)3aBsUA~4J^H3(;tT%~}xqSv5f#8Ao=IKk#1jxms^U(_hOb^;_K1ujSd zN>arh*3UjbLsaNyv>I>={~Tu`qDjWyBcqJtA!tX}^r}YCVlsAZ%Nk>7PA#QQMF|px zB<2Z0yarA-#vYOdG{g*S%g2nz!R(a$ZyLhn%UJGyCA zPUXv>?+no}4aq6)C{Fm;Lh%p+R7_^ML`}vZY6`juRMe*LScO9-r5=2t6iT6bu%l_% zqAe04Q06dzXh$GGqaK{56h`nc!0!-W4<~MgCaffYfDAAEg0JjhRZ4;RctU69XA>i9 zBT&j8O2JdeB!2*HGWtyS7ANF5trf@tSq_nIGDvqct2yk*1(inkT485YLVP%9up|Tg zFvHv+V|ARSI9S0K|E34ENMUb;uWu}+ConC&>g=IR23#nF@7ku2)W%Bw414IsA6$V9 zNCObzurMmIovz9u!V0UjKuTsp4f(Mj(XhE%gM=pIaf)I*4vQ(s!Znzv?e=ky^n;E% zEFlGoA&7!LOoR-W=uc)UI@n@7*5V>G;csYXN?s+iJQ6$#qCgNvBp`_8LT|NzCLdW2 zZEkKR8G_}8#w3hILJ-m~ zfP#F~sU%iJm2!m?W)dtU%PdXehysNzN-HjL zi4^Rp6}T;j{}i%lBw$ij#0(#(Lta8B(goqv2qh|FVIa^SAu}>rtn13j86V^7@@ece z;_5a+GYIv%ruQRD6>wqRRv2HVQlQmCs zH%*f^eKR4zif$z1K+dc(UQ?`cB{p%B>~J$51$WjT-n9JeJ!dw90XI3(_Hg6*` zj!I4_KTqf*A|~Ust4;<~C?aNCnngi>4p;KiE-VzJo(U`%)G=AILJ=l0;fYKx5Zg2m zG2Dc;|9A>7JXAqX1Z}b@Xky5rC=f!WX+tg4rz*5Eb}eZdBU`qmvwkfqA|^lIh+BZv z;cPTTi?l%zVqp?AG0ae9CPXf-tNh?|KCv`Q9m~bAhAa7S>F*F{B_0QWJz&BC$}c zrCxStdA4Uk=-wpNXTM2%$^x3q#M@$4F%*_mgVs;&Bv6GmYNd8+p%v|@R!i~KgDfXr zMMz(-_G`g5Y;{6S#a2E+)@sgnoYJ;z*|u%n_HE%dZsm4v>9%Ty0wh2WW^EQI|1VWz zxphsFmS7pvXzR9c4R=quc3-#9T(9O%9hY%e%xlGVGqmk+E%$O^%~44yLRI2dZ|*Rh zE;1rDE6P$QA~jNP^jMd6AThUfUH5fimnQ(=I~^8;61OC4hiZ8C7Zhb|=hlP?XVl|CV!oH+!{rdtq%<>>*E<%+hwEazBr} zc;aE~RZWzGOAMo~_*QX4mV4!Qe(5)aQpJ``3tWzibopp?JGYCrKoWlKSBbZ8KUY%4 zWH7)IiS&{+G;SyQW0y`MXi>LS3799MfJf_hgE_c^r{-^@z){A)WW;xT{~?1kwuLv( zWKv2vDEcfWYJzN-ZAOwd(!i#=H^H58}L=aLHWk8O2(8gG{IN>-r4LHmTIH06H z+;~RZ%|sMM6Cfnn&;>nkSWu{kjQ$UPeK?Q>d5|X$cS^xTSZ+^7k5H80?TTcX00)^U z#K&Bzs78xad;xm|Vv$I}#>PXFWx`4zInGYRuqubsSizGKQ6_3pZA67e42uh_WKd+P z?R?A@@Wm68g%n(YZ@42LeGCxuB%wr71qu0>k(rS1H|C1s;|QRZ|7^h>_>LhYA~CmP z)QE;P0O?+u&r z9Jn|}f#u3TitTJ7^W@Xofm%AkjWeoAHNhW}Fn@<7?IH;_FvVBgttF{Km(gXYi7?bAyy@ia*qHO09M+86yhlg zXom~fE>}jjRwj<4)q1UWH<0j0Y*x!B$a$AACJCm+E#xdP|0W@loTwc*K)-+{BgVRV zZsH}y!brnVFw*Q_-VH-|#6JCV^N&6Z%1eCIY1P3EMVfrje;H!0K1#2`U=K z1LY`ydwPkz0>HBL#kWe`8XQV(3c&KQf26i-&C=_6?i%d|==&CscSw`?9eCM05 zgg!t*W*FtEG6j!)6)wPPRbq_TVoAEL&DsX!6Pn|NV|YSxIVc{6Z2E$B&bvx#WoVWqsnKPYE2L&^JkI5OXOp6y znG3ZRh5Q8LcG!Z9XJ4%NR??su#pFen=s2L5`tPRCejJ?Lh`K@R67p+ zk_y4XmtMrqs;DS3Fd=l;AjYLt6k@=FMcSnByYW0vaAJzqcFtve)+6(87|3enenWm99xu@n6^D%j`=trxiebN+UwE_^68Qwx>D1RW@vYGZU$-lfS3*mG?UX z_w9)b#B-mL4)(48`d4hmTVL=VZd=oqQuEeI!#|@H)i4IPRb%c@ajpx&Se7gn`{6(S zB~yp7H24aIuXNAO z4(xbvA_0*PF>X{ykR(Qs7bR#S|3jcvyH>5pNJ)_7BFLRQd;0tdG^o&_M2i|diZrRx zrA(VTeF`Y<;ow%&?suDb5ZYp=fk3T&{#4ohsY#vY4ovdS*YY_rZj3vIO0 zPD^dI)?SP4ZVhG2|82M4@&?|w;*OiDho9wk61nQG%kEU+whM2(zn)7OWIJ&*)?xN~ zC~v?1{yUUF?*dG4!C3WvKMZldQfLuz#TIKDQ4~=~5rqU&c+6GDN+__} ziV{RYGD`<_+%W-BY+?&31SoM5!x!I-^J$XQVvj%d*kcP!X-3gXDO<4T@LL2VJrpT3 z<+solthDlR6r{|Qb=MC0UJO~mR@|fW6RP)p>1_N zY$!3|;ijMN|Cbi**usg&V{f6!22zkxk4;i+!b&}@a58~bQD~vb>sm-adU(N$t;qzW zO9A`Xe>0uYMFJ7zG)*D>uF1>^Nuh~WT8u(KJ7i4peau^&zsUwlY>RsP?(4NlJ)}&K z#MHL5a=%TjEG|VW_4q>o^ASL5w%{DlHUW`Q)B=B;BSk`-R=}WLWMDm63n^-`1v0eb zXa&&%D{4_Z0&Jodi=&-Ad_j{glEZGkm!-Nuf41m?NFZ- z0#}bV|7<}EGGhhtN+QEJ%5f-TXay^hu!XOEObZK~f?ZfK1_G$A79YbSD{L`^xDbFH z7~B9U?7;;;PC?t%MgIyFtF#;?hB6y5R)viW>DKKUX?Wn~ZUkS^f zB*bb2-~<5zhd?}j2SIAp#WaO%#GDlU_GSC zqY>^9XiT+5Q=fXjg|wn_P|aLNNEW#HDS;sBEFR%h3f9AUQ3{>A+z~}N0ZrJ06H|x+ zD>g_vP1K_le{|8b`7sPT*3N-zsLD*rB9?GSE z1tHx!>M=@?fKGw?EJ#6XF$I){b+j?uUQ7xyweXOlfQkGX<5ZW*pz81-I&{Mt*)hNl z;x?y@dD&?lTg~7`K)A#mu5qjRp_koHdA%K>`8!~5r7Ib|6?a< zziT=T?vE9#Ek!5S=S){{kZ)icAUpig3N9#QlJJ$U?f$7d$A(2K*WoXDaz};`3KAjl zv*#9CYLHMCBy?UJ;2}c`-Uzo(60Bf{L&-2TvB?as0)Z|6&R7dTUXTE16JhwsaKU=G zA(7%!A?GB^q;1;kWU$>r$`%Y@ZrVb_Jd;Qg{6~iKWfdY)a3wmGB;h0%jK7=sC*$Z+ zL@oHUAZ0Tj5(r2W1#;nU-&SJmcFJswCJW48Q;=>IXWG(bMY+fk5gGQlTgK@lI^+IoSrDh$BuWb* z+4R`$ut_h*BPkhR8uR866%l<5N^DF-3Qv)*%YE`u(ZY52I?Vnl)Zz)kO4~s4`JjYe zDBHQb-E~;g@&7k^Vgok1K|zUugecw8wZUL)FuJ>>8lzHhYF`)`Y?Dh;?ncsIFhOFORq;}&B7iYoR%IJuwhagLYSi0G z)(nEjBouhqq$@R)Y8<33W=x_7K^8>{uDn2RDW%O)EsZ7-Q|{OdbvXL7-Vq%%Nx}<_ zbMI_X2Z$2mRJ2mLZzy%;47`GidLV-<#z2frDo#6fL4CE<`pkh&d_~R@d-FqciZTPo z5UpzsB9A4EVyr479qOlsUpdGM7cAv>#X}DGoH0 zJ75HLtLy&@#^6kYH(Nkjxw_iwQuIEmaDLFSmNLDl+R==;daLncO(J4xi##S6!N|=VyunW+TjhK+R`pssQw@j*P90ww^;be-0wlOk9vEZM&wpVWWjaeT;GV7$ysl3D)wzOJ|dUcx!vl00x z5Tv=N*aR+}29thOnZ7|B73iect*-3B?Y%<;eSZQ4M*3x1#m;nHq}~c$ z>W{i`WUZDT_~;&0ro7O!m-zvG2rx)%Ge3zsaMoErlmpQVuEz1p;$A#3qVVI*3lIz-2b! zDKpT0SI&hvN@_*!+YtC%6hWN_km1ML@Jh%8Wo3aFcrs$mn#{x60iHxAJ#2Sm-yuCa zJ66-0S5@rCCJQ9ZfS%{ifIAnJ6(HBr#1N&)AgN8L zc=a~e75C^iL<+v60{<-&3)N!%lXQ^>sAiPV3<$QyI3}^uiwmS{5+W715iN`o{kz2k zQ90C^0pl@V-_(lAFlv^f$fQ$4RNgEv$0H^{%8ZakP>D4mm6U>{-`IGnGx@bf8S5HS zHF54Kr8XzN4;Tj$&WR)o=iztM8R<31+J>~wd*x8uUEf&Tlr23)ujHupG{AXzGw+rcVwenF;5hkr`F8*jm~CIpp59 zd}gl}F9@fzUy)Xp4!l=UYEI`j>$rC&o6Z}D1U-h*0a54I?hWmdZ_w4wXpe6}HB2!~ z8$&g9dtUFP^)ztFL0j%`%WXEbs;33rhxkC^{bcD9wIY4=Vd{0@6Cb@8CUX;v-tZ&0 zVs$=gCr<8=(eBcA=lXJtw}suUzl^aH{yG*2EVD+v-x@=jc4~S;1Ep%Aa#MqTaiByH zT}_)2?H{d+WM*}lhSBPTSM*N56Kg?~O+uxmcjp?GlG$oL7s#^vGTv_TTV|mkVTE)z z#uT%4NON(fG|363|595g?qY!MS~kCvj4(hAkR|G2mnUchv{N{={beRPk9;}svGshQaSx-Bw8l%k~#br6Q6Y;Kkev9<8y zX@bLI*{-{p@cWeyV;X<|Z1;r`G3k`(sRuag`u0ofzMy9=UY3ruV2JB)jqxxx(Dj-G zM~98Oc=bPO;FaDHXjhtT6J-E;#0A2N#d=A*Xa;#FT09;6=>fh9*!K$A%U$C^j?1J9 z1F;=ucKN_)_3`0OsI;_WfU>uAb6Bye^bXUV9ooWqwVO|I!yw5fmi1DFu2-@kW0f6N z)87?zJEJVD#!>DTujqri3S(6cT3$nq8aIMF)rtcl{YZuEF3m0O_EIAWW}pHoR3J=J zL0V!!L+YSZ?QU!dQMTL2ApN6Vm2`F{lIZK$4~w>X1+VRlrTcRjbwn*gPmB2IJNaXC zUXXSkq2E#RBiV|XqX%#7<5!eo8vPpJH=@ebNul-9Z-HBSy7GF@m|49XXuBl6SAR$~ z?muR$l?2(bW^FTy$IFH5a{TTMTFt9w< zd34H^PozS&1s>UFL}`K(n#>0xG zLKHksnn3iTcgKh}nemQ1P-{X%LlPs?BwELk0=ZPMcObO&aMpp9#V)fqv*gXw)&)j^n0 z4r8#>3=BiifoqYGBwYuw<_sGxq?qiy{6kEiRHR@L1=wKhY4>6IVov9gz|x17HvCf! zsd|B;8!l^n_frSe%HG>Sc%i*5_WjGUxQI4do5mfIi3!linAdIdN!sM~4iZy4#M0ey zRH_*SP0AX5r7&r7o9Z*wC?#^7a$;20u`6F;e$j5r7`^u3BxSCY&U-0_fo?Xlj#K2q zLsBE^t3Mrec0sx!T@9}p@bhFAitd~3Tm-cdjBe(mDczg~+}toF=7Ul)u|c1Z)1&HV zq&w(flwvFI*xdo;=dsa7EcQ@@wo$1?l_Zb?Y7ci~#1Ra1cCCvBV~d_w`vh(LeyuzZ zPFGgsDgBP^W!ClVgLy*`HZ&Td5}wFnYnEu)WnLO(|NJB?i#G$%2=>twKNqzU?^giQ zgPMguG!innx{{<;tb1HFzqs9$%u@)xWO=fa_3|`>OtPhPMzMMBcQlBcHaAFHjc=Ax zi2hANBw3PigA(Dp!&ar4ZL54ErI6m1KJO0^{bY)hyC=We?W;CtE|7m@+mSiF>mYM>WBGFftig@op zZT0+&YY*(1Y+bvp>vYx_B>&Fv_$$3H{fx<4_M2_FSdBECI`SVr7ihOE%VHK-vkVp+ zd4SsWqPbS*F{Ip#wbc+v$Eh%;`fEI%@dP*Rfjfs~f9MF4WhyQd9g2qAf~CiYhwUg_ zSEL|sCY@>Q8fM=#A36Nm0zVA0cwf7!9*%xkmrtE2 zpZZGp)ZR_3N z1F!}*1Sl}+GzQXtr`ecz?(jD^RAZudLF0&>{`rFLIwwn5cJh(RabVUCcqA2!% z-!`Na)F`@zZ*@yD?h%viQRutGEICTdf)#n;-)}1goJ&1_V<&E>SqouQVfhBYYE{uN zd&FKdOfWJYMxBPA_10;)@N}B|_!ja`A52rt{82|wV)kb8xP0~ObjhFc5dc?ngC7vY zCB7?(nKM3fs6KR6)cQmB8edIBBO4s7Q^z=DjaNm79S6vjN#d(X7mG?&tgl`(6%bwQ z&N}}-f(FYe{D#Nxd02_wYJ^%E{P^Qhb!$*n+SP0xTq;V2{zFKgm(RUcn+q)pxmKEI z9KJoEh}(=2!#xBfz`H^8Pf{7X`hkMDnUSYeQyT>{$~BWO+myrtp7hKM5dS@wr+feQ z;res|Q+qXb>x%vT--R1~>Lve^+Dq{Pv2_2ayYimP#4O7{%#QNP5-yvJ8^R4K=>ULh z7@et)ttto#fT_ARZn2>2GU+6BGKdBtRJ0EQI)B(}W4SfcAZBwrP`sdVz2oZKu5PZF z(-gsMeh*$K7x-;w73D}04dv0{Hpf@0VFA2R03jbYJiN^m?n4oFs)ZQ`?mXj`MXVTG?13xa>Zw(9#{rR%FOUx zPrEfJkDtIAJwod!XwjR=?SIb6l)J?Q7jGI)hH{qjkLI=7&j4U|%dOs@d#!f`e&74> z{_}o1{B}L0MUWV|RU7%x<>UHq|1Yy;1{K!No%;rt+Ppu1{BRk3yfyf}HvIap$L}Be ziw!OtAOD75bVUzW*lhfZy!w6i{qx4g^;05JCLa|NO37mt0HaZ(=qXFUu_^^G-bW2A z+++Kwx{5$$zl=kLzB$`@2hpoqxFXthkt~xG-vqf z4{fe%cTpXl6v>}DHw)ny2zgX`x9+)VNH4>ii`CZY^#~dcF`ft?+xoe^QC~ufKun78M?$L95Bov7>`j0Sjd# zY$dRk{v*g(Q4yW_cA+yo67le_(E>t(b8!JF^T>G7NWm+MNZ-zC(fAtap}B}g`<9)d zt^JPzO>AO;L8fLl&(2oNQWlL@ZSt6x%e^R5UQTAOXttqZQel<3_uJB< zBxI!hIORJm0}@ajR=Y!iGFD-q+hjflZa4+oL|)dh+Jx)^b2pv>rDZo_=->R>jAFjC zvVq}r&fQGB-Jbg?f$4XRjGa93%@GLM-f-T=Mom~E)n<mGuL6=^g+u7ldyARqgANQOrg?qobJiqi-=_O^2@adzJx$+rc zG>PyXx*dGwJHne2;WsASapgB5u^iz)rSR*@e@2}(GGI9s{s;ED|u z#s5InZv0!Z8&vHcsn7rPZ%tK*{|i;K9BKUjLe(DY6*ZUrZ&5Wleh{p+QVXPo6S5i$ zD9$WLfRvnM105GDm8oG7)q$TE<7_}YgRu7hGpL%Enc5-vf1qkMQ$3Z(`2+W~WaK!% zBQh2X{&)WEe^9j>|Mq{OYBIr`1^*LO`;UKXYwgW(S9&5C2l0f-I4unLmk_W@4HFy_!fAWGy6Kom0ou+vH#o;mJpMW8W zA%)vchMQN+jw=2A{W&IzSyPo%eYD$dmZ>ucnc-+ywVMM>C2`haOm)i;RBA^i=Wzp} zbgZ6lx(Ld?OKug~9v?$9a%^~vjZM+c6`zaZ_!k_D8Qh9po`FEgUrMn*flkE9WA~g1 zx%^J)5%=`-_A8`U?eD$}%LEG*_`In8T3y>-JsVd)bS-pH+giUo64lcZQQL}h!N+3qUH5IrbuiO6mF@FDPxa64 zHQ%}qZ)w)4eW!txHGK$^e;B;p9mdmaV%HV62+Zx@ znbLb~Aora~a&jw+gI=)GOU$-RAtkW zzGFSrKx-!jyApyOERyEuXrZwwv$f~-B=2MP+htkv6q&dXDC|A;pCY}3=M23KHQj$) z>X+*;RjZWZJ5=%q^lpl(HJ9g3?T8qjD9r3?WI3_;@MHd5_wsbaVs)gy+Hflz*$4X)9}K>4U2#D#ps?lq`gHEQ%{x5 zIIrkNddb?IoPYsEfP1DrzeOMpFZ|enZc8=5H%@^pg$5LDl6~D8hKNY) zVEF0toMg4+*vg%JZm%bi`|D)>qb3AwZ%u=*f%AQY1p{JKQ?VLehqVxhwNqbToemkn zleTL{H@~y@ZOz4nCt(wn3oMCqb?^*AjtL>EuueWt`1KFAG*bLqG)}Gx~cW z>-qw6KcUZ4=kArYQl0-p6Csa}xN8C?1@8auK2D0m#q3+V76!LYpMEp1I0Ws1ivVKz zjn=<(oty|k*v6G&B7GxM&(_b?hBI}1q2^=DF{3&umh;?U1E7w%E>QaL!)rgGO# z`PDPNz=Ox;U;H_(P@%3yB)}F*Zk<)8iU}CtlNZWg%qpA(e9g=q>%+@Rs+nYc)h!vj zRquW#Wfqx)6alj}KWS59{8?>ap3hL7wiDE|o@hSp&MnmCz~$+b$ljmKFff=^A4Oe@ zabDAOr5VVELIn-}C9{=+&SUGFRvbXG%Xk54(bdBdQEhR3a;4mn4a8>>RKuL9zfN`&C^zzba}gKol>Fn&-Wao4dEg>rVH-} zTfa98QYAkoR$tls8pq*8|IM}4qA;-eCY!L6YtEQt>}T%CS@|-0*VPoP&tlpcqwm`9 zt4XKgLEL45N#+VGIPtuk*XDJCQDQA4#J|qp(y28@|3#LcJy{%uk8N~*8r+^zHh z-OJsklu3pqPD*wZy^`OL`=Ol8i@`if=;oF^4;Gnk-!7AG3qBRIOI`=r3> zzLQZqU(-(myoIv}YrUn%# zeZHD`M)jv%^czLTil^&2n;c)%3!TwBlrY85WpxOQU3`%2METWn$6< zMX>-hv*+u7`L|PT^}&+|*8k<-wl^lg5AAPX{&)X&^3Yk~a&=}2o=^%ua<{ngZ>QSZ zJO1O}UcTR?>G*&8x2&GY-){U{VfFsJ6_!}*!W;kgZ>Da_z{V9#XD>IyWO}GP&ouX! z-pIDk809bWa1vRl`O$H*1;;~@H?qZabw3#3ueQy{yotZv#sirEJHTt?JvAdM+~VH{ z+X8PH%N&$mKA5*OYkt!;6+CtF;_~XV3T?N0`~B0B+ke047ScP~`v zpH*A@{c1Yhz0@&vRv-TNz?Sya%CP=I?aU#DeRp_EKbVv({>3tKD3KD`PjVhL@NwfrJI~|&dn6NgBI4G0@@ujrGErwT zt?|w^V7}oA#CMt=BA z&sd@xM;xUW9Lg!i48`&S44(i6xXeod|HzqWNrNe689!k;e6pkY+1Sp4W7Nc>gf7h7 zqA9xG-Q`?~so;*542hM^jg{|=Rs6sCw;HB#S|M>dY(Bqo;`CPH6zya6O@(#YFh-^r zbO^>Y7h~Ruv0TAeUtnxqZ4qqokDJUKO>dz>;)BHE-7gq*Md{%PB9oc;0Mi6Y>DZtV z7A1T_UWR|fMM4x?;vX&G{Qtyt0sp~u|C0kBk_P-QTvvtU|8EXVGx~qafl#6UstzP)=Kp2={kwCl8b-D_Mz$BjuQ?d zdXcqv`gyZI<@&C{o2&J2>@@}dR}LJ{B0B$ladNOR{r2t0O8~JfHj0Gabt8&`$8j?T zBvxq~OQ$5TrAl-2+7ZJ@7E&C~&Y!rIz!CGsE)kOEY9D?3MTl*JKyznFqDbF`eUjLm zY-uv{S}t#z;L=EGiozd(oo6>QK06s?e})kxYpcr;+^FjQe;z8JyICk_!QE`M`zl|K zY0SP;u1z*{FVCS|a4+AvdX>MxwQt|K(0d8``MLj|;OCpBl+}ALLrA{56g_2ueJPIR z7pg3R@t6-7_Rsw&Ge!`!RO#Fq1w8EC3nyIL7wpYbz{=whb^6I2OiCHWV&9hEBdcI z+m{~K)U~YB9C&qXKC!6l94UeAV-MP2y(HvHCoPnHTe`F^pQuZD@%n0rd_NHOz{l|| zAYJAm@hM4%w>AkS-uoRLj@-MHQ=oCZjEvtC)%P{e6+1+MVx=Ep;*_cTJj-YLg%9X{UC{0KrTO*4}PDGXEt8^N$X%IWvRK12FS zjimcu(=oLfXHN=ZQps>A{_TRq095B)#Bbik$8R+E8Vq2Hb{UEN8bvRMO}`hh9XyD_7akt?=L z?!eB@Mg357+XNAvCLmHU9codTAhIS#d?jZPIwmnPhc;GAS@8_z9{9j=jqeq#1w9Pq zwKRW&XT`u*`tG#n#*pBT`+jXbx=V8OpDhjs1mtf>MbS@?BXa)4`NGR!d=SEb(;#_mwC8T$V z83Zs$wOQOusN+#W!>Y!daWU@`nS2z*8|PSs{qN$qp+*v35+gmD;zJdj;^#WQ^KL#YpqmgS#M6(>Fa(B~xj%4IWaSk79g6PdKZ%hzQn5V*R!U*0w6R6fwP`VlX|sG;(bO*8A+42Fq7_JjD{Vh$cKRiSOq6^ zrR2_XzrF(SC%#I+08F^36)8!cO!~oGNoQyQ8jgSc^_n6J%8=-Q$VphOo0?(y*15sN z7%%mnUIl}HEyx)7-sE$rV+7tjib_t5Cm{KR=~3bp#CQ5K5cBls zyv8HTuBek;Y%3L>MB&QrW;J>=AC)5)@=m+%*&sZCs+B+TDYqF9zfaE9f%kQ$N^+Q} zKNo0yK-{VcBgqgI%+UEwvS#1b0?QrU)_)9})$Iz{>v)Q#Y*5{In~F#_DXLCw3Z~!R zNYFno7LMD!o?sYNYNH3IMHRQDHYrul+Wi$yfZRn9bvna?YMf-BgykfDnbK{V&_ zP6x==nxXA`ERW!t%H*;9;}{=}G9hgc^8V9-YvjSFg^$&;WErqoPiH-Se1ubEY0NKSC!NWgIO=>-dO0 z&HCjxN-AKo!c1~oi?9N75_{voDvL@jFPxnlDODToiKlBelR3=&en7Fmxu(!_i+WFH z0v-{#rtNK?eTHbgbw*V^Ip-D1EfU*c=s^p1c$Ewg3%*M|sR5tB4y$Oovl%}dWU9wL zQ!B8e{=2fo@qh#NEs){Ws<~^}_~K0THTur&uL@b(KU(lFQhAGk&rp6g%z3g9Z-v9# zW%y2gD6#8VzIx&Z>L?iAji2Z?bC0C-V^vD5v)ym;N{ompXI_787+DsLpmkbFrq#RS zBhzTl@P+NW2tpq~Qq{<@^h4R+JP98tDya3k4~MSBJo-m()~Sv=sx!Ku+7|i-`-gX= zzSb%>Z+`+=_~-@H_44D9>ZT0>_l}e7+oPh+Bth2|7R$;H`gyOK+*)I>%c7mV#k*C7_=7BFHFMUcA(2mFg#|nBu{|dCpLkZG{gPsFlz2 z&z00}I+&g}+WcAK&FmGx_T4SaCAvN-!G5RxytHq8_lH2$6S;qaa%l$-9p!yZQi8BN zX$I}ux2aNB1?1WPzJx?hEeD?TheNfZu&uy2{FArK0q^cb#xKggl#DQ>LmtmZkyZv! zW<^mlNBQ0Zl{WeVdVwa(aMog{1A8uCjB60TkpMyMe3SCeJ%11#Fz{T16zzj7QdHuP zeX9a4m{Treaz1sUT+q<;G@+dW*i{VDh_iVh0A4tVG2mu@Shj`6S(xDp*|7`;vEVi@ zt*O@sHv9q(Zijqk1nTP$c_A<}WF9w9Kvjbw42^EK0>BFafmng@&aHQU5ODY|tE) z1xS(xaxEYm65T)EgCdxc$l4POW!2Ro#F<6G2C^PYE8c3Zl(mh%e|gjDwL|Noyxf`8 zNteKxBM`V`c*+V^kk|^kZG`l(s=#wt-!lU=g4&3}j}y$!5$=sH)+EF+r9@73*z}Lf zuwMk@_Qt1e*Z!7m$1wF_*tikcNhPRWlGs)YY!wvLjvzyyntIEqFq-1Ef78k&1&*}_ z*97aMTdmuVGs8{DK6QkAn+c)W1K*8T@FEWn3{Nxv78niNxdV#tp>Dw#1!jeE;iMSPhp@%McOi)zM zXN@Haqqbg}6iq+JGf%c|l(-I1qg9d}?9_n(qaeT?DUTXcg%8f9x};9R5TjvCvK~qn zv2A*$;&D?gKXr=72pIbb7#B8{mdF|(yLf8KI+nP`PdTT~YGux&6Gz%JQAFCPfaE{J zpxoaYyk(NI)lUnYQ!N8@DYtxCf}dV3Ag4Mx)XZJ3x;SD&U{z-ou$^@7UA@3-S8RA? z0AL1uzZwt&gR`3}%0hrFA)$YRvC~F8Vx&GVgKT!^k%duSU3@kuP1jEsUR^+K?s5=` z>eH1Sh#@wPwZZ~kS!Rw+r8ZOAnJL!wuUz2|)>;V|8MKR9@xnSK3*i;6PHQ=w*V4wwCvCwCo zX3_RzcC0$)-O%`7V5kCfW9}mOvje=X2te(RAQ;8@LhRH-6$T-BM^Qn)iV49A zG%Usd1Q^(wn+XU{+RZMrZ9#G2wGtKTtL@kE!F9GRZKREaTWYvbuoBvXoLLRwsCzq0 zi@`%LGr52&D94~U2ha-!y&}q=p{+xZVaIG{@BqgdnnutK3QP9%yb6&5{h&>>dGARl zuNgK^#WOs0F|LExgU+5+oj26rm$osq7aZIL)F6Xnd7R5OYxY<{yUYN0$=sTbpiE;s za8bivnf0#RljnpNUopW|y7Bd4Vf89RC>5*YMdhk2g>*u}`C8!7JWXh&k`3#Ve_zv5 zZ^!u#w?DhB_i^VzpcJo;kqd8|u53UhD$a|z0>Ci_9=fIsKMzDTlEwAQ#7VU#2qrU~ zEtdo_)wl9LiJ|af(GGo_>rlxO+Tv{VTQ}nDlJb`>_>#m z_A0bY(w6F-M6>6a;!MW!i559o-ofUYX9}24-LdLA&uaLHQH>>11YnS?879u1091RI zZ#k7!AzY@&EtP4>mAw7c`aG$6)W1^X4~jm@15gya9Io;XrY?PYbFJ|UM_WO>hnfb8 z&HZ&zXGO}Zu!(MS`WfBdLuv&@Zsl=auNRWqt`|B>gbY}Wu(hHYAI)ji2J)5kNFEwIVz{V3b4fMPDXV~$f zz31eM7K)*$*SE@icW|8wzzrEY14x#vnbL`|tvkL@ZJ$<=FUwE2>)(z-k-t)DM=+>I zPX_AaEtvhNCd9!_7yl}osT^=;97q>VS>fLCIfA($D9E0l_-k9RIFqADRx7lzmHj|= zLY;mB2YT+G1fTg-q&zxYNS7cp0XrZ^~QRFzQ@|myO ziC2p1Wv@`*1&K4Tse7L_>JAq6&6G-KXy2aBS-R2<0P@|#5s$PA`Ut2t1m&!mlIl>H zxsO$JUe80frO#(fo(j=S%&NuygI7&5ElvswQb?m1^P1|xbGpJ@>9;;%@%nwmQ>G;s z9-a~bYWa=Ln$&?n z#dp3#yQi>F6^#s()dN<5GQeKfif*sCPG;>qG_820t2qMQ_xGU@Ax+L)eUHC*+|Fhi zF8f7N?{E`b(7Te%H^OUN8+Og^IuM%V8R!u}!nbpq_Hd}ZyJkY1bRZA^}9IL!`_^a0_X_O;wgew z_}3|Y53|T;X{C}hN3xA}W!0sK*hu(Drv%xFoWxJK5lP1yccAhw`ndJ4>(IuJ2((>v z#Hf=`MU%X`R)vqt6@vAfr0oF5uPmLA4|fwbGbw3kVMP_JNv zYO^@ffT;qNlxw0%ob(<@cEu>9`214Ecp`cYfX8)(ALa zc6}YtT}A>mSLi}jv>DVGaGyu^JF7P{g$i&^j@`~r3s?Hy0j%4k><^+FAlw`oHU>es zkC%}--xfw!$a)sqnqCpR5xTd{XzL2P8w#=zXW#G#zOP%yPQON)m@ezH^ibzM&so;} zOP5Pd=rPIbdEJexg6Klrpqr;1F!9%919l`CugX@cd#s$YYKs9zI_Ng7s=+{RvXYPE z<}j%oR)IqAYmN1@MWo>f5Z8#MJqtq>yrpItP7Hi%#bSmVILWNkQqn3@%RwP+Pd2L^ zhekk!(&|qtTgZdMNM@l&qR2mNn%!RUNEMnFUuZJ;%gwpY#RGEgt#6auHFlhy#%2GU z&NeMe^iR`4J{dRE6Ypo00WCosF&}1}M~%7n44((YiI=50()|ou-e&L_cwtP3RG~a< zB+@N%>-)U1!0bBwNPTJm60>qr>AB+|yYkD}OwT~)yo=b1b;P1)9}wrILuJ0IZ>H1c z;h1acbC?=o`K|_2tS{`(KCCu!UtL8OHl6GSeOmUhMlGL4kmhwPyQ4SctWGj9v<{*2 zJZFym8uIha-s?}McG;;PQQEK<(<4%BK0QaT9uD+fywahz8-t1e(MLa($v!4kFcStn z6_m^;QcYgS76A|-8O=$|(dOr#8ScEAFedc5DKrD?hW82%tKD_>3Jt5G!>JuK{Z z`g|OOfyaq&5EEsXAZ?W)C+M^=ZX<2s3+)?yp=@G-$0N;TMp@8rJexh2-K&_;Lf8NN z?#Y(2kVtvAe-KoKsW;cd^dEI%IISMQs-I-9Nim98v{ST>$u)Wq%*&v~?Sbtcc*Dc% z!{U$P+^uWx>vR^!1Z6>aLAB>(*=kW%b$s34j3FQD(T}Ssq`Feq154Fk6urKiiomBn zt|o62@I1sC<&{}U5htXDxemQ-6V;M?ebR!*){WWXOPIr9UEcVmHQ~yRWpi#)KIB?c z86NFJ)5E%6$Kw;w^)#_q$=xzYbQqWm;T9QM=XQ~!+mDH1u8CFo43b5 z(bV9 zwm9_HrZUb<0p77c?!ym6p2T9c^ck{RC(v9}srW%zO?OHOxCn?_UjZi(Q=gfbwIo-1 zJY)FEF)M~cW}K^Xj)n9+WDdm%Z+Ql1@G}x6k@cM)(CJWVdoE6aPyvbF)mT~+bf5HH zkhEBJ6hn7MCK63kBrY0Ql#eVys`N-uLT0QER@xq0IX7nmL z2y8g>!qG>eAEV~49v&(L#>^KP{>`$d3bI5OIKQfk%(Eli*daNTyRC)8@sFP)oy1>j zDEbbvy7c%ycn7(X2rbold{8Z5K*=}6Uvkd<^SD1%2vU+rvQxdo_oH2e&OVYyM4*C$ zn=dR?EoI4U`itgR*^F9Jtl#J7ejAu+PCh~N$RFoBR`*_y zzy|O7>(jl=#LMsWpPpas2EY6#PGb6b{BAn$^@RN9Ky^>`7@xhr^&IujzuVKWYnxrs zd&FCz<$ix-ZT!BvbOXOla1~YEEg;h=BeSlLDU!e&spKe+Kk~Wu01?1s6(sUMjUC~4 zs6LGH$K>tgK7d)&yd<(n?7N&ij*%#|r0NH}o2VMRE4jwK&GSW;hh;WVTjP^UZ)@{_ zYMO?6lF9no7FbXc6$OiWxs4H*+$HPgRyF0 z^#jXPjigS<&PWc@aIqKPmE@EelQ+$gE0MzvcSZZ>7hGeVrCL_?JnUNvRsk+D4bVxC z$0vDvkP7LyT~mHfa9p*w)gK)?@Xby#l<669<_)_kGx;SsloT?EKL7<*OAvp^)X*p6Pb;Y{z55q3HUxoX#?KLuf`YI|VRKnAMrB-q zf@4PV^Vv&G<5#Qsk~U!TdP;H>fk30Hb3O<;Ylp%n`DdGrNl*_| zb;|`J+M6n*j_%)mwJ?v?EJlUZ<=C&9uPvcl+XlTJUkd4dIB(BZKRt4DVYB?CbXJTK zuL-8Rd|1)V;*5^D`#Q)~b}2rq+{)fQz!1HBgcR(WiTt*dma@DD%kgp6yl+g_A-iw= z6AA`8g~@n)csnMedo)-rSo2E#gn?OdWANLSy@e$SuWwK9u1Aaw+v3*RG>k%vBW^g^ z_LY2ya^6nyPLHDvRWPFF+0}6jU&IE@0j{5u!`Db^{T)f^aearLZ;F%W!0_XwwnS1N zBR;pWOtOVqh4#6S8p%zDewLoHokP6r^_3OZ_?eH1UbFvf%GO=w(3a9ju^jOc*^8g& zwVIFD@%yj%45j5p?)>;O+H8RtNQvcofMqq z%}BBSNu-@@GV;s&!fO$l-IQfqmk(CvS)PM*d}s&5Ac6y;#mT@0O|voU|#v&$+;uJG+&7&*fofB01=^uq=}P zo3%x(ZIHAGv+%%7pxeeUS?4GBtMzMC4jO43v|eRGy;BuGhOXon@iQAvZm%=l5`Y86VmkCAGxf#;i_2;+b<>*!ar1if!COnlQ7kZChU%x&~h1!2} zU)FiG?d^Ixp~IxMz$w&b^?i}}&iZZYZL=dQ-$C`ugF7!xfi53TH4Tod+>jg;AR67% zteYMJ9cljEKQhBl;Fq-nB1hXk1sV8 zbU*bJPBu9TVIfXRyb^BG(TynzD)`Jdqa_fi7+Vz=rjR?|XuQ@$;Weuy0iXtIJ*M8|irq=>pd!6bUPbPIDFp7P zI`~4)NDq2&A>`xF94@LRP{r|CEW@xe5iKioPrd2bFO!Xj{#S9k`+Mp*pQiCuir~hS z)2~99ktF5-E?)jpm$BKh9O{Q5M#F%jTGksxUc&u^O{4YoW_$t|}qVj=9-LNMclP zXDMathsT|$&+ea4uId=iNt7ZKWa z$h)A4IV@gPEb^g`4F4iT>xB&=fo(CtYQHV_)WAguT|V&ns4A z>~;rh(=$V^*!QAPKisQOsP5O_L(QjZ?3~lKFw{EZZucjKIpkyCfn<+9=i&N;rjFnr|~+PJa<_=HtM?@W#tGGqGFzt6@!g~{~a zzuk0Se~4|uOjU15?*7Mh%Am@GisFf@=y86}L33Lm+*Z$^he2(8?CS7Ax*`*r4I{Ft zD}s=hpCy5>kdRK^A(5K7`7$)aVlIp@X3rlf&5h=wARA=y!vR1dqi1VO;wv#?Z0x%y zuU%5Ls5lsF4YO**vI2P7wPd6dG6emYwBLClxYD1xdDx ztHI9PGUkh3K_Ize1ytlnHB|ggAClZ6MI)G_6Gu6zk!)UB>lpy*O+(|PQNSiAT<4wi zX8vIlN|Ac;$t~kAK0xG1HifYfO_l(u)J%op9EUF>-7X5nnQz`TueO$FXd4Tkfl3-F z{UxCBx@ksNBT00I;VL*Z7ZwG@U2VoyB6{@UIIEs?f%`yyIJ2KR6VXl%JQ0kIjz z?1!3mM)DJG#bkx$m|L{uf^R6IQzlF)Zq1tER(TvjG~aj?JPR1YZ-$$V9+G2-#xgt<=o84vSo0b`7lNrK9=OdWm2Re;GC{9+f%7n*t~N6{4u zdb-KlzBW?nhFupMs@tk_y;O5A8;mAZUT$XYN}{WM_Y63Y@5(T0437z^USGy4uN_m~ zEdNB&6KuBP`Wk_CcJe#^3@L=6WOeZ$nfRnREl+oH!q{`I(Y*N;%j;*OImq68$$cub zAC@p`deyoTn;1Hn6UBE2CK+Gg)}q-5q9ifXM|6>V(sH!OqFYmSY~q``0u$^ZhFb6t zmAnbf)+GG}pDAHKxmbwYD*`TgWpEiWEGt+ZVTb*)Y36QNt{<&}hO5r|DDPSg?Qwq8 zOTu+-*$~*Wq&FFF*7Hgy>dzRn_D5TOUsLiLAb8`c4$o#4HE(R<*o8K7q0Cf+wglVaz@erU-3KcRTa57;Zi=Ye zR#Ae)Z@pI0@SYo|6348~+KZLEL||SPoO_a&y&u1lB=`k>Ex2RO3_vv*J5Z7;-tS(k zQ~-_1G1}xu$#>n2<4SnnnT^Ii%lndJ1Jh4fB*|c-P&+3V_nC+{)K_cAta4zM-p9xr z!qEfiy(@hmxKhEy>?f)eA|aCxT5(fG8B%wW^EqA*fO?w32jYKo=XA{z&%Qq>qTiSu zM4CPyw7n~rtK`^tZBN1Xn0-36`t1r%VY_;E%C)zZMv+K2v>XHqo2DJ3>93 z%Pi4E`^S{V#JSJ0);{X8@nQ_|!k1BirfkiLKic)Z=6obIj7lln@(lCSEFC4w!Qa=lDx$#AZDbzhv-{<@$!_@jvR8e-U+__KE2 zI+*PClOw7Z^w=zT420sV-vbHpQP+8?E{=D%iXY``iQrB-3+)||^8i-EsqjA z;ksz}CdOHvDlP2e47*&v;_^zRwdQ@tUiK_p+beuwJsmNoVq97U?1$X?;Q6^2vuOr> z7geA3usspY&5#;GYmt~pw#zb2P~+F@YX3E>+g6aA-YdLtxjw*@x$$+cvgc23kD04Z^7T( z&ro-JtwxUG{&GlPYx`L}=>wTED6#_v1ns#oA3bQBT2`p&9;I`mHLzR#WAvPI&Vuw1yQv=vAt z#&SPxE9Ty|7Uzj9>p9i;u+0p#nrZJRhU=JrUL@}~C8%k&R~a2GKRxA1)X)5Se{J}E zDRsr9M?`dLvrg7;UWwfLq1`KYzA)30JF;p1eEgv^;%mM!>BCy}@Ts$@4R<{o<#@5p}xgFt-0 z^s}+;qLr2`35`JxR<&Py@C%*b1Tbj`3sx0f$wgmi1w!TPCBct|sEIz$Y!dMtKsN|3 z0urQBm)T9ZHI~|4rwX*LY~F+EkaUH?)`HgL+~VdvsGe;FMbmoVfXnE~b{`5m>BYsl$~1@g|IN(l&J@i6A zr%-N|bHeXa+^{6XS}ofmq+pEiM3TBB<(!Dl3}L1kG0pf^%zkK0kgo;4gr?j`0;|IL zf{KdDRE*7}2v5F>oUscZaR=^WALIUx+R??QSDaS?TaS3%3hw%2Xl-PYj*FCbH;tIgbE!6J ztgd5Y+-TUw7ta9@$uOO=UOzcG>Hezw|LTK~Eie|KJU|Z?$Jy4#@R2OlzUjZgNT6=$ z@Ri6ot&5l40G~*2k0B>#*b`Ca%-z!}X%#DmPJ65>wKO z=mJL90=8BQqLvJeT3_!&zq^)e*anCRN+L*MWv|RYNv-OUks?6~LDwvogLB)Dyq}1dnrJbuOHMOv_wMBuF z1WC5EYa?Z((gaaR*=sZ9ApwU{lx`_Xip-`h4m(EBREymfB??B8-AKSzyA33jMo`#N zNy;P@FSc^W1+UD&fg?nTKwz!l|HO(HGj8noG33aSCqtDiMeitk1h`1qvT2ONCUl9#1Wbs0RX-h!w*O96YCqCrw= zM-I=O!oF#Hk}>T_iM)>w)ow}=%xT#6P=qf6_RRI6P> zTZ~eVEp4b}6I1rkhhK7F)u%}-sJ%p46nZ70#d{7Nx0*j(v?mE_TTGkXmTlQ> zp#@9!T(#6&oQOqAJNA&lVJY>U_fm2!vB%bBo|(vsJGdQ(oCH*D0n>3dK_p;3u0f<% zBq1hOi(j=#0b+L9J=LFP|2v6=on9nfC(={MNfE^;t?)JlNzWxmBX1j|IUH-=i6oIk zOu-e@k-}L>hDao>g;=18D!M46jW(750fwa{6Qmk(Rn&T=xY9~m5o}`1ZKOo_Us{*i z(n>2pwL*XrY+fW$6rZ*u5l%jey51%uNh+CAm(fTDU`={jOQ@+@C6N{up(dSLkzR-? z8?2<7mTc<5)y8`VX+;!VWw^;{tDBtl7fz?`xzSX`f?L-ZB%Rs{MtYF~SE{L=3KOjb z6}t(tyRidrs;(Th;Z0Hy%Oqv_M)(&}Kh?6;h4Zd=YeP5@u?4+D+CZ&-WG)Y6qHh0gnU&}7rq5D zdPx%7hNuil!I7U|eYJ@|1dUNtRh$UatGon+yewz5vPqz*;7UYLgcnT_>~S_nfv}@> z+kH3Q8^#G4Ok0rh->Ex|lx!{UebwfYFU86VT&Hdq#Tcys3)3d3PDp?x(!y1Xbb+p> zAl*k+{@!|A6bfO;tq6?pQ+^kIDk*6aFjeXRlQ98FexGU!E88Kl1uLvvmDS&}kCgd) zs4j_w7JsLHYEXUuZ8#aC8ZQBa$xoi0^Y0egOApw>i`4Y&EuES)dB?JnfAn3h>&KXgFmO;O(w+Bzal; zUK9n|or(bNxJaR1Ry!rYiAj}Ppxa1NzxHhbch#|nE4G&?iX=g7dAlJFbErd0T@Esk zdI%8brb4YSNkcF(3|5|^A;QeAG7uRF!X6S4j!EW-&Qi*+6c9zm7^aJJiBuFKlBOSO zWs16r)JupcM8s%icCtYj66Y2LD1y+-hK!vABHW-z#G6bc z3R}3%zzl<^$#7(CT`EbXb|}tql9MsvJPGSiBD+5Jurch!V-xAP&b{eToqSVManku1 zTB5U^Dx8q)wwM^01T>!ioTEEYqR&z#al7fn~molN~QwX{gQjnrHgz=F_vm%o@mQ<)H zagx03!HE(oYB(ZwMLDA?)v3-@5=cDGM=P_Kk7iXcU5$)VD)g(B&QK;@{VGUJ;>F1D z{}Ux>J*!mnbudPubx~bC=ML{`6OU~yZ*O(0VzilrC}?6NWbn-~Lzc{eFtn~CJxQ-5 zQ9ZbPFHtrtNjs>j+0E|ooMh#!4nN0*wt}{_rZtI0L-yIzvNkYInim3FE0}(DkN~Y< zM~Lhu5dtvoE7A0vUR*hnAjr13#udy>{Fyg_Zk8iTk>xf?d)(=g@}GEp45Yfa5%Ty$k`AMBo1ARJl$4=Y;neT;4jk!=}|lB)D2m$A&gd|0K4X zh@%SEM4cF{CrR#>GVEchVuieDMO1c!O2_LaN}`IAn*>%xiju5q#zx+u5;Rd*A0N5N zPJS|!acJNuE7(FP(F~Qd9H=CWqOe|N)FdseVjYWFQCF2@P|y5DIC_`B-&N~)$qddi zKc>ZNhD>3V|i?7;TAW=dR`Qd1I;mF?wQ#rp`=ak>*8X^B-)1h|8#OWl9*k2 zo0f1@_O%rQ>&f7C!a0t~UD=}MI+r=#kQEHJ9jzF2-_6fvt!A(TejEivf}`lP^4=E3 zYJn#>F*dO_XlKo9cRqZ&nFj5`OM+B}J6Jyc<~YYGnbnT4i40l@^=wU&?_HW&(P;cQ zp;b;&z;07AB8EAvB*BJFAmxnaCUZB<{AM+jsG6m^EySl9 z*1fcH@^wk|ZfnP6+CrE4xP|!oTbbCTLNKYdn;lbe##qSlRj)g7|BSNsiw|e86KObQ zf?HvYTxQp%Zo9NeVtB*TS*7yQeA(mVd04f6F-laE;Fp_gmA<(1w{O&!;x2r-R~ssg zhpo3sNzE;-X$q3S<=Ud4h3Cgv+h$$VcDJ+zP57qg6QWCUaGCnRqANcSiA}mE)vHep znX$-qq!y+oiL9x+_zJyA7`K9Nl1n1~Ph9-{Jy$(&K+RE#lSsmo0MpcUn_E2`MBs%@ z5QJEq9oeB-rMQLig_R_v#S~0}bdlR$Sn;LvXM-b8TM5XMeL8PFOc7oJ2|y#OF&yjJ6&iXz5U9<~EdrI5l+2;Z5+BjR9| zRiM1-MNw>mV@;BiWY#8>LRE}KS^URetlhd*o7G+4j#<+vAd~oc)JFJ+J*?tLeO+aI z6kV7FL(B^))S?+C0sE~T<8cI0@YWdAgHs@5wb`3m4Hg)FT@w<t9;p7;aWfa|By$F5?k~NDVm~F=pejN(|P^b zzdc0Hlz}<61N~hc*ijMDbwuU?$S9D(D6pb?xtY{8+N98gEgB60RF1YlVS-dB z;nhmn#NE}NnnXb@T!%339dGeQgH7B`#oFGmnoI$S0;L8=u~PzGA@7}J_^?7tYD}3m zp|8{e86?1_RTE1PfF{^ODaZv*2~|tgWan*ygfv*;NdbwpLKzUHhYVs;B@TTV9#wqB zdH}}n+2lO&mtJUP81|4BXu+Nc)$O&VbmgT@(olqLA&;y{OZv?%45Nj$)aw;u!*K{F zltGa+3oTvTOkD|p;D_<(Wx{1tfZUIfiJ9IOZp zxh8D(Rm_1?NAOi0K36UtB=q^`+VGu3^h9{p=Y_1t_4ucS%3BmfD0qVBdE#M&8Xt|4 zCmt5WYnFkH@Pwl9l4%ZUpjk*tJ_b*D|Aqufp-d)+eb_|&iG)~C2ZD5lm(WoBMJaQT z-i0v7lxkd3rp9^>hh1)|lUS*Fc4_CypjfC+NhAv^Xouu9hD}%mU@itvfkrEgR+ZL= zmBxnWY3Y<2o;5KCjjRfm{%M*piGFYb7gWyhm?54hNMo1~r})i~@kybINCHm5nNH~w zrD*~RNG*h6HTmiH+((;k>X%T2mxk)6DiNnHg(Q?Ab5K;0R!(KXr2)m(_(=hzasf|i z$x_^^tQy{{?&y{9r?EZ9mM$s})`t@Ksj5zipK|G_wyKj#!4yc}tu|1SZb2*L3TfIO zkuqF3U6)5N4$lGB4?5IFm<2tg|3$2bOvOBl$iPKI^u!!-jlS}PCtd_piOe%%hR9sZ zMPvk7%nK{jqEFYIufxkOu!D~E#eHqVgzKmVA@S%y$&ONdQmuO7uBfD!M=sI z428e`X!PMszNU_Esuz3xC{n!Z^>IXnd?ROY;uhr?q+H<1`i$S0^g2ECcfm}zn1O-yeQG{H~xH7G6)$FS%ffTfCzWVCSZIyY6V9UiB z$!=s(1f$6OLMh-VA1|)$J zh|6t2tS!8VSHeu%tjPLXO!@eM$>!+qWphXyX%h^A6xqkS+1Zq$l1B9_N+ZKObitf1qx0V~07 zfqLME0_ck&Tk((j@-r(^^kv>K;^U5Sk#ZWZhC0TsMc;sEafERWE}iYGbVerQlHV-E zMN|(IcSb$9|H31WLQ^=zK$r!4nGQTYaw=AZCgVnY>BLp&%j6iWKX1V)vWl9y9J?vb z7Yknju9A@gNUvE)S5%=Zv;!-Q#hMUFL0=S4I1ujcmYZCK1NCm75Qqp9$9Yi27IP_4 zim60bM0b?X^x|$sq{D^ydeXavjh#%9v#aM14?R?&rwfx zbjE8%|F5UYhVs-#SCq9}&<7MF!PbOFge5Qqy$BDN>IVBtjbyKMByZm2R1jR^L!V|6 z=-@_?+$Tn~sM()(5f&}Pvpu*0D(XdMNe6Hc3l%8AGBP)*-i0|+Ze5JB*^Vt1`!k9r z3Gd*oEn;Io81fOl-ZiJnUl4@Hj4Nz-#VO%$QS0n6!eUT0USOgH4!>hDy zfE-Q3>?g9YLu!YG2b0U4ZI!d^Y&(zukd~U7f!cPl1VRMuVA+L(Xo8Pif2%TRU|+$0|x$X1p5K)_Z4+stc2Tg;^*!-m&G$MMa9{) z{{e#Q&fO-B(cpJ>ZP%(eNLZxvEiObC$GPn6 z@g}bl>4hlt!&KH?o8SghOz=>!2794w>Fy%h)m>#X<>eim`0{5IV3TOLgIL_%W)m-n zsEskoZ=u_RJ={5{gm7Ce+-reO{iRf+Crdw!CFvo-PxwQ~5J-)<0v99!7f3k|M+uyC zUNcVco7Yf1JdEmH#(jnkWzUh25w0!z2k2b~cG@@!p+G?CYJQ_k#uD6A?~JU~1*6B!6il zmqgg9j;qsA^JgNIj%XN#5|qO6)-5(p%e zGLV2jQd<~GA+T@@J9}gVM%iSm)RZI{lZ)g-Ntn+%h5J#FX{y zO%W*3B+5~(T75J*lxR_-J$I6_waMjCr$z@3++?rR(4Cs>wIZNo|Dn~7l4@x+xpS05 zh&+|-glTcggs}sWjA2)6iq|cymQIl(QKDJ`?OG{u`;>5D!aNNpR=k*TW51RiYAFLkloS*1U^UJ96?j9c3Y%uX=jU+KnWY$k&&Wh6B(u-N7-t}WeRQCJ3F`H zO+YCtfu!oS+B9VoD|@cCC`g+mO77EBP%F?JMT->VZMIC*zFDO1HZ4J?B)}T=mQAQX zH+{TWBWnptFc(D_+UfX|fcI(#Jc4Y|X_HzA;B5<~S~;sY)XHlmqXQF6?LEXG!;HQp zSlLYq1sKbZfc;RCKoeH#A)~J8B8Xy)dI%V$z4y}ct{zvG|J$S$d)$~pItga8ZVR38 zlS((#wmPXr=LlHNLV+TX0>vixau1==HX@)sP2|f^GY(UnEFqMlkOa9_h)f7L_AEpV zN|*q=@=KN2bZ-kK5*SF6R_fvHzR?DWXn%?P}%OEC%45YkC0t<=&> zF-<6eNy5`_%!Pm=W5mg#B493^q9COeTZSBn!B$jlMO1+nv;`7hi zzNpj0R)Lb+A_`XAfoO_RvVv9F>Bd+US*7ejkk(#r{|$B2$6SiaJ60cEcOWULZRI?K z5Za5CRuF`>!K-R<$CZTI@u#DKv|wcv0_tI{4Ak^Qk+t7Or0&3Wh->BImh=p(W}tYY zXuW4uMQ^f&Bp}6}EgE)g*HKuhw!xtmQq`7ll|nY=D5MChuTSR%w+y8=Sx5>=I;5%$ zi4;CDWm1Htcp%H3ixo|=%Uv7hOphv+sHE}k+wZ>tcd9a{P>KMra*YzPu=o^eV zAOkSOwZJvycFL&Bq%Fv?#n+2)mZGzET=8``$Rp6vbTU*$7Ii7gdk*o1Klhw95Ha)4 zG%iXyIMvmBefl!V7~RNq#UWGeJSha!E9i;=|JF^m%U}my#}lvCsxL^9B~-JbI%ayj_HOd^Hm0Oz`3-nLHgQOq0P3LP};kckquWvD3|A$cE&PR$|ts%6{Z;YMTMa8U}F?xQF?a9$SBNc zowAf3x7a{65haXAp<)+_f;B+S@hNE0|Kk(8ml%{R3~7}LV;8%W$3_x{iiG^)BTK@- zi9oS|k7Q&KcXCA|u9B6l6w~0yHCBL1k0eMZq`;yAOE`%ugzzf8z4 zyR<&52oW>9Y^F(^X_WocaWNvIkMW2($i#>UA-EHwH;clb3&wJgj5|vC9HSxXaHt(5 z_)v(P(oG>wvrEX!CQ;DI%cks;03d3Lq%h;p#NpE@;`GvHP_!(`tdF0=8%jVOqf8<4 zl9z*g<~?s&6y#MjaGMcGLTmveSB{jVB_+zH{CGx`7_4Grkqlx?xk+s@(H+7PXkr$5 z%0Q0tlrU9HPM>lvSG+MYF{P$7{|VDD#2|!MKqU+x8OBq{L=vb=6{J;rs+dR~#i%4Cu`YT{rQ>d^+sz?PxR`1qQH%RGvGp;z%_UV* zgy~%A`pv1+wQh1#Vws@Uj495QKopw7xY1shpqEKP60k{L#A=2(j~lOguluDA`4PU9 zlGHNa3%L8%m%qhD>0u_a|Cj#aw7xK{?tmGCwL5JU!NuhXcZAkp33D|GMwwbhC!As9 z!g86XJttlz3fc^F)U_IJScx^9TW+RU!xIE=LPW}98D~lXlA!O5ahziv@0iCdP9=hf zQr8|2`KeRT?o2zmz9IQkm0&R&=JYjN+%DGqi_ACtG{@(I>;Uo})tEsV}>o zHkUWhwT9GTu`Fc`|9z33Csj;pfj#9{3o)Fryz`w&{pCnGB|fo+a+b?HTT4&7KS_;> zZEjo`R8!m5hbH2IokFw|Dba7o{+nDS%^0;{8#3Vbo_fU=g=}+sl%l40j>Vf9M%D6` zCmz#g@-&)n>N(lN%g>hp&R)jt*WPd@-l+K2>Nf@avcMF0V*-nCg!hx+`1}(7%77=* znmN;7x+$#>E^yagdC<|cX30sd@qp_YD*Il_$qDx+m2>>rM3K2$ojerFUYypPH8}Y+ zPV_lz3gVi9-9w^)&Rh1J%c;IMz4OaNSsnF}Q9+GFkVMFKN2NRM5pZ4;CN`9~d5L06 z&D+}!6Q11p|I;UNyB6e)p{fST7MyTPBrE3iy}(_PV$%}3rMj3!676B(346C1|8{q4 z9b0>b{MWVQ?s#`6(bkT)yYse_)F`s@KqU)%t`6wbSK6E>EgaYq^SyzrMs@rXW$T%K z>FvbCcCnEHWexMp#N_%dE!qo^CPGYovQH`~v&a4%UR z<}K&0hzU7@+^A51swKDzgD-p{InofPV4`VAfeipe@nB+AI6)3AZEHr*1V@bKzC?6x z&M+vBd77jYpl{3^%GiJj0*_?ylI-X>%Mxj=6J6@r#wkx!gCok|S(3w+T&s#k&aEs&3s5fB z{{|_^lC8-a2uR8!I%G&QBtidHV-#+&=7K3YmaU3JhZha-otlgk56DfdPEz>ep03Fj zj3Wsxsui(uR057{>VXZ4V*@>^jsT1KOc5}Urgs2E(|Al$=uQz^Y!6pz>mp8;yv1=A z#2&B*B-BDa6s9I1Pb5aD8b4C5Cg~*8?jsG4UDVF!y5c0!5iCH*Jvyc;I+8k|NNhC0 zA&Rgk79tARYtGcJD`JKy(XqllB?*9H3pjxzrZDl|f*^ds?;1@f`$1N4g$vwbD23uE z{Q}}_;wL95HKL*;qw*s=>?2BpBEz!6R$~fWfh`jdRD?(Dpkgmtp-^t&kuH`+;q=CY4CxJBUevdkA?CpkWme%8kl3@B6z#AIvQmI8;dvLv4L777SCgR3THKuq#GGU6B4B; zCBa+%L{I)?M1JBu*hUImOZE~o;)&7KNM08lYva>yuq7-EGZOkqsB0(Bu4@#s!FD8Nv;73O`5>D8J>Gnx8VB_x^v2$Xh z8S!mI5DzqYtQe27iGB*L0`D&DA#!pfWjH}>BH@RUr4SXSI#yyYN zb9}*9W2V$3z0!)K{>l$F_z_ ziL3;B!sa$15ijwfQe!np2Pi-%0{jtHOh}lNpgL-y9&W*OxW^m$gkfoKCkE(auFxJg zP=HV*F2hAP;1o8#1_OVOD-h`X9QG7{ku*$0vv{u*SSMnC!|7gR7S*M~Hen1}RUoM^ zI9La`@FO?aK_IUvMMy|QJ#I5Vt{IWd82^p$VuNikCpHz941NOoQj7Pn(q@rn_RND6 zLY7Df;)ljyJs!tDVgfphNopU`LLJc@v9C++PXMKa8I?yb|H`575W+ngmK6LW3OXk_ ztkxDr;XbOvbH0X8Zb3q1#xybzMabnfe8D(M=5$`>jEJBBq{;aXxfIi|pQG*x4t4?0RT zFld4xY9TAOVE_13SZnY{wcuEt)oHX~M;5F!K1TXNVkFuEUrK=sQX)5=<|-z&2tCqU z`h_mGQcvQAFWlrmY9VZ0_MRR?Y;uDt<2Ey}#&Jkt@U}B7bK?n-w?QlSdk|Fnf7A#7D<1tpw=RrI1mM(DeC zWQ6o$hSTDOMhGuyreIrP0YioqCO{LUu#TqmBxqw*`YxsT=x78A>}YeyKC^WZ%wOwO zGe}d*M5M7cLT_cHi~JTp+O!=O2uK`Df#1XtZ$n{CV}UkvA#$W>T%WMv>&!56~zyApMUr9g-& zm72zIB$_iNI-`Sq9UPqj`^m!b`;o9B6h)o zX#%@b7Bz>VE^B5&@R93*3X(81gc%`?d9H!^p}s_w1ysU117r4rzRvJyfS{g4S(Gx#c8@vSHb?a!~-`L}Ple9X2P6=#ff{~EBn zXCh$l9&sH+>amDrBWLY&=?A z#U8q=TVztjrGO@Y<7j@YL0ViB)>jQF0;S`(BH(wFBmyYE>xa(9DUa%ZPmd~p(BUX8 z-ZCt~x!e^gvBoBt{Fmo<|D_p(q7Ai)w0ZVhT)bIgw!*!aCG)N%|@??>bkNK?mKFmuBn7K8N4`)m< zD|lkoLqZnAqZ?0gL^x5{|CRD066r!GP*W^fX%9J(p@fm^HD(^LGzvUD6n2t7Y5HTgZf&VI7+9WSajyH?Db_NdeYTND1ouA~<0Og^V2A z$5jUfJj*(DbmO)Ud31=;!i)ISGc2CFI$p(uXi`N}ebPm^@9ns`Q&3_Pk^`@S(uB06 zJ-B(sp|=}#a-kXMVe)b!>f-B`m{fhzqHl~WsA5pIfPBM4-1Lw(cg0)CoG$8jq?P6E z0Qn_U<55R_XioLd|6i(yu#G!toD9Y?2%#5k>=k7mLW!losMQ=V-GO)Rq8|4BCw#$b zI3{ukkKrj#2}>JOWd$o%<=<1d9$4W=nP^%+0tv#pCA5Vq26TpZ1%_9@9aw=Yq#!wb zfeZHUIod#V+s-@qFM?9=il(*dW!P5^0*dz#=ckwv0k*i8Z8WM!H_8BUoSzhcAR$WB z6^b8Abc4aY5oHpB4O#*FHFj3x^G!5jR)yol1xVmkrFjln!J%ch-LgOskRLBpKvv~+ zN?97A{~-WEiGn0sNReV^%U&B&T%;sOB88l-cCARYYDY#&gd`E9u&QUP6#*p@2$(#H zG9}6gDK~B;|5LAwKmsLIvQ&waz{V{EY_TI?QQ?$Q)t0LWCrOYp24tyH?Gm=xs$`=UiS5QVteG>e$pj`jLM*!luH2k-OKyxZs+K)B zQ?!7rwATfZK+uUv>pTD2lW zGrV;zr0kV#)#kU!C;*_gQp%G6L;_p9lT;r?N-I_&;ggI)N?B!o+3cN>O>W_4Te=VBDz%~+Ba{FU_?Y9(0|CIMrx!ip3%T{fV1tca)L zd31*7oh?#KF$!lK8n=ZMxfSOWkU-@~BycCS*<+ESj@ss^rk;vws;VBR9ZpGv2Gu6B z6=~^LmNKW4PC#^2t4e~F%F=AV_R3s-mRcHxcD5c{DoVo&n(MN*5-=;TB;v$Ut;gbO z|B?dF!nG{3etr7wt4Y*W){8|t_0UH;DzIa9!b;ohx5qxDt)*K?)JkRqKwIpsIz=I^ zu{V)xYrF?XXO{#Bjh3r*boKhxSI*jt=CL;sjApjqUK{1V(nfqNaL|UD9J@)xh~>ho zzAUksFwabL%{Jo{a$K2q_uZ-2-uy4nqBbkt&+_do#VGZVLgdgv+QUWDLVpU;CWr1k zM!M1w9ki)CuW72$Fr#cL*G4{#<P3QcX5B(TvhI%cz8lM2X4)B6S|(6bY0CVni&W3=`w(c`2;9pmg_fHUrgD~|^dl{Ai5*Jf za+h#CW!!vOMqu)Cm^RZTF^_4TG$M1E%xtDJpZUb_loFcM6rS~%cap#vQ;pMvn=oPa z&EQoJSK~ZRIHPmBYVr`20JX3XAskT+V(r+L%QujzG&wB<9R4fdr zL7`*IgYI&A!BSio#ksietug{YKu#+q%FiLPs)TCfoy#Vw$a5-G|Dz)!JBQfeym zZBa-cwGd#z7w+?hZ6aezZ;I2L%B5{OMJC;DVwa7C#+ncPo#VEtH~^gMTnR{?aV&Yb zQi@b@^u(6sDAqgL1+J()?W$J=nZ2(Lvztzd0(XE!(3~W6gX?*Ug39K?olYpLbh+y#-Rl{3nXJp*rWGq{#VGuxI7`muZ*vo#xk5LiC;@b%+?=aLgSyG*ozzB~ zm`GwKh|!M{&TT`bonKFjTDT!KwTj$fZqPake|X0t@8N{H@K+t4N`VYhxUF&gXfEXd zNdf>OMZHX@g)NK$ugeK8P0q^N=t?(^(wy!h>884lD6Msq|M-Y4^0HKyEES7EJ=b%0 zBi^Bk_aPf;Re4?FSoE5AaPkpvaF~+C@XoiqTA)ZGAHrV!0{FS@9j{K_YZqlDc&T5h z)Ihc{3I|V)qt>mkg_jq~3&XLSXca|2N-=>~X-FXuc^$GURVlQt%*0#BkGb@9$Xm4- ztt`G(ex;zo8o!o1h~x=}khZeUe&@w3rq9115(O=&$jCfVagR$}Df!U2Qkpy)ju8pt zCZCnX!U3RLzk{ZkYIw|K?kky9tGLP~05J7vgP@cE7^QrL6-gmQSQ1i(p{xucNwG&6 z-Yf=$2#74Uh{+TZpr4+ABtGmq5}xoZsHNH_ArpDa|5BqsB0m2)G#&wo6vLDR@KCzX zTu4ijO@a}q)OiY;Ax%O`J&-wGUAQpwHDt6t~diXB)Ak#G&IV+F4W7|S!I4$XnG0voVo#UUE1M?-?s3U(wWWDwCr zW3E1PmMdPmVO{(S$r>boFs<+9l&!p!nojsJol8}YV+`J>9`?Jvh z++SB%N+LWlmlht@7aXApB4HBv1$t8O|8Z6EIz5qjN>FrimKM>%5huqQHS!Ss6>Y`$ z5T4;gkrQ6}0X0g1MR%8HS5XgcASj8F7!lBS5JW8r<`F^xFXBgoUA0;@2sFwD5gzt! z@#Y9+`3=@^*lcLIxASAhu5(9{8-*q-$L43XU6j0+TnZgRb@O+s<3jUC7t4DoDLICM@B=t}W@iAN_)(V)H zgg8iuJ=HcCQ?BLoWK-Evs(hv{}7_c5o}_3Akh?Qu`<>-I1gb~?&3Scb1rfcf&(!S zbk+p|aTl&|XrTCLm1sAc(F&W88!MHF*Z540hmAmEOv?sv6SOlzD10~;DXjo{`{H*> zSPz{Lb*|uq;$tonAPKE^US|b}?obM#CqB#~IG0l%KL})Kr3JO%4iGeaPIwZ=R~{(R zRx0KZ&etiC7c~$e33sRorBM;Qg?c*!6cfP;BF84%D3W|Nl0w5!6V_--^JgO=j7 zADMVAp$UbyT(FZE_jgElH5prgFH?sQ7!q&_M~%5bCaGu{wm=_`qJWE~7MpPvTDJw7 zU@2K+3lMXGJy8`#_7}O4|0AzuIA>RiftV3rA$OPP5Gzv}GpBb{5g#IGIRqeRQC5<3 zNlhq4mv94H|7JiuHX0z|iV8#?_V94@CIw6QA`Oy3L$+?D&>$IEVpj+h+|~+J;uJg~ zn2#Yobpv>cNt7nR3ig&ZuL2<$Q)(0A zUl+({+&Pv6paq)n|3QH?oC)el+NhwWf`|kTD zBJLSiU^Jm^^CMJ9L0Z5`{^XUiGZK37Vjn6Wuu~;!)Sx$tOW}v3axpy}m1d~(NR7o+ zxiVF9aZbeJBiRH>aM4hJ69q0q7rv+o2DlRl!3n{(qgjedH>jo1VU52fq(WferGjQQ@;UQTLRb8H= zKv5tGqyZE_;R-@AD}xHBlS)H(N~y}hr3EEyxV2LuBtU!=Lt^@=aW$&OQ9%RPh2Ehg zEp(}^N<*Rw|EDKuTBlN^(NU{!14Q&fEUwC{EoUIT3ar5@tVQ&u!`fJ4CVr*#pvKCq z@Pwevx~xD0tIbNSWmc`IgQPQas|JOv*Xpgvk*UV|rQb@f-de2J8m{H4uDoig==!W4 zluu~mxp(=uTKcDztGRS( zm+E@Bn+v*yNVL@2xS?yhC>Ob;d%CMzl9!vMrOUdpdttEas-G*nx2tl8`mMAZP>zJV zzgtBaw!4#?SKSJ{r|Y^qnz;y@6JU#|vwA&Hdc4yM9i3aQwtGv)OTF8RP{b>&H~2#t zWl3ALHhg2grlh3g`>=bP#h;=aeOHQB^Gd2Np zWWWx-uGYwrUB(I)fo@~T9a$55+H1r9=WkoWstOz&N-z7%L?$Fx4?Bk*^w-Q7F5wB zNimdnCdwyg9Zo@Wx1k^HfOEHafi=y8lb5I!Ijm zfqI-k5d&CquVWF~rU|Jz1*k^`T2d84_E}0}XDVU~I>H64(1-QWC!#uB7l|Q}l6^>a zdZJk#Y{1V3Cn)7X5t1+lt#Avg3eT&%xa9g%lVdqWrz4xV1racl?GSYbks1AU7Vy$v zsJM&&;y;rYcGL(JqyR6KQY{HgzDa#9j#g?#*9OgqfRV+=y!Obt_z_x>{{Tu5Daom! zCtbN8Y^-zxDnWvK5)dnu*$&1f0V*N|>PR3@V_dItk)R=k)Iwa6q94E3)u`-{{AQ2C zRX3IC&;lVRlldx*~=ZeaU9m+ zk;5z)c)?K%1aQ;spnsx~%t{c5sFwsY2^t*HcdT|1<&9}{=EV*ko+9`gQ>O`AkX%)f z;w+A)TQGIhcwifmHD0m>lTe^ysfy7?6!Pa3#H|sp_iIaqfPHA-nhVy$3VC*dds^^= zkYW#|;5z#;2HN%@G(r%Z5ouw8dsE=h;MHILpd=E21V=)LVi;5E5kW_mG*M0@J?`d7 zKoL@Qca43^u<~7*BH67l21gFMmrb~asxnHG7zomejVT-@uBa;#8KylEA@+YEVJU%F zYH6H#F}7wR4lGX^!JRH2zIb;|WEWYZCyY4?P7&!hN9t$!{}KC!+*Rr4lq=7Zx>WCb4Ul$+8Bj4J^M7!V>d8euG{Xm@nh&OEWx6v3ENF(C*sm`^tWtpO4m zha%g`924T(@8{rC0TiBwZ#S35X$f!OfiJt~@8KS-N&daob16t*CqS_UK#%}PAOQo& zd#_bw9#Uf}Y7#w`Yfe;SjpN28e@OR1g$oEhCWc6MZ6r~)fN+6j5HIdLyS#wO*;~9H z8?x6%To>&1f=$OC9V0jDOQejY+&VAEKI^!8Ask!)kw9+0od1!~5nMre%TUktse<52 z9=B0yO?sNXX?7RWNEH{s?p@FJ)*o&0Zx5_bPy4y=^`$@iy6^jYG3#)u_`gs5*5UZ> z+WW|6^fBc%S9^F*=n14<4pQJ52Dr9f4bqWv!1pf|S2 zPNZ1T;zf)ZHE!hC(c?#uAw`ZPS<>XmiwFrUMA_2iOPDbuHe`8GO39iQZ_4Dj^CHV6 zJcSM=TGZ%Kq)C-7rRbCCQ>alLHcU9MX3iuH2?Qmn#3N0HC21xpShMQFsuUBFWlKN_ z)hJTs&ZS$|?p?eZX~xal*RMwfHj_w5B4uzAzBnT~C0dv(V~>QTNMXfk%U{fyHE-tJ z`Qgo+o<-l)Ixzy<2s_D;B0y@&TLOV=23B}*rR}N(!S4RqF}Kx&g*TCrBEf4)iEPEx zbF(FM+R@RaPp4iTqRP|uI*+K~g3X^2Z zRvIP6I8rnng@8sku@KcZwiq#rDEI?a3jf&vtw^P_ShTQ8;|wKB3QR+7WfQ_ABSqNO zN+ClDE!ZJWflo;xW6O3}(WFU1v(J^;YH7z7Ew(szut;i= zmy~1e;l!{hBrT5T{9_0Wwer0B4o^d#7%76Otc!=5svh(ME=ldf&;2;06c zPO3>+AjA#zD?7C@>S<+)1c=^r=>J-tmcr*Y`0j8&B>-n<12}Vb{Bg*cT*<)59gNbu z!bYiQiU~%sm#{5bA)vT)m6$-3ep(>|UV8}GK#DC_CoJ}rTi#-Vptv42D0XU5f{S+S znS!vqYblP-JCUc)s{Gnnb^*tlwZ~&A$W=WFGU|ELSbIn@xgSzgX4!bcv|y!{+bdUp zeVYGdUqRl8{FN1UCN4VhuZg7$X(dP@n^tBCE^n=%RbklCoG6R}WJw!Z%!>6jR%op? zSz}b!;uL`>NFak5EKUbCC;<-^=QgL=)h3emDoxaaf2X0^CbmEhUMb-;q!1k849B!y zNrDyiC_{+e_d_5m$y-6(4*#J>7bo-8A_?YWMTnw69`TiK3i_em$wuY5-D$8ET%y{t z2tz|w9EKFtQbH^2@sC#6LS9ptLY!_wvNXmqW=x}_9K+|vBv8y^gF(V5$XKi-_>mN! zY6XFW(>;^bqZAvc-M`AGIWA0qh?Asbf^b$z&tNM>Qc$4;Qn(T&NTE??lT@Mz5UNcj zfHEKI-_K;2guIm@Ypmc^VaCz5#3^u8v{cU~xUdNcjcyZT7>)~zNlY>rGntVxnnK7@ zqZ`fWYu=M#6e6HYciEzVhM^(UY?uJFwPQv)W7$@~$%M$%0Snj?cG+j&xy-sMk5OzAq?wvbMxMsu5@Uot^8oOYBg3TUHdY67<@ z8tU{@h_mSN80Cs7_>Xl4vCxDcp@1)>I#2njE=iMfp^0Sx7W6hwUMiY9|&}9fPJj$@9H{O{~eh@bW$0QJC;`5)!LU&mW?huiaB?Ti{=Exwb~#|VYNfKYYj@HwA%`IoR?*24d;wn^RwLQR=@k5 z$X@t+mv=%0blx?nnJCl7BW_^}ZTyZ42cm^yDwsH<8-oZb>=P+ecpwSf!ZKeHDN+=3 zKs(VwGDrN7NG-EQ8q_cWAZ%IsR9HU$rE!fV;yxQk1zYEg!evC4Oae%%9Uxi=Z~GgT zhLk3L58+Lc2NjZY+RDk2bMk4Ts?{gD@|{Y4a*n-RR;xON#h(1}v4LlY%3 z6D2J@HfE%*(rRGWHq60>$*VE45Xw;`+3a~pTo~i*sKi<$p(b{;Mgwx?Bce%HNV{?nd*y(0>yYVt?cXK4y@uqjZ<$`T{GudtV=6Aojvu}S}WZVHK zc)@RWn|Tv_-3DiP!;w=Khf8GP5vO>?#bt4bY#ZYnuQ<3lK5&kQ+~Mf9_{2qi@_56W z;{ORpdCTpMZ-1NINb5Y_)kM>_gZ+fBcr$V34wor;1anwj;@ zcf0ER9{cDFY&0!E3NKhnzDe*j8KW7^PRt*i@|_7D{IAwzwRV2QYc(f=oZ zg1>WwZ#>he`54#i5wotkrTBCINR(A{8tQV&&^a=osoxJ?PLUx3$R1k|i2VSdAt4xB zct6%41+X!-b#aGbDY6S%nRb90fv6RWU?BxsE-6r;M*}`TJ3mz;yoP%oi zsEdNU$6Fr8aJ)~eJk47k95g-&xDZK0J&eFUbs>%|P@u>{tSyP4(P;&QIUWn?p6EN4 z3YjM@IY8-yC#~ro8N9*AgR|=KAB)K{^V32Sw6@Npx1GU?SBZi#Xopg`mkm)RKRT}) zF%;b+KVNaC5&4l$$wRJ~Jr?m5*{j1nM2t@vvO?QHHQNv^SeN1mr4@r6=l?k#w&I~F zI2&~V5rNPGNkEGv$N~jQs#j7nve2PIdW*v-i#Lpo7U94uxsj1t!P*nSF-*0v!#I#T zjL@ltteGbV+X7Nto$86c%b1LniLfu3Ck1n%;R=d&i5^W*8OhKBVyZCgBPQvSgfZ%# z_#25Z;iOXRlriuZhN%{xfEOiPodL2i=7AN8*%Zl`0;2&Wei{s3RIqqlBHvRJ>C*&S z@D~LO5L>tu1uMf@8d77SwN56 zf(9BD8R`&LFpek?1&_1`SBRQgfXI%~4_|n{Lc%-A@w-AsT1$(%Klu;m7a0LQbK&Xi( zo+(H?GeL$UGw_gvS`f)na1(~92jdw+N17~^G_7MX8py&O8X};{U>cAl57|iq2MnVR z?1k{5jDRG7Evm3BD23{2lL(3`TdN3+@kVzHBzu4we{=}P@S}g(0(S6+l!-x!qNPpo z3emKMfl8=Jv8+*upvh1|4auH=>69jPjwcF8C(@7fFd8K+10OWYFC$2Io4PpJs=V2h zH7pw`V9U$mF8;|LSKx#xSt??|$ksqzdiWiwrF6)_`G!BbWuYxc z!x)1tp_@pl1%v@6xOpOXa7X4b3@s=v=G%mjF(U#B7Ss8y=}E1JdLn;0j5YKfR0GjH zI3pJro(k1&+m!v5^Jl!v}G&r?fBJ=36 z@^B)A5|1Vd7+V+~1M-JBs)Yh8D#>64fcn7hDVE9Nl82N@ggH`J@*mO35-N2YEjcre zIWwjiSdQ^h$-vCxkc=qM8v?;2HkBmzNFc5`p493X{iBckxSsN12kjA`C1g`$kuDAL zLQVlgTxv4wh=Nt92P&W&PdwK-EECDVPTotGQJ_k+X$70*AN!e_4$N5)6p>qYP5A8l$Dl3kfr@CECX1b@L3CACruJlD=S z)I0r%W8_jXbq~TECD!#Cf8+}BLmeu>oyZK+HZ=?q+63)^(Liz&B}g3q86D9iAmF`_ z*kCAk+|9vclv-E2MrnmMxDfS98At4zww*7t$*_aqq@u~N zbtwf9+9Bd-mZ)TwvwgJK+5%~`CZc(bXU$leLB_U&0*Z5-~kv2885hG2}ffR#y^ zrMx77*i?_hK&2O%j8iJ4)d0qalolG|O{(=5fgl-=krZ3tgwOnSxRHs5E1` z!cf@Ih=Sx3oy(9E0f`e#39)247JZG(=?NtZJk;m4FmFu{9_E^hx+m2UvO^s(b_HPl z&{tGh*%;2#lhXuAfQ|Nmz}` zz@RY_7GjYUxr{`C=;Sc;h`UQ=Qoz8hjo&&|ubHF|A%m`_sf`b81x?UEQ*qBnj*Hb4 zl}TBMGMytN-V{g{6}s%z)F@^F9ON7mQF~JWP0)lG98(%i;kd}39E1pHdt{BB&05yN zKdB08ds*1Kh;Tk&#yGssh{AGdw#N&+z>{W8)6) z@s*v&BlD5@Z+sn9@Doe>By@ShjBljZ;ailJM%Lt}VtzNHH`DN_LL1UTdWr&VWOV zNRVmE+&{i!YrD>iln%HAh=k;mYoYM#yAJHRcxrQtYO&Te!A@+cpyqm003-lx#g1$} z`I8-~xG0DOs4!{C-t3pi>wwz?V1n$IKsKP}Y}1CilN$w1xaiYv?F1?7m5T&y7H!wA z?dkB|!rNNg-t7bN?0&0Z-VSaAA?$L~IN?6-&R}eM(`@8!?!2JvlVfV&(1Pl&ki7l{ZB zkC6=La1j4+5ucL~C-D*Y%o0cO6UT59Z*diOaTb4Z8IN%q-|!W;aTv$(8Q1X|_wXF| z@f`>99`A4>Pw^o)avo1|Ay@Juzwsr1@+SZBC=c=}KXNCpawg9?HMubuX0yfka?T3# zn;!Fv6Z0}B^Ru35H7{*1H}f=Sb1+BqHE(k{hjTZd^Ef|qJ%4jL-*Y^_b33o|KIij1 zCv-p`^gkE$LjO;6KM(XqM|4Lw^g8Fb*oz1%=!7aD0tVmo1aEK!5AX%=bWRU-QU`TY zH*ir;^-@RmRd?`DXZ2Hebx)u5QIGXkm-SkQbzR4GRe$f6`x1#*f=;LeCZKL(cWnvJ zI|8_LD4eXUBGLx9c}kvnA+)Dqw(bKliatc8K8i z!$x;^KR;=I2x_jd~f!44|$X)IENnyh);Q!=Qu#z zc75;mm;JB#kwc6obqKx?c6zsYpJzBGn45xFfJtD2pjU#6|9Pb+xFtX^B_MY%Sb`;J z`K7P=e4BttsDhwh0xJ03tY?BMu!McLda|cCC8z=~V1lk^0s*x{RLqCy%&PikNs5Z0!rutDzJUrzx~IT zecr#bE3ky$4}Rbu{><-vG0~m_J9BY zA^8La0{{d7EC2u=0AT}e0RRa900{^jNU)&6g9sBUB%olS!-o(fN}NcsqQ#3CGiuz( zv7^V2AVZ2ANwTELlPFWFT*)$Ff|f92%A85Frp=o;bL!m5v!~CWK!XY$dNB#nqevr4 zNXoRS)2BF({Vj%brcUw(Z-vbL-yCySMM(z=I1PPP{nDuMS@tU(UR_^XJf`OV{l6 z;naj`Y%o1aO$)hr%s|-clrjDAG$y@n_2;zlbREJ09>GVxiE zl?$Qgr$TA6#NVJ3rCF$MU1kU9crF!}<8~q z=4K=TMW(vY0$Q;D;szHA)H)-F+db-KMSxcMCjq)1>FbWb77Hk)2kE+JvBWBy(y+TC z>MXLs7K9>d(3TgaMX2(+tF~kX`BbmQ4wUUf_q&%eAcu-2QAa2<_-+8K}tx$ z1s7$w^2Vq^QJRDlm$Ir!D_dZVwa5f*vB{Y{9h^}TU=yUp7@KS%-qOIe+A7=#Wk*Im zW=x?#5)ttK?RNxWY9e;mh$2+w-!n!aN!Q`JjChq>*K=k9X!|XY7Nhu5PaFUC?K!hi zNP%Wao+B>B;%&G2<==dJDLR^#OTtP$wzM*V5?1nE;U*hM@sbpRn+%!INkjWmLp}dY zuE>-lxA^D>Jx;JDxBF~#uGZd)?z2fZdl1LvUW+}-pIaG)7Mi4)GfB`UKV`<>YGI2R z98@l{*92_AiY@KbPR2oIGsxA@Mvy4Xt`(y*)poo_z&1sp741Nv$nHl#0vNC!{@|Jb z@At6$ZGsh>aESXhIKT>>uNC%4VJno-r59CBUlbb!DPEXAcKE{{tl}WnNI`%M{!ap% zu!TMUY!SlDRE_{ylfudZm=LfHaEVLQg6JyfuvXMVf>ClI{syv%T5w_tO%%ugk?24z zMDbgRO3CV+*d{5MkyTqz$P2SJhW>3~fiW@Fo9IT64iKPX7~=rcIyD8#F%NA^+`=fx z&_7PpEsO-|8}o`Kg;DTtQHPx5=}56TFanEpFUi6>d|?k)c#>EmljO(BtK?M9kU1JfJxF;AcT_K0x4e`TW=DWl9FhQ%K;bQHmw>+QEefQl#SqEx5?u7POvBO11mQ~#5Q!1`toDVEey zU%T2sw$P4ROrb0T7o;eWsaA#_tfEnbQ7z#pQuvD@ zP6429VpS5fdZAYOg8;4|;8M0=!&1Tyt4WxhKU_gg0%)QiL*&GEY$nfy2#m25Nghl~ zQo=bhvKFLh#s2cCl(c?L67{%ZW?NA^E)=9|ZVTBM2_}kukO8hFWFXeG&<=n9l%f@x zwS_J2=vV+E%pt2K$e709S$2+s747)PZMksNfHiPmZcE!hwl)fttZHt2+!q%%!39om zL2rLToSXW$3GlUaM&GHNuYM;uEg*4O{EQOi=DSKaSu(6FWStbo#zS_H(iO3k#26O& zM^c<=Z~L7cDQzJT#m-d|115ukNzt{vRVhpce(G3CH_s@@PNbxq+|?FIiYX{Tk!0A! z?M6WkX)-vdzLSEBTOnZy>oWp8w1*wIkN_!&fgWuo0PY|>VFK{3Nplr24+ZknkyU8I zU8`|eCju{U;>^lRDqfbo2d-ZkjaVBxDTl|FI{n#V%IHDfSry8wFaja@c|slq(&p zPKQD=OhI(SI%oJKy|=v)q>gP+0y*7PE*@pK(HoOM03Z}qhb;xDm332?+$&cK8g*?S zY(*;s5(U)8(SAk=lN6?)1=JEOnUc$IQY$IMyZWMsTuXxfZuk#@&=^gTNZ}3d`U?Ws z0!>jEMQ!cz4}07q(A(kb4Of`2%3@945wyoIN-=?}X(ENUc?O2#oNn_&18 z-4=L#r4lN;P0f|LdwI=4)HYin$M#yWoBeVz#vGAUMIdSmMxhcKT@(1ErpP#1a0wJU zOk0R9Nn zFkQ~;S1b0`ggpho7o;8b$XKmsF2#L0Obc>{o!2m2yR64?vJYw49$&qzh%Q}!rBDTK(s4X8SQ?EtU@RIOf3@E(V- zFC^55i2Pgpv1zjx;z0PVgmf?XtKPod?_A%@U+yWGo(p3CDLElTQ#xr2^=KBFge4NfxZwy1n>*( z;Cp~WfXvqldc!(>Lpg4?e?n9SPZDbQa#AQ$Pg`JNP*)EVCk3%64Qm@26CKd&o5Q9jRf*=J? zKIlrwcP7K9GH=LW48}DI5GEMJd=SSuD$^Zh=u!RuBW&zO00(tHnS*^oxHlYydWdKb zsU;FJWoMkXEa*`kSu;lj0YPLiM-s4vtq^RNHU<86MXd-ywXg;KWUsqu_eYNCsQL1(hQv&{$jM_EZDG zNjIc&u~j)*C0L}u1-0c0+6X)V_f~7=R!g7>AV+XxV~g6>SO1V%$yGbhRB=*wSR>eQ zXC`51)^82x3MzGmgmpC{ctZtf3!Kw4p0$mw;13a`QbTk{BL{J%St%xL6GuT5#8>wJPzoDROjT71r{ps=_cdZ90hthW+sF<~ zC=jEt2_UyyHu;Y-=}&5CvOwR zd-=sl!zMEN<5VKkO2%lAt{`M^iFgL4Qo|N_Y$I%~=xI_V5ND`(6x2{Owv`0Xj_0!p zqtFVzFpMt*X#O)c@#GP5qcqv&d5-frZsJPi#X6ise;hTMThL>(<7uapn!W=pp|gZY zlxf3MN?xZ+obwWINOGm)gh9w`{#8m-&^MswMtoQXZqiDm)CLw31)dW+FY<;o2v0k* zHA6II*i$;Y$%mc>QVceHn;=r__kr#Ia67;=JIlmT%p+s8!!=t#3+uUmJ!A_!rUXCM zR{zsbx#xAmmu}@pVVtmx3;}&Yv`iJVf!l+fw}gS7hD=s8iB}^DqN4>o6jpwNIj`ht zoPph-D& zSPSi7S}O{5i^+O<=?aSVI;lhex>N@GQ%p?;IAh>S`BWi(lLTZ4k{WqX5fC}5nM^&} zG?v5)UKd2|kX7c!3Q7o498i5<8m9bnJ9NlDUBgi&m26UAX>T@9g3>1NWMNm+KP4s* zpvg~oH=9EEhZaIH5yYXGClT%c!+A@gX4j%-L8(-x(h9YZia|+L94P^yMPo@2qP_r* zMph5}rc_8oTjc09q~H&dc{;{ODw|-86I4Rs#%>x%RaSL1`^S|2)I(EdSkmMV6gq8U zB12TQkpKle6n1$6G;OiCkyEg$#)u~W_EiQKj|HbBv2sJMz(R5*Z?*tn+h&Xgw2rAL z0j)Je88dMDCTs@ALJw4NVQ59|MsG=gLjUk>DHdIgRS-`1c6H=b{Z=73^fmiO3al^+ z(p0F3vCd!q%U|sTrj(^tL`vl*M4WRuzj>Q}vtL4ly6%=wS;1)K zWPy?-1<)C_8VRQ-27&8GnC=HS@MlcKr#M!0o>D*y{ZKnHTAh@mO9FvS5*oYa)`Fr_ z4$L@2Gw5!mfS3FKV-Gsj5VpHMe~U|*)JY`q9g=`54XZ{eb z|2SA>@Uo+TSeG`Jk2!n)z>fENh_!RetssQnRu9SrTMs>144)Aobaa6|>z_DO6Or%9xB}T@W!!;*Ufs`BxF7}A|Lw5tw zO0{UjPRomw+FGPV0Hu&$T4{`&FV`Gfggq%Qti>Uxs0>Ak6F07ME4;X(dXoXwAe8HQ^O5$NuRXejf zhSIc58W1b%2}CZoWU~{U@XAruTb&Z%Po-osib^oW*i{mpHx14(?#RSdZQ^i z2arKZwl6GR6w5U|`F(RbPpCFLgDn@X>v&gA9Rt zQY&{be7U`ahxs!D`H#Y8rugRS1xtMUm@^*BT+JGrt|a^uLWLWJUX ztZ!zLT%c?e17~ho*Each%HrBrtx#-zRdDJ!Z*Qeiqp$_C!)~2YA+_baSqIH+Buywj zcKd=`WD{EsgEayBR#&sCZ&rCt(zI+)6-u-}c}^l%6K>gNb*xZ}77KJ4>knK1Fa_L9 zK<0x&_KGrbq(K8Q2ANf}ZI^2n1a&lqA-pIMNDwRUOb`S2y>s++{Xk)s{sP-1h}52^(r#ECD0 znq}CviE3ZAzzTErx`@p`0#SaxNyzaR-R<401aO9bq`SLhjP)!Kj|)u$>PuPCgTa(; zwJ^VgUDJ3awx2sh{Uf}@r%Ts%@OKHK$!ko@+q}ZAV8(cc)wy5X89`M4O`9A=Ris3c z^H)gl>u?Qd6qIXCtzd)Ug}&YmQbZg_ue8H{DmDlIPp(%WPib~a#OZHi2duGBWmuSP!kszrRfq(Y?*=i$Y3%i4@G;$=+Dv1Ev!yjWJqelNKLg268M#J z<(76Yf0dd7G08%b_Uze`B4OcD0waY=5lWzED_5kX5=feaR6ARwTCuXlaEj6`qiP)` z#l@)vt*yGYa_i33LUQ%CEcC}^!X|sACPabT$}8AbTa>VsvM>oNgFu(Ivggk+Q>KU^ zGL2NL6&azHr9>g+wVgczZ8kxb5M`9x!ChBM5!H{(1Oi+CNZC^PROl#HwYIS3nRlj? zQML-x)GQb-R<>GL*@JugXx5gtIFTWBwqf&8&;^GiqvZ3}T3&Ax2+vmOCbuC;rH?X3 zw7=-D0kqZB(cN?6CeOZ6;os?i3nVT5i2sdDlMxBBw>ZdRyI)&qSfjNivWAt7;7l5 zfIPB|Eh3O&MlO^{APFsMj37ng>S<*xC|!&~s#@9+%%+T(%+Z#1+CYzhGNe#Ii7LlX zXd(QPVvj5QHnEBf0;F@-5!RBBw1r1Xt5o*PP1tBbR_qRDm)yKA5bHYxL{!lvDG&pHQE zYTQS;$nZtB_#{9Jc6N-i#}}nI(iR}0vr!5-{WX(|V+CeM+ z0!Lcv@x2Kcd?>#U?^21GmKqAH#3Ab2LCm!nigL^!MC|a&!;YKqut(~9O1o8GND}DS zmRd2W;9dyMTBI<2?ESFX{CL+}WXkeDUB3+U=Hq@`sR}1tDsk+W0u*esCwv_4?q8>j z?(Gl1P)Z8d$6Wl^Eti{p#Q=S~%RtXwh$p0!8l1Ar-j3b+u9rQdAWt31DJ4C}Ojqz)OdLZUBVJ7E!2#qP+5E?zClsj@r zC@+EG%3CiWl&Btv8w zqKsryzZpptHDnbGv63=9+z>21Bufan(v^-3(I&{COJ0&fmu1sJcWBun)NGF@wOGOe zaJfuoiqJCGOUxF46uD-CkwBRL!IGZTxW@@yZ=2NwXE?=KwH1|fM83imu98&`&9otj zSo{r(K=iAn_$qR~s%M7uD4~7YF`tE$XRq`buYX3(piH4xBFP9Lg(g&0T+e@2aW@=QbGIFPN)WR65s#Ee&W~v&3 zCiu2GR7KtJQLPLZ~T} zru#H(4GEgq4jnR|f%R+uWF-rtNk-DLalBemC%ak6YL>H~tr}!Oi`4Z2Z?vaHZG_Bu zR)F@-wSC19isp(?2(d9;4mA;DLzGy2_U>zN-Oy|oYtWbum$tpVtw25cAmlc6p0Gu0 z8d>zs;`&y8n_Vt+H6+}^dNsN>b*OG>t3{X^RJ5r@Z&`o)TdH-?fZT)cdtVzu&n|L& zilkwEM`%g+ZYaOC?J9X6q~E6z*sAd@Fn~Av-vb}c!0CnXSkIbW=U!K(z#VTMy&EAs ziWk8r#BFjW78H+z zMPb(T3fT_7^}P4pT62Z0;TW^-!q4UHo#%{L?+yjcCWe}lUt1+eUim}x%BfyM3}+M1 z)J1)rU`4lkVNoJDq}4ogKEwOs>ROmX#jTQ|!#wImuJ=Qh6m{0Bmm$ktQ)&kvLs`BxkMwwBN;x2k^vImJx(^PW^*8pTH zskLp>2~YQiB3)nCHd-P^M^}wN?jB~PYr|02rX8-BLZxvEU*sB@pkO8Ov=9AZJ)aQH z`0Qg-f!tdEeHIOJSS(wn=NnLu{`o^S)-*q9Y*#tk*@jGs0yzeW>@kOwuOSwvZ82nT z!ctnhL{3+=x4m+#RaVIlM9o@=(k-m0Qn2bi9mngYoBU}+2{gyhQ{z^X$tXMKWs8Cq zG_v&l;#}AoDkf8uZu4EYZXr`=deHa7MXUo|i>}5>B>J)et;-y9-SQhnoA-1GadGWh zJ37p}rSvKNTIfqLP=3CC^rg)G=bny&*HIev=20C)&kSAKvu^FudYa{rcjRgx3anpA z;Vfh*g>fdOXh>TWkZO$&D-0v=f5K>9Fp`4D-gA_AkGrtA>ifId3fdl_#8*v-+`ihpM24d3C`H|DHEE|GV*(1&8uGHSUzLiu!VlY9)f2Y ze%qg~8g`nc9!|3&88pFS?ZWqtroa6tltf74TUx~7{v(W{unB*$VOJ7x6M%F(zj zfTZ_(zKZDzG8me8y9_3|B3B4M-s`av={?(X7-2cTjzb~fbCKe}k7ALQNkcTqGr?wZ zBlgjat8xiWCgCJ<$0brl^U+aJ;yKii}B) zQSgV^ke~jV9u4V|^cljv(G0_@K&V^6_JNGyp&#E_3(DC7Jh=@rSgOhi!{5Oh=qQf= zR)ClMx;p|8J7+t>G^B}a@)%XR4{hSHg;Sg=q!7H>jK)hg4xz#@>=NNwjm^-H00X;) z$UEZWDa2S1Qs9Ii3<~c*7^u zH3vJvT8un~;~qHLBCIF~F1QVi3dQvSxPm)9KG_s|aGD^@MH`BeWa$bnNSdMIqo_z1 zo`5$#0pJ0;ALG_pfE#FCwq4cZV9)1oa4 zS+=D}glyusq9UcrVM4ZykS@_JfaD_Bs0SxxNg4zVdtil8@CB8?OQ>ibv1# zAdB)$W~&8OFrQ#7CGYV$JA=YKc|`up6a~X1$`Kw{bO-cPsxJe~tQ5}@8Z#5}K>iRt zav247!wO9pL#d&dD454h7{hM473(93_tX+Hu?I4kg7?%LF7c%Lv=Itn5Be0of%7~r zf)fd(O6CGStQZA0Kv08;M~x^+`b-gwnMX}fx}}%|{G3nbpcsaXs*}ZO8QN8@U7!d`~9x+n-q|dC_q7!vTjSN8llCVw1K@9iA$I1af z6Lrrr)fY|3%(9@+8hf;s(zs1Ptn(a-0|gZ_Xe%yR(MZ~o8?hZSWl;{b4ddW~yI>R4 z8_}dF(WI+WPDNgKvs(jSEqO`TI0S-N@ArBRRqPFRzkq`=}* zx$)Fh#d5g!DjS~KsWJSLz6%N|I2yOu4BaRTT6woE7!DgOg`WzEtoV$9aSP5oPV_lT z9ps)OG@aR;p6Urh#Ml%&F%HgP3sL|QQW%4fafjNdkeaX)com9Br4i^@38m12+kh00 zP!C}V41(zvmH-QbC>B@n*M)c%RiRdzNEJvySL_)D+2|4fH8c=20V-<3oVN9Gcj&@j+Sb2_fRhcz8m0cl&a`+PTTeA&4 zo+`1%c!REUYsnT`l=ldkP>}#U1rn;@SIdonny82WGT?+9aoK$}69731?yKA44c)9@ z#anO(;Drn#Aq)1vqU*Sry3r+mT?rdkKJDrsqy|slM)r2ipyx+0G&F~xlzVHhvAq7yni%4~15vfa}`&OdLPN5D+q$W_K99?%>RtiyYC4!;lz6 z5uw56nTYV%ImYmfUvA_5QIPELh`1{VLI%>jI}Ca4mMN%-+UVnYIEqQQ3#1^5F1d{c zIY;YE5X5+7BP4)i_QX?byeXz)@svFOK0_y9VG4C65_z#lQIU@To=ok*=t_MU{_I>S z!4fGLmoI@80${~5(4I;gBho{tiz-D29k+VBzvQ#h;?SrBoM1>A!{&I~7KKUxe2y}3 zK#7c%A+1#6(8wfUMR;pQhA2tA`{;{XF-h>3nK-?S!45602P&wiE6IpK0b*1w(|*h+ z1qGb}Bnl~2vEGW`8{*QZR*mJH6kQ49TS)-^YlS(LgfaMEuc%R!ChJPYJttnWWE0 zC%x|91el|Cm^^Hj_i@tD>Y&AA8tezr#w!t;J z{|UtBXahDh!IEH&fzY=oM8n>c!?BYelHD+&qn$@VS0peCf5qg@*a9w) z1a&POrBD{P=m}CVZ)2Vfh=>HRKv!s0??lnfu}Qs6LOca<4oF#(`F75#1Vp89S_!eW zrEN8;FlVO_ZX#w041b~jD801shQZVo*K+VT`xCKy; zzEFwkq-F^2V-d!H#~2A6`LqekjS~5UjH(zz#-IR@))z3=p& zU4$d0#+VqIfCP}H=wk?T0YG(ijZL_s&h?a9m6D7MrNsdCVHc7?QUYqXizK*DhzjhI zu?5jn#_Y-$%E&nX>oCNs#A@qti;^tSUj#t;G?QIN5!HC@Ow|Hm2laqI4lU3)ZXt*v zaa~9vNLr`HD*47rZAUDk6n2{ zYGu%jWy+5_hyZ-f_>3#E@!ioSy?>IpfBa1>6$kFimsO&}XyX>A3y1XZ<*)df+f&x zEFxh`2M8$=q!5%qz#xHy3KvFLNT6YaBoPxf8~{~7s=w3Dl@tX^9CGX!@#8}RQbyTg zHQ`_q2`Lqhspo2n#)t`$Xklk-)WCuS6eM9)uMJEkQrg+tlz>1>pg9F9Q8}t!8JJ0= z5GZ;yf)t-*1g1=~Fo7fj^-iixBFR?04GFW>qo5G$(>78dCYedVYeG%6>TT`lccDay z4u=B$>kwkX|G+9Es+3}L)XXR(O)9B*bLqf=t?X@$AQ>uw1S9LUk}}gWDU~f-ZNZF} zfTUXXw!978P(l=utn3vw{1;@ywdAb&W*CxgM4kqZCM+sJNn}#CNKH^;)>b>R1fp!3 z{`~IUp_c`cSINC38B$xgUPbCM=;Gr9c9T)U6S2k8$^(le1(hf%3KVA;UWnZ`Ac6@h zxFCZKI`|-j5lT2=LPr@S;6e!b)s+-eNu-x6rL9NCdP!{2jz65NM+!TfO^_0ZQH@w) zR{n7Dq6CuI)5-=@jp9!!Tu8CSCSy?Lpobai)yfn|cG#GQThwEVibHM!UP7bP(u$B! zN)ZJq|Mt|f#d>3Gvc*)IxKzfFqwF}wRFTx;3Y#<4T0i*a5asQA*l;RVh<^5HR$1yQ$^8A zD}PFWgqE!w6vb|=tw+F_Q;`CskYum}B$`sF8EczU%DN;O1k6a4XO3<$g;1<+s>OO+ z46B}#hboi^E3qEb?UP;=+KMY%P2nLc>Dp%^Q79#3(U`P_*AuMMN@1oJUV*tInOq&2 zWi3IXRIW%{Naw7f21T%>kn44*kS06Y!exY`9!eEe%u)C;$RUe7GRY2R;xujBF%IncChBFL~sc%2dF|P zzNC?H#kE{lS2s@y>qX;AvB_q(l(N-+5lG@wE2P-UT4U1vWUD1Rn6+nC0%Mlh1Jfw=B*7q0o66sdD}uW*%(Rfq?g`$|D%#! z_wgA8Ha06*A)D!t$Ysh)S}UT$leG}V9&Cyb*IZ^04VkQh7Q7$^GZ-NOSqMv^2^EKu zM7GcofHmohM7VNCHqCWK3uLQGzSi}#8%;$LZF`clq!T)1Q80ClS%_Zt^dKmC2}~qx z+@GkTxGkA2eXLp=37HoqQZTWEEF{$kbJv=bz>E`3l0YJCRV=S0VHB*eMMBh*1SOD- zaA-_OvF1a#R$PfXNiw1qRl+M+U2HmBm>z?mv=AwrsuZeP5D^ojk^m;ELt_Y_z_gG; z0@Ol9DZwMGHo=M@HH9WRM5C=_^|D&T%Yp-JSRHSS-~hEAvXy?0?G!2oWNKJbrg|EZUmB>+|ctN921Gd{8b@^ z#OF5Ui2^J=a+rtkhb0%u2p|&_oUQ;zBm|8@J(qHqj|c`gsNF2li@}RW5BgJilGLTc*+Nmt%F&NV|Mf`Z*=TOYRLJ!8L6&?itIQ^Ocg>=rCL>_QJBaeGt<%SXaYN1Xv%}4wpO`PR-Kl;EM_yC zkRT)>3R^Iv88yL?g!a&$35n}pP&-JI)>T8KU1)|vMbIP>bV+=&s9{X&kWpDwwJxpf zZw1uqc{&K0SY$K4?2jw7l7(E4N*uW{B4O+h7Y}GTDA^iY^Ro$pDC}a? z3Nma%e47Z?#ijczOhi|uTrNu>dlWu1n$wIV3`HRdkkEoCSkdO{s`-MlJgsd@*5Nwy zS!(bV$*J0~-98fvCwA@zWtI8ayFJyHtK#0IWDYq{r73y3?MXa1=8ikU;>pdz)1y|Y)(hzp@>+bPttW+MXH^LJRAq|T{3z{Ic7A{L- z&DurQ{v?P7UyNBMgKXfi?s7{d;c;2#WQIP76l2+6T#?vWK5u9h);rsitK_Ji zUFIi~kKk1*cM0JgK}Wrt)gxc;b%aGEnqbG5|9ms@b=Mi-{dRD_@w?vvAw5E+NBhwu zT=>RI{=VZyeQ`KHddrGFzxfPVdSl<9fIlhBt^YltNiB*@WI`OPSjQ+L;g|LR{_tsE zyWue#>lgPpWJuOHWfwnT5H}=c3T=Mkolo8@!(P84R=YgO?{x7mKSEfByJ0xK)sKL1BcTn&Vj<`29u_uEi#h z$PYFla|L1A>7A1`pN3@NkJTD*!Qb~G-ncv=gQy{5SRe@2;e>Dy5_m-f6Z3smTukNAs(TFBx3CSnYPrz6kwWr1zZ?j*69(*4;@K&2vOmk7j@C0>k-<( zte589n?lf%*hH6Bjo(-$Ac3vi_|;b-Y94E)7bw~xE>e%h+0xc9L~O9b29RBb&|GJA z6_qie6o_1tjf?~-hPiBkBxnIsOa!MT;}l$Cer=DnB_oxITtvARNP*liQ40{F7?*8_ z!wp2VaYXeQ8U%`jGR~nn+Ql=H|Hpa=<1kj-yzH3o37N~>1*1re6tLjjou5A@VFK`5 zT}6QwD5J^P;BGnNQM8#fN}~oGiHi-HSs5AF5hFJe#3U4*i8UiVMoTnG0kudNW1M61 zXo5Osg!>)gE#@Lk7RN>i$k>$=r-jf$JR-UcBco+g=!^mkEd<$IiDiWlH3^M9)Xf&9 zm_m>QYYdU5C5fAy4N;(5X|2S-2-p-XKywAj`Yd+)$#ghp(6rQyLFiy|o z(NkbVL2U2^`KXkCw1ItG;NVSR`Hi8mxy;y%0TuCu0-WGyu!hRHoUu`(f3yN8OwME3 zQVuEvSddZ=dc<@}#QLy-bg;q(xEd8+A5v|h<;X=+HDg3b0r`-DJG{hmd|0j_#ZbYd zQH3XJ_{8B@+^wx=)Nn^fz)U;*QE_G&l6_r8Q3O|{O=sza{hU#Nd|whi8#&kk7vSew z{SWqVfjig&f1;lc5~yu}N#5Mg6k1_H4k!?YCsu3*7nFi`oaPlC)l9Y~k2-|keUOuR zUa9<{00rWPc*$6@|3f{PQ7zR*-Vy_KMCc4yG;u2NR%VJI@UZ$x* z$QN+63Yh+o(2xQr+(O}SmuayIZAr@(FyvW&UZg6BsCr8)_`@dHsI9Obe!WzWCaY_D z-&ar#MNsH@qUH8%$E&o1a(-r|{)BA;7vQ~P;l&d>4j#>I$NDUr;&EqsHla4g$8T=I zPwv=j5aVKy4;K&xokpZSx`$j4z-ek@ zLZF7D9*GgM47v^!h)ru^Y@&e39UP8Jd$eE-UPT1e)rqhPlx+vhumc&K5mLULMxNGi zaDs4oq`|sFY49sVCX`I>ItH`00o|D)ahkaCW~6qJHrGA;xL5u~;ySK^A}{Fh3ogfyixm@Q@1b-WP4i zZq>xg>vEdxhEVKU)bjQ%_+rVIuw}nA2HmcQG>SyOti@t>PxdmNMGY6#_AiBapZ87H zL~>4Tswck+7DpxRZ_dT~xWN`ggl>Kl4>X3)$ZMTE9Y zjv3nr)Ubsb1BlN^hX~6>(zfuUEKCWhkAEZ^b#xL|$WB7ok5HuW0_;eo{E`pWeDV4Hqc{o;IWFUv zZH>cPU9?)Q~{_2Ox9DF4UvdW60jO4V74pRPGw99ZJ-=&JljYNjYvI6 z^$^+2`o_@SiLsr=I-o^V_(x|bw@8c)&A5*wkiu|iZvk}{_Dq0ylSAWF$I^Ta7jVLs z^k5l%%@$08(4dKBWblxz*g?GTHy!t7py$WvUnLeckoyK8d7pql{~$(3Y}a;a+l?8c zjm?gb!Oj5KRBUxRgSM@lG$dB=bjVOU*aJ9^gg>;;N)Sm>cMeD3?f8yjL@tv}@REEr z#nN)dxNN~&FCyYPi{hqkuO^A6#k7KI?2M7}3aaS& z%Fre1=CdqOQ&X}6RbUug%SkK13F0`q1S~pRT58NX>Wd(ZDD*?DXiD?Ai5+zaDjLg} zoE?Z2}+;B?*j#S{|9}<8(;4O`ZPRA7${^2% z=TYo&2j6&P#0F=a$(3ZK1gLm|p2>XFgB!pEXx9Upcm`1t)sQsMUL?d_n($Y(RPFG@ z)@X%L*u*>&g^HYsT-Phe`db3S7=?ak3uf$W_3WXghM6hABw&ZJ)B-(l0MyV#n}Y>f zI1$a1Mr>mTq>%Xt|7arLuTnM9!X3cS8D#1esK52napL=&WyotDkX>7+fG)_T{ z26PKXLXJW|C>{p^d}2TfePz)#L04Moqu)VQ=ne{+0YJSW0e|Jg$~)dGX-i#7;y{Ia``esU=R z7fittoV<{345k)ojd|)nZ%jzr0-XrVHv7YfP6+}XIvGgHT(?pwqbbgst$CCig&$8lMB2d$ z`WSTWrKJgJ9J-X)1GRH*68MKdxI!z{gD-dyKoF2XfZ#xa2N5DnB4y#hD4S}PnvzgT zLV^_w9+a@K;Xz6DT5aLTP>QB{_G}SsXA7ki37hP-8aR+t%p?~Hj_OBd!cByt`jy&{ zWFtvZ{@mGGxzZIGB~w`W<1#^DLyQEZz~pIB|DeW$R}*qXIFMB`e+J z#ClkjOQ}__3@0+1#%$UmMFD~7WUP<6zCD5TdP5^f8B?##ln9U8Nl@~z7AvZ|qezNN zMoRJ|#*LF=rA_?XO$&BfA!R+MBDiTKQn=XUy6XtYEw$a0yUC{rG-;)s2`p4?qXtJz zB8pK6@QjpNNSR_1rL=&E9WIpUO^bHi|JWiwTk6@O#w502Pl^ae5e~cwN7>G}-9${H zH-y$}!=(^Y%TT$l1hl0;$9u~pN?z)XeVNZ#Hd?H1G4dJ3rfsMY3a*Ey>>@BV~ ztkX`yilm6Ej5D45&!;E|_^S-CTuUyYD9Eve6WB5&z$Y!nv4s>6{gZ+nTUbFdyD2Qp zPdJepY|u+fBb;!PtGsN5E;P#H%5;U4v&cviEasdF%{bRSleC~fC5WQf z*_dtC*=M1RR$A01X{8DVg6OWh+^%X1p)J^{Wun%Kl8h+MNZA4=vk)T3A2LK@=-Y6& z=!qn(7HY?yz$&{miJCMcXpDmv|2RksR%+p5BX0?cq876f@D{GjnB(iBRysrUHHHSd zYKvCH?MpSWI2s5={>W&Dl|sLiVhe;7Cd#CcfLv*cqBMzVpqFdeVj_)KD>orcA`-bZ z(maZZV}v4U$1EkJh=Na*UItYHYK{-tviBB{f_|Sq9B?b;^<}V_Ms0zErt#nj z>omVck%BlS%8HRDA|b0C1bV{h$-)*AJXUOneiboMB!Xl-7nUeJWT=NL>IEoMZ7PXR z?9W^DBP1(A>x(5^|K#Z)8A(Y_@>#8@1Qnhlg>g}2ajZfZ5Lv^qkt_sV8`(llO2LJN zz{P3pBSoQbCY%(tqAY=Fhd(s4qUX@%W0s<&QV1{=t3<99Z6JjKZMX?m)WjYs;?K9D zVv9DI>tK0F5R165F|izkXBJb9;ws`Td!S5ZO884HT+$(mc}QHbbcJR-kvFD;>sb}3_tFWhc1_GH=3W$ru@6 zS^0#ME`Nm}%9B*)t{fY?9fW9U)3ZgSHb8^;B+l2h^H&Hp-~k6(Eukx4g{+8?!z_%> zW1(}@z8q7464|E2($MF;TxUoF8q-V8Vi4Vy=uuzf&16nUZuSaDy^c*e%uof~Od)klzzys^*su=WE_C-RA?&!qLH}8Lwsex6sCx8l6Kb1o(hf6M z?mF$R6b{z@zAv)Hd#5Gb|NHh`AGxg07@XlAx3qCauI-99 z9NH{5UB3NikY@Xu<~6suD>}i1Y!RRoo}j{|tzxiG+PX^LHVvY{i4ednt6Sgx%s+{a zXNyF-Nnf>Ta&pDrz=*}v6{PnSq)@ogA=dI|(&)G<1aEXi8aH5EI z-kkk!qS-HM&bsvPcV}%<-&f@anHv2(1S=C z&*NI~#_EmW?lAY3Pvz3E_h5thG9nYPui_9c6r1IrNYU+{h3KA75Y>(E8nG5hCu@X2 zTY{iM3WgTp&hID*7`d+Qt`F(3gmi>3?v76DToDCJLpG=mQvU20|EEzIV`J{rDjFN{ zbAZtny>VK)&FEy1d@K9X2yP%r2q@z)QU|R(fRaI_sS62ND!z zISJGXW$0W{UR=#(qJRmj#}mg2b1uS(W~lLEs${Z8gJg?*%N>EaWsKaGFO)Wb@!ilC$QA zFvH?mNTy?I^E2NL3g3biL}(DX@fi)XJ7Gg7b%Qrt4XGB)S~(66>-m0ZtXu!rB_7wy;83Xbs_H>_5~azBmO$Vh2AUq8;R?-a>=7>`Fb! zfEC(PIiJKKf+s62uC};jM1rRs${;CfrP=K2ABjjJ|7D{?Gm1G{%YEV#SH1*c7_`~W zZ9H$nLpEUJcuRnsgFV%RMzbr68pS>=1oa|iL)61pIOvfQ?1&!373Ax>JZ?u3<4#6M zJ1f#Vwe&b}P$Nxk&x(xvI)^itW`#z9LfgPOWzBOk3bI~mjnoR)j_RwF0=13|Up(g` zNMRH70-uyHa_nI$?v70>;xFtWxMD&%mj)qHiVfD3Oxs5;IKdVGY4hxcPdI~JX!1N? zb0LN(xSR%1)&?j#1!Smf2Z^jtdImJebaBkI6&eX7MeSO|Q1iD!{{dCV*x^HV9Ck_=ID*TnJan6G3HXSez#g z;WAryvcF73eM~Tw_P0P(?&>L)uX2rl<%b1~WWaQ6UnPG5U2B@&aH> z1xC^9Jbn@b2?a-MWGEe$F?OUK#({;6%&jV@3oBOPTft)Yo=su}WpF-5 zzRK|pXQEs$VnM5j+i-AGZEi5B7FugE9GNcYc7`!!icqlvqLir?bggsD_E?Pby-Z>& zm@d@L)+<3H{SHqiIr9oP0w!!h3#bP>|7`(IyTWd*4#hkQ@ZRi^b8|hG%8*Aw1sF(5}45N=tOFCRuWt&JjrKk zw&Y6EV}_)_djh40I);5UsYW7G6DFV{G=U&;D-qSAA_QrG`&AQ|5JZw-6MP{)%J5Fg zu);8t(rBkhSOIqgJZz6q9 z$yEY~Kzqn)GAMw`XA21UhG9r&--}N{6e}d*dI=zieb{9r0XnGUJ(OYr=8LkxWkPUh zKl^LTa5ON>a7PJrnYMrv+F%oCr-{i`z2ujPtH)}L=)vUIWi-K`ex$-AQ<=htZVGiu z645UYHUT0NBeZ}Nq$FjsaCS(x9^{80gg6|_q&@JLPfJXU36LT);%c|o8@;qkOGEsO z?C%lmWi}zW@q$bB{Bn) zOgB`8S9DPo|1@P)k0WplLOO5=oH*lheAyn_X(Y-drBn7h^CdVf;s#FkhZW{)wGkhR9efBZmLzW%=0+#$5e_0 zBy?ycwqTI*0$hcIM$#iLB1|s`fH=r!Js@LY3BY??rcn^uTXCg*c-Odg96A zVlFah#bgE~ly7FT3Gimq@UXKrSEEzQ21wXpJ*R+B^j3K=qC=V@Vu(VcKthxHq?i~3 zJ9|b)YC=oaM1Ly+0JG^TV!9QSpci5CG=dW?^a6-94I?Pm)!+gp7E?^4CZ;>OD4a@u zrl2PL#ZV{YHUUJ|V~ z=R*i|73kqm7JiQXq1D4v zwV~1_FDxZx(s^Danj}i;CPu**I-$xZpDut`m?odgzq>_9{gi-z3ZANWBYg3IrzOBw z0&1!$v>y$H8Zn<9T8;WBGh3;D`y63Tc6NQNeHBXtV&ro-KQA zq(~qTMUt&{5|Tu4NZ?=;a<)h%aG2zx7IwY_dR$0G2>}99C|bn$Fv_NZED3J8|2U>z zn=J~GMA1~M-G&4sql~J>YJ!r64@Z(5MWBp?2m~Vdlqsd=!-rBg)nYe6N~?BTl<+hP zHmumG5RHzi_*HCJreK+peRz?;rmZYDNl?O;fR=S58xmbvkBpQp?JC}lK&qkwB?%X9 zNU{;+rcv$MHeK0D=t#F}J8wp5Gzx*O8@z@+IJRk1lo(akB1OhsD|c;3)f$PnDNc4A z@Fw|9s$Lo2!OKjMayBzwDXRiYk&>9y;)}(fv#T|?-BvQ%qZ(B}fG5!;4S6OcQ_of_ zze)P)WrsGblqd&Ld%ll9zyAICIditpUw{G*NML~m9*AIq3NDzIc=9D7{{=}BZox_| zQvi6HS`m&U1%wiAW|RZ~01zI8?f3)RCS<6%#S{^ZqzM6JOaNhxqtsIiCuGRTB3N7C zXpo0swNei$Vp;6Y# zg-9BOoN!@DVozpBuBinpws68lcL#0wqJA~R7R58L&k*$JtqZQZI&U$MN{Ea&lVu>$)+X?K}-O=B`KECm1nh+ z)pHWuYtls~$E=Aj3_S<01W}M`%O)2=XA3J+sY*TbXC81C~kKO1>zhSM!kVpnn zomYFLfhQo=du1v8Q!P4JX^r2)=kA3#qZ_hng z;DOiP_p)9Z7O`d)I44+Rv|`H?0a*Iyse-9I#&c|nQV%CIUJ4;Q$*R1CF3C(T0wJ2h zMzX4Ukfc`~B8)8pIGA#cL`k)1h5dXKE&g4Ka^2|?s|YX@c#)|V5Y)n-qOb*KkzxbK zqMU486hTbEs1~&#*MZgq7Amm1tNhGVLZgXRu%lrEV$CaqHxM!aU@>IT0y%QR1}YJN z3rc`on*=i+m=vZRc^l2TCML&$w81W|k%S?cNllYMCq1xfg|LWX&BDm2cuYyc>sWKC zxiE=J(UOWo64(k-l!2O=A_Y6+Nd}tWWiD}|QafBBK&EV@BLx9ZS_1SI)qqWH0(#4l zX!p5zwxKYc@=6l&CMW__h5$lIKmu!%Hd|N}OGdH6 zOsX)-%7_%2m$ZTMaVSPfC{vJQIhBbABVch2S4_hur6Mzx1M`n+NJ-bc>UFOKbI?KA z^hSQ^r9x2}P!IWKmBO@QX-5*xv?_Q~0!#stdjiuYF=dk|kikwPi6>bfTbM=$=^%qt zY#VqbDfU$cckrT6oKCtU`w*rTA;c`E6005y@()m~qSTQ{vCOK4!_l>07(+FTCfWHSVam?T`Dol|1^r4q=1v_+CsDqp;Aa_6roxeB#z>>r{!u( z5}YVDBzVQE40+o=ymn?!iE4;zT2Y215UU=SmG45-V~cLJiJB6y%5fp26~)H07MFz% z`$m%8D?zIiT#!_m>XpgB`lw6wS<{9n=h;zyh^&0g7s~|O;uy<##tCX=*1$rwwn*YC z8-Uz^d?&MyMaX0li^v5SzqWALv9ul)I1|I8kuvnb@HYithDb1b^$NSjT}8557AKf{wPv)OQ- zSybKLc#zdC$*6O-42|(+pZeT-*Szj^%m^Sp@csE-<^wT-SgoI0)7djvHf;9vs~`=w zH8`||_I;$C!&b1Nd;IHZ6zsV#EjbH6*RwW)oI6Gm9thc}G#tA#bZs0aS38CEwZKFv zA#>Y%-~5)|Ds2qZyxc^Vv;?KH%}wdMM%Q6#$&0cX-c!%m)iSYG%})ckGMR%@53i(%biV6uls&lc0LZ@f`-i0g%8*tlBAEWV{G{AUq9EY{oOGc z7CLlFsPRUgcWNz$|85*oArhoL?uUT;7clsSZxBd<`}c3G6iGhU6Ix&pH&%fkD1JDG zFR#>PgHba6a&hhfepwfBE7(0I7iLHYf-{IpcI9<6h=X6}SB8>+-c@P>qk7>2ZmiJPc>9=LmLxQBSSAAvYM$0u<%)fuLkaDIq< z|I&)VXN9E5|B17hhV1u+w1|uMQHJ6piT;8BsR4nt*NeGGjK$b*Y}km#D25jZa2Tf+ zWyf-RI3NfxB1j-`AQL?{b#W;;g5#HgWx*zra2Kz*bINFr=Qv}8n2hMig*#Y@JSTd3 zhai0B7l%S^EH-+X#CoHrW%KxSe_|9`04>>-kFJ*=!^n;asgTQdb_KpY4_ezz~FiDpS@6jU;D2mwGQsCk;OB%c%^ zT-2KJvM;e2Gcv@1Bw;Lb@*KN4C7-k^mh)u>S((*YjGAbjW*C;26c;s9mJifXU&T>M zKqd>Z1?6y?7cp=OcCw zlG&-E#Au6V5$ga>0Vwsb6oVV{f< zI8XC7OEM)66dv0&6VDMGg)=jxAdpo>D6FsmA`u}dLrkwUYak;R{*^!-(_l-&{{g@+vi<1>?{UsFDO+Kq$WA4_t65l0X1A zN&uyBn@m!bqX8=;fdq8|JetWZu^M**Rw{TD7?9*zurXQz=}072fKoyxtnje>89mRe+BoARO_vGuJl+l5RBv*7B9TO^Stk~Cd%eSg`K zt>ZHe@l^y?TkLQPC`u@#5CLbQEVVPLU_lE6zyS&X7YJ($Od?qk!5E06|C}l!6H|}? zfDx+%dS<~P86VjbN-Gp3ND?L?w(ufQ^k4@saV+prA~UlILa{XmF>?fpXb!|Vz&Epj zn}o2pj)L23Jt=HJS)*X(4hMEz0l5mjK(AE;8C5h{j5iy^R0@NV1TkT;+(BEh!bI$l zGU)Y2a(ZCz(jhnE53aBf1W*qs!muvs3M6w_-^MPaYf%NQ|b3ysT6LBbRR=cgyAy(dh8-ipE&Sdzla zr6eJgA-paavIWg?S+dCr^SVDf22e_%uU5maWBRWnQ70tC9xvP>bz%=ksuyLVnwUjC zM^uy(b#zJy8Ra6Qjqd}2iIYi0F zBe798^0}2ED$s!x)I3iO6dj}hdGwY}S(?ocJEK%$#NP56c~eynOCc3uPn}j>^{^$- zo5V?lE%=1F%v7UNqySGb&oXjBTCf$QFrCQ^(O{Ro5v_x4No23IC$?i3zCmQ=DG({+ z8{l-OadM>XvB4_gQgfj!O5i{k+F2n(03Pk7_K6bwRJHNM9&VA!MBzs)5yCZLl170l zc;UeZ${wOowJqV1w#*JqG8MM5(M&PYEV0tWOTZM3|JC-U!dcyK;mUURq6H#Bqad;& zd@`}WR%L9mFEz?1TCjQ?qGfMgj|M12?H5U{2V-A0v1KgdGA-a`O-s|q6y6st15GSlV#h-9b*%X+%k57 z3`c&r#*agH*-}^8LU)6Bl@^BS*+Z9+dKr>$*>FK6b6S-*bg|Nwz1-<7JzK5bEtZI< zM1=DA)|2;nqx~;179zZ2BdT>^*@chg*xmsS|1fqe;CmH?@|Z6*>4!NNlLq(Q0IqWQ z8>~Xsfdy{i(sRtcec=eQ%sq*a8xG>ft=u6FN?}=(+4dY@oU<}-WbWuAK$jpl2Ps4dRs2;$XmF6WYI<8w|R2X5zi z{*^zj=YE3QKH2AizLRGz=quOUg^uXw=;VpMawF;Dj1K8ac;%5!k_SWSmyU^Fj_D&I z=9jqXpDu=k&gdo%>ZN{$i%#irZtAN(|Alo9>UhrTvEJ%Bx#>dwcCwD^Jt*plzMZ-5 z>okb!ksjs0PV5yp>6Z@c&$f?rh2F(Z=9<3go&Mp@PVJG{m5p8Kqz-Wf>D&sZf=6gd z4kz7QSA08O?dl!ukgn?I&hGu@>YtwM-1F!T9)j(D<9v?kwr=nH{&l;K=)Jz}-!ASN z+1SWe?g%387q^43*E!&*W|+zC{4U_>KI$!Odah^buGf#1*nbh9AcDp4M@Wx05rBgd zUDGb{S$*uOuH`+IXDJ~Ga#T5#@)B>v6Y^q}O@U-Fekk1yhhTOlI1RXvRx~zob&}Vq zDgWZoj_J~#-@omfRANt5VmV?V|89_E-%V+o2mw}%eMuQp#({C0AglB=?(f-N=}bo! zR2N?wwUK1fBnCAlfngeUwQ+K2e0AA#HRBdXgQ4h)+Rz6f6ft-mX%QA*_7mTA*#7U{ z9Tot2oM0l#5C%h<^AXFzGtWm^6CSoE-Of?#UK|76d8>68xlE57!u@J=6`;Gfa zFkXF4u_|2A4l}_^vGk}DBPc)gIls`J@&XiF(LAR^`xcJxm#*(K%3lq!KB3~H*g*!Z z@C)>!1+_3EjYmRZ3lO7h|B>3VrIo!_QY1)fMS#pC0t9SrnL^6erY)orN+2L5;zy7n zMJADwgaApC1V+_kB}HSKBodO0X-7(lOf9W!Ns*$dR=ZXOlaQ)6aLXoJuE>aF+SKV& zs8OX(rCQbMRjgUHZspq5>sPR0#g5hLk)v6%Y1OV}+t#hq1O(#FjhG~YUA%W)CX^zO zlmscP>Tyw`g$CYc1a-5)Zy)8+ijBBlgo%K_c4;<%-U1XP9Qc5J2SVHNJrFZFWkZzQgP+XQ= za+fa2r9--<8-EZSbDb(!e2&I30 zTs8FEoT61(FvNBI;GtFEu{xtuhMz`_#c8}cbHI|HX7|1Iy|GI;VxLD?%0+x&mpR(h*fu#c09kAfh}~Aw)X5F?dqZw%l)<(@Ojg zt-UjVY+S|k>uD21Z;pzS1c-{hZNdrn;aY*38Z1GlhKT1n)w1+lZKn%ubnI|rUEQr# zt|Ru05jIgMq)H*}i}6Hde_BW?d78$-xXNwXp*DgB)ODGX$(fm>LTi1v0_(M1qn>0V z_^$jht2Fw}x(eJq)ozVDqXX z=S~=_afhOSUhs2E5s53ilVRtc#w6Zi#Bsrf9Ub=cV0j8DE%u+i@>YUw!B`)!)s>yDD8aMbx+s=qV{sF z=z`AIot1CIebD2P)=t5fZmF z{1Bfrzyl4S3y0tZ=e}7BDXIt(HFD|DPqM$G6s?2u>4BduP8jL5KI)s-j}^mjCLMD3 zGk^6JQn-o_>g7 zX(3UuT!~gs{J_s8aDp{iiw7=JZ#~A5GR;~4?d(>{1}W)o@|jpKrfRI`VyiMn zX>TvH@URiHif1z2x$ix9Npyq$Q3eH5O{U;W?n5V`aLdDjw&t8s6APJZ%elTcffx#*zH=+9rHXdXr3@|%@Zz91I9U*jbzO=;{MXv zm519N+Ksla(0lgxPTL;E-Vb|`kr&dkZFy2*{&p$+AnZ+m)y3HT-nz_Z{`TSTufAS% zuYGuC-7rOGZ^Xd=(saqZjd`h$CPx5l*2wl}V&* z(BsaBJtE(j-4!T_wYj;$l#SLX%Ln^{pKwdx_3rBvz2;L>PUQM}Y+h_#&6XI`eUa{^ zb??Hk^Jz>J`y@hpmEM`}Sxmp-S1o5vqLC#v2eLBus2|?r?7D`FFgH_S%^@A>T3<2Q z5E-N`sc@{J^R555yQzuY9I*E~BYrBp0UYz^Ftd^25tyU?1LMaNw&d1Q@{bfvk7`w? zAyO{G&w>n&83VEB7V59m$|z}C;R#vnKWED{0>Y6L?z<7fp!bKIDO`S7b){$cctccS ze(Adp^wO2a9*rheaTT3MNXN&DzUEY6j zcagd%vfFahB_Aa8C)+jCSN-{|nBl6nT*$!W5VG|#=@3M;w>|;SXyF{l-QeVpwr}51 z`wS6nY^E5=VLo`5W$C9A>?16nMRGx4IOJy({qkw|7U+$ZgYxT6PANd%ESFj-Z zEsAeptV8G`3T;%qThSt!);$SRfWk)AmP}LWUiLG17J=ke|DA(SWfPaLSpr^E$ zK@VE4tCDVrWCVsv6qLq({Q6Ltu>is$WSO*T4Gd!^*X6(pR<~hP;Xl)4pyZ&_npWjB zv>}Xsb2+;H?yRJQ9VrZ@-^mo&PdZAZDn_7T_A%{)m`vY%i>7;e?2uP;m|$VB7C$D* z9_%y^l1oaOkgiV0q8o@oXE~h4vKXA!eVGz`_ey`89MuyXeMbqUjbRV>?aZ5bM{&S< zt(Xj_P*q&{(Syeh-8!Y9p$WAlMr#thsc#9O2`6g zJe6pA6|ZgujgkXLu|!3c4Lt&<(THQ9!nFTUV>>&cQRx-Ggp-6h2p-xHtd-pZcS>>w z_92!YyMEV@604M4dw6eB1)P?DzEA#q87nlw%DvHNw-MdJfkI%Firiy5B8SX#;oU6Q zpksztBT7U_NF$0td@@h*hP?|nuCb*WK0sO=l1sX&l;$fO3){3|=4WdaWx zPQ-H1jKsf=63Y^9y0fhg4sKxYS(_-xY`#SxMqse(iBOI8C531WA_Cp|;*eoEWM2w#q~WLb#FlN5hAU z8%duV$Qd(N6E3iT!`QhT;v|-tJmr!iQlA~JoyciWckXgD`>Tg9(GF~1OkDR{5Zxb zkou!HhZ?6~Od}LS8QCE}104ti+k&~P2HrP7#4BmE!xQ2&`G7=f)gwj=th@Ed-UXVI z6z0T2KEC9~5|ZDL^K`0G1On}~1bq3Td>@WDV0T7VNH%wOuU*f=<&}nS?;A{CKPJ&g|I-YG-v7!@p+! zZ6zA{2JS-UL2W6vyHj?y<{?2ipLcSO$>!m}+N9s~~CaZZp zu!xpO32p0n+Qu!B2)5L<7??6Aqj2pFIVU@Rr5<4@x5oN@y0va%u4ka7ln)k%(0fbD zE@1UG$xt3Ukh}r|e*q>(g(lH+G23|D+hP>cp=X+%$SWdfu6nzU;IMkyW}(lCFUGML z?GKqZlg{=~lEMmA$-(?FHj}ruyrZgEbUc?e3Y5!;K%?-HmpH5!20f7mn-i67Qd&N+ z!(#I(2t}2ktw(bpAkzdhy~rN@>*T*vD3=F}tOapBEI6I}$;;7Jv}=W1aiEIcL!6Dq^zgN%!n%U zRdllT3a4Ah7wt3JF%Yg2H!!CI$DcpI=Uao&zO$rl_}C3n(^csCOkUn(Uj2cdXVToy zP5i@^(ZNj?5wpQe7^#pG@W~v6Ge~kU14KWBG2iJU2M^eIj|=9aw5R$#yu=QtnXg}} zn2Av9#?L)k9}c|5O)%_$(39)~GStgm>Ovt4+={Pf6gn`aWFOlSH-nP+X&6TGbE!CG zVN(jfWa8tONec;Rjs5{&WS~vw)HeQZ?7MfQS}5dm5I9ud%j;yYj!$xN93qsnql?HN zC!Sg~PG(DlN(u5wvl)i&vC0uYj7-CnwysHsY%zRNH?i|uWP&|^qr^$uR$aq`bP2h zwJdcvDE4+4AoF6_oMa?t0$?@A(Al(q*2Zwe9p#{C5*oo=b2fu|J2FSkF)~N=(Y<@X zz4)Cfc?lEzqZ9cJd@}*^P*FYyd5M`MrD6X0wVXXeBzJhMnDUrZ<|ckgh<|fV%^}R1 zvwHlqqq4UHDspLm$Dth&vWs%nz2F-0?gh2(C~=3_B4k@P3?YQJ<+k3+JEt7D{X zFha`&hpMuG!8h2%REg`46hd~up$w+&l>&t@RL4k}hHet#Ob(XpeZ z#VJz_X!K*0r|7I8H$R|{KlWp;fDTt3n%b~PTw(qu^XWayy`=Aw;8%mMr$F{St8Oy{CKuI~44sP&= z&wi%4a|jVjpqHbK*kjZMF4Ldl$#YMVJI6&E*?r7Vu-xPmEX3j<5yTlqz6nT`*8353 za={m0T%OQ4vn%_kFUkGcS<+A4yzn&+gB{5N)ji+n9CU?z!RW1l_@|^l1HLh<*<7y( zJk@_u5&a|8ee>d_rDqCjoZ$q3PdrQrj{X^sem%u(cR+Ci+DO3z1#8)3}|YD+ey7SKDd%8!*;Bw8`ZVYG@=ij-aAXznD&_E z3ldRu8w?E;GjTyVuo>_S-FjDz83eW}+K~1BRl(|qdpVGD&soLPWO5QXZTO8ikE>f^#$r@*av6{Y?9u$5(J(1CBZ}s2CW9QS-%^5t&AR%48aPH02PaeL z&u4;U6wvW9>XaN%e$S{8c)A5j56eV zHvyS~{583rZyVkp4Ru1fEjf+X-_P^iWx9G2m~bm0#a6=L!4bpo<3XN#31)PBKgGp= zwYsth4Yqud9cxun{U^C4K{_wKMJrN>hs4!Uho2$Slf21EyQH zrmXx<*{Pnbx=^kN@vpT_le}dGzdhf7scoLF63NE!iF!3p@vW%bG{2WSSr^MXs0go} zRkf}#Fs^mxB<%Q|snfcsulo1dfV3oQ+hWIUGRt1RmX5+m6rAf34LeIc~r9Z)+f;%ny7?YuCBCMfCairo47(43D*Z1IV!N zkzLnrwv$X-V$Ltt{5=HeyRQAR^uFfjjM)vMZ^;Y`yT88~W@DOuF>d$BFoToFV889; zi`*fGwyo#a-a^k+VgglB@9*gFP^YBnj&RtIIpZgP7sIT6J^Q{A@ZZZ>rPZpoi|zC$ zeSco>zUaI9-tu2W>CfSZ{Wm9z{~es3Z5Q?byFU4^|Mr$x7)8X&PDtiHK+Gwuy{64h z%(6dlPem9_Q@{=sa93V1-9$65v)_~3AEZJX2}g6Xa)7kmhiFTMWB6@0FBv9=?hgsa ziWYECc)1U=OdUl?uX9j^?+-sD5{Xw~-TKX=Il{#$g3+?!q|M(S;Z+eyFe>1ruU%H= zu@Fi83MM7s_yYhE695PV2?!n&I1t+s5|G{!fJj*pjm3jeq_q4t6OARqaS$%80z^~k z2!M*-Vtt~iY&?}+HGvh`jGs*BGp@0jY%ZV97IvB{K(se>Kk!4 z=29;cz=0)l@pz-VHn^6BR$I-7T8kFX&r@x+pWfIHCp^$@uUlzxU#zj6Zm(bK@ZFwz zt=-Y^xhLf0+vn+yH~;mch{@P=IvY2KvA|s(PB6_=@bIUT^2|_C(ONVl}ku zWN)rayGZYC_u2R57O(%_zwNpBwK1G{`%u5H_s_}xV(pXJzPA^oKewlgibTPY)u$)l z|C{ZnjogZoA#sTHq1np|>!BMM@7zaW5C&3!Y5(Us9SfH`=7Gmbr$&ruJb zU9T;xug&Q+^T zx`764H^aotV>i>nwR$(pCb+AJ&MvlkC7lS@MH_KJ5nYkv-G1;jf3-v=^BJvc8xP^p zw=o4PQNf{3{ZzI0+ufi?BROcr+2hWAy@1*zYPTtF3SpMRp>{~yXbBy%< zG^NH{f4X2Y_MKrtNAukWlk-t|ShYDwNFvsZYX1~hrXqCy(K%Z;ztHtI>(`V)rS8VG zRgcicx@)qJ!CK&6y_D<0&)dIN|AkOSUo7}3kzQz$UHM3^y`fN~Ssil_z-^NT)k|l+ zF09KNkfZXJ?rs6|I zEbm$`?&v$&*Oxb^pPnfhOt;*-{d;rqidKWZ1;l%!InZFyfFeDeCR9gL%W@w@npm>` zW=AO3%)CJ}&J>eKO$<_o9o>Dgmyl|Pybcc9_jgu!voE;e!up6tf5Lh_ob>;&*zs&-y(({$f+jVup3OWIkdaA zKi+vdtZ{frdKjHHu3`j8*q9u0=HJ!G*Ky%D3dAGNrG@oMQ=kQPcpgpU6oX`QhR`OI z-+Xe)tS>qlszU^|MNV4{sb#j;m46G4)lLr)$sQoD5ROC6I5MB)Oz2dIX6Le93O`Dp zNvaSx+?nyPI>{4xu~1KGr0X4al1~pUQz>>8az~3r6v^}Q|60-w`UlA(TPd$x2dRNg z@J5MvUeKuJEhNMW>JYG0c}v1K_tBI`qX!I_69{!XMaz7d5HPEFbyDUU7f4c^ve6N^OjtFs9XIP7A0-$(+g-lXh+46{)- z#cS$p(d1u_@aZ)rn9po6^jwY#r!*zG>1;EvU5-h=Z%TPSv(0vWIS!|6#>VOFaI*ZF zKMIC8+51u*ciXS1D0g|XCQ19bgN3g|KJWpDcV}fAm{uTz(z{{nk12d)e6Z=}Vog#m}pA!zJq{D|3QNWzT z5eyh8PMc>1ny$gmgwN2^__KpEwnK7f=sv}`WZHVdDl(m8EnTzR(3px`?}melJYWAm z6$O3~$i3IWUk`Q*o!TvVi#)bKRYmA?naaZ0f4S}@k({gh#X47f2lxy#&x7)uyfe#+ zg5YllmBr0?(<*$H=eO!AnnsjzDLtJ>P2<=t|94dc1T|1+ycz$!q4)e-ZA!kuX^rL^ zSLA#Zk&NlXC&RLTYO5N)E(@wGvYGras4s0jXp#Rm^`ir}Li)2aUIfYN_md-hJN&RT z9NPg0JaAR{wtJKZ?|rK>M#rtLtkKBdvXC-yq*a1ZIA0bW1yFf#j54?t zL4ltlXen`Y=>c|gJZG2N;QRNIw>pfBj^0i#hW3#E-l$W`2s@1v6 zZH4yB#WA|I_hh(mYl7QAQyXR_10o}=kv@wN0xQ%9fZir5*zj#W>p9eF8|ACVHY=Ns zI{h*jG;DO7J#PmjicjTXm9>*0%e+i5N`1f);n4sW< zwKayCPt-#0D(KoW_JJ`1`FA)?cI(>F&4xV)>C;Vg?b;9>9z}hxCfc#vUmswetx{Y5 z%#Ns4U4T6fTlC|-iPiE5<1NA=)d>4OhEp!S6FQ$_<{cT$$}+*YYM3ZwLFLRwJF&&A z31kzEru*9xLvLLQG`oxM+>~jMaz;NWKa8w)vhs`1cI^!pS{OYX>r;x%Ygu zBU^BOko=fL3LOa(lyKEt(a+DtUx}O^mj;Q19!5tEr{{mpfX=jYxY{QncO@>6RGJ#;hNpJ|R*6y)--xttIvrIq0A z5v1vO%!Idtc~y!K$4WSE`DD$u0tF5~B^7l9u08*q3w;BSsrRkuJy@tbt80+VPv!V1ilW@TW5eL`d(uhU(QULpxuL z0D&e-_jaj?9FK*m~txq3gsFNDP^4jIE zp4U`%!pt-1(^cpzSW zt=yfGN~v=U&$2xk-jseZ-&y(L6CQx7P_Xfn_Tel~OU|!kaGy{0(;8@7xd9Tke|if& z(!XW@3HdElJfr!9UA&aEH-;#iU4d7s;Q>Ao{>uu~A4?QS_m927|FiP0H6%3>gwvw? z)*(xyFU-qTamkFgH~l-C%VwwUVM5r-L)v5+;OD8AG5ktz~K2f9ElpP7Y{ri6QL!>;d_ zmmbAxF{lmN{QaX#YeX$s7bD(fI450agct~&>~Nv6_OYLd*rCjXe?Lrie3tjLW@7!N zm7X93k#@)QM|7;;_$(VI8^Sk~AYHCR%cY4=0fp`$`&1>p!RPL+GO)<&-7H7eWIrfrj*nfe8MT|U z$g5pABKz%TjYykakfuNyJa(Am!8QTD4E}VU^7fCRa}w78Te+}}5`QFF30Z(-8w?T? zhs!WktTEqwkt(Zb{j#{66Q&uewv+bzs2=;sfBH*;r2C5B5lnC_Um9D^*}R80!M{Wh zz8j`8d0EfzLtWVj;^2)4&^(J9wBA(|<=fojbhc^VZZjEaA?yEO?L|Az2O(<@Y}2QU z=eWOeZ3sb;%fHy;E0Z}s?0WX+-1jX&)B!0oROx|tH^pYphVNalZWk2S-~Lj$zc&?j zuc(%wE+Rbc&-AN80-fQWZBo(L+>gWWWxa{<5Bths>dNE~KZ=nqkytkZ?RLdIxIjlH zB-X{gZNlLCU`Oi#a5h@Gbj?{jP%L? z-lXn^^kTZo1ii6z1VCN}+r{JbuihCw2 zPB`Q0ceW9x$>&UtAQ^Ca(E`v#Rm44YR)C#Z8nMTfNo&VunDCNXP*ebozlvMKNz&X6 z(u9oxol<~Ip{sVnV^L#gDQUiClFNmsS*?V!U)hvTBk zMD{fLk9FcEakR1F>lW%p2!i1InqSg|ew0PX9fyBd%zfe!@}CP*el-Jj4wgP2-4SSj6jP*HipfF88-jWN#aM`Qr_2EGgBeJJw;)6&C(m*5YApbH4 zCM7Aa6KPW(=!-<5U5Ww5()u6GkUtvXHn$~-N*46iPGq!`&j9Q>CIip@+jmijN~!l% zoaBOhZjmT>?sqP%$2w;(c1HGNfDlpglJ~9xQR#M(lad<(Q25h{R!Wk;WzBjuKM(K*`c*hVBH+ zns_~Ojk9ooq-H4OA4F@_I2ouzJh&A=+=S^HihzADxn)IqK4=}@kD-Ek??Ceh9L35n z>c6ih7+s+mQ<$&=KHsQ(2huIL-SDC|KmxGk1I|(9yBcrzOr1`X%I}KJ!RlidQN+BE zu(n*rd2QAuF9S87P2}Uk5aU!cuS7L3)r4};+%vN&Gxac+c^Oz9yPxIhlarP-5_9VX zo@A3Hkq2gEU`tHAnlcR&PE1|yw`e-XM8W-lEcGPW?}F<5h)VK8dg!@^))&%% z0Z8XzHRYc-{8KFm^$6(Xi?NZRUKj?`nrRTXg`m_eWCL@vTU^3nF+YYwralDp@+nyJ z!bL-~$0fkAJ7Bj7o8em#NbE@_(z)qu1hK%F-W7weF~~q>ICvY-8=(Mf3=Sj8;+Lku zC``-0ZR~S3HO3B?R4(RR0(mzCcqa;>zt~t#kosXM4AGQ_eE#wW_N5WKx%#pMYB@lw z1lXvi^;g2jWGeBVpA)9Tc5#wKCb6wO67ck1%Gu}AXX}s&{JQniNO0=Ww@F1 zSyf)zrm-tS;~-&EPDIKso)y9P3pr$Gw5OErwc7LlOv6lhfcEiiZCScc38Za0izv#? za)VxB5^^tYc>{OLY-YHht)?r`e$>?|mDBZDRifcmHL+n3!SmTLMmZSN_!6s;lpsrJa6 zL>+ow`(0I;tJ<2FrFhf%a)mfV9I^iZK>A%5<+O#row{@$|3Ff?z0eDUb4c=%dSw6p zgGwt&wcm)k4KvqaFLsh4Nm7*!j}!xc_#GTKI^36(&vX@{H87*m2-g%uH4Dg*HfvofEg7=t11hj(TPRV9q{Xi=+u)3vA zjr-m^OL;D4LLH|O`d=fI`dsd$Cf#Cp*=TnK4^!OJR=99*`4OM{p$C@rG*;#|OE8KD zViE;kSyK2JRp=iL_jG-^_@TS)Y~azQX@i8`mdCJ(Bt-ANu=if9#HdvLG|-sc{z-Yy z$%wXQef-R>t1qkbKh@HJxLmqrX&c|@gh?seuOtO6&#?#zY>Pzfix>IqzFqRhEinnn z0DRD@ob0JM8-vbDRKNT@|D@^*_q=Y69IIP7+x#oz`eH&CX#AG|!{8I~a3M6R#^@`; zsx-vc&;{~ls6ujC8zv-L8X_(;C_et_(U;cBv?%mT0h5Z$M9I=;*kNqDFxUt|IUTYh z*A#W;;bIHc)|xB-ojxq*?%y`*LDfe8r?qNwfxnX3@V%;!+^Kwh_v_o+on~WfaXODm zkuKy{=mN~R#t>^1n>8=9&}gwDgO5RLIQzws$r#&f6bt}?%MF|XDnHXhs!jY~1L$WH zax!-)@6B5i%}bwc)ML&9{t*|eR7@P$_@O-l6v@*8@L>9gCwKbb(HPP5VtZ%#&T~tI zo5@=(ncVO_O`ts&{Vlr2>P`SP;Y z_q&o?{*yn~r2j-U-jO`)qWRX%+An(kRrrfQGEEr`lBpQvluP!wJYfaU(~jwd*1b#< zDcdCDkHzI-J6e!*v2G$ge}!?I?P2hHs||aN7c-VteZ>g*lFuc#p_{}d_D5g6Icb6M zy%}abIXG+{@wjv&>~UkJN}YWYm$&UU*Oau3FqU8R(fM4Su(7H5#w(UiE*1-tpB^R| z3R(^ZY7_rS)&@F2ZGXOHnzbcHIOn_OH$qi(7fDFQpUp3-ofW%Iop~$mQugK$ zfO86ggbRk{A1U-8?Q)Qu3ptRw7yN##o_N&O>QI}8j3{88jx72Jty|d>Mda*;WeLPx zSL()U80X8@9%|@PNNN@P645siKeE5wpb9XHl&$auY*6XG#LOakAF#bNEiLtwURC@i z;vW)&&_ca?iL$A%nT|*HZ7co2`jk9JO{9EiYpW)^$-Q^0lTDK6=f-S&26F#M(l_39 z0@+ktW0FLchRY_0wrh8Aj`%f@zJhZz$08KU^CWYky}FkvS@XV;#z3>AP}tFcsWUl= z8K^hbn&-=^MqEGa)pFqXVR5&X6{2{Osg#R0--Td=RXL!S!H`D^+k6;-EH~5-K-ipr z4U)>th#Gy%#-PJ4T92MPTKv6adi-KT&DJ*_y=e|n7VmqJZatC? zNY1ndB5dQW{VUpR3WlFFJV7i-L0;2Gbc02!^{$2vEUnq4mnEd9gB((n`fh}nm+5V6 zd~etTuXcxlT%qXY(d%#BH}m@7&%_T!<@zpKuHN2iQkKqSP;n^Kst?hOIVL^6Mu^;` zK9uV`xvVoleSCJ)2x~EFBowu#7qt%UMB3RJKP6B`!J$U@2?UPaU{fWQOrmL3G!m5& zn{Neze&FBEiUy>)GX>#L%FzILGe2yXqdJzTyjMqseTp&d!9)K%6}U=c;S za%n%Jq5pmA@v-5(&Y5=`|BBI({ZI_WLyZE9W5==N2THN5mcO^5Abws9%5uYHI+qI) z4^h{m0cMtAYxWXKX{PICcrDi~tG!|#-ma}Ma|;h?NB6$u#q$kHJ==Kus=q+m=Fjxj zQ1;{dY%e=cN*2lm`crPY_4Y@4#O`bqGMD?4a$26IZ;~=*i|+H-=LmyktnoJ1KQFHo zUH@i#{mK>^_(#xtD0ca~%%|mJpq3!Vr&VHI4k9_@#{T6?+I?jrI(q}DccR0o;zZ(r zV~GomUctn53!|a3zgmHfN*B&cf*J(MECwwAi2{R>b7vDoVi@T%zBPqMRTRmc?c9vy zEs8d3tdcdEDqpl(aTH4+9WbiqN?oUsZ20ZOhY?Dd!Vri)by{TTUyWYOl1%NcXOQt} z+IuhgdH&?R)aO&NxwU^u0dsPHl4x(|70GN{4K>zo#Eg^)C0Z90L7C|pLLHsD_5AnN z{PAHHk-F0u27ZYp0~V_wu?>TuYSkEYK+s3y{&nvXuKS*CCARveZRIy%e@)DD?G@S@ z^e;#L$ONxF3JCDpGGZ6;03lP-g2?1}$wU1@*m9mS9ityf_ zY_-SGfod`j%}eQ{9uM>3cS~k1WsnuSp7?4PG!9m*}D$>nibKKf3+K)7O!H6%RYi!AK1x z#{ZqvUhhdr+47x`kbE`Ty9_3FsYYs=dejnaW4?d(k>1g^W5ws5tjfBZo5IBhk9%K& zH-q;6o^L&W^ZIhfQlC$0R#8DgWwRYSB>L`E@|Tma7TyT6Z!eQys{MFyEirO2rm6Ju ztjX18W&Vp4%i7uAtLDEGIkw~x*9Wg&ylT+ied2JVnL|i2hq|X`pT^(96eT01Wk}2h znEeC+X;pF4&&&b2qLhyf4Q`{@0352)(nC~wB#IxgE@(@ zQX>wOL7l2>=W}u2qc)E^&4($c1fEmMlG8jOWulbad9LC;LnC!h?&wD%2WuK*ZGw)o&e07IRt;Z7=nl5!9ZI zFC19ySn^?5uGa?X1Gm@Yu+>3Aw1i<)V?K9!FH&uApfS|W87t$Wu0g7}nCwBfJL}%j z60D;Pni0>Lh08oH6QNCDV|8;F8=&-T5_wT5&v%8F=|!8;U~)%H;i)q7-zQJZXHMN{ ze(}PMmZQjg<#{Cn7;+s+D9jlZ$h!cv{D0t!!gWV+R&==w(S80nAqN``ipB9fW>>m% zcDSAvvypX7fR|v>CjG}QxQfINM zl`@=8F;u`~7j#oZ+-zaypRJHlrPPXQn?s&NS4?lP4s_nOdG?OTj41C&TI-xzds}~8 zjZ34wQE|uy;#h){u@6dr(E@w7LSt0(09MRbrBZ3O@H^i!W zRp0y6K%LbbDDj1-e9G*D+2d+`;L|+~!&IxJQicZh;b)oA;sb(4v}X_&xr))8*P$7? zawl=hzoS1)c@SxbW3sgX?Tm@6E?ld>A&?cxG^(bvosqk#;-;`$4wxx#AQZupGwgslVF84{9Q^Gn$|y$ zz>DYBL)mFQYj{{_m`-|0|F|h#?#)hyr@XeFZgdL44}>VdOE5?1(gl1`&usX3g{^6+ z%+u*9D2|35V+BExl~?I&x*DZQB4m=pC|w+4tydOq0)(}8@Pqg{O3ut7HlJcdD$r?F z)Wj?OsOwlg(Ax}DqNz)bZb8gva<4R5q`9wK7Rq1>y1wC9xkQBUw)l1GPt0Co9-0D4 zYhY0*dzr4Sze=lb{s7&W2PF@&fVbiOhGl9UrN8?+WW!=cz8v~m8wSXSVhM*+=Bd*3 zqypkLV;3+7aSS;=m+_^&6)l{0-1e7(H0KZ5A@ROl{uzd4heWZSD68PRAM1!g%Ujzo zhSmG4(F$6}{C3uWl^`{$;B8~(h3z67FZ%(n}zzxg`hBiLdd9E}ptxd!u{n4y0iu^gh z4`Z@45`WA@9=Lpem$AT>$^S9<0kuH76ka~^Xs1;(LFE(Xp7MnSv$$cEy4(h*1$hbW z=S*c;!nDH`lJ_Zn>FzOd5UJl7d}Y(q$4Ql{m7bC0_ZOO|5z9n;lJka=sKh(=w3SXpfsvz)=-V0J{_I`cU4;1A^1BCeswN2v(ZsiAVzFHY zeG}Xc7QZXaO2rU0KXpwnyk8ZjK$;_d%{PG6+&R;E1hIp8Vq3UYvW`{ zUo}hpktLt=#0`72qXg~@7z1WF^a+3*|$^le!?*F4e5^?<2mf403qdw1gB z>j8Rll~^X}SXJ`vA<&)|=8lB9NbGO0ANXZSN)LtqA{$8YjHx7s-`a($9Fx(Ikb{~q z7`D?sv7I_Tg!1<&+1~;&qA1lf7Gk@Snl;hHVHt{)4V8VT5gug4-f@zpNQ3-lIz$`w z`k1UA!k9bM1(>GocL#Q&ME1Lr6+=H+S^ns@r61n6ru(M9CGA@gw)v< zwDN=Lir1KzUU8zrZ>)5ksH`kcjA+)M8Qd! zes%(R7+E=-Lh2aEFrO?*oS|8p2?&uAChJKVP_t{jXMXvZBoa3b7bi@R^)b;60sKQQXxH&-H3p? zJ6nIjgT$(5%#-FB7~PyPyBSOs>QR&Om?&e92;ZnRJYzY%=5%A!fIQ8wb0XA)S&UG_ zVQ17)XEf{*Sd^3(MUMQue_z;`baAWWRv4!-GNs(i7veZ+LtLL^(G^!!GvEcRScwjE zzXt$lJ2FASO;0ZHbGE_*0yi4v+%f{E-Cv5e9+oaSJLWgg<4g zw$fCHuSt`Ll+L@*&8+0mDA}hp3Jo1w59?T!;SJL8CnyxY%rBLFH;0-pGb zr6G!o$P!R8Dzd6N>uHcc(}I0dntR%cA0dD|;RK3sJ>f7dSMZc9q0b0V(HE40RZx#9 zkkU=-4WBSKE@4IC*vGP?Gr8Lew)+T-2&}RT4gcQwuT~JU^wPV@$+>o*9_ko6+EWbT zv$M(Bq}3ZPH{b{oY(B?B2qj2G1KbIfXazcL5jt}--e3tx3sKnXjoe5Ua>0`*%MwVt z#A&3`=PJdmR6RXZzFfsh22cukFDP@3DY4#n0a(KoZenb|YYf@lS0 z6PT+o!T16fvWd;Lkjtu^nzZyaB-oTCfwpU9hcBb z8BuT-2;`KYG7<;7IQmljAz8_wQJip+cG*{jkk5O)Fjrtu;mEKFC>BzfFs{WJtTmIdP(%s%sm4?YuYH%~ z@Dek@Fp4z^jpI0nsE70%D3!CJY}H#wG@eqUov!2n#Dmsx6r0;{(TopyvkD(Y2skU9(6)dS44cdXvMwc$7$qYWLd zk8L=r9Jn6jl2Sp9vaB(-w1u3t&(Zj@7D8 zk)I@}*(UzMhBLLn;7vv{IKc?Gft!d(VA+p=sWmpindKDPJP0y4ijp|XS_ojG$WWUE zn=pQhn3$STS(Twcn2QkO(Yi|(``3$`j9t-$l$AMwsM??iVZmb>Daf#MTL_q{L^j3} zB}fz3+=NoNjk(chi1y;bBuJpE} za}%z;zx0sNW*#`8I2`I3U4$|Waw#jTn~XA>2+yk^X`vR=!9@F2zkxQ;u0*T^FuN#o z-MCA@szNL!Rg3(xriqaITW{a>rD)3}*ZVMq5Oa%U&dL zJhd=4MynnVE(3TbXxBxu1dvi3g(Lfvqj|qPBKUW zAgI>7>W;N3ZryB+fl&f- zSYQ!||8nEE(EBPCU~V;=_fd%9!o3lSUW{6vT3i+w#JSpP_2n*M2+!8#wn2+JGsCR_lg*6m2*a?I>k4+LX2G}(30*L} z=5KpZsruNzfit)NYKJFeli%Kw)D3V5gfT|F#EX#8&!{s%ltSBaGI{zj*i(R|n+%pH z@WU~P3-vDfJ&Rpow1L|Mnnm0ZX&5Z&N9X0_kPiybaW`!?gt#-JDg){06YO^+F}0<0#IrNO!UQop={kK00VnhXl$Ko5-@60xB$UCK2AJ#T*iD*A5qqGzSpVhLW`gmW{KjJWL3S#f9`oiA%a zaRk^N%)hWBto$0;KwmY^wP2D%3|gIwk@%jE@bKv^qD!QSv_-7;7(I5#U;sWxGWeRy zW?qaqc~XUldy0xtV1@sD`yO;qkqZjGa{2@uxKB9=yax@W|FY?AKBmSg#u8k{I1zn2 z2%IB{&UhFPH+v-uop2=*q~SE82>jaZe4UVlssHeE+ZnlM31bzXw#SH(H6>DYYX3~K zh+K2fr$d__jfuZ1)DwcNq*uWU@iM{p5{t0Uo3&pGW(fxsa~K-^T+0ZU<`t+DeD=@` zNk4VXHF_J437=tgs6N)XnFzoEljvR>EdikTnHBdB{v<*6C2{|>nSZvqsQd?rBoYV^ zl#oP$u~A;E_S8zLOYkbuOB7#(u7*ioTHiX0hoteE5?%9JWqvhp`&!pfL3 z2}W5MQ6Wi*2BnD1nDC~~i8(-R6k}sym%|)%t;iWR9rYgV8)rYGw1ENp=H+J zy%U7)9W=qh3YHIMNTyyHC7g%<_07DtL8`@8iUf0h$o7%CqdsixDaIOnTz4^Xhx47GT=BFTjI66_vRGcS#B<7m*@`Rw|Cc zuw4dAJTb)p8(VRS)RIBK7ROaMZ@w7MD@DRv=qKKiBl;Pe$p3(a6z;1bx11Y!ym`BF zY6N1~GS5Bxj2C?Fj`OpoH6E0J%zIgiXQoU4yi^olSxNMaE&8f3}{ykXIgB#vd*oPxq zxZ;gF{&>Kn46Rb&GcnHB+MK36na^<#WNWk`Wv;Sqs$G7Uiy_4-I^m&L3A(0y%M>?N zj8(3e>72_H9qJ!z`R-S$ zVG-@n!mz!>N^gMK73`p8qUrcUMR#N648Ar;ax#UVGCXrEGENK4QCPv zH2M)>h38obXRg;ZZ$8%86 zTiC=Fv@nJ#poCB}RF@PaL5fX~0hFi22rH$qwEq!0iU6B<*e7wQmsZu~bf3iK7RKbY zzL-);F^NJhCGoJmluS`Exseob2})w=WtJS1WtDPSOY9j@OSzQ7tM>8~QjpS1rDW0= zG!e>&-ARkcWF;sMDJCCL>6e7sf-Wto&-W>D6gKNpJ8VIUR@lQ8q*Ou#B*6-HY=D|E z=^*BS7ZK}Z%NBL|9fxe;59~ygg9On;E$Yz*R{WwB$&pD&q5wuxK(Z;L@I^be;0{}O zY9_yl8)d4)jt0pr3R;L1DXi0mXyGM}B;d?cLdFw|L}~R(2v={VBnmHW z2OEG|$9)oZUX_bmD_qsYnM5J6WKiNo2Lh;CkiZMNuU_|hUcER`uQ_UwDVv}ZZNb6{ z0<>bWD)MPe+Tkh!*yEyk8CY@=r-|FL!8%+h?n=fGP)NDBTNV}|1Oy3j~;%yemoE4J`Y@Vd9oCGuSLG$|CSG}cv|xJ4;wJ6kQya7%ej zGD8flo>rs|npT zLs$CPG1AoYJ?OyqXS~d=$Zik563=D~NwGKFF+i#qV{&1dv<{S~&S#RkC4l z=jG(F1dS9x$x2duGUUXHg2qiA&;3LJ>g6Rxw>zHk@@`@RH?b7MGF<*#1w9sbD9u93ri{O&kJ zs3yX-#0!U$j<->`%m1CbR|1r^S$dHwsA)W&V|csP4KH;GICRXDA{J$CzHxHh z#_*evLe$By1;*HZ0$V6APqGt*(|_Fa1lfDiA3LZyGNzTu_aVWfzc0sXzLr;6h!l`8 z*)2>U3InBVIjhqOYgyE;5g|)J1IqMxUu*mUZT9h%=zdA{nlzeC$rjT84{|!iAL}Q` zC|t_|QB`SWRx4zeS5)6hJVhI17*ix50Z2l?SxadpmPHK-`el|tRTfCSANfrIt+k5< zj^F=*#alQ;Z`sT7TwlX6anh4-bO1_s(k!C<#7%D9!54Yh(V)D=w( z6b;T>q8Z`)ng7;6kO4c`gFOskW|<#au;7|71$HSQlw4n;#gRQ!RXaeTNlBLdSquD0 zmL{-*E#O@+xy1~+pJ_1!NZG>+hM`%U7#$8&7_Omy3||Q7F~qH*%gqnopKcv(hymmHZCv4mWd z^_`p<##68Y>y^?cz1S28NIfjdw;4oMWmYS-f=ESDdw9`G8AQm`kKHgv{xMgpED^C0 z04YrYFt&jx2Fh{~gam%bEwO_y)B^?h7chq6C?*Ugm5w5~01%!N7%Bh?i+u=0jA^Y1P9;d5q?7o~idWhx7PV8l2<$72eoBSHo1LEZ5o6fzCeT+ksW z1Ww916lCA{7mx3J}S|J%#lojF?PnPk` z7UbfjjOjpZS%^Hyg(aHX*%EsONST%ftQ^Gh+zUn!R2hhAFnxxL)uaUEsX<}~Z;02F z{m>F&2iR>v6i~>5?kc9J7(tv>Oi*8a07^d)z%3l0VR#={MCMai(LO+m# zWhO;Sl)|{=RxMa77c7sEoR|(?L~k|;wz`C4OoVt51hbNYAue1!)Pg+e2)6lVujNn{ z0tSq@r>dC*0f>Sjwt>7t>rz~hteK2d5=6(2i>~$Eym1Dg2q$$yn-owiCj@9&svp$W zOSAC=v90SyBqFb#t%?YqeNm8;(pU98lIxJre=%1<=@MfgSftQlq*Ry`^rGI9UrZeY zl9Eey#3y$2VqM|W@}#I!BpB73MrBL6~_<&l9GaitZIHd*@ZnWNY#Usaw8pPE^IBtZ(NT$Rv0_>kvo=-6oBcg zP>@?vmrvS4VS-(^%^QX)B&`nQc_e`Z)qQ_iVn^?q;5tqR80GHrwgZ+$KrE`< z=rShSKCt`fS(5mLrl~6@5EN$)hgwk<7yOrUsmu75^r{3hYzbgmJbiw8G^0 zfncBA(8rbVuOyC*02?tqi`(@>$tH=+n%wW<(-ugDS=Is-Zr91eWX*2Y@deZZxy7cD z*YCxXWk#wk#IZ_9r$bq6T9MmnZj(&lUTL9*9HyJ@`S28U4E~;_iiI&5Xu${v)3q*7 zn9v<-*~4+FNpEt(Ms_gXl?e|kK?p*yDPsx~oL!=(M1!8ru6$y*ae*|76>$YB$B^g$ z7^4!&A}&LW_a$l4Sxd((qo-gMlyS?iJ*ii<>au`{Yy>BVO~n`x1X(tzgE?qZ^eDpd zRkXM->IPGcvS-4mmq=W?hg;;b|_PgyHhUnav_Wl&{K>Naq2oqblQVLCkOblr6EI zEEyv#N($@2+%(@%tA?~qbm(9T$NUh~ViE{8%9}fLG-6ojL!Gitr;D(Hmby-gZKc`* zbyg`13RSt#gbLK4lovx_a0in`3`#)5=He7^LA}sx%3vMGgc6KkBwreJN*p93GeozE zaFi{cz}P}+F(xeUYroc2nM#ThZ~+N&ffj_Lwh}-tGF=QsN|?;6CxcT7I*%3)E5IP4e$v9AMQcq#b|DKk z?=%smawI-tb2CLHW=CJ2>IKDQ`$hAQrC(y1R73;{oWYrFB4!RO5{9^7T-gxg&X2@*D_~h{r2k>f>i3jQ;+PTcJLY#{p$eeT71J)IDNf;= zB;||~OEaRR)*(xOJNNrk!CqwLU}%Ah*<=i@pFxa4!hknNHHKWZxh=)ks^S)Np>*5X zP$^K}C@hRxq#;`lreCpwNzH{Tpoa-wSY0{OdnZgO9AG^ETAMOv)Xc7`nln|fZRp`3?hqOrMV%lfc0 z7qmC*wL@d10lJ+_tXME*q4TXp#Q)G-JbJW)xpU{!DKy2XG-!R~MtkT?chpSXz=prm z#(YVL&dd?O=Y}COk-|3wz?;Wq2s|Wm(7=nxm(xTsVt7I5Ol~xM!WTyrJp92k(Zi2O z9B}|WSGaN{{G$#$g-E>1uYAQ{hR91Az@rAty9cQZ{K6jwqn;69%)EIx2f*9>LI}{z z_d9v$D#>&F&ZNh{D?Oo3_lV>oy%Ss|=tWOE52BYEe@umxFh@jGD-w47k_3DjAt-Zr zgfneCm54>8qjm#Ex=q-HA35N5qB2~l+`O6E{lfHWmgakjn(hSopjV@0h z%(oA+{9|(d9~1g68bA;bIFMjLff5Fesz)jb!YBl!7?e2i;6Q{GF;XOWu^`8Y0wYG` zs8M4`QueltB)JkKM2a5^!d$5`BTWJxNy?N6lcPAb=<%l;cQm=gpi+$Uw9f!VPi$0cUGx64*ez}gRS4Jw=qFp6p77dx8yV0jnr&hgM zwWpt~NRdIy+G`RivuWohxru=6&$@vdjMyq=aO1~~ZmPv;3U1`jp=0F|oqBcaskgAK zOdvuO2}vR(34NUaU4(D9lmFV#J9zcRB}n;>_;dL&cV_0OR&KSF`Q_&3p4C+rH_>GP{a}a8jk=f6d>s>{j8JBL=rXf z4@RsKV{t|YSO0|S#vOU=(MPLV87RdciDZevB9Tl|$t9U=GQ%MS3Xz~G_S$PO?f|qA zE48%TXfo8&d$2r~x-1CFFssxmM>I)%v7#``6o^fN-snP6b~Q(=SAgf^;=Wy`nTYOTnUa(Lg!v^u|$I*~Cv5>%wwQuIi*n#xz+~ zRif<>vh&MUw_6pg|Gd0P3wFw&(kfhCooGep^4xSxSjWtjMo>3VKuS6#qOVms;W}1N z;}Xl(DQ$)0O^M5-b@Cxk$)(O%ff$o5tGC82x7s9y-^@C|GHSfM?xp_bMqQ zX@!*R-2W}uU=kxBOH>J0(qxQHw%CLVDWJS6)`FstBw{ikR-$4RP0fui^9Bk{iZMpv zSgwo&io)SdR07v32{e%_;w|{4b|Qp!ZG+&dq<~lpEjkufNA9G!8Oz@;hW1nfqKNom zxoApylPM%FuIZH&KJQwC{FFfANpAMoDx&3rvdjdMmT%@{|3cep36vmJrCrOK;M;1S zKG^TSfn%i=*+M#6q9_=H&6ZMrZtALsq>zF!TUsg0*Fy`^qHUX_B54a&YH5e^?3TjU zo>p?kN+!flCyVi`G^s^iBMH)^o^}MbM<_yB`dqNJMAL#5TiQ9D4BiFWqWDc*X@`{5 zSN~$AH?x0=uNHSmA&ZpDmDU^^xz5I^b6DG?im zzP6AeKfOf?qYw2DKdaEB`Z_%)LBtTP8E-IR70d z$iRy4vBWl#h}RYpB%H`)5-dR?11WA%3hw;`UQI;aN+NMPQjm`fWUNXQG>4EyTFf@X zA;V*CXp2dBl8+R@S3Af6J&hpF777d`qxRG?&E3XWn>b)Etr9fjwWAj4>zsk|6(ocB zE05juW>*rnKOWu%A_^k_?kH9=byh?rco~T#LPs|Oh^HZZfg`X!ra`BSOosf_r&?09 zD*{|i3R)lq0i>r+wa~>bXc65O&eEp{r6^1b{ZfDMM~?jwz#VN!rw!TRh7d-x9j@3! z8p$A^*&vHrX9-UkEn>Ac`V(#f91}&klLUd1LIL6_2otYZmWWn`eqJMI{{IHrKh99g zM)a&G0aAq1|0H0I-;vP<)rk;}qzEBfP-Eye;2tTEgAFjd7FJzG5GVl#HXBfa9lsgZ zxC)MN$fODZ#*n}%a7-rr(}d<8mQs#vjDJf}UM=>vI>L_OBM~85N+H5A$P!>*OLT-b8#SR6oiE^TG8AJzUIsc*Y(uZz^RpESTdq6fY z^_ar9q;Tvq?~kGp3ePx$T*2+l~NRb%I$6-sU!|34}4N4PT_qZX@wd;d0gR9R+i)= zMObT+l~T^@Z7f5g=pY&7Qp~f`TKFviN-FQOIk^(w4sOcur1zEPCN9b!4lS^4c5nxdlGsR$(jDG)!NFgL<&xV zxLR-ciNcvBz+3WvB*!I9Nz&MXIL@NXkSIR1AbBnVvmz(fhHY=uVyAj)JT|3kUPU{u zMIm~{s}=`|%3??`OQULyJ4PXNQVL*#1e5Y7Z~qdBH=0kU^aqL}$Ka@svJlE1>a5H> zDm-$ej2fb#ij4fSqy6ZD3^pT%E@A<#O7oP^o9GJVv_d2fuY#=56W( zYZ9$)aV|%UM2S5-2_hunwd%>@yexS@MR0(wC&mkiV#X`pi+YU0Cu}FVD##V)NDpgo zc;qf36yge->xfc9@oYiWlE9fzM-KJyJO8=}s7i|qxPTqpjSNV}?TFV!GP;G}FW+#{ao2_)|AlRn9UUJ=U%N^im=3B>>i zBM?C}Lm>Q7bV`9E(&&GjC8AugEMiW|ra&!T&dX9{+02TB9?F#p;`{Wb&;ZfPFp63P ziZ=p-6~YfJXlPMV#USX8c#dpk3L=d>iXfCH#-5K829VB13aOe!3GgQ2axIwfLerpW zfZR{is-h_JCrHwWF$ka>>TJ`Z00eoc5^aGUhHK!AQeU)8j9PG4T!9PD!etm^I=pJi zUal5cK?^nmAMfWah!BZdj#@BKrT+}V!_+Y_i)7ryA`fRnmU!)Sh=+2TsO1i8!Jwud zDyVYq&Et-+eW1s7PVVcxXW|w!;hx2Nk`Cn>30)|MIGRh6>}!sur{oq>|P?v%I!jRdZ8UWZOZQ|S;27$xQ;o=yTH;dBtu@mj$hyle^-VsMg% zEI2_V$7^u9&M(4l)UYDq1g7Bz$`u$V5%Yy12!ifV=Y29v0#@&^Gp+^k zV%Y}fLL(*#1uBFb5KF{>9{+p>S~Me6ZbrHC1Fy)>2+>SmIKe`{qo=wK>}mMBY`%HkViVk_*^FA6dVqz84ls^Cb`Ip&QOQY&&2t2s|D z|6DN%KBpEs3@ykfJBeaD%?pey2BD_sV-_VM1dei8K@;qO0B~=(B4T*hU_+27UX)-q zk!l$&4!)`ov6z#*w(#eak6kOrd`7_+q{lX!0wz9!6#OAx(#Hu0f*t(x>l|rd57g&6 zHD-T=9rfuqp>@85BS_ldLODjB1OnuI_9841yf!8!-io*Mg}csV{6giBa0-b8f(z&? zHsGRwE(s@jMsy~jN880+1>!?jOpAQVL(2vvG=|1{HfIKAuY&7Y0CbLqjoRQUOkxry zM}ZYCRL7tw3I8%i3zkcbs1QKQ!a}J=N~Az2lX0Np<6Bp&$nKF^-qu`k3$93wU7*ta zXhb>c!3{WJ*;*65YUTx9B1EPSB9x#l6REU-iGM_=`BFD(Q|pPo1C1=G3?PwmUb1F0 zjVypkrKE+%Cg4oRs`Y{iLS^=NiG(n}Vha>vVAJ$xnMlPzlP9eZG7BykNx>B&kFq3b zjs_+twb2%AVciPiTU){D2x8v+!4+JgN{Ljoq=cK!&ElvjB{=C{D~{yY%yCbX3x4Jk zk&?r3LNd+JFM4r0026BdH8>Xs5erV>+QA=WCpM%6R2D~I?v7y8^*IqoI@zulT>*5o zsS~00g8#QCEWR@=3dtXU$bt&EgwA)zNTK`?V&2*_H)#%s1Gs{+?cpZp=^W31{DC>V zC*Jf!a(crrCt^dNMhYGhH(c7MywLew`b23HkcGkV0ey70gCaC zF|^5W1&%eB$|7_Mf(2$`NN9}{u8kjXhL-|8L{EC!VP_>ZD#+l7tTQfT@th1fBGBSw z_!xCgl3a7KXyMkJ3y5^mHzR%N*`a?=K)(_UGM$+<^BH7vgHHiQEr()kOiRT5P~ zRpr@2+PS%0!tqpjttRLy`7Q7q<}nH1!p zWwm7#>G2GYoddd8BU%&_+MQ9>QPv_C8}wh?nVluNODXyyDmtH`hN30=vu-l{2}iNcL$shokjK4`X*s|}p@X`lRzVa|-7<^w^tn4bO^E}+_{N{k}yWU3KE zsgLE(PN^WHV4R%V*=D0ZA|$H2g9tB9QoEx`CmHj;LI=OPp76q|5#%jKL6^Vft^eSO z063u3oa5Q5ty{TdoNKRJ-&%n?5In15uqkqubBeBADXQ}ftIu?vOpSK{+p_=qLHI~5 zdh%qSR!Dp^s7bp+ls7jL_^$GGKr99C1URI*qBm1}D=INwQfdpdATBd;KT^0yylynQ z>tuhrw250is92n=m`tFG#3BePu*z$4WNT^!b4d+fd#(bFCQX3lf%J(zVTQ1^LXt(Q zq<1l7XnAR@r67zim{-gdveP}7rdslZay6o;(A%csJGy0vTOi0*IH zQdC(Z$$!OFVg*6ukJNfb3Y^?8n%dJg?aEoh$Q3uaCqh;ho4G&yDwaIFWr)btJVOwA z&9U6XE8AS$XtrsiqTT$?@mw{WO@`QyA;el4VP{x8ZJ zE81nX2xb%TR_V?D>^Bc-OkSl95NfSPYJ+BKU_xVND{Vk`3;#4hWj5hqj?Gz!24$qS zTO>krek=9e-5ZOXe;iyi?AHR@HZiMIm>2dYhR+`yC83# zs&av#guKx{^;Q2*M4=yq0t`X6NA|=u*R*N=dVl0D zj17x_qhjKhWp6eN>N71TxkASuCR6!`rUYRXpNVVD|!J?#E_BN7fXKNIJBoP{pvj1hz6-bsWN!e;gW)qo+QY=c* znegFEiv*;wB5>0cDFUrF5Rf2c%%)ZZ$S5Hyg;c$pIjLHVkYvkNQd>yXYPUs+gd`Lp z+N#%PiUOi^>)O4GH?Q8keEa(S3plXg!GsGNK8!fA;>C;`JAMo~vgFB>6H5`*uhfJj zQlhZ3*DA?c0`(+r8Re_g6ou{VZP~o#D3=MEYL(g|MIi200~r>LLcm?C1R*Vwsn<%% zS}DpoOKg{X?HGF&L&mmOiw$$p1foP~)sB=}&dsHeuhnV`XYM{#f|jy{KrQ7KIkWP` zX#(9*{st7~Ag%)0jVTKxR$YF;beyCUk zQj7wZ6e1#|&{|P!Vv9mb{4|9UD+)A$5-q9J1_5HwQwDSGxWXJc3eB}r6faFw(M7db z#L0mawIl^Qw#<}(6ie2am2S(21l1@r#rIt$C69Jf2rD$uU zY!;GMt*E7-1V+9`lqR6jX4?c(@OB_oWN^2Zs7Z#Tg?#SVLJAqo{Z{&#LKeO#;Pkt6fLY;ae+Ea>CS@}~+ zad*Kh;HCE7i*LUA?#pk#{^k{dk)=Hd8YydW$s#Kf*!Wa;FDWdhScUFb#uQQ{6r?Sj zglUnHyiz3ZPvF6no=*u843lmQFZt01*dnThM@ZS@D*<(CVdh#4$vI%2E8S&OJyy}B zRmDWs+pNUZNe_A zP3C4TZ)6bHC31ArWu6qZxiV^ZXR)$HPGoTOVo{Q?QVXy3R=1u*F%g6nddt~Gpk@u< z#frH45yfAVMWMTGXT_of9evc|ssH$RFMrK?>#n~Jd+f4X#E^(278<9R9kbXCg^Xe*dP>nWbRHXa5a};q#k*h>s6@@YP z@{R$QTy?c1Vk=L}i)R^2?D^xLNoXM@CpqD!v!YC;Pn^gdmu82+1S)WW3~XS9F!L$y zyzFqLt5Aa)r8>A<6uwTK~47c0v3CK3fwume24AV3>PVMGax zA|tI}h5X#G1)gaIJ>c=mwT;L7?4`Z*#){c2h$xXn&yq?p!zAPoJ*MG| zCRniviyg!~Ib4V!dBYn<)=QGuRLEwCl1Id0P+dTSPm;=lO;}B?J>C47XAId2rK|=k ztbpf|TtNUXTtp%BWC~fF(-CZO@GL5NW2V)DjLedh7 zJSn1Mil{}w0#cgjjQ=JSSxHDi#+J*Gl%#nnDWXCOmH;viEE_H9N6|D@Q(nDTGs}>X4PGeC?}W|BAq)HVlnu)T>=GI@r3% z>#2IJ-Cr2Hm+29vB@ev|MlUx}!zMNYhZEXErf?EoaSyPhEv;!!yEVw-MYT<}3r2Y3 zk%4jnuBff8ZEuU)4po*eg}uvM5K9-Ho$sj!gx^$&BG~iUWw8@w?fKA1S>)yvU=$4u zDWQ`PvMAw6nEzF7ZodoO@QOFMP;J(7k9*$qDz>~p>n?iN>lf#ObFc4Rt!3-G7fP-t zZ(D8ec>fFF01H?#y|pi33Opg^3I?)r;ucB~Jm3gRc)}E}u!S#-;S6hd!yN9ghd&JB z5Q})kBrdUuPmJOet9ZpMZn2AB4C5Hfc*gfyoq1>IUmV-T#`L|hRCk=?AM1F?LM}3U zjqKwiD>=zb?y-}34CNp%`N>jla+HCLWg<`c%38K^m8qO%B!jujV-_=)&HUvvZ#m6u z4)dDb>}49aF1eX4>tXLg=RD(i&v)*#o&QW1J^MM(d!}FtgbVvUA<~pxBAtzj&-eP zZR=d)de^e<^{suaYhd&G*TfEXv4?H!WFvdo!j81FpAGG3OMBYXuC}$WjqPk}d)wUZ zwzt0x?r@8H+~h8|xzCO6bgO&a>~6Qa-wp40%X{ARuD8AKjqiNx8^glwi)8l=@PG?^ z-~@N}q6^KngBN_^3~#u@AD&@4hh#4OKA&Laiy`L$=BdQhG{ip+avnQyb-)oh$WP92 zKSo54aTzkr)&yF+2@xiG4FoLa}`2HMotQ@^16q5_X zH2<#isL#76z}Z4;?BR6pPfxK=YNl+u6P7so+G2 z5Ag^qoC3d*)PoCkqO4qpo^;C8E@&-Mt8a6aN%UhN*#59c9|`fhVc65!#x-rj_pn0-tk&}#=5lqRF8X<`cx(UXnf z^N`(}Zuh<4ZD9@wJYIo^F2KWizyKIDe5Pebs^LBFPoMhiQ@c2xX~!6pFa@@?LLj!# zf`B+f3VS?=H&T!$>3ArhJih;gBpN6|u>W=W^Ior=;Z6MANEWS75B~5Vw^19VQ2z?! zhZ1F{eGRy6Ex|uMk|mV)67_%^tiTRfA|wVABz%J#0Vx1#M9xR_7;SaxpTY1xJx~+;u<)cX%=eNumWMVmn9y5_v@c?2|Gm!;lL}GIilG4M`n7q7W3}F$R;6rL%ZE;(HRo zD{b;rKbVdqsbaBF3sEoz?7#~Dfi4P>1Y=N0=m#OzfgJSVdCOuGUiT9;vy0||Gp?~Y zVAUBz83lP$l$>#t%;8kb#|rIWg?aN59Yc1aVIZ8$qEWpqP*)ViAl-BvN892-Q`%!ue;u%$8K5#e^1rm$etGCo3pn4_aUpXUQUHfsllTV7?(&9TPO*Lu#CYA{eO!LNW?z z!9K-P9I3d8j%ODlX`J_YVJaal7ezkXA)VS}DwjkG30MZ)QU5I1WDD>yNaL3tq{0}_ z;&pZ55z4Wkyy6i)q?T;>CahpC7GX#}gr6Y_V#$?9Oc5U?=SFlr<(Z!-9v_0Yz1->CZTf(E&p&U_AnIg)h8Ad)f!Jw8j1=a&j z>%llq)nDGy8LZ$6v&B^+~{ zp%)6~Ft{Niq}^pyRB`w(dSV8Kp=Ow&L%O?LCg|=~QbLeMLXaVc?iMA6?nV$LrKOQl zB%~1$MG58dk8{?!>)v(NJ?p;SYrokq_OteHf1mH?iIZAhfMpiuc>$L@HBV*SxV=kF zRpcz}UJVJ(K>sbaDwE%KEPXKPJ@Q9h$6-*MB;!-vBpk@;7X2HGFk%*h^?QsA)JFZ%~Y?IR-as zn=Z13Z5QXO0<+-Y6VQqeuv8Kw64Q#0 zSZ$UIeJBCYf2)D2UM{)Jrt6z^N;;z-)NHnTWNNVrLsYivhdy|F#vj^g8`vg#Bf(Wx zev4COpkm`7G3aLsEoBnf^3!B66WU~6J*R`(!EjA@COYkm+ne#PI^evjKl!0n-h zv>)ZIdYmf}}Nbp|r-B8{5H#<`@Xim@hi-d6h6GBJOXN0KBYe0qk9~ zXN?o??JqtE6Bz3t|B!)JB;&p#!Xjw2S;3Xg;hN6C>j*TFoeOn0S-UgFG6~m04b`*q~eo8iTLnr33as5Ss8E11PUHr+1Pql{i-CECoK zQo1^L3LiS=!&DFGf*uzumlUnihkj=RhLer1y3y($WPcFv&x!`b%M`V;7adbkdD&!k zA=%Sfhba=J>&)Tp{a`67;7lu|y%s=5hT-zP`w)ekL}<`ja%iUAiV{ab>qLR&U()Ko zw>Ti9tVt7RZ`Cq>~pe-r*LP?a7SyqyL1V@O!m%5hVaY_3i^29e2hGv8x?&*CPA zz36*-;=%HY4O2WBzpYY6%ZIPtOoGTZik35q3^tbfYB#!gmm^U6IKd3{=A162`UEAJ zKISlHpOWzrEn4K@7nt3tA@QT9YM&8+Vi4`DI_`4!x(043E{Y`q8G&Y<{SC-K^Zt-_ zNE$u^%XqXo4PrFaew2J&(1clz&^`)A&w7j}l1>)mfZv@CnAP@dB!*+qJ}@v_giwnp zw2wVJ509gSb?FkaEN4x4KosKJ7rzWS{@&|hDdlXas7ls*Duwx}&~au+T82kGGRsk5 z3r|VZ97Qek&r=Yi6fJeE!|NMLjHGVbnSxfs=;TM*f3VJog~y{+p*zVP>De8#nN5Fb z%C;(^83OO3jy)~mhfqctAJ~RWV|$api2?Y4IK@QFI%JCZnJy86WT1n&Au34gr5kg< zNqg3g-ycN=Es`+3c4nhcQK?mWWj2yXK|{vtTUyM`23K2_K{GI;SgF%tBcoW0y|gF| zy`tgHLeTJe$35zwKO_bxh&T|+jH>X7sW{{?*A6bXXs+0ff1S{srL(5W+*%>s543$; z?!>>vAHMk=OtTND))s^1ySvYlcFupTE$OIbBX}I4z7xSjC4s~nIkx>lU@P~b*{b`Y z*_DODb?w7PY`WI8?rt$}X#1a{%m%f-%3sfkcn$^3TE}YH!7|EXrP^~6X*40+z2yro zFQ-ng*p@%O>gsO`c{!B={3MX~HO1GP5ok1}S~udn8Tq8)k)GMXCtBW6wkKfAW#mEH zhl8ST2d^j&ON0;0^bX6P99E_rRyQ2hez-lX|903&anvk))T(#X{^Y1L<>+<8(XaP= zO=XoiT_UM(k0?JLk+vNSKB%|y*hwp0$gTNGS9)BKaNH4g>`=qDsC>fu)aP-^KB|H4 z{m1r&yNu)8gt-Pw@i?{3f7$CVPmIiuEeM%5S^RaCoqmMdjPkU_BHEZ8!%l<)`dq?h zcb2Zhcf!*5LeD}{&q9zGB-u7>$R$kWqZ0n}FudvSy~Os$^XZX3es5_t%O}45qwpz( zm2VTHvV1vHp+I^>c#{$BoB1C(lT4)(#bX%Ae!BR!Ik;8<#jG^+tmL`*CVdB99Q&zv zZ#K2cf}f=ijau8Wb@;cqm$U;1-xD#n62?XxPj+}LJeMcMQ~>FCqgw(7vrxrK;L(@l z263a?rATQ~Iu^e)+RHa;@4SynZS7l_+7SkeF{cutr$?&azfs#ptDPPlFy!4W1DzE0 z=~9DL*ooe(`3^GZC1+VRJ$$*z5U3~6;EXB6oHDmQu!#heHN}A=E>n^K#QML_I|9Y1 zB_+Q>sB++n5gi644jmQw$#5o6iLD&niCCc+la_QkL((T}8^&PzV$nl&J zvyKij9i)m@y&12yCwpHD<83dpj!7MH;DhS8ZibAfn3L7ls9IwU5`z^ucHWIZFx zM5w6DW2M#9y;>DxBwV^)6`<2=W~9~5Q4Xjwi)_bvkjPQ7sXb-P?`RzcR`nU4SY`fWS$j(Z`!8I;fZV?@koX|NK)}ToVRZIeU;i+zyK)_{$%gC5(SgJS#C8$uDfxaMF zL(SOx1PM%FyorXc1F3kLR?WI3mp@y9eVlo^)Se;779q)UT60VLC(s`~Jl zjpM$rUhA0}liz}mI!ox!Gj-OeHy)WG*o>5STdbK#f}9*z5<&5Bf>Rk1PM;@SyWdX_!_{S+Tn?%R!bZW??8)V0S$c(<{t!5Qc(@c-x zMgAzy$_Ec(in$Y8aC^I zU#1q0*#Ty^R*%WWBSmW+%b6+i7@;bEK{LroClzU@wIA8Nt6xg@X+u#ouNK+m^db_z zagZny7{m+RHJk|>0gUt$c5HNzZ!cC`1KWR>c1?V`+~TT|+OV0O;9MTpwNqLwWldud zp0rA2vR-vFvq4(FNQ(#~oP467vofJ4(ruM)muR(Y86igySd>0Yentvk%TR+$fBx-Z z8tj~79eC-S=UAbWNN`S0%4-y^?a@!72>vx|=pjn5D_zb{~`RkHSUA3=hg9`e(wd2H7IKVRFf7#o)zRZ3{A|UL!JS1WrsFu z8NKy{xeVP2lCnp`m_unsrDx^R(%Drw+~eZ4eyf1g3?gAT*0cy@s};J0uc#n`n+m`! z?sRH6hG5dGz~j@v=Mt&I+H`s}a~@=|s}$go(sG{ltN#Ufr1?&0pl2!dAVfmkV{EtJ z#2_?B#f%>J*t|PdLsFj{>Kje}V(!?F#>5jXRXM0J`_HMOr3x%)#7gMIo?En8o%S>t zJfD=8LG{7ZAjJ>o$b1qs(&<_mMzcBqcNcr#=Us`cbKN+xuuqNHJXGRv7|~E!>f>~+ zB%5SQRl38zZe7bc-7^SciRNNc*yh6dTC<*M@um5d%w<)-Fb~VfX^1=q*pIG7vlB-O zz=6jI=<2{9vsR`MPy2^|7=iXGkHo%9LLRmi8Uk=FLVQVsG|&M!Av0Fp zYR6KtwPSDDi?yIQF%CRJA!N!UW@Sf5)sa^56kktRGFYo>xvgA;UlU(O$26L#v}h3S zOtxZQroNAc-3~PuN|d|ldWOu8quIbxs{p)a0HffiUDT>CT_UJB*Q~AI2AZG~R>K7e zWD0OK_S?QQCS@_E3nKVo)x-<_ z2k0i13S}ArJzqNqQo?$5R@9nh*RrEH@k@%zL}w4j$A`rp6h52``4JSR-JDIy_V9rh zA9=yJbi8I>7pU*B?T9zr$lIRONy7@OtPPg`Iw>Q$;&f4C!E-zA8Uufk7l|Yu_~4V{ zNy^A-touMalQN$ZT=|#5m`)}}sA*e)$kgoa?zLA~>CmaQIomICkllaP+!BW`9H&Ab z{H&mjocKk~_autT;k9A5lh(@HJTizj7Yv= z&IBo51iUu8M+a;q&7zSU`V2DsIZy({#O@yMvD1%99;xaFc_s>q1UJ)-gYXkJK(tQO zE|wG4yW(yaKt|E16?^1^yDHH>!AW)*Yc24ulzb0TYe& z%EY6<)}H)5EZOSHd_`b;y^uO**WuE~-N4S?zn=3$)MJ(OKRf!vp7>W$tel;8V z`Fn+a@4k8J)yK}4znUwR_U*kwS2kY$>^4{W_W0fPI`QrA-s$Vw3Iigoo3Lrvs~`DMG;-?Orfn@{&|f3My9_q%fA z?{Ve*%k6jJ*B>AL{k`|@Ut%N2a7!c`NRB`eOCX6Q^rs}WQ2{uq06kPd&s0d9nn1Wd zlATuYP#yQF(kO_7Kg6l}( zW2DFpQj`oO#)J|VL`f*3By~_yHYjNil*}`fY!XWD1xmgSr7)Qk+JjPBM=2kp?%$wP z$j}HTG*WO#0ZGdJJ(6DqiSoE>Lr4c`K8{p>f!11w3RIzWCefsGXuV_fw87iR?*#fx zsz!pU#)`x9#Q@9~1``ie^Jl6SNyBk=kv}q2t>38HOscBjBKc=jAFd}w;Nkrjs*Q&y zSd7nt55&XA!vhiHao|Dd*jWGj+JA%F4+xR}TY2>V7~HP-zk%CxlDRR>4I z&HiKu(LAc!jAaVkFL5Id=iS0`{=3k=1GoRI((rfe|0lRzrvHsqax+PGw<}MHFuQa+ zRfULeCk;(=2X4EyOQdCJNFU%VF1X-dGyewD!Pzq~#>1?_+dYX$FmLW&Z|}t?{_3gOM*pZ=oXqElPF#a2=Mj2c)0((J*3OVj z*|>f{SlDJwa!u&c|M~PI|6OD16qY>qgjb4-=h<#`}&jr>F0nUthn%JCW)mVE7(^ zc3;&kIOhe(f5$+QiUFw?a1o$)B%KFn$#?55S%|0r_@)@7t}$?8=cV&gfX!a|Pd7!) zcXiqTCKDg^o~Jp2myMD%!gHfXY=nf z+Si}BW)*cMH*!n6?lq*L1mq;PNIN6gKDG}fk@9cs5&89erv@aO*OAh0a=cGoNaq|} zd%)DW#bKQ6l^QXW#7JmKqcnby%CVV)7+29?KsKk-UC^6f`~? zs!q`3ECoMi2Uay?2wpn9XQx88nn1IU$4af7NVHqoT5`H3%Y~Vv25nh9joN;ei$aa_ z%_&+vY7{HPAF{u3rV`HwknC#l9!$Dh`T5}9R7mIgPI&TD7LcY_$aJnu`LKA!@9OXv zNLPLcH z6|BO&j#V_}yzap5)w%x(Zd18cs{MVa{omj=7n0wEvTLFGKf&$82%{@RgZuvj-2OPe z)Y1K`-ur(Aw~wSASN#{b{VTzo@VdT+>JHrglx!dB%eN~e-Mr)GY)wSEQlQk)0(6ft z5jzsjpZn_eA`Ieu(6TbqvgcjVYprTb%CGXt7#2D9$=&jC{p{_WG%6Pu@98DL&Y6_e zX*rO|ZYo~8{*R;!qQzntm}s-M4z6&l1^X2qF=l56vXYkzzjBD_IHDQSM<$K?w_g{= z#71N6=tY7Fe-8dq8}IpMng!g3Pi06hC7kKPsLpF!SKcQ42e@sbN5|v8`a8W=t0`g{ zumSvEz-{Y419TsnVr3>bDMJ4Yvi=9SePjBaCAyC@-0S}jxNUtoZtOUTeX}$zAF5u@_xWQqHL@?TzG&iF*S(5}&Kje|frlDYyIg+_qT2 zb;WqncGvlzT_Tnm-PH1n6u$tph0`xrpK+soYW>Wh-=U^ zX6>NB@OEQLAFXLUlt?jQ+DTY0};~VBfu39@Xn;$(=fWq;S15 zlhV;vse9sXeZ9K;p`)X7$}``Nll8xb`F~U4%6Jxp?El+=J&d6ecF)R-P*KC&6Nu%M z^)1s(;G(Wj9BV0`$mO(m5L`Cg9Y~V$JZ$Uoje@QQ@;#rFbp5LqERxO3ET+ zkyb$ILXASBgH*Mty*a_d&ID%d4#AZdg0mr<#U0KW9gm)>*)euD*cNIEedr~n7Dm1U z{ub92H^JW+#Qu+gEykw(Qs;GxbB-TSU#B!*#U(lt70U9r&GB=LpY|i=t{*?Yb`{-! zm!)ec={Z;R&~a(1r_(F8frp5aBK?p3_Pb2$C-sV@W;;`5+8@d3+H~f-IzLyq(p~*L zwU7wBz4)d8-i%)BuYEZE@9SkL)j-Fq)66&8mp@PDH>MwUH%8TxWIYJsR<)m@A<&Bc zq6_@1-Ut6HRvv@U(lDV4Ck}{a#$b}w?BFo9E`u1d1lO(j0R-9s{Yz06--3tUb=u?@ zv_pySTo*LU4OWe0N6@`p0Bd}(9a1$UqWWT|a1>U)k!ql3F&|1uaC<5lph9J7 zknsRR!i~_>5Uo(Lsquf5P60-j+5-_-NH$=9pUYnUfu&i*V}>l_034a*Hu_)@sls>% z4BBP;Q>(imJ=vp;wJWExD>RblIA?-e4(PvDPL1tVYY76iW_UN6#W@i&G?K1}IPt3fyX-cRH<|rpeeeDY>zUF2#3dwx-*nQ(sGFCYYh^kX`J{GI?DchD5I{# z2XQ*}qbG)i8Y)~hKa~Z}o*In_81Mn<6%7>*8V<*6?8rlpb)+eNrlLk871IQGGdw{C4nJs#;! z6`IpF{PO5}g*4-sGR=rlir0vbeJPFs?NpX^^AbAGWpIG6)^Xu0Ur2$%#?8bC&lwR> zK4o9awh&#sBhZ;H-h>RSSQ8nPD+nnSSLf+L!aBO!bpJ^GE5rzz=f&&yQu_Zvyml-M zm??D;Df$7ne+~f>oapICs$Y6&?}71`5|p06u4fy`l~&&(7C9F57{8^6q$v<<;=fjL zeVlYaG?$LQM8ft-P79BGj(+AWfpz>``@=K#gqAj}4Tw|Yl`O880{O_53`2Vc678$) zYxFdUfFe~u=}l|^OM=&{-%Fj-U~1?9V*5gbT@Wpf8Ru;Sv43+5Di&dRvJ<4BIL80k z4Dy$Hic|g#gPGlX7^T&$cty>ITA+FaTp33lw>^6UaHzsAMu#zXMAw^Rngjcu*Foj2 z>tuEg*{-2Mz(g{hAKS1F_T*VycEqqQE2+e&xVjOT`2jkyR8m_3=b9$2;>!0c&GC5> zNZ>g$giTYv9MVklPLibpDGa}RfjKlMr5UrkZtuFyN!?;>!8`e&66d#p1agd2D#7Yj z-1s3b!VxU!%u3`anWF{#l+URY*!&2Q;g;|5L^vK+tttZjA=A#x7bFwU^RSy>BDi}& zkiVxA@kc6`&EABKq8@beXfWe*vRfsA+q{v1JS1yX^U*$Pv`J45PDX_;rog!S;jExm z55^7F{f#pQ_|gzuUlf}e4!T+0;WdwvYeaMfOw^FW3A|n;d7Ku=E%)?V?2iha*;Lg} zPWk!-m8`6pU!P`J)nIq_SwG5WR7rDLw9A`0jAV_uC-*ed9uRTr8eD%j0 zVw8&lD#7=tn8;uAxwu!7oz0QCQ^2VTmAM0lYzu)ZZo?6_v z)2!W$_I@*M^yeSuJ^fM6agp5^9@W0_uN(JQY$+fTP?u)jbz@c!wb8NURp4#V@i;_n(!iWsf)^VjTs&y-=Hsjh8njZb zM;vJrze$sKG!c$$Z6^0QkCyj(yGp2XlF~X4vhX+K8c=-Puph(9AAGaf9Jf#XEhkWy z;yL}#9*7lka;CRuU=x_Aw2QQFjX7ArSQ1`m0TiEmAN={0xNEKo>MQkd%LJ`zq}4y~-_x&4K!U#y z(>UA=`G}#V<<^mhD19!TmUVwq$WJ*k_22W^lBUHotF>Aw{ydhRqs>R)><^pS?Trtb z5bvv?X5Ww0W{Co0t^?Ch-=cl19$*O)Y_~f#b)c?pc4a$z9##wC@?nvWn$fJ9 zTTWk0hsx+avN>V)Qd&9=B-{bSU9*#Vl8mWF{ls6#*~QvDoI>6}x{Zd4DW7X9fJk){ z6mXxjb+;?Z?5a3EmC0n?4keOonJtOhMNW?@AMpj z9&6-)T4?z<^V^J!@!ptu_?J^U#oE!5*#uFX^Paf7GIi!uGZaFSBg^Zv*U?`pJ*ejR z(4VA9vOX@wdlT%ZWfGH^6pKCyN|yb{>k@f`ZirR>=~jLY`1586SbFug(lq@KGj@%l zGXG(4534m#U$G)M^Cp2CoWTmT^lC(ybThGa&}G5>8X?>(j+J&ic$va^#UH-E-X?C* z!%n0Gs)omE-e_~&E-Y4^V_Y?R<{VP(o|zqP-{ZWjl>tpKZ_NbKjU%>Mum=NPFM@mi z3DZ(N2Oxqv3H>8~7)rDoPMAU_Xjs~#AVOck>Oa^8M;<^HAXSx+!3<$5A0b7Ql-`*y z02lm#iDMB zwG_nMO-cb&#bW=mq>L(=q3Isq#fg@(+%MB($${4zqR+Z5q3v(&LF}E>kGNkI<*^6P@YB;rNE<rN^**g#;v43{evQve+~F~-~M+4WpR-w!o|88<>7tx|K^TBk@skdQhD z22vtB&k;dl7(-qng3iMxo?(dtL@C6S^zfCHbDh-eDdXCsNL=YG^I)0#;Xr$7yrDq- zei6iwTflEf$UcNfiuU$yO%m-F-~VK0pGW7Bu;2py5enh~qw@7n-rsjUS)y<<4x5Wk zEM}(`UyK9JVz1dD=@D4?rVWpMBKfSP0W6X3>D{B`%mH#&?MY3%cYoR$^4=$&6eGju z6W1EVG2NlZu7S7jmw3yYxU%5vKIjVr>XhTse$p{Z#X$SgY1Mik-N79 zW>UDQ=26HdH;ty4(yKM}<2m-_D1hTkIxQ4fWpyX`&~Mkc?B$wv{ry>HP-ryR)V;>z{OZ%STZ*S zYE2sSV*SE|bW@50qr6RAc-;P}6o322(eD#^D~dG{R=2@W0h&;vW=k9-RL{KBI<|PK z1>PEXuf-xfr^J%Q<(Xl|Rr*1zeTu*kc^7o*VMpdsXH|1y<~}=P_DUcr#S` z%2zgxRk$BMS(WDVcc%*E$Aw;1Mle)GuCj#7mv43zvtK;eiK()_)v`K~v5&j3OqH+7 z87iZ)EVG7IY)PfpZQ2!tIPimOviPf>s6D0b_m3M7knRujtO#^I7r+Tbyy2lD>40TSBlR3}b;>0)d_%E zF1KqQQR8JhoJgFuJwoP3Nm@aHN~eZ^qe5D|Ra>fKJNK4(=kFIpo1J@-vQg1AeOmD% zJDHl^S|7JW30>(OIw6|kg6brUU>~91G>_?9A%o&n_GN}qjD~f2cZa5}kP?yfHNSKd zrk7BCb9+&#vlmsRs%5MSsiV(A)>!I#XnvDekYS3hEFdS~lDXf4Or$=U`4BpFQk6Ui zW`NUM7OF|z=8!Jcz{+FwUGpKvkU01akhiRpQ9k8X9@6#&y-fAoF`~$7Ge{UGhNO$3 zWE1&?>X!GB#pZhrve$|LDe~1Z=}K2~evVD5(uJLIbw9X}EO>`94%hA~sZjNHnl`4P=vgx=@};&FN9dUT>gt zI}wjQMue+k0E%y5rox2wg2$p9uD^N+Z<~VzCv+~Z`k#pn0%pqr_Pq2}(4#T@t6`N|PAjEP# zfSDx8vkYcpGyyBQuhf6v{@9Yphec{rcw7gsPEcS?4Do}}VP;%qnP-ZkS<=cr^xKX< z|DyKZ<#=4pL^T=pk947hU195)hIz$F{>~{V!3(HcGwJUJ?pfvf2v*@$NFzIS&z6*R zA5g{*$z((ShDcIiC&0K^H7~mCyF4UKQZg;)!}Of2s-=2WhLn{LBLpe0cPx~hiR13? zmB)M_Vw-G1a^A$!q1MEk_{D;5iRhHlXX@M{T*;vP$+L+iB3qn5%Rz}W37JL*$qYWo zpfMZl4(IJ3Rv88MD+Dx3Lilx{-UqPh>)eD%x~D%9J9%G^u04M| z&bc;rxd?JgW;B|=qJFC}?MB_o?YT4x9D6DIXsLb{MPZv0CAB+6 zScM0ymVt}1%4_5D@Mho_!6k^J!+eV_)T5QTz>+6Wp4M22QT8w7MGMVM;Hn|*4(xnI zM;;Ow#w2qP(#*^@b@=IpBLfG&L6Pt^(?4N|x!l80hnmrmek z(YChvLZ6$p+f_t9cQj^yN+CAv_{2W8X~Dm?JDT3yX4Ucorq*aR9jn zzj^8BW}hkEMgMI+V0-mtn822B1|)IOhvnRuNN;l&IJ?Khy$nCQ_iOObX=e|+Lx(!Q z*Q>ZvsKji4%Z87M#Qt+q_=7KB_k=0V@uXe&?43Pnk)2^fID|| zE5||zZ#YVnpjesZPgAtA7DCag7A(fS`8-W#gu6dEfUMK`Dz~=%rb3Rj1{Jc}fH@U&H(~{fObwCP_r@We@1H`l6o-jsrL1tW zmHQrzfqbv<*~~wLOuW3cz{~pwNhLqLATz9L&+yeGD}@X1vT)?MKao$QBgIMZyc1G zcOT#WqB60#;%7T#dy}Z?wg|CqtA6Ur1O&i>bNbx4plp2t6~fcDe;` z#n8dGJ}gs8l-9q_iLl|)*F_yy8U#;#yi4}qFhbAAwg4d{VQ)?Nwchr^8vnXYOZOi` z=ow!;`Qb411E@~F5SDRtvis{~W8~Gt+wgyX|K4Xhc^CPftqQk50Qcq>Ci8HWo<$NK zHUFf-H6ckwhD1^1GX50z=a(Kwp`awbU-=`MI9X*AYOHHY&eZMjOnHfjH6DW~^BUV$M(vgB5Nw>2nY=Qcz2d(_{A z$$KOHdEW?^PZw{$uW2*ZzyH;5wj2#?H!;>%l`=IocWyT|e;BjKi*hV)H?#H{rXEN8 zeQh^?_}n?eL>0r;Vd0n>5Mb_<>)c`K5=VWvj8R$MVRiqh>5`Ra=de^?QmKSilO-3w zm+l8J7v6gGmmf9Q zd*U0;?}7 z6g$xNck4ThRrEEcY#dx-F=&^elNOCt@+`iL=Alzb9Cev4%?J=YIoUG4Tf>$(0+=E?efE_CbC#Qs&)1QNt<%?tRM&oRkzvZ|F-{pK zr{kbSnsyOkCzkzs(yn(d9~)AUzC5hsZq{n{_|^&}Y+k1OIB>qOnqXIESWeG3Xa2<= z+C_e`n*T||e9>u^vFxUte#p}N%ilvT%D-OggMYMI4g7Rb0m>Uh(kv7ctGXhoyA5Kc z7fL8&T+v+eh6!d1rL@DYYEs>XDS-=R_keC1s`5q|ISV)*RW~iuZlj!zg>n&7?wN%} zy}YG`3YlTP8qt7eA5V?K>Pa^PiA$yk@M4v2fm^o+dcI70v07iLMv)Xb4#=-iJW0@? zVkI(dkgisMqUT3h^QIbdr1Wrpqb|HzMbui0bzU(>yyOJ9Ncgm-PR!#6ZaWf61*5z< z3TtizJj_vlOdI23W-BzrN)|*rL>?+w-U3@`p(mE$=G-vd0RTO8Pz{sum!t&oVJ9IY z?-6Tl>l}$#&no$5V+1f?Gs6O@@w#QHgNA@siADU?ao%XXEmOSx^_ErX{*ng3?z3lh z;j3l29e+ytv0HF_!LD+2*S_VG!0T4n2m{Vz%zD*}##gDEiZz{>4{Q7KG1X$}&U5}c ztTsWd?NyCh7l8iQ;HoN~M42;P6Y}VwL7_`8yyGqL2TG+SQfQ44TIg9m(mz~)Z&=XT zM=H_4>wAJ71#LNpaUxd?i72z4N@uhNn?UG0R75h`Nnvc^fuVxpcFBux9$%%#gHtme zW;bCojAYlIxhd|H)>SJNdipr%-D2rZpilZW5594b8(FfOUrN@|HDUX;(s=3eJx5kV z$9TIIGf&V$k?DAroS6U_tCcCv$KL|p$-8{L!BG=|{TvIb-UzAZOnVXiv?5g67yK&6 zHpb;&`bu)@rP*@-tfWc)I+u*P!0H@3zqzq*3tH&m>ijFBfGSnnc~dQk0;)|NqhUdZ zH#&X`jWlT`$?T36A6J(;-v=}V^ge#@d-dZxqQIsYB@YMMwdE1Dz?SS@k4G|VE7P%o zZRJXy?&fQ&AK!N@wRC91ztzoW$8wj@-MH2y{gGb((4qZUjLlM{n#KX?*KNEiN@%WQ z>sdD%Jwe{RZFRixqr)vh#INAiRw#N&%k5rYPl(zOJdVqWEphveaVrrFx5W!>0ge21 zj_LG=8&Y(p>9hcQUyHIG<(C?L(14&_61-V?yhqeSs*FrJQ~COn_PGlo`}9t&{KQ`* zNV48v@+Y%)xW1k=UzI2D=E^6e)EYN$VPSUMb(VjmHSU$~M4+H{sAXR5lvKz#lKg3y zg1*kF2F74*5X>*Lr!s(x*uS~T98$?uiB zrVo52HQGAlL0M=_eE^d_pi>`_e;;vlA1JGj1lI>{>mwcNBU|Vr-|3_H*+&WJ zhrs)xoc&ai{V;St+@zn{sh=jA!?YC^bwK&quV3bICqrG8pJnb}S4pO5zAlJtq!`Hm z9I*~13oE2K=Nrfh>EuH5UT$Ze*0hPczFX>g&FGJez}#o49w;76Jr|(x8XOROkz+WM zC{^+n(w}r}aQ}APD7mQXO|)hMp4%Yi`o8!M+owX%o*^qP;x*0!TeuvbkrsL1CPB!q zE;gt;E=VcL0DyQSKYkWttj-G zeT>>p%Lpv~Jq)ViP!w&T8uuq=tPIQKx12U`$`%1h$3t5) z0XE;3s31!%n5-6FdR@xgj^3Fg?~^Qn-!WLepi~BS(4M^@{}C~N9yVLMdqG3EayD5= z>yk)yM$RL?nRm|V*mU98nURfIaS~*^WVw64C7O5QO6#p}?G<#>% za}0JuC^v5hOsb<|(Po;j8W|a-CvYA5b%lZ-qClCV>ccW@0X*Azp zTdD^lB|#Q1u;S3AfCrz2h`^YF(u7)TOYH}#9 zZ)kCbTqz4QcPyz@U6kyPt*M)I-poJ8l%{3sK0iVyu*sD8(0(pdE0v2E^Uy7Koj~`< zlbD;tPp-qJnG%FT8|i(OmJztJcbR zP$hjq+Cl52H~92f>;IaPyah}X;Qwbz5`c#f0Q|2JNwK@c#l!z?;zAXpDeS&J+FUl0 z%8E*0(rm$vW%3%=*!*YWLez2mg=TBTRH3Zj;rdu><@76+C@}MXBreJ{GWl)C+p6a) z|IZ?lh1{bPosApsA_z%Ybh?^0|2uIZ_N6z4<3AG@=+PXB$Db$ZeWFWV-6w_Hrb{B` zH4Oz!KIONoFEr@K{$pU|fe_>=T$@0QktQ3im?LH0b@#K15o&Ipre|H}v&4^|XMJc6 z)>~S5bJ@_lK!6CpUOt@7w7wT5y@%g67Ms=-veIn=H)Ht&JT{>b*=xiy}br@ zK_Un`a%VMKsjI$3l4;SXMnTkg?J*qyUIqc!#lpA^EGz3_Y&vw=Tq!zUHZwjw9kdmk zmu@~2x3QT$iy>CUIOq$rN3Z&Peyzsg1LzwyOyRlY-cg%_YOaPtp?n7PTD*1-kj_J0 zTiJ2x4l}W?e=W8VMr1#W5%vv>6xuR5Z6pX|?gh4-!LxnmG^TtR@Pp2qrCB<2u2E_p z0=co70{ADlv;>0Qc!-xbQIMk$3F68;Mn9VmT1wExHjd>O5ZB3iJTDu%8`22F_~JMG|^%d?4|$^t+Yj)lKx!Gi zQvbtS3#$GBJwE&zQ*r9TAPrLV@6{xpUvByrl8OfF0IWb8Dv`r~eN7>~b$&bO6Df3` z)%kOmWrcu~q|GlI7T6?V0J*GNd-Pw(gz9E}+CDXT57SpCT)4ps@n&828R$Uy(?RTJ z@^NHfWfs=hlal8I$=TxpIc;ahDV<~S!1K$c*d&{NF58ygP54>2v4&FIzE(-X3 zjodE>LDy;G1353WMQImUEkIQRG~M50L~&yz*EECGlce%eJ6hm#vtnj<;W)1`R>*A} zi0&R$I**#7gIPw^5Vw&kR&P=>RSU(llm*eg*e*eRq0JOD;=KRri~`mxj!OSinPj*y zPA5RvC2b_gWw4-Edo%w^lG{019Kq26@KfbqJxk=nOx+_6rsIC!>=Va{3!K5KO+l(s zoo=wS)S6>8CX*3A4gJHSD2H zB2{JE;3-1Rug4!ak$P8f6xA#dYCm9rW%W3Lh14|^8CcHqS@^gmJGZ*stmb*s-f(MZ z7z>sbsTF>ChLs%D{NUTdRk+KfmB^4W>EC@`WK7SaXuP5qgt|jZhC;@S|5m_kkxlLjThkBeTc=Y*;~U1U^oHRH{qF~yG6RN4L=&mZaXOG@ z(wfh_^O0jM$G_zB$m<TTXy*&nbMg{j%_b0d`{Tl{qe$5;)4iRT)>IBcTXM{xr_?MdfgTaFYH|@NuzS}H$8sFyfx+M*VE-w zkJQH3``ks7HmN7in+87pRGaVJF4FM1ZCSwltmQTg;4BJ{dDAoSTl6Rls}3XN^EayR zr9ymn(rBCQp&4W04H^+GA7?YSKy4x%DnUN5Arqy?6<4J+BaMg@txVj=jgZBeWuF{?93EXt(mFRxl zJ}RU{(!KSXm1@wy4Q}h%0f~=4wM*0Rj>L8AaXjC|bAg@Ugj6qRdnI|`%jHth z=5c?tCk(RrNa1?)U!uKsj0Pp)PS31+tObt4SiPk?#nU*d1VQ0u&)-JR%UIIARLGm_ zF-bI!ba^wecO-bzC@C-5O(^2#S+9_^*C1Y@x@H)h=g4UA6EG#Ui*Fs&S{B5KG5vuO zBkG-(uy2LhVBMVb`yZCdZHrU8WXVPmTbJ$+J-@WAT#j9K+}{86!~VF6QYBe?Tkv)H!J-}Q%M~^srF<8y^4X%6 zxE8ylTrbAywDk2ecgCK=P@2yRG)AHp4zcSP69S4~SN1}SDd{vg!Z66AT z)~!y&A~Q-p(OIWJ6Tsvl-gK8{`|UFW$Ug_;UNZ0zrB*&Qx$&RxB7`zA4F{gQ_2-Pl zq!ZVBJba5A?D?~UVLh8rVr%^(4E%;hDHwF~M4WqIFgX|gL1UqxymsSq555GNDJD+ebZHF!7l0mo;mGD(;8Cj>YZxMXRCKzlH=21^{S5N{#X zAhs~Lms6JTn>w~UB3ebSvHGntw1h)90#tW!tkw-J&B>oN^D?OE0M}>=xsbSsL#&%a zY{Mw$C-u^j{VrxhTy;X-Jq1S^K6o^TzRnGPcNJ>ZY^4tf3z{eP)d>qr35#eBi<%FM zdAte(6Nf|i!xMDElRU#yQo_@k!!zc?v#!E(h$Hg&BcM7Fg`N?`DG{ZX>^{ME!;D%g z1KLtGu5!&0oDI~?>ty+UY#A!NUuT`roWgKa%{x>vKE4ocY&I{iAva~>97T<4@Wk~_ ziQ=A9uOTMr0!14k1(3xV>^I>nNc$}E#}rD(;A$I&(gtxsLMTmQ0tsKMT}6<=#{%P` zF{$0?X~S-IV(#W+AFg8INWcgJV1Oo_VB2#o-QP8Y)91z}2su(Uw@dmtRw5N4E6PJwuC-FRNFc>YIb7lD>| zA!dV=PQ?$sF~R}~k|p9IfkLrb3C5mU2So%I#R(tI5>&$7)C3Z>yb^U%6LoN-^%fG} zc+neNCz=Q(2}>rKdnM)ICs}$~i?<}%Une<|Bs&WvyXq#pdnJ3OCVRIezgtN5y-xNc zNeK{03DQjo@k$9xO^IkpiCRdBxlRF-q(THz6LeFP&}e8qQdyY&*bPrPIqP?#riW&_!37bou@}eZ5&0xdvnOmTmYL=W`$o&2|7#9#k^jsh- z##s&&mi1#H>+m}3h$Q<&Ap1-=`@$>xDmDA2CHrn6`{6npjx+~BFb5k2*CfFqaKH_a zCb8I(vrXW5s159$%)uHWI_tA1(8ygo6aH3^YjK>R!KFzlNR-d{Ud-4R!jmW8jkRon zqbPvWp-SF~kjIi{#lA&|ua~bLmoJ#c(y)*(3QLUhl3wFOrCY;^yO3Kwpzie&LPOA2 zoFEl+B_G~`4M`~dPU<(S0)v~l!i9ptt9&CpsKgocDPN(boc7n$!o~Um+ad1$>q2K1 zh`C^q`(AjZj+UEukwuO5yPG1Wl6QW4W`TOeq%B1ug5;v9#r>v|`B8dQIyc1-!IHOo zND1C0DQP8XttASkW-A$y>2wzw$h{ENI z#u8x%OoN`U4+JyH|6#mB83j5_!&J9M(z#W?8-xeJ1!Vp*Ue;Xn6Zv8VRIkxhVOQN% zm<6NJU0F1tS}5l2Lk(qfRYrCJnZ(BBAc)Cm>FeRf3jIKoT8ADfTY2jW=`$3C{4Zja~7XDhY0p6}1s*?b#oZ}ZqZ?1=o`O}qZXcy+YjPQTS7 zm_F<1xQBJq_P>4k^y%@>ZW^KGDy*BPqbiKf3+txAjMo~hn`XHdO#EjzZ7q~4 z$4uZd&~y=vOzbWGhWMwPhM?+sC|};re}tL5YWBRw?t{#qM^t z(IMK-uWs5-ZWu%9PF@rxvPC}F{mK&d`i(WSWBi-a-NFoaxz|})AuM~v&?M` zubDZCy``nqZyu9&U)RxSSd}+#mF`!5yck-}VB2T=a3aiV z_n`{wWrb6`)~!x~9I=Lt@wYc^%r!x1u&v~9cE41*okscBy3)b>hab;oS@T*hwuZ?9 z8>+j&tvAR9Uu!UC=#M&48Oy8f=-7T7bpvJCj(aj7;^12R#gU~i=4taTd&>ZOHe)#e7Vg0ZJ<=Nd)50S&&@c?7h z-N^{w&%0C3WUTwMX>Eu5^LdM^`-`t0KkqMBL!UidZ6rH9T<;WBJ>2|g`uT8s)c@@9 z?rhHC@&0PN>ha<3^5>&YCajx=0{Y!eGsd7oAR73bsE`BermdmItdB#*FZpqIn@IMN6+pST~?_dM-5%2FYp zbZ(%JxAi#MF)E*Y8`LkjcpT$7l23U#&@Xax99!x_Kt+4Fkq@twbSrT*VnI#LA^5qIp-AczxwUQ}&(tb->JMs*y&p%iDRQ^N~ zCS^-aj&l(drGUzRl(PAQg|5G~cK*AR37G$PDNDjUIokU}%9e@~7XOekK6riP_$$i) zB4yXMT8REH|By1oeUoqReA+I5u6F;Hvb$rnEeaduFEA;C)oh3Pmf!nI_-ySj{ZA=t zh8X-yDQj*({4Hg9;pZ8DNg3xw&x{V&EKJJyw~GIiGEwARf+nv6P$ZrAO#JpC~?VSK9H|CuIaqTO=w46IhpNaPOhR9)qrcb;|P*+E`7}$!%De zQSByxBtv@yHuaVb;`7zEGdIZ$(^)O>u_M-n?BWdo!SS4B2*aRhZehB1o0TS%y%A$= z@36gHv23pS>Vh@5M!YjU8CR35pehQ*7{7=WZJW-FghDuo;N^psEtf<&R_|ahc^#ly z{%M&edoZ;&xrHWi^qye^PViEV5z40w&B5n$wlAcd#CseR~zD0rE2zGqy}~aC%f~d~mq3g;epz_~$@3!^c@QvDo-?;60}H`?{pLVYzu3!`D}%tWWuzx5$Fr#e(ag zxb?dv&pPC{aH-ynE5biQ?v}!JCT>tW4b@ipKH<21q0)Cub*KcSv!f}vm&L(WTZ+?e z+RH7_i`^K+-)Mi*iXr31(ULO zZ-^hA(I3IsAR4xTC;fj&*C+7-O`@gA9ZIdzzm1Fiw)0XqQs3S7oV zI-eAmXEXJT{)^0D14vOq84wj0=~T&|*E}nXi^1>23KAq8lGk-+Zif$43Fl4_I6uZy z#oQa;yqo0Sy^WQY*CU4$EDAytTYTk{KM*S&oWXVglvG_W9WvrB`We@waNN)l!(ibp znyJ97T{;Q97${`8F5!^sn+^wwmWKJWm_q#2i_8m3-!y>ay3whatq4>_(dNZJqe~4r zZkC%y53x(g;Wwh2CY7i%Se=o=YPOmpboXUOUjTERq_CQ;Vz~*?@VqQxV~u$ot0`mp zXq?6cwf}*v`GnlUn6+eWRy3t{kGs~m-eyg%TSC!Q+TtwBc}it;g{=ifO6FrDl5laf zoV}F~zmt~fTj^tV2in2KHBt{w+=fzl18)OR%uFqc|E?--?ZOsEV-cen>cLUG!9JFj z&dQT2b69_4DndJUJdj!ey=m#R@I@PGT%{;n-Vl%9hv}929fd)n!IL`o`tj34rBM z$iz(#BWhv~C=6c}ut}RWdhPgRx`VYB*IS-w)wIirKdWbMkAK!=>^kF=p1v?P7IEQt za!_e|`xOTrpKtA8fl(=ZrJD;+dgVR2@A{I=FlE@M$K@Ph89F?Ga&s5a*ip#KyER~J za}VR2BvbXf@5Eo4`}oF=V|?z`sjyoHWRy-I>317UYsxJ{+G8h4ZFifTu`MGON~dW{ zuy)Xw7LV*Da1Ov=TU6VzJ}?G~gxNzG!O%LHJa(qebHA$+%J0&Y-xx6Ra?creRRs^r zSRbBjA4J+%6pD2r6xlxgx@qK#uJ%P^+rQ3`?s8>VueuQVLxrfj7N2~%a?NT#9?=!r z7^Ynf0{Nb#eEGP=_cU!NIr$W)RcI$Q{$gS&bi42ic)JO5Gu!rXULD*1gX?wI#ft{`;xtuW^yzryd2~-Hmva|6<@uHvewmJa}V% zkBcm<1&A*cY^6K?HgL06+nJtQCEHmr17~4m_Q1Ro zv|y*66m##~fHe1rH+k}2e=~50iGwPcVmC}8sHr_Ows?Tyw zqSZZwHa}_x7=}s8hIogUs>h_sGTuyT*&H;?o0lCles$kJXj%$oDJ(l| z{n5C8*ml&%`V(g0Y<{+1ZI%7(xVzZ@`3Vk%?dUUr$o98^JL{_xbs;9kAw3$qfqvXdDCRO zi+^t5@KA03hk*-Y{4WOXdLu#G{(3XTqVjqx!{hLJI|p{^*?}h8-|QB{4BTFM(*s#? zW&g@GpmvVKXP|LAM({`L<>Bqm&;P{0jmtdy|7zeK;V^UlGH|F0Ill}X@}J`(j3AhS zI|?8k`MZHLB`OmC9|lgOivrVPp84bWQ3w>WmVFV@;j}vbGW{yoi(H!NpBcFBeu*ul zzfk-C%0C$)s{MN<`MZCD&5%xmYN7u%3R3S78u&8``id4L`ezh`Lpu?Gi^U+^>I{p5 zuzsx`z-Eeq)T(etS-@qpRWK#d95l-tjd_bPYrEt2LpRJ}YA92_$$mVWa6P8CO+9@1 zlUso#8^+%mJS+<0JD*iVhg5Ynf?-h*n)AWduP6vB((8{X$X6!~x;j(+mXD1#J?GnB z{>d`GxnK984FW`hlLC9G$YXR_YU^7K% z#*$g0Po+1=L+N77awY9r)L~JOwW)3-=ORHe8J8dc7lkM9l198@b0=R@IFDW>=oO(A zor)bf%s(mcl1#h*5e1RfqkZ7k8XQ+9LEnx@GAe8|gv}Jmit6j9l$hIgl$X2_w*ON} zEZ$cw!<0m0Yj8W;51Hk^MM2gxX8B-g7Ar3?C76;d3$vsbrnv8wQ~QFDnxybq)+a4nN#Ms%^@3na(^ml7YQ2}r0{l-uM)(_yH{d-D z;rP(TfEhOgF7ec8Qm%PNYD|9{>EN#2A?f^q(Wb{?R8*fQFY^Aq7jQ&lkes%9wbI;a z953SQ{1+qAb1`4v|39|}o9>iuxvIpvx%1@yNb6-bo_WVq{?JiZt zN-M@=?7lr_g6E%5w}Thp#tN)#3dC9CCVhvsJS4qk&YI2RpVh<3#!b1Ih=GK9oYr&l zFTK1sez4=O8a(B0O(vZXa-K)7p!Akc#nZWwlSJ4P^iKT3LAEY>{tifh4Ue68l*cow z)*j&$^ie_$F!1r62Hyq;Jp8wf6Hv!D*Y>3Ihqtc}p6RlK`w+A~;dU;g6y1rc5L%G1 zN;pY%lG^cfh(v^I+$&sY>CPlfwK3A15?0OB2V%#kbT@JR83i#trMl@0)qq7obLV($0aoGqrYc$H12oU|h9ZsG z6p-r>rFjbNXqau+-_6eRXkzw6py5b4jfWAx=nIdv%D|&kmJt__V{ua9n%4^2pb$l# zq>AYY$E$$U$>;%I#3e*NWhcS!nxOaK$feCGS9rB?%_?GoY>&OQ9D4|J&c}>m+!=9l zcBr~CZm%rpMZ8+v-c~xCroyZD=4{c@y#?MU#jnSSRs4xvU%ay_$tOot&*<38RT)hB z0dlTeK8nkzB|!`maZ$?GGAq!e|4f*a#u3=eQWjUL&0k>+jG}TAt0XJaQLDA<3*Qs1ga%Q0@SCYVx+aBpFUswT z=&cRzVl%C9nH}}kiU3rsnvXZ~L&<@i}|` za_)7Vm8M}dhHXh7n2>EXQiUpGycaQCI=R~+kZvW+t~e{~*N*E*8!-tuI4k`$yr;t$ zq2L*vSMDR+WQg51-~WatJai)1G?cWfho(HU=>A}bA#CZJ(q)T3d$8&^qvcDEvAW~? zpDZ|UMs>x{p@Zybk}Qt?ZLDl1ZKaLH5w*@j@e;~I` zAg^a2e@dWWbD+?CpvYCAC~=TDe~_e3ko1-InQM?-bI{WPKZUCx72;<~VFGmc!CIcd zn;SU2p}_|8!HJB1Z-_%onvK^lo<3@LvpG4wWhgW<*Ze@R1f+gS2 zI7codg2AS6{HEY&uHZbK7X=gOUEO*#`Qb&D8c!}GYWX9l-CXKDBb!qqTbm<468l>i zN3;`1b@4~_=tT8-Mh&Dy4K+uN%twt~MU4|jPx41k>qO6bM$e~2FE&SiosVAO*FzHv zl{Dt6yo%oPjEU^=Qz>%W;b#%1H3(9T(RJZD;5UlYjFk!cpsi}|4FaZx#13?c7#qv^ z2E2z`(7*Hq3nhcu;iJ%ZX^HbmFm-XqFTv!E7KCVgXkajkZVa$SV&O1 zPEa99gaLRB5|UbYLpj`ged%2x_jDktX(*Nm8j5 z-5Lr`fH8K?F3_~v$C(%>&nvyyIHg)O6^~FLtyV2lHbcV=*q%!2y2~znqJZL`I@Ur1 zWx^2$q_fs!zL;QGcx)m5oD0ws0PcNHw&ukdWyaS*%);>JJ`l(PG(;Y5_nwL^Y-I>(Z3#N!eYD0<0Q@RcFuXOm(S~+&!3hr*qSf2m@h(V=4-6= zN)Rfk2Q`{BlBI%|70s2_V~|Y)JY9r_O_IpBLe&Ics-PEWqYI**LiI@nl}QT>y_s-S z3KRqj)o74(Gxo-SJ?Hlze7-MJ|gxx-5krLyWIWp+2qJa-~HdS{dD}3j#^S zDryTu^41)1X(OZwH20M&4EDkV93Y-2S5 zc`&p{k6j}N5VKg?R|~+%DX8^klW;8S`HtGUSmtq+(?MD;umjL11^&NVnEN|+mkuCD z^S%R3eg}p8iQNaonI&2c{=n`o-`W0#-ESb4V$3LUq?#qJCF-Gy*}o=Xt-Fe~!c7R8 zd46H{ZmkApcdCV2Y;`rE$lt8$TkUxoU2#D3{{`&+FH;-kPyY(L|GMw|pQJW_V^w`j z>rveQ$g2KjYExnYKrAuaOrmw~g<*F&ZtcG&VPV+awsH5*)aH$q>~<#BB8*j$?ET@j zm>k|>{SCYG?(O*Lm|X8bzhBG#N^O2)_dTMdU~iT^&o?o@v3setJ4QJR7z#^m(!d3^ z9cVTc&4PSlFzmj!U-cQ8^~YbSP1%py5#IeDb>q^k2ldncKcqICc^(2ja}^kmOO8FO z;tH_T#-jZA7j}nD!iK`IJKg`L)TYt8pz@z#_x1mV-T!@R6E=Zpv_& zh`<>kD*R{Ri*x`bO2{3k_WR$$m%(sG_11qEzLfsU@P%S2u3RkL+|6F$H@vo=NV`YV zK>PZC;~vicCPBz^bSeYq2=B}{-bDEhQgUh$#kg=5#!a@53=tAlf*z4C0S${0CEban3q=vBX!>y< z2{DNCv;+wDKcr*LuvxX?YLwIvgplUt;spz`H|&Zng7Y&rpqm??MHxUFzNa z$MX_q{wj2~hG_O*Raz9ARII+Sf9D63Kf-3$Odi?ek&!A8W)?m$Qs%8i@E!7ty%Skc z>xS&_9uBa&Wa2CS5GCn^O`Q45P+~M2ZLKc!Ak~dZRVO?$agr*k6Wf_`-JPDQ zpem=0eje~8zf%j%?dGRo>zRPgPvCpyg_4D%Uak(jtF&ChJEnm4BszL$Q}3`@R7j1% zaV*>SsV8vMc|uLaC7e9zt6M>uqTQ}Xv>29X1GT53#pQ~$IQWssPsBNc>K*-NTS!#F z7KLVO2lQ*W;hHqn;*lRYLEmr(upbv7%*5zG&h4e>kAiP8*7$dwVNdsp(H-*;D-{K3 z)R37M7st`wgh+p(iI{9Q>g})%prUmJk-pAa(IiFfm;MW0%MNaC)Id^3pbUJ22?EY1@i~|UOik+qk})R< z#jpazlao%()|15Qr~)>N1^Q>>C%-qM9dHL;-<%|W#w@(CM}eF|e+q20K{=BLN3h<@ zS{&R^$kvPEXo@+#7adf`_OKL9x#~$+5i)<#FFSV26wjr5Y^s4iIoy^pWhLrmAy9SJ zUvg%W1$jFu+5vqWyBetDl#k1mWMWM5{jSaw#T`lGgE&@1H%;SZuqw)%*rLKyPi>Jg zC-!z~=!VmQ%T!^2LLbtVd*_l*uqG*<);yjL_k&|PV?@5ec`}u)h6*iXkWzIh)f-nT zN2WBYqnb~xgrYA8uVq)%d{HQCrGS9lOitCJ3u{+snv*CKRU@;Nf)7}bk3U!(q{NSJ z-8e;$yUAiB-bz$3yH)B3UuLo~G?j)PREZkCn}6s*u=f~Vn$ls8wTeXJJvNzJSwXGsQ{+%R3DPjjqi59($A_?#eH9zD zDoPQvcWY`J3r^r>8sDh&EX!LyUWu;2+Fh4vl*Ku34QkyYC>Zw3n_o~3js&DQyd#+F z3D=lm_pFF`Lvb>3&w*F0&{^sKHeC1&tFH)?HQb!`qtR&1CGSHqY>0!ExYj%K3ogOn^;lij<;b?k?e!Nwtoj@j#T{|7 zoAEHE`n=!p`es7gn+wV}{cTODwNI-92CpkJ6kK5N8aW0kVVA2K|Igv|&1~~nL#4;) z{+rvIxzAXQ)uD<%OvrBk?MC#0z0d8^Dppf-zv7{D`t8>prKZ+7*kd1Ux64N{O&_-v ze|j(7u3U{ZbzF}A^u4|P28Z4J8Aa(Rfb4D+^&jAMrL6Klf!8s0Xz_O&1jaEeL)uEF z@pbT}GypC<1E>b!#)xX~(;^UcZ8auD_ zx!*Sm&F$@uAr;Z||6%!Ia{;Lq5Qy>z3;Of+?=!g9h;RShsUuJF7xMYHwaXXg0Vz0n z(|@mB-f+rFqM;=MMN7fEo$2_Qc|mg1P_;-|T&iA>3JZKG9W9Vkuc3UQ&T{Ja?O)iH zIT$>aZ-QN!qip~F&*8CjKB!ah*U>L4Pe6ysoG_u|}8a$hEsFgklnnlQ$g6q9f!gn^YvB&S618ys2qKjCqd zK=5=dBK+>Unj|`%DOeH<4H_p)(_$JgM~GGsuSPkz5wE4>WtOODPqLY;5wL5PVj5#r zm}F^QVxDYO+rp4!--ouHVKB*Tp6;F$Zjt$J<=Q;k`(d{z!!L{3GA9Tttti*&WM}6W z^7$J){=^PdkD&S}$h_e>PT5>iv{#QtHvb5=^}VC64yn|Wee=7RU^mi zA)MOegeM`Y=lY!Uz%o-$5j~PAh9X}R4ltD^6w{J@XFw@8pht%^g3HwDTt5U60)I)` zDpTn&LCYNf^n)^iW0K3Ow_eml;DBo&w=b%ChSpe76<056G65fID;|PN@r=AqUi;@e zjYXsqg+2y8<#L{3zF~!i88e@#YN(s~V`dq?zGZDM175r%isy&oN@@h0-D`U=7- zFB>x=O|?}))WM5b6dl}M0S>jnYNj(}!2mS{YN>`ajTnv=fF$+cDjpM8HetB7kF{bb zQ9{q~voCx}(x1D_;Ra1)43g-H* zryW34=03H0A&yOtlgQ5u*3>|bX(tguYE*gvP}hN6P=srO$`#D7)mD&noN&86t46TL}l;bN{{PgHLn`ogWP$Y{c%m3|cZMBqZ?8$lh_ z>f5lcyw4Hd)#4dqa_J1H&mZAoS4S*xi0R;MYmkyCqU^OI5ytoWWP+mnDFD^|&kp&3 zA*2a*e6&(`24ct+IHvynk@_?M+<_pSXdmrc67gLv)en_tv=nv3YPK3L+`I6@E2xlg z=lI~$l_Yg52CP)s>rdc9=eK*7f-`GW2 z)nh1*&LHu5cZ4cmB~O5Hrq?NY&G~3@?IgvS~l2;Xu|MR1}recJY%UQ`tqUI8{svDM%o&_F?&@cr!) zA9By3vh5z3B`bpEwEv?cLTx%~k*EO*S8ez~P1!w8moM4E42cvTc)1HdtgTg}l~u%N zhLxtEEPFT3#>ZWl(ybvh?y%Fg4JESD?QvUgv~!$5jfwI#bDm)JOgDkPir+y;deFJO z+Q;SE2}7Lg3c7@2J2xo7RcjxJBSZ6}xA2Dhx0bnE8i>=({RaJkp723?1EyLED@`ar z_=(PW>&(m%L)m`0=Ir?Au0RT}*&8OA2W4N@uK`ht#AQr=*zZh1WqR;M!R%+vuH=a1 ztLEgA{t0o&}Gkh@AyU`9fer5O)>=Me)n75i~SOlM)nN4%(J?v9|@hWq{R_`#uJ+ zH#(Fc!?9P!p3U@V)U{TkOs;AFhBJ4T@fbH-f8c{wwIBhUb*FmocJt=PO z9Q_?l>aibp36~kNerf?GKRYR*GF#_5`LFu8w$b}#{(OHFRGbJGUtHdK(7B^H?YNC= zCxam)=3)nN&AC4X6z2mM7|*G{8om1yHVhP(hnGp6fZg&JsGTaga;EV5*gxHrrb8eON zapY!K(G}*!AYp1p2tuXy&}Uubf2=fFXq4Ry+Mj_mb~t zi9{2pRNp#z#`cOiN&(jxU+qkV*tnab;>k8R>c@18q;BdMGx1)T+M;%vRt1Sr6Teh{ zLWZ|QT;sV+ zl72Jgg03Q7EP;G}gmFrw;OW7tsv(}m&l5-Fh(F-70|DTjVSu~Q5U3r|fC4B?@OogE zXS~3`Gvh|hC_-%@Ne`OdEV=j|DDIDre zdjUjnu{Q8b67D8Mkd=-=t|@$&&LfQ~G|4=QP}i%GTTpeC=LD74N`|*1L4x9uS@F|_ z;w>USu;G;fqH48<_(naxDx3sh)x0B2cys{mil6HOQS}Nc1WJ$|@(AZdh}dB84S?FV zn3|Iji#;``Me0Wem;%eIeUw0~dYoAIoGPeX22f6PsGl#T0By#FsOzrp(V6JQwt-!I z%%wyeeh*ScQrHO~7;=@< zrcW}BO0-5EfUrCK^*mJW6koIr{!-21)=fEdP; zPBz#H#w^DNkLklBa%#gmkH4t}oP~w`xCp@5D7c=Dndl{YE}V;pSmU&-Gjn@M9Dx?3GCvPw)tFIB+FNcQ24@7o$mcxAOghm_eccXW4g1j1 z;ckvsV8a$`!XClc!+i@oR)V$iGy^b^iIs~QB@0(D{%UOj`D9(kf?L&)1^BYbJOR-j z+h2v0D;kj+?K~$qw87_zYL-|7n!#!*Moo!^poUn1AWE)!lonkydMu)ue5^Vc@dffR zZ3%Bv=y9Wn8LB;lDG)PUeS{AF;gbJm5xs#bCXW;6jR1P{UUkA0y6@$ya%cs>?ZXpQ z(@$r<7^(%9vb79uiAi$Ar_YfN{XbOUlgO$lzlgwzdyIF|n|X~QrgKPxq{*FMrS2(* z!f#;_?Pq~)_8Bc^7K@w{s0ock))MCB1FkfQJb&)dIPM|eLdr!_eih;=Cj-~S91sae zRtaQn%T+_~h|3wIIqN9sA_xaah7=-64J)R1D~z6MMQ=!7%7Ka`1aT*%YEU8u z32S>B_c;G6Zj9TDu4jsUNmWr78v1`XD6>d}<|Clb_Bx_Y`29 zf4-xuyB4n-X)G|sPF9V?;|dXD20FaRc(ThwmJZNW(ZfyhexOewr;X33t_;Mpzf2S; zKYP=8t=<t}J;&^Ci$*8N1hc8BcoWO>Z@Q}i0EG@9DnSgI-MNQN>xw<_r zr`wU&5)B7Kar4pk&MR=rL0<>dWyxPr*(e~@z%d4M zVp#*XX+`V5*Tv2hV8w|!?TTO4zuDyfOhjKBzv)aO`8-g<1wbI_I{j|d68}sCqheK= zyFt0aF=tC66d?|+o>M=xUY$I!GQ{hJ*kb}ONJY8jxu*1ZurK@KnYi3)7$@WPU2RpdF}@8L-g zhcw~yeVEm8>6mjbT&wCdkQkovymXPjTnF)~#`v3>VNoO1Xd=sb)eUVp;lf_fp8N1Y zG95%$F>UGWZyFF8ByaBSem(mt#Y$c#w4S!d)hO7XC#WOL`(40L#XSTLTlP~#B+!x@ zX_}}`j#I3XO7M2-Q!gXhiA;e&oh_bg3!c~bNpq!Vs0QWy1e@tt;Qq3Lp_5`&&Yw01l|(E;o$bwVWB}?cHsTz92 zl{4$WZt2i--qLPwMh}9AQqAFDml9skYO{k#qMjWs8tpvR*E4Ssee8LKVLIALBfX&z zu4k&E7+rU-(j9Hv64ghhdCbjCpG)(KAoWv`u-+H?T3KmqBPOYdnX6r3n9Ys`xaZ3D zyHsnuI|rD1@F6J-m@)1-d}jjgmvo&E0TnK=GaNsBU{DR@j!;L|IzPgWJ+)P^w1B;d zn&FsRX=FrL+=Ub5RMhTrArqp;u&^rdUZ>xzby?lYeG$-G0_0gTdIyw-PbE9!=OjXl zwGBu>93-0-i#O94a>MV<*VonDHcYwjUIfuNI$S;h^tMQRnX4FUVdCA#n2v_!Zt#x zwvHxVl?O^UDb`GO57aAYIQ1DuN@wxR>Xua*%fn@%T99|6{{Si}a0R_>@(+@%KFUa{ zzFTiR<5jayQCpHbf*Cp$FAJ!sG-K1u>G})UhC0%=s!@KWw!(&^!excJtR#9t^)`XD z(e6~Cp{MkxQ8a$3k1dZul1C%Od=tJAS&sI43Ra0C;Kmo}SJg45vb>OWZro?G2_j4k z!0^3g8xeJ4MjsV>y8Mn}z4Ks!L^xlK>5|kJ;%~N;j5#dFMASkjWAB4nF=l_x^P0ve z7%H)5fp$%PY=BH@s}FbPi+x9W>;)3Zr0rU0_+2DK97B>t)Ud_|Dm4|<#v=s1qGSXx zNWQD!`5cuW+?yZvau^<17!j{20#+Q*63Pzzj5Tn)Bq&+cYTSm~*Hdv=)peu0c*J=M zS3gA`5x5DYO3(qmeK?z^X)0_+muBRsw^%4;o0xw;U1wZk<*uX{w z;o!XDVycs*!r$OAk9cjH;Ku#4H#y}KfNQyjVOZ-epo-`t@dfakba@gmF2Tlybc6QR z7I=E3>HvLWIB$Y|LEuK9pnCCI?Fjn)rZat&P0gq4 z0>j%1PV^d+P0l&(*4jF&d)#(Jw&kG&02kKt8ty0YI2~keAzz3CQE&pEWbtV^emcOx zqRWh@=f#HJJ3LO^e|@}PdHS&W>fy)b{pQd6?N<-qpFQkm2W~t*{J?(PdiJ=Z{J8j( zSD_uONC!e*xq}lET@}^3K&F&TQCSlYc>)`{Ms-Sf^&F4pO;3vIx^xVMurGi_Z3ExkV(NOIE%S6zX!%Ff60PD>!-u=Iv%e2rKcYB72j>GUtBxE`t=i+9V@AEU`_e+Yk$l8fmI<17bKe-@I&=0PB$;gTfK4yxdeF(5~k9#9J^<|fgX z|MHQHE6*vH;?+%@)MJ3@P9Np|^PdB0QBkTO#_Wu^T)bX9w4R@$q{n%*MVQ9}KTt=M z#8?yAI9u6lXr|a#Aa`MX+!WrYEzhKaYL#9-`+hR^{CpBNbp1Z^R9Os#o|~>2I5hP* z6x?dVNjuFC<9c*-pzi{>v4KZIpe7skmO+M>Sl!YD1?m#~@!*6>uFib5mKVDtc)dyl z5t{OwQ8e*FNG!pik|%3Xm9wEiZf8Yook1MxA-wISDi+!qKXS>!@xvEU)9)R z>-q}YFW9EYX=;~(Cm~&511(L6#v5(PVQo8|1@UEurE@MipO$tH1BZi?OI`oq4bE_Y z3Qx)$i!y=j5Y`9C*{TLX$5CDYy^_h?INc1f>|4A-*ZDlru@r5D1)-G51ZH~>S0Fk4 z^=b^Qv|CLAStQNcYwSKI0h1c}6!RQyh8f;OR-P0savv$r@BZ0aRkN=96-1BUIws9@ z<-4Fc-i8Pur$`&-!d1QSaXRpmqQ3tJH$ce0D6KkchPI~K?2M$?dTOsbvb$a_lJG1E zE!18t?Z%R*TI?gE5Qr0v(EhvYgzUb1G{U*&n3@M5hD0EhxB7hZyreL*E)G^Xx9WDT0j#NoyC7>Q#rcgj`K9L;* zCVOn@sC8R55sBF3%5X&>iwN+0l;IEk(Bgr%Acu^Om_2YI#i5&-Ly?5spaK} z*qSt6zx?MD0odU^=M@KO8qvZ4@v=DvhG-Nl(HFK50u5BNv&4c4c^<5?>`0B{DK1Q0${4 zB{>jMsBSq@&_ulmfEYh6q&x(ug&rS*Jpyo{fPD!i7l4I3P9dn1rZWmn!1l&Qwu*HA z>q!(EhLAUw;gsTvWJ3gr5ZP#gY^dAix=6u>PELkFN*fW#z5|-1NkI~t|CF0qqCg5( zV9}L(LJvmMJ@26PW2&VQYwsQ8Yz`Vg}hUq17Xc?;5k8ivW$qWAj1QD zsFA#EL;|F+2PwD!lT*S|g#+p5Jo~2?hr%e0@)Sis%J3P7x>KU_90(e9h?B}eG>uV6 zfN&z}HrFj=r9-SmJGPJ+Co*OWtXSSS+Jv#2ooD%HaJ)q8@EQe3528nwWR zT5JKNcA02c+nT$2w4#Ni@S!;cYa3({U|yrx!YIgKLIxF6HT4Ra|6^&R2`MPSII^J) zZAi*RnQ~3D-~(R-JgXWBn2lFj*vuBjV3=Rhr7-m(gCz@w$;WD80>Lp&CM9u`$4UWI zGR&lARaKPHY72tRk-}_x3qF%*fwH3|sc2P00GVt-lRrVr7BWc_UP;Qik1b1U{bv@w z1y?o4#OG#axUE1nL@H9KY2{&YLPi0E&%hT5ap^S16>4_357%LL%W4OLQ)e@rhkP7W(-4Q)n5 z1N+PN@P%cRfXV#TA}#Ikg-kvi=yqg!AY)*MJ?h~P|5v=u-(={w+ESuUA)$N5>C;4|}-*uox& z+;khJAns6FCeSguwM;5aWYew~pp|wsr#$z+JZxp{VcvLou1mWgKy19rQYg1;GeUD|E# z@udeHhEf2y4qegjW}`%RXtyybYC1`|Ad7tKvO0p9!xDF(y@syv%xn~$bvTDL3gi&< z(A!D4zB9cY!`tMl>w%e{GnwhMj7!zi8N000|2hhOCV+?!mX|iT$n6kEe)jN2RTGvC zFndcQDY}>5gf{;$fbj<>Oi0TKBtd<(7~3{26XkD_krnJRav=TDisE19*z~@5x>O=^ zDKvUpg*k|jtAAn5fX3AqP6*bhg~?kN&uD{$kRiU=CfkXK2O2;^;~L+P5rCozNys1x z=&AUVf~ylEEl9wbLWqDf48o`?_^Q4VB8BYx9$@nY!`K8{CvUWt^9LB zfk3USO1?03jj_Xxr)UmIXayo`mKWQE|JahYfl!H3`U=IU2M=2paUz9-Nr16>J*DB1 z1@RxFprYkzrGan--r0mP@GSz!3tu{zCj&Rb5(rc3AmBSW!U>&4Y@>we0*ES}fye^n z;F~tAq%w&MKO?fTNSNQr5L{}ASBsHGL=3+fAjLryO>jf7;lY(qC6g$qeS5uG+ya(h zo`V3x>>{o-REszxnm~*X2$7<=GnSvwotfB``YRy_8cl;lK0hs8?msQ)cXdH;0>j*R20xg)qsSBaeAdwqd2qP+u+NcL( z^Q_ANM{PU^5PCH(7@ovxyn)av|BI}p$3Y0q10NyNp_s4-9()KPQyyE;KDGG~3R;YP z$qR+DuC$mw41_jYIIe*JKb0CpiS)-&C?g?Sg}x#{ftWwdmx??Fam%i#IdamGAc%rXv_W428|Mofwqrfw1M2H&XC50d(!CcJgsSPC<1Lbit?3p?j69|Lg zO95JlH=@J|8XzaTHLN7d@#Kh4If>S(tAg~*(nPr2T!?%+2+fNE1lxj*t54zy3Gobx zO%P3%8i+R>2rt`=Hf%%dB7o=_z=6mpW2^dM9v{kM8ZP@$Zn)Q~CEmfXVrk(7z~z5K~YG9`ckF_?5T4Lz)s3snd$U^xbp7$7aaFf9*-8KAVQ zjc1aSH8mYjxy4Wtv5p}Cxh$nw9IhFQsh21|Gj!5#6(OFaK<(lTAhm^;Ov9TL2%ap3 ziEP6lIWBBtF~p0o_?S=8gstoHn}RS57?Fh8n~8oT1N7q8;UNQdup%rHG8lAMt!oG$ z!l{$=HFhZ`|J}*W5uMMzddW7bg%m3xnAifc8PNmPEF>$4j-`*vTo*qZ*BNr6VLaD* zsiAYtiMjHJcAcSsI|!<3SkIuF3Y~)Pa}mW7n@u~{^k5gR(bVBF%Hzt3(zJ^=3fSZ_ z4M{MFfYpMc6o{*`E|P+%xvIXU?8q5vhq^K`c?{3E0S%nuPH=Tw*GM2{^SRoH06#N` zON*&qEFrtI9m{|r3mny=K*M^VOVgOyOH&J0)D2BY!;WhQoeR*xE1?2{ua$6IX|DB5#Vf#{MLoYQq2g;-k29%guyrL zHxr6mCyJ$XvYk6ci6KKf>N++Vv^!RC!%eWkO7Sw06c5m$$*;LcqhQ|JQC&@AiB`DC zw-w;WD6}nOH`5qORv?A6NTf5pwP;hDoANi*8bFIk7c_evRKvmDz@#+mH!kS2nS{l< zOp8wwxxv6-%Sb0OsLaApCp9Y#G^4c*tc8KHivu%Z@Ws0fzKkwowE;ch8&0!aLpD=0 zxYCOcKV#v+$h8hMV#{!%4mRPm2s0}rvs}xyQhVW6D1`|2#!vGl*Y#ixmJfvE;izNc z|0?b_JFH71Hnvdn;2?&tdpt7}V%#lrg#fNgR{J#UJqYp3;E;_GB6^*q9NS)99WLzMOGVkT${m|AmI>Y;@MMHez{cEWn;q9PjahaHq%=j3|^+TdlAz{!e-)mF}n*l zM5gD^P)Q=u5n@sZ#Idt@9EnmMFP#wEe*WX75nJThU@zk5CK>22`lgV=!JIhg|91f+ zj>s^H-e+s`AcF3r(g>7A+6WjqQjo~7h2|5J4j9y!XeDxyO6n(4aEG>BXtAXUnm$UG zLJNCvwR+}h_qd%_LFk8$5|D71U}~Sz`DrFP>Yw)IXHwk95Kdp#2&s+?;e5NKHpQY~ zTuGaRbXhUOYzx6qH?=h6o;K^V28pt+5&xiHwB`>lYfB&s;<_N;A9U-xZXmEB0||&Z zlAw_=LB1MNrEi8B;k-O=3}cV!>yDsc<>@!pdg_oM48#g(yteFTd7u#%39EL}Tg%>u z>k*ZZJOH_~81d$Wu9kr2?8|0t{oqvBSZ$k$6s(pD=Zft(!WFf?4Wl5C|HZy)IRWa{ z7VhCD&y^y?^fzMOYZT$ z58bY6gSu&rToRcRNKslG_kKsDgzx-N$+IDEwC)N29Et3XOu7K+xiNnD!QkO^tE4eW9Kko9|xF{0W2!r_ShFB@{?sJJUZ#4OEqq=h8#+7S&ur1sP zzuB!cpK!mHp&f&)nd{_emhvSkCf-sP=b&__;F{eMn@Tm2N>2#BVK9g&R7YoI4($v{ z5Lr&&6NeD3%EAt@dGRIh^xUhONdPiFa_EQnJq<`M6pL(&;hSr6^qY|I1`q440rf>s z?#CuVN^;NL2)d9I%lvBvUr4`^=s92gp-{S@QQrt5)3p@wv(LG;H>V5DFvvsqLRLVx zVt0%^52=^9&d~;@2G)o-qMq2cN7f8<-Pkls^F(Xs={zxu|70zL--Hf5c5pUXb_$7$ z$qqYKSODa}pXzKM4HpWy3nez-NX9VK6*ZHWYjSJmrFP(*AV&x-sL3`cN4ns_+lp~1 z!9m4%+?u~N1QU~03hv$&tDI-Rm(iZ}83;hyP1y;LI6*~3iY-X*^j~Rl14rtCXazP< zo+@|v)&`w=($3}^7kIIn5V9JzfAh6Zdu&wis#Qd`@1nNvAQ{2OYBt6qg6z3tC{$hUXe<$J?-SFi5lXyXyk2JUl8sz8g?DzALi5MA) z)#{H9DL6B4WYUOe2M*W>GDt;cGoY1e#`Wh_a0G}5NfIQHkYr3d0tyKTBq)$Tl7&ec z793bH0Yi%vAu6P}G2+BcwOCD1LJ%TGDeY`+B4v+^l7%v7D#S?hCeDRg>a`igsveh^ z8ix`zh>@aEoSSGyAYk<3!lFbAW_-GlfJ2K(C1fNh^(28Pn{2Tf!^+jtoNCvyZR_?e z+_-Y*(yeRvF5bL)6>=p-YRi^ZoTl6~C`HPa|HBHC98R2A%0h!$5L4!=@G<4YmI*Y@ ztYkA}0=95Uk>ptM!YGdyHfGE@^Wlg(eQp^;3g+InTl^|1^>^{<;8H9nnS44laLQx| z*o#~|vul~G{%UHqC3o9Rtv2l@F-5eX|~Y(d)uiy3zqbdX6fA7bxaNJ=eRd`1;tuxWwb zd`SeS5QfJwmY<5OIfmh8wvnO*8^0xZBaS)hxFe4}`sfx{o7p6j5>kv+4;hd#Hi|9w zG-;hdVQE21leQo!g#rqZQ;UC2+S5j8{}O0dPnGRx)|Qb~HuoK8-jy-jM4Av_=0uYG zR3#}TZ6;HY46%75R~T{C)Se2hWKS!ieTijp$-ko-u_brvynNihbQtt?k1Cx$Im>m~*n6h(Dj z+LC9RYF1fnsGt^#W1)oV<3`Oy)ldO0+s1#Z-S?q91WEq7dY`nT`Nf;qy zi4k?gDLGZHv z*}@5Od`&!)Wm-I`s>ik@YNAUWGwDhzN@~H1KfaDqOLK$~up6S&nfxA2(?#3d`OEW3e1nt<(bEA9AWGm2wqCt9ddutNB}b$FR} z?bO0a8JiFWT46ty_Z?TeNi8+ZN|LgYU#!?t$`lb*SC2oUx%0NzNf1p+DR%pNn9-tf z7iaRCA-r9w2nVq%JYmaw;FMU1s*=xT&c1_9T{Y~ccEr3r0vefU zP!TNE&IX5lO%g-iSqB-F|LsJWo+KA)k6L^F!5Erb)bXa^U@qqlm5M=Wzv-&j)fwfk+1EG6NSpVa1~3WjAN%bEg} zyfe0XprtYGa0Owc;GH&%M+#)P6>Fj(rku!0G@RIi>!v`E!@a3AhcllPT49ee1aUH> zo6~p-6)1_x&`;|jfOSMd5+y`|Qlx<37T7U1g&2ty328+cNFkuh5Wp3|il8fyBMF5Z zZ3>Pe#ZjV=sAV~DDMI84 zB!8uh6$y|`@@@vI|CDhiavR$O8NODRztO~wS(CsZt)q~ol;S=Ys@rlv$sUD_VJ4-Z zoU90NxbOTVYYRD*-0H!GiWp9L$`qMGglVAbNMJprh~0hIXCj4=p^QBMZ9xV}ZDI^cm;%qn_R66VpbRmQ6s?lvp@pnxFa=TMVvzH< z>i~wFHS8Kkxihe_8B0#3z?)2{r;xww@0%`tDNJKJ7lkc^hOR&(qhkb8qzp3=%LfzFOiC_fJL9Ah0kT9xxoowlUj1I^HaQbJlqzj+ z@uxI{YOA4U{||iAnj}`@${B^Ufjit;Nm}Sa!zN8sCQWpZfn0UTAw>wFYcVX3Hq+J7 zj4=VBX~Pq_V?U+QWJpxBtHJU*NCG4?t{8czLa4e)pz!pFKqP>yKIpR{9VK)!eJyNb z>r&ZtO={sujZ1vt3VQK&Igwz_%6Pkyo2_agYZ_WTYGGHsfW~!zAsFPq=?`x4)>jEa zQe3_mx`fCQCpt7P8*ZWi^qp=cWa{o*>8MQ09L^oWwS_BS!UX^-$c6-1KwG%ND}U^E zCHy?8LYgD1$i+o%1Y8<&Kr0H-@U~ahtRV~+B1h`3M3@ViW?|QoG{3px7UuPZ^$4&Y zOCdJB|FS(Xic<`#uJVWscGI6wiZ>@R;Ig3H0p1B~Oyk5XWE1OR9tj&L$M3cUd}6K1 zOk73dIlb_a9^*od_gG{K)}_R1$%0JEv8+JJ1~)@yU;;L)kV#3C#%9hdb~u0|dQcWc z1nUPO(C41F_d{M33^QcBsLjHQ304|u)2lCcUg2)7_uug z>QTqni6&85b2x25IhT9HGzD_<6Gk(x41dPuUp})I8bVsdu6{MF6U2p9_=6N1kPSir zWEj_M2#p^yCYv&5kS&l2OM3IwMLR|YwD}r=n=y35+fMZ!Yg z2iT?}>58Hx6V0isA}`$;U(m+0Z5Ny>o0%p}=KU9LW4dAlm;zHXst_(H{4%cd9LFWH z9BhX?)-HcJ%;_@5nIMLB4CIU!%kUTjEpBp2GLnO65<=6#ERKxCVM5+0S0>$?m)8Li_dX>7P5gw5 z3=>(_5hKzFY>bC?O_Up0bC~yS0dl{V6A42$Bv);xG0<{sH9e>I2w@}vvm1J`|762; zh|%*_3sf~7^R9)h=VUWGVWi%#laeuouumzG#9IB06(@VH?J{|{nc%efnDf5(FNfmg z$Za<+>~AcIvfqQJBsBuqZ>WnbMaz8kP?wCx>Wxbp6km54knDyP?5G_dQAF-~Aj+d* z30}*P_DRU>OlneyLgNPJj_XWeg@ly;n5(9c$=O0|yQxLoSl6Cu4`g^>?SRRi3=QkV zOb}Ja4|&IbA;{LO2bmCn&7jqPb=G23$MK<2D~L_G^bPZQAX=FV06rXW5J1-ufal2D z@%RRppp`VySCYM8@@#^I7>?gSU&ye=>LAK;fClXCRyciNXdvFQXrS*c{~;5?Tm=~p zJ9tP_kU`_5#rnL8$DmeI2$7XENzjed54l&yEClS4NfmmG6#B`$*aKS7k*YWgBFRvk z$^Fog*wG6a)QuEigsXI6tw_-$bz!&A)D=EWU!5Y!^wk!=VJl1`C~;vZg4G&oVh?hL z@jwQqo!=c=hpae|lemMFg#|F$qS82)t>6i{AeGci!7er-G)AL}y_oQaK2p@hbOamG8L#x_PB=&=Th44_P5ns(jZIx2)as-sLr|DA@(<4xEj9i?Mf zh@*wj+&0obMs6gJfL8a& z)l5Jd_;^aBwH5)$Q8iW`sIXQ|<%G2;M3yL4v>=&GIARRl2(#72OU}|)`H5J`>B>`? z*zP^dfoYdv>1B2u)?Ezd!zAWHdZbywqhG=WUPk6ycBW@y|Hm0UOjmW)Ci#btJ)>Af zrA~&W_B3Qxy5x^gW?UeVZ0Dtxzuldrf_~{-zecX@tj*S3D^xM z^A#6!P7IR}*>g@Obyg=%NPuYuC!mNWccz9+*5+$*MG}mK(p?XDe&p)FqIEV5LYPlT zV$XSACugoFeSW4F!IaQ=W=0MtV(?>q?#TP`*nbWvfx6{xa?gSC9u383%xPzVJ}87n zsDw@^g;uDAUMPlU=ya+kZ?4*2{B16P{--p_iNb9=VAWGzw6U z#)aVA7Ju4>iNM{Q25O&*7?-MrQd$H-AP|$%5Qn-XqH0B%;>C)-D3yUFOtJ-$dPGuY zL__?EOj;?YRs@^Q#Z7V5P?TJxY7f3h#n@Pk||0&s_PYI zM_7biysE8!Wu_wPYaUrd+=lF>sh~FNf0_t|tVW);1&dV1k6tEga8tW2rr;e1%}GeP z+z5qOD~~ROoUX-lXhD4JC3#>6JKDzpdB}PA{|LWD>we}Jw6fo066Cb{DtTl`o=Og9 z-J-J=>~JQie`L#;BC9MmiBlzrjn-7u>7ML4S_I6_ljMXJkb^W`>WIP+q!AeN{Z!oe zNOvtKmoA!^6&P!-7zJffQgOms(3cXls$C>3TcoB!RAA1gs3a`et)}eDP7?*n#BXjP z9MD!O#Abo*@x}$3b?8Zk7LnXt zn}MZ~2&h^}Z)y}~Z!)U4G}BDTN(3m8=24jxxKW=d43Um1Ih_6mm_&)h%Ya@*L;+RkYgl+wwmPst+=oHd zo5B^`TveP*&?P6lj_>A3Bv4K+Aqi6@fdlVa{yK2C$!`i*D;?Rd14{(`8it95?|*

5acBaCNWx?|Bdc`A&1poRff-295gb>Bp_Pjp zGsYe>5Z`G*>mG(_C>|iwF-Y*;7W9v5Xo6-i+dGX$goJNtDDpo^S|d+Jp%BE*DDoi7 z-p))w$dr>+DXU$A>WWGMIk15mhe<)`ofnmdaY(`o$%Z8(hG`g2w-7-89EK)vvPp2p z9yjt~$fQ{*jN$wRDb$r*Sn<&|ARIIClXbX6bI2?j@zb9vN(>u`^=U1NVC`)v%4jG6WVnM&Xh-!? zO&2mB!K#H8^o>0v7r_>XOZXQ_F<-|h1~37j@`B^p?(1BE2IHKLjf{=mKrLFa^oKc# z&-@nLM6~+hoPRaPvh}Ot;z%@62@clV%6(k^(97F;%m)GC7Z-IqAQ5W-40rjH81LHq z#f@JE&(GbZcVILbYSFU%Ghe@)kfbUd8C`|toJmZYD_FDL(9abz2Ptg_^jw?FBm}fX zK]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 r$bXn0j-X=ROSjv!F0?7(LhOud}0}hgq~z? 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�_DQNU7cb_?7Bp?(!G#ZB9hUfU;ierE z2yAir!R9fUBd1>7`t`hZv2PcBoBMb0;l&UBJpbOj-_q01uV>%hJx;st<#)Bs_4o7n z`StJDYn=c8o6^z>KL86f@W8I3LvTToykqb|2qV0#JP9l0C_M`^)Nn(xUL#;82RV$e zJ`qba@kE#WLove;S9I}37^PD%Mg&`=@kSgqq%cPW)0>e;AcJHuJ|O`lu}CD7+)qU% z^AoU1D5HGuM=8y-u}UnnoNY%f&%>}wFvD!kLlDIj??{iR`c0vWhDxd@zjpiR%EyQ@ zs7wOQ)KfDi_uP(7;_`Iv&bMZqQBXee2>WC0;O^%T`DM%k4BQpg~sm3GLG0@8zA&8;yw&sEDeJ6RHHGN$S& zV_YS4LyXXa1VR<4EjFP_t#$E*c3?j3M3i9EJfUI%g939ni7iO6g@7$0OM-xiS|Ov} zh7rQGV~?V6DXu6+@ns@(p%d63i;G2QDuiPW?PHlmn}U-nm>{>Yf!MKS69Po8v{Eg= z-2&6OETz<5o}!RM=}LosI_M}YB|wQN=o+`6NVT>aQ*+^FE7Ky;Uov68|Q=GjwRQRpdS3)b6UuAS6ps->PbO5r{#wWVOk z6;igCgcS0n&;lv~$RL1q0$M3!6U4obKoeFJBx3TS*-_v{1_G8U2~hwV#ip=@WQ`(y zgk7AVs|(wyP&1k%&yRMH`~Py{k=O6#Zxg7lg;eR@6>CC*ZBR9;4`Ucp%(1e;41o2 zhAEg*3!S4EAgzfLzFjjjxANFP@<)mdNMcu##GbMw5QSaMrHZUbfIzgxiWn-+jNGe* z5+*Q5E|60b{g_B(nEyyS!jXatQb3$7o_LTbAQF*VkYDK<%20>~CUyaR99(Kx4^l|d zSi7?yJM1w9a#GPAWOySxt~LQt^dp}GkwUMIrcIdI~4?99?mGf%F=IlWL)J1Jyld}a> z%vx5?*D{sfB9L8<3tqd_WL!E(hACVUE~v@^QzekWW@1$d((GI`!A4WWn#6>O z?Mo%9umpxh$5;d~;s!Q>zEe6;0$4oa4J$U6UX6j1m9rT9S`maPu)?4M*}_#pIuOF; zb8MT4D9hkNssD)P)}gv}tHr$NkA4cIWJV-F%Lw2Pic#~eQCNj7*ziVH(88W6rGiFV z>WZVeim}@*NddWA7VTc_Lpud31br%na@c|u3^iI3kTtKR@RXED^;Z&*N(xtAasvr) z+W0b=0CCo10!pB&czu#fi!B9J3P$jP;boeAB_XbmT1p3fO5r5nucZPurfQ|Kg<23` zz*n{7LJBL$@21!=no{vzf}nsGSHz;?B|sz^LWWJ0f>$}#SY#l{iML8Zaa#~+8(^D7 zGGw+=7lX=@Ay^A3Okj7wx}4=eCX%?+&>pm7PGoFc$G8+Sb@#N#N~NHQT8y-GCY`QI z$$8zEw*Oep7+D^y=6sdJNlJoTW~>k zQ5kR)qSy-IUbY=-o2KW4MT$D%?IOM@Z5F3c7fMB>9T07YD>e~dpBWB>9+UuxHON81 zE~V2?JglAX49La)dMp=PjjFg%&LG7^xW2JNph{kt{!cydoR>fWFC!Xgyi)nuqwX9w~uaS%VD0bM} zm%Yxxw+fm{G89nZhc}VWdsX@luLx6yd3QI+>4~4W!(SgJSAx7o4CQ#Uxa@Ks1OI>d zyRUsf799OHv3|;01E{{Q|GPbxe@lRV{`%*iIA_;CON`%t0IZJe3&4_SKk>jn0;DMf zOu!XmKnEla`g_2T$UOY> zKNft!zu-R@EWHh!k8?4=8BCN9oIxC_H$bLYG*<98?S7GeRaDkm)Fs zCak_1WIpb=!AyCR(aV>Ru)-*WksX9VJ3AQR_(AeR3Gq9LL+Qf&P`@a=lHU-u`0I)| zLVt{J7(6v}4t|pe@TI zLYjCZxH&$AaGHMkMcO*7O#()S(!`Xr#eT6AEkH(FgovF%MFH}cNo14XNXE&Kgz9{@zJA%RLI%rL>8PBsPnePk$`qupeP`NbZW%B!;@)@L}--6f)E+1APA52Czm1s zfzybuypy;X172COqVWZy>6MK!mZ_{tCIYp3YdT$-7&a-cbJ`WR%9O2q3yaw{Qqncm z5-X$}4>oMVBS{R4fgou5pUCkRGS~t}f*XPwg@}PBtzrktbPG%I7SQn)hSGvj7^uq` zg^gjGchW~uR25e67R>1?DH0(~%1SMK!=8vLR#5`}DyFz{FrYx3jhV39Oo}Lo07)pT z97>8&;7m<=BcNgqQXq#mpvi*J0&<|TpwR>zb1JnO&HSl{G5;6^Ht3d3D9gk=j&6KG zA4!OoVTD>aHHPq=+H5JPYKo`;9p>Ny`IHzivlPSu9Y~wDlv*h$Qk;c&r(GeXcLN_^ zkp#p!9ni6|lCT(UfwIBrhbfo>aws#ZJ2P7-g&G=B?zAoYQZANax2&>9dK=Jh>9N03 z(1D;LjVYRX@P}RDg#6i0Qm6&g@yYdc7Ow0{)Gz*0m3nZWRpEf! zbg*f11^Mxr^^$_a5H4(7wVnEw`U0>^S_o1YgIv;;I{#GyG1WDbsxP5z)DR0ap72tR z8B*j>$`pK(myybbs2Bu-Cn%}~GME4xRa1MYCrR1@b}*+DC7q^dg~4*KSe=3mV265m zEzB_@D2j@snSy;HfHnXka)K=oRf)7rmM5a3EE*$Q4Vc?%DG{?TR`3N^2%j#yEfu}3 zWouGXy%@RJ9a#fbFT1hGC`i^~2Y)a#B+94~YwLz16{ShA*QB#D^|3WBPV zk%&x^FHVSnRi>9s8m-jh}L%P)d_Id zUHQ@9DJL2AqF8+$0XjO+sav|e+X`(;FY26b*#dEC*ZDL`meSgmaimB~)=pCpi^8MJ z(NbhuL9fMS@CmIML%cG_ZMTW%12QM(WJ{lo7=h0QfMD|F->r>qe&x$oza&iJ-YLJySD=! z=sh}Ul37c;qzUkerEr?#^-Y{jQNe@0CjZ5*?HyDrgNz8+HhJ;Q+jTWv60AtIuUIoB zqunrlftYChT;lLl6r2=q!YGW92&as)%z?Il3aN@^yo;h8Z;~P|*tU@}qupr*Z(40trJ$F1jto^I#BeJefTfXT6+q1=dWtt;r<=-n*@=4bY2Gu7jvI`P^LWsR!F7 zD1YFD;i24gl~H!ZR)pkS1(ift)L+6_OeQRklIxk&fmM2B$7P9%V<8||L$>LunkIE3 zS7Mzfl^B}4uLMwnY|NCYNKW~6(0~;r8p|c3aO0Pg!a>^2>um+1(#b8plMVzsN z*d5LxH>fb5flw`abEjH>GE>5su;qeyc~?~(npCFvV}q$gHM%Oq$oeSucrA=GjLpJa*PzbdO; zsiL2eCZB;&pF);^E-@RD7ijwkywgc6%^@z@7XlcASZ#=gFdqp9pN3dlhDtaBxTK+s z-Q4LZ!}>@HBIq!Jh2-R!y-H~!!n!T^ zte0h2V{@8<7|nV?0^=ox$nk~EUB>9ugfSrAMbegUG2rO!mU$Y5w*wYL5tMpU&8X?% zwEUKDs+hL|AW(z5vAdX2fa)40g%6^%yp9;qAq5cf)%yW8{sC(V8*7Z|HkKl6Vh(D~ zIN}Uk2Q5GXNwFA*TPBFo1cX&&f!I39a6Qd_uzvn3(>5jBV7sMg?F2)xh?6_Qn?oqv zO;oWK+lFm7UTw)(Fr6Y1@r{B==-%RTFxB2|M02pvd+pnXx(LH<$xe;-WI=Z5Sfs8| zg=R<3DN-!t?!cDei~s02(Y~_CUW+{{Mbz_dv(#JeG1V5*LOM(D@{VrIz`!OH1io3yomBD5zldo;(Rag1g$(Du#0l zar4{o{loDY#BVL=o7hM{ z-#j%R!VHaz{7P^k%{`pLB%`^BjCgOz*-&kHt>^+(nl_(G7JD z4Af1eKvPFbK!;jNbn#U;!aZ!hCUlr{>pWa9LtX#zUFUIM2XbBy_FoV3To-m=A9gY{ zc4F`KV{i6lSN3E__FHH6XP5S3w{~iec4yc2YTx#0hxTvBc5uITZzuO|KX-0V_i%T1 zBW&ZWJB$hF(6#AUH?Q}Kuy>BVcYV)ye(%M7_xFBBsDBsufHw$y2Y7@h_=Gq3foJ%F z-|>g9@rXZog|B#rUwDYec!}3|iobY^&-jnu_>k{-koS0#FL{&~`IA@qlqY$Xe|eXW z`G#-#d;cf&91QL8LI^78f+bjjuDtO^hi@qNart&Xp+EYf&vB$DdZzd8pilatcY33T z`lXk8rKftVZ~CX#`l;votM~e--+HSL`>r4Rsuz2-FZ;Crdb7{^wolCTjkwzuFDp=( zA;^MNhy^T|JHneizsJo^=KH^g?!fPRz_+`@r**+k{KY4H#CLqfH+;x%{K6mn%4dAZ zzx>J1{KwaP&+mNDk9^Ayeaa_&&KG^mAAQu{eAO>~THiz@81WExi%N)|1)!o>0E1ZH zeY69LBab+KK8z}`1S+`uRgeWN;C?mQ>sUfPCZSm^XuVc@yefvf!CZjye8FXkAEum(G z!BEK)lf>NL!;dfjx_69|Zqk;?>h#!^`4g1)St@A+l}cC(H8h`s3o_VXYg|aA080`& z=u}Qnh!IpQvY_Hq6h$3Xp@<`rSfYt1f)qg#5kw({i!FjjKo!$fL>!7Y;+Uh3J4Tk@ zLtDj|Q%*=&76B6ANpRQ_?p?;ClTSh!rIc7v@sI*aNT37-RZ6sw6--=dr%ER3%oJ`Op$vR8mEqZ1UNspMO@^gho{`!9*n$Sz$>PdFHma#G+JC zQpIk7Qd+5{mzp*yMo1l&CjpvT@&yx%Rxw2vg)Tv+L-k?Ws;jTUDj5}?R&<4E49scC z0!w1KXRN;h8?3NYK{y2y1RPpXs8m!zg%_4sK?N04a3KYS!(yAQw%aas#UnWD z48g6r=c1c#MwVFQ$Q4#x;V!)LUQs9k*Q%SZzWbWHtG`PEysH92@LRCK2lv@UMpSgc zu)_^QJOz^oQ(UpdXxf^wB^ujG?!_O29P)dDZX{?ERybkB$t$D$Wn%b>9J9;m103rDV1p@#C04x9iF#v)CUI73I{{RUH97wRB!Gj1BDqP60 zp~Hs|BTAe|v7*I`1tla@P>~}>h#o(R962!w$$}wIs$9vkrOTHvW6GRKv!>0PICJXU z$+M@=pFo2O9ZIyQ(W6L{Dm|%jsne%Wqe`7hwW`&tShH%~%C)Q4uVBN99ZQyA%CczF zs$I*rt=qS7{p;zkmZ<-7C28(Y}b2^fk=5vE#=oB}9opKr&^> zm}xF1V3MOrfgGh|9!s4v9!|VC zRMDaZCO6JJ;b!2?qf4KD)AvA)m#JsY4w3-J@7lwQ{~v!+wQA_(S-b8V68%Z;6X7eo zE&pJBf%iw=W=LOudV={u6ySRV4rr8tUG-TODIp|R3#>?rEmUM_C5u;vNf(%6T4bJtWtNtJ6lJthL5-YU zCnrMnQMuB7a@vWXkp^A(Qg+!Dxgn1AZCGb|c#3G^K!7%>+oF9Hx{##v9keJ^iAt#F zQwpM)=4efA*=0f`k~tHGpDnjVhbj^jg{MT7|5^~3uNIU9ic%m^tDKh_C#ytY{+dxj zw8qsdL8c-LD*>-2TT`nmep;FoZMZ_?W)gfRP^7zhcM*?GBA9IgpHVhOJ7h>PZW7rF z6on?NkV3{3BKoFSllV=>C{x$n3#h)m>PFdOQIMOhZBl44N-LyHAke*W!f0E!!#&xM zZJ#|_>%jQ#yKQ9|CoyrpP#zf+xE~uNF2sxiOi;P5!W5;17E3!wmlQH#U`YX`RJ`bPsmCwTx_tS&&!Qck1wrofsoI$t_oAnNPo68(djBg zc0pQ5u?5rviPDcfwrqj)!$uQOw7X*r|Lv^J!NEPy(oH8M_&`yN@wZ@PYfFF@egk#p zZ-7H41sT?6d36LLD<*Qz?bt$hD-tNt>!F;dj`${`=k2M$o!_PfJGPMWTkIk;%R1d# zK$m*w%E8M@86DQ_F{3_no~;(F_~Xwl_N>a$ew`}-aTHpR!tlYkNwG>j(7(+&exump zPwg6sLC-JtlwoCjCQEg!bIAYBxfE^}y~z}&KV*OBQINzIG_kZTOrdm~>q`_iQHy${ z4OX~A+!*Ll26_z(K)B9}4X}VklY)&hC=gB5!X6dc)5kvO zq;NT^a+nDM0d)4VvLQ_heQSj+|5{<8WhrMN$ibR~w$O@NsB2a)TN`plVGmLmEn8(1 zO%$S_HGjAwLL%Z!&&H^nR@lQHt#H^8Nz%A6-pYmc@P|EqVYg`6DvJUkg&b|6uBge4 zZU>B75=haG^Od18aI76dFf=DS_5_3_@{z6FI7TV7B6M`KVndSX!z4sO3aqGyJ?deL z&~f5zs+w9Il_kcg2}BhB(Bwj(*2d?Sv#}^D-`g)9SsCMzoeNB@wcdTwToGj zs6{)rpag??Zi|v3K>6sl{|Rn=u#ctd%j`tw3em8uo-2yNKi^5P2-IqNmhz_Ov?e-V zw6BlkS`j(%sZb?EKoYE=+dS3fQGM2feW-k*1V&K{0-%oo>a!^EC?f@hRz?ce<4j*_ z3eIqu#3WCwX+9hB98Db$K9cfX$INLcbpnV_uko2ZBVfsTw1E?Z93uZ#W>0brloezk zMJN?%x>P;Uq1=&b?i{MMHdt^+KjqB9NU8u!wvQ8GZ6NVTcEP@;?1r~lOvdoFG2~@* zb*9cp17k$nc&kmEQFQ+(#d7gS0O%f263=Y~{uqedIkp13 z>-}Tx;_F>Pda(=%kbovciM}LkVPV=UMJenCHOM`8hv`BZGNHSLEf`n6kYr^+c1zoY zz{gn`LY#;<^s4(|?Tw?5!UUqgL_UIWxDS&+Bv@gKHYg{Qt$1sbUX>&mCr56ju$pj` zh_vP+^H%Ke2N$M*J=V3tb+vV*3_I+Q5W5R;>~f^`$lx>EzKRsSC{vXCuoCTHB9p`z_p zTgfSfeGa>n=~~kZ*~c)^{lXohenx=^UT~*uYf{TC$6>U&04!JCV82f$Cx!p~a_GgKyk)K(y)<)+Fyh z0y=x5|4Ub0%?NDkNg;F$rs|->Dp~7s?pX=rEiFEwsZPp{s}J>vlKb%JCKl92O<%o@8{j;vbjq`5Ear z0rLuE3RBQpeTP`P{Lby%eiwZ~$xujJl!09X{&d4eAxB@_a@h1lx+wjT>+7x;@pHta z|LEllku1`_cElfIACazjA$HAYlRslvMMr>AERUt#_pTH)VfWBM7rRYkVE9LT>cum? zRY`;-Uz6uWUb7)hAxy|IW35020akj=<28aeHTLii6<0P2^LWK{WKtkEnpAfShBYik zWA_zEprmAZCk2sE53aCYg4cHwxPF$@cNds<*VIz+#tyZ>VEDs#1o$>ZCQrmSf$RcO zr&oFJmSw@AN2TzBQ1gGJAW!LKgaj}KK-dmpMuig4TwYjttMn4kLQQBV7exhE--H|G zGfrjYRpc;4L^D>LkN`?B1~Or3(pJpYS5K^VY1)G3BRHZfS(*|NiH>t)_otG^!)jqFi54V6W6hZ(M5&@#vjD6Em z^+!(3lWcU8NqNRqY9)=WKuVFgB@R?pD3mwtkatw2Fn;F>r4UMOV2=7jOq)PXn;>?f zbX^3Xi0ZN>=u$M=GjM9f86Oo=uBbP$#t9^1FNft-v~y%1B@kegFrw%_>yk5ch+C}C z2ECI6Z8Zf0HEZM&Kx9BlPxdeg5CwynS=UrIBeN@mU!GV|mmLvh`B}7F!ikQ?1|*r4V3`$OUS|Is}k+7=lcE z8DrGyVg`P$C;^giM*qNm&KNUi{2bD2p~&^(#6UOvNx zq)8#jWDBlfIx0DQTVM+{rc0YdWClh%OC}IhG=*r!87;Pck?9Yd|1brt!=040cj#gv z1C~ZE)HRmGW(oK{$#G)JQB}2IK_;kU2H|6sF=Mq5AsTTm_0U?~Rz-IsV2@WJoiu{| zPzq!~MNgJx`xlP3a7q%2WG;A}u`~q+Mh;ct0wHxv@L4zK zlpKMjq>v@q0bImWb$9x#r2`XYx1>yZPUX5RlmvIN|5Zd&WDoY|Gw~UGv1Bv{rn4_d z5UfA|UgKKS#|bYOgC|J<{Fh@VR#T$%4>}s2li5siBzm03dCGyA+()F@;$Is$wzdG8 z8#b1$p*5uEMi%z21h8fmq6GYB zI|H_0mK32&vu3q}xUIBC=9NYgq7gg>O#5kmFc?yv+X~dBgl3jUYqXt2N=6JSL}=t& zg&AQGm}IC$H}7VSqC^U1kZ6b(q37a65|*L&|LB93%a@-gcBP;_Nk+a-i-fJvtd6r~ z75G|O;t%B7I5Y;J=t&CYq@6-5II#9)`zsUE1hay%hUc`3ZYWL=MJ~W)V+T_{=@@LG zLulXzbrHjI2Rx>xBa3w-nxu5GSi`0jgmkuO3%y7Rs|T0VOAy#rP=Hu^?ORB`QgBid>xdTRH3iFzBKbMM7(L#DshpasJ4;dRQ%@{bXnSNg zoDgg7&<3TzU+uCb{@?~vSyCT^R2{Qek)jEgB&pUagY%_VtHMC-U^VXYhD17&L^&_) zI0~g>H1XJL9BFziYdY`(g!CGROC&Fo|1}~K<&dWuT^39b*i;aR7mt9pE~4vxq>4~Y z32ug$l4f*B;Yd6I)rvx-tA`Y@wZIO52}+DwPYLTuJ_&45N>D5cmtCW03lvsn)QN1# zEahW62{$fHGNw~`rB3NC54*o5Nj!}983RQxWZV*E8CnEf7M|fPq0uk$8+ZE~hG^7E z-n?SaRZM{QOmH_z)JMKBh?vT;X2w}I;rI_-W3^nM1uyiN%{34XBV!?@nY6@z8|a|T z^_lOKJ@()ZrFlogb$D`=T*Wj;>J_)I*?XVn3$tkwcZ)xtbSrx6v%I;0kEJeDL^oU@ z8Cvj3^ZK_&TS$1RF4&_|dxu;F|0q|x)LOIRTbOsb>~gz#2VD0VZ<>cVTEhx5Dr2X| zWnr710;aQb`DE{zeNp2=Fa1uevSBGbOXNiWGiIh91U3ZWh{CKK=4GByOM-1OuF@qM zD0g25L`&&A0gCxWWwnp?5Lrc2Vf50*L47MbXkhhF3#Nkv%+sQu2bWvG1q8GOV*oN% zZAn8kYH&A!j_pc}Y#(<`(~VVI|3d(6&__wIJK5FhEIQ|FM*7A% zT4PaYqgYKGKKpGCd#j6>n8irEDkYg%gJz4jU^}i1ZbLIXBX^wybxIq|J-NM${gbW) z2|OZ$&##YIM7dSDvnI$S zn*+gw;msrxCz|VkKK-LSYqdjODpv*;I+KQ3>?U&JYCCcGMq@Rlc2$=UENYXAahW9< z>3wmuY*$>c1mj&w2n6Q1C{JQ@L?WY5gSC&T$Qi67%=LO$Qb$tvquan7iziEpfVQ%B zQ&y_8KnlT-w0DRZv`ToG6PP#Vw<^s<0FfmHo13)# z90~3muA#Gj@K;D8WsA56nIW}Ds<(l^$+O7iQh785@w9>BC+i#VGhM`tv3F&7kjDUQW<@ivc8YhnEt(N1BIwMi_m+kb1r_>pA0^ z&TWKH7zOz}m`DPF8hV3Sb<)-vI%L3$$5ux@myd64TV~1yB`seHz<>7Fx~t;WQgFVc zpalaYO7TdQ(ZYo;bw~nnE?xwnU*kptA%PU=yFg`vVxxDu7?$yZN;ka~s+^gl$4^)!3BaXk%H~!` zXH26<0Jn-8(}=qSamlID+_f{3F60ltAYYtd`4wffdWMmo=2B3-#H$iY%BE@+#f;FX zE}&y>%;*jZT3)6~0K>+S;>P&K#ID3F1(O)2GbB-|qsB6*(3seP^NO$cb^8VBYkITX z3q+xc|5ys8L{EO4Fjf`a&Ym+3)VV_W$;<*T#)})PX2R`cSpz|Fo)3t4FRBVj<)nnl z58hS)A%%dHG3{)Tl8_`}gd`E9Y#~L4K!PZ>?2%C-;UNKAn-WSPRjXYq0t8xZQIa4@ zL0co+S>&=LffQEtT9Init|XU~Nw%7#fg7CR2Q3mH>uS+IFB( zL_&$7lBQhDFmn@}^{;cuC08+NrEM?W!x|Ha+;t<9wqC*Dm6zYZ&KX{%VzZypNuVaVB7BRrEwbOBYGSnF(5}svVvHwN*xz~n{w6TEW4ApiSu%}cT;@y!8qJTSsrBHbVY?Ab)1 zC@NAeVY?HIR62HQnKNE}{~Gn(wC9Da-FXGdm&(P|e$4mR8B>~FbYJ(qd9w{0^)KUT zy&X$QXVnl;;gr_QckX$YSKZ2tH<8?&T5%m$eWxG0efQsoKYqo^)=Z^@>~AQFR_Y<6 zyiHg_NMtyMC6#<8F2>Oa`*@{=-R+8jka=L&BoRUBEpLK=*}{MxazS!w!T&4lyWfel zrHPyrMSlMh%+5~OD-~)cg!j`Haq7X7zQ|8$E!|3B)y2U z#PF+-fnnInqOb)?01Sx~qnPg42+EZqt%$rrS}u5LtX=QIZPDRjc)QHo@0JVOlC?ZdClzFGk;aRCqmPj*Z&k7{cv^3Q`S$1 z*aW9wxLK}m8gZQAL|P!riB86xQ&&TzRX5o=PkK_uGfb>!K8GnyefHCz;N0ULd-+d- z>Qj*E9GWfvLKqbSQ)M`7WjPxPKFv(@X{BVDLmgvLNm8<9H$!j!jU+Jq_(iD&bEof39Q#OspkDu;) zsu80~nWhE|iji5SF{3HWt!fomQ}q>C!D_?h^((0ETc1+Z`cG|&Z>BQ!8c2)zn4iwH zV`Kv=NL46LcL6n+G0ka7+v!(cSyFg+{b)%;Nm$3oRaaFN?EhrGCr`&V7L{IuCr=Z5 z(T(m7eC=wD7*M0i*0#hvC}2CruNqbcrN{K7 zA+v?T8}=+QS|CRoMwGr-qHw6Wf~&^#T1vy%td!5SR$YDj((INrvkE(8f|A=Cx^fq( zU&Co%&$}5!;!Z0;+%8UgOUT-GExp|}Y(NQxQs)Zki8~@DX@gbADy>s$_rJT#QPGmIr z+rlQe@V`w&EXP$N7K5PD+Im)Nt`Fs<1%!+dYaJ2aLZ@P+T`3U8%%~$4UthWbb0m+-%Y1yIGZ>K zV(m6*tfYApQ{Y6Vjm@M>C-|?!%}mVjoETtd86{a{^h_+B<^Cxk(&AJpXs5jHBi{2f zf5}o<@=}UY)WQ}cdMs%Gqm?`kFW#+sl`UKmwEs7LD2^3gOq8Nz8dtPp6#gg$n!4s5 zz--D_?(uPe3^E19V4UJxU`0#(5#xkMF)Tu=M=e64oL)wFN|CS$0u>W)DO3b;1h_{j zI36HUTuE1Oq*8n&vMZ01#*`!wS= ziFJBmb3Vuz>Y>~Lx>Rd&5AV2Age{f^7Jnj>f(E3J zN*^L+>ohL>K(fpdO>=G83Rsv*s$>gR6#v8xPgxA>$5m<+_BxeeF~}xLVUIRUNl0Wd zo4QljGc%4O*>5&6WD4(){gL5n0VFBw2_psT2axc`e?BP^FZpSky%q2!b1WC4vQb4V zz>u+MCXFSD{oN)ZyE82$k9@D#&`f2Xr5%f;UNtl2NdSQXqqk zs}_C|r3PCYADfbggB5aGHVSNxQ5cCSa0RD0Hx|2|DdE2gOP=z<3gSqPha-bI>c9$` z44~7Wb_g=A;+@!m6W+iQtMah>Bf@d1BAG+N&nP;97zLa77UiI+De=LWLohlK4G?jM zMY0F)C<#_*hv*2N%veGyp}HXax&J661$!6|rF$ldBbSf}!VWY+A0vg4n1m|Y4&%|a z1_Peh`3~9$MCC!D13SZ$38N{ok#>;++Hk_OX|aSbJK9-6j2Ju_^FRpn#1pDA{J|eG zs0X_%A&KcLW$7V`F}Fc0Ait=)HzPfyVKjz_8#CEBH!D6)J1#miHHQl~r`d0y3D$6Nm)_w9nX;NqmoT150H3@2qQP?APuR^pfl2wrrRW|90Ldm3y@$lq;Lf&1Py{%wUT(mPr)Ms z@Jbf(KBZu@y`&PU^h%H0%CYPp4@nT1BZ(Fh2+tfkB=I&WAOoy~5;`o2M9{(wQ#gT8 zvkZDojB^_U@xG?SIR7f)N|y8wtL#cQ^ElVk54E@m*HO+PQ8>$V4XOMT|JVYw{1h%6 z2(J{6N&FXmV-=QT47*H?yzCJWl!UHaP0?Tw-PD`C85OOtw}`+>eJjlVu@p%GiO6IH zE3(9^beO>KOoBm@%xpMLc#v^n$|*?*wj>Ri97i#rDpN9{9y^i zVLnp}3!rcnwjhOwSqP9Y2!mk0BWV@d;0glZ31~q!wlGmv0Jl&6yxP?{_l&fKj6(u;L z*{DCIlJaw`W6>B6Wr!5@(i=63W)le}J)MJ~kEBpjFnvF6dD1r}0KvnGsVLE^s3OY}nYmO}cXx4Acr+C<7ZY zJ9p)X#ypX$1Vh`9*PIwxFr?a$ZI!U)h*I#sOVPT6D1{X~5RovGMLLP?86Oa2m0Dm! ze5p&+gv?fO1x-{4Bq)fHD+QBa3kA_LGCT>_@DQJ{B8NOpElD|&Z9@O}7RAdG;L`#v z7=w8e6nPa7nq`mDsLe8PYSDMh}>B+MHTDbP0c6+5#tNB=Sd zEqKbw)^%fEakqm^IN5X<3JbD$!wfm&7| zje;-`A6Z!}xkL!jivA1{01yR9kcRx^Nc>SLc;z%P30!vPHXz@JNS}+85&w8W4yVw! zlOsb?;G#_^XFV#iwtM4{_NJpz<9V4?Z%hq3g^E<#B=4mSBF0BnHb>kGFTkt2Itz=r zn1Te5i?5K|rl_-}JIUaqJ|A7Kl(J#Rvo$Hv$AFBpwOj{Yy;W$D-$hy^rYH)kD+8n) z(W*!QCGb*5B7>#CI~iubfoN)#iM%?k-iFbi84_Yc4vJrf>)uk|owmF)Qd0VKW{Y9f zIUSSYJ1PCc3VqZ)q+o{)SP+g7>yT@Qq7aDvX}A#Sh?$te=IdSSD-0z7II))Bl|GBj z!)g49lavEOy8!9I4!wbJ)yz0P(SuXDBgw>8f+XNSdzcR@(FER;5&uN;pk<8+j&O(R z7{-X1Gb^?u%rmvA4x?77+UkYgdo#D{oo%YD35<|HpuZtr?qETdsRBA=JBdeR z4pJDo>9oKcED4VO)-nQ1e}I*+fVtH0iFz2hDk7bJy}y}z!IEIuE38nn$;0R&4qI?& z*sxo1Zq7Cd3rTQU{jLo;nSfCi6#eNE(q#*>uA*vQWLPGNSzhE@u8_m}6P=Y5a)7bv zBn4j(W-3W#g=3JL5V&e4aP51Km#a;zdRQ!UlZ+1BDXfLpAmj~~aP(1tNQ^m7qK#7? zg?>0ud0j(=_*V&E)&&IUF#KE-G!4f_I0e(rJ+j08?y>6uk^k1QnfRq0DPafP{);g% z#3+JrBi9Mq7?CPTKrVPg89k1KE^&c~01LOHM=tLQSrDHExi#-ZFb}csc67>kU3Ym$ z<$m7$feE9~kYY>>%`?YJX9%s%2=b*<1566+@HQ>TAgZ#mzcXqF9+@~B7lPy=o%B%! zByIV{%GUghR$1PzCWYRe3r@)OygcDLLu=^k#RkSRWeH$Qwrz{}wkTMIdf%8{EUm_fFu&;dHrV+E z+2ebC@;-JLS6L1~hQfzK@kqG3)Of>NmKC7Wg1NK|M}`kqv1B^_5nDKV7t4tU=|Zqf zVUhDxPmWv}IvCMVsKz~}~VS=-p#b`ilf8Vwv%XQ=n~NtO+I zMnidi{Cw`aG2rJDySKm4ih=l$AJpWhb-(MJg8!nRXh>FYa*=2|f%BEOwPEBH0P0 zjMp}5Ann2FS8{!iOj^x&1vzXYE{{dTdcNhVr9=3sRT))kh0Z|%%&}*$Vicp zWK26(Qxp)8LXH3dg%OfSVTTYTMT=4-ZP7%)9)T?#6G&lIuT8{;_R2^RNzx=KnFN$X zkV1+T#4V$2*`t^MB-E%>B|%AEgamCO#EX_4m;WsiDJobf$tKPTN-Rc^GKO8!O?-Ji_4@TQ z*d$g#Mj2NaG-?8(S67XqMbnmcf~WkAz?R(>B{cbNNg`5`Tr!FY{FTCXZp=|JDQ|L^ zw4##6MKRjiG}PknmVC8tskmAT+Mt`bY)k?&a6MOdL#9SO7A$ggjw=naVoOX(SVRCR_B7aFP$Z4w4<{3l z6bVedNf8Arvb9o6E3F8XUxHpq0g@!Gs7IWB8YUEa@Xi zq{!AKCqNnnV_UY=(@I4>`WaOugU)#0k5{qS4k^SXF-kqPc(>r70@Xr*lqu7+Y58r38=qfabcMeuv(eXDwv#_-lQB)|kYCZP}xw zj1nL*My0fY)Q&xO{WwaUqS7YfkX)7`<%S=|*h)ki5`d9EN~-ANQA5t^%0yrCKXGBwAI~dnNmla5Z!c95}{9<=krxrx!rTqUMU2$bzm7aN?9Vd!j9Dxk>zsIqTVfOQ7=bs zUDl#Su{Aqw#ALEj8r0Qjf`YZB=^I|_hCgVjjZD%=O{6Wx$lx78RQxvNPt2% za*sTEA1O7-n*Z6E26%OJ4`?RIK0RJifT)y@S*)Uvy!5ap_23MAPzgl=-jX!}I-eFU z1iY@Okv^6Ti&t1##%*%5o8J5n5(u!4Rm_n-AN=7m|3}3Oeno~Y>`$Y9m7^VD(1Yk4 zRy)6(2^F}gA4tNNtO zE2cof8UJ;uZoMN^a5uZ=L~1_|94pPDn$?l0PEavo3cREc$o-7cM zajX@bSd^3Z<}=W>T{LgsOff ziB10{7ml+Gi$}DwOVx_ikv!y4cU^hPa-uhWo181T&??BVYSNIUge7~Bd$3TZ@iX!@ zBw3QMJ&@ExxduM4QZXCOak59724$_C~4kkVH;Lh ze*eZglzA{T;uW)4e&lp2|62T?yMA=U8CL3e*Nayfd-W@29qx~X+nK^?l`lL#GLrd| z2?Asy3k$|?r6aZ)*EZsg_)IV zUc0MZv!Z#RXx{F6Kgryxev!s@*0CznYu+8V7q4d)w3(BsN{&>ws(6NqgO@wWls-Bt zsLXL{)=b<Rw_HD~{O>zx{`Nk;ARsH1&kO^jm{P1c4MpwN|P!e>RLod4<~ z)!d&temm3j{UZP5IA{L^dB;Sa-P;r};fcX{ss0qu`%r!3a_6~VG!C+U5N$_-MffUU z9p%9BTVDDgyx$5pBsVe5-}?+%uA-7Q#$_A{tgoMB&f`DNr-GMX<8xS8J%? z35Tti!hu)L)RE#ehvd!p!5|tHG~o^BNOh@b8shVzTX-c}ki?B7_TI3NVlF+oIiT08 zP5rVtm90#;eU07U{BSzZ9aN@|Mk9rM<))CD?sqJ$spyc#73yn$^L3Rz%it|#n)OMy zn;VTwOG6cy1E=oY|L*4Oie)uItfh$au4w!w{xcIFuO+umO~}*t>|9@bga0$npI{mu zM@0X;XxY~pBqRX|VAnZFMp09W{#FW>xlu#{`MFQPuS)x_~>|f;-V5H`o9-yJV|2{GE`qGKtJE_ zEdzXCo1cTdnc?ndU0Db&B%YG+enbFRRARkWSS0mflV}w|bcb*Nn@HW>c^Ka&1XWsr z#O?ix7Er_h4onfD5TSt{1}0U*(I3vZRy~k_gH>GEErgH^3Mu%4sNmkw+z8Lq-oVjX zNEp^?lmt^S1!wdTk8D9b+(KPlAa^yEGeHYN*n&TB!C>_n*=SV+JpV>L7$IoLAa)p& z+&IJrB!CZARMVtUNyHy4L7`|Y#Y4EmEo?!gu}~Jujux1Pa?G2}cwt~5%}v1Ev6WY0 zl?BV?h+oJ~Q5ZxU#G2&2T~r8M<5Wx(XaZlX4GQ{K3~mT~BmrGvVODvBgK)t?z#LKZ z&t8!PS{#Ij_#ypx;q$bDKa@c!{6afOhJN&!d1W9gQWi(NV&9S6Rj3{p5D`&%MPAqg zDRhXDc!rRqmi^q@iN(YMUI-bO2t@tLFZLXbj8u()Nh@#xD->b#ZIEY0(;rnM{W&9$ zEJ#00#L>v%2_;`gNP>p|pKJk%p2&zTs0SN5AkF~e(9Hv;b5LTgank;CJ9KsybOofVQl=7ytyDQg;FFr6Ilc# z6Ow@h@KIN|UKHS!(p}I9TEtFjMopOy!yskwkX`jXlHrk!>eK@pV2fJ}7N+%^Sj}BW zWW)iDginkFl?VhExWga)h2w?YES|<()?{Fi0<@ID6il2dx`$cPP6~2TMMOa&2_6(# zUL4_ISZKjRc*piE#Hh?gLjaH8ao!h|M(s@1Q+}aaQvXPygiteH@*hD~q*C)kNxwwG-1X);y*hoV1Y-DbzM5A6!*?CU#;N+IL&;9u+lg!|`{OJ@Z1*uBwsp=_{ zKI?PPgi;s;LI}$gWZ|4{fy?xkk8!7JJpZC0iD39Ns?0=0K>CJdj6%ue-gxK+Nw5UA zR$pb1NpIXvM>J}zN=8{o0xA5dOkvGXL;%BLYNTw!TRg?IDo5u~#>H9&gsi9eD1`(N z-xY$!cr{*@w(N}62P|@gd2obgwU0k`1TBIP&8db2fR;>5fpXM~k6@8QUK z?i4rrh!(s^gSf&FLT#*U0Xuj|kwk42kO8$cNIP6ng5a&*#)u~}OgxI8E%@IYb`%f^ z-<@6vqzK)ekx5UrcYNR8l&*_J}*b_8C4VUbJ$H{uGY+zF<* z3EjrX77-4RxSS64_pUxheQa(0tAvV5o-7Z3DNq?LM#OVF|op6C>+=R&p;kUfj zMNYvm;V&6*Lca7Nqy3=ch5tsVlEzXnPLI^&+t6@&lmaQZ15Xs<0hfW;bP3}qL0>&Y zLDYkTl*OD1p%g^s5)#JIl!8O31Q9gW~}gHj0TUIlqZ;UA|={FMJ(f#=!pN3 zE-OUsi>`z&Hs5tITRSy0urRJ4b`e82DM?K9ZEdJD@1(V0(Q-(Lo}_EJ00~B~3e3QC zJy@?&XpxDKZ6%JKE!;&E7&8~Mh&zxUb1Vy?U<4~D0YA>4i0ZOh1E+4%-$>xl2Zrf< zklR)JZJFJjGj33itMRjm=zEsbhW<+`Lg|NJh7KF*+C{K*I2r8Zr6W*X&BCPQLMr-mGM@Y1SbUR-}vfQ0qdvAn&GVQYA}Q&bFn7i1yIz+WcEg4rzvSPM=KcQ zS*B^lyp0h0g%Y@{YUFXHK>_mlQ_F*6bvY2YOBW@<)WYsF?hSc^(1X!@c z-pw&ZM>!&Fp{N8<;7^XUgG}Iz**H_cra2a%%buNVi12=b()_Z_RB*O04umdF9MPE)PppS%5`kDhj4-$m-AU4AnIWwJ%89OB8zPNN-eA> zDfmN9GzHUKNE?s@wQP$_i|&HF2^RNhdXxb!GxQU&$l~5P%RS_y^kR)9ii3#F0#eIe z0BG}ZWcf*gqQo-+NGLX!7DviBwv^-q0H~N`GmhxuhxcfN<&eNRU)r8e)1j`9ScFZ~ z!blb)MMuSjc*pS70+SPZQVT__3`&-0l`=9=u3N5$%=xHvqKy!AD{Mgh@H9_{I*2bj zy{+#{T7?SfiBWc1Rau%dK_!vAwiMXSOVGHW5P+gsk6d^=@w#^s++^yccLJ0k7AH?F zu>Zqj@8L1YY~#4r2lG*0s7GSAL0^Kopw!?&yj%+g2nmm!r~Vh`1(vgi1YCl#i~vS@{EA?5 zPw<4f9fAb3@cSS)T@7|gMu2y9lVNBC*cIWhh)a?mpT?CM+AI-N-9>N|Y+?<9v8US1 z*kwrL1O_M4xc3H5R-3U3YD7=+E2Vfl7@O@IN%+zK$1Qg{v%me;tt>-dREIc`)>+?| zOMwH*sknNmBJlC;+-NBhxMQTus^1&i@vv4N90k zZ8JrJ6bVrXBuOBJRXs9h&7xJCq?J7~52cK$H#Wg0TkTRx*;K351h536NNQU~ih_q= zn?{L1s;dMgRHF=TSN9-9DWhz$GAzZclBshcDvY4G9v9O$lTL&fp=y%Ewc2T6%Z>|y zwyyQIQki6{t4(X`k|Cf#$<3r)4UI zT;;e3X=~wnP|0Uotx}hl@2Ygl=wkNT!ZG!d(95{8&Qj|%qlMmDOzdA#0#aM%t6!MD~~~2Hvh4VwjBv5jx5O1 zk`KoRQ!HsZ)rzv|DC<(PF3BgMj8e)esjSjUn2wUlG^wO|X}FC_`pll*fYRt8gdVEs zBH~)vFiot+3W=3XHWI9%x3<`X6g1iM=OZb|V8yazrN-4A~0@zX1mWKYM4WV`` zvpXU{x!SB9S2$_Xr-(3*n#Fp)>Ncm$GneGAOMgpf%=!i+n{E^1V@GaK?a6Ar)LU%v z>YSpUXlu15isC%aVUmcYjI_pkv&!ea`{cjaZY9TvHvg#$H-+w-E&9#k-ps4ZNRjrh zw;ZD_3QgM5yG6#rk8x4SFCs5($;+5RD&TF>x_9mzEK}=k%tzF-0!K@tJ}=Rz^HSK7_3fLQ%M7Db8pu zpiOdUEp+EQ;Tg}Nn1UtZfeCgda2fRH8RYDDV<$&qwO6X&jnMT6V@A?`TvfOv2JVOWIKwLJgoH zmB~Lxn$U?-ZKOMmjdc>L)1F+YBpTY&8~=M+Ql>=>EedU^LTQSmlAN$<1P!QAOJbd< zUTI0Fd6YcC8dkB6l_gwS4ob5sv6)0FRjPtXQ->m|FpLhDXZn!gS*72@Zx>(R6 zu`QnB^{qMi+0Qc6SBrrupA=Kl2{{wP}-; zDL~0XT1EB7ayEq_P@6{8hawcFL<61X5O|rPm{6f0r7e;y2g8pt^e6Vq(C=`!6W=Da zhNLB}<$P<^oc?yOu+80)2Afoz7#AV<6AEufYFeG-t|Tw4Ep>C}(w0a>x>S=baf=o; z&|MO<^|kM1&5PaP)hTGj;sSkn;{PQtL9!)rOo{JWK^B$(53$*u$%CJ&T?hvyjdI+p z0fRDN_)fUNStYK3HymMdv5JyzVd-_+**ljI7r+^wu!kkwk`ABOCfM>4!h{(n!#Wr( zAdbn;4(#9>)A+?GmNC(2#;O_Lm&r};t4J4o(tNtby#DNGc&;oP-jyUz^kr|>7Mx|E zb?Bm!$Ssug>)wujdA&yKDpQa&uj#vo))j}_C671^jQeMf9L8r7|K zwUpo-P|HAVY9BR=(~9EU>i^>U)g`R8Y@!g{UdK>zMNQDK#mXa=1Ut-0!!w~_T+=WE zx}owkA?6N^Y;AA5tUL_jbF$5CaXXp8MUL^flNL!8qr1M6EF-(&jqZUGKrg?r%Zc$E z@34xOx>9v>osY(EB;{M*h30j^pFErkg&W}w$E;NPQjfT`wcHN3_{A}v@l+>S;2QV1 zWsjl-cDSNc_$D$?s(jjWk2lb}J-L;m9TS2pg`_kW?aO5@?UBx}=FOG~!SNj05}vl> zPe%kl$l+*H++Q+dDS&b$I321@tPAZL)u!lIsLTNC=bsTk| zj9u;KmWg$I{Proa-T&ulw{(l?4m1rXHSaI)d)BEIcfb#xtWZvCtdBwpc5oo&PQ8h5 zgT8AdS(UU#sdIG0y!4#=oAU?X>Qon+^v(~Qwr@UD)c8mWp;Notm{jO+HLvoRuDqkH zj|oIE=M;8qpz(VyEK>WeT+d58qONZ*d6g^W3`ycr)fV)V&|al93!CuOkEdCi0`Z~A zb**F4$=RROV7Okk($SA6ww$t=cthLm+=tmyByGdr@36@(51SK|TSr7>P3qWlAM ztcsMzKoeSP&8SAbJck4%K*T>ISe7mBzG8tMO!L zBG`(A+)b0(Wr!N$)@;HNM=T*a+}v&!SL|6- zO*0P17XLm-6+NOAUZt&MjGfHM7Rc!BE^&!)u@u~aKP-{I5~5hVMkmw?X2{2`IuXJ~ z%rm3_HxQ;Pc1R}vY9jpNBl1t&PVw&yaUh?>o^UVLfTS4|J>l4`)uM{0;631Lth-gIA@oIua>7Z%@hn*3l_;YWVnrz1kpNr;GxhENvZd%Cvp=I`vkp!*au6*(YcW%6 zY81r;C6c!i@db}E6;;D`)^Zn}(X>d5=PK{4x&`?j%A(LxbXZhm{7PvaH%8(DJKu19?5IQ>Q>)Io5+JOsg*sf21o;!;8x z!vp(CYGA~53c?;3gP;_n#7U(iWGHmh2C+8%^H4ct_!JQxfvK+OQ<7*x zPlkmQ#vmioQUWg}Pe4M+@`58n;!J3wBSHk6^rKVl6H)=?4n37pv;ZVJRf%9R0t;qS z>ZBloPzn>m3U$#jKEog6QzKLmS0N-r#(*7QvtR6!BRO(Y%tD5=;h7#ZytW1ZNdvFtHwL zArCtyutGu;bO`QTA~d`48yT!MO+r0GMvgueX6Qv|@?;b^ayT$1T0=rPG*FY26$AT$ z3>;-=G{Gch21Uj|H~558BI8shwPaxNRZvA*8TCmCV`1b-Py~Y8YC<3pHD{G%_OuKk zs|G5*^xSCUBIklB-J%o@=N4K4Ej4IS;wD5Khm^>`BUUg)*27$!_L0CseY&CzVCNRd zf<@w{6pDoa{J{+N(h6M%B?W>xFzRV7$WG-4L>=WUu7W=jKss3QaQ|58D8{E2QWOUL z0wwtZbiigBV~32w#e=#8G>GUmT+8RUG9-)grbKOM>re#O_He4kFeKt|?co>DM0^~O z6$!u|ZowWr=zZeWBy{8<5f^Z5Gx!58d80jR=H+n`PCfo)vlFE+VcdXJm)rJfd z40BBjFiAm5GecT#K|spW$r>{NbvA#o@2nO?%dV5Hg2FVcJn};Xb?(LONnI^h6=1piUyeT$pE1vO*)wtWC7XAOEV!iyDGp!pIys;#K74 zRZf^GKgeF*6>LzGGF+hyH0qg-Rfa||7k^b$1PC>w#~&r2B5GD4u!#*a3^^eMI3uhi z=Fy9kr63Sy)AopQ-iB+~0X1VXiRR@ge4!P%s1*?SgY<+W-4&JOsBEM_F(c+W$)O&y z(_6n}I7%{z?t)pUkv&=i7F)GVIF?*a!WD2tIq(sMTY(L%6c?|kWt=C7aDu*#umzP3u?(p*u@swfW+*xSdK;8^ix0cx0U~_00R_Ei!CKSOXy~i0qETGqFZG$pc!9>b}G+GBozC+}U z<1H_DX?SEMcF>lQ4i&>xnL{N-P6#au1~4oYH0ma1M8j@Cqe~NF6)^&BXd*_cW?1D? zD{qhk2Tn`Tf=kIDXoH6VyO9*qW=wXdOYLSw6eD|60(1Pdee!a3qh*_;Xe}kAo8dw% z5@K?+;&0LhYS)WL$!Ae2+DQ=ue^QP#Sh>{-6@Oj%P!SQ=6tUDG#Ze6v9Jlp>_k~hO z;ud=&BlHH9MDQe5<|QCjrfkA^Gd_qbK1gNGNLmuuI%qo&=`V)16__d*?BHl4 zO7dWUQ&Ikb6MCbzTSbdf<$;XFg6rX%HsLvWRbK{qD+U{+6HE#8rUvan7jX{!7X%C68}BOZ~M$Lq|_w&mJ_%XACJ}%lY zT3SRtn~rUxsb7a~5c0>jFs{V1Mat50agaQ$hj6x{F4~}b@B?z$B8gszDWG>=3|Kw&lVq8Z|*}_ zy5%IkBNbhxEAoVG-uGZULJ1Z?BMya(a@`hEW>1E@jbRgxne#f~?=-00So`cgqPG<^ zN(*#ZWa{K3I{blZA#jpl7(Zy#M-^=H^^rG*F4`d?W#m32O|)?xUJxfXOCqpr;VxXF z`BXXZm`>AK{-pr4q}xfu0Ph#;DXh2~=E!f)LKsmfn-xX8u@sYCN?hL_!%CRJp zcK|oN5mXV{^8ZIlVa6>X6F$^3s@^6tTec7|NgxTSniCqfvo%G6lv=ec3M5r9 z2~YxC>e*7F;3vtA1T{+a*p-y6EheXK^{UXJ+EKPjA*E=m6`3Rg3A(Ju1!Kca_F_tv zSZYcVnn)ES!Re38hQUXt6qUd?FymSjr?_g>)~DHr4oymt!m3_h&0kXz*fepA)PYpn z`E!-mtX8gPYumn!dt}P4xqJKm4LrE;;lzs@KQ250M&%n7CZLOP=mzG#oqv5UWmD)j znaQd>4{A&)VF6fyPMNO^9Z)WlKc$)H!RMU$;|WTYr`PJkBV#I=PKhB*gX zd*_g75(z{>qG~wp$Hh)Zwew$!BbGQtfms1(T}G|6!@->yDVd%|O+F_d zfuxY=3Mbe}qQxc#mC@6CN#xXqO=Ijhg#uC-#GRH0y(fiyt(Z5;p8X}Tsa2#%anwOm z{CQo5nzS+zC!fKW;z9yN5!#h05)cusNXaH7a>n+?2_T&ZJL)#9-ifff^D?t>bU`7#UoA5?}CjF2i*tVasf*DkpO`+DT_W06D zDJVLGlW0i#+An2DwmadB2205;RaOmL+F@d~YY$c84#ZYF1e7wDLg(%2Pb;oKOfXv% zU3}%Pr2JcoPr`Mk(HIm3*O|D3UEB&Q`?WH#qlenl7FCPkWY5Y3pr_EGtte3xtM-r; zh0Srng&A2ldAqVxzm0p+%QFAAac6uHEd@yal)}YVQSMn#E9C8EPbvSwC|P#3xMB+{ zl)?0vB(2oa_tgWl^BNgZ81xSpuV#cUMk8?!vaN(h7>J0>c$ zyLuqOz3M{6A0N`(vr94*^3_MLT}Z8z(cMDa122+UlCZMsvQA=%llKIenITnB2~<8o z$cukkoKlo3zW)3NSo*QjdvL?7pv-PI8)5~ZaPz*|MPXzCl+<%Pv_FCLhatY(ADdpp zic#1Aa6pg0C~ew{0vWJ3r7=(?L^tYSNV=n}2Xf>`7}^y9%H=iRL=S%JiV0{4&>zEu z3VH2vkI2Yj5r&*6ha*WJD~0Bu*hWa*?3mP72G*B~X&-OJ44hHOB;IbE2s% zwWQK_qtVJHm1Re04RVs+r1WekNv@-(LAAmxhJfc+@e9M=ZfQ=i)kSPkHK$f3 zXC79z)mWvYW+3N^*SzW#pksvHMWZ)A+mT_VBf;Z8je5^FZskV){F7Fc<3=HwBrAly z=sw5j#xxq%i$8^_Vn3_Xe7>@<5e(3nlt)?H9Q3jEyHf*YxY)yLRwJ;D;6mo)!B%uJ zQ1Ya0J!J!1lF)F01SuC6nwgu&VJN7o4A!EI7fK9$LPUvGo6J>|SdV zSvY=oyyVU6X2+;gWu}q2u;i;-(Ux6n$CBK5@+?GRWPCT0-_c@|HhOuh z6ebwgPvVSostgIv1Y8?!ZmUuF>Y3b3l-{r52C5k;%`nFz-NK&bo6ChIb&q*X0{gPR z)7*+|78zg_m-oSgoUx5>TuycR7C^(~k6fMA+wTThruEzipoVPBT>VvOa%AycgG)yq zW29VTGY*n*jOAnX6r)-0vX@h5EyQMvy8r#Mne9m5Gpl*cZ0=26>)Pfx%XvwCz3XL} zm0@Rv*O6PE^Rwm|V$X7y&yNhWafFoF82Wk9j22FK2i@pMv)QnQ&GY|RpzP)>r&-eG z-7xFmoJ~%P`dH%}wW+}1ywc7C;JJbU9@;X+t-h(7VHd!1a_lKIb{rF0$l{Ma8Wd)#<^w7AKQ zZfc!ZkH5k6du9A=cvq)c92PcwAv)=Mr+eS1+YP_}jk;7n^0_QcaVQ1OQb=D`)%JI?nL)CyVaYs1D9(*e5aSV zd0uE?nj|N+facDp4IDUo#B{)NvRBm7NN>eV=<&s!!u?D4%xgZvz6AW{hc56zHDo~J zixL{I?b3!T@K+1ff+TPn8*g%R6V4Jo!XYA5PvSokT zp1Tj?&B#9weUK;r+R=ymuEl(ksU{&btdIh~K!Ow-=6oaNg-d~AAX|y1~P@$*#{D*$f+unafXLOK-bPypHq@e!*4zelVq6AW)2~)BG@M0qf zW+DRtJp{2J1>zG0k`|jV1|GNxWx^29BMCDyC5{s(4^kgsk|7H*L1NJk$CVbE@PSjp zfe;}HW6&`s;y8w(9;e|GT0j6Q6j)ipAQtE(ny>|0P#!8|C-B1{_F*bg5Fs%*A#)di zSqN-$r-hoQV|P+9oK!BP05uKq5}YsrpwSL}(FP)653Ud*Ti`Pu6A~z5B5|=F1yK-f zKo^VCDz?A{{&Pb|!7f0P7F9EcaUnpQfrxRjDl@nzcqkYC5e1{LhW3y&wg5z5A%`Wy zJ^}$aR56E1GZ#72Jup}hs?j?zxF7#;6kLEya%lfJT}X>P=Wn&>cA=+abO8|!RVJt+ z5@qliP+}GK&;|q$7v6D3Z6Ss2VIUh)H&xOGP{9sm;(#+k3qbTvE|?Q1GcvkGKOWK+ zPgDy8a9oBF5uwo*W#Sxy(;i&#L~`R0H&PxP5-CZy1p`8e!MHp|I121=8n_Y#<6sNM zND3-s3!_jbmB=C5(H==bKYF7o-hqo1nQYVdd=^P;Cx?9~;b97aFBV}KT7WpP*bth4 zi9jO@p&J_97HSLmpJe34+l%ltKRn39v1pp*a(vF6Xio?Jx$*vp%j6GOIx@ zM8h^3375h4e{tD!14u^iqb^9Ij8G9g^rHn<0Ye;^Ag9t0Ino`RfF!6=3+)hr1W=8E zv_3%OATD?*NWy`L<$JU;7tisRx-}5A0x2nogQ1Z;mLnt$u_ueMLrJg+x4@VU_%6^y zl2ox#QP5B}G9v7-0S(v=AeDd&=@-yL7uTbg$VHdO8EIUIod0Hbh=q5h!7Cxb3HDKr zPg55#sas148vdX)>B0(Dq6Az(5vW-US>iW0$r@U)3jJV`Sb{HcQFf|`1ZUJ2Q!*u_ z*cwBLE_4AS`O+T_A%0RBC$;l3)(QU+tI-t_Ar}JSHc9gp#-lmuQW48DA_inH0x=@) zPzr{(oE_?CrRJghri-|O9Ror%M6;j<1tIk?5a2O(1|fqD0TtcxT4kvL0znUDVo(WU zRMrszl5j%NA%YcJkOfHqEP^US(Kk0}9oaDywLmm5v@3%1nzpALQLqh2Vo>RaBLu(+ zyO)>wa`=X15s|dS7RFd*AquBzhLLefZr6uYl@vLoxd~AOc~hD+1Edxu z88wUJ4#zb;s0lP%unsnflV+roCYg5wF_yN#3B6-gQnC|Uz!O?oiR>aU`-u|kV+)$7 z5$`uZ!;~}(s#YT+7s~Mv-ve*vYN2k5YW^?IozG`ZAxkEP+ zrtFw2Zd4UU^eYb{AHt}NM?n@7l>lDS3XNHfIJG_{ViUWgK%j9D7ZDoJx^%+Xe4{`j ztx%~Bf_u;r5k|_OsM(k4;zm(0QDxyIZ#0`^VIZT2B6wIwlk};1>9p5n-i$tqJiGDKB*cM{*xsNDvYXFl_GIq z5ULe9p<9$A7yznqKk+fhXOot5k(15ql>8l z2~s8k(lhWXjHp7I6rr$wNe+uiLGGu_vL-fIh&F(F#ud9JI!;WU@~ zdunz$649odr-T1b*q27Db!5ttc7c+>j`ddzd|1&%z=*eXTDPS_;<@c=tT2KXSV2hs z3&Q6#z#-gd&1q>E*Gs%KY$aA3fwo`chk4SZZ@nj1^ar3PAviJ75=@0lB<#aL1)@LP zXgZd_B&BMqR~$p8#PuX_3yi`PM`w8S6~f6Xl&XPZ(ZNEj#mgpgTkL0cI(+Ij!%j8E z#G!q9w~szU5%A~5ZQMG*>c(*fz=1M*zvWwZX2EatT#%MXfOc)cwZO1OEZx>?*2Tgd zR;=8EJr!|43KqwY%x&S7x{%yy6KiFjR$u%@T`z26sl&;0S7X0K$)ijyUrWkghHx4= zYp2Z0($fFBt&C-`J4X2n%e4%`{cFoOHpc;2ZG0TYxeUy}F~Y$tWCVp?#Ei^a9K^}| zU8xM0u*S^MykiP1&3XmK!CKAP45x6c&26>I{ReJd*UjUM$B9PHLbYzrNqOhY&e2Cs zrrgfxWOVUN&vBV7%vaCnB+Fx#&;4ABxa`lYTW8oD&;{*t!)(y3W5Nl|(C*xM4LwKB z4AB!^a<5F$sB_I1tMT zc`Z6Rt=Epl)d5VwLFLCf6xeeJrzL1h3(|cMVH>V^=vKuiK))hojHkPw4&tp4XWq!Xc#A`+8pFy4+4Z*FadHHJOkl5sVagHqJ*1370@H&r=bxObmLPItZCPRNhcpe(FU0U zED-V&lbIh%VLW}~IN5#J_YpvJ}3ZR@JA5^nx)O*`w`jq8BWq z@RDp$A~&=n1+p$uG$QRV0ZVXTAW;VVQX%%R7&HMJQ?RWAaVbZ>MDiDNBntl#6QwsG zBD!S4uAxyNYeFWUu^|(|F9%4Ghwi@wuGgHc5-K4StuO{jzy&PoA0t99W9bma^E3;P z1Q=Al;$fZ&UKCT{HHG~5If8&X((dph{-$_Z5 zV}Xvh=^$02wqjC_BypleYL#)Kw~3$l(>fmPm>|kS@cs=IT|z4)aKdQstH7SuHLYIb z5()JXeD^vjYb*g?Vk?5v3T@+n?D>~VCdFi5uMr$&2k+ig};lR=rwA6rXIT%ej z1y^@32Qfjrim|4YE*)+Yqu>r*MUqa*`Ton-if(kpN*BkY1+z&Iq}LOBA{b&&-kG8V zInn74!rmmwBly9ho8Y2h>K%^vuosn3WpsXek?|-m1(N^}t=RufP?A7Ot9o0KNEu~| zl!PQvHaR3fAc`i0WE51an1JI)kRe5mBw5nrNt7v7u4LKLHeD9$aW_YwC4c+o z2;J5uh`yzesz*i%fAz>9z?RGklBAY)#?XQxhk%Meidy1BgE7D?=CrNbkO*rF} zlf=Ue`-uP*=hSo04c)`@&x#^QLQp~%B9nkA_=U=6tfiyDl8!)O+7BaBV`JbYqt4joNuc$Ta0t|IZi+Q z%vdB#Im**lQ|Y_Rmd76Q_GhT0mU`-;eSMm0tS@AWsbfES_uZZ`t}(_artCRuw9{4_ zU)ic%`|a2E9SLEPH0HN%knDzgZ@&AMGvxm}_4a#koKQv)P{I>eeDRuh-Z@XkBX22a z#6g9R+`uj7?QF?A_xy8~tX>y%(ox#?*q*0+_oJ{ePrY>5W0#%Uwr96pZrgL$eRrGy zcaV3|Onunbs}*QF$k7y?^G#^$w=$gqoROw9t>xTjQ^EHH?(+fw`mDUR5RQ&hCr6G!Jn zkVMaJrZEk=c1SdT4`-j!3Zakf=H-*WDA&q(k5-m8Y12@PE+877nq=cNl<|a3n+-I62=(xgoO;8 zAVYfEK?W(HN{M`|BS?U<5fIL#P@y72J4>plLI4;q>PZdWT!T_2%>DZ z6E{qN7$-bYg-&+D3rko4rj-AcE#){wA@xzFXG~JYlaLQFG%*aeSk;hH(2RB3E6KRZ z7*Ba-lq50KXo##(kx6`_5li62CoDmMC3J)_E1C*BCYFG*d1^`RppHkPP^nd|C{$92 zgpFpjq9{ZHA~)S5&zh2|2*h-cb9{+!fI|TOlp&f*P}rb+$|(sH#8flFDoz!)NG049 zRa~8oB|Cc7&3(wMXthlfk}!pPE};{a@B|YWU`B|rbRj_6gsifn7>5YxNN9m7auA{z zg~YNf_J~#~YNgCkFcvb(u}3>x!Iy=|r5^TRY`2x&%nrazz{^5?MqHDp5Gn1}5?lO1DBxM8XlqSht>jTNRlQ% z@J;MxQ=?Slyytz!Ng*nak>!%IM&Xa?m>09PT7@mxpyeJZLE+ynbFCasoe01EmK@bR zYvw40NqiDjmb&9H2~hIm`;@@V0Sir&uxF|MhUB)`f_?C#ge{f~wd8xu}RuD1~hy01K=OeVdpokp#uyg2dyiR<1Gf<*4`}+ggj={5gph|@y8^T&BATKk z)Qvy!lcHmc?+CC%s|Qz@f~9#T`l|~;5d*DD0PqkG@L()1hya))h>Lg@{%Vq}Lc539 zf~^3dL)s=&=_bLGjc!2@&9f{{kUsP3D+7B&{$nt+BLK8hJJVpoCY&L+Tg0L`mKy(B zB^i+zbdrK7%c(KRjHw{Py{d<%Q6>mP69~hKC&R4eSd3apk7uC>YhsCGgNm241!oz$ zib#|yafMqLkacqzfHN=Su!Ss(F2I-qFXOhSXoZJ65l2))ds)WQc%Vo6jY$l!z=(qH z*oqceh}n=nysD8ckOWR~x1CrJmhvf`iV>em4sc|s;tMrNfHy&XkY*!AYP_0b$=vgqc$!S?grL(TPSyVmPxHJ9*Q8A! z`pWZc&zi7J@}!(_GD(uDPLXg-CTc|~>LYl9BKHIx?VQcuL?ikfnZeY_3_+;>{F&jD z&hq4qiL#sg1SH((8Rawyr+lSvq0l6f3G}lV3tdp0NzdD4&OZT9(g{p3B25vMn&{k3 zBy!6Qkx`eJL-*mF-}#*hy%U&Jza`Qh{jt$-vQBJj(T)kw*W^x=c$W*s71hZjlTcCj zQP9GPrH@z-6gAR#8BYg=(7sd(Dcq{e8`H9E%b0koJTe%4u_iiWn1Ojy7}2VPIj4c~ zr2Pstkk|kza5p%u(@hvYs|u%qshAzj#&rob{NM=)NeCp=(vANi(brs0**rFvnTTzH zmT0Tcg#d|BcruxwR1?7r^MaPcn+m9M5@?Yz9SN}k(H5v812%z{+Ip5&xWv#iL>Wtp zRSGeQF*0cJEJqy~_;gVDXbe6NtYwAhnNvm!juD{sZJ>rQH#av1Eh|;7D16N_%piu!<=Bf z7bIoP0kx52X+IgW(wjOH_C)wA=8ZfVkg4VDIl(eh*> zkA#R>YJ(|=08KECW+H5u|0=n;tlGtbx$tw;~X+Je~wHwo~-pLmW@Fb`{`nF?>4f+-+}Bx#u}k(LRVh*JLuGb|yD>GLeUOA-j%E9wIZ_DBy= z#4g3yJHH@Dr6qkd=n8 z2UPowORHdS)l)LChbx3Hgh01eGuo1iMWl@QrtM8B!R7MEYPQI9efoj&-;Xh`2d_ zfe;SPH2Y(;0~O%Td?)MN&1(wHEzpFUt&@nDNQLMoh#`wwAcF~*NG)J7d*Bwd__rr< z8P($gt%$O=sD&xm0Dz;sO{g+BK0E@@gfIVV1FbMd8nlO0x|n2vigOhc%|Z?nT;GP8 z5g(x$((naWIKgmvS%MvxO9PC&k`g2V#42McFQE&m=v7|y2ZmeZDl4-r1>-m2QlT}q za&;=Fva>y%i&TSJLxGGa7>5Rl2sS|!m75qSafr%zxg!C-CLu}wV6;`6k?e|@ih!n# zxQJHkm-nzFYy62ykqWIEG}c-#@2HZ2@QhaBJC3Gf zG%1FNEU4l?g}|LtR4ArE?FwLC#uZ3q%>yhoJ%$p}iX~_xfDNb;$1)Kz(Tv2C6;OPv zPo%^>4T~+HwooiV^-@802)_w%3o!rj5olrvut=p*xQ^9p43pRjp&m)n>eRs6g0>|9 zJr=l-D3W@!5kCu(p*&w185?o~i&X{69$62}5Rya2w}C?wYD1EBdo?k!5f3D@iQdwQ z`xFPY5AUKwl`OeE>y9FBg}P1LA4b~Bm_9Tig)*R+=PS9sCNNHrhz6mmiD-uzK?uh! zg_Zq{HNk8DFhgpNvV`GBj$i|hsEVx+Ns-(N^SG3Y=)MH_=eur)keif^(CdUT)=PUh zn=;~K<%yT`Cau~tSJ;H#*yboMImvb@{9x!Xdk~}>O2=5(wdR$8UCrHS!OctK%&Ld! zs1m>f4Vozn%_uj-@R7+)UF`od3$*ZLG)WBq_zcCck(ULnsn7&YJJsbF%otiJj<{q~ zosAaEt1In~@m86{3p0*Tz5LkJ6(N#TV~BbX?EUZuPMCtPhUMeXKw5qdp5=(NE*f-P zZYOO<<4gdIpeaxjlwr0mciX`!7}bHH2nUY7g}9D-WejJ{G|fV_!?0o%);_`Ay!^1n z=WwaLP*+{+QTIWZHnoV0-2kkcls&V`;IPz0v&e{uj#?62v`Cmrfv|~Sg~||=7N#mA zQC}1ESeI%!;{FNygE*zuu3gsfJ|W%X+z9xEuym=B)Y@q~ZW6{tI%$ED{b=9fjp}G( zj=qXDSD4)6^9MOLZ@d3sg}11S{iw1PLytv{Irvg9n#sT*_+qd5C$jC>0axQjX6b%f7OMwao?~dyz|%vMX6xQfg$%<;>!DE0FQ$HvP%)mgb1UQzPEhL#?orTx}BU?$#f<@|l0%L> ziAE_5L(LNyi6MpWfk~k$Ub|_9%&?f;Gb{Z$nyn<7m_(NxeM{Vl*1r4=k+TRdS@-#z zKgdbv=yB`Hf7`X6lZyV#OjrlaCV)ghtOR7!S46pJIi;2;-}+EJ!C=v%pwgf~vg9=m zgX(;^8CKdvf~WA|zK8chnbUn-m7`Y)Iz$W~OE51FQR~ETyG$pFTZw7S8^o`ClaRtK zQYx+VQM3P2qA`|D-6xUe#>`A00Ders(#P1=*%?a7$?{2~jlL5GJ8v_~mPIj}A-aB; zXd8f#KwzN2fl>w{j6$FwfrADSLX6ljqCkZV9a5C2Q6k2T9zTK%DRLyqk|s~0OsR4u z%a$%*!i<^nAWfMzZ{p0Ub0^Q0QrfwiqCiPcgb9*JNRj|y1W9BhF&r47DAkuyt76Tn zbt~7dUcdHS%241`ux8JqO}mm6LV-ZZ5Ku6&=+%d6@8Zp?cQ4<*er+BU82B&Y!iH5U zB@khhEm9H^h+TMiGUdvaFJsPpb1G-Wk~M=4op$M#R<(q-6|H(T>(;JcENgo>@#4mhON>m=GxFxhlSrx6ip+24)~{pFuHEC{!AZ7**Ss{r zrdI8^bkr#vV%_lW-@}hjvUBJ5^6#VlK5*&4D4S|IhM#}~5?EkSHKk{uf?M%t&=$-s z7@>p{DyW=f_EDIjOAN{Nom{hN7@~+HI@jH2B%;0lTuo#rI%uwsiqOGxv8h0f*Pu*qmo*xsi&fvs;aB9+N!Is!Wyfrv(j3t zt+(QuE0TKZ+N-a>7T77U!x9_Pnww-b=uNHE#%r<9LK_oY5LFjbwb5dmt+v~8+pV{S zT?Oa2+3OKZ+blQ3=U{9#5)V$+D%(moQ_>oJq5$&6_xL>fFh* zr_Y~2g9;r=w5ZXeNRujE%CxD|r%;&AN42y?R~CcBs)HUWT`4>)y@#Y3bg;Mdl7pytr|h zge4zmZMh(3jkPxpG`YOG_3Ic*H^<(1c)^g=8EXIZs9NCmljj|lU+mo>`QGW1wvQN} zI|0}ckq|&&Uuk`nn_To80aB2%#ee_tG$26>zSUrVI~DfeXy^SmpoBwB2;pSZ>D7in zr7*NbD`qGVTSF%bl;T9q;Rn%t1g)szLkZ?}kc#QIRWohgSqqyq6`A<^ieK zcr)R6Btss>hbBUAg65)WHSReOnkT+l=tGBU^`}UQ8MZ= zA{NCK;T1HXpgLX2(3J}&F`#k;wrbFXrc(bnQmg~U`f6Jf-Z_zWN7*{*Y9pGl0FM%A z_GhJ}O4sLih9!}JB&@WPSPxCGogkdBXvyJAR5#Fp?#km7_RzsyRikY3gTJTO5^ z(v;kUO7 zlgLs;G0G??3w`R!TS)QS&s(tKk3FpnBywaelhL%QnwU%m$MmT>vdj7+B(~E{+f{Z$ zSATkPQM`gZ8H{0$S)xY@+Z(|qt^CsOQ8t?E=P~I?NX3qOFPIfWP1eAvNLVH z7kj67Y1d~zg%ormG~cok?U?cFTocg#7W_+*+jc)I&@b9CJ^WCtVDzhq#N_6hDP(F& z&Iy?oT4oE$rK=)DivlY?*E-0EjR5SZ$IGTiv?N3UclPi{)h@e5H^F zosASzo0=;eBDOKK!yoPVTFC#BFa~x^ZG{9fp%iqc!VO?+6jQT>^e*Tht8M8dFC;)a zY~c=DqzpqfOk&6aR1YnFuVw;io9tRK#Ti~kWLjWFEhYy>QN59f^#CFlc@{dF=*lvx zB7hbaM6@NA(QkfZ12}%&x_zVvXrnNnsRzv&R_P)GUttMl!^-mgDlI zgk)JO3RU~t06B0e6C#EH3Q$7PiX{OhL}3$uvjr#eWI|2Qq8_RvfHvWGxWBn!3JH+H zDsF5Vcz5 zac8Ay#W+W1M0@}2P_>F(qCNgm3MXn|9R1jt^rAr7R>YQD((9o}H)x>D29^|3C~inE zna_jpN?+&srxmN~5MB-hyJCZ$RSCcfTYLy_5ILJB`T;tw)xs6sLJ;AUBR0#4&`c4; zjO^a0)xAn#0+K23I2mdXkK8ql7SmU0B(tJXSxjURh(tX|5x!;xOk`v5+Z1eet6LQ? zW>*`9Jwlt4xPg@}DeJI6I7|>OaAL(SOCFqjx5X)RGhncT7iGy{WA15U$FggOD>!kj zY?T&e-CW;XEy^uX8up_l?VY_&h(rRU&K|ieP%Q|6I@Iy3Sfe0-F9>jpo$ZViA@d%W z?SVPT8Lt08;ha~f(5IqTeiN}<#Ih8WkOaZrq7@R*?Jr2NfJyj6%mQ(&o+Dt+ehh@o zSbpE-A|20F_^qD5EaRHLH?7)jfgM)%@>};dH7({eoTO+a5A`MxmvPHL(raeWm`vFT zC;?wg-NF>M@M_UYK@tMl@g}-?E$C4ednH41!h(i0Zf#-%N?@INxYyMCFxA$9avU&o zc`Z1z!q!H9^^7>Tg=VA7){JHaJ*G80cr~q?_>w{qzXvLseh=OK{ZQ>r2;`>KZlG^N z8OpLLg}2f2$HQ*sXoZb$Hf5{d{`=G@Ah$cpf@<1(b1k-wnmu8Is>tRh#m3_~1_IQA zYTW-CrxKQTk%FFhG(k{60^)NuDZCd{<8dSbY|)A{CRYktXoXJ08Ck^Ot{pM7#jV3D z5K_3J=kBOl$Z$B|Mv9CSDcpHI{sG%!^^E6M=DICxtciNO_8vVida+os^Q!HZYCn&H zYmfM^wUrQZ{*c{n)v79TMDetZZG{rJz>XM-z2{soY;6blw|~G_w@t*>Dxw&)+E&yS zw)h1nM9XV??0n~`3e49(;G2&}rY?F`BXbg69#RBUzDAJZuMj z%O_5@H!?kwfTUo1n@|rwz-z&jOT$A3qX0dE^*5j*0h>@ff1@>vlrWn>3R$=bC&zQp)@^xq3#lel z&M{DkLjW%JHzbu!g7sJmumn2eh7&La*@9}&Q!FP$3;l2lOonPl_+Vue5E+Wi+$8_-QdLP^(SVAcvM1dMTI zbDlQ^Trh#^*gZOQTD8>%r$t0RWD8&Od`R$VN5nF3xr0n(jUxkG!j)4|Bzj^b8F|E4 z0{NEHVm)D(hR|}HEmZ% zf44?F^`L%kSu?i8nFR=UUguUy@FlenM4kdUtT0@H)tz4VIY0l?H?kxUx0Xa4XpJls zUK%Ei&OZGeuZ@;h7%@slBe-i_~VN8lg5_hLk1f}Ggk&G!vjoZMl!_MH8cZ+j@1eq zFmnsD1)A_a2(dW#;W!yaZ&ToBY?K7z*b0Bxhic_bD8w@|h=jURSZH`=!~;CSBTtvs zG+Vec?NE?MWo2e$X19=dtW||Jvju}RKM7GiO(leS!HX;RDY7F{XZCOHm1%Pp#7)@J4!#g~tspsr*9sX3U_LZQ1JOgx8EsGlgiEjhsv=@W*@MI8S1`0Q zQ?LLiL^bR8Ly0DKRH+G3^fFN?bOOP3Tt`v}RvO+R8MRVhP;_QOM|o&zTYz^&KRGga zG?C4sc>ch1B0Du?z>X@!0g^{~5}*mu0jJLd|pSfNw}M}@~>rEwuVG@I-N zQmrR)^r@Sj^+P4aC8~l1al~GKMl!V%nLo5yhjDdfR0`p=HN~PcTUH7|<`1D23FSqA zT17MWszrRYon<6FC{!|p+c&ka1f17Y?$EWBq$-hM4-{q);RS>mxL5>hbTHXFc$CvGnRBk+lm@6$eJ{`bkE{i&=xX?6FAJNT4to4)0P0>M9H0c2^EYf1y@(Y~NZC=|h?GOfCRqQ+iCe0ML-=dZ<8S|RDDC2r1A&NM<_^>1 zXYFt);)tg4c(U_iXXaFm8F#YKHEEKAsFApa(RHV6<_{o=j6C-tt-ubZ8kDFrEefF; zXabJ0WNRFurf`OhfOw`#RlR}Zska1cMRbQEB__<-Es)bK*_16J_*5cUXC6UWrO_{J zRXX0-MOO-4hbjqwKe1@`g)}RjO2u2^NO#ldw#77y4<9% zYb7$@lysqmLfMB}Qvu!BXMs$zMsww2`iNGjAvqH9a9MF3so4)+jxQ-DJr zJ0>8DufiN9X#|`{6qF~svc=;Mt`K{4$#cV{1yS&syM>KFI+%wEbeMT^BNm&NkrGbB zHa`(JkW+uZjDOeHH&w$0F2g^! zra?CKGas!4_?n%HI|^p9Tl%o6)4$dnPtH0DL>6mNo6p=?5p7Re^tradc1txIKuxR#w~yuw4s ztQyrkW71}vkcWB(hEK%_I)gc#M!ofbIkSUgrD3JTRigIShW?mR&GSu|!$)Oku5~Tg zO_e%mDwdpvQv%g!yW@o?=Z1Sjbd>csZYTjG5=1AHXKn^gC(BnS!*(k-sh9&**k;xv zd}Bi5#Ak|aXedI|i#YxWXQ}o|)!VQ3@?_2GL&1|xLf15w)-8cr2IfhwJ|s?~iZ8g+ zq0PuQ(sG^?lcVtzsm=efJ>=t5cDrm{T}jQ7ZXMdAd!~GxA`c9T5!SC5@`8CAR)6wDmPFxgV5=FJ5KeG%EYY6)zsM(8RSEt z#A+`q+(u?yy}n8k+G^E|5y*jwi)8t8o1j8ufY5~}a+^#FIIWT)6EyIb;t_edn5?fM z15H6xnHuDIUG#SN=Y@kcq00!$dU$ zMNw{enKQIeM1k1&DMo~{!fX#^KwF3Qde_`E(+8}B^?+`kI(bG|H;Ht+MS)uYL1JSx zIy6N!BsL-_<9z=EcM1^XV!{O?Mm62s3Ok6LnqUt>B#=e~U&9yCnU;9@D0(9TYn?Zr zPTS1w6&cgFSw3U7z12EB-ZatOKSWc{^T{{DmwpFgb5ZBivnh_khjmJ~=#S)_Jt*VR zglRD-!dnxOf5a?QF0I}=q}U~wF&S`}J^&uo8Du+U@~AoZn*?U#+FE2OCV zR<=a$T+qZ?8ClUK?t~bRHM-_?O<{Ivxx~hB)|?`hcF2vCDXat%KWmPw zQ(o(-l}KrQXNbLi`K%N2H)RE_)!;)^G|<9AGLu1zgKx?stWf@b1!vIB>3NxOW8!>c06|7 z#A~vTRLTV6LU;DIb4%V!5*vf>paC7C2uGwfJEK=DTCn_jyPcZlfp+eN1c6(dFnZ-C zw4?u}NaU&oXF7(n$#&RNTCh(t*bhC>89)J|Sv-a{)4%M^8kwmTRX@v-tgu1yPE(rI zGyp+{R4W2xHnk!}Mu~(Z3`Y?_h>%MXEu&Z^OtQryMkyIbMNGIbi4;w&APyw8MPw9@ z1W=NZ!f*=#ml3B-p-G^lgiZDA5tNWqsL-8BSkL~4q|lL%)LV5;RL zfh}7&Zqg~Cd?LaJ(4%n$!j zl3I(Ep_aptN5;+xdL-aYJ7cFDsU>jLlr))Y9E_8p1WB#z*~)!a`*y#Sxqk;AUi^6S z<;|Z*pI-fX_U+Lp@NPFK%?JeQ!-r2lCw>A7l0=9piUg8KAc|4yv1Jnll&~wm{c@^L zs0jX}h#gyGTSzjUx|>X>`QqD}-0n)69F*`uC%rTgLMX4S z@5vo^)RF)xp%lu&pw{G1KbnpVYRa6B)bGm%)%0${0VCMNmUbpkBF!zuyfXhzHt+f} z%|@f-(=I&w8xvAD7d>>s3AJeFLJ1gjuhLLQCACyjPenCVRn_BiyAtiP>`do68iYT4o8d zOWS0xJr7%Ntz9;!X|WXwU30;;i`i-K5>!xvCX`|nf27(@#k^Q)N3*`Pi*-X9!ShwT zUhncT#+-7T@w|c&#t~xf7}jya7lpD+M(*+&qaD-!&3C(u7rv1wk}(GH;*e3+ZnA)9 z{7(~GTDi*9hgZcpXPtNExo1`}EzeP=>J!u;sH}5ki%GRh(@@F?%xIJ8ek?iv)ti0p zE@!Q1+PY!_BH4tqyZ{;fE)__*QL1PgAsHYfb8iM?JoH=}#s6 z&^N)OFaol(i#~HlgP;C#$^Vl=3r#+q9P94ya(ewMKYVh1^%M`ke*5pwS#nfIZrHu_ z@dx0kAQzs21<-&e8qfa-cCy_KaDnpinF9|vK?)jBe(Q0N+)UM~y#Y}FgY#pb-rA!; z%w4d8Av{&|s&~TgsBnXnc^M03IK$~3X=yaXVGi%6Lmu|fhvO;W4}~~HROwGo53*6- zI>|9&k~DhsuljvX?2R*qDZKpym=95gKJ_K;l`f#J&}4O zb72SDD4sdK5IomQ+{#ErzZsT}h<{v_39~lH2TBo$cX`+VDHg>-uIgbbOC%yC_B=wK z=YJm>V|gUF!=6D>RhX2d!8)hM@F{YVjI5e@HVH^pwsJd1>{2Fq7s51wQ9tmrWP4n= zCn{RekmRZ5D~F=R#gQ>+zl72adC5TS;8Hzk^kp=&s5331v6_?rBqplzra$dOkAtTa zrYv1KPFHU3hpUtoI%%g)QI<-aI0KdcQi;P=E|Q$3tl~ZO=}K-s(M4$#BzWkT!F;MM zQr{UIfucZ$c5p#=;H#r8p%|(TTJu49Tw{;CL(nK<(L8m8V14LBHwtZm9WYTQmJ)?T zW*(G1lbahZ?erc>dXYj>IBACh%BO!`QB0?c=}-H#QAUMPq9DxXK9%aje%hr(micGS z*g41;woEd&8ihSL0kU>#^lJY@(R$wLFc?+URU0zv!~{lwv|_I#QrLt&$Pm@1c;}p`X+@f zXktOVL>SvPF%vGNB(vQ4Qxwp4+I&GxD_t4GC_vV#OezsaY}3R{oH-sr_KkC!FvuN6 zO9s|7M?8~t3;{M#k+O-$w+EW*aScO&Nf?As10snAK(tLtGI6p|AW3rzM@on}>83g1 zjd%sh6e+ahalIWb0k}Yz{rrb3qh&1}yDQY6`IaQX&98Z~mlLRPK?*7DCJZ6FU_jbX zJI_HDCtM-dhnfmAxC^lBBoKvK$h8!=z*l(KOA23bVm!B^Rx8>tteWZUt<}K|&R%RC zZq=13Cb5M*>;XCvzeW?;Y6UBNL5eZnDz0hk@kp}&DqnZlVhVpjh^pADiB{0pY7GHS zE#j)H1pa2nfi+k|B#|uwl;R#d&WezETs-5D!XCA#uoQpOih3YqW-UJCSQ)%${OON= zewsur>cNFlcKsk3e43k`Fi9aTSO|CZ$TS@( zG>Ud)+DhZ44~583=Sk#PC7bG$rtf$j zcBc+PVe4-8AJVuomoHjI8CmaSpsgx67^EOys2N#4$)|19Tr~WVvSYtzany z7qa~tNgQ3UdcKt=>JfI0_Rl>Wqsf+MGC&kH#ILOgY{Faz-deO{3x#%`tUFY3S1Ac1 zT=t~fol5e>59R4Y!78!n>bi~`g%q5)bJb0jan92ami0}*kGTSP%t|w{PsWhJ%|0OdzXc4mW_T2CwgA*HnakAVo#hJ&;t?>s$Yq+<0XnHJTzTWB>_ zI7+Eo0-I8OGf+KX5|n30$i9;TqnWNxAvf8IR^1PFZxlA8Clm0IsNbGUs>=Cse}3$cT2Rg()aPCAeDj=o*|A}R4cV!}uIR%kkR1Z3h?Lt7 zt|J4Ho0yS^yD0!JCD@6wqnSIrEcT*8J}io>xWh?o3OUTGQrLn7cnvL(Lr)w+*_a5Z z;KJu9h+LFHiXeb7&_hpjuD<#*zS=P5f-BtcoS7g6)&Pr7oQau`LoIkKDTpluX$9a~ zigF~xK2*gj{D_mAir4@PJ5)lf_>tJE!pUH-s9*Db$ z9{j531+#fTIzvjSI7z^$vthXolLU~XpcbU0nZ{uULGy)H5S-w8 zxDb_`$zQxeK|@Oae3OC!iGq@FOhIud>>33@8_VnP#lqacqqK)#XocOd5RX&|hm!(2 zJ55_C1t};LN6Sv=RFFkc6#cq5h*VG0NjH-@m?H!)?gR^`m;xjmt%Hy_v%!_VQ!as^ z8JYOURw#w2=#;b2!@n{Jm7F+x3bVJ$s+(JnU~z~}NeHJ14UO=Jv?z^MScuqoGeEqM z!XSyhOUHZrhw5xXI!i|~7#2=Y3|9Dw6&)5LTb-#RgRY27P}~H5;n2PyJLOWrR&WIl zh022icXn=xOlNKfKkXuNX~IH zE_e-lX%31RtEpPgS*@H4N~q7Q2Uh?|3HXtdEju-zzHlv(C3+khR#X1MyB)+(3@&l&9eoT~&aKEQ6`2 z7yL^CB3aNYY=d9qN@M+$xOyB-an|jN0vEZdKv7Fy)fDgwRzvfxxy+D1aXr7I30D+X zv4Wcazl=W<6q6A|5S=I=3sI1HtuwOt5qa|u7XcE6>enc+j%IZne1*|w-2#s}u$U3F zq|w6!*~pch5nhcwM1eLqs=&v|C?*rQ^z;Q)fBL)B16puxpcyk4H zrP?Hzws-v$=ySKNgwYFutGBU_D4150tT!0^w2+K|?0cL~S*@O>scWRwx*Z+|D-W!? z7d&e-QUDx5%fiCl9q5Zuu`$kL!wA&WUNJ36e=J|Rp3zvWPYg$@7QR8K`xOhhyP zj#IOIODFU&MO1Vcy$IRgU5-uyTxGkgs3bbknNN!SIZtLV5pfX4MEue zCEy(ENX`bN*+KDDhQ%pCDT9RY+ZeFsPL=UdT;}!i4yYhwz{m{qiYQc zm4Irihw+5Istn6Iqv3nYHLl#@jF49Vfv({kI86zZcKDP(aaIzh(8`<;_A7(`lVqHY z90LpS7|3w7{i`h{NrJzWfbiqCc*BmVwS`e&h@-I5gg_7?Qvx!Sm(s9@esw*a#8qQe z)|5;L4s^1lU1U>3E<={$?ekNnxhV_$83|$Fs%(-9F|;HI6jr!o3kf=@jg5^JhvCB{i%$X(p_c36Zp`v&a~cTM>o5b;kqU zKn)xgT`A3KMqIf136A^6dyW^5h-OlS#Y;R8R^^ph(OQoQIgY7j`O-uGhc4Lxrn576Yg$Y1{j*+~pOH=6c2bCU{ z=R{$X%0is;!V+$W@6=PevpV+uiQ^+W4!PW!fJzv2joS5?K0Lg%!73f2iIpw|F=K@x zHPdZ=UBTt%7{Lrto#p|CP}QN8MXlW^bI5aM=D4oapKYdK{@^#so`M5oB`D5TU7wQYnUwJ7-%1t< z=$p8(bg$2@$Bo=pEPh)7$v(PVnCv;_FdhlFiCUUHIFUHx4jkhD0WoA3w%h^H?2Dbo zmxNTa$xTl&igsgc&>qh1MC_Nezz7iSApv51W!B~%tstSV2a|*Jo>dfkzhZ9$lv{a8XpVU+xij2Gz$a6iv#v?k-NpQqw!S* zYQ=CfP5?3WWsefMpbV4nPfwlj$RIsthsbD+AkjeWE68^61)cN{^~P_3C>xY?;WI|; zrL5Hcq`J5EljYvwEFw7m9Ib>PO6m^uT~$AWD?+b;iH$rEtKh(@tnB*|2m@2?7<_ek zEs$nON6_}w@WM5}n~FjqNrM<+layMmt+V?C&!Di1(dv|f<@IH2HVL>PGqP3)!w%oJ z5I-hmvnWV7-bnUSu9@gC+hp=uNQwP6Rt2!{4U9wo(;C838~2gE2&2KZCRSsB8>X9T zH!fa}5bmsLOOP#S3@vzXKStqG{*%PDg}+`xsI(APP(fxNPUu|tvZ>m>R?HO?3GC7Y z-mnGj>x!A35PH2&m5|zpziW!3Yfy*!Q0Xkb;h4Y}==vnXY`NM+rOe*|oqQ&i`YiD! zAXVpmjdBwmgdjx$b5IC=J4+7^?<~4|v(wS6+`QOP!D!L?WM7qph?S<_hd8`TeXAlT z3F|F7*x(n@k&4vVUGKbF;C+^lD`CB~y1tJ0s_clnB#3zDXoob#x9;83ow$+?Q!JC6 z4HO;1P*V-mz@Ot>lHitM+2%COQe@fC|7;5XL9E2)bllLg84fx-(WHSH+5b6vsC(p?Ld0bJOm&PZ ztqTi|`uH~$17U?oAZ|`>+nMm|Hb{w^2Z${MT9IP4X$vVXQWPYKAVpxSc5O&)k&-|P zDN+-XNJxTkOOgahq-@IAsudZ51Xi+a>9VB+mm(uXVO5Wdl9xJny6hMsiI#$_2$GS~ zQOYO+>`oS4>C+8NQKxL!uDyxW& zrOKyBWf4R&$|xZ=c%+N}J+j;<%v&n=GIUOkVhx~%5BO@B)B3tHO7}!&T&l4=~)jM zVTK%Qw#=5CxK5W(3E3!|hyCE$q^EmftZhjV@0yC5?jnBH>DP`e@TnB~?Qym>aVwy0 zOre5M5m1lo%{%`*^gPK%03<9)!qbObNB=R@NZCU8_Th`qqLZ6IIX?QA9Tf$dzo(xh zj9|gFpZk(_6onN3O-*{#bN0OdKL7*B6C~(l90=M}r&=e#(ZQrw4M_qS+JO@VGN^Ln z@)i0l2qDltY)bFy4O@^@q2M);Od9mqyJn|9O6iM(8KY9dUgARA9cx_jQW$44v%nql z5PjNX$vRXPw(M1Eb|upkXSyrKiBN9o2NuI9 z#`lpdMWcY+7^9fRHHu7CY?KxaW%$P9Ns5FPQcx5`GRHmg(RDRRSsw!_$UzbkXoZZ> z5-sJVLo%|Fj!{{o8ugNKi~v1F4M{XV@2yF7{phuSe3SW#qeG)Ocf?WnIk)f&Q;`MWd~bWK`PDieZZ6uD5v$a z%J{{R*1YBqR}u+Uh$5Rz%v2(~mZ_kLQ#s*e5IJktB|%N8YKEMdqMCTl5{ghxID%vRr)y_p;v!HJ*BLN5qomH$v6QdZ%op6;&!B~k;w$up+VTH`#RZgQ9 z`X{eqH%t%u5}A&PSQKKS043Own3Hm8F;_*=D5TVL%cibi zKq`j+ESyjq14?X)#d$hO6SW|NnzSk*p7|(GW3f>@^-4bN5I__w(V1WqOUNB9>nBl= z1c3~+&Y(8%TtBU2KhverNG0o7oxLHi5++JyjtFWI7=3UtQ0UGCXruZxOSlNaUZC`uY2&8ph3>YgCbs2&_3MA>zI5Ym3%*u0yzlaWiW5S zjNg7NI5W)fF|nk;inyi0RA8V8Cv1D7Y7N6 zwOIFz$H0zS*f@%f+5*>%+@5s%uCG!!Q<{>-k?Xl*3#GURC-~hFHmBA#8HS$1Cw6aF z2rRJ4Idr$P&cp7u(nF9fP+HV=Ki#xr3}jpNzv_IeOU1V9;lbY~YSE4jDBxn5@oy}( zSkj*;Ku;(qMP!vQ%TPVA)v7&o3?CSUx3q%{^&Z8=G|a(%Wv0%ZqqV&Me9RDCeK#cDG!A*uRp}hPbzb11x1~=u4(t-mQA{{^b*{p4nJr!8*Aj2^gHiJ$7B2 z-3_(h$--veh8?wi^g!WV=b?mfP^uJ%7<*s>rX3$8;C)rJer+;kZA@PMbCqH$m9%v| z1#7DWrpI)@*5kiD4QabEFj8;1Tc>c9Xn{Z=ISMKGL&vQ|mcR_r{7C_3)6rlT-oS*1 zEL=O(!j3E;m6Qn4^bC)5PXKZP8N6KB1sjYY7}g=0NB9MG+*OV|)r84dQay(TQrxJd zir_>+D`Xrga2&kJ)P@mChXsZ`wM1RPh2znjlq8^oJP}9a7)p@;%5G2z1tOrFRL+q= zQoGdxzLkk~sDvi;oMpU;nb^aQW!B!{kK7sEE&NT^7*&;cO@JlAm&J!btb zJyGB-9S0reTNZ+u6u1J+K@ng@oct9cC-Gj(B>|RA03puA^;pR!CK!6>+ffj~wSupXS12~CVaE4Jc7JdhR~ zL{}sSYZ!=H{GDrviw>#SFmjq>?b`@CpbUP;Q8*YYa={dw1%0hlDcYiIq@r@Yg;s3B z!C{%6h;t0Ex<=N5&%TX;5kZxuPNVi zn3|w9irkRGVR#2U9!EFwBT48ZXsm~0O1VS*qL;0+<-O4G)SOk2%e< z7@4jSKq;7|oBfSu=o*2nn~}*6Xtn|uBmiBsNAK7}(tTXq`46%2jyuq0M*!zv0?5*} zhh|m;1lEI_{Usds7}|Vc7$S(4gkU@PLn)MjT)LUXoQB+;B`2_(M@RxGyxc={MHaTl zUA97b`j<_lRvXAAff&V}QKwjpXDd{g%poR0z^7f=LoGn3n{^J$&DPymC4{06Rp!uR z1)lzqOWLW9ZK{@lf*C~so?oyO4Z;T}j6uDzf`KT(wAq6zkiuE`!rZOLO0b61ZNW+< zT8yHfLui2}M9{r?B2Wy--zY&W639`IgDs%{9Cg6Q6x=9e@D+Bvw+JG2u|y^&LFw@ptkshJO$$b_B|%W# z2E+)KE@{QA6w|F6C%i|PF{C$2A45E&qPc=QlmhQ;!b)jDnvQ~^ohhz4TWd5Pf6h(g zZGnE}NO4)t-8skL1y{o`$peYUD9}SM?{4^NGC=}O$l26;nJyGd2WFpX5oP3%-)>GP%voxL?FKHmlW8Q zD-_sB01SMjg`PCt(2>h?oR0CBX%-nDxBo9(f;Z|%Yrv}{oL!1Bg}(WNokb8SD1pibAetxv8Nf$M-AvM&k6Si}Kj_7K z49pL*(}YOnw_Yx$aM0ut)go^HYpo$iX3$M5_*p3sV*=P!JG^4tT8RVz-r=Itmq=|G^tE#g26Ov#dL(((dS^eE=T56Ukyf~0oqNq z++ZMS$Htv%#T_e5f$zfEMc`{i0Uj&xqfO9dES4cejzOle44!3%*)89!j8x`4&{%RL zYji~Fv;k&B08Mtp!*OP$mPxIg&r>X(P3%^aF~+E|R0;m562Oi8%ESXk1Udp$!;H?a zO>nZAl1&CFvr2&$bcKLin{ap|*sWBic5GLO$MTwn_Z;5u)kE@%a4*(`KkQcDS;=Fa zFGQ->!3xHR-o^q)p65dU2OeRr61&cJgj>sHp;u1G#E~Y%DI6L2XRT(0EtJAxya#V) zaVz-3790k?)&gfL?sLM2QrKJ3LXE>o;IQOLEgWo4+#fsGgTfjc!n?TpJ+V zgB+M+Vx`zDCrY3xE98%3UNIbxge3Tm8^Q;w$*W{E9VddP**-{JspgB^k6kV1BF$w< zB|l(b2}`7xt(4Z%VR1P&jwaVa?6%_Q$v1M>1!R$iDmn~nWHr^Bj#rLe% z*clAnWzq)??`q*`dlZEa|Ab8tfIHY`TXJNROpBB*qq8U;_WCcgZb2=eC?^CSO#rcW zAnBGqpbw|7KPRTMF$UI94h55*ZqaFjK84u@s!SqnVTwu=$l_M3{}Vh@>Io(!Au0F0#YHzKZ>}1B~V~n6<)06BSLO^+kLc zOH?PbK43vVCFsKLt;l3muf#@M8`%UTBu8$Yz7(s3wK^|0rOeWjJzxG|C!nC_NU*|; z_?azmfx@N#PLi&KYY;$r+QhnX!4{;1ehD;!W;2J@1Lu@w*>NTWmK!_W*BlE3uDXQ~ z0&{svz&MK-s0Ihk-jml_Y=RB)-e||a#_b}5tP*fRJ9PcsH zO;ODMPLkp(;BA6|+?p&R;@v&4#W=81r}SMnYw;Kfd%>Trd5AL3%lqCM_7>^(rnCf1 zfudQ-T(>Ww{n_h%<73fHD|2M`RaHr@V+Sk8sl7P9M)p(SYtK4GO<^>YbZVsHQ30o= z;?bFg3fi6xI_n1dbT5vAbR-QPj4UU19|U?x|}uZ_joj^ zPjVnd5X7FJdU*6m*uHwjp3Ho!bLZEC^M>cuJg zSCFDfE7L~&_~(d;wo!~Igah8fF6slP=M<=?f3XHy@`Yr!HKG@a7lZ0mI9TNtoZKq^ zHqbOCU0Q0nrCi9uO(`fu1i@?xLi-lbjdj1R+>}I$yK=#Laupo~y=T}ArhAJWM2gMj zP(Cgftl2}5L;E;8U6^Psq^H57w?8hj;CN=wQAd1LH$_arvxx{XZ!+s#xc)>Pn2|PI zoFk9B;Ykcuqr+S&Yr*~D`vvdc2I9mt7pY%_e0%E}&g5*R=uIZ^I@FWN>G_KixbuM| z(kju)5L={Z52-@;#THj2?&?lNv}i-KsD8K^hmwS%$=yl#_)v@XNsvM&QipX^CqZmP zqWR7NzXjRsj;6(4gG4E_iu6g{n(LbM_SynFtX6O6T13<{O@!L+m?=blXUVvSsq zXLXwCL0Y~sInQDT@p{MdK>j`hpsPiMp`N-}5J2w`h^j5!fVf#MM;lVqLgwf4GcM1| zQ5}HbF6{442)$SeF_(;^Sa>)bnC&x=YGO_9PVsPi_TB2u6UN_1gr?nOdsgSPDi@O4 zK2FF^duIN@&_r*EAQl!S5#42U~%P3L}ZF1yj zb6}JxGYMSfxdrD*ggi-+0XjA6QKBZLXzI6+Zr`9sL0;`iYD&YZBH@-|3$v@nRvA}X zjKWH&*it1WK<+ukE=-vOHpYEQ*IJG`_`vl*959Ys#j`*P`j^@!iGu8G+)33 zrL62pF?CXua*tLexM^prQmv*`jlx?jsozqhY^?Qs%Y>kwH>D*xS`%oMt)oi8y?&^A z_V3}xmp`9=ef#(E=hq)JLEnK%B(bHP3Hqb&Hlykisz3$jA|Qbz{z@VOO$0n@!3b=N z3d6q`u5ZjA}s=JG5`02gj(V z4fp0d3PTh{%uuQ$8Ke7 zqwEpHH+w`9%KhjvF$y~I%u~-j`RvnAsX7rV(5d=UfB-|K0%?nOS|O4?N7;k4D3F3| zg(yk?q^i%P2I8p|s4@+8J(%*Uhm_jp!&Fnh4onX=q3&!?)I2YW#GX@U%~e-A)q8T+ zUx5u)*kKuLRmKPi3b2(4Vr=le9o=lx&=ZrqQ9-3P5ztyD*)%ap8jVfRR|Ms}kHrXF zw659v*esE#R@Gz^uy5bxQo<<25ONAN(aezFEYEZeM;wp;LX;>&F+>7 zdH2J3)p|AM^rW3i_KV1HW$oF(-JDuiKA(YpHPwJwRgzS_eAAD}SaX{+V5D)o4QjB9 zg8IGKbVjvk+{~8R?Vs-?du;@+bC_|T~&h$4Xi+wpitfYNw>=3_rG9+U(#ZS; zFecHZfVyH?03jH`SeRiG%qNr!(sVG&(sCnPSBiG69?`f5hFCQgxx zRkY$2m4-zva?nujDTQAmGJ(^9PE9}rnA{FXpB$<&fudtv2j6J9g4M`=Zmb*WdT2p8 zF0LqR)RVkiqdV61@otr)6A=q(N84pAkx?uEBAd1tN%9p&C^I`>P%cRqDAH|^okX7_ zoj5B@9dS=$%Uh(_MwH@R?v(Kf+$&oNp9VJYghz|ze&j~VCF)X=y)0kt3U@e;NMMsv zaS{#N7|6*n$Xy}B5B&_;uLT{mk3-y2QL5yZW+qc)L9r&-O!uJRfJvFeGZO)v#y}t5 zk)6V;S2hLb$3;dd2>?x&dE!l;kUS$Yy{69E71MYX(}dj2ct1h&P^an?6vWTbz*aR7nDn4iiR6pCiBgO93l`%XO zfZrL>m%LrP51E5|V^XrmzVvNFk_qsTezKk<>bUr(!`l>n12!GHQJ_CQ&V!Kc@i2&=&88HH@A3xP)(;6X651-3SeVGE>Z#VEoVJeD;AQP6@U zcm~-Uv1qYQEi6!_NC4JyjuhV6V+~OV$eivrf)67bV_2FTC#q&8wQ$k(KuOiI5w{%z zvV~$mm%&Dwv?zEHie_v2vq~mK3n{6GFYFg6YchKO%eA?OAV}yg0h$}$xiE$Rw`zqwcIF!8YyrZc@()bN zP>)({K|o}%uuQuL;jZF_F{4Oc)usZI>G-21%@u9`jKhi-c_+12ObTyt96@**#c+tT zEzLA1S%d_s4Q$zIVDIuEvjoW%3lWWsj!DhrO7WaRja?MT(O_HHqr>WH)|<{Hg`ai$WZ~}_-JDuzr16-kB8jAOI(}%q)ig@rXmn8i<@nF)v?@^m|Io@v+ATp@$M~qIpK|Kt@4;T5JNs zWRXv2E+S)2XiB<#Qcf#$_EgTfLcFk&XjQTkUJJ`MIbt3wj8EcXSG*dC9!&^+XB`D8 zxH>Jj;DmnBOFS)L=YsmVh!k4U4i8syAd9^f8Eg?@Rsq-9{ToP-Y%v8_&?IaS0*-vr z%ZggOIBY`Y)F|vh04})rrOdVpOC?DpQX`w@yYtpDC9N!GNqI%F@(H81FimDItWDdD zT?8aiURa~EN{FPE#_HuRJ!Z(C2E(cp$nm28byq+eurSN`%5`;h){vA-^x&NNpa}&< z&YM_hsoxscxA&3%wSC@1DZ<-T8VS-}Z^!CUP|~Y14UR`p=c@$Z8thnq);(lM*SspL z6bh*e(*yi;b2l+MEp@APO$X??T3rvXlf9kCqUXhJovn5-q+&CP_8ZkMiCV-t)+U({ z85Xi`5&E;{z2{x3&*T}3whB`qLCQiZk`uYC`KdPXj3l;72KRtOCmVj8aWoNq^^j@{ zWYB_Up*n__I92-UfvRRN5{1HsfBQEM4|cS0{+GzOB<)+2Jr+ao=95LmlTkNS7{jp8 z4`+ZQ`kqQRGHWzWf+9?!wUpp0@a=-S2f#u}Xrc`xN?{7T1KrlI`D6>-qHhZpD>;Cp z19?K!3TF)ezK;N)O8OLq1qBc)geKuU>^ca7?Ho<_Ov)sv?Ne|^Ib?zqqyVbeO$x-% zn_z;mKF|m^VXOErCz$X2ibMSjt28!DQ4C8iZcGyf@BM@&aCY& zs)7{!VH0eS723fbIHB9L=cat`4l|`t2xlpLtgWmirS7b}d?9*5jmv_LAfk=SAj}Pw zptKeX+{j=HHsB?YMGN{&5sOR$8c`Ek!5^CJ!M3anlmH`At_^s?9(SU>$5B+F}GRWbC`@Vc}APs8#|P z^DYAaHevR5E+(3bExxQr_$f8SiK1S^Tl(%h)XoUoLCfsH72NQ2vZEgCfy>rW$&wBt z2mlz}0oE2JEzogD6krrbp%&_q%T});zDmX@Z@Qw1o&dxaSOK9xNf(JMO4Lt(0)zm> zXbhUG9)4k26yQhHLr7Wy7;7um45GQ}5h7l#5#wziIfFTx@g^eYEPMgd;N>QUC^#U( zCq~R0&q8(hN($f#(AY|c<_-^yvSpSnqOLFADsDcirzs+?$s(>I)WaT}A|pbQGm?PJ z?4ce!G2#M^yHE}WL(&IBq8(g8B0}=t`U=7rG9heX3B+g%*x})_<$6YO0d+<#<4TPG zXiypL!3`%P+;DFyb)#_T4=S+m1dYrLn`?8iuHrtZyLeoe+; za3gB403QOmJgU5$DlJ|_7_EoP;^Me4!!1Z5JU9os(l6n@B5AITF+?nULPBSb0uD)G zD~FFOwty8}!4C9h1GbmAsz(5Y{3m-lF&v$LD|X(6;ufnMoZ9$ zt_T9IhH`$ahGMF5AYtQwWUEW`4X)gdwVG=V#f(d5w9KM|MXlprU;{e>loFK!uC~o- z&W@3g#UZqAr{>2?8wDe8!6k5QBnt;4BF^h_?!H`5_EgaypKAiJBSB$J0$fDRB6Rj( zt=6OuI~j{cIb-H{s`X~?G5YaCSgRhCGtnRiJ8EqAq=i0JHCTL0W`51Qcu6_PtR6VQ zJ2We2YJsgRB3nv9j0(a$x?}sG4Z@P3eWajB$p9pB_K`J)$0>aqMTf@sDq|F_Yk12@tA`l}js_ih7pcULpNn>kNjHAM6 z2`LC75)h&*+%YYob2O8pNOKh=EXE$R5;QVy0wQ5qi}fVf;R-9Z8I?39p!3BRqAt^t z6GMvlOpYM5AmMy)VLo;}TW*Tvb5)&oK6cDDdP+bpO{64B(yEajmX1XdfZA-0K~J$! z+J~s%5Z12Dzs_+KaPPs|p!UpEVKm2LGLAnQ5U#E#E;xtwz7Ylg9b~Aojs+2-+Wx0V zheXNlau{PG@zBZ5B(Fzf2Rg~gLWYV<6<`u7WE-*Ra_-DxoQ>F^B(WmE90kM_H49-_ zL~b{seTWhBehu^52U9hXPDw$WqD@p8B^{lQV#@4O@gvh1QhbDt;Rqt@B%u_VOW`;t zbsJ(rY=Ipnpd(MmP&dG=luij~loZCc)wEV1WK4NOw|X)1G3G5T$RHskC0r;*{p^)uyZBE z=3^)JU`xf;g5pG>qgEogI4YLQ%F-u%wMfr&AbOA>{jUc9hqn3_<07CF(v}hqUBb{b z)p-i1Gm9jD4Z>3l695Z`QMAw`PLLuv$0shc7F?lWYpoS5BJ>_(3n&D@x<}z+Se7X6 zq#V;G((*+%j{gcGNK%$m;!rCoa|#w93uxhb65uoacNd{J+x%e)rl8e0q8+}7BkJ_G z4vq}!5-&UBFtYO}Oae9{Foo13q3XAg>Eq@gCVCU1YPH0UK(7|qVf1WI^=iVk@XGeA zrye+9c@Z(l|Zs0t}V0x zM`^NeDaKG?t$o@DazBEzn5sP3VGNR26DP(=fl}`O#;TuKgf1hF#!5LzuWTNH@zq{} zMz^3JarsP%Yzry|E%)VgxpZ-JL`vs$vefx?`o*$9%eY*j6v}{6C`xrDuNFvjPOWG4 z*s({iw;x|rlSffZ8?hZ>%@S22NR1YX9fzq}b2T~UUI0)Cfz-&3=6J5qs~m#MBxk0r!X0M!`l4WBNibdA;fsXp zI&3ARgogfxRthk)6{c4K{107AxLMeBXlnW*deGW1L^;w;xjbR(&TrI-C7Q!O`>XkiBf(CW4j!I30Ikr9~iU4@}E)$hv zQT8Rg#2#LPF71H|CLpSxryZ=*TXiO9Ezut&doUBuCL+!jW=LkLq8bfRJ$RKd-kk5Bl|lfxpiGr}%cl2x4;4df zLB7f0czbc*!qUH8pkswI0}@wLD~~RFB3CXLDY0`cSASZM(|jBPm@j z-UvCxO8dKg!8wwVQ;I4mJY{DJ_^L^z8sB2$+V0L;Cb-fywKyhRgv>qpdDy`p z=v;%rZ6%iSAR;c|I>)9la?m5AAjIOk6oM+Zvd<)9HDN*mT8+!*5I;CmUc=fdEM<-( zZZuIsBi`{v%zPA@>p6IW0pFX59o?=aAZ7s)AuN0NvtKv1DM60A_S_bv4;1I{ zGCAVD1|0#vxZzmA7u;AYQZ6C?h>JnBW(zI!nb9lfyxR{4{~B4N909xENU+wAD#yFCpZYWKgfU;3ZoKby%p4!fZ^3> zOJS{kxfR%9;dnyv-iNUNq9%Qr4B!N3%fIJ=&^_==j>>I1A7#mY;wzM}L_JDMz!JYG zKqy0GN=fwXRf@V{+9trD2DMA(@eyz`nuZR?t04FlPi!f`*o^=ds~}oBD}{?gV#;k& z%kyhK*Z;cq6X^zFzw*8C=jziXIQ@SUHJd??du0SWR$ zo}>zYDF?Ua3Z>#`oouI{kSS{CN^>x>i1h=&I~PCVWo?ip0ZMYMx;t=}j$SxP!0W?z zNnAxlx^+hS-2j3>1c3w!8a#+FVZj6n3ra|mAPE6>t~M1MxUeBYj2b(7{0K5+M}`uj zh&+ihrOK5oTe^Jz2{We5m=YBbVA$}Xlq6f);hYIHp@g6sr4T)8RAUmIT3WTU$7KT0 zoh4hf+TwDk%OpFcXtLLejFc@}$UL2LGU-u`I(gP>rFJb+xhknf8MOs1-Mwp#{^Scd zu;9Uj3!@~daA1TaQ6#kja#Aq?tp*1UwVClC$BdGPS|)gL^39E)M^he(+BE5cHV6LP zEc&nL$OK=sDlRxCo2rh>E|KlN3-6k;;TZt{@y4rdLe!3%uciA=*zCQn zlEkXO1|PguP5*(^Ey4~zd~LrFPt2EJ6km+-N4Wa;EtVkti=MG3NgVEK2I2ZyOv)}S z7q7r3v@u^R2b^)u5W8%1&J>G$qKBZqq%FxnpDQj4@yV(W9H4or-`05=x3VG^Twq0 z<}#tcOP-Ij{gey}aXf6pUdqL__fJ&swj-gRzzq{z4xJ`c*nxNGB7lwiq{`iRnzGu> zS1LO82i43WcP3t2NdJ>>D^~fk`Z3#QefYC&-rrGHl;&DyX4drPKgPcz`@Bq>&)q9V z-hcX6rrt(!U+M+xRFpnXZuo4P%TXBqg5H^@cjucD*aSV`2W9D;`!gi6%AEE>APNd0 zRR!ld4YS2B(rhYX;5r1euc^gyCP72NfH8|dn$ZLOQ0@qBc>KW5JcY(Ll&77uVmh)^ z`htShxxVouB}xtq3mB4E?f>$6vwZM^ekjUx1;;Q)r=3#OGxm)&4aIu`@<|X}T-tM( zoV+jVKb2oHtx!s#kPpQ7iPq$1d{!^ua={vCYceBjTXG>%uOw`rFp?;&#E)EMOFU$)jAF+C>^KI7Mh`Wsc?@g;MCz-4PIn2;* zB^F`iNPb)KAV)C{ws9OI>b7tUF|uHsU|1TUUWdHqS}M>RKTQ*3_0tubQqJ*qgc!eaS%F`@VjdToyzR9K(st3 z_BrXRtyP99xb;2ZckXEEx7a-?9H2Be?L4KE{3i#A(&rp3zIz#hu(jgY$rTupj_!4RLTD1ZEb;Xz=N0c|Q!4SNxQ!UTDhj9sqNlcvj4sJBqih z4_UkMM?|@9rw;5rRLW;Za$UAlf9dY4Kjl*F3-N7cHy(r(X5i>bD50A1d%kqO2#tjjayk!; z=FzIwHrlt3J?&8lNxT4WfHD~Tqx7jhO$2!=RX#T!V2ivE7>PpeRkTmKNv^Hr$c?lRQjsUvr1mjf{#cPH4O}n^kSg!; zFdB)o*OWv2Mh_m$$G=z|C`6UVlmyI%<6j7DMjzVGFq1F|s=6f|puoPt!!Z&}_W zGDmZQ0s*TEj?e-_org~h>&79Ge0aJ2YXZI=4(uCjnjxDZ^vBz$`Eh$HeHIr;X3n_3BLHr^Ilyxzr3%ce?Pm| zfhG(_*+(I3N+nz98?UJUDZUn@XF@AK>W4_Td2w=i`MrXj z3pjhhD!B}xC;g>#LviK1(8c>ww0Yo8;*Q;moZ*SL>VRvdMsa=C!jvYPa)A!t+qB=2 zlU991D*Y7;Y@9JvxVCPPAvm)2b7e`Nu99zkm}q*RQPvu9ciYGZvu%4s-w(9&vo~=V z!FL*)n&l-s=1q{d*Clm>i6-i4WN*0t#QJa{nNYO@ZI6f{;h65L`7StsLuk*AiI*&)(`M@5}ljLsjG{C}*{5weU=X{d=_K09*QnL$*}_k7-YObzyKQ znUO5JI-v;V8K1JeZLp~rSMhMfX^Ck0qIcpb7z34_+^1OI)>dcMDcjQ~5hmZp00Tv| z=Z8^0eZu_xp5^jAL)lQ&jC!(eM;ge1%`RD@1t~YFG!3jN)R`G2LX-`(!6j5?l~G!K zna*cgPzHVQw?#Rb3Li`#*mg@nbq*Y{1l~kqO)INg9>p%&SiPsdf7%XX$AXL03i9At zlR@@uYixP{%|a1may_XM)nN>vZ;#k+#PiyCqQe7P`-ttyY1`T37FRf}91=zZ9VEYz zS`P#x4E}0V8MzpQe@jpD1Kmhs5FoCK;Nr$GSV1d+9>-b&;2aGK#MHW2Qn;VWub4p24 z_$jo&LH2lD^w?HZL0&*XhgTf|w`_!M&oZCbrWqqrO#JUf3H+=c52ag+BP=*FsK_Gi zV=|mUY$W9wXYv`7%>r(S%!rVLm*V{EPMQ9z8NiCn#hvHS^0YUIELzg!Fn>OB=d2j< zG{^ERJlhmZgdl1)D;4qhH!Ay&KuTt1_WQBSTu^f9es+;~@C!uFd#{Yrn4DIsxJr=J z_E^q)aT6ap74d3NLDzB4u5$r3OYWgFbxUQzdA4B3aX~2T z-Ay)spUS%s{=Dy%?+9Mz{RUC5iwk$d^8c-7epIFT5^Eqn|G%Ri(z_ zEaKeG$Ekcy5s2L zcx^H=oU8B)jdxONmy&(3Z4QHKvQvb7E=g?dgRjBTU&>LWcsOXzG40-_e$lnJcFE** zDOpC4tDpf8MeEn$)__G6mw_ourDBU%iN3gM9JYEPk_Kd>k_$Aj(v$E=mgcW0S5hg; zuZk-hru-7F{W~i1Y}*CtOZj<4PyvS=Idbna#g9a{TN?QK`2UJ4bV++uRn0&uD1fKw zwMf@MuBL;wOtMkh@s^Z8u{#ba6B<-DAe9dlR2L23sM2uY2uLhBx{Dr!ClrbC`l_Ol z8efXUvOC|{X=^s#V0u(NSx@Q?aKr?eRYLJJ_K;Y*P|Xu%b2(}a&K4$$Mer8|yjgv1 z%`(uRZ&I3NFk=ChnPG5Zqjt0}1qtL4Y=roqm3RIaivg47WXRL2&T3{gwB?|ki7c_l zmF{olXSZ5-Oh>grih8|!6h5z59%W(q*pS$Ju*9%y{gl9~DFi0u2!}Ts8!`dUJSd=S zN~s=hXZ>IzJawymKgEMuX>8*^3ipj9F(sxD$5Nnz-y*nFi=tLG)>KPBS@9Xwo~NNT ztIwRHh_*AgqnRqzv)8TWH5_F2WtN~)=Yt_|^Q|gexL)|w1>{lPhTAT`h_>KLl0Rwh z9Tbe)c0CZGB%;Dj>3f!b8Z(JqdwUX|d+VmC6mE^wgUvJo>=_nPY86_kg)$_))^wMd zlqBrEY~dc!rMj5kP`(i~7EMPTK^dGYTN~dQR&OC8X1pKXed{4pN~vLHZK=nkP^V;3 zS%t;0OspB+dbi~=dM(Y&-)uW8w>V3o&#LZZC-WWO>tXS&m~efiezh7YNMA(bDxACj zdBW>o#cxl7x8amrzJ79L_uisP_I{a7QTuvm7xM+U|Jc6W*ggqOnGr2BY|ue&%_W?G z-}Q1>O=3R;gQZ04RcU5z-jnNgUiHD^uCguO++nc^??CrR#I>I%E=+zULlM4Z1Of-9daq zMm}(TUjr~WbASjnGLRdWIaTnFRl%VGbZ*VQ-mmr=)pc7K z7Q{M4w&i)d)m^!GPm(Y?aGtekd??m;mY&_g(*xB<74BR zo;ej^>slQ26PhIfroh$|9RsFn)vL^L5Kj#Dj(hDbcEL)gpNmEb{W3=aa73 zCpY};g0jWSK`#efb%RF}?Vr|ey?EqT*VmvJ!j5fTHD$fjlK9*cyOA6IyQwZ zt&0vE(Ki{B)`n1SE16nRO!KQQyj0`!QUlJ(X?2OBOc(|DB~Y|<<+o-oObaUcn76L5 zaOF}?!udks`)+2se3hc;(PbZ3T86FNDwXf%x_@{kD%tEqCue7w#Zzbx+m{S^f}eaY z`UmmJLt>R-RC4;N2{E>IT8v{Yvm!JIw%@}4IF`*G4ynHeh^)!CSeT)T;M_joDyebI zd4a>Dj>oZ&iTIz)%Nt|@pHViiWWC9~JZaHX72;wdt&v|YGtYT%UKI3`of@hhblZ1s`cv(L=GH%Lu3cBP9udRn>?Hm^?B*USsf^Gn9g>n3=<1ek0R(SH6;U$%Z; zx-|VIKj;3l#pxGp&BBVFmL0b(i<~czfKABT!V`_gGoo#UUz-4Th9iP_Y-74}?)Pnt zjI{rf9wnw|nQVVh_|oI@MK`8M!+D*%Ka)3|*>1%AWPXeN?W52Bd#^jEpjCv65X4fB$sPtlx(s53Na(&a`0v^nmpP*B|WoneE$>NUets(-~6P?-7_P+vjd0H?t2Z-CilDz9`A@5)Rn=!P5yYFa?>GoV$C(b3_zq5l~xn+)bk z5hbVGO};hM{tLV`Pho0SKd~_h{%7SVMQYB3|NS)Vbj283VFudy7TSLSRJYRYqx9En z9sQ%Hma1<%i9Nd9K#ZjLR!%hlll}C@S0&1a!)nO%x7{d2*jM0ZIicLgX(a=&nODlC zRD~(z>;Wr@HcE}Z0TkXr&Ya#*{x)=9d}0DD*aD^Z0SYyrnFV)ekU&*h@9V2dk^L1W zxo}j~vWprFlx!rPW>ZZ;6|I75VJQiRbeZVD;Y_j~lPJU_NArbZYwTOo@Kj~QAW?C^IQI%;vF&$Q_Bedv69iiXDquN?u(t>nO z)9w}1*j`;aH*NRa|5$3ed|}@0e|xdNzWmj)F9b-!X6EM}VXh>^@3Al(y#A=ulL4H|PkVwE-N`YXDc8jYKadrZ0{MnXAfQp@tm~`4F zoJy*d)`}@;JDj4iidq>9n~EbFxi}CjoK>ut*g2c3ioW&ewD@M1XvljPeQ$E!TZW8NX7H1A0e<4thhnkDTy$5r6mTUxY?C8 zE#}r$W`ZgPObTNn`A?nBXU*CMslj5tFz?C54yZ1);hvGk>_zMu^&fDTB5Ok_J?M-@ zxQqY9(>9JkN8c&d1aB&laP<$lw~0%2%bf{`A_2$Ly^G?TAglMUcy@UZBZ2@p;}eGf zwdUxi2B4U1Qw<25Y!`$<#Y7_F?7_=SAx2l_Y5&-mSwfPt;I@?<4kyu&%(8GDu=Bk@ z18ZQ4z^uAvW30_oq1lNBIHb#_G{1htMUYEp;bHJF%QnN`;YAcqvP0g>kGiukZRTN$ zh_j}sctmfbllEdTMZ#V{edz;o(WgS(4#Gs{#paq>G>rG-I}R3VM#P2S;zQ?iVp;zmB$H z3;Ijq`GMDc^zp0S-!18-Q!fvHoTbc+6)d^Q9TijExZP-gcH&LFF1o(UT*rQ(3i{I_ za0ud83giC!^(?fMUuf3Z7H#vAwa{|n<4Wl}ZN%l$$N53oAvbyK0!zvk@(o!Pm<&kA zv9(^7i+@759b2`*;pL-ua9NOS=I8w7? zyU`rga}YcoDD+ejK!3zI2=ic+o;%F*a0_LM^!(KD*inq$2C$2a`)hjZq{bgNv+*&F zYx<1{rcb4n^I{u6dwnpUl)g~@MDV_&@GYKRp#ySX_T{*07@JG1L>?rdJf|7LIIERkgWshM-2 z7f!KQ39_UePruWvh}%8Xdh_Fx6Rm!w8cJ76HO_c~k-NF-~!sMA?PUjA&q%8GVP zA1bfMDrgHv_AfJv!J(IwWjWx;dqEpf#WpD z6gzOGJ&U~Ia~!7y_V99dcS{v|f83%cTBB+trIadVWm<-1X*kxqtSBK*gGPD9+SkF< ztul+u*mPCK|B5$qaeP=LeKc)w|FT*dp6od@Cny8Es%j)aY~<3`r%5Qjrz7>aV5PC#&hzT zDr%vDmsRwDDOi!4xm2>hp0bUMP?!0Vx$=jh1Wh*1t3Q*;Z)o=W@0oB>Uh??{E1_0W z*0Jo*Ml8ErW7w3dfOKc;y5$8%p4y9=$N*A3xgwXC8=40xd^ZNpk=NqZtDhRBHA7#I$hSBZq-%q;G`N&t z*w&xbdpU`Z3|Hd?XX@@D%m6Fc`w8S>oYkW1Tlp!iA2q3qYmGKRA1!g7KiozAh}Nvz zhv*ig%OYCJC=XIX-z<4KMkFJX4R7H8)b-$GlAfk-Bcr{3blEC2rJ19SHj-;}^lf`r zi@VZ=ncP-0zE1$`*^9TkTkGKlu2|x^jKgeWvfwjJ6#1SNZsWROUS54Dz5N!_afC1S zU?G8=4m!<#%>Be}-+_FZElev|p+Ltf3ajL`TH>rO9ZQ@8SFH`DkykN&?TiPmX?waH zp$aToN@5zL;2ZZ^H|2E2j;w}J5#jC#WkrVyW3%^htcXO`tdhp@u7www^e1k9c1L`&o{JqDv(H>^#HO;YecG4V8MEs7TxHEmG z+}B%Q{ueA+@Jsc9wE;iV$CvzPo!|v%tId`g5z(bilSN83JP#q_RIBL5jo#aErA zVT&6x+~@5ONtoQcaGG}Wr`eH+XLzMuBlcXLK(DnJjasmE!ux3?Z6rtc+bIn01blTw zK*f)iaKWwa1K0H@fH+cIAX%N&QT$`XAB#YeoHf=qJdylaYumB>Kd7TFMOD=bwg^(h z8VGpNSuI=*2)RNZGQKD=x@|;s@o`FNFqOboD^Ep~$yoGztnL~k(u%G6Z>Q`glJb(y zxS#yeUv+iAr;*NfN`Jo_y@r*Juu5yFr;QDHpyPRL$L0M@K?n|feeKW%C(5h}V5zaR zL4|;+6~0+A$=q{dLOGJQtp?M$&~ux##plr_g#`C2;k&Z$;)63Hw6Q!*lb)m{9o_Vp z+)FTCNH%d)#AeUr9L)6Ma#40N5tk-+yVA)9>J9`~J<-8HCnUrR3du4Bll7fx>Bgy9 zty6e)DQnSWzO#TM>tf%&1Vl6$Z#(D~tNZLZa4M{$I+#-285j!fWW53wL13Xr1e`yG zx~z&1*CcR%4tQ0+`xloSNC%=3?~k7epep2F_gMV<~L~u!O0i7LT1JjQ7c1ED#6L!F(Ht;(lY{K7L>1-V4WGO zCv60>lHW@%Myx-Xf)w3wIppVW31bPY zXpODNoTe=+8hiXDSctY;Hsf_a1e2_JouJ*{Lt`y(>(z3v3(G7_U~Q0N_E!G7)o=2n zf2lrJU|e$Hm#Ukp{8Aozrl0$~zA(B;xr&29lOw-jwngn{XTxa&NBukV+2S0s4>mNa zJA?97+=((pDI8X5%h?HY;&rzyPmBWF7Rl6*;!Vm8O*+W}$MrE=c^a$tvc!?`Pcr{J zVl`6XkH^{nf!rBWX5~XidGIUdB<$=6(8A<;u}BuR*NJ9 z(aAJd^kp~wcSTJ_a!C;-S;)BD$f88d4=UzL{2(l9-VRzEj=Bgr!9W5fm3sWaM})rC zQ&ZnCCLX|Xb%vn!W=>P;r+U-RnqpgDep=*9>w2hAYS9I9M1xksdyt_|uA5=9@ihda|&Pw05aKh+yfO$>NisS;h}f#gVrh2At1o3_)8 zPsdY7(9i(c`19Y>0sS8JiULwpOVYN(60(Joc&m{O{k8B7O6pFLU?g26KMAc3P?JNB z$Ef|q%V?KJF&flBnoeGW6#y>>Ofujp&9Sg8O9o9csm&niUz>L8o>~DW5lNG2{d3mk zvt_(w?rYWQ#l8fNWXZ`8o>T53ewIX?%Xukva_L;7=<_(|#!`Ayo~8~OLj*=(BJUNh z&eF=qw!XoHbR#oK{Zqh-hk#;63mHJVxzz6yK*5OjuMp+^zK+eD>~LYZ?916;GCKXh z)ht?6F%O~k3?$`dF0YTS&00w5d0SAE%GfS|sVgt8G<{HruF;#7f_6rhvoJ~D=wgB> zL3%2jhlQz&t3`6nUxrhE(Wbdv1E|L-e08yZi}u$xk`+wnSqTf| z35VR!lN#nLZ{ml}%2wQS)qm6&`d?Cs<|2=HkiMIUr*K+jo^L_f0d!QArd;IP2mmO&5O~~d}o5zBJ!HVCCJ+vhQe zUK{R@Har)G!hM|PPI3AxHv9~>0=%}r1FQu#Z4ZgUxV3CW6F+;&MTi#IO4Qj(QX;sr z9%1#^%CL6P)})oDS%IKBK*sroFy}y}?HsR(E@&M0?```>w*hb}c)TkM`!9_7(*Y z_M`nZB7*-yrg5=wu(%nqWwESrg#HVe1`_-SnU=$b5&utQnp)6hW2~WMG>K8+0hw;Z zjHhzw{$I$nKOfWojZ8mQ1^qwB^a)>oAA$P+K&B1fiG27kWZJk@(F5f zb)UQZA`bq8Oj}li36*}TwbySCil&AuJ|NS(qfAr^1?nA*_7NC>d;3&J(_vT2(>Ml= z&Kg+QKfFlZ>CTqZ<$Bx60*$WL^Y!+Z56E;^+t)9BVUWiU$n@3jSSpw0$L@}s!3Q2$B-cgzUdHo_j-#^bi_Wvw(~GXl5w5S@-v4|qn(GPfwzKO=zESR*DWPT8n`yDb8okEBle3#oviLmTW{^~F-)2$l zwL%_c*Brr3g$dm`4HVi5I-k@|0X|Fo#?!aUR*vI)OV*igzR^bSYVX!u+s^OSJw|!H zZ+I`eegEutSo?kR^>?%L?_YxPd4Ft$Q@Q`xj%Kg>u@f(P@ne@Eh3MyAnxXs8Hx`z4 zKM(R=UHm*OjN<)ugvoUObzD(i_v@sl?c&#I{V4D6v*u;@-{XfiGaS3Q<5p-CVm1~FqRdz?(c#|y4#!M*81 z$*6zaokGX+Daz#{J+#91i|>s`ecfn$-B#P2AIvSfS1&#nm_pu3OTD`KG8#r^>7FO< zbvTi$79=AraeKN%_52B)0QSto+u+sxD0lDcA2)lmfrc++dVb%2T_1e+dVsv=vGsLa-eUGZ@>7AhkgiMLvvoZ~8KhEExTt zz@f6V13qH;gg*sG&7#Y%$4A=OTGbwA7DE#e@@-sE^c*Qt}{Fx#~Zi{=b2<{2TM%fwN2?`0v2^{H?5b$Kl4ATm}!IC9Oz|4M?vfD~d%Z%bK;F=%vKo zvqtFg!}O{x+j=_}YNTiAlv-(`jT+{})YRssEO6-uIlMwQiZDFa zX(I7_KGS4ielTMJ^ykWKXFwF4cOrmXnO$d^bPs{UQF3pn$eEm}&5YqBuT*jEJnoTr zYYMI81x+F3a8IdW6^mYo7ySaoaZd3BN#vv>pGc>62gxB_=-%eHnEEEja&@EHB^$C4 z$wLQMguxgiW@^MtZw0XV+0&YklJBJ&WO=@;YpJ{d{zcEqixSP-rY28bx~t}^iRN0?>dtzsy_Apu!q^fbdqNyOsJ3I^{yf&tcI^#ome!oB0o7SEo z{H_!#n6CvhaUE#-Wb4`xK`s~cS7%yKxA$r>g{&DwquUqPvBdZGqHQ%x0r_*w@2|Qx zEW}Xy*Xip~>Ik^0Q{yljS)t}^na&Ea_#&~nMl4UQYte;lVWUnG&$+AiRSFRJ;BI{A z>XqDSeKGg5)-Ban`1S*tbhmV!dV{cB&zHJZEt4N_eanc7z;$-mfp6yj;9Hvo0W5M) zx^SL{ZEpIN0TCNR95jMs|K=#`BRC*Il>N&ue;nrLTzw72@5*@RB+A7)_Qa$fvONcu zkM-qC!opOT{-czy(O3z?`lw6)i#Sv`usM{F3*N`^M-IzW?33dW%OJ-+%33VeFOCAI zK@st`y;-9^lw6%0#dRVVyo0R@bESumutAQr97C2j+dowJ<}PlnqnC%BA@{5w4YJxIBi zJD}kUQs9IIL)0qldCoi`I_g_~d+KEip&hx=<2RD-xF*v2tM}5jW!GT@A%)cf)YvM` zp;&Fr5t8Xx5+OUJF?AlJpr+Q=_s;#{xzvZ78yUeGd|&f_Ref37I|7rzf(h}?mYz!D z4P2PNbgI-VfiE093+Wb!1E7x}Nrv;`P9gN*b7xcqzC@Pq^}`4EF2{*n68WSn&hnm9v5?=l*Q4?I`z!2QA96j{aY6VWO+f7 zSH!@ck=9@S?4C*MkU&LRiQBcL-WZ>Vn|8_&WJ)Mu84ow_VoS&UKdM(J5^(WC1X|>e zVIBaL2gO#$i@kt@fp6LGom2+-?k*!rwM+p*a@&ab_8}HFpjIit77+&%_zV0oJBRx0 z5I7tHuyB+_7+Qf}^oL5F@{`j92*d7QL11q^lr|>!ZuozOmY+RNy%+v+>*CT2mMybg zHtolQxxGwE9ngtuEBGge1mo|^AF>rm8U9JUpG*mFT2iux7<@CBFxAyd<|1tOY(GMm zw6i8wnmI5|woToczlghdKE)oF9@Ld4pn~PRDL{6PmUUA+{Nrq|^t*BbwQUK5Ukwv& z8FyFkqEv>a7B*pUP|{1YEOy8#(nT&BKcR?x1dT!fmXdoiTIlfS^mVd6G1^`-WB<95 z4{@C>^h|h8B2K!(b5_54UqAYUm=mq>&{m!Lr%du#bk%rukl|vlX0~_+9QY%YqLr^& zE3Iw0Hzg!iG(Pm&Z*0(&44w+}8I=wY1A?GSRFyoAB$Kkipp_J?)w?LJ4Q}!px%n@p zTR77*8)pVbEwN@}W4mDL(=XGpdx`gwm_5we^Rydnjt0%2Q+SP^t?<`V8tQ&d+LtM5 zh|xvHOl>Hj#UeIk<|$~)EygLFQPyAc$ZuENGSn=tW>_yWzWf!{X@)8Z)JN~593&Vr zWn2q)YnBArO~$!EXL(=qu(Y8MRSY@2Y-Rl~B6dy=ZoJRyBBYOO7ee7m)&psA(u+*t zYyC#%s<(4_^Z<`G>9tE+l7Y4GL&~~%sU5!w8v*nv^fi9n`~a-rtI zo1{Q5Bttk=;Lrjy-mUd=l)N#UAiDgmR2Z_MP3y2k>`YnxZ>iLWSCEZ1xCtMz&yv=s zA-ybRDWP=0_=v0UibhFr@aiiFz|Sl?%0+EaFYKj4$ySiNgXx)-0+x~#$E{fj)af+^ zIc|UGkS?D0h>;Y~|Dgq}fOBOTE9~y^9f_$2={6gUlmbiAkjkytNZXh!YD1KvX))9t zRs?z?WP0uZ@g?xN%>aC-jEfOe^rBD;$pU0ADD2*l&?p;4E}F&;8*v~N>zl=E3!U-g zz`J24Wc6WE-XuAPaaH!D$(L^6;rP}*!_g+-R6D4QRb!MA=#P@}Spr{dz4Z`9Qcxxu zD`36YCn@uBA16?2Dvs3$BpTk@5){4IJ@7bG!WzIQo!=*k5{BZJCZ>4AoEw1gia@te zpRJ>yT;CU6!q_ESQGzfa>mG?HlD~F~EP7roPZoM~7sV%Je5(b?omZ>#6V|p;P+tI} z$^l?LF0OlV+kctvJulVT#iT&WSUG%1eLd^8edgpDH6|Js(>~&VSZaA5CVx=Uwp&O^ zMQDt!JXrtLhHzBnh|9sEs`l2)L!@-;-s>ln0r|F`XMKupVa^-?32m%M2T>{CGC`W!;9N8Cy94ytrGA%eVMyW{7BRSGYf3apElsAM}TneD23JcCY z9MYc^)rg+gKY(M)P}}|z2C~_|7I6qY8PY@yW!IwB+9*O-4e@f(u0*~D+*yHj(DYPM z@`wdpNRexP3Gj=ZW1^y7mjQ`2=#`)7t2{B&?pMwjkdOVPO~?pX7aEYHU_#gD2gH|w z-6K_>0s?EdG8`k3Vk1whkC|0VwOnraSdH)wSPF3D9M{C9+Tp<0Au)mWu76_S=EGp& zL7ySP&_tuW!BqLo%uoQpA9LydOHt?m9 zz=o_)LO)?%J)@C>1YD2`Gwv(B=9g;rknTCjsWEU5z{n2}!}LmWB-P${JU%&7UIL(` z(g!@(f*8KkLhs6pBHa}!^e>I7O})$FCUl|w;D1`)^%=Q5y;fIo=c;fO60M^3SSj=5F~!uH)*G(hjVL$9>i`jp_^+s3>c znt-nhS-6quP*n};GOe2MceDnIw|&avLK*3+U}1$9AMEn3?jU_p@?YYv_}#dEYoEf?1G2|diaJ}t`z+Z1MEw(+q}Y9u2s7ln z3?ik6f@|2IA1+C1m7CmUT@UPBWFwz7gF5tXb6m>b_d*A7eX92%{y@A^RF$rzIS zs}jFja(~+;tQ%NJ=p!{Jk5yZ4yTK0pOA*R}smdBxCZ{XhL^gUfbsDn(s~MBqa8Xy3 z!66O`m_A_oE1A8qJed|^>lIm`kCvW?6t`c#*Rl4kB2=Ig8*~rl$D(N9^pYhaqi9)Fe+g^7N|wU)|1-t{G*;B_j5Xb}cA++m zzvU{{GHCU1<)bnq<1oBvBl8h5Cc5%mRcgAQ>8p>%G(}@{F1v3JjC9BigG&K*g#*C> z?jNjNL0r&f=U~-!;_7mToEefe2l;=F@=?ZWQh=&WW^e8^0&P*eRD1ak%*kf5j%5MS zcZH$(5ijC83+3hfFol3-+7w+=$bh38DB}H=BDBP=_Wg*7Cc;$4wM?Qy%GjrDl1xyv zC6zNU`d_A}D%$sxD&|6~4rjJv;C686rMWPm8pl)r&AtAB2)UPsa;lgJaM>a8d@HIY zBIe)sQJ|xsLd?#tv^*g?M)!caK z!=dl|MYOT}aVe+pL;CliW*;0Q^Tr=G%Vo)}=t~WOjPbET(I3=pvE#?jJunqZAWCGfMlDU3(L+7A<^WUK^I>q zakc&W8j~oOK%H3K5uuluH}>LxpD)!n1IlU?uG@of`ePKjD^iaXVulsgzo|+A#&kSl zyDO@ERLh2N6YTTCvk1mzOB4h>Vz6$;)w>|?U{M1bJ4}xKWRIax!y4lD6kTT(hPDd<`Hd7Q z{My9sR`*7w>Ra+pz1uL00s8j~rfhjZiG;kp>@y251KEc`5f+LUBJPxM;NtCQv7^kb zYs;41>jSW+rI4b~q{r>DLVfdFF}pwvu^O9DiE3ZWOn8v)M|0C&Bi2>u>utrFnfVx2 zjc!o~Q+oe(@^DN>w#EgSwWj|PrT;PoHiLb;ZlBcVc0N0>qfJneP_%gB?htG!MfMRI zG@g^^C2~IK!+|WB3#&EdQPq_VyIC%gAb*z^Dr`c)@&vC-Hd@Sy;p-!s7Y(f-acXO) z&H4JV14CPRL{DDJkPI8)hmQwA3wR2u$I~{J12tAUmPi?I;TKw+9Rn0z ze0Ax#+K__y1;zU{V#MkDWOO`0y8xwkEQR~>(!jg?kqsV`+0$25B0|uCS6-6Hc!4KE zg`vW}>rw*D4p_5Q1+~6*7&xOWV+^HlE8ZH*m|_e7fdg6#U2%^~;m9>fPC?JGjKzS2 zK|&RL@-R@2Q40&IEWOsilrqHyn7TljRD*%5py8pIOu*B%jXB;!?L3Sg8&j}uNlLnY zghj1tFyWN1t`Xbn04G}rMya%QjojOQArG+b8f#K*L4yN(c&=b+Jj)`c2Fx2L^#+pN z;EGMx^^4l@Tmb%j^SGEbc`>LBK9pztQXX+m(ClKG8XVfmfKTa4n^H8Gr2|u9WVBB+ z8xyev>L2r%Ywp3I5?z#^9EGJ-&v8lKjmePcS{R! z-$oW4`|dR;KMn#2pqQfIjVP8Rq<{)*rd{JWhsaBw3HDPjUJ&g~Q)$|yQ#?^q%EE4q z8cuJ#TWUaaD5nTl$;^PNXpoIMSfms!AMC-_KYR=#5Gy!d4-?$W zBTMb%tIQJ?|0o|IFn|!8Y%yR7`|GJ{vv?!eYWZrmiz_X4k{m@4K(Y@jq}gk(;^hK zK{0s}fdqEb9Y)ZrZ*tz1GZ9b1tqDWI^Y)D2TQV_iMF^!TFsPP0J>9VU<9jsd>89i? zZD&Lp(@p~?_7ub+XG{v_7-ZY$vmCWyqG)MX z#jV-)@i~XAO|NHeHj|@J(oYS$$a#yvJbm$)a0T{Xa|Pdr*i&6VU2huIVs7VHSLedv zgm=1OiULkD6rEa;i2`OzHSDQ(e$zH0Hwl4KU`tk0>a{CO@EwP;vV~VM9yzmA zf3}9ZjV_9dpO71*QYzm{iaEDKNI&i<$))8n!xU98lrUze)TssCg>g8eSTu0m`HH0e zI=xAhfdAHStRNb8F(_Inbu86LZy-EM6xk*VD~MCEwzoxmIMLJ_n5$8gKlQ%em1rMG zu2l=*k~O3)dkeFN%)sV!zdF{j<;N*`F1pzG|IB=UWMBB(P2T^`w=6VHvh>evJ*$~y*l zwBN0%e%`zbl4)eaIs9J$Wgrr`$4Rj%h zMN)YE+b^(`O1-tz1ib`&Uif_1ymW$31`pgO1oNoD7=~AOMXXRMjDsL!sD~@IaNK{Y z^Rj!4f+pBtoV}9EMzxqtJtR_7)s`m;nYGDHB~c3ym7{8z^le0w|49IHkinyu-KlPg z3Pe(*SZFH3C{2BgVvP8r6&s*ROZSKnR#b=pwjcl%V(X*Xk|@l1)Qrvu&<0izfEAKK z;3zgyPGMS7I;_~pB$+E6Y96PJKik5Yh65rc7)G8^7)98$3}?=;qICLc#|Ctm0G-W+ zOfPQcSAq)5nx?j-43XQIQkteL4{ti2k()hS@#GQL+Kj#`b1NcT6PC>KR^zI2D;C_x z`S^nsD6)ln^GdCRIK{oc=221zu$v0Wx30gY5n(ao6s|H0NN)NyuSnsKR&c?tnTf&} zHi465^QfSsutx=9GKC5M2t~C}!UBXPOUuj-C#A!T7G}c*|G;`XN$}7)M*Zsq=`i% z!(2Eq7`r!jw(VHJnxTxD7}uHRN3OJ1KFwNJONZ;5gs4+o6fdm%7?}yXJW;J{J!x;D z6^wqVa_RDRhp(a@Gp+?IN<saztH6`11p>s|0%fUwJK-SyG>Gn1R<2qJ!X2% z8CB`c9c|co^g~&5T~}xWoBax&l#ize1Vh2ZJ@3IRW#WECiEy-5?PhA#UPlkp=IjP4^A^UE#GXb_OIy!@jP zNUNHNvxSheH>FU#9?=5U83i`51?W?aQRs(+O9CZ$Km|+!2BZ!G+>Goa0Ds^FuVBIR zdlvl@K+b@{*N}u1x%&xV;XiQU zlknOC4kJMQ!@oe$3@cf`O*t$XR0tPLh@2n=|4x8B>4QTvI*CnC4ug0aHqnGF&_gLu zfQ_oX6Vikd>BH9uuT40iO^E^%vl~M+L@8JaUXg?o`YRKuk2;hBngg>e6D=PDGAiV( zOC*IUShuvu8Y_uJL)?NAL5Pck4~jTMmB7P8oU&5ML%pd7=wrM;+yuMREn1bR%4@R0T*;}&(0!5xs zkn-RTGMEBcJPh^F#a7%X_c@_P>_Z%S8%C_NGFSrtc$-?B0zUM^JfssX;ECBY#dyrH zN+bmrAp=08#8w#tNkcLv+K&7f15nJB|46LG33xy$kc3}!M;LL5&p^d)Y#wTq#rmL( zcw9(VFb+EbNLK_%&Ok;j5IwShi-Oq01&qYxks3|tNBI~9Qi#L~3bXBs!=t1n=Sa6) zqlwr+j@j^#seA71~Sr#hMf>r1ToR|rvNS>b<15CTh8ah0y z+=(=ild4=z0^kHzxyv(qkjRh_|5hM3nj?UA@P|+|iJY*9#hi>T(H};_IF0KtXqgqf zlpAxIEsMbjvWSx5s0V+5h?#&c$!vu-2(i25iZ0_1B@o4Ws1T3f3f`Nof%uFXLQll} zhY8ZS^&o|@K{KQT&@_UL(#jH=1C4{E$aNct+|VIcsGz18lO%W;S(CS_8Jdc?#o~hr zPN1hBx;!DViOE#{$}>xIoB!c5cPIl+5D4>hMbm&j_@R=ixk~R$iQfE( z$IG;dV3RC8lZhdK=CG4Z7z3(l1$v^41d0hRZI86P4ikA2djPe?3(#N{BW_c*x4D)z zQB4(L2oM3U*tm?4sJVog0^a})B~ZaG{VU~g1y`sqc5*+#N{*cHi3u3KfHTg_I*D0R zHOpX6cq;`>BY^nh1h{dEQm~9VBa85AFZ?i02nh>YFt^FLHxarx(BM7I;IN7)h{uwh zTIig3@r{;4uh)4h{{S-*3=+5_oRO$_L(I4gVLZ;zX%of>%}?72eWk&OQ59{}*JMME zyMzd`&=2HH3VTS!1AEqbF+wDyn;N;!%-DnqF^Ksnoq(;8s!_Pi(3zT$0#U35(U2W` zpu@MBiTCqZSR;dUT~|4ojeQHR_0zx)bXf_JR$(>UG0Gvzkc*9gsO@_nd5a42=m>&< zR~@pzJ1dVYB@qxJE!U`rx(%iddb&;osSSEa>p7_;7&3dH3x^q1ORLME&;kNbvHwU2 zO@j@%z{Q7Y2USdhz#G&cy^QT}Jasud?UD{uYdX*qIGWQqPMAlNs0DW509-j*oP4c_ zOfo5IGd~^6|6p-DDR8|(&CFY*ifxey$(=KyX~DN$NP;MljwsITxJQoQT+g);7g<2g z{a8ah-b~#D&sC`;fwbi^s2oBF8zDg|%v0A`h~~4Ntq_~Gm5s1zwD+}z9MKt#pu)_O z2+~m7uzA1tS+BWm2gab)A^WnVV?0YEUYeLa4l>HKrQrMllg&spTjX>%Y|0Hn@C=S^9usPKr5IsD`Gr^G15R4^QfF!6gC(KNLpt!2sf+QA3UnLJ{t&oyf zmf4`7pr!njt@NcVYKqs>gnyAlGZhf)CI*>VLZYuKALy;etTN;iP(s6^w|K4b_L8&IvtIE5aHI=cmUc7+_Vv(lkMr}$fS3DWDEGRAwDx*%#5 z&NQ!C4LXFiZ4yyl2J3TE8&-~G!orr!w6lCePq!(!W;5XsZUwbwzb)7sy1u(4`PO=I zSIkTZR(9fGS=I`oYrWCKgn)?py1A%WKf$>hn0R6n49 z@Q^iHMv|RPLc9vv6bf3mfeKBa2h&MAPwtY8t)RatY|L;6)@X0r%Z zi2~msOey%!v=QyFR_~WeA+OW1O?gBsaSE%UiYzr|{`tB@VJr)5x=!9(Caanah>roU zm%-Jn36>5NQ;@?zU5XAePxOts7;uWvF3~++^(_xDoe>I0L`gui>myysdyV}q5d>zn z_svYlLbXvaj3`i*)s@|;u!{Iz3DxbxukMlFr9=eBnR8T;Dl<>mfZPEWl@{b&?fSpY zrHcLCG2gJ?ocTH;-<0OGg*$@^Dzu92{nZ3}$i}Ugt57==p+W_BUw%d=|Ij^%##%y6 z?G*HYjfb2$rB;cA7_xeJ@QG^P;xutc%!xfq0%gSSf>`fC@1k)N<$4_25C*wp1ZB`6 z03`Up5DT^g1*6@V;6u9fNRT zc!}C%z96w}cQ*2zgzFOZQ2yNWQF3jqEC6gmvYB zWxhU=|I;{tdYedN+B-?^IH~M?HxJ0TujNiLgO~y>Nc7$oY}x8P7#o6oj?kab1y*N}pm#+TyL%K~Lk6ysKeSdGh|#MS8P z)>PHD7j(~o33hPZ+@Ojl5ep&44$Y{u?G$Bn<9c>=4kjJ>|J{cn^3>EadD;TS31!Pn zv7pQ3*>qyQ37L(DrSs=M&}~yonsA%G9*#xEiP|aH2?7XGN(c}b#i~|2Tdi76kwWkx z#E23n5**X6)j*0GH)LxP?@$Rtj55DJezMLWQI@wIVfzU=&g+FQVjh zlb}Ic2}_YtQgX|vdMaC$arjUQ&7HPLf!t`7qNaWXCS2_bkyS#et;i6NplM`D0-0E~ zsv44%(5Y@ard;Wk09b`_xlBm%65-09AptL)%9WrL|4D4^M$}Z#RvWL9Cqqm?`7-9r znm2Rq?D;e3(4r%jR6rmCM2AtNM1d%wb?dS%CAMrC#WcZ^s0l=Q4Kc#%+M@}!BCsXN zZq24G=dS%at!xPnXA?}$n}BWIIG<04PQa*?@X#&4W*(h@dEVlkBF^p{ec9gGV@H(l zyDVbq`tgGn$!>xYs9C4keGl~}QE#oWx1D?1sh1#j(4i(>gzz<|Uq;Zqwq8k=4X9ZZ zNtMChXZER9Aa$oDXdZdCNu*zP5AEj=8TAmbi2_N$xL-*<3TK~%_=Oi03JQrIn^!I< zqejrN=MtO-(wQ4}SMqt)nx1XZPAy6-;Mtj~p}D7Ifwq>WRb~3wCq$3d_n9UHkVPqH zbN1Mkq+d=d5lCYg<(EV56t&TGmrCj>L4J*5Pbq(jHfNQ&>bfhhz50qMW|H<=+;P87 z_Mt||4v1QM4cu6Sd@{;U_Iq-2{~t!tND~ne1%oNRBvu7f) z0wB;)wrq3Hn(^Fg6l08AWznA{w*@=3JmyYKpAtkKojQAE*%+hHn=;vDn|(IgoQ;_> zuE2WLcH07P(Mq9*#;xn!X%paB#hnVg8fjDJtvBI?8-94es1b>{Roo7jbkZP-m$#e)~y42Cy?6b3hZ#{5wU249Wq`7Zd zJD;A{4!P__YQ8LfOM4Z%L^XHW?3tJ8e6+HjQ9nC=T-!RD@Kib-&t_4?b-s(myZ>&?<0i)TsQI!1FP%fdrF4 z5-1`(bWLb=`ukmGv^SCNX8kyjf-;7w9WudXbg}Jt)T5fiMMNt1D56#1^EW1x@S+I9g~) z1OrMtd6G~-;gQ4^K#I}r4M_q465<%6pan@tC!&O$jK~U-&s;`SI#W=B99v1J>Q!eo z2fCflRwIdvif4q9c^LsVpi$YqW~B{jh#6fuJo!XKq^1eo*c2E^c?B_+1d&8TCTi08 zrAAyMDx%^jD$$W<|B;V149^xc0afHoOETt(f=XEfRw=j@p?*Ez%Uq!^%0%H{tr&$Z zI7SeVuq3KZLafJJ!4irLsuoM~j74lQiiJRPe+MH&G$&J>nj{vNqd^KO-scp=vVsgM zAyY0{VGnS2Wp43m#YGw_8ZEG56AOA-I|Onrjh@1c;1j)Kv>sY#_YeLSpc;7X_q@ffcqG+DZ9D zErf6(BjzdE5P`=VP1vFy^(6o)2pKt2Y;CC;NfLwI;fkLqQFa6RU=(1&4v=W=kvK_8 zE2?!I2zqrl|56|pT@8sIDb#{pr7%pMeps~hfo)tCPuoOax( z753k&i9N02r$DXrXFeB}0L6iyNcY@7xFJCckJ;>4 zkh$lL6bH1IVTGzVp^%$6%AbN3Xsf7Ji#78(o0_o4SO^8%05;OTv#BOW*kO;k<d)BcW|KDt zje@F0lomjQVo(K5OhL4HMOIYYWPl#9k%I9-L;%WOXc?fSl|?4d!v5Lc|Aj{uxn2?k zpkK_FM7bdLVF#+P;8S4V07la&WZQ}PMCSFN`Pf^+xR+(Pk%SnC&hgwDQCEMV|HgOO zgHVLq!f63H*n$(*L%8M0cQKd~+5@@dh{#YO7`B4b(N&1tm&LdQN<0P^juiPV9Zp3M z#eGKm$u_6_=!4^CoL5Rc_+M&MLgD(stgMFF!T*i`(NLJC#ygWscSfQrb!z~b5 z1StjqfMF$_6mU=tLtsdH(IGbih-J{-eTAYu7)JuE(Ji_b6%qg^-~>%<|6zzZ9g8_( zAh`n-x&mL(RRvw14-TZ>yxG^8&_f_WQjp#z*h4#*3PkurO~6H@AqFc*Bq_j!E38T+ z$QA*Vf(H6Rq?JTQ_LfdeMLg}|`LV|qYyvCTSKq7_t@OoT99llH!eelPPTT?~^aZs| zk)bUgXq-hoj086-1Q)CzJNQFu!G$f9K}Jvws)1xY{zO$wq%GKjrM=M?d6S+QkVfE@ z0xASv)WSx-9RVnXPQ2DQZGupQ7;fobRfLF3sswap*kY&zMTUe!vVu-X7C2?sVpN3| zxFnHf8?dSJyc|CSSGq)L<`c1XfW zCIm%}SR{}FKPJRM2v!6UC0sh;tAU<9AVf@*!Z>LaLH6e903kyyPviJoODbVTOdeur z%z6>cCQujlx#hnR-#QrD1V|KwnN&Nj2S~I5IAz(;EF*Bd1Wp*0o2q@Z9Y{g^{@eC+H_}m?%yb zMFd!=jfDqMJ;hnD!zdMDW_ZUWJ&j`u7*Giq-5FX-Ql1hF|4MU=fkKhV3L1os5Cv82 zi+)N+QeYi&oCQI&=tXP+aLi#X*aM3qV!}AZE7EAVeOSDd!4}j=WDKcq#%b!j8NO|X zMT`V>2^UTr3@ZfO3LZod=IN<4pe-a!p=~AIVFY4m!b~6^swvfiY&)jLx_SuB;P~aDX9$#t=t4vxCQC?MMIK= zQpU^~M#S78Op_$n1O|?2XkPTFN!S3<_IjZ!}*!V!9?yRFzG`C|H#<}k!66XvlvyTXbP|e5&^iuFY?Be znIj@aEbJN%odR0=h)P8i~1gwQIN<~ptg^l<^LJV)A5KvdEk)o=r8!vmV608B7)vC9T2{}S~6i7zLr|h`9uB^@1X^q_bn!`iC(Qb%>qNmt=31o z`2+EKOet_hqGrgXfFpE$(!^-WV^)fu+)Wa+>zZ{0XG*3*lmT<>E(xY^{&nv=GKZ-B z1g>}t#X^Kd_(N7EL_O5mjw)n5Y+&pj|MBRA9dHsZGeW1Kq2xduNs=5)AdP|`X~Ak7 zrXZ1l75f$eWWjWjLV5`eS6nHXC_yYX77MLnJ%J95l4n}5Sj;42kz8oD1yZp(MPF40 z%F(A$@g|%G5z;Dw6ez6}@Mj?_NrM`i8=5R`93dg2=9Y~C9(RUyL@4;Cl0+~VR0>%; zwpbZ(!WQT8-n1=qT&ZAWso;`MSG7^t7 z|PVCZiHeLH^l(7F@>P7Mw&Tc1*%r(Li7cxszgyhP*q4^N4i28U=g(vM=h{Hc&vsm ziN>!w)<)oK3d$Bc>rymPjd6^VC?J?yNC6Ts>8Pco_7T|<90~{WDm{~vwK}Oxb0FO$ zj6MyeR-7x%w5z4^CG^TPo~T6(Gc>K7o;dOAs7*EOdCW+`-og09Lx0~uvotxcb-@53 zk6II*OkO0qqb+PggNlR|HbfvXHQTlW8B9T8k^x~V)PI^Dk!dK1{j5jc*cwA8@8QHy zfu4;u#8s)3vv#3LT&?Mi{{l#KA_++VACm86AZ>UU@_f!Cbk^%h1SNJLmT{P#LbU@m ztCwH9%U(Ok5n%@>`toGRZAV5KM)lB--UwV3Yk<(GFBYaNP62AH23@p6yIdkvAjI?0 zOFQOjM1hoDBL|J%i0f_l_*qT3wd5rVqzA2{GX}|KtOkR%MT3^7W{WIe*$k4b?MYci zENa$w=X7({_9fzkme%WkQVdFMiFF4s4WPQR<;FQEdRwmnVg~pI&d*5=q zJ(HoOX-BT(N3x<~orNv90)vGG$t;$vl|p2=#V8nrtesb}u5lDt%{p?0Q{;q7d?Z|K z0;hR~LyT{UoJFdN|6Ka6?+R{sWGDn#n1;c|3qi2#Ph7Z7+N2dxidU+2vQgJMvgvN> z_Ch>_m5T(2w}bw*2PtIPV-NtFPDiE;MNu8FkAx# z0Z62A{5Wr*BZ3_SC$L8Zj9{uF2u{X}2G&AzmW5;|R-99cB&21uS|UWi#Eu(Ui-km5 z#!FI$FN3Fg#4NGYoCPcB28}X=X^4!~^kP*g4qT|AF9PgzZsQ~Bi*Dfc6VgPd_Ect} zTBU#CFzTard|^8*32>6BW#c0Gn)`?XUz4H!BhWu9XlK6?XcJ!FEe9&9Rj&6Icc^8cah3(O#{xb6M^Q?dbmCCqI+W>4O7MpaY#5P11d10SY8lmPlY)u_5?~bBFr>(f7EPv9`7sKC zTBAauTshO>#E3E-;#^pgrbC_=qqHKhAxTf85gY0}x|He1rZ=UCsaIyoQ>!$UUe&sl z|7%yTU%`eIJC-b0DXrRVNm%x2lrdYXvX#4%l~4jw=H@lZ%AORPdI1Mssi_}<34#$P zR=k*TW5;uULzhQ~rDyA&O1SM{Sa1xKMOrl%!rN{0n*P-?M31BP9(oHq!)d z>yfGax%OtKH$`IZJ)C%P%2RPX~wO5UV|1^wCc`H4`#LIIWU1 zraT==V$M5PvM)wTx5V?PA$`)6QBFsbQ-UZAHOV4DDLVBd31{QY)fatp&(j-Kw6x7z zan04FD9G4k3QV2TwM&!m>Ml&Nj$J4TQnpA_Pl%G`E+uCfYl&H4^`e$IE#?%~+iw-r zsiB4>Gbkw$&;^wva-zAQ=T$>7~gVwG~&kxKm?@l8{ciqKlQ5x`@z> zR0{3D&N?wB2b$E`uZza|BCD~5mL{vi`x;7&##KlXdq~;fSum3*+G@Wty(?-LwS}lY zw8KvFZ>$H}G76Q+FiJWpqG0^X)hvG~+OMT(+bG1*ZamphYPptNrcqDbx}PZ;h#jI4 znn{as6e?&TCB&tzMbfGs#TI*hr%J}$4cDEPTs&p5G}G zI7W7CA!UNK#C)6fR#>U0jV&H6(?;{#HC2i+>UpV_cDMllK`Cmnr+x{PK-GAeJH@X} z{O)(>OBCtaQ3iJqOuT&RXiu7n7pqZ*}DjZ?xT=R^y)B}@gGEN zr;vKk?KdIO0y%8Kitq78CMQ(g4RNTKv$R4jG>Jq(TA{M9jKUu6AjL+w5EsZaBno(G zhb^Aij#dE9A=AOj7B)c&QrH4&o@<3YTA>7+H6;ps38F7b5jA3QCldA`gWhH$g;Dr} z6=P_HEt>VVcKCw}hbfCjwCD>SVv7{*sKpdq;fnf2ivW+q|C{|%@#d(2H)CfNcjx<{uRu9B6FaZtGq;xMJCtd8s(-l|X*D_m+$3X-VX z#B85$;MNwU1os1qA!xGx)gLr}<0XU()2tZF&GI`S$p4hBzp~PPqY~@Q~ z`W2@^4U)NhNEyL63N#*!PMzy1raBh|n2~Y|uT!E#|B@h7RYvNkKc!CD1kyRFwybPR zB^S&l)j0x4q838Y&Hx{%oU-{8N)kW<0W`tIqqb+PZELGm`88G5G>!m2%&9*tnIw_i zEpM8W4RthOk2jYY3~=Es z%5d5SY+UF|V3DW*V*Hl&!r4^$sUEFwqjwnMv( zq$0xN)({9wLBjvE$mF!sT?zK9!`cDmVM5Z&@($!{Q7~C!ryxcGkbxaVYlV+1(zhpi zZ_P9eD2e}9kNVjVx{Y@9Xj{R<>Lw>5MfJxriMT>eV22UGYi!}n%D{FDq$na3asAn@0uC=LjPX;X(8f1f#U^r`pDpf43b>*a zivH-UvPOZ*C)UFsV8ly$Lpkhf=5edS{P%6sLb-!&mut7;-Hzhk?Ywbk*?T;&{S9kQV5#>9T`ZlMgC_f>J8PT z=%70yZHw)yjLXd|!-TcmK`BC={{R$(+E3^QzEGkj?TvQ)k7?=$<*DS-Vu^efhrNLta-3X4WD%7~H}N6UYhcO&K9_Waj7z zP`~Yp;(~ILS>0@SP=&NpCF*(HRO-$Sjz~a=&D+8#$YAbvbI+MiPi0b3ZoaKwPlkK*E^v)#s^^JH;m;iGvsQ@AcBl*}g@`JQ3pQ&ZB!K{cXA8(6 z(hP&EylM&tXpj^_3s}J)|BUE?Y$0+8AQPO)1)a^1reFe8hFO&0;!5FHgeI*t2|TFD zATW!Unyc>kq6QaYl(>SgF3Bo_q8?a53MQa(EU$lx$gZIpC_1iOk0 zpk#6?MlxyS3G0Oe52BSv9`sACN1a3M5JaIQ`X z#AyotrCc^4JNUv4|EfX~x-6MC;a@1IdnRBC3QP6~0De5E!rEaRBcc{wXS+0^eBMxV z%uY8F;27_u{t8BgR_uRL@h(t<9g+x9EJZYikt!x4DD($+!oz%wrt3NgFRJEsI--%X z3Hd$>92;rL(5K1T@CGA@L^dNlr0A1Ys1+ul6y}OL95QwqX^RN$7oljW9>RA}OA9*a zA|(pmBw!2BaXYe2leo-N@})*lt$d)yW)k2m3i4hGXB3qZSH=ihA}tiR;)_^eEtsRz zrf3T!A>SBiA-2P|sI9AX11oDw&$1yHJ9wM+l?xRFYNz|Tp6jcC;7Aw;1c@`^f$ zD2cv~7!{(jMDi{&ffn#mAEPMSe1Qt)QsLC7D}IXCjHW;n@TxUW&la?!AU2^Cu4m6Gj3zpBps*#GkdUXAaywfocd`tE zVhKh1#3Z}N%!1DsfG0hnh$7RA9X2W?;O7?96L^GT+8m0U_CzSIsgd}C0|^LtLJD^X zV*Vb*gk$}rXpI}suzEbJf(N_S|H@Ioc}*vV0TLkd!=GD1pv_KzOTDQ1?! zCc2IE|9(d|5CSD|W1KJpeo6<6@+Wd2v>c%a8;R4?m<8e$gW4cbCklK>X9t1GZbnNXh)DDjbqkVPiIL80F`>>Hb+BjXksFmaBo=1ig1f^j*p8p&NBOfS-7Jm2%z8o!Qbc-j8thf z|6L(+I!&JLVifuz4FPKnrz0tE3UZp_FUrUr3aJ!830k5c4>j&h+>$K)&Diqr4I!wL z2%{BzQoS~c7gLFIb}@R)ZpvI{CmILWY$Y5Im1BGDPWWPfFeRB7f+01~ zdf4(`PA_}z#KQb5WC9Jn=7*vP%zEH)QvStd+OuKqu`BK|eeh*wmR1Rp$;WUfUbK{? zp!Cm}>2^YbUwsxw@ki0tWk46LBBDSlcxY)`wkCYJGEbQnh^;uZ>ky)+{~)L% zlz=50uOT1EP8=vEQ_4!{N`Wmef)*oXAzo*NVl!ev z*IR<3Ot~TwT!Ib022-f%Fw@3UGtt3HZo7V~6x-K#vQ!7S=GRZ8x zl#n{KV=Ys6t76boKkP07D>Pq_G^v#x@TO?^>=AkJGh+~XgkEw(+c%q7=8v?9{Hf9<(APfe%9ogcl4Y+7r=0B-NTv*bM08zNmZHl3>>H zdPMIz+--#*D1mebHAV>sZH#-^PjOhWAmA;=#0-Y07#uZ%3{dHcX_RQVhhgSbduk^n z=W;7XR4cR~ioVt!P_~gYL5uv8Q?=2KLunJf$4+`SI(pF~Y`7qv2#oNvN!fV(X5}b~ zRBpM7>NcT{(US}#z#6x1xXOSNzDF{EO-dP$PJWT}tc?1;Cjz3+%J6tJwo%cHvU`M< zB5HK_wpdj>F{L*0LLG40TsW9T7X&}&B2MYsTA>VXiXcuCSv`>z|E4mI(Mr|gZ9BX# z+AQ~|AQ0Y?7a~aKj-E1Scg+^ka3X#PFDJ3W?kL*YQD};)tAH&oI{4taXKT8Rn;UjC zez6|F2uSP(Zy*yi7D9{QS&AHtaw->_lX;-Q+2i^W;1=SXU2un^jU!s&a$i#4@Q5oi zs-3L@m6+u^E4wZF6!bf@%1AY!V=*v(xUm~;F;I9t9)u9cmL3%k%9`VsM5R* zwS+mSbESq%(H2G+dG5k5I7cazx?^L+c_I%bni_C^hGgqZc{-MJNHnXRS~aX1JgQJp zxVkb*Uy6X!Xvnvqc!q#m4u3v`bNguuBA!9Zq}~3qpqQNsxL~dJ9c?+L~`p6hIX)jAmuk4 zR;W>XIGR#(h&eA%_$Xf6EUfReMIyGJVl`|#uK3l2%_4jwgAy+y-#*NNrYK7Q<24!E zv;4}F^olX~DUHZ9wWYgFD5w@>csx7mn3{VMgGN?pm}9)#Q#>P7iix~QlteScS%~Lh zO8YMc4|DxlA?~sAI4XShlk<>P!n6a17?eaUV*iZpJ>KI^DZ+v38&=-LP-;XK&%3#A zsczmRy`x)ZR7G3`4=VAo!8LrkIh;HW1cPte!Iyh)|E8vROdL%9%2!i-D~u&cO8mm2 z12s_W%EI-Z?@eoV702lXOMHjp6atJ?TAy)z2#=!SzLfyjK*Z6FYli%$hV;eT?O~^d z$?rl7MuWCHJj>4mGer5i#W!$NJTKJyI9|+|C!8rf)45S&>fjB&0VtAL#x-?{D`14a z7sEjaT+8+RKQK7Y_1ws3A`#YuVaj4+LI^pa*UlMz)Ja`#Wt&K_yu(u+wqs+}Oa0YXiKu@BC4d0dX~NRCljv-H z*Li&=R=d}MJ=leP*k^c9Hl(yM!iJCrMu29;|LL^YS*TP*T-1#;C4OBlApJWGh1#oR zdWikomnO;;0s*|dNfx8UC&bxleBF^l!pCECz&+mOoiU(^(~r7GI;z1Rr4)5N$KORy zq+L9H_1<#?&N;nA4}9Jge&HQWs1^bN2%y&I!XZ+s$z@at%8WIWwn-~ zYfgOKvE_0WVhogtkCgf#B9(vKcEj;J%&8;!TCqmf`_0+IWjsf~ zD|=3xy`mZ^pzh1pS|CQ$2=SZ12sSh(T((hsn)=IX0>bOwcT8%vL zlG{lTYqIeE@gZLnL*isBarKA0t8HV{{8|N9fBo zf9nHH^Cm21OW$o2X(EKadE=GNum)@@vuc>X ztpY6in}|9*Y^v&Man{$JpI=u60vEkkwU|F~9&C%S*RirDZInOz5vMYv1A)NnJE&a zh@sbtfUS0|Al4%zCE>z|1hynd{}O?~%P|lcO5~`7K$0!&G7{h-P$q#WQMRzsD1`ul z2vS&yWJmxdfu{9X+9Z&(CB&AbGM17swJTIILZ_~xN2XORhV3R~l`@Ke&5We5YUybY zr357}mHPb)II!TsgbN!!j5x94#f%#}ehfLXPl(?!MLqjb#>KBiWE)#2-LRa&K2w}7B`XV+KM<}gQUois!i53JJMv1 zw&FsNKu1y#uV?jJwK;MwN;Ms~)vC-UsY;`8_f3FREn97pDBZG&)ln`J{9f$m&TA#v z!v$DUY*GtJqm-0fe@SVv|A{RUZZbs@riF%Kh8k|jVTT@m2x5pLj!0sOCI&`IJ!LFq zkwG#M)YW}ksJN70C>krh4DmSkr~re3#~Y2jWtVhR-b+$O-~tF z?Kn{s$)1#wLP~w79ZZE1(1yTXe+_onVvkLB*@_uC*k}@V$4Zobp~gz1fYntNTnBAY zYizh;Ic>G=0lRG!zCH)sYsy8)kiG5Lv#SzVs>%s*QtVvbZ}zm*pI@8QQ;LIuk>iiN z3j?MF0sWM#|I~k?tJ{i!7+n_yS@t}fRH<5gNt#jxo6URgzW)w<@WMkDv|ll$Xq(Ae zxDD@X{SnMCDMr?OIRQJa*z?8{DUbx2Qhe+ZOj+wW26O!ld608tIJ8Nk4~?XkpW3y# zTcjZWrLmDQp-mM~#n=3{sC-8Xf$CFCc9fgqjbtsa!HWK(V7F>`Cd zQZt2z|IJT>Y;2<&-w4Mz5@vTosf*Ke5*RI5$yG)AizaGuk|{u_Bss%a8KgjyiF_|N z-jl+sPNuUiDbJC}nSv4uWs8e{EjW=Ut$-|z#afCc$c2+7 zPDKllQV~a@04N$M1%V60SSwb>k?x64DI>`l#N>#~WGZu+%;eo@))<)f*@+a``HQJq z(FRh~qBc^PK&?0-fox473h2=ZtIqSW=C}zc$8kkQ4cBORE>t8N3x}*?gVGIonV@K!L(n-Oi z?J3<*CVQbMQ1)0zAc__Q7om6d%CK@Rt!Yn-S~fy&FhEmkVqyY701n2auQd!?Nn04& z`lYpo!DWpebKA0L!eo0%tBcn9+tey|xy)@Yz|iJg$|MDSTfou^l|s4bYInQb|LyLG z*!nZq0*1Gafu2cMs$1C34}iKY+F&pV@OzQNOWp4 z6};T$v7dqradr9{yh45<((tO@)#~Q=$}n+2bFBNB9dpRqpvPVFyLvY#p+9R&$pP(^ z?&of{AsY)9ckLhR-MxJOY#a~=cBQ>I^{WlpI`jBh(RX$cG!^n?d|2?~_oVNkry<)9 z7au-hh%Unk%oQu2bPkXtUq*9>?h<--4$%`|#c71@J+^&&xs$IFZ#KSAfA1WVO&$=8 z3O!(X+BKn*e4SYvddPz@7%(Hg$@M(mdtV}9GFT?+rr%_%FPyP;DWWr{GU3%(4D72M7gMf1c0h98 z*F^rSx0J0Z*O?k@JzK`a+p<&wvUOIvZoh2k|0vZ8^WUEe;3)2V8a7(U+MQq|+tC}E zoqBePrLNE*W+^TB@1j8GURzWhVif&PVj4W@_e%e#4!7iOHdTzQIpgy1k0?^IbuHQP z)UKIRi?3l^5GixL_zCpqYJEW)^MA>r)<$;stL1O`BPt%OJu0~BqpGj-pZW_x`<+z; z?bNeJWXQk2eqcL7@-C=Bw>nqJ%TvwUN*1&zPaFuKiIL6+DJ)w%nAQy2S9YsL zfjsu2#iOKc$42Txt_G;z`XNh>#9?qUXFup;K#_Zq>|BhDc8S&^9jSgLaN4Z%%#kvz z43XY1(Nav)z5~h2VfrZm>ANJ=4;TBp1Fh{IB@tueE0uAilXk6%<9HlVrgT10m((+Cb8PPr@msmmdN)e(^ogK_?|BKUBbNjLyAWx&KrS}TML zgpdr;3~~rxT`yOP)!#+8Ur2lL$!rK?Qq>jJ9eZuZL$*aMG4gw+~k!iu2eI(^RWC6 z0kXGqN)k84A95rh*4g+qMKU!mJBDmDA`m)nO&F5X-{&bXT!5=8;>EFyYBRTaXQIKO zq2D6qrQ!R1w20;~M7M?6(Ecg@0DliW+8`=jhLK(Rq|`OfgA*0QInn?QDWh$a8XraX-!(lD zKW=5VPrs`puk2eCu=4tK&#@2@4)1y=>!^(R2PB;01en#|($25ftw{PHexb(<;$BeH zb>r9u2}%A$*B}1&B6Ml^ww`|AVkVMq8EnWen;mqb-bneg?uPj#^sDcbY2#lmuZNRH zZ0;r;jV5(U^Tz}zxVDL4s%c`lfry})Iko|&(M;yrOp(w`Roe`RYN9!9rYC4&h?7iuceoR+7jtu!rG|9)CTOIE#w zwIPfGBG{^uZ(FrOI0Xn462u(ean((XSVVfaqQ7D+BsUxe4Qh-b=@ic$@J`$8dpPx) zc*r82#zLs*G^kwiUznOXveYCyxPB-u2?X<-d%sao%WW@=GglzDtl)Yvbj!C;88q=G z$Q}T5o~(}#`H-f;B)$;XJ|9>RPKT?|_PT;nL5k`^fH$+H3)&IjE*NB|)R|t}O(zJY zz^0v{z&=5d(4>-XWr)z(_7u4Uba6kMsU&@6-SaxFBU!+2gjt}kAL1xxF$L)DZtdy+ z1Ft^}6}GLfb^Z9>np!)8_3;ls-HPN~HEEY1V#Z8Klf7@#ENRdzDbJN^UXT~kBz0`2 ztk3ufsRwKK?ehrv_~(?;KMlw?1X&XX&3a=5pIZw`-3R`hqGr*fDK9QN>j%xs!`WN= z-7on<=MjX7@Kj@A(3lb2_i4wUTBIB{(M37fsN%F=U$28kzGYND|^j#Fw zkIs|D5>U_{(o$XVeR)fR2YYhCG9p?xTA)W^H^3#sr0<>q>_}r1(9c*NVpfNO98vXG z-m<{Cs5O>KwI8T3YgLU1n2LD8SKN4*Z|sDWrstrDX;%8)0z@Yc2`mBrc1GKaBi0e` zTzMw5n?<^vSo8D=+_0Ft1h7lzFf@6-5~K`@>g!KrD0xPYDTsdY(|x1i_(ALZq3@oi z&(B4ro}s&3U*?H3i5nKZT`E>Zv$$=qR)(*F3X{%J<)_lR(U3jv|Lh|)Zsjm~s z1e(F;b0Y3_hTF{QeQ6Sn(RGsY89jbbI(c$NClhiw>)qHa`P%GVrO=pPFR>=u3qa+b z?VS2Laa1H37z(mfphYSqz_4gGhj^Z|ysEF6rs1XJ|0X_dL)|+_sy#poOf@JQg!J{p z^kLxb9&A0m0>5+#$4=-ctEY=4G3aX=dX?hiU26KTT)s@$#+$e%Ld@-{WZ97nD_0b> zT+{WfF?Dm?h70hu&+{uinC!h!?w{#ou`PP}MZn@1ORXzXqnl{Oh`6FPmy7u*YcY9N zEv-|%1fqC)+a|#>gOxyc!GLLlRgt;n>ttqYUa1VVU0+2#YuGve{L8mS({&ZbL~C@@ z#O^~NB|#AF4>FR!6iL4HXSyUlE#e-w&rOGU8HVFN3~{?JWRS2?J%;ru1X*N4!}1p) zFjKA9)+9PI5+w2hYxx^SbZhBqn!m;2UI( zY6b@n{|D&w&tlY%X0OTl#ttlIEz^aX^NRRH(80Az%+i4r=du^nn=BhGKqxS)Sg*aG zp4RT^=>WOy9LIMtOsd%`L|&KUpIiu&3xUhh*h1IZYgnnCkCY!5RXa|1BX8K3Dej(T z?!WTlw0i8Hv_^fdX;JPBMmF&`bemTv^jNDA_r_ImNUY_}PSG1`+=&>%0tWRf=!+pC z2+qp{7Sfm&ZtL!vOh)WLao+ZbnYumJ_*a7-^ITBxK^c4m5)Ox@=B#L``IPQCxO(0u zQQ8)f({Uull&B~dSMoLsZnr#9U}A9>#1&u@AQpxAJ%a>IQ$c-(*@RT8ZCC7|N3Y3_ zxqT5IgmD|wbC-pW`u`pVOd-tVi0k{G;h^hGm_I5s2laEci*h4&L3POu-%8(izWW_Y zz|02}Z8UpaeXJ)oSud+5A`L0AW}>bLThfHL4N<;7JqfI>uV)KC-%U0#Ygc_;6FuLW zIbYqGNuMgr!q(|O@#VCJ`>WeQnD8!1ye&!Zv-2CGvf%RCW8C<<(db>)^K5K#6$Rt` zrCj}&zFS{T$BjmkBTPzZn8pJv-VB^?5`X7TusQl7_3QTHul6O#^Aa!RGM)PbOyBis z=91*8>VL#nq}wW3I#(1aS5%ExG_zN9->;}xI_aNYTMRWmJiBJcaE2vZbI)G$rcjYT z6=f`J9SJxS*>0ddzm^E2WNo~0&}iS1q~iM2TK(suPSWAOp3B;78=2W3cQcG+%Ree6 z_V%7Jb%|nr)Zn%2N;#U&S_wU+ik!OD+fMh&dCFEu>2(xlC)=$tWnDJak#nVF(^w=c z;Yftw*`!zcW8l<~v+RU3 zG?xJ#$zo9pZ=x1O8pk@+2D5T6yDT;lOZt7-HrYJd6+~l8uFT32aNaXF zZ*_*4ESUyIRaiEYeFm=)4L%EH6{lDFa6^Z%or@UXa}@0KeT;^2gBkBW{^QA2jJaZ? ze?HUU*2YiIoq-qa>pHN7WkHrmG=Qucm%ZZiyw`H((Bm zqdB(65*y#!S#6_1rNWsd_P;4P4Y?bC@*z+6PBQnLGlJErk{DCekR@H2O6nY7?X#EK zav8$%aRfhE9<#i>(&?vCP;MGE0$#z;Ss5*AmqRH$f_)o;2Vr#&6>8VED-~MbC2!Ry zA<>-t0JpVhETn1kSaz_Rw`07PDWfuA_+(%vn{3e)4{5f(Ya;=`Z9P;A@p#L`ZKh_e zLHe0ZmnohxqpdQDlWC6NvtZK0p&CwL>qPYyuCF}=gdfM${sy1yvY3M>^tvTrsV-h; zMuDcDk>Hdud@4>2oQWltX221z=SBsZ1pZ*MB0#x(%gn69cN$YOdx-GW$I!dB-x`_w z{^xIO5%Li|T~^?VC(HbzIuU`&%ws(NqAwJ}IOpV^OgS(_NoVJdvX`-q!k+b91`gXeMZfz0w#x7(L6R`^8EuAdOeae)| z#~a$?jYKmn>5-evEOE+dBnhBBPQ~U;P4s*n<`gMj`7LOO$yC%?nJvc&4< zGs|}Z5%07k2<)tI=zhu3u*Q>7<}2~42?(snl#{*BAGD~u%`9$@AhqkC>0wDLCy6{^ zevxO^XMS5b?3YBSr9PfpQO?R~u1o-Q8uC#0t+{fud83H1!N67&hxII2#PW$LTcqL`MNkR2`jatldJ^R8W2uDUxrRIT&+NF5hQk`4O0Q*dzN~_bU_E~9j7{!GVp;fheB2fsU(M@{e!)JAV|}I# zV}ND^seMhn5yUpXgmqW2E@)i;b5+G;_@PCeCRS-3hBdWM*v{O3XQPmhm1D*{Mk{3g zvt5T$@m3K#zh17BvSMWV1Oiu#3jANjm%+C&@JT+#t2i?H1?9L-R>+67NR(vo+^F)7 zU?~cqk2Tr3#y=tod!9@u)>Qp8Tfa(?)kQC9Jwu*rz{4wKl`H3nMBBub6h1jObRqz9 zb=P?h_sKSLDdySA;`P$((YzP*lliMQ%xt#WZ`Z_y0DQY<+R{vKMPvgxlW=+Zl>peZ zlFgdt9EzqQo9y!Hknvnq7Ssv-=&0ZXwu_MBdRv@WO7Qc~4o0oHN#Sa%1E4WAPDU|5 z__HzP{6o8ube*@>)hz}RxLJFQ&o|*UeQm6mjV4mz{d8^O1cQ_lyEMq0wbrx^d@1Qy zHB)%T_=b}$8PZFg@j@@om}jvosmQ?eyG>lVpbu4mfxY>QgyfnX(z0OMM9n-@WTN;O z1>awSuKaS(SLY#?x!xC#BybEVflqTFOb**rZd{%Q#bTUktrnd=$Z>Jhz}z0;{f`6m ziEW|}37MCugyWNo7F`2f@`P>a{Oc_=!L>WwQ?$rT?cK^G)bElzS_*s-k7gP-hdgeC}wrvGKJ-<8`jO*in~e85&>TpaZ_&$Lm&5?RXn%a*)&{VDb3a>iECX@uR!6H&6|5Hv(*v7LpCm9d)xl%EN^KXiMac0XNvNruX zph<)7+|@B;KVgT;fu;K)cKrlp{g}mmtb=}V zVm}dZfEXcvAw*|i{N6@GKE1Zk!d2eEM?ND;o;*~ZI&pxyK%VBaJniNH*_k}q!+^`p z00U4VlUsobp}^cL&myhBWH-ndI>@p#z-lnaR;Iw=H^^}?z?C`3yEMq%Hpo+;!1pjH zz%xKI-;+}X&|nB>b;5t1D{)@h_pSAr#OFTAL`BKZire`^GHr@7q0gkxhU9?5Qar=5 zbI{SWBzeX{y+p zt2nr+IEJb?C8{_VsJPUrxGG6&_NusVs(75Kcz%|)dQkDERrTRf^>vfv5?A#%AG4?i z1ca&vC91wGPz|nA4e3=4{XF(rV=S(S{?&tOIH6hut=e`IAW~Yb4FCVKgMnE8H)R@u zWAp!&GKD--$Yl86DN}vh$auKxY+l%dw zq!=t&3+eltuZyvkmhWYPf1Yeig~`f3`}^naW@y{8Q1&(E_bvNQ7!I!5P6RF+{!S!F zFs>*HBFeEFMXI8<8$<4Zzx##^F#ZCunPglTz_QS0`v2I$l-d5PhU~V9{F5BINy0PY z&}6BTpwbk{uO|B`inwdGY0_}#(lm8QmtFe*Ntw!_(El&WG{fr2x5Hd(QBH@qr~q_D zmfibr6>q&N?ho^QI;hz5U2Bl+??X;rvZpF_ar{p^coJ0<|G(P7QK&c2Qh@hwJ#8_n ztg1?4G^F~GGKJ_>5jDG{*1!fZ@y?2B(D44c=MyysP(T(oT?0Q9r9a^ z;nSv@(MLPjtV>})^;DAO!WDx4UElFv_9VQnXq0Pj0Ql-dYL&7A_5Md(ckaDTymGTE zIUH^TzfJ?6L5m6_WQqS1Pigd(vczEsv=x;oaO29U!+KLol7$!<1%KRZQMeJ@oSQ*^ zO#CsYY24N@S8sucV5x5t8bAY+7PA`|QZZC1xLi`|Kt!#v?`_FCAjxE-w zKUd@<93YAICEElUceN{l$J=ucjqjGEe}ifCl~RFqZ!rp36ngP_atPDJ1$EBY!oR5l zL@@}^e|HZyDcoki++QH_5(l)o^YIZ9p|H24?!|O{O?dbCO=#2Aee$x)iK#b7WWSIH zY|i?$rz}O$1>T8R$BWUp5l7-h?gKB)@aIRAfDKx0kqGYm+_IvfK_lhat8Iw{;^o@`DrYnNUXr{j3_7H&Dp`VYU#d24%lim0#5+~dH^cPD#o8A z!Z9%%njA>dDWsoQF**Kq|`NNe8C8DHUq)h|XF%a}!!QeX8lVjVk-V)ILALUdMC0WdLo*VXR@(wGM3v`@7{dtG(--E zcK3P^C5r7@9&|Ldue@25EHrR#wtFrs42i}m46%zTG=9Sw9Zhz}P$cKkETO#_ojluG z$gG#I$~zY|)aj?z_8!s`;ASOV7WAHXoLwW#JO#^vPyk!aO|~39MP9jC0HA=+=~Q%P zoBx^+e`joM>@~=~B3;V+_?`yc_6$(^Sg^jdyu*7e^oc0BKvY%?(%^25A^3g%4*rn; zl~edbm|b$gYmIAC;V}tYCoMU+8{4QrNE73ML1a<;<@k(%$){E!^$3i)!9rRDse_8y zwmgi>0t~bj|qE=oV&mmIIn>$98E`s6n9O;yb^KoX7Zo3{P%ZNpq{k27tp9?hCD9@>?h8tYQiKLz;I@&Os~$bU|@zcUEIyD zB&DyA;Y4hDJ|z}LHM2yU)_t1s#8>})<9?h3u<@L@FO5@wU;Uvk!}Qy~AX<3C-BH?* zyJ`O2<)=@0M~H8%?^&WFvfr|ag#D#onb*kl;)S30@zscZ-@D3{d{rIntdKI^eeOEF zp!w_zuMy_`)q$IijqJ37oSwGSE_`+QvB5kigqwsH?z-ZTyO)!z>@)vSQ|^;`xfj}q z6^ML=&xSQiDT0sBe+KPBkj)b+HR?iA^|hJoBF=|~27K2WR+X^V!FsY_Od_wob=_dV zBrobh5+FN!0iRR)Z|=)_z@zl~59?1)tJWV&N!|W`zGW-$Ik}KbYXaN2r?9Z}={=OOR$(`=AC@6(F&?G3+Ub|byBh-( zi#3%VNqIk5ElUf)2qx$NH!@q7wFcky<4SaZ8Fwuem+XC5bc_-5eS!9(qCvM-_J#)< zO}K(M-df#aK?TaNgG}hBAuFsnI@J-s_(j}0sC3Dw3?vn}91%4qWOX5E7*ZT;TqfC) zX+Zc!0U#gHJr=>RqVzcanaa6O9V%dd6|&h0^dy%z18SF(T6wbR;=<%>C9B~Sp3 z^fDom4*={!k~1WL)|wUg@#VSCaMBcbtn9rqrH-YNU1twN$46FpH-zwtDi`-hF^_rfym`F81 z10kuNQ@1h(rJ6*=K%RRecq%$bDMA?I9Is-nna7Yy!;nZkuU6n?9@HLwbR0LQEH(1e zAc+zcJuY0uq*3Q30{p7Mz>0lUrIpv@>3%FTtrxzMV+MqAq9sRKa+Hx$D|D2}(t|~%35;wPk1ek>{JtuwM~ytMN|c2maRiE)@Z`Gn z;WanNSGS6C60mZpDM!0G!@Z=8n(_=Y&#;f(xfjXi&lDXpPdTBd858lqrmR$9NP@j} z)NslUFetJt8wb-Y=dc7>HiA$b5f>cjSa*xq54nFsk&wlgFc*E7e;bL(D6T%fnSy7l~g^z`j0)T65LAMu~Zk zD3LLU2PIWO4$v8X*auTR5V_h0_{}+@$|W1N>Mh$)cv5&9!LMA?G)%DrMUR73#nOG`}Z%SzHpACHA`vUk$gOq28?{ z-VS0n(P@5mY)jQ1Fe8*n3@}(lM5#Z z4Ip9;&>@Wik%(sn39W|;e7u3$0LHv`H|aQzbd9Z6$luIW>7NpZ9r<0|gb4dEIukm4rxWl3Kh%8Delgl?-vwqHX ztF~bxs05;y-8k<}h!{dv3(5{fCxc|nOWx^M>#PEYfIFg!cg34v$09XG~6L3}N zV{2NWeup_`M}!TcZG%uk zB4mhjpz3lKJXED+I6jynYYabBKQ%RCWCDv-5<%gW#EBdbQ`-|QfjxNnlZBYDyhtuk z&ByZT@T%Yc;A4@IO7g>pmdnzzSE2z6X;!3qc0-DO3p}fuJSR8dH<0l6Qx`cRSTU92 z>Yn@n)Na%_jvV2k0ZqZ@gA@%2I_3fr2vx$KSIFs7eL3 zdqtPW8KW}gMj{QEmxJchTWtKiBMdd_Zjh$rpM;iE6PLMN-FiWKQu|YdQKR+1ei>p8 zpPOiz$m~f&Q8Vs9agiuF^$vUT>Svz3%AaEw?Bp~uUJh;z5;KX~F|3RO^*V%jYz-HO zHN@W-eq7G|BeA-a%kx#H>zi^7QN5rhpEkLrQWX#zr~gtJ_Tr9tnnfl3c-3r6X=Kd9 zbS!lgE)+dxQ{VUqoq~IR1lry&r`#Y#wAn{wud3G6t<>`RWINbD zm&kg&tRL4W(Bdw!oSDze;m~yG)+k|Q%vH!-%ps=YHt+&}51#CN0Wg>D>t;}@f@?#* zKj%5+^oH%02ZU6Jj#w1{9c@LlE9`l}7tW?dA{Ikdj_-|UrA*6}b(DKnUXI{8uk7$- zOP0=cv<455_6dxzuLb<^AS9QcKK}H2Eiq3+*#%?aRICI?UsQ+zr@CRP- zOxu<866<`NIsKzQ%H}ft(orWe;HJuGdvx=)_Rh@t?!WWZf9C>17YEuE|2@;HGE>;3!P36(eT$5*EfR^1YGa(-{~271Z-;H0hGN@QUZh zDZUQ0zTosQy|BDWL!#I?IA~&cEgna&^>}O-OGG85&8wBgW1;u<`BRT0+&dfkJ3HAs z2h6QK{hjHjySIUNdlk3N-|yTk@4P(kUNqi$e!sKEDAcYxr7(Mg352_aZz)?Xq&W3( z>iJ7w6>D_Y-s~kBTJn2JtXpUC6xS+6g(Zt+v|A<|X_`8>y8TN2%%kop+;dW0QrJEU zFcv%3C@5-G(_v~V6lgJMUR$xB-&fjgkz^*+E@}m(U;Y`OmmDH_7z}$DPI(wDeE9t7 zVaDtW*$|Ci_KlR*n~ae$J_6)x7-fUxwf6A8EgrdG!xSZNM?dQmRIz zoM+&y!<#qSW=?H*Vo+mPZ!wZ*cxnWImANsBWDs%+<`b$MtII{|v;pS(SW_908*N_S z*6S0lJuE(iF5aCJPYlT zBCWB+gp42Ga$G+KJJcI`&rKmQK%3-uW>NeKfxUnEi8#0>RT^enld&gC<21SzsD(0se4eKeqB` zwD16=4c$+s6HUSaS4BWtiuUr)M;35z_(Vu8e_vJ7lI(kPk-6JI+lz=biR24Z^tm1{ zJU0Yt8UIAhDKlwA`LsZ5Th28EM3%HC=LUr`DurJxG-$GHOE1=3xaGB0O6Koh)JRpk zJTmMV-M(6~F~5B^6-h>PF%joLdm>&H!wkJ41ub7c^)du+%b57pqJUys)4{hzuBad1 z^sePZpd1D;`*uTPnoVC#{ck*3-5h0kw?if%n~PR+=T{;o*0C|E>NHzZE(@kP>I@L0 z^=fAht|Vp=PPT7R%{6yipj%ZvA=b8~$K{0>b;dM0!BJJZMZ|a&oTnLy368fR3>aV4 zpBh=PO&xHty~!DQ-+ka`VMC%K&i(cE)^w*CDENmp>I{8X8OwV}wptTVkD90oz5QnN z=ELXqETc@5g#7_N3te017Z&QIk2xs0s#&fq(yv7Zqd{ERQrhB9#cA;h87*y;ppN=4 zzttg{F$(Lg0xHj^Fq`apHufBx74K~_T2w65AzJ+bft9@J*$TRCscg2Hjm2N06SPKG z?IL+YT6!uwSoDzP0xpp?oVYkY#0{I-b@!ZWmHr!aZA8i!U{!h8amTlQSdH`mv(d+W z&tgOL@Jv+4_q)z^c?CQDXPg3KcRX*lCk->L&aD-2PF=Z^Ji+{dRLKil=_0D&B znC<5;v@-^oVQSh8x?6w6G*XCCuO7?hL~Oe}cFY;ev$hu5~@J{p`Jj>siR)jkz7(GbDN3$^YWu%?6>Q#+=R`X6lU8eYxL>FnP?4~~wj3MVW z)N>308G7L<7*jK*T)9!Xa3i-8f3@fTX`IN1ql#EG+0#*Za^-J>4fvy9f165Mhl4o% z@Pt0LTFW!AQaoO4ke}~F;_`x6+fqxO*zW+b*9Bx9k|1p9&~X!dEQzY7lE*90q?VGs zx~Hb8zEr&v%`L3TfW%tCI%gbgm-$wF!X`Sa=mg5sJzDlOwiwXHk zwrO`i83@g+MlwLEC;p)_$uMLy?B1WL)s6H%ncPh|@S|<~25;fK(0;mOeYPT=>Qox{ z5^@L3fc|Jn2{gK239`#vsJlMjpq723OA!s$3c6LJRe-z`OPr4w9A@D`VrP%;gL#;h zv9yfvGwcbnbV_dDzWfK`q8Bzo!2A2WOQJ(yYLNh@;Pz>y2tJV^@~MkfYB9cYecr*n zmP_XXsum|+E0%uv?}aBy_`1UB9Zq6K9Q2F^P79$>0&h+1e5IYk_gSoe)-NM9{ zJHhKtE~Jz(ld#HY^Az|TJcdJB3owvb@@%^6zvvfykdrgZ=W16H7Oxh)%bJq)sE|ex zPAG_tA+@>zD!a7%p!U5r%PbHsSA5X!Dfu^k|FXQ`Ljy~baCPpg+OB8^M2XebJs%_Y zb)|D8eIO$5t(o-{N+7F^DI~Fe>$$+#=hon9$vK`f6RjyW-c%ciuVJJ`8oayTV>hN2 z8n-!Wn(?0#c0+r{AcqpcyDmX^t&hwpBDfqp?6NG8Vt?Soc&DZ9M^s<>1I?mR4EiJ! zSZ|m6W!Z?yO z>puUPi_>8CW4=p-rG>ZUji74-G@wVw9&q-}&djSsBk%GorZo1cvKHC!>Io#T)zLa+ z7?$<|iLb=^yRn)lXyBQ<_~)&t$ChOQv7z za*pKO4D-+cyk9${^XqC$rS$@Qa7B)6adC30 z2A<=0kiQt*yqXO3nJS$yN#;&PWtNj)h`*J4Bh%V)(1_Soy1fb?rNyvkKVlZ~MhF$g zW8URKG9Je88-+6wz-lDHL;mA&$8%g2ct3s2k~sF{V7$>1V5i5`cHllInwNiNFgJs* z(E#AQFuD=lTbe`Kxc1%cJ+9=8w=&Jd?^SEyfzsRpuERB!M7^qb{jSBmEn!l1P z_bv>-WYy#|gZ6vq|Du21uK+>Gl^d_kCvm-9>=fW3VQWfw_cK&4J|c32ynF}n)xt@K zKMEE~Z2o23HMb**V{?!!@#(oK+~ny(0T$8;(qfwv_=U|nx*IY6@`GGnVbaD;ow_d2 zp|k7Bx;VB`M=T9Lo_4f&Gm*CbAb!t_F^Rl?`P>hLd1)M=`49m#-_`5obPntU z(^fiMYuRC*(uZ%;F|jfSO>f-?v1gDGv{R~7OZw36W6=lZaPi4rGbx#K-y&MukKXg_ zs~Vrk_UKn_(YMznrIPrh!6lH|T8Zn#wOZ1>eYEUC3ecO8vx*`=j=Z%=8W7Z}lFyQ+ z_z_;6^E@9Ah5w$ijrlui;Y~ilv1`;fU(jKA)izD#%Mz~Djc`*R0!?n_MscRZ6DsjP zz1#&*QakzW3Hc2Z{O3$PM!(*_h8G9(cd5de4y%fz8DcPRP?-=W98@d&IU|Yh2Hi#^ zets(b_|(Al1T}@7>^(g0j8VF|x*F=6*EJ`8FAqK!z%Q#V?6sDN=x6^B7yVKZ%xeWQ zs*3sU{YYm5xYkR~9-phx&D;E>d_gQ*oGbxq=uG({BXL;(KSZD{M#3}_#DK+68#65x z2fpr>uLJ2L@=fPD#&A@YZW3ox0Rg%12Goae2kNex(VQIkN3bqV0am>HZlA714ZoQD z^};t*Ps*o;H}kNbx#72~MQZU6;Yi}c0pb>K8CKvDO2dPpwA6Q3l0Qs{?j)u6^BIhq zXoTVTq|_{R@@Vfpx|X;WmfzXb#T@T)lk%9tF@me_xmb!bQ)|kp8Q?zSXwFvAbf$os zccnp0u?YI-3TQtB{^mN1mK<8$k4}O>cy_&n>Fo%+biAo64r@>T;*JntJg=Lpn>L@> zCrvB_UsAwVG{c$W!*Nk&Q3kjswvd+K3e60N__S{IiC4FonhCVjCDg!>tBOp8)i8AH zYP|1fKA56*&G_Ig2?;^TxekJ}QweZ=8Q&su#e^uQ2m}t{Wy}(cuaqYYN9E1}LQ?^Os;QNQKk<=jA%|4mJaTfK4wH zZMRpsmiAbNVi2**m=veUNaGju8XU13m0m-)-mv9ZjeNk#dzeH!oW%ZTAiSE1RmF@W z97R_oF?}Jelga-qg0jeKQ*Gl~^PlEtob%KV;UDvVag}5yaPXHaGhrF`mcN5eN9YO+ zpX9GgD{p(HgI!`0rTa9dsFS0*wB`V(CJC^TF;gqNNt#A~O|p_XG2_i>U}_BsGZ$Z1 zVld;32`V*VO}z)$NOYUH(DktuzgpR+m&z|et4f42Mk4QlJ&viQ)G7Au2@z@_iE=R! zs?lBvX4t=HgPVds3-DMlc3_l!_pEAFZV1JQe4p4WSqF3i)0tOAxkA z@py>(7_0@fGl{O!jI`oX@<2h41|)L(wM4-Tt_5*oi>R?0hS{A8V!Gj@OIFR{Q3IRO zd^ui=d9A>3Eikr<#r#L@zlj2KEO~Y4?KSQk{3jvDgS#BF0MmzB?iG`+$;k?`uJianOmdnOM@~>gS?;u&fEg2>pbts z?1ogpQx}l7E?STyCwxkp?QhA|UT6NXz8L^PtZ3XM&h;b`MQu*x&brbZo)jRW-=tQg z;Inc?O%UmV6sIb}gczdRed9l_N9z8TU0(w}jij8p;vqd(Y_bByyS}LNpe{0_6_k=??W|xW8%Vy?R<^(UI)Gw>S8`4Qe zURmkW8X564GOY3I%X*0&`8w!|)Fy~tkDygZ=e+DdK`X9{bI`3LCi zrTS07Wo4*!%M4OjANAfY9qY&&&zM1?#fn&hxfq%R#!q~*wmDiEVwv&n^L1C@m4I63 z?e?k(UM^*Ae9t2HPP67A`v0O-79HO+GFS2 zwt$W7BPS>PE#qA(xVAy4)ON zPVKd~x&Jj{wV;<>s#!MJhZ{0d+b8_` ztgkJfz34ZC=M5iilE)10?C}&G z9Q+Pn^cmn?9cEAxXUYL0Ii_vi!;Sd3Jp>uC4ITDY?UPr(nyR3&{@SV=9pMk8Q7hU@ zM^(`Vz>IEGnVJ)|u3Lq><1OclLzfA>Zpgic9OD!YX!P4<2?(Ruj@zI_5&s+``y2@d zTQQNzj=7hEG0#Zizr-t1LlTYJcZXUH^_znFj_I(SqDC_*LI|H8O!ag+=A<8A1v#f* zEZoK&M_U|EV;x7ifvnu(y!WCB*_=D8z9p!TjCOuw{lP?Tc2t2&$$YPApg#NTigkAQ zMZWHG3TIh;#|cVB=NfpLiG2zicXqa1}{|5)>_S%!zMi;f-igvXT__kju(hrh8kfFY675o?b{EX4}Xk`(1q2$5dqGXUkVP27kb{#nnDcIpOz4O@6cAJg7cY zC4KBA478>w8{Z9je(}R1UX8!B#JFV`lIL0!L}#I_2KLW z8^$<|a0HNJXq8X{Ec0FE8N2uMe%vHs??k_}aVq&Mm?ey_-aD9;5>FL2z052km?HYs zYm<#=>Yuk%GmG%^@_(D<@6t{o}! z%7xdiSpElBZ{ZZx8}RKDyTC38%M#Kq%MwdTH%Kh7bazOzq;!c&cPyPE-7Q_x-6bVo z8bm-)K~$6<&-2dw-kJArIQN-3bMEVNUH@@<&V$6rsF>nDQ{7KJ$+?7+f7?2_s)_M< zar)n!Qc|4yWpi!@*>5t6EdIZh&UE5w1db`so)D=i^ySN5GP-%%E<#`JCgyp5*ZK%@ zEb3NZ_C6qrzaWhh`I`8mtLv{{fyRlUFyXa{GUab35oL3qxC5hW813n3Y>`(bWiq&) z1WdYQ(c466_2v@#BI}J@yvTRoMs`p34&n^w4ESNGovk@1*~t2kl?=? z|E12+EBuNIOk^QgtOmBPNF(9FFJIQBPrmWZ163rGzWq`dw1ap0kP!Ww1r6;JAZpb` zn+hLKa?rG0WQO_OMh3q1VEpy{77LxG!Po6EQDumu{i)DY+sd}=_iB{?PD;r8oJ>>s z=Y$s7>?)pDM{j?_R>7EC?Oa9KxU;3cX_v`_#nWH!vYGS=Cis`dFDzT9GmOu zS9%|uTtw_gNQ4I^f+WaZ!UiJ%N=O7m4vfN6feN82WvxcS@de@O!*MGFtU&S9+VMuj zKq&oVxNFuom|_GMIbCg4N(i+dKtx3w+GIT)A@ZCqJ+Kion8N{5VqSAbE?4SS=+-%3 zbFS8!wtJm(8dS+6MTg)mMxN@@%}S5zUDXP!%yMb>;p*~nI5klkAXsc_X|Zt z&4VKJ-jr&<&rKQ3AIgKsxR@dO_<66L%0y**lE&I9ED)4V_ww?aS}{n0j6}mjLH+|L zD8ix6gjqKdpUX&Q`~o?~Q`Q;a-mxfrgao(|uh#0vm7CVJAyTZ?M4S^`d2H1+{y1DL z?TK&T*ROK@{&D*8{fn>vr0?SRg;N$v?b8n~p+(8-LW;5fizsr~xeA0r#}m5 zPWIVsDa9t-b?z{%@;c~6)=&*5086-Z9e_O(pSqGk?gc4PsjGwGO=-&}Z;t>gv!X8{ zy$j9g{=ByELza6Bm%5}D( zpcKpJvI(xGR~(4zPN>iHYy~BHz2M2?`%N~heibZ8`>AU4J=dkC3W4NJK)%}|y?CC- z(1`m?W0}tI8Cld#5ci0z8CI96r0!B>le!o^R^#IQ{_n+R$(rsqTYbyE)*?d|;rre; zp}(tL`1=gm)PE$DJOjt7Tm{}|n7tN1%5k}X92ezAVKW{SVR1!o+`hTd<3k(WwA^(! z3D|8L)h1Q@)*kMaN_W&k(6&ivH(E>yBJ|w>JYANOq)1g;GX?2!SuFPM^`De!=uykD z>AbBP(yn94ea{R9o7nD1T^0eZd>0ys5U1<_pd2 z=%=kK#Z1w9My4Ss@Cf7p&hsU87@8XK$A{bb3m%P|&oNlDGEwKVAdzX?b+@0kG9H{R za@g38^)4|Y@_8s&mqeZ>x%R>W&qeXK*CH=(e$p%5!kCL2KjP#W5|mhML8vyn6gWxK z;wwc)2pB`$b7BX63@XASM(4LPp}@Yw&>O z)N#rvrK)h|2Ox|ENAhkU)}+8roReO`#xM=Ao)bx2=*rSv9@0qa?nzuLn>C@|#vuH+ z+{ez&FjaF1`z>Z%Di?Dw09zHJ5KxgQ!|J;T=`fwjDodp1uyWxzYJi-J7}5J-)QuzE z$Xd5--8EMBbV1fnNN?2XH%*7-%7sL)mXb@5YJg#JcD5TQjP|phK9$JpQq;XcE zZ-w^l{HzIy^$4NDgrF-@7tX383uS_59dgI9>yE2EAb{kbfMk`rR*&u46u7I#LG~t~ zZP*)m`m9S72!xf#MS7rokvOusVlil+#gzuX``YJnInFOgwRs1NWgXNBYre)8n~9qIZS7@h#faGnjd;WRmoMQj^=n!%^tBsf_dd#}s4FA8rpeD`h|HDJkzk zu!Z63^gw~0Y1#YI4mBqThwy%kQdj9`^+6c0gUb5sIiO0D4TC#D zydQxRGW3EcCf%5V`nzK|E3Q^XMnrWR!4mx6BLlrfJDqpco@Ev+Gp@Hu@_P0Y^*Fm#VcO`L5p+LB7`iuGtEXG01S%PFwYu272Mh z!g;NPfmMOF_jPU!`VyS&>Gv$HJCUVmNMVYZM+x=Xfyy&)+)t-RXugS2EoAm#$F;_! zdBBgErPc?%G@a?sw)qPl_0Z0*Gx^4{ZCz3QiwhwBA97ptg0L$OlH=_Lo}#^YTZ2T3 zb0v;}OKt0hn)t6>n%&vDg`d)z^)ZQrW!`+OjGAoZ0 zkAoCWlCA;AmVBlqC8SyQ)AU*CsCP7@y_pT~3ZrqF6e`vy~W zKB!IVcIk6=x7{>rnIowSGsk?$EYG9+(}`a)0?N~^83rSQN2~*P5{$@0t{)|NEd#^@ zt)0#c9TGZ-DVwrNSmwf2e8BAR6;7^!PoLzW`Uz281pD2+f zXZ&+`a(g}jD>|L1&aKD>h~u1$IEHg+M{EoBo zeO%jupnTw@%;KM_)#;&y1j@V~rNiK0-d5I(S+$WlvV%GdmICbY3;+=m7Ncd)z3v_8 z7FcbZBOEo^%+kvp=tdn(9jxoi9oc}+|3=J5%T;{K?W&E^jFjY+` z#?^Be_EU*wqRw0A8xH8J_#G&9Pc*DBB%ZU{2bkJWN^Ajn(uRdL4kjt+ek^5=K8h0{ zIy+kEOR7K35n))BL2damn_W2pL2Bx#gsDn^tAz}Vg=kjAGe$ctN6pk#`Bys4Hhs?e zT|rZ17sN+E&x|x#s}k?}>|c+}wL}&YaK_auCj?c>Zc&NKm-|FU73(UNP;)k~DP;XC z(x-GTX;#j!i~cXvDMVnZ49r<6QyJU_;wq(4*3dL1EzLN!t)x@q3AU;kt*)JQR*X?~ z`(|mhy!~?3RNJ?*(Dx+y-$`?X>UvIrsZ8eO4zf;3(Kr25r59xeZ%vCP7jN%KiYMof z!((VQ;FSbNGLow`6_ruu)R9@!S@2~rc)vnmx2xEt&a1L}w5BKMp3-!-rgz(=IfSe4 zg6jjdT5%uk%~?eNDQDu%NrLN1H$hEu@vvXVNdwrae%7flgJn>)Hoi-{rB8c=^h}rN z%b>_uT2#4yz}YBMgjg|ZMBe#BJ$L0c(#Xo?U01C!_C)u@MWy2`Fr7XB<~YxgeQeUn zKgh|TzjoqptvC6(H#5%^@40CK1p`5xe_zdxVqM88W_U3ASj_dEQsm5U&OW(vN-Vy* zvto(6;YU>-1MRBGOiSCV2!oayvvh9d9j$IAvc6ub`lJGC%;0*P@+SeF9h=z}ZNr^! zTdUhjL3XFQcbU@Zc%>?l#xySa==#IEI));(UiYeu(N%V;`}$*DE?89UTUvB7$<){? zL+S=C87+F+_rcVK?CIm3{KgdWTjh;$EZ-3Y8TqE+n#r5=dUAuvNoqw(oCd{_3$>H! zm^;Gq-MV#o=EN?QH$TP*N>z(*2_s~A^kL^G?gOu~-G@>Emzq2(=5q>-Do3-tis=`K zgz=*BdiCMe?v8Wqm934}y#IpsDfYHzNs^wb6GjW1&^3kSluaG!M^SH4<;ek8#`m7$ zG+IXFrT@4PT^Z!SnJop^86cpujcNprD7jzZj|K^O_`w8Ux4M?`*hAJmn4K_<12=sm zEw>FLum*Ya#!ah{NUZ#CU8;3#Hc$VyZmkgyKAGoIZ%0|SEco;YQdxK3%RZI{}%G29QZdfVRpeDN>V^Z zJx<+VgEuEh=GqZ81I|W}_}4=GcS+kyJ!*-hb=yL*TWn4$3Hfn!(aOvC)j}_}+4$KU z8B2BDRenT06RS50pqMglG4}E#T-DDdW4Qqp5Tyu>TUK zo}6#TIP}pl9oIk|YiI%-=f+ttI0?i(FJPmAvADA-doRgbThWy5P&xI@pnM7~>>oLe z@{U{++1hZ9w6Y!*mwYliij?Dv&Di=6r+OZDFYP>WV%d6GnFCi~ zY&6E${EJdl=^5Y)K~x;kTk1w$!PChQqFu3TLfXpMuTmuA2=%2#hUD592%X8W?`MwN zS;c)o;`LMv%9heNpZ!QvlOjK-&2bKQQa7BykX{AD;A_b;ynW&OQfGU)Dkg>FMUMWp zzEo={f>ECjbu!YJGwthg5_hRxY@qCGpmx73PB#$;8#7A=c@*Z8d~H2z6;|qxjPW7x z(T-Cwi$hEoT1{I(#zxyOr__(zGWN=>Bmkpp3OxNJxN``5xt#+mI$GFQYVdE18gM?^XTNbJiJr_Ey+=ycor3xALAPQk_ne&%~N=tuXp z1if2#Tpz^z5M(8cve#kL_xQHO>u6=U`s{T(_g;$oL^02;0xg4)>&#D9-kp>5Fa|nE z|0(uyjkn@~yF;~u_(Op^`Fj*g+(pYqUQFb|&O9Y|@mNnY;EcE}_~G|6={Eqm$I>TC zHM*48h|Mca6o*{iXHnLy-ESu?gG`NK2={uCxYCN^6Yo#OaVzj@u;_bMqp}dCQ>ew-O zg+WE8sPAlT&T?Z(p1~j<_;b;hH)npEc|l zGRWirec@N;%Q`+0z|O+B4bYs?t10Rczkugn%(m4Hs+M~?OoIV%lu+6%b}B3nq5#lx z_sJ;UxuNUJ9Po}%^3G+ci6&lv_5;ZGfZAb{PZ68r?9w}b^x>>6H~iPac8fjMbaQ|D`)pZ@NeAjO&htPe6xpErBIwA7S;BE;qIFOs0S&SQ~96AxmgmJO&iC9W=5GdBTCQ3NP>7Mi;}47QUL$ZO*maB5DZj8HLN;SyAQ za80qgwDCJ(@B69!+BRC9jp7kn`7+_<26-a5gKZCR>o2;rok>GLDfgo;klO@5K)jWw z(~cxmM9)KM0af^k8i_(yBlzMdaWe`3+^it0nt6CVRxYGCI!cdPD|9LhdvkqVJ~mj7 zWlHDyxfPVU)x0Gle`?9odbaKiG`#(kPprKGmSHIMY$-X-$esUFxD-Pl#8i8xDdxG) z+J0$nX%03`Jv31Z9gnLRPt$R3-Gi5{3~#lSp_vsq`*?JBwW@2`HTGQWDRgBwY`S99 z6=En~vZdO@>)h?`^$}~t$=4>EB1fK?RsM->-zu%FD*jDm)sTs#)>nfTpZy|Z{z3{r zLGU2%hqcET1J4%5o`jOodmY>H;La z4{;HPlFsacE<(E+(d*C?Uq)1Hd{~+b=k%)3GKj}hU8QNA_)uf&sa*3mjysm2kZ2=9 zHv-I3$P#mu4~w0=a4r+@vk{nR(JJB45jVP39TXaI{v3y+eT~nBOf$U}oOeu|b{}`^ zJby@;4jkTe$2^#%nLC#CzO$=v!xh#$cBIkz-hpw$h%Z7_$}#~~YMrOC`rR3(98c zm639m*HqI6JLJrV|Ie8($A-0xx_m->i#cdMwD12ps-9NN!p>0Cznxy(h|FohoZ>75 zw;5}&NyU&F`=jp-+~;)`G;@9TJG@7t!mVgiU? zn0u}N5%AoZY@B7!b|<{NaC}@txPF;#HZHn0_oIOQovH=Mfxf2Z>`;T?6wKR@zHbv} zNXlARh_U8P(#gtc(auRYJh0mL-oa<4kppe>c-{~t?Wq<=Dy>9Q4)Sk&l)XtMTw!;{ zYf+KB+XWk82c=o*@g?s(<*tP7C}*mY-=O55gtZJ(@o-OM&le9}L;$5%W5WizSY&t_ z!=Cki&*)*Y9RgUpQ&JyL0KT(O-)~_fA+duroXta2uP=F9D`WOhUI@HtkRX_T)}xp$ zEe10lMITs5t-VI&m!pP=bx~Xn(~G-cj<9^BDnAS>RgB=+!4lNmYf0Laa>;KvOK_W6 zXv_S3Vt-A-dbN%RA**69(7>jb2^}JJeo+XjSaVp%sx%ioWJF`iWcY^?5#xN|B{U2S zvP)>NIfCIemdIqG#<_=VN+uYa1pp}vaWk<2RJY zGKu-)Vs2Hd?R3guzu{U`pK2N#1T~e7(Zwt2M=P}a8g^8v%u(MW!(>m;1hC<YY+J5UqN-ILsSe@`UvAP}5xw%v0#rz>7zY`Edk-GJa$TVG zxl#h7Lrx9%!K)D9s>qLG4U@5I!&<`(D=%QJQCik=^<>6#C(kpER#;{ea;Ea_^_ipG z9}$v)L*~+vRXzA6Z@$O@bM0iNRVvnWDM_idiBZqV?a#wYO5I-SbgpILCF|NdQqe_K zkm5RJ){Zc0HJfqpWDKhtRV;gXm5{h(#ge=APYAqme%`IR3idmx<}7m_@kv+PT$eX$ zYcimGk@36#2VPdke+Dmnco^$e;mHtLMvIvinIAf`8L|C39@{Qxfzle#E@$-*wW5rkCNkN zXlinOYCT)EcCyEY-KX!f#IBB&=*H7&;Z^R$vc-K$XwU&(j}&9BJQ3YZ*p~@2y5Ec^ zVAHV`sSHQ1QQ`p}?>&>!l-mSrfP=z*-}83wSV-On41x>1w@jDzPREaCe@b9;pNtDi z&v`yO2ApKKn9{?;T^2lCnhL2H(v`dy$Ntf^Z0_YdX-JAaFfiNYI)Y9w4%-m+mhpuN zaM4?tgLVhaE2oVfy2KESNYl-?Ou4r%7WZF&3t!6PG|+ROt_%YQKJ7tMS!l9sG9InX z_}#oO(%>~yrq3wPyf*Zg*KlVMPwW%(n+e&HVoL*1cfLKVTI-RIo{_Y}__oFj4BzyOJtJ6-mxj<+qG!6nMY=x+Rhg z{`HDsHnXLpP1u5T2A(m0Ui7XM&3XK5sffw9sse~Zm-U?n)0bP@P2dq+@cZKclV6i# zO?|B&7=j1E31P3^Yp3O%yp3?h4n^JXswcOkJZ=R&UmlXanl&7KOUjX-{MS^G?QWMm zd6JWQB>cmliPhe_&l|FI-mn&^mW)I0r4W~BxYpgV+>_sPd((19y5@vrJr2>2jHh(! zRbPM8;CZQRZR}0hVPsQ|!>V8N`SmI5`o&u-L4y(Y(#LgZ|LB4Ns-se|+TX^^S+P{sY`wa+90x#m5SPW1~N9_!j zzT^>dBGEWKx;SjO=Oy#DB78Fluo5b||DBBUI{KfiO?l7+PV$~tmrdrGbpp4tu3gpr zw-Qw;Zd}o#dp4NUfqh`P6}UR$>AmKcfAWwwvNoY;x#u@ZY6&m?x?U1^Ld;K{#SEjV z?ur<1@VQ}jasu&Js?1X5{fRx{VqydAg9NDum^n6EP;z4$&0NxNn|tnJ*cOXt=4Fmj zD0eWkm^m|IULHDbquPQNV*nsdcdeQs66gUcSv>j0qZpc}Vx({4m~R#3?~_4k;lINmn2(?=T8DC6=HsMf~0JU ze6z93R}i5SJiuW!%2y6+y?M%M9!fDEAu2Qor}KQ<{P~|!sC0q~lxRoW&w1!wo`tD5NQJil#CqLX59f{VN{_S_F88P`w>iDIUIwk%2W$o%j% zFB_8CD9#u++oVb+5f}Q_Vmk;x-bTq{Eu1PfYOMp6Nwh<>Z(ozi5ot3TfpwM-VrEZj zG!_{Y%fzTIvpfjDc!gqcn2zbhn^~lx95i^)XVrGj5v+EftLP%B(8QcXR-B~8FTo|q z*KDn$PF|D8YUQ%XYIZ}P7X{9tjM(syf7q1KS`=yYQ=df*Qn=cd%QVU8BZz|hFrt-? z{RUF}mu4b}G|Zw459iSl=SG;po()BDF*5FgwPw96G!_>{*#AR%cBZ&Y+)@*=o&1!BB74zbHfkhd*N5-qgisl-Y zNf@bMMS1NFm3I8NN*+w<5pJRC@$u01PwLFMf#u#-LsnG zBu-e^G_^+{v6LOK(0+1RX&Wg=JK`gRL-`0BbW*jfikWGc8fT0XYonB2#}_OobLyzJ z{;iHckgaj~70xg<`83i4kYHmc6S5~s=}<99X{Ed8nd|&1#z!0EyQ5AbdU=^ejnQ$f zka@j~6azAk0@;|tv!_|9>`P1jP3Yh{mlhZ2>v~2R6Vq|w$-=zFc=rrX3Au;&m_V>l z+2M!wro4Jf@u-bB0aB6o2SWQQIoKZX%7(<4`DeiXG5FdzWo6w#Mc+(NQ6hqpC_3w& zqa^=s?75`_oKsIz7XTNuW;hTa@0O?%$Dy zaRfz115jYpuKg@FmO7HsxagTBM7FRAmUeAL?zc4w=xKE7)+YT>5ZS34pHjKlMgwZ^ z`D`KOv%)RX*{ESF+_u~{nFnv{mD1ldZt0bY>{Ol7S|jdhbFo)xv*R_C-}%Z76S4O7 za~yC>pRV2-x1Ymnwo@v_bRHlo;~F^XToJWZlS__6leO|}PM{;?MHyH2$&(>sBF1FL z-WwOkGoi0Z*O*gwUd_c?dxc%pbkfx45O^1wtujWlt4mEcaqu3!cNa$LdjG5KMdGBf z{q%QUl&u8O^H#JHZ0-e>zb6akAgtmk9q+W^mkzl5?uMb=`WaktwKXc)&52@4Q-M2& zKgTu9Iv~MQN7Of#({stj(TaE1neux`m=a&Yw_HKlERn`}Ro}pN|5#NIli79Z^KOSJ z|HPjGDWZWH{(+KT1af``7KsMo8wFLh2N@~2)``As6@}pXzwG__^2NN{bGP8<^}%0f zFWZI>^~0z7+h2Y14|8q*R`2)vdHd_bkFRZizP=WH^UDZ)_3_Qm$03fQM|j3^`|WQY zWrvX8h5$Q4DY9P^XNNwyeZwvmMzt2oDi;2Y{=;m$PaUukl`jDOy=Mu7tqex;{SrRfA_m~@&oCwlQe=BS)Y zH|xwy*2<73rt@6S49vOogFlN&e&H8;Gj8NP=XZVP9w5g7jxpH<2*7kuvw8h&+d}>DL7`F} z1w;*)+bb%e{?535l84rQov7G>H@ zlb7ryOUf|`Wz^K>7Lm0Fpn4kdCCUl%xmi9#_BdM#nF^sSp=B&$DV%k)?UVGG!V1wc zRr;I?_89j6-1VOpda*|=MyLPj`^95pDhDbLi3xdcxTYXK8mj5%%zaxez`>s?Qe{F@ zE+8@ehc9}#MRpJwe23dqgawah4DnlvgZpg8qxl8j5`VVzr`u&K z(h8pReq>zQFQ0%f0aG*@!+{fp0e~nz85>1-)b~ppiZeNhMPIRLgY{F+XQj^T+dam1 zY`^sfEqZUuH`e%HPuxwVj~)MWA{g89O9=4%*!fqnAE z)4U%;g&#}XINO$NSD*F(9)ibQOp-nCSm5A&F$1l6lTTZFVb3%hBZ64D`_`psAk1ia zkljR>YUqcWarw&wZR3bLxUf6GV1y$z8)L)&X-DN9c-lJxj_;&hao} zZfsk`B7OV=3evmd#9bLs1z(eOm@munc`F)RCF9d2V|bF>)lRBP^l z!rmM7hcYX$=F9j#z5k-|!?(S3jOBzL$sGB+b^Rz4t+s(-$s3(tqQY~8=?Q1)57|AiKU((Yku*E6}F3D-EgQTVmUYz>S`sv~8O3fwa!Y1JTm$@$NwAKqB82pcSINm|l#aI$k=JCHv z7jDqjKeWzJf0Dd0*`q7gH-8yEdc8?9h#()|lqJ@lJ!iZBPWII{=~L*FxtVt)KXjg) z{hR3_Ot$}z>)QJMGvL{c(=+Sv>668_8{ZEHs1Kq7WTCC@KO^7ld<(cuyuVF(_Up6K zWX6YIiVeeWpZy-PzbX6hn=I*f-LpTfZ~kv4$)GzTfzt65gj%lDXB|~^280l9cOM8Tm&>Ae;!HPzu*+piJZEc(6{wsq zLdDZb#|c#}mZ|4Sy!y>2CszevMKQxhIB{8dK-xS+=~jRS^06QxHNLp8Bwgdq+-8wl z*-D=;8@=(O4cooJe}1oI4_j$Pl^U-&M|NaT)(hTqCJ01P<~$IM;{P{g+M~}o!;w4Q zB8ZN&sL?R{XeccPId_R{ww_bu^55rpUP`md6fb#H&cliSwDyri=eNV@Jjpkt(z_4x z=`xJX3b-Z$u_@Zx+!|?pf!$BEl+H$ge|9cxcE2He)_3>o2`%{@WlBq(pI$l&i&qH1 zXckw=l&iRj@R~3R)VOz3#TilKSx%#|X7!v&cw(j9U|H zXq`vX#A`D|QKa(_P~~C0?sh;N-L5J(>ulx|^20@HRzn-FNxa74$t0;% z(5vyJfpxb+6lLuzG>#-aMkR!c9NeZT?WWF;rL2hj$cby`gVv_i)%G>5sUs-`id$`{ zQk&{N*3ZK{BS)z4-1JCbrvQz`ifN^2VQa4IyKHUAO>#a@NxM`M|1GaM4Sz+m#=$tK zo)7n7)^iHJ$o6XwYrPkxw}QNe0R4&MG*uEI0?F1(bx5cg_R77obQ#{_nH|OX0OG`J zGJGxyC%xC1ZR<}*&6+d$L8ggXhbDvE+${Vry1veK2a}MYUB!!}UbS@&`k;*!P4{`4qf0xqDW8v*5p2@m4D24%g(&l$Wl>UwtWz5FR*Cw@jxOCkxHK?q0h1gX5?7)L~<3iCER<`D(aFbwP& zldXbtPlVSieHa@G7}uvQx60oJI8d}=lmo=FdO6e+aLl#kQ;7OO9~<{IL1?WP#tK-C z`+%o-Dv(0ijckBOrcRP)1PkMOOun>+BDl4Z@Xum#Y(wN26$T-Tc#R%LaeAdBAiy{j zx}_5t)zoH~@RXz$)=6OOqhlT8>0#DBKB@$q+?}mW_(11_#*=TDIYd%*Alq=%j-`2O zf+Mv|^(=uI{Oe(lwz*3dCDoiV%w5i(yq=0kz|}AIqN4g@{r>zCoIoI_hnFr3eu=e) zP9er?DhZKcF}S&swUN|NSw$|@P!gc?a}9_tjHqhZk;u$Za&qULWBH{zq1=H!QFH4x z%)1c4gTb9z%4BiESdmyv`ysR^@d7oqwkDQxpd~b*hYb3g5|6bt=-mkb& zE|zRC{P;#;siqBr_>%(XGFCZ$t$s?8Upz`ptWzcT2E1IzIi@`KDc9 z(=^sYC!n59PX?lnMn=)kt6T7)!y9wqJ0nA_J zr@xF|Wj{u`2yWkP8*g`ZEOdOTYk2k5EcKd>v({AjQ|Be|4i0fP($@38m3}j`&ATJ9 zJ`J$v;h#0}RUP<8#>U8}3A=eQFPN!b6R968TBr5f4O{7KxyYFB)!T^FUv|EEj?#-uKqlHZVszQYR~M~NKy$0r;hxJ;f3ST?7xz>rL2MN zaSfxmm|#>)Ik}Cq_Ehd@)2H~tr;DuwLtO)%NgDb3f%F!{dGKT8c*CIg7Za|R-Q@Gb zP0h_)2vZFcUst@w%V%?Jq^PMGx3@p0*C&$ds6*ANbktw2 z|4`x$f!J1jwc~p#w_&Y387cFpHOwn}W6PhkZ>Y`O2VJ*wIFKTY5aK};|C`mSI8F4# zEdiQmOl*gVIF5Xjuv@$WdMeOpKtT5A7I?lsa+N=+#XqYn|6mviQ#B#mqgikrgwER; z+EFQ!>&k8-FCV09bE6F6qGu2iKf!y_>x02`wFZgP{BJRbcr@cr0To#A@; zam(zE?qVl=2t46hjILRK@CVnJCVQ)XTO3+GEaR#TNRiV>g$=Q-RVc1BhcT`XsoI$` z=S(FwsqW_amxS&SOezj|kZb3<^p0`y>Ieqg1R}I7SR(loY@$b5fN0i{C>>W>*0P1+ zQ1fST0W%Y&_OdL;`f6ZZk6nirot|IPe>1G9?QEc*@Er461};h5z!!s+?Uey4mjT~1 zW3QsQ2E%EXThwo$s(?Z8jrKiwclWib0K)!~-9Q&y#s`(QgY+PTi1E2TvH)K!@#XM2 zU-+{Ng)%;aKE;I5VD@ZwH0XzcgfTK@Fz&n|kJ=qFAOF|l811PDttmLK;vTWu zzW5H5=X)wsUlxF~Lr|AbY2rP%*s_l`3bMOsD(@}g5W)5%ohpwnh`|x&=|hh2hp4TP zMjV8Xcyg(PJU! zEJY|*gvT4Jqq61JTllAj!{}l-|6)Tzi$Ds4!kA&s&_Ur)ArI1F#pE(&N)&8sfCW%2 zbS!UDAumr!ZfG2FPqjX*6P&K=Jpk1ZqZI(%Pq*G770 zSn%_L&-)lQm!hx;eMm{ajBXRR2!+%TDqit!%pN&4B_yZbo_G|+FQp%4Wr3NBV zEjVIwf{@~38cSR6w0=D@MQ*?jK^f%rdK#c`&2qmI@KQi%FAa&6mwpf^y1~Lt8yPiM z=v%G4Cyb<3FD)k6Em9r_Hb&~}!cC}^a-L_(=jSq$zW zdA^XU<$PiZQDu}Le-k?tM_OQsbv;zv!iTBZR>V$#XC*)yM#bBAsHmULts?+(AveR* zRighbs*i=}Gh6zzDwE$B6Y&!eG7AT%d&5!%8-KaDDnwH$3xmCwGC+@ibVd{C5Nkxo zK8)(049XY&N*0?eG*D%cg;)|6DKoXPn(^W8{bKBgdMMaZtrf9d4T|Y{l~fBx-t>!6 z;Ka&uvTcX)f|2eYt+~VCoFTRlZxyKX9_(6~&4`)P?0c5rwUXW<7`y`|b#_%6qhC9_x5)mM|Wle82%eBg@39DICQ zp+oPqWAVmjQ$RFtDP4#*)obd>NQ50@6_QtWF{1%4L*kM^%WvbxANYPaF0UeY?o`7x zmX*||VbrUzA1>7LJHu$vZk3b^u|O>jrx$CT*2kOE*asdrwl` zWntFhQ3|A4rm<0LWyVvsp{KW0Q?`g#7FTOu;7=y9W{{*$aHRKSSCkEka@O~Wwef!$ z+3kXoGiFt?kqxDQtp?M{z8h+@jwMbYRBG^z?-bZ`aiuiS^|d;tk_2FVY|&*$K)E`}y1>$$xS1W@SIrRej)@u3`JliF^ zskdFA3*CL+r@A+ZpL|yP@T=y-pQ#T8a-n~T`*FGZ@y+ks$JF`>r){5mIzj^|SL6H1 zdTf*8KDgiwP?_7h=yX%p4$w~zFa}%Go((YHIb3oMvbx&SxDFy~F~99UaGniHD`CjV zhqyBRgz^>M+YK#B4v9?Nf&xil~X?0`LPN-aXb{ z`4GR_vB2rEfU_~*t+9~1F)Etz2&r*v_VHNP@wkNX__Oguk_n%?@l=Kh|LO7cgo#Y4 ziCpuEm%-yXXA@b|6NTpEZ_Ou5?30n;y99?4O<*GoPL~n;Peyo~@l8-I|`dn_gy^nUS=Q`VMUd9!s>|ys{r3M+w0!$l8J#oN$6i$azb9GUH--Y!6U7icsV82&CWy;>k+ zTtrAOQr9i8CN9EWEi$?-B73_(7a1q{GO5i2Gx`BJjo>CM0orQpDao?zO^e5YDWD1G zyE?#x58RBMlRIBVi!4PNKtvLkbQ-}`A@>BJzsqKcwgHqt;}DQ>2#^K`h>lq16(lg} zUvc?l`&)vbnvd9n2kgvi3VpZLgNb z-fpeTxaMAN+VRMQxNT5`ELXdI+SO1;7Xq{10&ytTZC`Er^K75HnLb>%eX&||f{=MZ zz!c3m`HgEFzvnN`{~H@-)P~)In=aQ=9}&pBUDvz&k62UPvd*9@n5j|&ursqmH7kjt z-_(I@0vfkdU3Q;nqV!>V;v+a2jsNLs0~0P2VY7P*D4>Nb$e<9Sz5^7i1DI<+JZj+U zjXmiCS$8Smmt2UE7075FV4w}sYXrFW;HY`Lk|90peh+xCN%H1GGB1I~mJcW3ty(|u zX+7W#{h_Ul0I_VYfhGuuD+TBWWXK+n>>Q{z;-p&vGp&y7l8!x>MneVnEwvBe+oMn2 zL58s7K=+d#Z(tVoB)AX64cQ~NVuhsekZXoUToxBb~j`vk`Qxx|u3 z!~Imv<5Yw9v~*VfG+Gz*EU57XXO=f3iYMIH~vs|8G_Z0kbX|iiWVL z=A)a6N8)J&owvrDO2(353ULf7&7~7*9D3E}6V3K0Ag}FYzRLUZnLIJ?)2)g36?5-o z!@-QIE#;}j=roCh!j`I~3hfdHb$BcC{{xCZb-z`GFiBpm%Cn(Fs$O?yO}Nz{Q?6*! zs$I*rt=qS7(BTJr4xw7TU zm@{kM%(=7Y&!9t#9!C>oFt6t5zwd>cgW6PdRySDAyxO3~?&AYen-@tkgZJy}$Gu%(|NVE}mp~E%5-8AC*#W5FX=f2|Rul~q#FPXOG89Ev3lf#!K``A1 z(}o#_sGAfF5kO)?`H2XXfCR93Usx%sD5Gmk)#zY}GfI`>i#hf<8;JsuD5Q@o4iqDi zNTPOCSQsW*6igiw0Hu>urgox-Za%5wKoS`X^nxL_{=0!Fx zb)#7sxoO*(HMTSCKw89A&Qjo#P7C4for$%}{3SOisNt#tOf@RaI4Z{+i;@-wW}GM1MAA8 zoB-R&aKFtatm?xT-?%D@CFVO(un)V0C&%vo56ovL6jDh1epRcnh>xx zIn~*|E8E}K_EI}1||NIb!SFJi0ngy>dfq_hIF-j|>OmGy4|M`8G z#3ub41=#)`X!+P9r*1#Pj(7*`*7xa|aKF^WB;Y@zn?1Ci2>KdlT(5T-jD6vYIU zwG`Z+ySzQNOfkWdwG+U*?_=!VeQ# zc)}yVCJyICrX)cU7Gz?;3Yo(aZJ`~l$m5t4CPy6-Q3{&aLMD4B1*Ppoh!#3rAL*z` zKyHD1di0iM%|Af-y2fT zT2YHBG%0Jz+>|D2QIA21GMWM*!}M%X28gLG3h|3V6r@Kz>uo9_$6Qx3{TGE=*ux*} z^-O6JqOb{j)Wa4Plwv|n zBD9Qd2z~3coi=ewLY$J~rO1?M@QM$Myl8C^xX^`2VL_2%O0N>=bLS?h5sU%!ciBlMpV5I;? zdyH`bWvn1(r*I!B|6J&EfkkX%^O{!z+_tk6N-RXk`m;V=Pg=Sn$c`2%t$#g?DP1+3 zfm%_IHgIC7tZDXsil-__A}$`Ni&2Pf1Uf0Vn%ZJ_ zq@ZpqHnAO9#d5e2Im=`l6a`H%ZUb`TDlkXEikp&x3#H23;UtK&&c;_-QXt0k zVC}T9<+n*d|CmGGgcR7!4tV|olBFO+Vb9D7SLFAGNqA&Hm9T(<9&`gqpmCdf<~)HY zn#l4SQ|-V!4r7=;w3u)S8aPi#LMU_B|+ z;G?pdg0KD`Rj)VG>`c=Yj6!QKSvP6MIS-Ss^qGO(ab@i-3dR z6v!Y|sJwzdSg?5=19-QfJb`ebMd-`-NL@N0<&8n`ad#JHw!qZNb+uq%P4Swdhs z9wASpT?D=xxA{_+>wn1r|g9c)OE? z|H1vZKlM#;wy@S(a{G3P=G7@MKD{)DWhcsLc5GN*6}}T<|`& zGX}2I4g_FiQWRkxb#WJ0W;G>6u2w;RHxM4h3S+fST2N=~Lu3ZUP2MGd?eGr-@DH5u zKBFL8@I(MQMM%SBQ6^{$dE;9YbY^)2IK9MybtXluaAX1{0Vl^kWbkJ7Kmg41X0*4^DUs^HMvSP!I3qaVI!Mg@uM` zWd&qdc!f0JB#Q{{UrKr-lT8P-a*QQgl%l|K|&& zFa?RWJUR73e^+MFSXI}Mh5V3J`^M{~`0 zW;cX~$+!guL_tW{297ii?j%wKU@rucD9uwhH|LPnQeY_84kpwf5qXor{})DXzy-dz zk4iv6N>qfSKo3Yrc9^sZM|gFcz*eS(MfTtdobYm%7*RJRH6bPMb=g)ui=(lsEq<4U&xL+(^p$8&tWb3+iPS_M>8rO;qn z7{?|9D@HlK|q# zm1QS9tl*GS0C_Vtgl({wf^;~yXA7N04&~@xtaU|X$tV&uAQPy21vy5C!&DaslJ3Mr znYk!@Rb7(za(b3=_0R=N028hRm0N&)?BF=fcbBL1XSOq6ic<@$|In2Iv=uEx0J(RW zwKGhZwFxUYenApQ3MhHumPzfPeZs>=6tOxDMUN!Gb`KFH{((%;gJbp3VlgEN2dZZz z@^YonNoNQ{1fU6@xKv!JK@p`1$u?;%g@JyEJW=LK+-7h_hGdd6F4+o5wMRP$VoJOdV-0LLvn%RTj1-Mcil- z=N5nd$t8W_BAVAoG~|M1m3P%eTQfC#+4ZaGNf7d6E%POqB+_fQ2TN4Z4z8e8N`R51 zaG7$X1?zxBxo2_~WN@;XUy!7Rq{0;47e=oSJ%G^;Of9 zooZ`b-RFY4RXf-huSu|!&-zR31vE0o4nOoClyfrkXG`C@5nsj_x3&1uz74@96{}u@%s%F~c4 zqu_y6IKL^VYfX|gLA5gqYEYr#q)W79Cs}}^fQGivsG86ZM2I~t1U-eCVXt~Tk#L}HdUC+(f;UBI(ep}aTRw_& zptX=+1NdeHaEjJiPcAqp`@_8=)s@F95NEie^Au|NYg?K~3W51b=7cHCOA6uQ6_T)_ z)Hb0^mwN?ahs2mtH3dl}_=K`KJ^f1xwMa!|hVt zJE6}gMRHaU6tt}IqbYp{X{RQRu3$p_|0lx*k-}IOKVAW-<<_4cAyxCpP{S({EK*)~ zrJe<0yZjiDOqE6h7pernkGG0bit=)Pn=7qER|>$Io4}l9ysuyq1?2E_?gc{Ic5}LC zSYt#YedP*7mX(>7yb&8+l=^`u8M0#mx2U8raT!{aOLQHamB4gHra4+%>0YB1X>yqa zOqE43`+*RKa%yHqKvxFpsyujXK}a_RoFH}gSqiP7VFq+aXU4D10xP`MMKJ_U4VGkb zSwSv!a&)x`G*%1Q>0W|l3#=etS38;e(@>QqP>@t|a!*--+A4XNq;Gw=lrcF?^d>h2ah?`QJFRqIU}L*u1Gske)%Upt zm;*}woDtCiVwsE(XhSx$^C1N4KLe4xNp-+q_&wg&5RXJu4Vbzq$y7rcQySWPn8b*s z(h#J;i2X_xAqv9Ib4C9kq}B?;WdLR;h{ObeWb25AMF)x?w059^rKe%jrxU=1M8>)Da}_{RC^Ecb zUu7@W!Et*5c?6CWP8Dd@fP2 zp#_l$kR*-B`b*U95#9Q`bNvzG$|7_Ndjz3DqeQv2u#CA(M%_2W03Jf~bwzloHn-OX z!1+k~DqJj#V577@P6uAHWpIG|lxTi&G+oLQOk^!xSr)`NJ?W5bg->-^ld42Sp(m9A z36d4J1r&rt+BXnR|D9-7XDIrnbgtEx4OVoB;){kJl}S{qc>B?$aCqpPaqQF6`c_w9 zq6On%wA`~wD~3}hG&V~wUJpbVh|ipkDqlzX^L zgL3&>VKqu9lA^tP6rY<$b4#vPBvKJ)Z%fibbQNLYW{`0cSl2YzIg5^tLt!SuWH;5- zwujyg(Ybjw(De0x1cJ~t`N{$XLY;dbuG9qsH3`(@GsPrIw^e;3R1dx*lkGs}5hN{r zTTEVuef&mK2!Yn1C1VxDZ}&zult+E?hbQ`ZN5lZ=*O**}ksC zrJo8t+yj!#|C2tcs=bZfy^eN6#a%l{aC>J)i0{Nr6s5i-B!(VW27h>%Mkf$&gHKXO zLMHeRiCiMcO@lr~hX=Byog`XE$W35I^e;((1$uLzZuPw_-VRKIL@L`;2=tLO1!;eb zRY;~&Fw05Q_UM^p*iQ5xnkyaUqlv9EJ6MOWR984xsqgbh%+qevRluk%2`vv)97UX` zG6Q(aHJqu z`L$n+|3Y17=~W%bm0K_gPs>(<_`~%|A+2EJY5SXmgg!`W()r_p#5@Inv=yJrqn-#g z@<>tuK|tU@f&~p8M3_+FLWT_;K7<%i;zWuSEnbwEV4y~V36e-i;t^y7DXi?ZBG77+ zM=6_F)vMJ`AQ>qvH`#(IuoRh13X(`6*Gi^6Tdh?3++wedln6<-v~x8@fxswZpl%u& zQVOYhwurj3MZgv*37cvWC2CYGC!Z0jw(}*B=q4$nyxt{+($yA$5hS&$cdOL|B?3hz zX$n$c%doaMjns5jFyFiOT-lqc#3O-CD1D*jB87~-U-k&IBH*hX7bRs|+50T8%@zq# z|F*EJ{EI-DDH4>_Jxj1n?~?UC-{rJ9i9jvmeAO!>#UMzJO<5*+X{#N|qJ&9u)ov7U z8v=g0er`oJWRfVF02A15v>q8HW1uT}+DeKPb_8gTss*NYVrqr9kCr1Kiob|rD?v%l zax9?(MH*-;#|W!#y}E?*Dy3GELyQ12WJ+l}temRH73uJ6XDr3a`^Yv@XhP~F0zd+) zD3G)ug+LOw&@2h7!V^oWnuKgIuc69V0x8^5BES{0l!&0SdW`Z)CF&59uEqGasHw9S zi89f*l5Xiqi6}Nni8?V~3y%~aZ30X?S2!U6!MeN}?ji&w7zj{|1|_smLk~qX|4~I3 zWoW9YmUFZq91oO^08LO6XbS`_WhE~WTRV_|QPLxzl%hxhl@w3YBlROmSmBF+{aC@1 zpeR^zN7hLth(cAA$QYFrE`D+;FFASiFVrYT8R$bzw+Pl*HaVGspkle0D$t)O704-p z|0!WcAS~fEU3DA~0O|O(Gq;QXvQk0nBQUciMP1a&jBBi&Vsxp>ef2Bx53zrBQ z_|kyERac-$Mj?tegSOrECsOPo1ylb(-OpDMdE{aO0*) zkeFSpvw#i6vD=o?i&daeIq7*iiVGS=&fh5gXxW8lIxvb}Q_5=-O>0xN|Jnq{Q1!+N ze;QdjS3AvXZq|A7PHN*h}9JLS3W zAPT(S2}}4u;K6Qo5hNl0HnN`03}j6>0TKcyGQb9w&WAq)Vi1KGI*oKLA5!owOIaT^5%SPQaTKBt1m~7qrv==wsW5}`o<|e9QkJ&V zr4NbJqfkmQiv6V)c4|dY4mv36!Skg*1>K~cH->j5gkTFDl}~}XRA(O5Ab*)8Qwb$h zTWtYMhuRz^jVM*FcGat&LtP8~#6H_K#Zrh%58}YI(1&O+dVt#MSLJG`hDvi{?IXw* zG{IJifRuj_WF=d9=)592lYxZIUSScXz`>UFd6Ed4|3-T#I=gN(v67u83MY6G9=dg| zp9O7bAJRg;Y7d>jv?VL2CtB80q_mz~Z7L69%GS=6tx8R2LuN@3K+$%Hw|xk39fI43 z@Y0gCMQ(DvD%NjSbArAt)N7S1M2@NyB6hWFLj?=Fj850P6?vclF$-AbR+dnILgjbW zyWSv13Q`2f*5`=JUi#M8zFwX0eHE3}teRK9{{=8Z!WzR{9`=~3g`M{hqSzy1Pr;jY zo=Q2YL+cjAzYd+O{cbr;8Dj9S6_z208#3YOU05O{c3x=*n~)XP@4+GdtBa$@KqE@G z!+!--d=1QC*N&IN8kTO0gUj7SZ7{>UE%Aoa|7(%X#`v=)4set)Qdsi}cdo>>GDB=^ z+IWg`e6Xb@k}Z;DE-zWhrqtw?bNl65vf0hd^KzonY-V0g)wFePGfQWwN_h79A`Lrk zYNb4ALU)A7P&PDOo69IfAIh&HCLN?9Y>|^H1j;I9u9}^TWWQ$jP?Cm7kS(0&2){1A z*i~V7$@@&UYFfNK&ZtULT4-9=8osxdDG-U9-!ZdOwnF4}MKleOU`Hf*VYYRge;K{= zLDwNibYodP2z*s_KQP(0GlRJJT)|4fh8-VF`6jN?t-6)&%{{kE0DD7=tH#~0rD zj%bqCZE1XaQnO;lHxGw>ZIX+YwAkaNDSMkx<05m;U&dlVSkaE1#@4hi_BEZAE$B6) z^VbeOrS+Ws=JQ45sIR<{6k z5uxwW=m%z}C8b?*wsSSp>k+9uH!%iHjA0W~pb|<`XS)YVK@wY@XhV z9n1=Kq@eo3OF;pz@0LJcM^al<|EuyvTo1W_q6wZri}MQNyq&GdI@{R(q@b>4;Mq6( zQAnOAt~Y(CwAP+lu!ArdoKX1NL-xE~05 zFWz?kv(~-1))}M`lvtv55Tlg_@g~oFRyrqd?wrz<+_C zi)jU`S(Hh!o|MrTL+KlWAO)~EK+rq72lS69Y6r`RAHEVmuCXY`umyKu4JyjI#b|}S zFsd4i0x5Wnaq)#x=$WFSiIH0f?IQ@RX(U70KtOp4$GD7Ez`xu}KmxD|{ouhCT#jCW ziEeTQ#(AFCP$RMf9S0l;{~qxNIcYixsTjQ>g*UtyTfi-9i>vNm1#5A7g>C?W+O>lVCv9SK;xhZDZXE2+^4xCYa% zZ*r_|kp%6?s?5SVvx+f!ih`4wpPOiho^dPTW1r2NJKTt>3==8a;S5_~hb>S+^|>oy z)EeHCipmp|Nwgi_BL({yj;UA{7a5^TJF-n=#A{@Q?<=5#yS0rYvcw2Jtq2eM*aDv*2p$=Wz^WaAphsDO#LHth%c~|2a-XfJ2R6Vs zS>Y$o8OW@#4g@iY|5D%t?Py08YO+4`$k3v)U7{&8lY}cF0|V5us6(d35GHt(C5FJF zn5#kwoI$K}LFZwG2~>!fY#5%Ri@b z9*Dt0f%`mZ+sc^Jf*AbDc0iSwLA<7fo-Htnu3IRiS)ygR5&+>MB~m7`JWRC!xmMF0 zs>qpP;u*6GB`{Q^i{XTeafK05B|uB2k5tXCilzjEJ7xUKR&bA7e7=G>H7CoT-sua4 z^o`ZoghwPt|AxAeD40LLSh{X{qKTmp{8_vO3%?iP4<{N85sI&?!ykWAG8tO8tVod6 zsl;}m8;&|Z#Sp~*k%9rCo^1;r#3P<0Xp7w|DOWTlb3BY;ERdY)i3oa5*kMNOYrpWz z6Mvk>N7RUGWXDRwz3oc4AbAl1vWvmUJ4Cc0+*BUhp-AJ|f_3yy4XjVriN}pJ%GWH= zo0!J!*vADLHCNQV47v$S*{&Qzo*Lo^8DR~AYN+^%z09i+sNjo_h*5!1g0`?wi<}Qz z1iTqr%_Qxrn97r_Il*3G6E?veLE%LLz!S8|luh6Xw#lJan!QaR1u1<%O*n~d`WxJ- zkn2m9|C`iO+pwza)I#f-IR-3DZV?E=8y5qy%UB6hSKs8u^N%fc)UB|KEfR=)xl=G*jFU+aGu2Y5IkuNUi352NPrW|v+omy)0+xv^ z4YbR}s0ARD!=aIas*swk*aEuYmAL#=|FBD5JX5DKm@Qq57PLRM!4)iw8C&IyF*q7t zffky`s}Yiw>uXasr3qHuNedi^E)1v*EE`oF1FPDUtsqp!5y4yiQ&1HfE0NAM9n|<) zLM$>@fyhb6pqoFnsyZ`Ox}X$FwTw2<(jMIpGO!wgF&I@H2u&cD!YeMV=`SUfSeF_w z{|WjZ_2fIgdy5=Aqo}}4y%Wg_EkIkM=!yc-%|nAzn^net!;NP2 zFjpL?jBSc*gbJ|0j1y7XLOP@9=uP+Nid><&mL-YN;8-w%P`3aNk)2nP;S3`nHJ#$F6bsMI*=F~3t&l! zF0zfAn7}Pi)#WL?C?bQC;T6>z11&g7Cn|_cpoIx!OieJ!EkLV$L0~&gx>(I2uVcxI zahjJni83f&EL5C}+20>51C9YxAs*rTO@jG7VY|SLAYB&vZD0cEqTPiU|FQ6pyo>_C z2w?k#*iEXPSIv~fl&-0i6~;^u+hADCAl2ot2Y+aVQm_)Pqr#LK5FtjJ9qA?!=?r(! z50K!BTHu5RMnWu(36<@pDTo;@u)8v)6kdE{MGl+4D8u2LIabKR;kq6?{@zz!Chc`i zcdSUViq3w4r0N*L@_CA=xIJmCjoOeEkN8a~l7jkxisq$8zL2M@&`ZnWP#K8=HFO6Gf5J{kVe=0x9!koPL&nlErY!q ziCyLuwz=ni?2mJ)4lXRF+Sre6bBOu#=ic*A5xXYwdr&Z0V34@R|Mc09$k?5usnz}9 z-DU*l$a&BO_zhnqXuD94T6M%*a2FDFy{(l}VJ1#Eov_!$pUCjORZdaX8B&>X8a5%3 z;_-^mSQkS~UB;kj(2D>~z@gu8iPcbobdJt6@rb{)#3>j9Gwz-8X^|tb*&%EPH=qr# z!I8!L<@mH|2?0o0M(btzzeu4<7Cg2nFv&k|!OqCZRyabd0b&wHqTxFU96{<2{0NBo zo2f9040H%1wpW@vFvRA<7SU55ZORzb50h?02Ol`T@#HZBlay(Ea4VQwKAs1%Bq90(rvVaXv=|47c&KkGqR`N09!vTdnL zVv1xGG2~l0<*>E~J#`Q9$iW=KN_0(v5mDBXED+?$59A>LNjQmNsg|=$3FECCKjGF) zk!SQiwv_c6vFQr0vEW+Zf^|d8R^S>OF{NVii9O+j2_V7=OaPF;m3iUEHa>}d(t^s{ z4^TFU?dT$@OoCC+U`x3Y;yydhA>Fj*aIpHr1cM=RYo``ji9l?MJvj;a@a6irsD0cN z+i}FD@Cf@@@s~)e8R?40pw`3YL=DQ>g`;8Cu?y@aEAzw+^$=3tqq!L&h0CCitu>G& zSjBdrTKhQR8EFv+Wod~fX(Y<((=&{c*bNED5V#Ew|CB&lQyZC*qDYGgkXm2`gT1)d zVnpWH+uPe-z{+VDF;L&Q-W|b>CGTMR@Z2krkKVgIEAI)!u#0b00x{@{I9HW!0?$U| z@7Fx)>}Usp#XBZ^N2)+w@nW#;+D%vlb?w;A?-UuoFsMpnVV}r~J-H~hIo{~Vktvbt zDOsJThIM~~ovqdC9o>rzsSb+<60V32f_Ub7>&OmwcJQsXN-AK10PoipLH0munXoFe za2KEP2PA~-JjUNrNSDai3yblGEH4V3y4#(+Nv+9A!-lB3Y{_qd2_;wn#BO7n8*qw= z1e5Rul*lO)m4IrW8gDV=GfIoJ9b|e*0+>+k|G0!CvovCarCu`dUt&24X>Cq|&~58B zOq;QVqEOVFtDb3>6|*espo=+)CMLNAiQlXRSE-YMFN(e3l>jLayn3WqlwVV29H~d0r z&1G9Y^CWS8jL``<5hX6|JG*@k_N}~Ol}G(PsaW1FbG>vJVY0wetiw3QR70e>8c@7f=QTTtc}xe+RP(C;Hez5so! z_`IjUD9hKr1em?9I8jM!{suzbc?Spr0tXJ1Kp;U92}uYh&}6HfL4^qw{kTo&?48cV#ks#YxXSKv})I~ZR_?e+_(c3s8vFM z?!vMPrR4oefM**e3UwxtvdLbn|Gk=Om6}38f~I<|$Rr%dSBfUY3ZpD;xIC!KZ5i4>j(>4~2} zS^+qcNF+tENiFq|u@Y;W48{{FTWmr=O+QIN%0p0YK?)fLB1jcNW3=PS6i#WujxCLD zLIx=}MKonuNsQ#DPLz_;rdqGMdTRtxNL8w%3z8;vQYb**REXAsn7ghLpoO@s zBze@NtQ@+eQKmv_ zOMKp13#~1sOmJkg|CVApP!y7ovgHKz=BfoNtgLjZJ)jy?@L3f5$r*twvnBMcm;sE^ zCN*>RP@fpp^P)tA5^(5Ou1X?sE69?;NuPwa!vz6R4yIkOO8pd6*_tT1(iDM4A+D*a z<~6A;_4Fix!v>!v@lb*LZ71P{8-6(AiPuRh&}MbV*KAsR)C$QY7Z=k^l)vXn8zfz7 zODnEWK3ZX!l|tTPWm7l`E1-*R3n!$hc@~qY!8dqWmpxumOgvHE4nddtGZUs^qFYOE ztq8OsY)}I~lYv@LdK=}9c4wt_>K1smr=WwL8;1iD;EzDoV^&Y*AT58INdxgpE$9S3 zMAfQkL7wGf|58MEp<4IrMxplNa~NBYL~`@0+|@|J8}Gfx7Ov3L^jtxJdHH4m2kH>z zTEQ4DNufIJs7dSuRTbYoq*Ozq9YG#P5F~8jHrZK=|GG1%RYw*Wnb0BLH| zGKgX9K>!I7AZ`m0oA+8#3Qe`H6a=`)YmrE0A||W1U@}kyki>`xP>MrMfg>_Ar3RQ+snZ_?h zl_OG|_%Rs_umcgBAENHYUSeWgqxJcnI*Y*8OU)3H;~+pg;ojEYgYny-Q1#a zRnZMgZw>a{un27+-*k#teXHJx{S~^bVlPsDyIcjycW};CuAlD9s@{^NyxLg|D>mS; zw&d1N%%!bzEgRm0+=^`@8C9kTU>5<|qYO%*i-Fxr$E^ekP{eKI^t}6Cv^cjT|Kn9H zic_p&)y9%_tkXnnvAUJPTBfZtW($q`Dc@=uV(vZ5nf`I0Ks4GUekWU>qnKT4)Db~%jJ-Cd?LWdN2Ycw-N; zq1nuCRbxR&QrPNbPwGI5A$oV*+_NU_Ys7FpA&!1Ps6 zo?_1B1!EOxk&dppMLiUXiG&>`|2fc68-+})V-%x!w?Z##=&DA6t*6cTrj^drF}uX+ zbK*48?c~?C47QQ@4mE1C9w)JjohxCwOj3Lt^tH1cahMs!I94$ZF+?K9atXOoq2BgR z!)3fIpChg1^mn}z?(by*TF3`aa;DV=D3wZD%m<l(y8mL(kw zDWLp?#r=g910tCO5@4XAM(DYp2VUMp$XymhLMDjADr7>gaFeBVkW;`H*gfCHeVy># ziF?st#K0E##fNoi7i^`4Q_UdX>0EUMPWEvaP-I2ZP1WLQ|5u!t*vicsuVoxVjGqvK z+(IyvQba-Wt;Kce9M08Nd@Z39`k(TlQ4uO(bOGU3JR7(e)(5^J+aZAz5ZyYk!#J>m zD1=^D(MK&f2ASnm92p=2#)V|j*y<(4CUlL)JznY+7kt2B;dIrd6i8eQA|#Sm4B-dK z2+<{WV!#!Q6i7i!v_ukeTwh?$i(r^ogy9r+MDneQ0e+hKahDh};ckr>;4l~AZP>$% zmTcil+O3O}Rhn~=7WXlstcf2iK35e^p%4ONarFc*ve)m?1BJbUgcfAVm}Six z4a8xjhgigrWn_w@(AfaK6-O?aL+S=B2AV#d3b1ITSUlN4+=kk%6`So_lt76kJ{H>f zMJU#v6hs(k0oj`HMHH;xy+nzl@Q>LYB9Vw0CT?;MGF$)Nw3Gp`_xy7!ql`Bc1%^X?(;? z*n=CCOM|INu#6;Gu%Q&`4JpV(U=W`U=3`W>|BG%wU#dluOt?ZR&_uB%;4P999(750 zunSO1-mRE~FANN$goU%c6{!G|5n84Mkjf#T! z)~*oBBX$Li62ym6puEvWnP{kt<{SP@|A?m~$9$aRk!E0PP*o^0XbUlnzyyYZ;%Jf* zfV;7%N}9w}j6!r=$y&7NX^1Iq%+nS;sT>XIcN_*QEUBNJRhpy;HwGx4GM=8uTtpb> zDe|Q_s^6=CX&Z=XJ8S@5D1jE}O;ZdXblR76iJGqs>T*a0yFk*6B_$K4VSM`9PtZlk zsLPw-4lv>e83?0rAx%ddM;UO!LzEI&_ywmLp{<1B!c^8cA`F#KL_2g3Z*ru=85O1c zDs8DBCdEWgkO93oMTY&Sdf5to5DhyB*nA|V#f{5yaNuMn~dI zAC^Kpl){H><(ae){g4-vtWKCl2NxWd*k-LHim4x#B+M3HU+Bz1h-iy%eJFfZ=@ zgif@jB+Y4TdM1~GCT@ObEU^Y^EK4M5f!kn;7RV0Y1B#rD|$%Q@639m#Vg~tLZ57_wA2K(=+uxWapO`kXvxpr?fT|`Hn zN@u<=4G%=NK=7rI|G_An(R9VcL#1#uamGL-aqfb!6dy4Gl&}vc@m7!&L3zZ=hy?IX z0cyO=*<8v{;wmRSj2dn(8#mQ+LDiZxVyyUskfdaa%!h+)7KP@N zAd?JLfQN&U0uj;6U?k%2fDRWVsV4NpXmF^^Y7C?x767e=fhZ&?Ou<56#3M6B{(0{R zmkJD-X?YCDX-FMm@N^i*&@yxWWZDOS)zkaOG-JNQH$N4D&G|s&$yFz|>T5LM=Se zBwdZ7`VJRx0@qCS!r+Ea!wwJa^j-_ho3SI}aaFMHhBSWPquzy{;n8}E3-FYJvAkJO zCH1NB|1;kV3QZ`>3xArUi~^}}0wzUL_W;i%IZFp=%%RK-!*sSoXtq^%jihLTr--$q zNPyXjTzQovfKjW$YL`q;N};&IYP7>++LUC(4y80PXdI9|+ye1z21fJ@CyYVs5CB(m z6sdela8gDjDG4X43l(q#p;Xvrk1%@Gp59DFv*=#*abd#FBTC=*Tkuve%j`fF||$hZgWGQbtB8L~JI&x&eU%m(-s)zCo81Xdh|kQ@f-h~k6?5rPwKLL3GuD}@;i z|M!BPNszXNjE`_lEQmjF!W2{oERXn-2ndbvc3@H&kTc2FaN>fTxNSJgkyM8*UvqR&} z{dSPRlqbN{gT!(OVo*pxb+Rb*17b`87x0AT7Ns5kvZv#>sOPu5_DQP2jOeanzkVk! zAqOiUcTVRDt45EkD1^F*bvJg<<53RiFe=ML|?IMe=G#AL~niz{J!l z!Nqj8MniUSmqCbQCI?56KlMLn#{!m!3L;*!tZuZNAwEvSqVI0|@di9|RA zM3fCrn6Fe8W=}ZdG2Spk>F_Y_WO`0WP*{zHjWO` zxUHG#PjfKIfw#dX=>B!028EuHjAVk}=KEv$Jv>9c_jZpFkw-7UqD-KDgm-J6PKoAf(kYGWB2N5Pz zxR7B(hYukVOh8~_MT!I@5Qvau)}Vb_75xnM{|dyPX;R`b{`kAYW3SCmK{dF!1i$DG5d) zV2e~)lv6a`Ak z2A=rb)s~X5BNAZTn?MxDtTsUGuY-K!Es3taLhY^z;7chiU+kgFrM$k%jUEQe3X3kg zhQlnd>xxsNqpv!{?ZA|t09-($zw>3nm|mhTFs<64F25Q1t8vB~asSLw#~pd>(Z?Tw z3{oPKq#Nk06V+3X08;#!VuAscTu6!|r>s(wdRiglwo>%tY?OXV;bIFiw4kmsDM+!0 z6f&q=Yl}0#xU!VWP|8R>38EOq9=A9HD~eXK6pNH8 zQNpv9O~m9viY@j!C`#ErI;)_kh?^0~BL(WSmL(?eQ@u^?KDb)K>rmeNq?gpqb*jCL}`>f zF&*>GfvMATPD(AqGGaD41q|OT8yxu2avR1M%Qv?eW35gJ(4?PiO%kqP9t{P{<|Kv8 zS?8U3?%C&`Z?s4tp(#2Myn&(!X{7wXGcG)qw$fraR+3BmsSeJ3am{YBS0j83YHrx(&&Op1Z~F0Pt-1oOXacM^ruGiU0F@Bd;fd-t`+{x0g4^AUixF z*bCyD00xidXx@5s?^JsNB$2#1xVoBGCit@U>pGskBMhwNvkx|U`U@wZhqYk}KpRj- z3S>Y9E|7r@bYRc0QWE*-hajf{6s?|=pJ(Z3UBCjEFGw+k14*J5i*geym`A5txS|zP zpbku?q=hfFq70H4gP%w-Cl+OkZ4tuAf!4;ZO`XnGThKyC;>M{c9nlsBdzKc`R0_Rp zVNH#D2&D>=s8Z#pVW`>;D{7G|R)9r4_8^0=Y~hMBOo0ngJd-Bu;SRl!fgS#U$yprZ z8W(ONTUKny29>2R4T6PQ21BA0M2IoAG_hl(;Qzvj()1bBl(0MY+SHY@v?+q*Q7;!e zQApHc#3gmfGPbYy7D9kO`>mt%f(F#2g>PSaa(-f;n5G|~N z01SH~EBsMKDl*GpjS38Q;Gt|*vj>iooaHpD=~;+%CIkntc0d) z>)vE4gC}T?;#wcoD5tz+3oNxILY&yh@BgCmQCDCFKM$deNhENaO|UZ|3Dn5kR3ZsH z{iF@WQHd0;=}>`i;&JVB2}}eMHxX%q6-3PmAyE^RyL4@CW}PVG9*3rO^z^52*~si_ zG1S+{w5t30ihpXs3I-V~G5aw~=zvlR2KhA#TS%!-i^Cg`T&O|$tgL4=$`r2#POj}B zAlNeEpV7<}G;;$hQ$mXxb&;ZkchL(zb!MZ$%nY5q_3dwgo1-XbK{(rq5|u=yBqlj& zMpY6OXV{vp6ODotU@;U_Aho1DB}o$+9f*_8@}*K_mjI7M$#7Yb%QXo^Oh8Okb-9E* zq~;P*@eN-q)^s9!`IEl*)!ploOaBnsWi}$z(whuPkt?X|g{=dr3V!iRhEqWi!h9qE zq4oyh@uH3);N&2*2C}U03C6jN+QKLx)e0$=rbpK>`yf+#^f zRD_f(21PBcLaMr3@MN`K3}IBt5-RE?1AGWOn`llaV4(7&L8=KYsN{=FrP1CP`s>I6 zX+adMP{NV1!e8$?Qb0b2FE3LC##~BKzh^;{fGZPYIk$on1?*XraCYV34w}$~{%u&; zu?kISVjZig)C6O-sZI4b*7+$lIhvVtKvlhi?C#eCg7uJi4eeg* z+SmL6cC!)EKY~Pndy9SDv9zOXUNc+VL<-)tx7}>3?grTlVfM9!q_^0h+tBs4_q`Vw z1xScu9IFt=C^V4;!2r@=Ofs@>E$HAlWe`ZU_7u;i%t}e&8%P8Xu^=g)@q@^6AhdM2 z#zCI#aE{#4AvgKSQLeuvNMar97{hQQAv56U4W9Lo=RR|qnRY4 ztDwh|$9<8XPcYq0rS?InT551BJx7D_i(%Rj<%R49w+eB(uZ@*+lc+lB5K+uvd?VGU zXIkg;*3Gf3iV$4)eE&eI_W4Bwav!RvTRXg6b=SE_Q>6XJ+cP~k*UwFNW4RjdrxrVI z#V&1MLw?sDu@+lvE9QKVPRdsbVGe7FSFW-(fvKmDY5#xUMQwO`vR?q9puvy*pVbU!>i7Kn;a}*9BtaAYW_r=UXE4nmrsOx$`5+;O z*S3Io{4VZrWM&L-N7!l7q~mJF4@aIY@t_Xpeq?n3WiGB~#NIAw%IW8NM%%XMT9{Ac z67c)XY2HdO{{K{P1sw$@7FyRb_r~J&fHjnpCF5=c^Cs@$kyoexj>7Pch2N#Ir z-isA*kO&D4oS0Avo$v{DX8t6>-zNX~9VxK4eX zQ0&YwI1ptBe?|@A&z@|gHljcaU+)dEu<;bH)rgQk+z<)@F%TI7^u|FH`h#`6@A-i1 z4~tLZ1kLRPk@}J_5*4U%>V~i;krE9kc5X%!J@FG2!aw|t^iEFM#*hUujS*3i)&36@ z6(|f-&=ncTEcz!FW$_k!PzoYp6dFwvqy`s(F&Kq$7~}6*Y9=H4j~JD)6vJX1Siu=b zf!A~n@&DE?^7!TWu#x9{WDaRY4<&GBa7z{U@bU`c6#35a%untTLhtB~8tF|P>j~&+ zL>@Qr8YR#c+0GuVN*vR1>#&Ug^bSAPE*=fg0Q~|E;n3I2(d20A3i)vvAu_m-APJBl z3M%p<9}p4U54fhU{7z6uh%XV%4-x_8+uG0jgpd5}Q4yu2AG0wD{Q~_Q!jHfaB&Uuh zSusIXiRj!(ZxX;JZZ6##vLl8|6O3p8!)^i*(6Jz`D%^!lh7dmv5-RM{Q^ae(7Fqmy_B@~TFJ#6D^RV9h!gQ)Sqb!xH44u8@^9febVO zY|iodHm^DL=66&^Wx&RzSOQb_=zU7AAwPmWk^S@&8hy zX#f%|B%wJF)F0(==Ayucm0zeli(2$EShKN%-=73IbHb06kwkyEG!XE}@=bXy9sze}0 z!5>(mt(sy<+Z0eBr3Odk^z`OoK4bY1(Ydl{G7?PWu&g1nEJ>u`TFCTStfUs)p$sOY z&t$5L2F7J_==In%S!4)HK1xsM)V&6RPXToJiV`gROY5x2z|;dzT454iVx%^XQEz4w z7GLRqdrK+Hktr$dDfUC&Rl;+?y zDHQZL^GOmOMqVGIEj0~3b53w%#0MpfAlSle-lG8X6mq~ri{i!|%m&_w^&`;cR!vUc z;Eq>;wzn`df>u;Be-JDTPW37%%M3*nUWN>GsrK@tnoOcv+Db1Br?*b!n39PMP|TFL zB2TdhX8@)tdPO9^G}tH=EZ&qi_Xxzt!c3LRbvMk21WD*vI zIzYt=lh46IB4s782VD=G+%srp*Jp^c3hh%p;i=Lt_IBTOfUJUKC&);#Eo1rPI=mzA z=&dU+Lbt*bc?s3=p2pKS!mOalCSs)A0uVV9wH~Md%3f_O!)-wP&^o1HaRi5CO-=Cd zGi^vMMn_~u@4~WhgC2Fw6qomhMx=TwYh@5m8Y@WXkh4D=BW=E8=2{kDDosRj*Plp( zL#@-r;`Mx6_o_DSXZsf*CH5l9#y$2`8+QYKI8i}bC@rR-djIkjX6_?)l3F2Dj`-o(N=lWtjrJ9#QPqvSk2AK}k|p(vKcqTMAeTY{)ZE z$ve&qDu7}*FoGtwDsDguJB;-u*npyLA#-qNpkE_wR)Z8upVW__0fYmCE&S#u;wCv4M@IbPCuTzG6f-yEEiFGHUkO<9 z2n&FXnkB>nD9j^b4JJA6Mp&X=0Q8Xr(h=WoF${&Ej6;4TnB!Gn4!opmdGluLgT%o!|>OgjpDG2vA z>H|Kcg%qGdqgae>@B+WkV@|e!9AbqtGJ#wqj4ggC8eKzRwu5lNt5E`F6rz!2ro^)B zfj6;B!m34YP2w`T4{_vHm+H2|wl*%r0>9EVmuj!a;<^?*^+fuFINW8LCdFRb!H(ia zuH<+VP{>_gqBm289cqDfUo*8Mmy3)Mi2wfyCa9^2sPEt0~dM?){HCM~$)HuU*-V&X|yII#A5 zL=feEvKGLZBWq6QuMF07Fz`j!t^jeDg7R}A4WuC_0&`%aGLp9n2v5KaEdjLzwEy%zg%3uj<-C|XGG+cqK zHU&$jAfg7yDO%WUye86rOA;x?!mVJG5rnx|Sh zkA}7U;DtnZWg|?Jl(`_{U;vd$-ZXBugF2ExSJb3XlExJztY*e&BwUnF*ufq$$D~`q zPEbN&)I__}TY3Cpd@c-mSd}Jr-5xlhSCYmh4sHwf#Fx@oyE<~774(ac9Hz<=mEu{FZ>{J~JM1P?Q%PtQQg}Y!z~Z~a@8mi{`F_% zoDC#gS!taWLN0%(e9)C^G}>rvBEr^0wCrb$IJm4Vn-jDotT-6306V2wDPK`qziuNh zkUy8S{YK@2ILOEMN29C4N~BI_dGs9mN6Lgby@0g`F78LwKm>$IDLKy{+Lu z_avN^GiVD-VmSQ)fKp+CadK(m=eE$hErc9Ixk|eD8a$&tPQfB&mSu|3O|k{-6bWP}CXo=Or>%#hY>^_ z8PsMHm{LYP<%#p96n3^Yb@dtHr{u|$D_gES`0C5QkuQ7x3_7&v(WFb8K8-pxX_qbs zvxfOLiImJJrI7N+Wy0v$e|!EVFv^}^*~GPs^5;sT@>XPEW?|K8OYGTc?X_BNtJId0 zz+2T?vf!=EkZY$WAyv;hc1}}XLhneFD0OoFY)PzjmunQg+X*Dm!iq0bEb)>S*G)0O zbc$s{3v)0L#Q&Um@)2NLRa*oXRcP{w7n65V{05qYvJs$#Q`foE%7?IxK|n3#5w!&? zc5%@bD<7g2(v8N|liPVAak2$~?v$d0ZYXWRj*F$4N0=u4kYS`}BFiOO zg?hG9UQaM#*-=bVJfvErk@lvUZzf5KX{MTP%4w&bqLu&wp^hr5W;LBkn?_YB;gU?9 zz4U5iLfMp3spyeWR1ylT7J zzm6$UQ+%}MS%#JUY3A9iupKo~sH4p~Yp7C?We*urxWpMj6YZPO7$MnXi#=^@?2#n4 z)RSNY8kr>pId<(D5h>M1#^%Qohek1NQH-&Z6rqCX6No(vrPD~IaAJ#_(a~zuMpo^b zkXB2)d*u`=A=OdH^@JtCB>X9>#n)Rzuu0Rdw8F-f$4+tXRe}*ER7yXG*A@^=aTP5^lz{*~5T8|pq)JERoZ zI*C%phtgY9Ww~$ir5{P&@FPY+VI&PU_uEv~$-VbW5RTLetD8kXnS#1!P4s1y&ORIC zCCQXT@a5G;3j8>$Ke0)kj#kkRF2IFr2_Q;I8WpfU$tfoFtBp^HGohD=q8~P+;ADE^ zJKt$SJ*40QSemA&-h3%Haui0k%A`lBpp@BNj9(34qC3$idM9xO}YUQ zZ-|4ExUixf!r9L99wbA;+~$0gvJCNlQo+jIFM3zhoEN_c#xR1BRE^u&selj@^Z#*y zJDw?6uFzE`stD0w2}vF)hE+n{8H)gLvld$FfuCTJ;f{*&78hQW85@p7Z?OrL9HBKW z|3n}PNV3Zo;07ytaYO-FnOoX8A})5+hF~bsBpIUBl}Tzr6ON)=+A;>LyErD1GOLGO zvS^u35{6zMgGuL#_C|h5VUVW`mMsXd75T8zTh8K)Cfgva_UvmQ7va@LIubL92-0uu zNDyc6#Svgl5HxNKRcCa<6LL0komvPqJQeG%3U>2u(1Gdl@4wN&qrA^#5>T#MJR> zRnnBIbfqj!&1+f%8=?S!Z!TmZXf~8VjkLobSK1+OqCg5D29a>ggN}4?3RIE=F*-fD z7*euRiW@c6p7yX#ik3&O>jaemSEUd_Nmhz+p#(r`3L%vc8pM!1jVLeiRuJKXmY~YW z9t0@G$*7dJATA|B(i+81TM;M?VNfO>!X*|lh*;Y+%}vKdlzafxCz82IZopY=P&vVc z8*RasQkabvR>7kL8D_DQE!2bxW7WHehDnNX5|jjcL@LpVWWpkVKSIhC!Ik8%t+=CX z#sotdO2BrKUCtEV0x`SPqD`7*M}0K*lv~DhL@-fGbY7CWmn6@pF#pj4DS*^c)lh1@ z@C&bb&x_uYl4`x0xryk!v?`LugmJJE48=$k)GIM(qX`kn7}&wSJE~}`qu|NjgfdJ~ z`i&GAi3}M4yx<1&>c8wO6u)eui6x>0nrzi6`#6D;dkyj-+^U;*1FX;3M8-D76C7_c ze5Du*j(UY*A9KXTFsh!+u#(}NU|_@5h=sKxgNcKcbMO_pmTxF!o{<~wR5YlM0lAJ)aprQlQYOIVQGyh;FL*Mj5CUTS0w5LA} z>Q0%_akE2!Oh^|cnPjodl4+{xWD0aYM9u%XoTwG zt^Gr#nCwV_$CgsEJA^3H4BLZMq;B=_r(II`f{@bkH5V^q?D%0@eH<*JhRWOREKfV# z7WB3SRjq5y*t&}HCiVM-ZPo(iNjsemb!m8AY<~-U-~=Zp;toy|o1hUUYGh++B2&N4 zan6H2k@!p|p6U7C8;d`&_|QJ{@my~FRX)~bA)AH~(F~1Wis9u!+6WZ>?JQQ)HK$-= zHb<_c*;g5=c+7>ZsdD-ZVd3s^q-Kt3$R&>ArI8r;IR84BMD``+pUJquGjmd_7kukn z7x-&j>4@G@Gb49Dh1WV9ir&P}6o zzhBaNTyNa)lDWx`YolhN{hat0e;>`OkJ8lFzTWVr4DEpqlm5b5S{XO2=Lar1$x)y3 z^sj&AKK@JMAOPzqLA9pJjCiM!MMcMMm2pxb*8hF8=6JpnaAQzg^QVCRaau4zKj#*K zlwltDvkB1ATe~M~_H#Nj5rD|XfQs@u9fUamCvq1^7~qzGuLgsiGJ;;TMJi~2H;99l zLq-TkQ4z3kIe{Jv15%_>d^tEqmsW(5A#u5qMsIdG2k1DXmV}p6PLLxq8bdi#XoNfXm2?(fDa!7k2W65@jfj*{F??;)>h&iFNoFk>`!$m|lAL zamv_zfCG$^(K(cOd%q}%6ZeY2IC7lUiIpLUrk9A2n2DA+kAWByqo<0C6Mpf?gW*MA zm`IM%7=N`gkP8WsnS*~nVQL5nKIqqqBB+t!^@leV8r`@l5BYBXxKdDvk(6VS8yAsy zScA>Bk}s)Jy|_7<0gW)Xbmn)EAP9Osmwq{UkFtm^je`=_sED63eHdkkk(n9m23LglPBqr=;M0;v@(CUjw$IG(PxO^_i<%*G__JT%Hwbe*Gvp-fS3kY z6lT^FjVU({lMZ`#us*AcYLuG8=GJq zO@$Y80UA9)Ul)0IgB24_f&XLp#v84J1Y6)8?o*nlL7-VVOo}oFcfp?XiJ{qumgAYB z@~MZ#SvLuh1Zl$xbVC4I(OH_{fRKi73DFZQ0-}$i3Bf`D^h80M;DAY{V!R?qn?OFw zA`m_L5W8ZcMp0R-LN}6tWWusTDxnlBLk67C9Ov>V(b5ym5fv^`A`WOT%HpI|ilrNK zb2#dwLBST_<>D}x+` z78?M4qNsRF|r9cYq&<2Wuqn$b& z2@w(2K?@s zZnBX=+T|SxBL5*%Q4iZT1^UT4wZXMl^{9CgCkdjTwxAzNv_DhP3T2>p{`FVMRI+tj zi)eYFcI%Di*qu=)q9od~OYtpQ1~ddvI7+Yu)`=soAO%B_SJToE6R-t(fe|Cob5W24 zZh|W&#u&^|9#nG_JVG#op%xMlx@E9Ks4_`FV@WsSOCEDGL|ulKC?;~%$c{)Yr&xQn-zS)%&4rL)Je`tGFF9! zF99@dAeI!BCya{~$;lQ4Apw)yO-g_iQ2`=Pu`PnZzSdPI?VwLKYYXl`s9ys&wxL#3 zW<3aIskJ~dD3}sf61%Sw1u`=V)e;yGrx1MsW>?&?)#9wbYZGL_5kG57oX|-d8(o>Y zj!L+}Yy4^O$r)_CmelwfcsCm;5gfJPqn%}K5#hA7xxL<#u}Uz$kCGSW%MMUM7%%In zpGh68@C&|00Eetv&N2oXrCl=O3Q_e$O$Aif0b-Z@zupuR*K`&cBoIJV4>p2q3vnek zvi}KnB2~fR4l83xv|}7A6DM%2%k;OQy9||ldtkLPq7qTOr&21}_ZLKpBk|%Dbx{f} zyt^=5xk*tgJy9>pLN`&6%|L@YjubQ@_95011;$YpImfK2q$(%VFR-g0Mnt@45fr!E z7r8snO3=H+jA4s}Sq*GXl;lo&z zm=k%mH*jPaBok6M(qB#yWXGf>Xw$JTtQXZX!~e0IBjXClv;{SR7i}^U5}`3J3a~cT zc{KSJnh>T&v3zM&SKAR3cT+q;WKl0OsASwof&*cS>RS;|7bU6?$vGSI@)Sxq9-w zkB&ofw6Zts`x^*BRmnt3QO({HE-BAT;q85TD!GyIMvE+RZk)zYK8kW2c3-5ylQ$(vl^uIx*K0xLVQx9SEasyK%;GoTQx1Oro#sFX zorOtXc)5aiYb z7B1_p-kBmEgSD>fY;5DZeuJLw>%s2JQV#0Eo?cc?l*X>?7fj~M-gReQ=a6ZdL{9DW zxaQLi8t5n~9qH`d-jlTM?ay9`B_8hO-l4_{oaU}+GAWtr?(V@!>hB(Er!MdHj-jh= z@9XZ~mzVGT9-QFr@8x*w0Z;Ij+3N+5UjB{n3lEjV&hX)d><=&TN!jcZA4aZj@fn|u zhpzE4Iqn?~^3jOyjvn$VcW~`q@+l97@vicgL+>pQ^KyvqG5;wTPxCi#gaD88o+7W5lqprNWZBZ?OPDcb&ZJq>=12(#b8fuZ)8|j1 zL4^)&seph{qYMu^l%mui8FH;iZ6UBQf+Pa1T1m-CVAQ~j9F-6S*>qvkgIZeEv(+l> zL9_=q-dp`EtE*W(E?|z%g^A(o2b!<>TyFg zQs$(HN>WQT_0%bqI&LRaTXl7^q>hrcq5rth@{j-{VSKE&S`H$mlr55&0y?fPt>s2z zm6%`?d!`~l%znTNl@#XIYbiil6%tV^xkBAyA-?RHVgk7|X%<{|T1hX7P1^B=iwQ0i z_f>l9wfEkk8e`8fYw`8>-9evkWOF1(^#;FFg|?@+jiDo(&}ZxKg98 z1o&vAldji3`%G5)X{fJk8LkyOjDnSCrLbkHaycU9PZ8^3gDWj+`BU4kSxJHmt%|Mj z*f{NR#mI%|8q^@`@K(*dz0F(EqW@YNo`Q?70u|Oq9P4QXT&?m-VhncRHi#8};Enon z%rnPNUnm{c{BwM*3=SCoNZ z1c*Y48bZN?L_rD_e2fz2A|R1%VuQh9g*((0u5p#i9s{h)U6h3cAZ?{Fl%qnt)^|f3 z<`5*?6_ZUBEK?~G+j3!!9iYa&yQ`1@CW0FIPH#G`o2U=oV z4&*R7wWDORni@yM#}VR*&msu46hsg>G@K=8fjhg1&+1r}kJ$rfMsXSt{rE@FG3`Ep zB&22fQ>c~MO)gOwMUlp$m9OEB6t$SjjHIBrU@1WpZJ9y~{Q<=!v_@SXLLNZ`Wsp%| z>Ns~h5sOrWMHw;$L*Fu2g%~0-7V@Qm(~03<2tY#{7E+kQRGO1^#Y$o(lPIFw4DpDk zC<3s|N5Pv)ZrH5oSA=&W`q_|SS*f23U7(56f z>sBnQ?5a6uGK~bd!j%~f(j@hHh^+Wnkh)$_DNVsla6H#hxBAeBC5u8It9n?(9!8L# zNo->Y#h(5wrB(_-f)vW8(wc^7j2?j!`~>S2J#JR6C()M$E!an6dSsP435j7H`&!u2 zgmZ#LW^7^0O#hEK#AR9S&2Y#-9OBgWGg)F!5%(fO;LYhc74->oBU{#!*;cyKB@0EV zOWpRx3XPxL6$eogAo$6JS-{nbk*<4Q^d?QJ`$}(Puj-$W*k`*W*=knPnlM|i1#BQG zV|)GkUnU9CwE({8AqUw<)RJ~(p37iu3H)FPBgvSZi!f9T%#!D_%4CRCZG}DjVf?6y zwaf+aFf(e`5~od%-GaS<8}XF?YB8IT;iANHhL&nPDqnGpoL`V|(WqwigVEgTR;?M62tQ)5N_}6abEG`f5bCWu;U?vyE?XQyJs?3H3)Ndoi_W1v<_$ZA*|jZF5W+P>3= zaA#{ZMSC)lNBXna<)ml}qbNv?(YNzfzZ&fO@%oCOv~^0t^Ec%k6uR#Xk_uW{w45ag zc;&(oQG7BZU%&U=Y|UM_k6qD!7kqq#P-kZ%Dhi>I-4v1&oUSN=6|PxXa3bK{8A<9f zcdLj&03O(jtLK6md@BLgGw?%th9iuu$Ikj4g#?g(DgK6wTU#b-$dexQh5xj#i_7~U z%4$8}O{82T*_76db56sdk(~uKV;0{Tm3fT}55nPkU(Jw$TCtnIcM-w+7tPCOGBlyaexOj>f*$Z~iv;66# zUkR4xXcj4Shx*%udMJ->@dr+rfU9AkZ@HQcsgSHFk|=168MHr{db>emLyr0^P3Q*# z2#WworC6$%+0hP}QizBcCx&1JUqBN%F{i4Ci2WMEM6)*rL&V9rFx`4Yum89e5L}pq zDFX@`1s{ok3`{?Zz>^1hlsHO)wcrAV*&6Ox1rcGeO-LQKk^(Y#6O_9+l$p2;V!`l{ z3)!)zx?;sCz#=kGfQumq9CQ?W2o^Wl3Wxb7MwB#-TSmpWvatv+w78nRAOKqcmac&( z`q_f3X$QYB2xi#|QL>befg4F!kaD2~M_Pyp>5UZv6_x5Arl^jP(1O#jta}U=^XrE) zcnb-L1WdvffXu!%=_n1EkdL{-YvhO$A_b^(MmN(rh%^kNxGExgHzeW{n~^5eVFy0J zFKeQpO=_NL;hjieqqWK&hEOHOlL{=l1uGPuVo3;_@re9k3!I!2o&N-zosfb(sTqkY z2-0vFB=RRvTo*fmi?uLDKheA>_@;-P$TSl>sVs~jP&y-=tZCfFNobagu!{!jje6)p zDd-h_6vG)TFKr=^txy1SX&&(s5{fxL9kGYtiWKK@DewA-y~)SZz&%mu2X5LIDHx|< z$q9!WCu*t%N;HTKQK&#v02w?Ek)e(LtI8xJJj@)7CwoND&;oKeoh=xdiuu6cXod2S zqBBVj(a6Jc*d1Klngbz_*GLE~Dg({)#VNR%e&IWjh_>XIj>uvp0yq;2nvU3+oiEyp z*4s^UB1d6#7}-d_Jz0;Z+?vg_Gv8yC>?Dj>smRXwxHBXGQvWQkMuHiwFuezA7IGng zE^&omk&XF#DSL2-*VqDbSQCm78F|bj@c4>Su%XjPx%lCTICP8R`|~FxF|RBAGDVcLMgOe{+$t1$;*D;Rh>}r=u&Nu< z<11Cs7Up;>dz=*2D5BsfmdBHXt|(OoxlE4mOhkDgo!S+*QaetK0KZ}oJ2_O#V+d4@ zr+a+VG;2m+?TLyf!iOOLOR$0B)Sgcl*P&J85L9K#5 zR$zm#xxVFUxA;mp#PGI;*s5+VmyE!S)-XYB6*Q`xR~myZ-z+$}GdEND50_$!u-Y5h z`4)cdFni6+zH`)r#V~^F57!zv6f_mm$tuifO|~%1h+Ehy+s=#A*q0bKrOTo40t|b! zM~~&R4Lw=pShmd&AMuGcADu60Ggpsr*@9zLoB!}O#;P+OjoGDBSs=4gpbZ!yqq~wT z3z`LtB}p*Pag0TbjQ+#fp>?cA&DN>yh$kZ^b-mjE^E9qiiDLa)v8^s_Wv{U%32r@G zwQVjNliHz`HIenWwVgA~oLi8{TD#3#nBZ85JzJ2~Tfl{hlnq=&3tYoR386jQrlVHH zZCv)EFsl_?ymeg4`+^Uk= zAtG$j@b2_+l>R8s35xiqS3K^f4KmHQ3^P*#kS@<4s@i9WtdmjtV-Ckj39q zLEZgrI;2Hl-&NRr!3j6SUcehNWD*}J*~<_{%;fE0k+_?fTO~=Diu$$SCP~=){o2@- z)I(uc?HCRpMiasKUwR6kD6m!4P`dT)jETKG@!$gDK$z)3nHU_7iF!ob=m>@YE*}Oi z=P{!w7>+&y&aC@PO;F)iG)@{u722&_+pXYZHKM?gzZ<@ZtYb*ZyOxiui&pT51W_sS zWQvOE<2|Lsy6_Hzn2;H?MwO}u<^N;JyOF?m8VQwi7zTwWMLCx=b`{;#+rstMt#Ul#Twy5Ng<+L(Ym3%_z0Z*jMngOWrYq#0Ac@FWle zX%S3bW)G%j`QTp1O#mc_03<+wiLPiQC>V+JAJJINUjir3ag7!{ClP6bQXYfo43p{T zoiP~KqKl%f^PZq12wH(Da{n;t1BsYlDY}*hnOks;@$1_(>bF>qBFy+ns!NXDA`qHM z$xTecq&IpLf9MgI3P)v45VdRTr7c@+He6Yd2U$>sSx^UAP={5>goF@I ziXF*aDaQ41gEHBf;Q!Icx`0JwZVQT7s5aPwNg3-%0U6xfh?yw}m}-Zn_{kep0tt*1 zH`$|-*jgZ^s{}Bf-S`-hUP{|ph?Tw*n5rq&sGByDgvk>W8W~rAi*OGDrez&?%0N$3Hw2Tp+1YV?qCLh^ap71OpHxAWJ#gXbn}Dp-<& zVIdPYwLAJTl7w^xMnRvvUKp!!jOI`mX{5{DwxyiViZNhN0}(HbRYRU!@g#X&!&L)J zs1E{S11VQSeTh32u6aF3GBp)xsYqbL%6hb+&D_iz#2ihO+y`sVUbCr z_{5H3-{K94BCd+UBBD+q026A5GAIp7A(zCvPEP16juDZ_`yQ!oW{G1Y+02=W>Fbf< zaNInQD9FW0S%nnUCn&|6fdzCVS!2glg)l$@hnqY~;wWtSC4*1`Dip6Zp`a(?Mg&rb zGqgUD;{B6+YB6wku0Q#S7!j(w^CtR|>v80$X3>FmKc=|kX0?34Pp&M&I zl1KUDP2q$*Tcj9;e=v; zAX}b-T6hzhs-(w5CpyX)nlO<*jZk6HPAj^M!94Jx685|GPx3xDVjwpq1QnCNwPU@Sv;2#8A_zf^rKJriwHX}!#q#I2-4>E22_#4&C8AA~QdrgFpx|Z{2~r|RVL5?hlriXV^$m_u&6LdqC{!cY6^joQiP%&IjR+zB&1r|0=vmpJ%6NnPX8HI zZ_7x>o9uB^aCDQDC@gz&X=kt0R8qFuB-z5wo;$S@G%cU1g%p{yQWQiI-JMmdF-q!s zlma;Q$1SaDEm@GnvHFo(U=yEDU}tM7Qd&vTna zjz0n!q>w}Ar3xk?MIqM|3anLr{^Jwysian@oFfD*VV8Ugjp)v274W?05c1bDg$ zOdmx?q_4jM8?3OxZUAvWj=xkajKd0dDM8b+YTa-2*YU-&+z)CNcG!m}V zIyS{7qy+fWiX3q_p@FN7Nq{X1CZWY9th}}b8IMKR(P#z=G$w!?nMp4f9c8=TX#jU5 zuY^;b*04|nZ1Gx0t(kV#YZn8>5sKt`8^tKxMFp|75+H%#rQ`BeBE1A$bem97kWsG| zlHBGPL!)p4F0(uH+_TR;7mTfsKNDTF(S;cqg(hUQBPx@MTDvGoo3yf<6kGpD67i=Z zJ=W1iK{@m_z({eSgh#u2bgoCe24z>TF%6c|U3C%awMKohefQcZ{S=cF8IqB$+IF9v zF-K^BB)73}AKkd)k3%k)xm~{>RP@(H5-K65w64W8S;(zXQM5j>BUVyz$4+Xe5G2x$>RaUR&F(N&ZpqA77Q1 z6qKN z3f|>{=PK9=-N&{5!SH-0WFQS|NW&eWkc2ke;R4lw1)Nl5NzYT?Un+Mt{jBY8o5&mg zig*_zCI*V>`yOAWh!@1oFfUf*8Wwrz#V;c7T=@ed86n3C7wRtxs_;xgq(zr9!ZD6= zoMYp9)T6%9F^`QiQUX9E7w7d4Ju`x07WHVzLn88c2Ml2%8@ViJB}6o@E2JYUX~|0_ zGH5>1AtpOHqu8n8NCs*eCp~G(Q=+nflZ#<0TUnzuJ}W9=*`h0JY0Fy{jd(r6B`+Dn zM-WBiHoBuEVtUmpG4?W<%3S8%7D-HI+Oluy>sPbbNPyMYqCn-)+$J}>IT;)dEu7x; zX6(k06#^`P6JGE{7nZ=dal$j6^2`e|p*T-e7K$&L&_ZdJzy&5)feKW(CqWA;PdmbB zhz4CI7bw91CQxAs!r{Ua0JzYLV)T~I%qT9?$B8ab0i+A)Cuulp(vxCRlPE;#Ey=(M zD_EidL|8z4%%)J5;xwmVTqTU`snbK|^DdhpgC)LT2`^LvqyzmaQ=7^|gg(=$i1d$B zrVt?isLQ8P-6~fhXG}(R)se_F+u&3f*0ZAZaivTvTifc^w{}D!<%26->uT4#;x(^& z-77Z0PICJXU$+M@=pFo2O zWtn8C(W4Y4AYIC|snecHo=T0%km^XQQhgef7yqRGPJ{*|TWVs$I*rt=qS7 z(BTJr4xw7TUm@{kM%(=7Y z&!9t#9!C>oFt6t5zwd>cgW6PdRySDAyxO3~?&AYen-@tI#8NWXD2m~ZV zA!~o)bb2}h>#myP~aqEeVUXgdM+Lcku3zV!i5qED8Xf)V-ldHkeV(uB9DtA z#A8bd0s7@hcV5WfsHG-okclpR|JvzT1$B9vsSI5@>p^+e*`=BzhB{EMINE9SvLQQ&ViHkELIx?VY$5?x1q*cJtb$&4ut*mZXppH66I|=S0k`T@ z!fWp8ai^J|4p_;b|;|)-U0=#MLYhuLxxpn6X3Vo1aM6;xx0zI#orG# zj(5J11%7$QJ2e_L)t%bNBg7F%0k{Vm_^r;})&pokN00 zfcj19RU%_n@C0{2vXO0pw%Q2=39z61SWf~6?BEs>STU@?3VfreMLiaGCdzH(X{37y zjJlOIDQIB~o2Z2=|Hu$Rf^ZIGZlhl-*Z@MJjpb|^^T*s0#Gf8UL5BV)#Rl4zpdPYJ z3$3t+Jxakgfwaqp-^1D_{9%uOw62Nz>!Q|>palZ3(G?3k+ZGUKk23U*0A6H88(pyl z8jXUDt}7!T)pEpnaS1rj?ni-9#wJ5Zr9R#R{Ere;Lhj?)etf)mRspzdnk_18j z%HcvD=DosUEDBm+2l0fqv}6ryWVUlvgKQTCa4|4sFzVSRZPAV`SjvPDi^6^cS4rkU zjD$@CBm>Er|4m=mqZJ^W+3iTEA9KczW#pV0Bp;?q0jnq11Iu^&J>xDf@c+y_4Y^x z3FOowo1!b#{zxE%K#`NJAcLHm6wNX9GJrHA;XuT-Ev2|E3iT^xB;6*7=(U0stow(N zu1AUr|F)tOp`3!&RLKr8`V*7@)z8ap3o}t>Z3{4~?L#cb4n*4H7p>IV_((yD1&)su zZNO#>>%m3{x?*nhWTQaH7fOebg1dz5-6+Ipi|Ce(733?$6f8#o;DXm-$bBs<@J7nX zWrVXy`>ALVvMy&D5nCbi>~SY4g(;x+lLMs4*-%)IP$~gjt#C&vcS!&w2-sXuT;UIN+5uN}3I! z=AAZ}P1mW)c2XF_C|>5Z2A+?~RFx|4q%aEVl3^3PgIE&A1~w|oY@$tWS*^Nk^? z95Zz4#1}coMefVIOWhWz{jv#w5V25=f}j^khEce)Pi4JcJ5Fl5M6+YdUE|m&lzmw3 zQh5~JR$W*r%~metF?dndCX~hu)|CoQm|F;#8avwk@XR1A(5_p>;74W1xn(ViXJKMA_q#=1y^h6v#@DL$z6xG z!i};8^caL$NjJt%0+FaW8xh%xvg_x(pH%ffAdI!Z+ruBWXhT3p+qO~Kqk`v^Ef=oW zTwCCA3#+&z-bPUm0=V&$#4F?;{ekPgyJAwMK=0-iaLCrJt@ggiojZOp+jX;E?As%S zZf$+}`YK*=Im_g6OW*ZRlEH9DWoPQ`76pm@vkkCqU36boi{@`(0@CdV|0`52_FCBD z>&Qg)vAF=Ya}wZqn57uvlMRuxZL${f4IJrfF<)O+vc3CsT%_kvxx)$I2TN-cRrZi< zP?RybQwo!VJFL`r6}EX8HcPfJTSw(--6wrtw+Z%83xOjs{C9vsgn>KeIpc?c_oWFn zM}EgPMa*RnU;{-+g?6ozg68E=!c;tZ6hnyP3ZE2QFCk!0=S>O$F%HvY>jO^_(}Tz* zLuCgs=j956)mH2vQ5cgziPjDqpa4CCbVl-M3wJ%mwjoNWHSF+PoInPxV-IamY8hj1 z(8G6=!)0q|QeSgeDzphm7eOi4WZP2;iDEcwNC0K91(rrg3ZP2$|A1+l_DLe81<=zE zpTq^5&}ts_T#Ca9iY9!a#&0P_Yf}(Lw=gkVKnCs9Qi;|&Qv^S)gg42vJtk#I>=R=z z!ZKv|UC6~w957MNwpO`wRRbi8ZU-~jK#JEW1vmDV<|e9h!V3=N{|GbkbCBHf)lU=5wMU3DNJXEXt~D)Q}8n7 z#Wx3;ddt*6_qTH!w0F0lIM4%!TVOhP}- z;DsrdH7`mjsuWiE)ee$JFxEqQtg|@Cqia)eW$f@v>7zZ9vZ8YKa4aJUq>!YQG;8S= zPFkP|QV?Oe0#&5v3lXGn+#>;{_=tbzh^J^iDJqF3)G{AsfRpf1)fI}cc3#Bha6;NT z?La`|5=au1xgyJk40Kr7bXejQ+-KVU)tvq ztUwP`5NkWPN0R4i?Vwg6^(#>!+r8F&;LMeVr`{Xhm~&pGJ~3pbv>#kgd9^#jZ?5ArY>D_Mun3# z_orbnL$NY=Hd>HO(REa43w1rTO1U#cCe)*xxmvo!di?l)hv$l=KwaYLFl76DjA;*f z1cGJjFeJDH6Cep5YgN>Rc3-EC54epigIbxzrJZ?P>N#N`NJhO>VGU}73;2~PcbqW+ zP5mmO-83vEs$6PnL1=bs5HqV&|D{s(sBty=g$^@jaAUfT$OTLAjsiJTU!`aM^n67M zhdygR_4QE`Q;+=whvUm-*+T%XaBQsui17qKEW|K&b!b=nW)8eP?%`jtj$p`8K3v287)HywPtck>lJZhvIAnErn_T8k)51=mL@`BrRU8bi z>(mYtSquNht-xebvP3?G|AaAJlT0)Db?^8-mqeoRq;rdthI?lQ@`F3=Wf1Yy!!t=0 z4YUcR3Why4q8kxe)r$~R2V!7ZlvBxhx_W@|mjL=Pe$qF*`!r*F#D8KV1;-0ZR6v)w zTd1b1HJaeD{@}2c)<$E@%(UU;jyMd3pe zbvJcnHWUV$TktQ;|24~!G)5j8V*b#Exs$lPM01}sqgUBV$^3e~bY4(`iF*hxS2Qt( zlRNnNcC~xE-Ivs4^EDCn%R%G{L1J|^W-E3>N5^)#5}JX!1$fL`I9Q{hqHB{KYFT6f zE+cVdtNcw%hF97&3RnfKl1IDnT55umq@=)p?DHx#YNHNgO6iNiJnBGr*3$HJjEHBy zWAKI`NoanAHTmp{H|L0ua@pGRi{^S~#q&p^a%ioXftc8keH5E|`Z5o7!7(aKL)L~@ z)y%iR2@4RX!6yNV_}U|U3xw#1Z9q1`-AX}Jz#%6omQt&3M>e9&Pui4h#JeRX1d;5N zZkhl$(u%Gf|0T)K%E@J8R2QdA@=C-a)v2FquZQ!apBvdtJWhJ~ON%o<*jl5inK|RQ zZ}a6;FeOjht*cN9#$Xc_^OWAYIt5_dR1wN$G88k{R&f{Bh3R&VWwSsdHQl^}t?YEI zI~;7;ePPqhK1C)F2OikOv)3erXZb->Y-Y(5^~H~T-toObsv2P)C#rBn-q$Em%a##N zSJ$KxCZ`2k0JQ~!gUt1Siu1UDwA>Fe4MJYD1(L9TUo%n^8(mS9fOSc>YG<8TJ4{q- zBw_gveOJJADR11Rr>^6BoETfJ=qVk5p!}I>UOzY;N8jVPm^B4h zVMX6E3fja44u>^o_fKF0J%iPh7;B*I#aBJF-5*;Nh~r*iBz*~T}#K6dBR*2~EpC&%2MD(mx`h0-fP@8> z|3n5_&@r)YvLj)HA=)cx7;Fz-c=ebu90-LxoJ}?QOXTBl-@B)kw8t&9*r_9%Je*Nj z|9s5Bmc9Z(+jB;o+atiBl%FRmlXoU**~DJT$~u08F{v#xJVnWoZBmow*q2vbh$9gH zH*xQ%T)8G+AKcqh@QE`c!jR%mr#LxMnmf3*J>aSzl^gb=#>YW)_SzGU<0Rvs)NNsV zP)k{Qdn!zvphkhZZ>6wNDo1`UIX@WFR(wZ3+3ko>tgBLtH|#JFvIIIClre5sF;Fjg z*YZR%9_a7nj)9GXL#Qb#H;S%Ms!xB91C*i=ZcWHMTs*A$BDLVNPk_JlT^Hks^>z9V zNsw$OOJSBVwomPA9ZZonqm^7$Vw|B+qG05hS+PQ~3bE3WdZ|7!Rs zPHXLy3PvdfHwGOVvnT`EjIzz z5>P-MUt%e@09pDm!vu$1Nk}DIViL(Br95(_D4q1tr7PLWa>%hp9MPf(qR`^3Efjdt zB@97)%a(S=+7L#zESz&jJB^g_Lzn2>utSzMgwoDF1(gv&4B?c~|Id{a{ZmalHJlPs zKj~Zv%^26rQ%OA;r8Bn@6Og2qdNxQC(gM+>kVF6I#1zs+{X;WOLSIew)k$R((?k?W zQDCSETRQYtVTUEQSYwYxcEJ|`%+j+cGIUD{R$6)Pz5UcWve_x0?W`CI9;y@9^6XPk9v{=C;GoBF7B)Lr%V*j4Km`E$N(xM$(`m++ikEt{{W+zc@ zu*U&)Zj#Hjw2DHLdRif))CmQ|xn!l6X1ZyoC+yVcwLpec|I8>_spluX$Z(kxs&C2+S* z+>}5GMxTcKKtvIwbi&6M{5s|mqX@Mg-(vRAzsw_N5K)UtBqM7ndZjhOWiKZ^cG+jA zT|qR_Z2Q5oHmQXrH^Ch?iQ0!JK0>VskYtpIa}TVc=teI-dg&RAHX&@MU;20{luy=4 z?7s&;d40YpAhAz`K_f@ zk&4~{|6@M;g@^!J*hG|MS3m$!5Li>PpylpVKMr=V|AYBMpo2sPHqbqYc^*VzgH9-{ zAf?cS3i@9OCDcOf#ZYwLOWF%{xWlG_a7PLfo2u-`!`Ok$h7yWV>!!w*BoZ-M8T=I# zg~h5Hc2J5JT1gIxB_}6#(Tl=Dlkko;x)pxWj87}$8P%w?Bd(ElPV%7}A+?DWSHg6xo0s~{6K$*4Bk zs!{(-q$Wf6Lr+rDXjlwZv84FO13Gd_AY7J%QaMLjx-phj3>nQtC^ZrusBJdS= zpiV9lL2XMTgI4&Z1qE}78hhr_lG#jM8f%(l|J)nXX0||@-O)4KG}<%`gtS_gQ;ng- zVmcA0pvtY1gO+?6Cyff7_N(7qDrbxY@pU}iWNBNX%hT|tU zJwrtZNpX-$;*{$G>D3v9C?*f#Ohb|CPMkjIfEdc^Qv(^*d%~}vGsP=S_l8pcTvM1K z1nm4qs+$qjLR<#YA|!k1AZIRioxW6S|5IHuvYo{=ZX~l|6ujjRu_TCwU`uTG0Q;*E zl9Q1C!Oygc228LqvuANFCSM`cLXyo^t`G`sUUe%y5T0%~k^syWG(iTy9FC_BJskmr z>rZBx^+%gHN&hJ4mX^6f3K{h6Nw^>dgsdoK;}f0Oe%n7&x=M@!^{x7dO8_OrwQAxO z2pJASiVghea+ES_XF|e>{<(Kg^C=N4>S4GazAi*$@<~WGu>mF2NE7uHC_bkvCg85l zST7Q9&?K`3PHdOG1}c$B#*w1`Wp}t+a0r7JMcq+s_i~3ksyMJaAU3h;!jG@~fo1bi8-D!0PW zw&0AE34-P^#$-63L)K~p%oSU>g3-;DiE0s~73CNfA`TODTQE}SOB)EJ(sTHG6dwQZou=|8HD)ZA07Y;# zAO*OEbM+n4SGg!{P4sRHBi}^H4Ha!%SG|X6`cYZfVUJNPxfRC6Zn4qQ#+4|H2nsz`Uqe(qy;Y5hF@4^nE6j!(qGUSxt@>??`d`&uC=}^{B-p zT;U2@vn01i`o7i0ue8eX$ujJN_s>;@CkvfdRqbC{-LZD*0Xpzi>1B3a?w!F9o2c5! z%oS%-h&v+{dQvGn@vlu`2}|LSD5wz>;e1Hd@1_7XDYY73S)oDQKb z6gd;H6QD#%JV0W=(3v;*pf>0DFaYU4Ef}$=lN|9nky;=HXG4mP!=t6*IOk#qg&=?> z)RQ=(5!M)k|50e1iBqbc*(329g%SJ_R0$&UITW#Jx_X#`I9nge8IYbEze0SFjp~^5 zTM35%45Ba_&DaE_P&2^ziM$xIXb})d9D@-lJA04}NW4UhNH9wbkGGHr>?pMbiU}>? zGS8xoMbwNWp^s7IL7BL*m(UAR*n~}lyBpIQ7AXr&n24X)JWhLzNDPVjFdOAU#?`V5 zGGGTQ`-v~qvWduxO?1Q`(M2-ov$7C{ejo!ZQ^qKejBQLtjA)1l;;ysHyzL3JO%skq z9Ioe3j-eUGNE8rEyfIz8j{_SsP;4G4(1J=Fg<7z*tQe6>M6t5q3gyZ~t%;VE07y|w z$Cn_k|2}KMOd}dsybgw|3YB0;b8JNGQ?7y3j6}1=QLqJDAdI{qyzB7AU91+?*v5y5 zv-0po{((eEOvi1^M~u(}QXq%@D1%6xk749Qs0ay`A%HPZ0~+& zdJ`~P7&&{O#uL#OTd)TbbDR*-gr4}Fb`Xl)&=*&5nXznz6&W=G7)yI_h3WH^w;C-q zF)M1bw!qprPiYi_+k$=@%d?oimJ`c1AcZ^gg}8K_$2g0zRLgx*9Q_~wcet|@aWJeA z%U@%#qQgK}h_jJ%xCD>_aiL6>T#;#WnR<9k2J@|%`xmj~wn{m$I)piCBS&*NOvB5u z|A?|RR5B|J6pE=ruG>l+5D|lZYXw*6%78mTX*r9Lvq6OXipl&nxim}6YzI+!nZ^kk z{rF53DVs6qx61rX&iD<6<4QL%oTZDE1Bp2hxj0sn6L~tVN!lOO_{<0-L%C=L&D@VE z=oM<)Ov-Xs|7F zIE>hpjBAt_^CZ%v${0PUzTzm>E4W(lv5ycn?AXOEXa$#<0?>LP{xxD1-h3RNS39A!z_lLV|G41};t|1x+p zG>ybKOHB0{%ZZSS6k&)F*@ADe#F3NvZgE#{|$fLPP{1((}FD>}dG=)>p>&<#e zk>^Z3C(R3a5junf;!y6Ua<%P6AGEw z!}Lj36>|#_nTkH7Jh53gJM^ufxslsouYt`^<=hb$Oi_fxHX19D93-(3S+x>DSE*Qe zWmAi|kp|WT+;xjFU^2mIg;FpyUr320m;%PzfHrjp!%+%6vj_#a8lq9(m@r;GYlx&2 z8kS7P*L5^alVO?oQD=k+tRaQ_9U6KR&`=Cl!y*IqMFJnKm>tu3{z3yWEGjKhs<40a*PXvs8a&C&?O7e2!&kK z)DNd11vXgHwM`3)XiiJZww=hpLq?ybYlp=hlbK`5A9a%pMIVOU&Dlhep&^Csk~%;_ zHvlp#fBoA#nnO>f2ZgAStz}pZb!3-mg~ri>Z=pFhE?WhlPMFh`@TAUOGYn@f5&84V z!|6ZCJqx0VAYaL4L$SD!eOf21Gk#0CPzKo)iO|JC+_G$ExRo{>{APss)OKL7>#K;$ zO=JV@%m0%T7%9%t#ZA|gPIZe3J(Ykz#F5}+Bw3P5|1hTL|LP=fnc{ANRDU4XDaceR zm<)DtB<0S*@ zxEfo~iNaoKrbg!TjftTgv#bM-X<22MF(FQ?y^W;4+D$C7`%Y)H2!p*}ntKjoGeh?P z>N<@xLnDdWGptDbR_m|}dwAcU`7=BVHNx5i|F0a9)v!q^;DVv?!7e_-ibifhWT$$y z*@&T$D7Z7^SlIzv0@T#m;;vV$*|$1wFy0w3l?VwGJ0bqFxc@UAc78WE%&|S(+#ZIL z1FJ5&Rj~en2@I6ZvRmh928{XU#5$ywtEC4wI6@FHPODWM!(y<_QAvHKV^Psxh0{&v zPMjL~mU{3m1r9KWn?ey1uN=JD-`H9SeKwXrG4e`+B@>Dgc{zNG=I1z(TR1`iD}yo9 zi~iZ1f;BkU60Zn2OFLw##1S#WOOO}i5Tn}_id;6%+>L^a=V6vOAfINCsBsVEai$*2 z$z$$k8w!XHW&8d>IyC4a*|B=KF?fT~|BFiQG_MsIA*tIsKp{K)rAO1nJ{NC?didX%_{MPL66*uf31RC5Hl9u|MgeIDwUn}l{HlQ8*(aGX9QE>$j^=SbzDQ82mm zixP)cG%F@DP6Fff!Ar`gat39_)ldp|6XnWNY8*}eB7i$u6_-g5K zZsbk|9ff{Vusb8cKvoc+(t>pmawLLpVRY7o_*fJfg$QNx(ACo#kGiwEk%@2!ZY<;$ z3yD(a9FdpJj{~l=w1*w+pIrHuTF`l!drfE?XS<^JdXL?WiZbp%4FVuda5<}bK;{(j z(l-;+=ZrIuPfd(l=*!cx|FvUn{(w=LHuRkNY4z!yre;)5Z3ll~vxiabWd;j4-O+-0 z%tPb8`+fe}*Yy2>U(uTn23@?t51NDQJOu~>1Z=gkRccETDVl1zBWQ~iK{5%WkSbV^T`gN&lqjG$u$8M; zwYW@3sHs&we<8O>NYYZus9LRN+GBo=TTWahXI5 zsamY;*)!N`N=uOvB}5rjua%USNw$29=oG3znxqK0q*%}D%uP+Xl4|GAohwpP2+U1F zil|*zd5yl5!m6D^|56BFN~%?rRL-T6C-aO#`7-9rnm2Rq?D;e3(4t2#O~Bdo&j?8( zNFm#*T^q$xRKsM$s+D3+WM;3HGKRoRHfxn6NJ2)hO9EpQ6HgLFlhM~?HVKR%x_C=1 z?Oe^iE-;CLgqv91ZngU*b=ahKqfSzMOU2u=TP8?Kt`&jf(^V&k@*6j9i;cCO6vaVx zo_nilLO@04g*BEy>;UMX1X5@L96M!f0^e?I6(_|eq*SC>Z?4TmAZY~fmjo;IY&05u zPmQu$cm#~X#wOUc23$MBZNVFerP4G`jchxI@Msnr6%>0X{ky)F~t>IEShzuMI35RXHr(C#{^4eU1}W5S{+ZO zg-ouv|Cy<#+7^%!%bCa2TDS7XJE6wY&CCk4am^zK-F41Bv#eCvKU=GHf?BL&3#FtT?KIkEtKGE8Ob5G~ zjqGd@uydQ#G=UN}=S^?e8He5SYR>72*qwAw9jeF|TYfp_nV)*0-b_(8^U3Oh-tyWh z8thVItyDhou<9=Rdgwi+d#t^fKQtw%MOWKN=Trr?*nvuC6$DKJ4d|=yWJgSe zIv{BD7D1P(D^F9Z$!lyeKC%>Uf|>b}6eRRPQ?*0_Ygr%;bErd8@h?;Z++nI-qJ>@o zv4}?G$+k$*t(+9_h)#S-6b|z)Ct52gzhMx7$P&bfkRmA=G+h$Luoo(lv5ZC3m>DNV zH7&5B4L|(M){0fOCZ;imR3k$>HUhR0YK?Mrl$(kgXQNic&5T3?AsQhVDn53NT1QJH z^FqkMH~z7bmK@a=VRXsw7;KZ5q@-wm@)Ew3uVQrcT6l^IMHM6PB zZE~}l(`<^IyeZB~u0sn*IGQr;=gg%V{dAn;V>_jS>-C-}D_UmM5R;obleKe;oy$mRM`Yl)C zOQTNB-zqL63UGq(N(qsI0$NBsSvgdGlv!s=4+qxHw8W7}E6qId#meMK|L|^E8|yn^ z%1_YHM~F`pjoV@@RFhP86z2Pj$V`1OJlm7rnAUwS1YdQnWEZu zG)<|+Kzb`&{JAG=X=|Kjr9wD)a&4|hdm3*qD_O6i&uk@|TjB_cnVubTXU=??6lzhA z$V_l!Wr{9dJvL0KT`+2_ZAr|)0#@#ZioFK?4A>0UNT0${dn@}Ivs(GZHIf5vJ;`tA zidI^M?sqckMW_oe*R!2X?q)7o&~P)HB9NWNtG2S@Od4j=plAWZ|3nfHU&ipN*J`q0 z6Cu)cR7|jK`9_OI<&0DMC6Fy_LB^ROF*|Gl${gpXH9TIP`F>nhJ{zbx8h0t+u;P96Q4^OW09mBLwKGQ= zOOUH#wO3iVDN||1nnQExw2Z8@Us#$26lW; zp+IY#7TDp7R(ORwmuU~oAoXhiwqy)%;Z(P#jn@q3coc*b|78-Apb1}On*c4;r(8RY ztOQAc9Kb0>RraE7BzAC2Pitp_#6S;9_oGP)?F`i-;2*?Pg-g0BTZ5SNdT3((_DZd0dT=oU|qRHmJ51SQ>can48;?+5)T#+7n+$}G0Pk7 zAzSdvCRh!5NzYoa!WP)V+LcoAv>ElZl4Jx$6!Z`ojDjzC%VbF51w~6xj6ypI-SPYz zuy{=Fqz@)0%Nq(z6jsX&zC=6NLx|Wyo1mBH{Fw#T;(>`DTU<$_v4gK+hUn=8jA=od zI1pE~#wdKx`bh$e%|~-Yfh5?-aaf7>`G+PfTuGAf-BdIQS0G6?k^v_$q*Fw|g2;tBPF>@~m;5P~Q|tth^o2l(%?ui5zj${ zU6@A#P#vmyoJa_!LI4+M-ksPf*;C})DV8P@2%uQ^k0!6Mxm6_gSm`*gx7c(-at*5&q!LUm7EHd z0;jaX1dv>ma*EXuM~Yr)RMK4bn&Th#up`xjYy`6lICYAyv9nlT7Hbj z3T0IcMZ|bqTcv;x<`qarV(41{N1+-5>dgO{5VG$Zs$}1Z5H1E7wgMNJgg@kFK#^D=0w=W)%SX+{P{b@Y?N*4UM8^i9b+!mAplE}Hg`T}e zE9gdHIt9)i|B9P+(MyPeKa5X3eg)tFA&dIP#!13gAcTd~f-7u9c0_C%@(3B+rtXji zEfy@|?UI=++Aj7YNMT=|)?gbHgwp|zMtZ1)3fvadLmNy%0xU#35Dt88#}p)2JILPU z^`G<(NTi@d?}f*aU}!iV9I^!&SpaYBDS;N$gBt{Bs{W(|P%lzm$E=}50p`>8oF%q$ zLdzvU>TJLkc&Jk@-zqg)r4ok}tU|vfu!o9e7(s7Rge394hqQSK^0nqq6suoAullV9 zm`2^_h)0w>hR7D$4?Inc=MU42Ak*g?!}5#JAi6;)d0JAEGV z-Kx3O|8HSxD=B6O0fnZ`ukeO@XNQLb6N8PR6lRQXqC@D)AOodpR8*NJO zS)O5lFaao|&KXUq>%W>h@oaUY(KQZEyV7~O|TG7hln&CLRgy+YKVvs zgvV-JE$}8OjA%)yrbs}9E3}D!u0m`Iph?KY?TQ71*aAyvf)HA0zc57RPKWsVooJi| zafU`vaD}&xff5*P5=_BN)Z@mvL?DK2OcY^4V4-y?DJf_OgRGG5MxA%QTtY;`_;A6Q zHOlxPvbXK*6x3bFD(Dmb;V;`=+?pUEuk4!stsu9WD>NrLWUR5|m?+rbs3_f=fe}}r z|AffBrb2)%AqjFp1ZYcm+toDWCbR25u4*HPZa*9ZPypiibaO%gPb+B1BwECSxD7XF zPORvt9Lurqh92W7mjyGHcMU1@+QOJP<+S=-RaAvLG>K*rz-o$GO}NptvIF-PV9OaW9#;4Fpdn2{+J*MSzv;Rmi<53X)y00 zJ{sUqU-l|6_mW(bBms4_G-tvFR`HjjMVqt5ngvmdno0p;q-h|j2D!5Ia&mA3Q?P1; zi3ECIZ>%t>HIVm`@2s_mU4tee<#4y0HHU%M!@f!!&-I!b*k4f=ThK-oBPo`c|1?W; zCg84yDAd9z_!?2`n_U;2K{T(VM(?qyMzbAYZ+OLF*F;`8qzxyT#0>03@3z_$kW-97 zh2bF`LQvM6ALBmnhA`HCPz!(CM;4EV51T zX5A4$NicG$^4NKxb=&ESOhoprBt#;#E;x4ugyu)Yz2#RFUKp-T%M3^iLx;@3(A_Nz z-OSJ(Lzi@kN;f#b(B0h)3JhH;B@I#{=?_p*5asx;cb#>ZLj@2`@XMB z{MwA)(qGeO+$i@aTwiQ%uL;J1U={oY?)}Q57sK z0S<*Xy>QOUw?0sDec1YVsIv8f@Fhh<097A2p?MaflSa6g9<{qupNIbUjmU}({)ta} zpQH=PbE_kNmeXhX$5M^xnR?HU|BhOlGd%bWfW8zFU$=p#Ru)CyV!0N0fA|SDdBuQ+ zR3g*iCg#A+wET#!*zWu@DLsiAraIf-vpz8;0bWE3Nwkf7rWFI+RX9T2>{y&+FBbU( zkho@if5K0CqRRIZnwY{qME{Dt(5)-7cvyU^&@@U82vH^B)vYk?bZ!60ZhPO={5Qou zz2QMzrmsJps}0on_wMd%Xt5b12|1=pme5vICZ*Mqx`2`N@m<3cJ5l(RAGNP-{F4_N z^+R=4XNcA|{|8l2bye}t00vvzah%3HLFc{unWcGQ$BnCbH)fCmUqW){{rhw8QmY|8 zv6v|GDAEE7KWtgFb*zqRwr`~AIiIbwrqZj|XExO7KG$jA33r-30-U!jtqxzDqFlDD zcpn*Cj>Yh0Vs+TZ_)Yysf1l-;dM^3mGFB1LqeXUP5=KV-gS*Yr65FG7eldkXUMr2q zmA<#^#C^@Z5cE^~=}kDYFcuX0At^5=ORc4_b!7a#y;`Y7cKX{8-ap=zpSpREWofrV zqY3CWgrz2HW|E1`(QjM@8qJ1z+v)*{l^mBCcr^ab{N(gZag(qzA?M+GYhQw>M_SC6 z0k1O3CDsR8bl4|~WXGTN-^(f(!uuFsbNLPT3hLER)L-?5^x^p!5po(7eNal$@NBVt z%I%;$fzP7mqCE3vF`lE=U|vEmc9^%)Q++EOyl_}|LCyTTtct*AWJqgdmkT?ol$2$% zqu$PO)ExH8RVngnN{fJIm~in&RBV~?a&W8dFR>CHIx#q$SgkN>Y5t+ldtSr#idw zs5fGY6b5J&V4cN{XBU*s$&MhZ!2P4g#~EW;0RndR^wva0dAtjYF3a47vVT%N#cp0v zRa`YZLHh}e^ir8J|Cy(6;fddu_rwHD|5z)OP6fIkj1?jVNysfo%ux{fB=uj&uW#V5XR@YP2B57@@f>_6~$QL|d z(Pplcqc>DoYeFF(b$VB=wTTIVIur^32S}8>Jkv|b=5l@ zYjCxilS6=PhFD!}5dahsAgc00#9&GJ38Ar2o>bs>n8pV-#fB1#x|-f`1HyX4d_{5N zYJIQNuC|oU4ZKR}0}NOw7i^rhW)ROD$e|&fYHW^*Pt7($Nj7~P9_tMAF08jmsxumm z$;w(WZ2BA^q$usRBIqCNx3YxF+3v8;8O&PUd4Bay(pK<(gVZb+Zmyom_3OdUixiCs zF}58e^{&Z&^ zh?(+mLy=O#WkXr{)@~>stBD|_O$CT@IjmwEuN-x*{4dkc5Vx7%)_L$8ZM zzBUR>oN!^I6;`aftN2Zh8>dw*mxJ-+@BNZETh_mQP@1I8hy)OYFV2d1Ogm2e7Wp7I zs@uZI3;4&+97;vu(X2VxOQr?lKVr)bmYLj)qE3CT{{yxiyz%Gf$KVGi87$!i)0@!! zy{0vxADTLQ6j8SyF%&p2^{4kBHV)(h3_b_-t94 zfajgw6VE)R)m(LXnTa&VLI;X(#8dJjo@jVL(S1VYIJ_BwP7ZiD{DYpzQP68}j{EIE zXP={8iPzRa7PA%vgB zhmn;x`x=wdQJ0=Eq+57Hgp-xr-*WK~>@0P?LP5IM!sDJCqJ2baxvaWgY3WusWca#P zM~K2MF_+_Zhf+0`X0c|6y_^J0#x_b%`Q>rdVT1 z>ovY&sR|AbzQ8XuwZA!D6;l7%dPG>2_>l|8HK>t+*!Wl*ffOysJ_BqvKH_dnYzW|@ zUZpPqH2WfXizpLD1h!AIxjaX>;`?A4T@sQu0+*G_MHX`pJak+c6cN<=hE)R32zeq0 z*^_e!IR3&_N3G(LOvxjmoats-$!Q<``RmGdy%U7muKe{IEWb=MFf7PZ5^#Y3Xgi5G zP+aCMHV62ndyRCo4u1WnhczV4G+AP6p9ySBwKk)U1z?Jl#$5CtFH_sL6Y{4hk$mcO zHflpsaeLZRVfXO9I%sw0dbj1Y`?(#pg9w*X?5V7B(>-7XIP2c~E;C!3@8>EK`CX$( zBUKrYfm&H0)_U4NX!bFVWfZ{KA$x`Px9sh`6^@VouV` zjP~KUJQ|oOf;_n-rHc*nJS*q!ZjnCMY_(r{`*9H1kt7&Xu9)0T zirD@BwDFvy_3p|i&SjtGPi}8uIV2)p9g;3G?mtO>)#^YwL${+6Ki2JvuP+l_Y1@<~ zs9rzrwGeC%VyOggE@^na44)SmT9Y&Yx`HZjx`Q;n(1>U`>ibmM$qxNj_$=$P#6HU* zgTfv6JPWX&&mkhgq%X^H0VOu2Cgc}$lCSzBAo5rl8El*ym%VQ_V@s9JT#BgbJ$s6g}) zqDsq`WIx0U=qoq^0n{sSWY9Zi4EM7z9pwX_`2WUb;LPWT-< zvamZR+7S%>(q0NEjeSfe@vKJq{rk<*QSRT-R8CWKc-PMK1Iy6Xm<5dsm1_UAM@41< z#{HO*QQ#|sz2o>cI@K){x!z&(gRT8tR;N9;c7|Hve|g299iQKbT7UKA>YE7aRQ?FU zM{ZVY+DtJD_WX+4_+3kMcdnN)V0U)I0d)rCq-vIb*>TPsDOz;jUG8NL^jN-xg-haz zemDyh&tY0zA8C^`kuaRC|DN=!4p~f6Tma=wFBEugpcZ-2aY&=evPYn$R$>@f6a3bO z9N7HP|JTcJ#Wo2an0~$x946MV|5B`e&#$j9?(iiB{Pj3QGk~nXjbE3m>9n_D^3%od z641ztpHEF5&H{u+_kZz+cOQ(~z)8C8AZCv%UwdOZ?ZUo+uQlB6?CPilB>CsxevObk9C~ibVrgQKJ>F zr&N7DntCIWTA+E_W{e<`Sm))x9=W4r3OMiE6t z6h${ZGMWbEX1@?s^P+l?C>6&j@^+TqP>ir_*r_#BuAE2W5C|-z`SHYfm|pNLn?P|f z!=`ZlWlW`_Cq$ywf$^O~4G2$he{O9?_|pzzrBRvJdEtkrmqFS&>&lhF#Iwzv^e-B% z3B4B#0EZax``vExn<%`saGnBh6*jfx(eCsZDR+_rJct$fTe=LKods%|5%xDIMr(T# zH4s#*o$vjKSO#hpsgL}sTi0D~Ja^FyJu}*Zlju26ffRulZwTAs8vKHGunCu{6xqv< z(z$kNy%K<5u+Ej6DrPV_W#EuSeXLXjc^iD-(cx|XT%B9a=Tj5V&ohmF%v~MDXSRiREB`P39wbw&qGKZ< z(WAfJF<`m!PH^KKh?Om^ajbUa55qig`%-T9@bh`(WAN@C^s@|(N2v%D7^MQq*rj_i zAs`2pbUWh)shzE1pA51|dP2k!ghgLeu!KimOeu@MV1wMiFB+41EFkJ86M|NTSiWzz zR^Dt6?9kTsB^E90J1fA`pY8v#HrU{_wBM*zdp5b52oSGFex7>0X>p)V3&&N{{*snT z6;<(6dGFP!d6NMpb6_PZKJpvWX-g|ux$}72XJf32oh`-ud z;j&?_*?C01W5|Un;UblG)M`!CUgg|)9^A**V!IOzw+pHjNiPV9pE$J$HLBm&UPDt* z+@2T8rOLOSQDgs_W9lqe%zb2zl^;Bx+RaM)wmdf8nR@V{&|AlD-M zkub4xdCz_d&&Hn1_hcSTU5%_#H<=bq*%ni;Ks*f!Xl}r!Ua}k@f~pe7djwgC*@rw> z5c1r63=A$)e{FBj5c;85_u%l|@}LSw+6O0x{J&*VY^j0BkRyrOy#A0Uy?7ammc2Bj z>sT+7z&agASQPx!ant)i`C6#ud~a5(O}xC6Iz#|KG!im6_lS3V^v0pHQJFu0LS>_j zI5wlh#;#F@i+C@?!>-F?i1+qONHeJ#CEvv$soJae%oY#;d|#;# z=Llnmt8-xIzUN_`IhKI05F*s#XW*7B0M^8gf`fKKyz#`84to_*t6SD(D zW_-~u*X3=wWLA$?&E|Cth*dA?P)5}sXoP|UMR=guff_;YA6MHMuNiz&q|p09s`MpB`^ZSYgL{WBXRSX_^H8>D{QF2ac(;S#1c;az0nAAclW z&cfGW+?rK^*8lzYWPXAl8U<3XS)qOI3_O~g*rzMD=E9LUS)g z*bN;u`1Zh5_~Naqd=UL$gBqJ-Ti7H)l#2%PGNjjT`{)dqMfEL z=QYFXx9<&$LRpr{@HT5w-Y9D}&^Rngoh==OYbo`8mGeG^aoB&N8AM*VBc@!@=4XYAJLFc+kYt_0g?i*52xTC5Zmd&bXRG<2T5onL zIl>*|8_!)U0tK++`q_v6aA@isOCR>;=~h$1f7bq#I)$1p@XdooU`)u_Hl9x3-HpT6 zcj!N${yv2_JPUP&V7Jg2A_`gFaB$T}@_Z-d*7}ij9w5-15K{EcvKvp}I2G;kjA!eo z(B&+o6@lHrb#I09wwDH9=>t`co_u=k#)aG_CUp1yPdL@@MdrRk#6|W?VCSj#U4nt} z&@`ge*+optW;>FkRbmh5=L^el!87CSZaT<7VN2t<-#M_JwBHgpn^T27JuSO8I`Irh z;=PQL|Ejh#Wf%<>DXw*VR=GaC*~~{ZqunTW35!#j1@g>3&h)m=2)7KM)k} z=<*BCu)>{$Qr@DhQcy3Vo5JG^m?rND!1f{Wq(j~qKp%W2MKXFNd&XQ}b)z=-TyqW; z$`#{uvn9pKp4q&}X1O?KsA_jPe6hca}Yrg~UpdrikI#4{&711kYn76lkIQ+rK5fg@0%zf*j& zNtQ)XUA;NN_2tyo+N=-IweusCaH1Yn&#!cB>BZn@Uj*e;Mt@8qgKV6o|2KpghR=(fT zZK_FOQI}q*c4OQPqNasv4Uf$f2ZHha5XYvG2les|t@bGGB>RB+U`lh=y!u6&`B#su zdbcpvkWHF3rO`i|#=;+&e3=wGBgSeSnX=mYN-bBahrzV?Eic=*fIbazRSi>y+T+MX zLS!#azI9?&IR39z+dDpru-##0?0FgQbW^W`oZ!v{>#zd}#R#*rm$^^-OmYJXM}GyV zqR9sJ#(1IOxo@ytFr!I|kC$}%Yr=3LXt+Jpfr8K;3KyU{Oxb)VgTFd)`0U`)i?SRn zFru0<$F6@VC3XXQ^G;a+-{k^JeLiZp666EAg>~O(ORas zqrLmWD2PPl?(Q_qh{aovhK4nKf$A3}92KkHaX4y|GvXtBW zvkk+tP~gqYyOSJ@Iu0(Os=n$dMrT*j%<}`=;Url1sP=%om!AW;CrZ_oMihWZ5b2Vp z46^4OFN~8{z@m(_9EukQh1F(VYAGD@;{Pp-y%|m`H^8{$qpe801R} zpM$YGv!h9$-bV!iaqg5ar%?z#o00$i)V99n_*vEA1)XS(d-WXbHafo@5c4P-X!^rx z`OTT+TS3B-=OfnFD*iZdyvRsOVs=)8*3#i9e1Jsw)MeRNA|*3YMM}70IE4u2eRwRa z8N+3{vA!W013R7MBzEUyK~XDTIv5HsPafIa?ViAdK$$0 z9Dtb3Z?mN8uqLZ#3-EgDxBM9Ko}Dvkt^tdxSG3Me3%z5LpmOxfCb|B-3A|aYp)~n{ zpo>Spi(k5mk5pSUa_o*-{&5>k2yQ|Jn5{y!Tj|zOhl#YW)(36`)yBxv!l$kD*YVi%Fm> zr8?RG^3e5<8EOKn6aflJeW2V{WBPHfp45bDJ#6|SkpAll^_K`^B5{iB0G`~MSSm{C z^n5q@YC_&F9ZFX{mozt;vZxt)XTN+^UwW4~KL8Sy>j!kNEmz~Dp%B&t?{GA=mMf;b z66e{iZCA5!bYiIQ*KGK1y=tT0k>O;g#7eWu;5YD>hq`?$HKeiqy@G7L77zy=QI`o% z_UeuYbUttgwL&+Wy7$wx*Ln_%lfT+*hxV?SAsJSdluv|1%-+z8%a)`C2RXGU|3aGO zX57`gG~4~j`1Q4e`|j=xd!leotwyM<<2x=(Lr8#o(}`!ORzl?L+Dl_8)7~K;MD3Ru z>}%;ad;Id;Z%#z?{=-w13(kc>(VqMN-rwd|b@<7X1hr!o47YaY)df=<9dKOlU&~91 z>IQxk@o*1Z(LqkOuGq}>e-#wpob!pqX{qY89mf0j1&&_HZym7T{(Z1s8IA&3T~uX#Jm}qx4^}9N(lD^qHgq)g=C#%Vm+gPDSFq00!=3l+S0kvL?^iSGocuT- zshxg#OV-GK^OER8dQD4;5X-p=ZKzPyuW#HgIT9vZuFQI_beGF1Bc zo!WpPhU;1S*V|+8bNVv{pAl_>#zo-s&OLG7hRrVG74aXMK2gUqOoW2Oosl?7fO-EC z*=~xQu(f@DOICxeiJY7@yK$PXzT{sxKf9Guk43}Qm*Uix3aEfbv2^EUgd>Xge%cON@;h-?W$fOo9L7 z{{}8Z%7HY&i>_}VGrnojnk>wpkHu=K+ngKM;8~sMVUq-X)+f<=6m17@`O#5e=;o5P z8G@6)?GP3@LT;oLo+-!Uh@>pVc9+4tcxo}XzoExJ||7o-?v=?NhuRHjFrH^y{wX|9A0vWaS$5m{xr?hi8HKj3ORA}+#q`u-dS6j z8};)>9mfP+R{MnCK1+)yUxr>oqRT8xQ(*>BGw4VHVhJ?T&p37Elym4;?pVY!UgJVa1joO8sDzI_X#fM^eZ+KHz7MwJ-4BrI?bV`^g2^#A-AtfonAsIDb?H<*yp7xL@mp{Z=%`N`OwzXa0uLq*${qn z=)tmFY0$)fKib%|8})O-;I#!fv+?h|JFk^JCm?0yN##jZKt(B+2y0flW9d7SOvSiV zW;2qC+DEh;rP*Ardv*PLx&}%4CaN3J5~N$11_@L{6Jtcf>7EIXZGR)Ub#O-)4&9$~ zZ)jU|MuWA4W?tCW15S#Mx|+CBe=1~BTVn8n4*A4dB%vjhz!*9Z*&^Z3F!-&@s0S{SzvPt_R!I8p!T>o(S z;EEJ~Z5QqKy4d)6!^~zQfUDnxl``-Zg&j#%1PT3G*+JX>9agfe_30u{EZ0^JiCLW? zs1=OVqmz;DR+U_{Wg^G9oo4FIm?$p<-ss~Gf-a}2J!w_#v1y9ws+hR% zaeQas;%GTMnaHlS=8j;RC6lq!v`XIwnO7}l*o1knKd5h$T@}v#G0MXGBIySBW*%9j z)4Q4@xzqAW7xoFJ4e~_1ew>IXnwN0atWnI{H82fZZ;0i!i$6#8ux0j@ouC-P4F&ug zv>18njg<`<1%^SHGO#vup8;xM%_o-YZ4kSB&q1@_YiW@^-+BE16vcy3Sc=lRU)2`*mducWvN?sL%gmC zJvAdjHt`jnR$Bz;s68c8=s<8j<-+}${cNN=7@9>bKM_=n%fPW`?vxW@`b)exD%Pk& z(AEg{qt&z@889Mjh|{Bs$!1`20O7Nq=lYxuqS2lKu*@G<~euh4Zy!XOSWxqOks zpJCUPJShP$T4P~=Ltx=H zl>4;=##T;_HZ$$T!Nn_Qk&4)Nx7!>C95s7nh}bgErrFAYD_}b_{o5<@dBe6>E%t}B`!AX90S!_!lzkaBCCwD>5 ztx!`!!4O_@O<%zfpb!Hp973W;-3lk&Xz~*a_53I*tCeQ~MU&E53yE?Mbn45AMbc#j z>wV1L(?y>`3&R1$vr)N#tlWdd;+(R=lUv53>Ei#S(NL;_OK#?F&61z=&%c*R{BmP@ zJ6-Y+ifICrBEd@d?hmCzy~U4!bnog)AJ-=ho|Ga$WmI>8G@4~GdquSMWi=edjQOR-)VVCXOUn&z?@n zSQ=Ab6(9Lzm7Y1$?`cwE?PXrITz*+>S?$R+^Pjcq%%nmDPi4S{#Oikjs01z4SBCYr z@FlJy$X~KF@gd8c*0j}KoAnmu;tcmYt#iAr;p?wzPvDZUCm*~-KtYVgA}rcsuqtV3 zqe!O0c+WW*hk$)`?keMmzJ?R&61`Ivhc>$HFO~)x+Jn8pOgZLS>6%V5xo1gPal)#g zY|9bqP$vZK>_?8cYJ%CErhD@`+5YOK9>d0Y^^3Shv;Aiy5RCXOMV>poq8T}dZ|d48 zN8>ITmKK0(qWC+hq<^MG*P`LLo`7FO*Rm8KJWe(_3Aq?1bQ2F}YXIy9=uaNDUvL0e z0~j|ep~>qnbm$n8Vd3Hh)}&>C@@&hM+VDV$_5#HW2HE1b`Q?$o){#h)f6!2sj}XgJ zixiOu;Ehn@&mZ*fu}E9v(4_C4Z0ryutKl;Q=6x7f_@erOS(BzBXXCIhBb*6dX2fR% zT)d$nuFo_fX zcGUk2)pz8G${g3d@4!2~0P2-23IUP&+PDfAt%~Ka7G!I1N|xoFiy0>2l|#0LAScTq@3@aR*p3?Sk>1 zfo#*e772FX9}4e&ALZ|I7J1%Xq?SDULw9(4xIz>#$CI49lAXtgS)QN5j zbX_HYiN7?oA)4lt7RJwg3$jfv1A}Lc-3o^*n>HjXXI`0^zyh7ygO4B{;VpEHgbZ6R z4ty=<-W2L3mmAD_8;d-%k4^Rxdi`<{X#eAVz-kn>0n8zXE3s-bf*9KqC8|Mmt=3B$ zx5FFug*XNtt11UGmuHZnFs@g2(SuilTpi@DvV2oj{N~ z+P0tdQx~-AAmR^T^MX=vav(aHTe(Z?{eL;Wt)KN3tlvG-dBLXgK%{;a2aWVYpD$t) z2gK_K=DyRNn=vIXyuJeK#UIbB5^4sB*fJrPT9mtx3pOKxrQ97V(^vZwsU|Z?83OJ z@{h5NFGfYg%-M>PHr4yaH8x^1-}z4kEcX#`m{mT_5F*N-=YhMp%J>$Y^3Wl6u?tN( z_WTtO^=$J^EACieM|FsJTleXokMF}v0`AZ+P`Qf2X3&5KrNX2x-d8ex zJv4loX`r&LtM%F3hCOIz{6pPm+xJe|gZp-RM+E&Pdie)Ve?M!yFIH$ilGQs@-N<=^nl;`u*=Vr2#1$v8PVQy!MMan} zbul+N@&%qVoC7ZDWbsNvSo^&HT$Sd8*8OmR(R0Lx#COlNUfdTb%Mpi{JHH1`P2Zt+ zNP>0gjN7nP-0tQUe|_fk#ZN%lF2-*B3$OAuJv-+IvSRDFSvoOxsx~H1wFM@&EBdDP zj*_yaFKx0G0o1MIxIlxiLbw~6Iaf8x%$hxH7tmAM(935|XIwLTiDHWq)xxTu&CP#< zG&&J2RQio??8VHSTU7NzS0KC5#?dK_uC%@(eGl|36J!Ipts3K9?|$0gx5e>&r!x#p z2|7#u(JHLs`|a?@7YU0(vQ_T^PC@}Zc&jQHM!9U1GY`Y1&4Wd<%>sCx^igQ5z^LUg zGa^p2aI8c^;49x~dd|<@zIkIWzsA8F6MLKBzr2P4x9tAv*jHaH8UqDe@D@%z1l7;< z%HF)=09lQS9tDw^%#D(`>b-duKfs7`0%b1PJ-edsxbjSa{xb;xK|(Blx*>Jz_^d z?$GF@cAf1n&>!84(&B`T5!2OcGm~jB{xw@pjn!H~QxTT>=NmNFmLL+xtuoxcTT3_p zMw;J@!yi`NH!2B2Y25O}-`P)bO5##9oj&*?piYLo&j|n&=+^l?hSQih=~JpRgx@qe{^fCIVLA- zb2nOKVZ;ogsx6wj*?ZUOsp+}nddzg-)hxWpm7sm*kFS@($t0STc9K5P?4!>GZNT-a zC;Hu$sGuGAaMLE@Mq(%%RDeM(c*E8=H+!vldm7JmA#Vphf;*XROJR`ir)hoqn~bxK?5y>fwHES-JSl%-#)+lrbSR+GUZ;HLF~>J zk)kWnKF*xo%>`gf0jkWf;GMROvlI#>?ZPzg*_0!bGBo~W-EqEOD&v`9_3Z>^J zK^i*E?23!!#do!{U)7lWmwnY)0t;QCjL*S-8qg<;nn@ZgVaZ~M`#c9A(ld`2I69@_ zK$5Q2pGdN}&*PNbuSL%fdfTXzQk~ps=OUG()8GOWd07Bg`oVxqZCW~ZOc4H8*Krb< zs6?O3O_bANFcupI<-K8HY~!uF^UJ9{kCQsTBXvYS2B?3P`0;(|u-~t?fliqr0f(ZB z4ppr?*b$rAV*sRNf4G^+?O0IFq>G-win+VslX|$h0AW^*u@T%rb|<{VIN)_{3yXtL zMXJo*@o1?*z(QI7MjtUpo@+aRla|siQS9!LAkaE!Gced1QSl+Cew`bT0H?k(MrFSafqK-Trvu5-)I{&5S3J&N`z;m?bns zjDvE)!>NlwkoaZnlw$yz84>@MDJCNy?`JxyvXa->>_Gf1{E1~%hk;XYQgJKoB!Jdw zP*Tc)KjPv+mo&e1f+jfXYJ~o6oaI0%WAOb|(JLz^zZpU5z}nRbp}Edjk+YC#@=bdu z>>GBcb!yXLg=aM;R++o(SU>rM$H{td1NeT@wN%~e-SB>380-`q!{bX8Z4N#>6z@%GF7OP^xPbv?>)Vba!7dVEv(|D{d$0 zVPt@ov{n52sp+M8y_Gf>d_9U?=Uaaq*nouO^piy=YvOHhB#NX^V^R&3{vlF7n(>e| zVE>~Mh0G&r-riRd_ODb-Q4*5Vrcd8o-Lt?KGWhRM75z>cc#&OPIB0wxP zf!*jsg^4=G^};8fGJP{Gg(jBYbswsU^X^qxh$^2mf;+>qoaSu;xTtiT8=v5b7mGNj zWg}xcCG4vZxLzAluuMnk1?_m|B{&L1*y$lyp|fZED6FhEMG!2R2I*o6Lk)W z$;}61xwvdoDji{rtD<;^3mInjd&+lG7Pu{F`vvvRmVIx}9%Xk<>o=X_>jxz(C_9T5O;@NYP{pT#tHqi^bv@N! zIqQvEJbkyiK5_mKD{u|b=-PyBwqem(xE9m8rnJ+bVez+cl-S9Ml=_Zg$?pI*j)RBk z4?&?+rTDN~qG|K_!fj9)iIeN+v~>ejxKTOPc%D2rkjLG|sDhF3qlEMZTjWclO1AO$ zN}5S^{u3faoKD=Ix7Lx6KUCGCRdwWh&Qtk2TqV+<-SnIG^-GSpD&JWos581C8*rx6 z8kwqe$P8K@bu&|Gpdr*XxTfP7r>+^ zsQEK3ee2CG>cPo7Kcwliw8Z_7O>Iw&TUD7o1L9=fJC}`DQq?t>!|SN4ia$2RY@-}M z-x-YrUA5J-pX!#$td108>dTDvv|cZ2%U%&@+K2<`*{=Ck;V~&8@G9lrj>U)C^9+ds zR(3c4JLISA@vL$@O@i`LLS0ucs?*5Ej%>ds0d5UW58aura`aX#Uoe%CKeHM;<@D!j z4z1 zOD>D`Rx46d7kz6&v)w@qV)1Otor~emZu+J&YT?nUf&&On@r|1h?FKzg2V1QX z@UAH}o)O8|CERX$#d(#Sc~^%ztu@!HU1bw61%o}~rfJIKbH!520|^*LE4Yk+0&_Cn znH>VsBh^jd9bM(*jD+A+-9~y|6$_fh7=AM)@e)^i@LbTR=Eb5I&DJQes^h9|{uS0KN!J2KYEHV>=`vhcN@|NW8)ySV@d%MtY-YeLK)YJn;IMtF4lg_SIkZiJ23 z*Nm+%00LZYJ25iyu_Pr@^0dm!6;=o$n2tTTQFLw*W(35xO5~<+8#XU@mSaASIBz%U z@=M^t)|o;apP7G*5#J-nUQX+eQ5tF82hb%Bx#4=(k#P6#>`BZ`kG^XdpH)#n)IGfA zs?Uv;afFbY+hH?>)i$g~*fFUw8o(j%Yu03^E{eBbwgcP32{3%Inyq6n`YZA_DJqE~ zPe+nMDMkz8!%P#MCNure^Um@y03o>Y)1>_$XB?wv^n~NWQqz`}^NoD3ES1@vvOk{@O>v zeIPvcG_&W5GnXXaExC3XMk;)U;_XVh5cqr=P$J6c2fElGE_|RY;4~A!W0mz^12H$9 zXh}lme@i3WyYOEIXeu|+Y&4FodCDSX3Rjr|y7qD5)Z3PX^!HdkW6K1t)=cDr9K)Vi zrafh$L5tY5@J&D9P>J#-+aO|{iawH@=%GL3Q!e1S0fkBHpjDd)Fq1)|fhES^wI>yT zM@*CrQ-kImuUW%0R)nvv(dr&QnjC$~VwF6ECIJk;h9#2ZJO>}9E5i|^YU@#%t%SUN z#CX3_xe}-t`lSk`=%01OBDvHaWJ!A=kCn`ms4bf128bVOrA5%Mt@7wV4J_+YwEYLt zPuK@Og%otJ<>)GkdpHvMxf1T=CrVQ$a_7ooAsCEw8oZJPQ5!E3A!@YDNy9r;%}R4( zsoHf-2G)|iVttLMjYV80E?Sb$4kTFn{yQ;tvsA(n8SQ$n`U4^A zje4|$E_Owd<)d<9}?V zBX!376e5boPR^c#Uim;Kay1s_X<5$2a;9Vy^H>JW37ced@Yad%E(^>8w8yQTQ zvg$f9DVI{xM=FdpaqEG%vYeHH^<;DtUrK$9riGiPpHU@jiRPR)T0W8Cl|Nv0EiJQ9 znRL3R4VSbJM>}0-;=Cf;_VxqcfE)r0l(-Y#;j1=GF+ehr;`wy#8iArVA+2eNsR^2Rk+mw~g-@?`Q^#|of+7&s(&RhkvJ7`Q7G~KWPI>F` z#b9*W-I$cOwF$(zWt~)DUdZSpqttePrQz0r40_VV1du>mes&^BCpIT2f^N}Fc9B?y zgK}!K(jXA{rb7pZe`?-0N!Y0lL+jA~c@d99T3PIOvzjoeo+2f;PmiV!#hrg2wL7`B zCgiOUJ*-tI^`fqyH0Vg^~DYj*fHVuRgJ{1`(YxOXa6U?YnkBKCL0awu(7Uzdafa`#JisG zJ|2M|*hE5}(srtWRrj%3do+RB%+(oRd0To0zZe@Xe_zymw>ytKdt(E1+$FF11J61a zS9A1(9ihTN2YeG!2-i1=GV{!z-!h6VA2u*4ELhd(K;;2a?boKmQ#EHPCA^xp98%N) zo%ON*o`4oXG8!#e*|7mnyMQxuySYF2cy#$0ggxl9_-A@}I@}M<$D$0XYx$7`?KK;1 z?Ws#70CXCqwmfj7KQN&!rK2^l+V+Qq!*XZ&v-KjCAr50%as98dnY@#cBqt*B#@#vrwqc>n zP|=%H&blJ0YjH#;{K?wpEZ6EN@Udi(^~qY}m!_Q~v#k!&*m$XId)?W|3#+ropMtg! zHtFAro0Qkf^VSSOwl`U6%ODHg5!y;G+q+mMospa|YMUq@N>m` zR0M_xT8-m>!tu6aPUPRYZ>}`c;G(mBG`O34-H2349;L2|t&QSIU`Ht0kP7VS`tE$b zz|*qB;W>_i3E9)FU~mP7$Rv^kTVGeM{%Zv7tX)W^Oyl|ggwG$? z^(ufdGp#VqdgLnx4DmnVa|1~mROkPl@Oi#MyX5~Yd_I^h(H|Q8^ZVDgvriv}h8`Yp zh`4qm2xwe)BhMmZccVxpq^$Aqm5xgt9hr^xV(6S}?L(=9qzsU>{WRsKj2uKzTu659 zeiC1|tC==?zpGi2$cpPhYJZUiI<0*{N=fO_Z4}B@j4afa_mSHb`l;GYm1Cw(C|v=8 zrV4JAok@8J?9~uO#9_8woSTWP!=3nyl1uhU37E&*el7Dyt(y^JXIoxXVQ_jnd+|g1 z^cQR2zjaHoZa|)W8wUt`S(%{xNkN5O`+kjWzL5J#RjzaWNp)e+=}Ap#9M5TOWw!fi zU2S#!X?2FiGscaZ&}@g8#FTYp?|c(BkM7Kn##{RBUSG~ zLLC;(bB@|WryOsy$MGz-4VLg=_npNrsC98Z;3LEXKe*aAtyNOFUCb{~QhR>aCf8o@ zRnvb`EwRDe_aLA5iPl#)9rWMdF-LR8*@+;n#BcA=py#yN?OT{g-J%$N67a1GD&etY zhYjv~vx8G_g@v5z_+@fkD^_+H-{7HU#DSvBj@uj?%;wj2#0zg($EI2CZso&!GP`#n zJhcXU6Ot_jo1;{$z2ESWHf#mihAn??ws@W1zG(Wr^C#e{H0E8d3azid!pkrNx2T7h#)qa{Yke!L?Ck+Nnu4cNK`IY^h?i* za<0_m<;YO-ytc@r@KPx{WPj$^tT{=_W(V=`K#m>%KisAkF~0*E%rh28uCzjW5jE=I zq4@n%`H5dTlpq%w%ZrI8;FZsI(-UaLwzC^vc(uj8IEO?5kk&($>Km_OOWER$>>M z6*8XWtY_?+an#CK{XteH&bq8^G+WuuW`wem?QBpVlRe1M6E2rj%gi{77Ad5*BDEle zNeNI`&;NplUq1q^bI!?`f!ekrx>ZVTVe;0tOfWUYm61C$!&|#dZ!NQxjBg*()ZZRP zc?%Fsa$iHmlCadel1XTBxG5Nrwr09AV#jA9`jFuk#l1G!?pnk)1)qZVHh7&#bj`ws z`&yPD)di?j`P8uB>UFeb!P>_5yOHL4#K12Ri+CrZQpJ!$rY}M7Vu`2_4KoG8842)P zqVQUc$XBdD2^4GZ8@0i7RA3(d3xkj16@2;^mK=$KdNX;E8QbKzgvsx1^ti$syF|z@ zAzMQhjI)kBw=$6+NPa8K7F(c;q!>1`mbVO-7<2i{NI{M>F*DYK>=?|T@iLm%jFA(U zM*qZu@rsh!Oy@e==AwWV4xT#`qvhH;D)23dnlZKFKjX#Cq=B=c7tLrEdC@|7&dsC8 z(&$QC`cH@^^QAY<=`HQK$i4aWr#nsRQoDy*2`Tj4OwGt9vihr;e)Xk6j1pDLx|z4m zwXTDOV7f@bya`eCt`VE%g?x9|-1BoyUW{x9F6_+B24HmgWn-Jnc_V>Fa!YxV zP1oM`u6U^zuXN6;;(m1!CY)|VB_YspX>q$zC2XLu`$^rNx4!qy?|%FH-vAG|zz0t7 zf*btc2v4}e7tZj8JN)4gkGRAqPVtIcT&VfJxW+fm@s4}^;~)>Y$VX1{lAHYGDF08n z%2&?vmb?7rFps&+XHN4{g$P2nrgY7B&hya3y63&hI7X-p^r9R6GD1Ikt?X%Er5mrH zPVe{6qmH9+Q~gSksP;gZeblSFD(7A=kh1AQ-mqtFA%ix%Uh@rawS!0NLLn!I-G1tZ za6sE0IVRnWn)JQ53haLGP8I@B_`;h8@P;?k)Dzz+gD8vLhv_@x&(p9l7ED6#p1kHa zuag*MmbRQ16VXF&t+y_o^r%lg`&3V0*1P`ous=BBV^90q+y3^r&%N$<&->o{{`bHS zzVL@n{Nfw`_{dLwRa7H+W`Np( zcMWw~3iyB!7=aQvffQJQ7I=Xen1LF&fgIR@9{7PE7=j`=f+SdiCU}AY74AEay7#lZHZ3@98{_=ReSBWG9}E@cr`XBcim zM8~#X~Xj+gj|kQj-QIEj>4 ziI#YYn3##0Sa4)9g`0RBefWv4F?c&7irRq&rq~^an2M~}imv#Iuo#Q7*nvtoi?(=+ zxR{H&2pqCN0HnB!$pH$$IE>?yC1SCP#JCs~Kmb*M5H@B7$=Dl}5RKGWjcPZI0?vvjxuKn<_H^3kPuBU5bY=s??{3H0RSQS1O)>C0RSu>0Wbh? z0$>3E2>$>B2pmYTpuvL(6DnNDu%W|;5F<*QNH77#iv}Y^!N{?r$B!UGiX2I@q{)*P zEmD+#(xA$g2U)&^i84t7mI`P#Oro==&!0ep3LQ$csL`WHlPX=xw5ijlP@_tnO0}xh zt5~yY-O9DA*RNp1iXBUmr%bYF)2dy|wyoQ@aO29ITXN<=y8`hB(98E=UzdIZ10G!P zZ(+fQ30FkCSn*xPj~(ZQJX!Ky%9kx0Zk)I?=g*NnhX!3)bZOF=O{Ye^d9>@(uUE%z z4ZF5%+q7@%&MnfSZ<~98ClF5jxAEY|hbJ$Nyt#7c%%4k-PJOv`=+~!bua3RDcJJK3 zi~kQ#e!F?_=f|fnkG{Qn_w3)xk57NSefan1=dX{ydjKU10VoAs1QuxEfe1py(t-mq z$dW(~HW&bd5Kd@eg%nztVT2f7sG)}(e)yn>5^nfmha-ll;)x`pSR#llu4v+nFw&S} zj5yl(;*C1G=wpjO%2?x&JQBI%kv|Gq>E)MT zhAHNlWR_{>nF-}Y(1>WZ>E@eo#wq8Vbk->*7Zcd2=bn7_*--=s0ZNmg59tNyje0r6 zrck^kbR(ez5tIsID5CUA|Jvs;LIS>X56!rh06o4*_bCvb%a%)w9hC3lX8% zu0`!pQt;H!s7}F3F1Zk)8^D0-BJ?e?B(+=6qVg(q?nL!6_3oMncuTt956#DMEY|_dW<|Z-9CS*wAuR$QwRPxP994%_Y1xc|58JlcjGD}Pk z)HKLW!`qV18gE@{)?)!0g(O>Ovc)DFbR8{0YD>XzhA#sa#VED>ti-Xl*#ET1k>?PD9$DP9?%T8^ z0|(36$E5o@mFF494*SOlyPohCa*Hmk>{y4YL0i(&vuS<$O0ki@> znwv{V6tobzn*od>;gUiWj7C5MCQK5ou*LZr@*q;w!fgZ@mDCovKCul1gU_>+L7YZ1 zf;4S?k<&uc4yZgzB85J*AL9z`RT z$OzJfC8!Bv9;=AZi06*!sl;Tlo0mXB7Lkp}PavdV*!+M)y1Zzj7GRXX-T*ea0B~Yb zOEd_8>~V`$G{S|KuYn+S}SQkgHaAAfqTnNY>7DL{tOLe1^ zR}vm3fk=Fj6H}Pb);vbeEk;0ylH|hNwq~1Y1YY7q#S#kd!Cw8oNg5 z!dj4`6%i!G23B~HO+fUeF@2vv1}KGeW{@H6u*Ve4HLrY*p&s=pMH@(Ai{gQArP=%y zNyRrINd$lt=|oo)+SdyCy;OTYwN(HJ2+a)j>}OHciWunO1|0@qQtm8WH9s~Sh4GGI z%7NG_Ei@dwLQ!-=#9|V*FbXoX&zJ#dV)e#A3d0(f3sPVxVU2f-{xx|*z?q4RDYxtm?Tiq~`r zBN}w2Hc+75E|UW}sz9b7g;5OjjjNLDUbQA(LkdKPwyVrIl{<UM}x3J zAk5S9K+yaPbPD8)lQXj@8PQD)zY{e1+pb6vs1AF$c1<=+7!2n#^AFU{Z+_qX} zNpd28AR!=GiwspD^Ui8mOTwymyoCjh)zwmi+PYr7WLJCC$gegU3ky;|9R}N$46$i& z@h6~HA9;kp&h>*DJ=Ap-d1;k?p+Jx@ih5jdAfxa{DK_BYXtz4puND_s0Y+AuM#0&z z2AI*{E$m&JSb99J_fE&qj?>Z)-A7)jl7pQ=?md(gTzGa?2$jP`uFJ&N!=G%|2+F?s zBGZ}X1WUGn@n6_60f6F3g4>YitKRW$0skliE;n+_Ob?`q60j-8`!-x9kYST8w}lXu zQ1O|kF*UvbG|Pr);sB6*a-wF5@%CwuDR80|_P97|`$ppdP3{&QpRW|k5%hx4F`|Q> zxjj@)=|7{nZ~Lq|-ViOx|AJ(o7;nWUa#CNYUwm@Vtm`QH){00*-ER-Kd#2mr+Z^|8 zc#ZZ&E7TYTO+57MsYRYf;^zvV`l23xqevUbb#In*8||&g?1&oQ=)>#nfL7}nYDN9a z1wtIHdpl!0HgFS^D>HOGzj)Eq6orQ#ULd8&Qx;b7i*W9p6`36lzYpJz%){9C7;l45 zWxQq7Vm@1!$&5UA4UfqW{Go)A(A{bE=C`x3& zWBb-Vo8UtKU<MS9i_WCmszF)C5lciz_u1{DB=HG%D83#A}Y0-*(a zXFM?VX918WS-1%=B})GlR4}DwFeQX=CS$d*S#E|9appG@pb7V*S`%SY!8Z`2v{OUV zXjWJd5aexW$O@V^5J5FmlK%j8--Ac?kZrf69FlX_QWOq>N%TreR)##F{5g9X8D-d0jjr-7s(Zf+F- zV}OPcbc|yKh6mSMpG6hEA_f7_R+Uj{^CbaN&{d+=N~dKsvS&#o28IE^3Vjv@k+6F7 z)oFPl1*fy$Y69t3KK9YJaJ4|#R+YsLtGbJXJ$uJKy%VFRJ}tGuD}TqI1utAYxE!x z#nX?P)-n#^O?abyd;h~h+9*&U7CLaI1p?8KE@WWVCO7N_b__;%+c;2DAY&B3bL?hJA9q7ZbrqFZC76pgPA29)Mmd)gqK}m~ zY&$g&8$c__C`pzmHJbvCXoP(aBxBR1jf})1Q;}o*l8KBXW=bef7sL{vBvch51>BZ5 z9|S)Mae%qFn_*^U0%1KTHUUk;KBFLkZA5g(^qY931!#zdg60ZW_=RZ5XT5|Fsig$z zQW7C%FocDQ_?t%4K7aO1y0#Jjr!Zr%P^+V$sD*`CI8aT)3Ys_tcryhH(0eZw zaNs##7P2u|< zu?6f<3(N>^m$hb*&r#E824nap~dX{NnG*$(X6N{7(kdi--M5sBzmcs*e z_19N%N~|BmtS>Z+SU5b4HhTj3lxJm3OG-KhMSuZ-wF0pLhFK5@m2#J~apXA=`}sHQ`F`X=e+w{J7Ss+wcMHLn3A7*(=~p~4 zIU$Cpanz%05P?7JW3BiUj3Amf^iPB>Bv zc#}V>$cnYt3QePjdCP_cI!&yQyP`CNl!itZh%_eVZwZkI2(bl7Y7k)9rV0VLQ2()3 z2s<+=x~^O)eVGN580QMIC8p(=Cl-+e9K)5oQeXA3c`UXncT*3DS~OZ9w~3_$CRSN( zzzJEFc5fAC^^kT3RWWB2d7K~+b;Ka$cd$OyNR;D{Q-^UUHU;_9moio%?*w(X5Jm>2 z1W6zX%W07R1xZ#WTiYmf24$388*~H+N)@$vs7b@JHV`ysNPu?GoMgl2n z2HRF*^gZcfBMCeK&X2IMR3+>hBZ9C#S=WoRQC(60+E!wBV#%&YhlR>z5lfd$@m`z zJ4+)LnFf{xhB-KU~NKRkIOTt8+J3Q6TmpL`1d@L58l-3dw2Bwvcd<)Ko-MYVfmEmy+r_JG=$h7wk%O#6E3u+rv5b$&?`e-OV^^)Z7o^Xu6(7Q zD-;zMMxdFjfxI?bJX+=0mYh6K4@8bi87_$;KTb4Op)_$k1Vq&bcLJeu@gvT8HaTu! zA)s`3FN9VyHaRdwbA0%PylPv2m^&HdwLrsO0wH}v9dxk7FUgu(uFwv%Bn6W&5D~0w z^%nq>&{aXV#eLIO^+j{qhGv_$uTd905hM@?w%9N!J*5?6{Qu*(4pBe2rDT!R4hFWU zZia^P)4sqYP{FK?gmP5rEnIWA1qqg|ZNm!mK$MN8WX@$w@H8TzWIqLE5gCnJ)n%+1 zL$aUBY3viSTQF2>B;W2c34}G5r!-ihBvW6^x2Y|;?V4b;_uN}K!ZS7nYZIXO7)k*< z1^>9Pck`oaxBzUZgDrH^Vj5NMj-ceN@dmSCsJMQI}B(3#jn#WAEdOKW3b zsTlzD&~>_z6d>A0o4_t-)JA!;ykp9e-jq0h#;;11aB`yn*aeYgTlNe0 zqh}GkjhOZe#G|`DbvIguX>Ihtm*#PY2UfjTW#*HR$^T+bTvnq&^$))Mz)9hJp)d(=#CU#f4pqiu>kmQ$r5d zgX{(x@3r8|3A4om;kvoFAX_!;Bdu@e=gaL|U)U}X=EU6vK|BJ#QVJ72K0bsQAGA`@ zN^yx>qY`snH9V|G+JJm`NMw}qO+3bgTZ2k?3ICI2WtA|diOhgw2ZuM^R2Q3EvKRy$%`g`n~R$q4C26HDYIv+iXxUk8(NqyIMJQRVpQ2I}m_Qu4~ zg>kdT|Mp|$^2d)%1xj0rEd}I2_Uj`3F8{xO(`xrgR1m%}dkNkYRRuE}TSj9tU z>A#y#i_=mNje01Gy4Excl>Z6Tzzk$G0HH)m6e&_9B$0xUU_pUO4i4e7(PPAv1s7hl*zsmgh#xZs06Ho_DWF9I zNHAIysnJ#eqySZ7^l5-7NslIdigc;bs713n^?Ec)Risl1TD=N%YFe;Bx1vp|RVm!F zRG&)es#fn@qjH`4MQhe=TZe4*0yaykUaPfr;|9KpbnMiwWy9W$Y_)RQykOVb1zOcG z;lX92)UwyA^JloNUB8AM0XACMQU5dr*d)QBK%kox%$6NnQ>%7ddJ{+9F8Olh&6z)U z-s-t@=gO%=$6g(JE$!FaahEQ1X9 zFzBi~^|Uk4KLrgGs6hcewErkX6(!VAMjcHwQbHwN)KN<(Z4^^TF&%VMN;$Pk3NnOJ z^EKOQAq7pKWLtB>3iDJo%~b8@L&`e=OH zzUt~Ib1juYqvNIdzP{VK@^4{7RTo~txs7}63fDSZUIiNuGs~7;T@b&?#l}kVunheB z+nVnS+sex?UpZL+M1J(j{ya`fHa$BF{a&M%{+emDVmGj5+!cqbUj!R=Z7b9%r_bx# zi{0JArel|Fbf;S{RQAvDg?#Yo;r`t7SgVIDWzyCC{(AAZO9gVfQvT!pEubT7CoEUS5Nl6k^RYH-yb+b~Od= zZG~}Q$(pl>MM8T)t{^FbQVg;8!>`oog)T#(5`#CJD5C2i320vuusE_B|*8UQlbqbSRqjU_Ru1VGUgsa9!4e1KxN1Vo_~_Gkkp5qPsKYVd7vL0A;X zVT%B4pewbaASclpDEmlZ9Bds!JzU`+Y{sf8BK6X=$k1296&9veVFg>ynK`a_Gpj-& zga6+&Q4cZ@=sl7NKxzW8(arIWg{|>sDVF5I&Z5O4VvB-3>_LXE>`R7Ak-`{IG_5HR z5iYDj4N%A=L%K-uKCJKuCrY85uHh(h~r69D7b zchW}rv_$Mn3VU!`*s(rHt{(#ISzG0wPfGPuGeW@6oW>nnAO(bwyCvXmq7>4h2v9Py z&@5I^+PH>lSu*XOEZQbD2{|{cZ~f|D$NShoVMRMql$vhVq7-L_O(bg33ja2YqSORh zibSX#ms-O+)(Mf0GUfg7O!o!d2iZcq8XoLhD;ugKlfo$K!G)h7Tb9Z$%9vWA34grw zTy4td7Iu{zgLQ<(N-~H?opSRn^gN|*#G)2>-ltrPmqR$OU<6je;w?;os+9dk>t`-(cf=@!koz)<6?=W&7xZ9sglYh1wh$-6C1cCQ2M-dnL8beh~H?Ld~T?<51*=T=Q$~w zl5E1Cz3{(j(-v;-myZ0s41pJ9FU`(LrKg>Y!x;t3^QpoS8(Jc^oZ_ys*aYs769G}C zgxi9|8mWz{t)keikqQ9DfUWpQ4F|-ot7szmSTV|qHZ=PoxmYpcKr{!`KKZf*Z<`i( zAPTh*ijk5I!ApoSn3j<$uTtnW16)C-lBIf3zmal}k+1zWhm3abZ1Q=$dj zK@S|4R`7=@AP~kGjtNw(zVe{YP$-7^Iwcx7=~zKd=q_ujLH{SzKw9ZSCuA!wfT}Tg zkO|DdkpRMJVX9lowg5;GSFk~e8?rleLTkYxAi597TC@|gnJuWo{%VV=kd6n5!V!@? z?(m2CnwDOn!Oe2RTS|g4kU)~!tmShPr$UhlOch>gg(%#piCV3>rE*Uu`$Teciz!SMC zhd4SfDT8sOIoXf`xRb{Lp{riHykry*zmNhNs}f0gMgLwI1NECHx>_L3nJbOr6=K_~ zPs~T+2&>qGJ{HNgc2K6EdyrBnMtisrD@^C09cF`vn8YO2NQA- zUuZg@V265Wx?ZBKVM2>sqRiH?t_f(TlzR}yXoXs61A*j@_Lu^1as@gJ0HF{qDVPG4 z>ouX6KAE$JQrJS5lFN{rP0J#PY-`L=iGoyFzW=0frGZdB;VdsL#Hw1@5OHda|Jo8< zN*~+;C+sd_8<1&Q zmdiAXQ~9^R0Sd?JwWMH-3GgacU@f%}jr|OaDWFbXdnKy$CG>m?p}lS8imB{t|{?E?{Orxh>tX~sFAUad?EuQYljlNl$}8-dcn6V`c29Li3d70tcx)E zXeqv$vY?nR2N4xb;1i$-D=gB=(UXE#j4as@19|{4qd+N_G_#TM$E(V#GMEDR%fRB$ zIeH0@0ed(TxxBJ8w+!U9l)9=mdBrl=g#X2hJueEP{n$^Xfu5s+3w5*#I~-DkAO}DU z4M{N3Y%4Z0I?%_XGUbp0`(Q1Xd`hbDCaQD_C5Zy1Qw&~Nme|81yu4A@zz{c>s-1x= zhY0{Js0R>3pN)zTe8Y{F5sH(My*z7x&0eV&o7_kS}I^%>C4aemF0YvIkC(OPLEwkOPWdQGikKh5J;C zR9TWU(aPYgiiC_-Q_PGE%tEvn1^?_6klVZ=aKR64TOq>9uA(4NqfkvQ=s9_HDiF0n zTZlsM6jfiSzyOd0extI0C0UtsRIwNZcHq{~NDFToDVQ`Saix#9*skt!FDm-3#URi` zP!6Mr57r_O*Fx7Z0b2PZ4pLBpDG&uB+yL^N%`>A-#-g&v^v($pIWDM8z1XP10xX-6 zT9b)@?P}48kpv;-1exQG#lsD@Lb&LGvjA8E%iBbfB3yz35v1V8R|!?B#H0c;9wA*y zkt5vsny=AYK&H~UC2dmbw1-=uT#|}XB}kR<3JQXPk~<*|6l)csKr({~$2PdzL&H|J zpvZ&yJJ6-MnprZ;@`?u|DgR&i+|d&ap_I9%Xi-U+!>$miON!fC@Q2@}+|w(OT3`hS zF`fu;laZRQ2w@fjK}sJ}Bu3%AdRWxp04Q@*su#41TF?T!sfsu8T>BD+=3S57vk;2&0#58wL7|mu5vifYA=7-bI=*#e0|;1VfU zE0KcKP^N9;(7_=!rs|QN8{1o5ipk=&LUk$_=}p*N3aYJ5%Y)3`fr0=SxTFBikiuc( z%tCY3$yRWO+Y_JD@Ct(?;W8lu6Rt^Kv#e~Zz%8f;Xv@!cyGKBD;UpS`&jh&8C7Kd=xA)gr0j)M3|%z*}{;vo%+dlEik1 zH1ScoH}Og=imUuOGPlBB?!ZPjkx>GQt7UD;ijiGzGKfA2MuEb*r6{o32~~N_ji)1^ zr&`rR1-ixED?Y&pS~*e~JqSf}iZ{Vvo7f8e^)S=@4b;_A_u;=*g^!9Lpx->Qim;8% z!baLHQ(s18GFrRLaxn`*3NKX?{0HZkH*ejy|$g5Sh>ubsYX!_GFC0v=l8yHL6Ih(Pl)j)ZJs4smJL z@ICP3gTd`fu=-#v!x}8glJ)mo~9<49XN@)J9Wd&)eOOcAhTNF0_+1Js_j>5 znhIi@-T(2q6D?S)jS7zdJ<`-j73FZ$-zEp1Tw`J^imw{2H|aIY`wp!VN*DWNvPoPE zDdfdC?(Bp<)Uea~SU{>gZqhwrL6%lh6^OLdD3p2%#XxV7OQVho3JhE*aK<-0EEBR^ zPvSrgiw=!RRSJQq*zg0zWd!Ma1`%1#F?9?%oCHMa2(ONM6U9;vu!0g@+$imJg`&`c zm7MTa=rtt}3Pgil(z6qb^lqS_7I%Rlg!X7qrV!ElDz@0L!!Kj@XjggDv=_G zR=*zboU#SKK5#jlmi=5n8$1ybPc8$?Y!A2iqf_R2j+6A;1gZ~7J)=}O)eCRfe2v9 zz97ZRg$Pp7Sn#B{x`N6QcbE6($>eiS8@R0Zx8V1GxA&tk_`ZmD*IJ5#hj(833;&CW zjDP?4)}eQLLFcQ;D9cF-@SWg_f%soBc)3`2h_@Jq&*Z-_42pM@bI&=TL3ei_vxfy^N$mh*Z(@WUZNc zd9B%a+p*euICIXO+u&^*+RVUuw!kdUsTT%$FSA!fSAluo5*DfTp(qJK_F{W1@r5gq z`(^#b(fEqJU#z(|ESdp)3n^M9`g+4!tdIR$5Qh&OjP~Bfo~+kcz<3D98f5P(cLq|I zHQ8=r5f}}+_W{~`l>w=fsZR!{5I`X_GwY}fey#`7pN=gM34mmY;-Q)p5dS)xjfPr@ zie0U#82!?Z8B`68HoDFFr&ENJlH zK!FGsGHmGZp+N}{CpJ_#aFi`B6DV@**wLa#j}k*Z)Ksg~lmH+}vTS)!VU&UvN4lIS zk!H=DEhA9msq-g8p8+IDkrESVN1-H@5@d?>Db#}r2u_tENutxJNdsin>NR4~qd31V z?3!~b*@I@&vTd7orQ5i2=XyL!_b%RpWApOu>zC!;zYno~Tr$BrH zlJp*bBoSs{L=>4;pHvKiI2U|UWN6%5eSL>e6y>eRqI4w5NL^bm(xqcZF-DLCk2DH7 zBx?ncu?dF6S;k;zBt}>ehY&Kwp=pFUS(B9_29Sg#Y>aY~WB(8?s9}gvBDY;ZAkH_D zPo!`WQkDsNDBxHD%GV*8Vv<&*XRHZD*+ip|0n&#Y&G?jgh}H;YY{jia%0NJ>)LRlU zswj{^F~T=dkdwMpsf;Qz1S(WOnkrGJ18vbxD>hzQo^v&siYatKg$gT2Qfy)m8K@cx zUy71e6p}!|dK!SH8PaqjaL1y0>Y)>v6u=f9-MT4MDh3Nws@B5yBeT05gb^wCwa1kt zMOih45&q;>NzyEM%oZnDUNTGzCTtUol5%NV2aKlT6TVv?cO1Mmw&gL={9rYam6z4)<)M%=sc5FojwYXD^IZe+)KV ztR%oJE3A@YODkJQszm^88;4Ol_PEo^ybD3fNw*Je0Vyf1w(8LqwG4h{LAGoXKs#jM zdTdUcu+lO_QXFne08jU}D;XPggi!!w)S4|Rq)f456r|MCO5Zw(icl-<3}nyY9GQfY zN16z}Hl#>Np?lq}*itQ#0We)l;El706S?Gd7c}o&xRbe^k_12x83Fq|@R$<{$dg1h z^R&e#W31iI(F?U=PZ$q=7?uNG8Je$xQXBt0)#5Mz35L4k&I!=gR=lBC4vNT zg+TUqv8A=c4Xq0bp8(a6_^G57^=Jbp$UurMylYPvThD_IvWZ%>gAMf~l0bR~tLPkr z6s+0;+lV+2Ev%v+8p#giYDKH($RvzqT!~T0z$&gyDkk`X3mPZI9NlPv75%VZ+(yR` zi)>+aB&kOLCgBQKYza)AdQlzyp*b@a#4ZErU9LDsMiUieSEXPa=Ef4oGa>{elBk6% zsuduCXkiQ0(qtGnsmC#f5pJvtOsh!2iT}8rt|QZ0q+=vPi#?{&Agr9^7y?j>EwD_B zV(g?ZkM&DrYA22Ysa7pU(TZA#jz%=GMY&`MBXVIfB}%{y7Zd;==jCiDi$EJ? zCr59pQTc2XZng;FyEclUe%2G6k;3VP%Bh)sW;6oUo9H)hq>|{_gOCSg57V4Bn*cx% zd1OGSMfOS31qn4;(exY#b&8;Y?*G%K?HnstavDFR?h{#2FiAVihs|)wMRaBZkw8X4 zib0iPh(%gONH_9Eg#hVeL|ai3wBXpHWJt1--PdCi;@F{4jv!lT6&p2+S;`XRX3LqF z5{h**%uZ1yqhQ4r%r_{HY{HKo(E=$ZS6B^>wzrgP>}X%NrO}Qdf>a;~a6k5_!CFp( zo8whTbjOLmy)sg)eWTkFvf7Ew2)j!RB|$EW+Oc3Z3gXp5hOkRo=uFman394tGr|S# zTBLM?Y6T=Ia@UjK5+adc#b7l7TbU@=v66z1c-^+FB#a_-^Lm^Fwu|18Bq3sMOYqwY zd|j1H_I22;uyVs&IxPs%x&OsMOY^jOMAn!o0M;9b67IUbGE6}tQCOlqY(cwC01HTv z%CX5ph%894V|_Yq8?YqdLmgvoP~aQLOwq^2yV{~2I#wx7O4f#Ig@t ztegmB@ynLArHD36U|ancJD7N6;n7YC3Q&R;8k}Q$Z24P}J!y_*7t#mgHUN8W9}6*7 zGd8i5g5j!=fFP)2A?o-Rt=Lo)zB=X&1XXB8wnr@n@-#{BnTRZmLQEw}X?xrPQZd%u zo?Sr-d5uJOR?cxNI2{2T`(n@7bQhyKrX=GvO(1Lx&zcaUFpSWS6YKLuJr)?|b}*S* zQkY5m;t~hlh@XY1x}&C6CXt_8lG^Uw?dls z_{Y-}-U?RC)D{n)WJ`1fT}FB&%%qTb+*;v^R>;VTUR_@)P8kIsA}@AT%`U1p5xAd< zP$f|q1+|683au|t0Rum{@U}1#Db%7KU(d)!v>-X*4R#a8^wlI&H7yMSwpPB%Guzl^ zxStM$Y4#ZG+W)APAs_m~9-g+ia2gkwQ_FTL1*mK)3Zr+SOm98+Lz4B60%Jhl)`-B#H>wB)94*n7?hO_5eD{7gY-_=@lHV?Sq=V> zMc`N{txDT08vhW9U!4t5tV2DJLL0EkBCSd-)EJN~PJZD{iVOq+MZrO_0@t*HFVtAf zi~+_$-$BHbyClb(Jckvr4zjFHHE9CvOu^YO80~mmOVn2FKFt&DAFUv&4VdKz{Q^=J%uRvL+DTo#z9#-<(oGxB@|5;}js4MwEy3gp#DJia%TuOPLa% z&`4LL7#ymG#k|=1gi_lTAma>QzS!Utyj|Ro5Bbd4yYS9NOvMilg(QTVj&Ywvp%r=r zfEb8h0EiFpyh%!>#M{Y~N-pF66wsY;3ENDdCb0tyMZxxwLIhyMCMdxyu|ma&&iF}y z&b?d!C{SuO7;KqR?U~Fsz0Alo+R5m|NDSo-!i?z9o=P6h6x2@zp@r<=QVMcF-Vn&~ zNn2@Y!Y+{{#!=gwq#zL;1{}7^3hvAXb{m7SgCoFGvCZ3)Ndq%aMU;Wb!0Z2v$d z4TSi7B~cn){luF}umbz^WM@o8&8XB=%ulEhW-#4?Hx;1uwdP}@iKCcbzg=XQAOsin zgYbmZfgwT3NL-ak6#Hy|A=-m42oJSU+x(FxBHD>+M#{XoN$puxL3A9{se}QB)aZ=D zCBzzh|W8f0wBT4RNC7>2#!Utf; z{?H>a%u5bLw58VC)DI^(;*pqGO*EKG=>+&x;0*fZBLUK21rf$g0#OK`L9kuk3`D4n zn}Ep74^rkpq+l7C={2f^ju{hLj9jaT3?a+^^B-B0%2!V=}nVFouJ(N@VP#JV8#!Z((B*3)LAD1>nHPPWutp7tu{f#{sBPqq% z7U<8bRNm^~jJ8Nh+ThIsL>4Rf0&C7@nUO**w1Kcti{Cxig8h!F$Sd|uTpnWLuKs9h zoeENrq8_!x#Gzv7AZIPSBNx;{E#x98T;3z8EY5%<6>LPd7KKWf3b*tkQbeffF@`2+ z;;f{WYfYs7>=$?;7vo5yS0+UL=-r`=f->?e&T^H9N-efX020(uANCkh+)g>R#5%Uk z!y=13&I+uI1QHa)q5<8`nXSS=N<*R%AY#iFU7hK@3Wf3E6u9fV9w|1N%T5?X_DEX( zjE5o06u!V;1PmM*u*@a|>ZY7e;}+Uya@9$}7WmyfNlWg!*BwN+v`f*}`;5j;P%khb>OD)fn?3%K#3_w{V=5`QOBB!s&dQ zB&sX<*lKD9FZq-&*)WP^0-Nis$_Ek!hE&C-?u+1cD?x}tsJW}84N>~;3%1b@1u-H` z2u;n(i%|5@2eK{^RYms!A)fTDZ(`<8)R7lmL~&M2^~F-w6$IP*W-F9Jz(m|7Nv=Ya z4CY|c%+bWe-E~u((fcNNq_KveP2&WbMjCe~K^k{=g1cKF5VUc3_r?kCk`RKs2Z&+8 z9Rehf^s?XIY|YGW&DQ)kRnJ>E^;~t%eP5p+2oo9t?Lj?!4%>Zc(b?Cl&jRd>y};nB zW|W;wzeC#-!0~l|(`Z40o`;REWwaG^n)~Xaz*daJ>6Jb8P$C;9hEc}D(HL#bWPJ0h_cXT`5nd>>5dmbUP+*=Nu+JB~3NdSM6)lX^nC&FU9wHnO!!mwfYk? zn-;Bv;|0D?)L;M$cUW;4TGUr(tQ;4G1g;7m)uftUW!FArYjB^C|u1tqwh2^3{suFGx;m6s>!e z+=D5J^Gu{~DntLfq~bMrM&ODZz!%xZLnqisl0y2}np@57{1)yOk|=tJkBGChgiKwxIL@vywTJVxx~8C`9e7;rO2Xb!0MQz zZRdz9u_JGk#$X(a2`N7qPfcH4kr&vT_L8WSW)>{x^BM{ z1)6Zz7%rrFN9w_1K}wt1C)(y@H0mY#iGVT6O?y)LnBu>iD(CNhe;}+q1e9OM0rJkBN(d=WTCL9V7MST8|fdJSK`dgSi%kd6)Rin)z+4)MZ z$>Mle>gVeOOvQk)SBcjn454mG`}YoL<~?YyU!_cV^xewxc0?beMB#rm(`bGh@T%YD z2AJ05#gk3wb(bA4j+#l|P|UTh?I~y* zar^K)JLh*y5F$GxDwQH8gG{;nzPoT|tOTdGl&CkCthem>pE6eJA|K=%iBS)Ud0kFn zTcZ08=YY4C*dC#a2cES zJLLldGd78<<&+fH1GSD5s|x-&%1I=;#6>WP%5w&dNcT2>MhSb@tkQOU*$20#e%pAVM!ccE?*f*IH?Aa^f z^_Vzyr)FFfTkxch=aQLyV{_!B+|2It@sym9kQgH(cMG&>mFs9OR$qDOoxD@dUuH=k*VqjiJ$lshKqt%(zu8?!Og#anNeHG6< zk`>VVPG9)u=1lc|bnoL^ML2lnCYW_XZP+l`Y2h=UI;!jE=4Y78!)naY4}*{bUNx%j zNP{BgHl$+Z!8$yLiBt@coibAMMNOMH>hv5`oO%52TS51j*nunDhE^)Y-r}&$TrrHP z<^?<_ryQX+y7l5)Vr*vv5yIKPIBt0Ok6G*OIg4Cs0^aQ?c4G<+C+W0eIey+lQLeli zF3I2bXIfzMANsn=`n^OE}iGAUv=Y&{n^RoYl0k6B-BOC9N;QGF>4% zXj;~UnkbMIS@JBdLXj{AW|!tEfOD}6l( z&}q;}J}|KaaTRpJ#mwh@NuS)uJA=QizohYW+Ed$t z`}J45DnXtN99EQVE8H=J}q$ zxQs3x;&Wu3XUCxlyIgostgly-Oir%pUE%4=>8h~u()dKQPRH?L1GB5kNwjk5gxL+i zmsSQEx5VvF;qPe$(3pyJ`0;ccHxT2Q)<bNQ&arskK>wZ2{&ZQyZO$o z6S7lKJ<0G527$0%qn4Ni{;y8*nz^Agn$4r2G6nP;qy>pncg73DXQobwx6V)m;o8w2LyRpWth14_8TeHJV#;uvmNM*%o9Q&ptYMST9*>;`euDtP66P(D zp;_TRwWoR8ugIjX;5NsW%pJO@@5rfGpPj^)f0S(F{Z?%48+jHXZo7h31!~D(+AHZj zI)-R}w5`8Slh^97u6E`(*`h_ZZ1Amj6RF0oyvzv2-LoR0sfK6WDxwIJ&$q>- zu9*2_a?pzAxD^#i06Z&%7n}sMvD>o6)dw5V|81`zKt8Ud+sj6WUtV$+9~Qj5$}Ni! zedc^bJy(mHK7w}g%!81R&>O%C!Z9BXA0beov4o{YrDAAzt|1x~_<^RfY4USD_Gg_; zsTkibrH`rPrGOM@-Y4o9oGv4(8*t!8^R`S*I5o>s9w*twiK+K%&?eUfU&BW{nYvl+WdAnImbT0m#E3-rK^^ZHp_h zd)p3$A0}1Bi{6QAFDUaff=au*ku8{~aUGGnZ{`Mj-rF|IVg~p34>qV7)@22 zKn9Td=f5jz#xLV^XF9PKrg=0_4f3A+7}YSr6#S`~$^7MZ_PBnehRHm<{=h*YNnyD6 zaOm*0$7J4XCknpXn*4stFG}IAgHlphj)CRgyzPRO8do&tXgVM@zgu|=@}a~f!8KG> z)z|6Njy#%>CP=Dq)|nGk1@rUjQbZRr{^O!l((BR8vS&R6_IXYgm2Z{`99m#@A69s* z3vX9w<-_fMq1A1F)lKDEu8;vx@x3jeNTX(Ev(vs_kHqN+@&m5nWKSa(6jb+hO zj+P%&ViE=^O>vr6ZglT3n(>xf3f_V>9;4!1Qw53%*dz_^%bPHNbJ1=Uyv#(ohSR0} z)W%*HDr)gg6U15oBn{|Sa<=N*P}bsbh-Sn_sZFs?A~TkYWBPTB+9HlkxEk>y(+n~( zmT>AbE3vM!4WQEIpV*Z^$&RPS&Tx|t-UOM>AF+CFL_PG;qW^ds^WZ zl01@petO+j8!bk=Er@L{`(+J0irtr?{}=#Ev9g)^vkmNGm3>u_BbX`hs|A)(@`tQaPPbA< z1}gp~QL9Z`frHt}JTbM)x&2^qbvZDO5}*U*PDIkXQMO7Cs}ZjZDxl6DIU#-oH#fbi zK2qJ4gj9~(+d9o1Gumu;a$dH?PAVT=`+m17_wEbA927}07$Y%?`@4ujJPFYJ?uxM^ zigG(rm@|g$1Dp%TM!&|$^L6?xoldkF3Ovrnnuu9tV;e^@lwEgd5vPVH>dAevRsksM zmWSmB?Akb*{^HiQe8# zYA^;Gs0wy-D{6}=s;a=IFm|Bfj@v9}jk=4E;mk)LxzaUQOEo!NW%9BUy0Q^=oiq2G zHcq8+2D@V%zIKtoAp_^|IB+C;A^SIHn>i>1$l%hx1~4%zXGM{E8o2VHkup{}+lbE} zU{WL~42^{(Pa$#312YvzquGkshw>YgF`Syrd2RarZMmxCC4>n&jhd{=cPw8FpRbk4 zuCYLGnm&rViUNk25QIl8Fwrv`E$WJEGxS%D_9w-YG3A)rn^1e`p({3qo#m)iYz5wN zv*kZ0a=#6Z;H>0wmS)%Mpd!6-4oD_$F}WTlXN7mof&0ne%T(w|168?L{5 z-m*-n1^^~3ttX%eJ7>9~7vtLol?wUQhY7BN>@FE@aTTY zpB>Dxit5{K!+4LEh0lhsVh=iDDYq54MI_wtWLE1gF5x^yO=4OJp`dqE!IR}H%ynO^W0a5GFLfVkZ!;1uh zNiG(Im#O0!IVy%uc>kM0M3?gg)w^^EEw|$8&Jpe0XffNk$yf}Kg>8JEI<2~`#)eh5 zmY~1#lhFz5;Ur90B}B!FvDBU`q!qLZ@EmPKq8eF+LmZiQankBoo-tci?y{EJA401> zy#$hRDTT{bHPEqf3KXj`EKYGdd+z!o4mQd_-!TI1wJRbLnQs;^?c;Mn04H$;a1@Ly zYxD1@I+Ia^k8|}1DOtfLMDAAkoO7Ee_=I&KLU>LAeR7{m*g92oEY1R&cg37A8k0f{ ztBCcUbW9{`{&cZnjVx9x|Hlvcmq15rO}v5yt+M%Y!|^^|m@`w}^eVhAUy9sMV)SBDYpJhWo2h++~ssVB>C__Tcw!~|| z+L;=z%qRQ|M7Ei{{7(?eJ3sTG4gmpG=#G!YFMYmLUcM8~7l(xKVn2*m&*atw;n@D? zxc*YUXDfvrR$D8xO56gA7iRf5rQ6U~JkS*QtVFwx2!6!j+Kn;gwgWZf!(OtxxQ)UU z9-mo-h$^OSZO1I`tvtvdVrg^uFIEu=6Sqb>ZxGxT`n~!_HhTk5XSFuujD?6gIu%7g zPSjd(4V>D}S8B3h-`#qJZ+Z8C4{LV+e05&y;B&ngpArQ;Y-bpnr5g$gLliz@{MFY# z>ToVwf$SMTip$+vZkdkZwR`PfpXKW) z0wHvDDe`i+;IX&T^nhJNu!Hqf?y4va?Bl>MIT2n7p6o_eh~OY!FO-Peyi1`Zm9I=nTVK4V}rc*%z{t&yfTeg^o~!!g7`CPpVFGUV}ti3i<6L zyWV&l5jmy2IUiz2Epk53-jUTMp;pYA1Cvw?AlO>Ms0~iUUI$( z6pfXl60W7PbkaT5T! z1xf`t=vhY;sj)fra4;%UDoA>1NdM0E63fBgrZ5?2hcc#9KZSZxJkn?d!UffhNX;kz zxT%4!Q0x+w_%oMiLBJhAg6XdXWHGBb$$R&kpVE$unn_xxB40ixH!shU)~4{`B6h+v z@4P}iAX4a5DZ;O(__QbZ+(AHkdtq-1$T|gFz<^4R0O_Kw*!H|+e>$+KE@S`n!p#q- z+{;R`qs2OafT&ARiue~T&S-CxO}tC>^~-V)3Mww8S;&&K$n5VBD8W&G`DL+{c-5gH z|9tuBs8ioY_^Xg~5XMty!+Fdf%(OM6TeP-M&Gu1Mn7{_C#DP2w#+_RbO)EY-vc2o9 zQx_PkILWqokp9Tp=cQUw`j>Kr<) z#T@sM)7~?6+9ys!`OT4H7y&f>t99yyw)|NY)Y%5ACg^nUcnwlxnEhl>Q;}IxwWCr- zU=q$ITK(Kjo=Fd(vQ~c6Tb=RyO;6qzb`+z)_goVLuVz6URt%WF8A1oX(_15s<`@}d zsnnU|;j}hnw>{ifTt~O9t?m71Y88p-l*Oo$Q@Q{RD9Yv7t}G1gfR`oOj!4pZy!;^d8WW#NGeixH6to8gGgde4Yi^tHp5^}&mo0?d0-maJkznmf%R-CtYXzX^ z0Rb1~Tb0Z~f|-^9@wsQsl1oB=*;T_oB>lMtw}Pkj8Q#o&Lwex1hJn|R{K1mn!qzVK zWSN%TOT>27Ta$RIN~=q;;)j}i(DYhu4q!;nZ2kByUsLT&MOGx&KLS!Q)EZ;brlVjm zMz_eo#yh&|)yx9u6;FB?3PPyZx)f(Jp#T_q)~G2MaV&>j_5Q$Bws7E}-I>S8Dm6U? zG>H9jJX~&#)GJn>6azMU6fqdv!(dhxb7ar5D4xPybW9i_2kAo$U;X>@iCpxlHSzB@ z-}`^D%t?DLw^cZ;(?U?m*!xt#5=QB;{#)V!J8`yY)xw+DdS>7ehkOoOLpA_iac9k7OgumNAGIs)118mko)Jmqc$>(jEI|FSgSWa-85; zP_>JXlaS(AHNYN-KU{BK;hRMyXwKye>Z$)&t^BtIf!OwZ zjD2K?(!SMDr260}j160R9%jU39@YWrkHYr`$kxTB9dn_sLalX7tjZ6B$5CftpuS^9 z4ya%_I8zbNo%tKRIXhB8P>2g!r6L1aN{XDIxWlH)a20gLTI5#^S!3u5Bl)tXETaQ) zie*LXu4WiTdx<%iw4ChoZ$d7I4vOCMM?BhYtyYgO^r0)XiA|vPe4BMYU+OC$t+`2J z6AtubQZ}*&IooaTQa6h}^C2q|a2|_gOJ)S)TVqchp$!$k^EX36alFLDM zK$z(->fU?|lJenbS~^+UrN%@M7Rh?YhA;0>l>s@{h7YPkUX~R0^j1zlyj3+@BpLMQ z5l^sYz6_o~Efp_VyI84KApRC8RJU9UciVv1Fry6@Yd5O&94%FmB2331fCv5h*>?14 z?AR+|$a=HRw7Y(v0jpWJlfd_OV2(p(gI~{g#4*@vyGXg*cVuJIfTP*@TxTFrtZi?m zP$K9bfw=E-p%@v9RBW^0cPKKnoUp-U|J#}f*BwIXOZyob^tHl764};yX**-Nf~a$R zIzT`K%Q2?8>)>#?-tVs^Smry{MZ7Qj>Jm|acW-zt;xK#{&NH>E8 zWb)Qf>viC318uf{fNVEO#sIwpW&^wJSK7^_RC4c@hbH0~BXDg~WeJs$jsW)nXb_1n za}?l}kg;v1j)t;bmVrf_UABq)gk2^#Y21$-jnkYmjWNGC`+Vod+RPN!(fz#w?^$Js zB7bX^y`nc~6AmRI|L`13BM9^9@^qt=9n0gnC)ab5zhfUJq@CS7^_J?0!{TzB;}5G) zKXVSN3zONMYhUJzL+Y~pC)sPO-{-S8)b~=mylbnYu50Mo=skYd`{s{JeK*DwN6UNg z)N)=T_mpef3Jl*;YaW}|twYLqimX#Y{TSui^*sci+mSc<0oKEq&jIN@%APvwIjwp) z>ph#r=NY(KO*kL;Gdk5Y@OSUw{QW;d0^W}p6p0rffjHC6AD^*4UJTttt9p%qU(v3O zPy_6TYoj$HL&1PNQ!^ zif%-2w$QLn5d~0DG7LCim>Mor)5e`eWo!ye$ggb57AbKZF_u^A+O(=JsK88PXCFqg z6dCY1L_3#MIBXLUzkiyheu~;?{Jr0+o1NlK>LZEnkfF4Svl(wR5PE*9uk5&G#?g@K z9db5SA{s9>(>DH%<#w&jLcc?eC4dFJz4hViCMuM5gI5vK$ZJ8G>qBhNUh!-^A&kYO zEcZL@yjS)o+Cx3X^ijTQuOuH84FV9FfgTji%ySAL5lc4WR7Ur$jb4Jg9BsvoI85-7 z%tXNoUq{V~<<%Br@;GlcH1TN+A$JI%cSp`83G+1ADg)bNj5N8HaZD7%gVji>xC?7y z49m(vf?glErlDl*nozD~8MYXQp&901Dxw6RUF&QwM~}B5R_g*nLS6g~Q}$xi&KQ zouhhH$^kY?7)&lLc(mj?z>1oY3?u$LF1B#|BIpRX^J2WM0ZDEXP-=_8i)AqAjgNGc zvo~U-bxcS187W|a*W{?mbVd^B=0>oPwBp&TC?wW#R_Aj@_VB}PA+sOp@J<~SnU%t6 z3x;+xY}1eKnenS$7f4Y|^22BK6H zXG9zg<68tXcsfGAnNTdaJz7$jmfE)13?z%o@sGh1WXzcn$s*w_Fn9O|mUoTv+K6(s z+yh;!yWeh=!$f)!2kvXL0Iv|uB40RD*_FD zqkKlU-;XG5$&iTQ!tr6@CaZEee1b_fg*W8=!iUOl{L(XKp;#nf1PkzMnB<`t@K}4f zoWs?M+#^EHfK$3Yb4BN2mMjcnkt}N?y~n1PzpkT(&UkXatB!j#_YP{!T5%C05#~sx z+>C(S)+kBsDUu|AT}^rX8u#+4llIG13kdwq9;4B?f8aZhC;I$z)Nboor=EYWKCpo< zVKnONNaJOPRnI-(*czREY1@Lc^j%E)Tt1Kd7e?eF-%2Ja6{D&dJ2g6B~w zW=I@z0MwPz9x+Z#+KCWFKU@AO$$?14(O*m@S%`qKb7{?#PAGkA~V8@*ZE=~cJYY}~$5axeh82kGxKmDr^J4v%<9(NLqQ3KGf z*aa;Xiet7-ksIj?`%UmveJ4G3&32uW-hG<%gCkr`x-GN-p;hvV?)gRy5?nEVrcO1~M70<_97bAZqhL$s(~c$Kj9xU@35~&Gj(?T^&Xs{%X}x#1Bg)%RTSRBL!DMhj zDODFA$c4SS`#o8I&>YBJc%dMknV_EONFO`+Aek$LKQPhEv^5>nz7SNDlsQgru42i1 zBb?$pXYCnr4ruEMTZqfDhL^?CA4!R6KRne$@!i>>18tLt7AVKuG?)fW3u<{ z@aJvv9OBIMA^DmYB0mN9DMJV&t}8vWRyA}sFUxnHBhugP!6}yKgIc4K_mpzvJ;Z0M zQP)r&%ttxJ*S#yB{C_okXb|eues-7-Uw#nYbx*xL z^KI(;cAk8fDlT~*eBSp1MR-4mA98`<>E9wsxgX{TxlHts)E_##ACFY@Pd^uMW)byV zv?Ppj$l&W3{MSE5Bp+EZM-vU8h+2I6!aJ*^aa)6xY$5Y6?B!cm-BD?;$*z#zoN9h5 zf7#EN`QLYjf3!JIe+9*+T9FlBi{HHX;TNe8PD^;I`F65DNdGF8z=*)V_tgug)s;yW z>9%KPu5FN7F1r+E=D5U6ejuI<|HIz!Gs06obwET5eO5y$wq3UvEbUD~1$nNBOpXsq z43$HS78~a5fYTv}ej;P{^mvYcKhNrAEv; zNc5&FBb1hPy9|O}3X$Wd>1B*i3K+?US47&jh>MR$G8oCFRwy@=(i-ks>|d*PJoQPo zkXAHfv0Uoov0-WLS&*dbGz?<>0Wp#eMiKGJB>F~8D?Z2b1J#fi7i3d6F2D7@ePcEb zyuS?!U&fAxdwmdzZo%=E9hYc80;ctd$j6Ac^i;)#=*4_r+?GmwGVo$u09G-hlW7AB z^dzTOV_E#gx<3P#mn?$}nNF$!8CaD0qChhK2munOhEh#@9emd?;!{ha(?Jw)IYYPk zQw&NM+fk6DkQmL1oTSgj4%DiiSw>2J<x*mSqchm!G2k7Jqwn}9{HSm$v!kkrBK`(7C5{jy z7||EAvmh44I@u&jpp?a2e<_D_+O;I&+fqTd#J^>WLwHJ28hNI?`RQysD3(j zmIHod(EyS{Tg6jeozxW~+tTREdy#iu#6>^#Yh|=-WQg=E74L>E2%VIO*8L1+tPdTj z>lIA)S|rk~w8=$1mDiy~pE5&M#Kf_DNgVZ5QpvPaQ{JE}obWQ@wxFB}w1{Q}-yYOZ zl1Qr_ji;mC7&~dh`4BJe0#fidvjBJ$>B3C=vBcJnDNO)o<(y=JpG0ET_@?u(`oL6C zFe*&1+~``S4>;h`*tBm3_$N_-)E+EbOMKcuvXXWu+6k@dkx)gkP=|G45e&@$q`C0N zmwI~^lQN8uaB}-N;-j0ST1F)zD==xUPX01s8XJ|_AfAnMv;^a;g67~`tioIU!UD9y z!9Yo93%Qdcco0*@Oq#S|AsIa^C<`ZBP3Cp>W$415q7-K?b{TiLf1;l)_8wY(-M)PTyLT^vsv+ z1^}WHA<^xD(s#$Gkf8rVn$tkx_y|eYTjGdJbG7vHhK&}6%a+pcuuPxwb2K8Q-zK;7eN}{sR|*8%a<(* z$Y*L**%zmE4aC|lwbnK=$HM0n`FU0y#cL?>64{Wyj374EryoqGjcTWzOQ%C$hhu%G z%T%Y^ai<4swV;4h)fW{2pjzus97huPiy0_uC*MX7jZeK_MP;taQHascyx2zAjhfRHtdIO)5)B;<2wxVd-sc=%j7(L_OAx=06=0aEpXl*A9mUTQ-tn|rCuyi zTk^edoBC*D4)2$NGQ&nIngGs`K>L1?24>jD=teF2gf;^f8J#7GfgB&1H{D~bNKx|K z0fL~g79Sad9>opJ!9|QW4j&2MFe-WMskAs#Px)BR1z1>=;fX#N7o^HO-8My%pdA5_ zfeoU5^5YGc3Z!7AdqEk#8&tUP$!OS;^6Zw%WFURImZ}>u91eR&xZ1wwOoq{cHTGLo z5~^Sz<8kX>$mdXqQ~*}`P3W}@ALN(mmZmZ|k(J(pgJDf5ujGGJBuj7P1ofvrKxaw3 z==c952$$i_L!HbntgV(Ew+qKxIGM9Iz(kA0(oW{JB!DG)CA=)-thqYUz1`4vgr zi6G8lL1&3Yh3aSlZz^VSx12M}#G6^uq+?4-%z=Akxxyq{xf3Q^Zi*Z-FO7pKON6k$ zv7@JD>qIQgl8;Ftvy#E`s#QN3PPIzGLU8H8jD@$~^}N@SBj}rNonFpvdJ9s%L|9|nx@7IzpyuMfm%GsNh_s+ zg|1(>9D_dQ`VA9tuzKj(}o7-o`R$DE6L6?k{jz)P)zwvf+jm%T+!&2GO25D z&Yf*aVZs4zI+-k<%tjWuf2QTUFWDHbI(Qd4mI=a!oZjrY_$j%Kfb0wSA zcCpbefMMyQOQXx^SuHd&o|2Kt*}{Rw??;wik}a6N6H1Yc1+)woudV07^?@7;H6&Im zL)tQiR%L=wRG7WP+(V9nY-FWuWGCMe{_>{0{&tK*9fXX_v!;w!MkDQPM+ZTwI5bd< zT#YAx^+sn1O=vZtHE$)GhJkML%EL@fVav(nm0%7%CA^CmJvz4!1KOdvt`?Nb6pSQW zo#+vmQB-G8lTL$25z?P@Iz4-82y){hp=)G?`$Oz-0^8&UaB{M)RxzIzzDxmtGt>9R`Oo`so}1zKlp$w&+NmyBuB8Y zw(18(QtbmGg`c$2F6151zXfOs3*VAQD>UPz@&+x4hmsqg>Se7b|1{zgqXSS13(N5< zU>IIH+=x;>f;3!5xMKr^W{n0*SL$e6X-vwDt#Iyek!MF^#iC?QhsswmkE7YFbvWeac-3GXK~-gCm=?n`PWcI?}c)m3qBx7my|BmgNmIV4!NknS*2v#eYL2C>L-)ZQ)(ojHfYc zR++6|*-hsOdF*{%zjl~ck?(|Lz~i0N#j2&F#q^yr4b-jpi_J~_9V;6tzPzAj04h|Y zFJe0Yz418=dczg_XM(#uzAjX1R$F}g<9D*&p{p2wS!;OFY2v2MkLvG}ZdF;L(f_LP z*7*K7Z&XOdz)SZ!+Y4+L{POC$GP)w=16$(;wDLONWbVcIW8}Hizs?L#Ss+LIg)9Ld z00xAOuGuDXjjv%a?qzPPi>^az$Jo%aoEK_-_}ip)|74&cgr-{99zFGJ6!NvMXF~X- zsnwBuA4r|1Je64re6N(*I(#mqZb1ENK&~Sv8zByk%#;?MF8mAux(dN-HNho4AN5n< z1_qDtPNt8B_;LHSh9onMfaZ&bn`=#J%xCRtGWbF_T5vLb!8R!hzZ-2OrYv6_6^@P@ z9W{XgcNukwUpKm1a(`PCv{i+E>FMd}`{^5)`u);3vdQu@K$*C7{4y}}S@AQp2>SKQ z&@z(T-^e;a=+?+KLtl7~qG06QxT-J-Yyzq7=rnOPM;d%_>6!7@^Z11I`s?>zW(s+q zslNv1Uh7hZ8-5E(6yN=SzRUUkx@$(nJm{{-@YQR~GegT@JnR5V1ir>Se-u4Gdt3~Y zJ#ag&pgf>9A#2jeI+5$P+d5T((0C_BUN~H&*gpK zexZ%VxtUrsayAt>@RM;bKEp;eP3oJ&U$BVY0j@coP*8I2k~$oFFyYM9&|SH zpz!r#n2N{ja)LRu@M?-H<*V0J_9l`)O75kRZ-_Fg>t;b$@$IiA(+`GzpZ~rs`n7H& zlIy?j^WocVl-G{||4qO1qSvw6wi%0MnzDM7B=wEx3^zjqu$t09kM`<+B#Y7i-wa$!`A7n#fb-Y?nSo=| ztuxE}Uy;Sw>i;2&N&iC@!?c+HLl&nVDb?$|{V%e(0q-N}|2eXF+5)EVQp~*a~hT;jI{kXv%y#3@%UNP)LO-eD7sg(lPrl5 zYn>vE4ckq1Hm=c50Q6HbrHN9BrDmu_2iRnK$teHK!eETE)6{kUF9xp4>d{ziFVC^6 zwo2iHT8F*zOG40of#`B;-e+gZC~a>Xb>PaYYSs4wvE5}=AXRpq;^fXH zeJ7))h28IqIL-&2JB6RW?+|k$9svKA9jxU-cg^_-9vSCqxm_G-NFW!QZj!s$X61W@ zt0>G`Lay=Ecr;j9R$8ihgz|VqC%mwJtj;UkaD?Rdr`9S6PqnhqPjNjaIpx}Zs!0Kl zRSk#QE9kZKGnJ_gkWAAdp^U^GK(IAEQAK)D{rKmkw84+zNoj2c5#QActFiCP_)+3u z^cTlbx8Bu2r1Xq!3D&jcpHBZSGg1N6JKZ%vx7nSNN0Xl5Dkzeo%Qmd*m!Fc@t5`_9 zJx#}irL&@)Cc>Oa?|##zLp?*rOM%|-X8o-41eQ2!Yj zenaoY@Bx_h9&NHF7#ti2i2F47U}Yb<)|P2qv)GxQnf}-lABuz6vegr9 zc*-LY%x3rx-npd2SIr^)RtD`TPc~9-y5Sfw5P3$4QJ5Q{ib07%9q8^(YFeQ2GCBVnxsxE#4J}RoEU!0i`9ggKjKp1SXU1b zq^5@<40)WlN8>X|A?DOyyg1v%qWiD1I^&>h%*w>(8nz%789NW~*wh^{8Pj{U3BHM) zu5e$cyaK06=(A|manE!CIyd*XgLaJhQW;(`GW`MOa!z&k`4)gF(+ycrG@qO)>D3>dQQD<)>MS z@_R^>Sh%g$g&I%%MY^mU(MC?1J#QJ&1igwfb!OJT`H+@}-Bex`8b71QSs|i6F zSn%Cj-5q!EmvGcUUBRgnp3RbM*YZF4Y@&6VNB%(4aFX2$erp{0KL=l?1szk2Ous_u z^Mzvs1qxYZDx*d%$6^ZSJ5>*9J)ez}4gcw=;9p--W{+=gT{eL9`B_^Q9Fty0M=@$g zRw>x_mIWjyyx-*G{+!E^HyeR?rv94~T}j3m?bFYaE+wT%I_p%t*TZrrGwMm*58xw} z;h~@wQjIcP4J^|t`f)#%#ZJr3ShLSu$DETv=2sg+zjIQ|TGSF?)~|3vYnomVUZruj z_K%@?FiNvDsrz&8qM!14HRXB9Iy26IM8w2IuvL;4Nb4zhq9zQvHKfcTKY1Urqd5@c z+4xKi^bUupDErw8lMK5`eh1H)Wb{k826$g&qi0T3C8xARoTdtc1R5FAR*XK=YWpv5 z;fb<9vZ^2MvE)aUS5B9E0AGAs)LL+OCwRUWOstqdEiH@{SK#EWt$}a1QoW}iY%{~H zy!2;PI8d;$3AA8(8u;1T8Y@Q1#>J8;E3R4CpFT;@#jYui6ZM$e#=PSC>Hcm)`+^4+ zD{-p)DTTB9^tSPaCi8`z(O0s1VO@f+8@3e>Vt}edu4Z*Kjt>&!aSW&dB1#raUCk1xymXg}fBY-n8P9dwTJZOTQ=Naq?$>U|4}5$2 zqpmOe8c$uFQ73+LecwOx`@uy3=RrjMn-Y#DA8GzwgrG}qQ_KZ$z0|)&GWu@9wo&q4K=O7s0DvBQ zu$J6Elzc{+QfUq0rzHNbzzRV7Z-LbuQ|>=*G2W9~ERFHM9azv-*dFR&i}nEU?(Rt8_o{}xyo z?JU%vHn^SwE2Eb!N$PS8W_b5jER>#AK8~&G-Y|;2^I$uHcXV7YhB|z$ES7(-#zu{E z)^9smdMLI+TMFB0H%*D9b~jy3_;4ddL!q{m2SdhKFHOgO{S}vq{~@yik`2C-WBXDXH;MZB11jIr>td5VEd$6s59P-P(J5APav6Ww+@v zfIGh%1j@TK4{zApR9R3hZ_1^xC#*FQe#>=g8U7Vt+_7vgLEG6SQ-9jU?uLHW-ItUH z>LU6pi$(!xN1U1Vc|%WIiURAG`Yg6xzBfl)(&T@@L{~er{j=&*28!ES!}!uEWy zA}+`#5HlqsXW_u&=ziA(Fw+6-0L-%_(HAz$8y3o%o^h zQ6-C?!hTBHY#X$vH@>oTy@0nxyD)*#0q3)xdQ%H?Rs@}Z5oftfzPu@Ap$Y~+&jd5G%OT;x7Pqu5BnkB@y=*7EN)u-u&(Sy@el0U z#?NsU>+Z{Oy`Sipo2ooMv)e#%&L1wvKZ~8qG`(?WlV`G(noX_M9W5i&@eU_6> z^q%!KyD$EGf&gMd3wr{9Ri+VQk#WdrG@1{Yy^D$nC?U1W4Q3K0^*JauACIyI>S8Q@$#WgcbzxBOa~OIhYKR0BGFF z6Kh0}Meb#EC_&^TQRB#kH1H>-6v-S(!bh5mfx48Ve&nTiA^`7@164pl z=|sx}38@~p89+9rB`j4FQ(*#8my{7AkJ9BOOY+m7Zm5zL3F}z#a;Uf6(vOmWt3!x+ z5V<~NiB7x;ro7q_ftf9ZN}(JR3yKgI5*8&jm7Y@>vQwEzk|dRtYFQ@RIP5TRt|y7? zN1EvszACC(LCcYxp5~{lP-AAYS`xkg7Uid8aIHWVz}mHBi~w%^+i8XS60&5L zDX1-pLBs%;FlI!zy^V@<2@+h&w4=IA@uV?9;@6$(tQ551C+xW(l zY;lEatQHUN`x$2GIq#=OO=|M^xzwmm zHTdGJ>Q=kDQFMN_tY=N@THE^8|2Z|Tcg<^AvAWm54t9`YE$m_&``E}%c8)YXFkLJA z+0bUwucJ-vY7dCm*3P!Jx6SQtdz&WC{4z|OxZ_Rl zdb`KmR!j)K?al9gr)1s!CUchq-l%;O{7wTu_;=>5@P<1af)9_l#IFNz2MPqj69*rp zGY%_7bNu5UXE?~W>G6?A2(|tHHTk&ixUkcyTuBvwIT5LnaGBfu=6I=j%g2ZF^oYFY zAQbA0fes^s6CGAMKl*-Ru5|C|xam-jy3|Mc^Ql|?>UA+X*0;{}t91SAU=O?4$G)7Z zll|;y&tTfu&i11)z3p(1yWCYMow*;dMMkeb!-K!?>({vmQ5t(G}Aiw*Y7>=v;X~KS3msc4{zkt|Ni*Tzy4+J z{{8#E=koV|0$6SKH-H9sfC!j?)Yg9r*nkQbfDRaewpM@=Sb-LJff^Eg7$_SIxPcx> zZV>o^BFJYHID#hFdy030D!76ys1zyKf-p#HmluOHSZ!fegAvkrIJkp%(t$kqgSF;^ zzkzW;7#}ZKgb^`%NXSjFw}b;Bgt8HWPWT{A)@=a+03rDV1p@#C04zZOFaTErU;zLK z{{RUH97wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z$T6XUjuItE0ZFo?$&)Bks$9vk zrOTHvW6Fe>prVACE0^*F5=mo^LH=0ekW40Nq>@Jp>12~gRw<>GOHQdJmQiNOC6r)3DJGRy zmg%LLU8Wf(nP;}C=9pWexn`Vh&iN&rce44Wo_3Zg5Q-|M7*wEy7HTMmBOOZOpo%u? z=%Z`Z1Sq6(DW=$HlxC{wre2LyB&U2Okc6ZQO$zF%sHSR?sjA8~MGyo?|B+}xv$ksM zt+-lLYp!sKD(k1(9mHxxz!Fp}u?4ZX(Xl1%C{cEbHEAr4gOb`Rvk5U8EU?&GbS$>r zp2k(UHyY$DjYV0@t6T{ZS z(7*vl38JY(8U!M_Qf_$au?!!pEn#30D_~S|& z4@nV)7P7*$h31@#jAfrEnX| z#1{p+wPF(zSl@~g61XVIC<##*h53GAkIsGMTuVv<0W{YRE=WOC{38eYTyZy|h))u% z=m!PWH#UFR!xmEzU_t<8GHt~TF0#6v4yACzip)+EI^4n({}Khf>z-NU zMyucPj)O47NUgZGI#Sev6B`m8*QC&jcCdnNiQ*&cT-b^k3Ph3haAD^VqC0^!?UAw* zo(pYJJaG+eQe2BdE9~(PP8d%Lp&X?@T5(F%NnsS5q#B!J!`&@Uw`3iFcXay<8 zKnic>ParJ1p1}+@DoGHa9+?ZKH}e_3>xiUiHmau<*zq-xy;X0HJ!3lvPzo+^;)tAp zA{pn(kQ=Ubt_pi#0tnfT4TX=Vw-esiGFLdt|6QkCHL~ba=UPNf=v95wN{Pw-c@}X} zw4PgNM=hGlz=7;)Xk6U_8MIJQ+$!XH&m@OExG(|d#)<%2AcbCA5lLIXjsTiqg?O<^ z3R0}EkN4YTDO_Pnfox*D?Bypxq`->)R??Z0u!lhG@e5a=?k4SRMSTs3I{wmy?I=$wK{25QqfUYC( zY{)evB)1i{@~0k2OI)%9b#UU-!u`|-sJUs_iV75n7Dhog1IDjvlIS!kJa|D8Z&=j% zOltq`m%oW6VX_k>fcXH(uTi9t!2ff{h85s7S^p2$ZQvn)rHbn`=d+9vc;)c6o9V&E zh=6F!D@sWLMJccYeQs!K`LH?#EhO`W|GUR6TERjQg8LT#>);fkitY_?Z5%e0-F3G;T7lxRxK@9%b}pmeM_r(q4>Em)h*9Q8WgR3${b;U2un z+!%iFQMjre^5V4LY1~2)CD@J)5M_F!XfGKiL69U!qULnl0w>7u=ai>9Rw};1IB?Mz3mSWHJn)=v;|2oa<1`PIx=5^hfrOZ0>A>hWjoNIiVXU zv_~rvFy?wJlfd{~9V==vkTgem%43r~0k-`Md)L$2F8oI+y1O%^y&9GTD8rFuKh`9u z67(7*CFofzU;==%6>X?+|1Ak{i+0$9z??{VEUyz{R*Eu`0ztERL0k{ld-ERlAmNzf z>+ADJ`Hjc)O8#JCwg66B0DO71OsDf+&{Pk#AYSET3!MW^3P=XO69uN@O=(t0vR75I zQb@ixVTo2vQ9wRwGzFyKI+NsOsq;+8WD7iGPqH^QOrs!q=+ikx6a{2+e!g&qjFu9LhIm%tHgRK8l7~2G?c}8pTtqMN8&W27jgyr1()%C0+IK z3+=!{l$C$XWefhGQ4(N9HKm9`=U(MrFRmW3k^fe-JKb!MtC z+Oraq1Bhb5FsL+!jW=?cRDUs8Ixr*wXEu=QBTA=JPjbjfw**0%Kud?je&)qTtYAo( zQcoD=54y%Xt&?VaG~&)efOkNbWTS zw&tC`1TUzUbW3mICe@Om2RxgQbiPRd>`)5_$eK{b1}0i(!RzWf7D{eRe5BFM{A5_f4NiEx($UekCzl}AgCH%sQVKI#dg?pckd(@Z=FWfsVO^}q`CGkt+h6L~r5O$i8q-!DCN9XqsWvhK7=AI+bW5!xW>J(zH<45Ncq~t}S zQ#MMNE--=0em7w_nRh3iLFf z%Qd1ffE+qY(z<`jg-zwd1#)|2#+OKur+K@lTuL{%_@uNJn398#5HKfyw3H5ICY_`hP znIx?PQD|Erg3ZSgf9SJOfi}rPh%Wn3))r2AcV_e&0j8Kaqco|2RZnQtv6xt=+W3j$ zBSGv?rd9>0hzU}p;K3vbhOn4G3E*;vDpo{CS+Zus8f6$%v;|sVb~9vAuts3_fIcq7 zs-g;w5&&h>*i@!kR1!N=pz6e@dSvF4PpaC)sM3t%%c zCu5A5C@Qu_jS%F+A|X6&@Q5fhkRMcM!L)*6dOyTCi-q)#<+BNY{|YvH%0@yaUTMUq z&*m!*r#KB%Q7QRCXIP9gMOicHOlNAujn#9*$7*+TeDlhQ>XTIc=7!1je^oPV1vq>N z+f>6glt~~4?0{3j7_omW1z4$7rdWU=*bYufa}fA)a90zP_H>6Br>rVgzS6QhJZ$-6 zuv)MVm36Xy`aUgu5EN`(7cpEC+!c|7T!A^fqSQeJ3}ue@YDeaIRQhNS-a8Z%effiYvs)?H4s{}rZfsu4!^Y)sUB%3$95PvC~W&3^9 zX<&q;eZ6x(%Ne}dSDe3txO`; zhsibdJ9t4|ihrgNjP#CbZJdt}H7cxgp3c%QOkk^a!WJ!cQa_`kLHygp69OU4cd zY^0`pV12!%I=0p&kuT-^73BO{W13IE)23geK0SF*RbxgxIM#SdMQ^8AB39Ubf9eAQY#E`CcsRO+uA# zf3=eOI^_K0&BumX`Npbrw=6vy+kt4jK}*#h|0HHFn11tyXaP;7czLclwAUWwo79Vh z!Q-D)Hlw5vnM*dJ1ZIA**9rryxtlfWR4jlmM31NQelApg_@~eeSidD5ECz~7mbZSL zn}1SJ3I}})2OYSa>6$O(hQO1!i(5QH^XuPsn6;{b%?`Q5u7R|<;V$$G3%I~r2%NWM zyu*8*;3r-2Tvbm-qPEC^uRAo_)jSb}N{8hOls(Mcg}vZ~yTP-7=x9ZtV}9KAzqu}Z zF&Mr;olA!9?oFm~LVZ?S@ID4M1-AWatzhn$(_T~SgIZ9(oz>T}bG|BAqXx!Jjm?Ab zL_PN<)l~FCc0&fOvw1a&eT$@pn;?63|C4fvHWK+xteuH7$9LF|xM4$`ayQ6zRW*hV z81TZ=cN?Ex9VoRDfCO5AX6Ywg0$iE_41nZB=wR_v2mwMuCQQHOQ)81xV;hNLN?t2A zkQkmFjf7I|Ab2~e!m6smxu{%1*WA-{ZQ43*y{w7e2ZBkNi_b_wA}LPi6Mv)BtYGhn z0BdEvRSW(wZaB@C{Ut>oh<@w6eg4sq2MT6 z^;)&F)ozQD1O`D8_-KpN1Ofy#5&+rmBN+lxB(WlZFr=$i1f^^WNw6fVdR&x5kVJ}I zEqk`y@!XQcWfW5NLfUFI(xoJ(wx$qJLO|?TvSrPlP0%vRS+;H6zJ(iC?p(Tc?cT+k zS1()zZlxA9NU9Ynfj$EhAjN8n&w`p*2|mbE3c)du2M;C_MM9KOq@oh+Os3#p!L6i- z^%0yk$ZXQi3^6;ZA+K6zqbxOi4g+dG4&q4R>#aGPnfn^0hio4%6PsxXGo6>PMm0 zY?FdB$VkzG3{D7;ia5)*V9-C{1|wh#1-~L?lr0R5s<7(G*TF0t(3ER+CYy}R{u)%(s?ztw=a!^ zLerjHks`p-h2~Z%3kUK_~ z-c2R4wr#29s21FM9^CM&><*l8to{xzxvE+jsK0^$EG4S5s2=n*tH;{a zEO}R~cC59kl`2}RQ+Mn0utA?Ibk{{+oow3M8e1%RUw@s!&BZ>ecimB(^2D-oKYiWM z^BZ3Eby33>R?~MUtDtq)@?731sP9zwt5q)ui7ncxMM#2j*JuA}bRCwSt`!kh zZX(Y%=`kdMWQITKwpxwAY@8zjNoYX|TM*I~3V6T;D$sxkd|(457(ogiPzn`vAOj=# znhbVu|AHE1AO}C_K@5)2ge62F2o)&86viog2C>B`KIcFF@oNPujwWEJq&2XrPRj#AN#16NMs8F_Y>WjTZ37G|zp~l&3^x6g^2Ofd!B@-9e0T zboRWqAT5iwwB;;uDZO0sa)-N|WiWk-MPcsJn8QS7FNyifWM<5lx@;yEk2%d9lIUjy z{{xy^1V)|$y^$kFcGatnI^$QxI##ll)vRZ2-$xT=D73cK ztvGcmGojf|qw3R{P_-*i`6tg_(#3yjJt9!~I!|Wql&F0@Vh`yVSH_C7dyO^A|NEF4 zPQ+?#oIw5PVhJnQ%cc*pi8Ab7ld9LiN>8%S3}>UzDO$yr7P5%?EQ#Ja+pb29qp_o< z@Bo{rH%=6Oa@lRP%6Z%2%0;)q!>w_{n7oZP_qP&7E^mpOmp2A?QNFcqbkD+77L~NO zw1kWBd`p(`($>5dJ?&&)dsS`5g}sS&>1g*t&-ePZsI_zyPvr|e*^WhDaKx`@AG=va zy|=!q>>gCJO4P>6l)FcTo-_&kTJ@%{it1|Zfd@?5C3g0_AHHZb}Ls{MB8bWO5w&nQloM$bzMkV_7;@=5M)~0+i<<>Z=(<=2~?Yh z@DURdun0TVKSgcCKl zXIysg-%3Th9={fGk!fk!Sr*8E33e43h(_=u7O`F0-h%!5qR<&u>NNG}jxAV`S<;J2 z{h`k0FI^RZGKs_;UV(_v>cN4^?b(y&OoAkc1X6(z{X(?W8?Mzuns%9-O{j%-5R}$= zq_h|szq72-TR?!Tg$ltvFFO^N;E44*ihsK?N%*o}N%+S2&ItiUME(uj!i< z&Zr2%D2mGYHUSI09z-JBA}{=iwybD{Ux1?7sWeb)kj?Xw&ib-E3O}zH8dlIjIcf{W z7=uOos9oU^t6;h&ToLTatr$Qi+c@ z3N+y$2eDvjTxa>FttG||Z@99tJZX*xOtlGEsi zO;p34gR$@$Mjtdr_em#yX~8W(J+VlsD0sNZI-^5*odrZ0PVmH;>LRhwmq}5Z3ONWb zn~P_QHdX*W7MT=DfQkGOJ6zHXPwJufsiM}BndW=Ib8M*yfX4n|mvRxuPH`0mi9VzP zi&miumAI+ni4>A(7nnc{mGHNEOaP#W4|F7#|1zl%keCdTkOGDXc;nk<1K3NlE5 znbO8&Oeaw?j&iH3u}O|=N{enJ7frZHky}dW2^sZ3iBV|><9M%4JI1nHnwq;BsgQzE z5I9nJkwW%CS4(l%01HvH+Gj@z~fA&&j9kSyVymCLrU5DviPf>D}_zhJt-yTVXn zIVm{IN~{S@7zIwqHb$EbysS%NOSddBInYrJ&twJiam29@CA*X*(`?JTM2&Z23e1ST ztGUa$EDODy%l;dU(G)wgND$AIr62*!{~oD4PJ22+lncOn%w+?QK4FKVI83{&ywh+> zz%)ZmK+Vs*nkdjq=13X1yi18Ai_Lru)O?Zgyh}3p5ee}Or+l#>5j>~!59@?X{850< zk;{SmAuW)&!_2nM$&#X@5@jok)7(qgvCXfe5(1b4*33-L*p=RdP8iY7xdREpKum*( zBy5q-G=dQP96DY!%Mi^AvTP-hd6lYk6)iZ3rf3Q;>%EK9iLlIwjU#}GunK!{g-t+{ ziD(7HLx?umf@ez#kZ6i_NWH)Cna^`3PbtS=yQ-Q|%6?2T77YobC<&;;3X9N*IUxs~ zNC+Jz3DqFdz@dOsK^Yc3limx#|5muarT|lkU6)!c8kVzN=bT2J>Ka(Ublj#^kbv`!LiB|XayZr%c^jjIc=9Lj8TM$ z3Vno$!0}X3iBrK~QGq}TqVUo*T~19aoWprLc;6U{#$YiZU3} ztT>9Dw9}?oKakl7FI93FymMItVHu zjdsA2e$9%`f!HK8MCFhP|MQ`XQYsq)8k$Vyg0EW)pc@5-6_8qhyMY)5d$`vgbwTxD z2Z0@xrdWan*a(z8J;~UNsz8Z>MY_${0>?nvE#Lwh@s9)Ihy;BY<;W5X2}cOYC^ck* zDFQm8c-StJBr}|@$9fXubPHVMols&2e{hFPB?DCJyn^T&Rv1_-|%RxW;m`Tw4Ish$OS*owlSaE_k$407>}KDQLmh0L!3Vk)bh)we;7F zaKPtNf+%o6BNY<-RRaALi2~UKU*ICC7&neklgjDJ6rG5VMHtOUpmqS#-0i(^Y$A<7 znY2lk19UB-5(=PT2m2DHFET%dsFCr+;Eaei0k#REP}grch}Zq!qP1RRWsq`di2`;& zcF?^eSqBA%kmAdXa+x+?2{n3bSA?n4bFm9oWS66*Bw&>SA*B^38CKiSh@;#UghAG) zRD!B774rCq|K+_nYJ-S!DV5o1hZ@n8@AW|Xfi|pgxlK{xUpq(-1e#Vmu&pBALCy=b z?7HN*p$*)a>N!0%Y*~dZkSQsQT^$Zqn7Y5v&BpMDQqW*2*~K8N3&m6j#=MIl**tO$ z!(J@9o>LAdQ6tj`nYFZsp5vsQrP%V3*~w9YkfDlMo&c)w2;10#dZ+~gsb#8rq~y>* zSMZY55haC~l1)Zj#?VdBVcPBv?YF#tR@w3WVWIt!wV3N;Slt%-V0wT641dai}e`)4BQ2UeD47xj;>k)$r{ zM5)k(|9aRHP8nsN_!Dt<7q3tcp=}o?#Lex=Ler2$W-Oo0_=u0hoev!|LMGmVvZa2a zqYykt(&3Gv;fZVI1m^__C_-KjhCO;k$hEYJQlJf#z=}{)mn9=#Cv{g6B$srpLhnlg zuE4lc;pKyfW5Pg*H%1u`)WCWu(}N64!XSmCJ7WiC(x6~S{r$&55g3$VHg?fpKpdKC z<<&ps#!$J5n8?&~?6JCt6`;Tg^hH4U2~?!;NQSJ6T7jXhrU|Anl~x^Hg;=9l7C$8j zK%RU(^`nh`tp{o&h%8u#XEhmD@@vo7Ww^FPM0>JV8Jb4~H@=8T+M{6w5aXjf6*E2+ z|BX)Z!7fvvFRW9Vl#0KAAihUGV(A3RZ?X z0uT{6u5W@+#UN?f#fXHiK((Au2uCc4ETDx1mBa#B6IA26ZKkw;X3l_y$x!Z-|5YgH z@lcL+D2nkoS#UL50!Kpvs0V*=g~vg)CYjj)-B^#lAplRyPx(XOPH<-2MbsJR%$Yng z5R@K|wDA7!NY^)Kqa(up9Qpy(AT5ZA0GR?dSEziXua4y|Wt9W+2oZ@Syi}>CHs5w7 z7YkoSczl(P_}7c91$KzcQNrFjc0TLJqkv6GjxF=t!})jT@?!a=~@^6}SS)f)I2GOYgny z{okDwiO!x&2w7f+lxtAu7iFwaRu|0W#l2PA`3 z*EVJD?40;gn^xi~nq$5GKzlUDnv&qt%R$wW^hocEGYX3{^7eZwPOl)Z##nEIRS4IZ zZ;uEYpCAt2b@3&S1dliojWVdEyXbGGSHE-^;V3$($?=qNq)pnpHdzWQ7mV`pkKs8; zeI4dvPNN8~wlT?sET;+gIN4GdkBNR*Ps#bhz8*T_3T7Vn|28P*tOqL}XBQoxyZ4EI z*4?ucT!p}7TOOZymRg~;W`k8jI2@i<{6oqSXblcLGFKFWMrY+%g*KmAhK_TChC);m z=f+=4t*Q9?NF$vGn`^d(!T^$y-ub8v+lAn7LcvAvN%`C7X501%|A8w57eyJx=nbpz zKmcZlY#W6#(A0jPcZ4hma-ewpAq)gRHxf6;g75B4Dg67Pji7a2;eN{MmRf<)D5Pw) z+p=kk5(xyhkYe?46RUc*I4L0DQKH9?B1ejhKmcKcO}1D`OhED_Ns|&$N~%?li;@IM zNY!g2C4!WUtuB%wB_WBFQ4Gm!BGZoH1SL{7*pB50~gbkk9wW7yduwM7a@ z0#Zn|8s(6{Q=>5Fwj7C)K&yHaPKHc7_pe$>4)c=Pau#St|1t-6)+@6ZA53j8! zxvANlNrYaMXi%q?g{-(p85u>3rY)?>Zkb~6XcS3=4R4C7bE++kMwI~WZI`d_;KGL! zFK+xe^5n{w2k%JIrST+3rD$sPv=zfvXccN~<*J=^?bDUEDsQV58R?N$r$5TdUaJI0 z39K%UozxTpeueu*n&hf@%Sk7lLfF}7OKVA>CXhenq2(WS0+nUogIbIN-%2*wGQ|Q& zRcBx=tvDt@6hb|?MLo4dG@ur&G+3TvQY1kUT>jW|UMtcCbsc@RxYEXoGSYXRE2R)1 zofg)G2p4P29Vz1$;3-$ylQUxH8d96sW0Z&1orhzE|E>5^UOOQoc$9?N5){<0cO3YTW6ddk!H|eT9xY zNMG|_dhMDXNqUttj}H3qxC`$)>wO(Br0LHG>tB?u0P4Bwxf@!0NXpwDz37DA9{%p+ zf8_n_g|dhpTF9jp{D9}9{UL4cUH2?Cih7V? zFT*0#u`VaU2~x0vzlxx6OoEUj-KBdRESCm>1H!G;PbRF2;0P}UEZDdUUdl0vPCjUo z?#1wa`ne(BQi#J8mMbk<10eyRLqd-zz=nKdl?+Qb!Xs|*e&rI0bAUL*ljyJ{1n3n8 zd!xavsDveenqtbB_{1Sn@nR#aOA}RC5*@;DiNGl%5PKEE-azg*cgc$bkrP6cWXp*& zB;$Ot^+rCbup>Y0AgiL_Dv3?!DO>Q@6mv*OGOqD1Fr*@G8j?9Dh0rCOvmhu#DauiL z#3im9PH6}=yHkdwH19J_D}AF%|K)rRK(1kq_)6!IT&6OXBFUvl(ih7p=yEQ-d?iVG zSsG%(#C5LQ4>MoFO65>bO1ngkGmCl6Z5A^vy(CFA|AI_eYSWm<2^3k{_Yq%>bCx0r z=SZGeOwsMB6^4-lMH=*{U%tef=H%y*C}NL#up%Nj#HCu0k{?nsw4n|a)+!E~g-8r1 zi*GE>C65zH2x` z*0i)O9b_Mi8Z16~wzjq{mW8r#+hIY7nXbLuZvhkBVzIKRUe%OwDVJQ?#?!6HLntVF z$K2)e2QbT&oalC|-R+)J5~~nwaV$F$@iuf_1IlUThKo{?sP`}E-EFdNNL~q^b}sLI zXiMS;S^5f#vXWcZe+l#_JaMfCK`Ff~(}*m2fCbGheRPef^YX zm}yDo-msFSYc`IU(ac`UxjC6~wyChzB-0I7HQ5PM=KdWh;B7nGP0J6)kPFN(9rt>=-tu z%}(M_sYGVc|8_GcQn5haIMJ)TGoW$EmbQXBtrsRqq}wfT%N^_2LPUrbdLmXE&$%wH zp0Q`lY{gh3n=c#nZ@`aeNMkAI#ke*xOxlPhcDUh@f)?s;0Q_Tv4_e1C&NPW%(vgj- z7a{Gc#k&kz%2MBO%IoAc6AKPxVrBG-o#soFJ04$~MCIebiE+Z^Tjq!x`QIrX^|Fs6 z-edinlRca_)I~|tUm`^kb=yF>o2j#hY=KmSG7N^v4e_CegqQ?G%@~@3;lXC?uEEm6 zCdNQ7!|*wt9tu&~hST;fNJ8#xMvfMwVC9#iSqdIDOlm0XpV$Sc&l7nFy*4rUj(1Ki z_*_*g|1-9Q$pg2!tt1uP{T`e^ttQY~kUQ9?B+b*SeeD9zHlXoonA5X+IjOYasiUs@ znZ`SLg7Qgl)P^EksKg$*+RD^M{#p=I86~mP$c_GV5cw*I9bd~BvHQ0k`dsSd)U0*{!pA<%B@h$GNiBxPQc%;mAFug2^obi)B{hH1*BEf zXC=hnKtvHmKopEYJ=}t3-P*yi907#W6xEtbyvM-gMo3u^$psPp!d8RS^o?)~8O>{!)pNglD8bZA075JWp< z|HX7ffzUM6*RURZxZd!TNO>s14)TY8i~#}E!l|G~m`O(_SO%U1*K}Cjv@C>NxEx*h z2P?FLX8i^I_`|5QLM_}>98poF%#1Ke*2l$76zokajD;O+ zK{Fm%xo819ke|lEL@~Alqa+6Bm=MC@nNXEW6p%w%)ElvFMKnxj0}exQ0RUqmjMeq`9Aw1>I2;(N(y@CF8mW1Y*Eh+c>q;t_hmiWsfo9-3=Ma0eM7I64P}F<8Sb!6d=I@)q*G* zr4Uj_Jq%889FP=50(=m_0yPjUQKcZlQ?(5UdvqFvh(aTl2_E*w;)O{2oZBu@Pl|vF z89)bIo>@*AilwlFJ=_xZ%vZH7n=m!yUn)To#Eg9CkCvFlpb!w@QJsvm{|H;TC7>Y% z60`^bOo1!FhZ6LPs5y@!)dH8O;EYM;jD6rcmEFZj(-DRU7YM`_{N$f;8%_=Ol7%~YHPML;7jR?5j7(Nv5F#;2V| zdd7uYV&|wxpVlzwpS*=}W*Q6epRrZVeLf9eY{4jufhJ7B$x`p6{i`kgObcPEjtY-xZ#(X}=RFFY;r0BOG{{)Es$-)R?Wrd(6 zY9a>G%P177fyQWcYJe6fjB6Z3##E<@QjtzL;D{jGmomj!98rN5DJjq=m6A$#X2wh) zD4KTLn+o321POq;UDh}$asFv@*c?zA9ue+XLVXSaHKEWb!31=LE0jTnP{mT&0vF`R zXMQ1$SYwvp2zEG9q!{BHeo0vUr36HRWnkDDT1TC*Roq0$BUW9^5Xhc<33?Ez?{v-) zlA#ukPw9Bhq;x6{x`UfcMJ-$h0p`iHvie=_$mGXh~foLD@n(x1m<_> z6M?vjvML6{REI0H$x~nnv0{filmc(~$F#sl8!SXU_yQ+j{|j{#Yny!A@T>>0f}!77 zhmCy6w~bFv_1V{y-Xw-kPlcjQz^1CY0=O!~5*mnN?2>#=AwCrl#9|1)N=gn61w+6G z0MUm%jLkwUVJUoSk{GL5#LsHLA-vkc$x4sd{T&+us?DY(hGwHIx|WR*<5N9n?AU{2 zcoYFJ(6ng8CafqUjtxd6p%kpB1Kt991g%WI%tK@=Y50p2I8v=WRca_jJM>)DB*tPa zkWUnmA5zQx-2{xr+|w6WCWx}qeqm%Cd}%{XckkvM_DMO zv@orSc;pR*+|SV?Y`PH78fG?Tt1B=Hcsx?Z)Wft;{{%zeL~P_m8*suU`ofEbA_0(v zPd@UVBO3KZ&8^Mbrfw5 z&Z@*X;IvE&{^f+?Fx5(7G5?v^Z0fJPT;1RS~pH{w&`;)wYEgg~wgCyYf|fM;pk zOcIvDp0J+>7S@H{EdHL^)LpCLF%Z_(Y*Z2mb})r2SjLL@&3mu{fpkhim8xZ=$NsQ_ zJAkYIXvMj<$LJtIQuqTG>_rn!;SRyZf0Rk7@UA_?Y*J7PQYdBzzX=_Bu(TSJhm2+3 z6-V!Aial(?6pX?PD@7?x0Wk^SgItI$LUIR+WQ8-{NXzJ~K zj?g45<>}>TmfoIeB~rKu0gy_0;6#4d!)bD?PkKnb*g_#U#foT*@qMZqe$FVggFZ>Y z6n1Mp`~!ZdL@6AFBWh}rY)BE2$b0xhrf3NnxFmMvuPl?=O6e^9CI<+S1$eka8B9Sc zD+qWL46&wMzS)yUt;7^4L6o?H%dGI>9)!cZ3ZyFMQ*d5=N~+j0prEj-K(+(uR);N~ zO;0Qoj;YP>@#hYr7YV6NVk89v(Mw|hQ$Vc0?EjA=d88!dMl$n+8~AcUs3R#PfD)K3 zk*Y*u-5gNv-@7y%;Ut76@NFucMFMn1*iJGyPQhBVuM&iAltPjk)+joHEqH3eXFjJ? z09DVC$7{4!AMN5ku8L$i+yo{Yl>P}zeqgO7L1hZ9YY4_qNU8#kuur@OW3++gnH)qX z^O!DywWN<`^YXu&>rWKK9C+b-ZjOoUWufx_3oCOlTG7_Gw)!9=uEv5uq2nuh8Ey{-` zG>G1iLeTCZEp6eb0*VBbCM(>r1F>s8Yzg2dYe`~t0}t|sc!nFgLn|<9_WY_rH6g0N zHQ9`1{PwR}@crOr zq9$=kJ8;H2)9eckvmuWo0S+IeXLEz|=Curvu- zuOfr5c8K_HfSL&AN#CfUZJ?t-j~t8Wat;yzgoo6Tuei#wipi;C(zf6IW~FH9#hnwK z!|5?o%LEr`h$2Hcq%L5CA9#FO?~5zBP-{&+PG1`-6928M$&tm42y2RXvu0E@ConE^ zvE+?|x`6+wP7kz&!l9EUB9wGQ*YOE0pll|M+1WOI&9)nNve!dgbKTPn$ZICn7ItCl z;rfHraV@CG0_>2CRB>a2DqeJ*u8+Y1Z${n3d6f4&bd5UD6H)K6h%A=a4@JSv)CMQy z21HDpRYyGfRk%SweS@!wt<1APzB5qp1f(7bXe6QZ{TSr7Lr4KSVpv8y^s?4uy;{r% zwKH5EX5;wnlc)z%j=%F-Dgc>E1zB|ZL8wGK)UhW{Jy`^i66Bjq`VEOlfhr22K~F#g ziTY6~v~}bk;jlegEdP^1XgE87r)<1vDn~&CT=I$k9|5kbSuRB9OGQ|R1=xAJH@IU+5;(WL<;6`(6l>49rcyw8znDHNoW(Li zBk2#^f5m&y%UkYAL|NY>p$@cZCGn!R>;K4ViWr6@z_tZDVdicgDKyGd*aLDK#&`RP zr1-;~w1}ddEI<&Dl0-t3TCU1W*&>BN!zf!Mk*Z~D%R&iB21*%a&z&t!7cXkG*NTjk zEt^O&Y`BtTOP4JNO3+lV6_=McabmYH`^@fUHQ8CP$SVXx1JnE}NX% znj(R&Nhz(|QC&y?qa;=%rA(o#b4$CvT%?d8g>~ST$E8YY)=Mx6E1F&Bu2oA~i&80s zRfi=@fL-6kr0teGNlLO#2}DV)#J%zE?$;QlkZM;;;mVLwSe@N6K_F=YO8sWud|b-m zvr{C;7QdDuVFlySr&qt8eS7!s;locrcWjafNwl`mYH6jFvyL0Z!LtZ>5VQLTXvdc8AS^Hm1(I;97Mkw5XbW~W zv}L5b68~V$L2 zRtTUl3gv<{u_vf9qtU?|ONt_*dTz0&4N|1EFS8xZ{K&clYvk0&2&AH^9alIlQavOu zn(syG+=~^zKW(||z8s|>r%V&M>hV4;+sKoELGdG}QCCXYB8eQyaI}>>drZJf8(aB^ z!WFXw)kIURy)Z~^8-g;voAx~K+;!P)*WGvFeb3y6(xSJqt2QuFy^N3|#o3DpNNPId zSpNx5L#9ZJLX&_smS**Rld*xK0Bj+VeG>U&@>mR-%S`aId76 znXxEz8YMW1`!2NX(Bs9a@!E0EUH9F2$0>?PkaQ_WCiPP(Yq5@J%+_*!l=E5Aa{r8e zvMHaRZ}_rSRYH2@tAC!vm9CdQ{O--Qb=PB^^S=7{Y;AHb3egX~KlQ24k+J%pZwSfp zqhB#j=+`H|TD3?MwqOOV+JmfJ*(ZJcO9Fs=WGm?{aDn#wUj^gDCkM_aK+Ve^`W&dg z_H+tW7n+Lz(-T7UK@fk|n_lx;Lc#T^aDM>&UJWJqtYbYdha%h^2cytCAr6s_ia>gynu{}C53tHl1og}iQWdh-2`dY$8<@r%1g7jk)+42%Y_VJB_JpWhcTtmnC zIr1iYbV*Fc!pAa(ag&<79TekOMM>taJVrF-DN$*}BuHWuktml-e3YO4j1o>91mzpe z1uOJPDM@hhPX|X)JmI}WT{*jnd2&V=!l2NHF*Fh_n>i;!vBM1#N)Izza-Ka&QjYSQ zmoeAEOaIKNXMr--t1^hqu*fNc%8VZ$?8a9iDbwZdpLK? z^>B`G(`w=;k2#)F$|hbAPA-6aGMRk6}s6QU6zxmYw>vk%x3@ zQ=3YdAoA3yL{$sF^20c*=5(qrX&gh8nx0RNHL0Kk>r;7m){d@~t!;gYByN&9;8l`% z`(f8oZ}QDoGLJ->SPVGlDW2o$^(7ZwR|jQjO?l#kuy@4?3b!g7IvFss>-i=&c^Ogh zU=y2-jg4o~Go@5b;hgeXX-DxYM18uIwXN;wD&V99B#dGlnMh(|T-w@@xb|H!iA2Ft z!&`Wf#WN{6S7n78FWe-BKgo4&yJqUf=T4Wp>{8e&Tv^FM4Yj5PrKut_`bvBL)R~6e z=&3@w+Ulz2ml@Pw1i`u1@tU`&@#UQ~k;7WgE|xv?HD!3$8~Jk-y_scoXERxx^&I@OiVw4@O&(pJZs*1Fp-TLyHv@&9PCA=>OEef>$;HAgyu;mq@x z3F=LH0+>B~=4Uvcr80Kl$;SO{b9*=YS!c5NoyvBya0+GDOWSzZgU0hZUn1;ItNNYh z; zoFx!H^&2}=G^#N*)}<^h#X(NQSQd|{En|vFHi4&y`kC38q}L|K0Q1eY`Hh`TcVX$x zX7RdL;9MKSC{D5gV;xTmCog6*BhGUq6@4KmQF%jm7y&PFVP;#PZ&!>T*O!5kXG|h$#XV+DYJu;JOgj<`wl^w; zs~ct^8^2|Xl29WD1qUW$8VMOLooa$$kqn;??xbrLvuojO_ z7}XAc`0GC{LQyL=;SZ{C{F2C-`25N#wO@c`B^F@I#nj?1d_W05-uD?1AdegU=)_M|!3f+JWpegVF+v z=I9CR!Xl%nhYTjgM(jk6Y()zE3NY${4F4n`p=_lxu(r3O`!^0Pqjb z1@fqfq?jneLZ%+{<{o~pjxK@}5K##pY}RroVMamwzG6eBZxI7&V>SZ!YVSFYi*Rbe z9k`$sZecJIZXguL9vChaF@ga4VKZ8x7MhQ)wnh^1Z4kGn5=-HvG|3SOKojht7w4xt zzAyelCPPZ`AGo05Jk4cPPYY@h8UHV07CmvL5{Ce4q5f#+;ux&+B*!JpFUc5!2?6mO z87nNFN0z2hyT+y+^rk1$si4Xy^3)|^l!X*-ZO=ex1E~zKvdKv1$(ww{G!mjaDq|@o zgddm5d%Ofo$mo2K$qni0cp#5@D#I17Lmmn04Y$iQ9Pmh@EjZYq^n^~1pyX6^=mE(L zeYl3~cFw>Ijpx!N+OQB68RI@e%3tbXKLXF~2!%uHEQV$f9s#2P?at4%42ELNg?x>A z)=(dBPMp4MMOp-|DiBD(B?`!Z9WbNU;N(771VIW!dy;AtN^<4wjkW9$9o=#*=0n0V z?@o#_IXHo9N`bphLN~O4?Efr+UQQzB{^}xnSSmRN@&E@m&$E;C#6uT*a`FNZ!DLJQQcH5(>~YI8FGQXmwQGmU3! zfT9e1kt}|0A^e4w!0I+L1ofIKBkWQEu|^>LO7c#kIa^aN8nYs_Krz3{0+j~$T81@a zvms8xs}>?7T*o9x;cw*T_Kc_Y27)JAp-7&_9v~yNM9lx*vO?i<50&TY3^3y8r+W$_ zIc&inG{Z)2!5v5|0spu%1ls{KF2Yi1!%iwfnamJS0A<>s;_BGJAFcvO0EJpA!xvJp z6hzQe%85ot5K^?{7b?(EY=H|51OyX;MF!+Z-9iL=)IfC5AYo%luBAtdsYUC=NV%c_ zDZ)S!KoVXA2i3>(T0B1{- z0#Je_N6f+&CdFhLQtF5$JZ!~$3d*pqC#yz{gF3W^BA`y%0Z&K@R87Pu!W2;5Us!c&?5|og`5Z3D=<2p1%tIA?lHv>pWLLjulGVH+@umfbeqwzS?DG0SK z0%j!i#uh@SAjp6f%#~r}RTLY7Ge`f*V>h2q6&KDK*^H5JO%m#XCO9)GM5Q2h!!m-) z_FADNqlO}mVhhHhA6&s?lA=jLA|hlCF}M(EqyQ*z2CACS`w%7U7L9wtP%x%ID;FYH zoMksi!5@s`ZlYji114Z>L11t5LKILl0EIKOAY-ww_X4Ff!j)~igD0HSsg!DK0K*nM zLK7*&ME@9KYt(3#LhZ+JFoG%iOZezh?G6$}eSFebzxMTbBLKmm3T zGZ?}V_ajXna;SJnRkc!6rOtKvqde@xQ$e+06GicG&LceqB$E=Ia&l}OWOH8QI08gf zQ$=IOHV?bRLrNlfdvXfm)*i}0d+Z|$y2J#XLVT^|Cf!MTm6i;nt^naK#>VTHbjUOo z!YROTRf88&u<$r|O*yU?Yqo38sKJ1~wtt28$#kB+NH! zwq{&|!#mlb7JT9rcLqO{!Y7tbKWQfTSh2;9sxj&zF>GR&dea|zBP4{6aE5UM@M9JF zA&YIV6hMLieokumwl0vChT{W0k5TYKiFG)p9=L!DaugvVp&m#t^3i!v#Sy=GGronJOM`tCczSx5KP1p* zdU7*1!8BY!OwJTgd+-5$#1Ro?M6aSdJoQAi_w*>_Ay=@0Fd`q>IRcXKfQD{|xSz&VMG#XIpcXVGD3Z=kWTz6XldZn@FK}y6%=3+{sAX4>& zv2=uS+=EN!VpGcGV%h;q(j*E*p(pz`Bt}(A$H7h(6se`OoO{=Or<7D{;bIa)Q<7q2 z;K$s2WOUrwSSJHj7?nCG^2z*An$>!Dr*(r40PKT5;`G{9!sYsWSY*6>_CSZpK;AZ;zF^MJf?cLZlR8`Jf^35W%oIKKUAx ziZock74(xd09pwU2pY4`U+Sb3Tu*CAmK9A_J^Ypx;DWJdHX~}IH`0hE%0LqsC5}G| zl#fCrQetd!bUWbIXpt79QHp61XSYmQL(~>xeBy32Ar=R!El%T=?IB^4WBQOrDX_wc z87?bYL12|&E^47pf&*?e1mBpX^thtobb;!_Q5O^zsDU7Zlw`8KT6qJ)PbkQ^gC!Fw(W0hWHLI0d5M;ecBP;pQS zs2-G+2Due|iF$>6Bnt8|dpnf^pAN$DgJm6YUguHH&YCEt?m|i!>L}8jPsK4HBT=|? ze*Y&Vcyv}r5C~iPK7d#CN{_@3gCmzU3c*tJJbHig1MbiRfP+$7i$+z{bP5x=gI3jc zDSOI!qJ7EPPQpdQLxMoKcVx)G9m+sM*176_?cg4Q9cDElYHqT!D1LC%oIJ9Ya1Mo9 zxQN=)zuht}Gb!_gLT7GEVQ9i8T9hE9;zV#GeOMkcAM#aci6c6(x=p7IO@;Qwtc`NipIxAs9oBBR}k+Z!_YO?W@(s(-;@M%oS8C znpSNLNHAu7CWtX4S{brOmla;aj9*bScVha8T?#00K_He;r(j!2VqV4yDWuO~RIM!@ zV`OAhBXsoiT+V5^@06n1(kqm(IEfwI16Di*pi>S{1H@A=(`+Qrp)crGU~~#JgGFaF z3Q0?w?BiC+Kz-eJ3bkZfDk5V^G{PLb_aO&B!=>Gt<=mAfAuYTstbn3PR1d9b# zUSu)5(nikreO=sNDnji)YYVUW2nFO%5(1sYS$iInWzTLx-uy{0qNz<~Mquy@ z+bL!#34%!pIbn7=VIhA|>TnN62XN%d6ai@x z;>dP8$(&^+*H$~EP`lc*C51~nkzA+>)v~G8rY#DU9)w!6;=zX-;g$qjHM8c;oI6ux z8o{&Z(WFb8K8-rH>eZQ(L`b5gT^lKmHHS`^VDf7zANRImsenKN*RT<;lrsEvgv6V2 zYg8^}%+bA?|?6|0bDuq<4h5D?ft`f`Zu27+h zExg4B+w8Tjn#+)^og&n%Mp9@}OFN`s_A0B6E-c!o3_lEU#1cQ8Koo)=CR@O!ZTBaX zO>$h~Lc=B0A&B#h3i5a!Ym{=JAijp-a4F+PTy9T3new3k!m4s;GMlXOcBuXwGril^ z10HKIO92uGxpwCA&#!6ZTogbOjcNo@w8G9zYe|u8MY$%|B-MWsmr!UqBlIL`KgZ?@ zlcd!q^m9p&4D`qz*Dc)LqY~}+ZN%}NTiqZUN$q${t61dI6F)BKmKH-!dF7U0j!Ay(Oy6ed-v)6h*LRgz-6|Z{k&N;;_z0F?OI@jN_W( zyyQX478T^-Xr`z^V*kMfK?L~7vaFae;3cmyb8Of~glERhgsz4fL|zrKD6TL9a#4ch zpz`2|xhxKGk&J94#sX*>{5i^f&zm15OURi)NzzC{NmSt!hZn{yY=?iV+2LGRy|;~| zkc7J45M9|wiWxGNw5;XjVl_)!>XK1;R1IZ%IWfmOgh=&U2^w8%ZoV*nHgyyNZ)w3H z+OUd0tz=4VnbV^x^?9D6=nXDv1eb^knL`K zHvj6BXg;ZdEkPbnJ#)YPVG?h-AwxShkN`^B@U$S4f)-X)SJYz9wpCjTeLoCh%xyHp zBreG)YEh8({Dc#4BtR26>Q=i7#bU5+7%8Y*8yK@HC-xAf!UDUH8K0)S(b<9)sC47V zl6c8XF3m}stXv z1pgQKoIzQBK97nBV4gB~Nekq-g~bz75A6_V3>Q(6m#ky)k_gG@96=07%KuPV zHW7;e^hVG{XrqLIod|+DiopMz8*F;#C<;ew#iB3rCZT9KD|(r<0VxjmSJO7`hW!Tt zfZ!0K*Fp(10h>QcF@=ppf-VHe$SC|lg#}>6xmkxxEovc!DNJP&OtA+Sws3fv5K9w( zm(N)WmZRW7Mc-=CcVSvGrQCrBg}dH~TIftK9yf+EjPVD~|7Rh1MP%={G7&2}PZN8T zVJ0VEiWDri%2=hD6#j4rxakgkS93P{hD{Fdx|Vg`QA$TrV23SOQDwyB*88MTKzImN z4-Tlj9uA2MOJvR=*Eo=ZcI&=gzI>1tY3<}~urhCeVtz8G7**yRorHE|F#jt_&?3*` ze&L}T4H6?d#}NyHTjQY#dZ9k!@pT211Tr@p5fC=2=5+;=G-?MMCl(WqGk4U-f|`X~ zEm%?)f&@f|5nXU%dod$tQ4c|f8P6gCnLrEpmRqb)3tX@PbkPzzu>}(#3jH7xM#O7K z5qqN$Eh9k+lLi@e!DqGLe8Kk{AS5qv@e}dkd0f(CQ6xKqk%RxTDO*5pOhFk0Fc1at zB{qQ*aiMNAF$xz^Mw|i{7m*Y&D2VPgaf8TE0MJkk6(hFb4)=F-4{;Ht);HtVa0|GB zR96pp=6+z4g2@pb+p{cZb0PvqDWjDYx9}G|!Ec;ke(qrlLANTn75@blGX~@U5_|#{ zR(5i}6F##j2{BS-B9jDq!ga~9fmY^$Stkiup%}jg6vDM@WbiG&4bzFdeEjAyCuono(Z37d8WDsHhR&EiLgtoARO-KcnvTL13E`F#5HIaK@V-qX# zWn)lTvQra(AxfKa72RPI1_3HH!B)nCZFJFMC}SezR&Y4c9b}|y5MhVAwup^LjiUk) z^o9`;sf{JMSWjk>2Q?_qf^k%~1ZhJYQV@xs)FQg|jNx&EVMcG7*bb8he_a;^V*rZ6 zq&2-48}O)V0yrZrVKK8Pe*?pIq_6>2R+N=-a;`81`j-T|nEz!8G>pI4W2J>BE`ots z!!-3k1v=t^XqFXh;3I6J8+1kv5>y5il#+LuRxgN`$&?$SLm7IPYqNJm59;w~o# zk6VC#tWYG(MjJXI6HWMpEuoloQD8^J3Znp7nCE(6@r$-F8%9Q5v6qBDL0wY9W!>?2 zUK4z!Flj6iD%4h4q;-53hL}^ZAne8tnK%=AvXQex3Y&RD?qQk2wU@_PQiX_|e2Gf) zu_sjKILe_3Y_}Jiz%rl&cCH|NO9>Kqh8OSGiQDoXe*qy)=Y4yjib5BXDdC9j^C!{4 z4%!hN7x5r%my1*LZAPbMuDBDIQGufzA2$2c4{!T&wHQFJRIbpt~ZlLlnV385La zf)RR5ZINAE02Ya{gqlDL>t-VFL4@#uqHE!e zQ$Z1hxjY9!5`~F3?s8+R45fl5qJY*5l7mG3+Ejp;R-846M1NGX$O_? zF>K~$Vbw^XUHVbe=cUI~R3)Mu8fG^z;~KR!A#0j7XHz0J15I&iHu@1blL#V!(iG~1 zrf8}+cr#8wLZ(f!r-S1+fRd&YVk}jOTO9$47!;)}^?#cIn+6{%HQ#zIO32utsCCowsf3KDgw7Lk$)tlgSQlH;wh zWTBsdIqkJe?vfbsMhXQ}gtZf{?|QD!3a=WaQ!({c_S#qGlVBA!QLmC={Ayc?s4LXU ztoUjb&=i#9fF7-oYV|s=535q$1hLQ4mvgj5Srt`c#Ye-%Rddu!`QlyVs;M7)p}{h- zC)-HBin5hMux_(U&bly?1UM(NvNijy=4!KvGOjtxvpu^SVCu7wGoe02Pya=<#rmK@ ztF#ZptxLNoFsrdGh_g;hwGwAwRSPi{v;Ukug|%I~8rkTz470OgOSV0Wl4YwXqy#xr zyBSx7S50duXe+mk0=IMPvXcc>-F2#Zd$oJ(w|xt^)|Ih?%eR7CxBz9f7<;&i`?rSM zxOw}yj2pO+JGqkUxRo2Vi<`NTySbQ4xSadBo~yZ`d%2}cxuz?*fV8W2OIH%hy02Tb z2J20-o2*=$SGT)h@iVlrdm3ZQyT1#mKnuL5kzq0gKgNr^2bQnOd%Vn>yvqx{%^SVX zE4|fAz1Qo!**m@3YrWiyz1s`E-5b8&E57ARzUS+`={vsaYrgD@zUvFW?Hj-E+rF_j zypeOi`Rk=BtG|yTto;kX*SNa@oc|fVOTY&_h-ZtynE|y6?7*#7w+>vf4@|+)$G;Vf zIQEOd8*E$y%)tiC!6D3K!YjglR>CJtViCN+4UEDqj9C|q!CLFWGwfa-yulz$!#SK; z3S7c0+)p8Enf`K^0@%B*t7!wMBfuK8(1wgtvEv#uUuN6zs&aYfa=EPc#(AA#B4~9I{A^ zXnQQj@_ND;f=;2u5gZXi2r*vc#C(cv0k0rzjOS+bxcQnnG-}&S!`CF z<~JY0#tEvHyL!biPqKhLQ4emAm1ZhUchL?7f{C>QPP)vylT5)oyP;DcY*Yd-cu0rG z*9z{y1zBu6YmpVT;0g`t6rBWc<`x_Fu*KZmwO%a3wDloi^Nbdz2}Z^kLir=@fp!$Q z6q3MZn-Gi(-OvlN7L~?kxiVFF(x$pa5;y57nxJY*L3X(bbSttTo6OK$RvYZB&rbWv z0j##&Yh*C0Ohb+1_Wu{M3~;^S6Ogphu*=I5{KR3x3fSk3ZLkG2m=PawX4-?+6HR^# za&qdXCsHA2eE4f_;FE0dzjFg3Q&AXMF_jLn2^mw9@3C%n!gNf-Z<~8~*b1XyASt*XMR6a) z!IfDNdM1)FLWvZ?VL+FprW#f>{yK~&W~J)YB84r1&)siIu*sTid3gpKhHcz-+tT+N z$`?x+A7K|CQU7`$iW7Lj+U}8wI3bM$*CM=8ZU}zPUGXL?s$NmVDhoo;?V$x2zTxdL zn_JLCXE7kV)6;dh+YtbSpUoR*_;3EOhLh3?wR6V#9j;-$!e2CF>&hko#~?B{cI<%G zrdBZOL5!p@9At;xD%TF%v3UM9Zdhr|X&Pt}MCE^B5_>U^L#Wu*;ib_;QZge5d~5acqf816RF$Mi!S z$WjZr?$78n)7@;2H+Ft6S+{0tN z?Ch{0=0O09Q6{0yAjGI5oee;V@fXd}M)gn%n@|dkND9*3BhQ#M#G4a9L4X+3aQ{~l zoDgVOscLiW&_q!WRc4Xw&G2DM*$yn{4zV8uaN4F~VLT%cQlT9kN)cvpd##11Ho z+p#-pR`GHMP#7IvqhJz9juaN1?WkeHgfGNlh5KF`^a~8a)iN)3MEV~}2GjW)2owF^ zkE&CwzblAS1M5~3@_!H1lgi)r;4jFQKmOIVItJA$*y8^8Pel1V{*f(BP6ZGI1pf{s zSTKRWBngs8NSLJHLx>S2PNY~-LPd-jHE!hC(c?#uAw`ZPS<>W5lqprNGHTC#EF&ZS$|F4MMm_3q`EKnYd8fdvmHT-Y#7mxmSGHM`jH zW5|&u%QXsk^5vw7?OMj%+4E=6G{c4_z0)aSx209DX1zLZYuGCN#-?4{_HCt_aqr&P znD=ks!G(h~dV08Uq!BQv#$cxmDX4PtAt`?})3y@N z9P1*7sC8dFV1mt(I{x{Mo9 z$Rr9SpcR407=@H}%9uidBq3rkA{r?i$SOB6v@nSXlGvghTR#2kRR5`Jom5g*lh9(5 zEy5Hs%38Oi6;fg&OR-q7LY>IfO==;4jD;#qqLo%kIr7dM`)g4mx5mWLt&9BJNQ#A| zsKu2n2J+KIx5&L{(KnHm7d9W~^=gbrB2uVOTS$2~3L`Hf#U3)Qjo{mZrH}$t2|`ua z$QEx>SOJBvefTw~jC^>YR5^x7A%?VoRaSzGk|2tWOFj~1fLA`4fWN*yxy6RdwD)Gm z(!`mmBrT0-Ax-KjMbIr+u?N;x+Az12bX%;26f#)x#hq4^C4f_V>anFx0$y!J3R~*2 zhm>AxftBomv}nZ^cg7Y}!b;6`XA7&1+G1^_?Hp*6tZiwB+W)T!Xm$%DtEJX&TbkZ^ zaqNy_Tq{XhiGoXn5|DzGcDPVN3wB!BWDKoIxf)Z;LEoB;O)w`zi6}P7REt+_*~BPY z2xx(a0*ja5f``0b*`pG>s9t3T%|_ww8FJw3?H<| z*Crr}dT?O^lBk6}Xhwi@*{M|P;~`n<)x)4fVHCFTRsU63)vTjvf_S=OhbyGeI?ox2 z74-mLfwBDL@l*Vo02zB|LjfVFH!f#P=pJFd0@#682zP6pTiO1TchJ&^j6B#$Z2t6wrb# z)M3ebr3EP*GnrCArZN>aqa>gVgi0WkEeS@=O4)L57v#h$C4huc$Vm!QxS|X*L5u6< zG6_?xTB0cV&bT}Zo-9dFK}7a7tF)?BW9;4K@c)?vK$d}Z|-C5cSjRqFjra_ zMb}zk4=!jZnxkw-_pS)OCSsITXmsQ}jk*=}9knK!7@Oh-A}vpn0h6uJLZvQP!dfux zfmLIO@MAxb1>=yec16{B3;vH87vWB!uA;Qhoa1%n1nU0KM z(G)FeL#9y+VzG~eG$a)_chN=mtEiUcE>I@f-H({ZA#AGEj7}vjG7!+PWGlsAp?27l zU2t^_Awxan#|{$4S8H2DBcTFFhE?+KP`zq}J61=4DD;XggNmlP_*z(zeU(tn@|O}z zkw6JVq80WXXE`U3i8*mWovfG>WWjr4pEwA`GD%LZA|MG?uww$3gWv@@tdQ_+0aQ|8 zZmbA;AxeWE8Em3=L({dZNiHWmdXn@RKuh$JVG- z3!{*NeuTQ<7ESoj00%H{)Ercc7D7XiB8`Dh3@6+AMYjMC3|6ebTq{%wLm4u5(CeI_ ziRb)kl~fkiBsmCYHXBoRq>CXEkOUk2^%q&Xi&e~ASllYc7I!JEA!Ocl%gD7aNhl1N z<_!r$jBBJVL_3)})mSnmQKV&So2JfcSh!l2E|9gTgR^FLMx@;Cj@0udbWEKm?Y&EE zhD)d9dTL<_rPHVK8zBq{IG!D%5`Rl;-U)A4w4x9#Q&PIH{jL^UN$Rfb3o6{nEAc>gRpxvgAIZ3Jtgs+Qxe@8Sroq-tE}IN$k5+(a&*^SRNLJoYJv}fSuM)8u(DdMgXnZ z+-6m0`^Pxmc8oZrp1&#V6OlP>xaYkiD%LwiBn7N0asB9Tzj@dRuM?8PT&>0xuH!01 zIj;A8=Q)?W$80qCz*C(=Pwz>)Xyy5Lk$obVul!_XUHY@gnK^4mJ>1_d`MI}V_SMPw z>>WpX+vgrOlrO#5YqM_Mv;Fj_zk2YEkDSBHUhcSv!e z!|%Q7dBb|`@BHO7ca~T z51fcR(KkLpFwIlEj?)v3U_o%Z^NN6E`orkqpGVBZBC;ne6GR`>ga}dyF{lTnaU(qRjvbV`1*`~% zh#b5zw6|djf&;BIe4j!&8pPq68Nrdi(zGpjn~KY%t??VG62_I-cKExMBo;lqJQlEGWKN!&MAX$M3z32A8_d*B2@k;VwR zB66dnHvem$dMF@*i-M|hmn-rYU@0t4VFgMf5^7Y+r+T;ukVb18rD+Vki=@4cgu#M9 zf&i%!91E&E638}y8eU;3W*P;76iB)eB0xbMQyc?QCiUk-OXkN7@&1 za04Ctqmc6*>bc9bh=PEGo=X8KsQDu*+JsUl1%V95s$`B-)VW0|6BDWhnzSW4*_sxi zmISJv7P5snQ5e37lLK&?z$e5u_w&QO7KwXzH()Y=efF$XnPWB}h?p@vR3Hj*M(Q zX&Hl7V1*=@0+-aXIEkP!02EzWhkhu9*YYy>T!;W78~oaWRVo^P-~tISlt5W4`~Sip z5(`JO(iDFnfB;K^Bx$R6OgyMbw>1Y-wC;~N=L7iqy93L-PD`Gp2z$wfsWKHHXW zx*R)l2tLyUOi352i6BlRpd*pWnw%3{(j~5`#Wnp5JZ0y%y?}TXnIP&S*33YCmhnPEbAhJ z`cmSVt-}&UdH~Hk>M>6|Ry5hv;4@11yi=fo)y6`*TEHd(U1dsAIN0nEsqoFJ9bgD|dFQJQ(fqv4^+Xc;89Z5V}c*wni<$LuX#86pCx zQHmPg5*k~GYy&J|B2UT7;c29j)!W!;)1HHiJL{xRx*t~|F+*iXvj0f}F6hZ4X-P!$ zvy*8n0kyA6krU>mSwsCVeXBcLas}rlr+!c+ga|tS6}tcBB&!l2Qzf&%(Y1Y(N(6Qn zB+vp9%eUrwh=(JyvGFD?NGqUW1$0RQsu@lpGG7UhTmH!^2eMm%G7n?5-o;2(xcghn zjFvNc8U^5l-kAVS2%Cb*Bwp>W#x)y9I+%mWv4%07fy5zx1fzPG0wv(GB0Arik)A}^ zun48iZ1lu*(%A}extjs)^U2`bS=_AHGU(oR) z323@Ll7ewqBCmN~G5C^-iU5*TVcxh+y-4BfD6FEXnpYu!Z~q;lOp731^WF)grL!f4 zF_1|`W(EHl&XEb>dZ>pMQG!Voh}I+nP8c%t^{P)f2|oK&0d`=2K%0YMC!=T{)RF=u z$R0WMF9IfIz&ulz%(qAYp^@^R2ud$}!cSYUU9&1-X}r_|%S=K3jR-}(zokM}A%Ia} zhk{u|Oyre#<*oB=mGJqSh20{5#FPzl(i8nwz)Yx^`kSP|(F=+bd+?NtU?*!q*$@HJ zhZ~rJnIm#mw7+2mjv|Ar9U_g2lZ8EBg^*HxVk9-9Pe3*24RazXvM*{m8%FaRFae~m z$*7Jcx@o2j>>Uh?{EnD}lUC3iXN((ND;H9*xtC6trvE)({sEM$$*KUmPEX<$PM9xU z@#SCKQc`H$tMzGX;UJGl3qDI7$edbfai7-ROKf@~x76vqv>2cvo0oRWU%H>GF5cD! zTQ2xhpT-olJYOvUX+W00us1;=o1ohimo91CVBwxSjlWgK&&?#%u`AJ1Phe9k3W);X zQi$2z-G&ILhYhZSD_Fw@Qsb&M#;!G!C|HPnlZQ0y#-8lc<(S=t?BZ%(gF)=aen{fF zY{%~Gx^0M*rt8ZfkvCU6CzDRnmd$;gQGS)8yK3r6K}an`a8i`LkJInLzDTu zczF|`J0Yh+!8SCn*Vt{>hR}4hy}W)u(5A$S>24=^4iNu=lFhoD=`p<2<2v_)5~mPH zL&OM^b37tM;hW=(Cyc{~gcu7oELDe$r5 zK#?#&s1uD5-woJ)P&~VF6;5v1W;?35=AVFWe&%uQ8*qz@#i`Q?2siR$4Z^BhR+DTA zx0^C2zsMZ7I77a2E>}a_Q!s(ZZlBolE}uOl-?>ysu`?`lJcRPeb5P1=b2;yeBG)@n zm~%WQjyw7BsH*~kXhbs4bGim_<8yOC=W;{Wxl8{bfFXF9Lx1!PWWEJ}bV`qi=k;LM^IT-i1&EvBe;sA zHY(_XZ$HNgU+#unbCi#6m1p@BclnjK@Rt97d76)To3Htq*Lj#v`JKo4pZEEmm-(U3 zd7v-)peOp97y6}FdY*53qi6c3pZcSR`lQeKls&J@HXZ_~0#BfVAxOQ)`){&;BeSnS zD?j_RM|%rw@3B|=wkN{3XM49Vd%Bl z_j|+_{K8*+!*~3|fBeR0{7$dDScQlx@B$`afKC5=xN|??iij$x1S$Y`&`*7~!!rsM z2qYMY&1VACSAE*IxD3$xZHN7@5Bu8h{dUs?ss1L2paRbKeBVF*SCa+L-g-Eyf=&SY z_C|i`w=5{wan0xa*`I#x2d~qP3a|eM`#|4*@h=t($o#h;ekPdo@n3(VQU}xJ@P{aU z=x2ZWKc6v(h)`H<9f|$yuYZ6bAaEeTf(8#FOsH@n!-ftYLX0SJBE^apFJjE7aU;i$ z9zQ;ekVIsJgH=3H86p8B%a$%*!i*_%Ce4~QZ{p0Ub0^Q9J`H9ekVHz7l?N+%V#44j z)22?JLX9eQD%Gl1uVRgeN??MbNfZ<;S)~${C0Wm+O{;b-+qQ1s!j0-x%E2gAyf85v zcQ4<*e*XdvEO_um30@Ia>6Fqa;l_?1LyjzYGG&Bx4-PGQPy!XaODls8EqXNR(xyF9 zS*SpXVS{2Vr93TrHtpKBZ$F)8Jrprsy|{k^4=#K-ahX+^Ebv{>3hW`ppF@u>efsc9 zRi<p@$!W7$RU*6hxv#NepD6h%2(# zqKhxW7^93cq7`98V9}VPj-&+y03rDV1p@#C04y;89sp+pRRI79{{RUH97sR`!Gj1B zDqP60p~Hs|BTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bks$8is0n3*#W6GRKv!>0P zICJXU$+M@=pFo2OrI}=?(W4Y4AYIC|snelKo=T0%km^XQQhgef7yqRGPJ{ z*|TWVs$I*rt=qS7(BTJr4 zxw7TUm@{kM%(=7Y&!9t#9!C>oFt6t5zwd>cgW6PdRySDAyxO3~?&AYen-@tO{Ar<8~vrX*l1u9Oh~eI>S-n}rp+Xp#h@l(B`3IPyjofjLGb)&|!~6 z!lo33N)1^gR|py8q!K#{RN#_SeikADBVwr|UIvjuN-Lz0QIM8ZmPy)?F~Vr3LR=8= z#zI?=QbsFxl(N8&9Vt0blojnbC7)9!#p8?w=m}Al2o1@np@R;@VrP6xIgz3X1*#C9 z0!6xze~hLzq@|fAlw?AmR{D~rYg!~l8LpV2zyeQc|Egx6sUC!CtrSr>E3OQ6K~R31 zxM3%h2Z5SrqsERk(4WihS!l6jKD*8`S5xYC9auzCb8K`??FX%bONapR7<4irVS zJng#B!2?B1;l%w4WHF>BHl)g+BA}9%Ftx z;4zlF_(KWQeCLSy5uL;q?bu?EE%lJiGJ)=U9Yqwa*i(iS?qZ+hmbQsnw1aGD^P1Nx z)W2JhVggk8Q~M+rf#!W_6M>tE0^JvdP1wR8zVM$Ef`*U{dQA$wYX=#m;I*a2PlO6k zS`tWMk6#dA3QC9qDO`7pDXfiAhcn#X|K?)C)kW`!Qn*$`+(*GEXh9Q4+{E<;NHj^X zq8_aP;KkDBJ}HpH7Ex1zxI&b_$w6@wNK|4&4rdW<5p7Ta8kzzpcE%{Gv4mx$p)Iz+ zK5q%=jwRvO`5bi+ClOL90doVvDx^BfF>MT=YsDVZH8_v$sgV^Tg)KNSMSA_pk(Fx& zn26;uOiF;|E30%~tm ztk4+h(FSNzF{Quk-!Do5L6QL|j#NaU{A@vrwf*ov%nOi7DTK4xb&HiKZJ!p{A-@p1 zVhdXt5CIT`v$c5*e)8+7F1Tph)IzSTY{|3!gm_z?p=nCi4Ef)Qzwa)`GG!Yo0NXsi?@kQLd1!>r=x zMysfYI=Qe3%7yB4=M-RMDH!4Og2;uW`Wg(4A_Jpycj9rc@lCzYZg zBt;HETIk(hB~>*`j)k7B+k$*^_dcW9({%(;!UQA{O)#~B04tQ-7)VhId;DX5D5~z{ zHsN4aXttKKW5t&?m%YhJ;&}b^hb_n;JAuR#Yy<#P?ZlQ#SGeMIN?_VT{ZWcC7>&iu zbmkP~D@|%LY!f1O@Gu*xiB@>{!E&`7D_9ZD=sCF+QmhEf60+t0P>h@sYY2?=2Ij~P zq{LE?#3-aN1t%sH|DY2AUQya{!#2ms9z<;xnIC%Q6C$V;wLl$2!Dl-eGfWd$1hN$R z=g?*;gsQXqR-~16P5+QtW42PAK(@e&TI?0gx7{a>{X5f)#Rx(XCBQq`uu7IhOuP+= z9v3)4UFuTJgqpY_*)H3~%Y|tZ5TxQ3M&UG4co=ym^^((8xWNu$E>2FXT@0hJ&w6a2 zY#ZF_Qs-xnTM$(V@C#uGZ$W_nNkEeX_(ivC=s&he;flAgM+p15Yr^jIty)Y-8P8ge zTezctOkLZ%1!4y-z<8Qd*g`$#-R*n)q7`_3q5R?>R|q*3r|O%D?(hz=jF zl7fJkGpqaD`QV-kM7Qq657_#7?dOsmgL0I_gq;>mqT}p#H*$#-h>dLmjD6WUCtBJG zk3lhNVhjnjM;pS#M={Rb?fB`M;L&JW&YQi!%Le)hkqk~BuMln=5hSdCmjEFNq-~ch zs1`b%JYTvKo$A~;G0jO~Nwx#QLoNze>+uhYme`(7R%k1@u)3XQQF7Ry91TYykSmXJ?#$&bzg)_4jv|%lZUr>27-NH9ahh8o2?u6j zwxCY2Gy#bq5b4(r|FCIOP&z`UJn=*T)U;^0BwdnpV@Wh{{_sNo@NZC(Ys|-O>Shbc zLlN9038o`{^TP?l(`1qqgDf^W`!qja5GWV&k_7fNR!lch z5jHe&(oYmc7KpY^N>NvyCOL0teEK&!?-ow#glD{Te@!J2nqWHEH!TOs$BA12dmPbav*!?c z@>5lGMJ`1}Fjfzk^G(r&G*Q4+r_(z;1wahrFq=?UCKp2|L=FUiMVtUXyEr?eU<<4O zL9YcP6s1WuG%VgECUH_>(G*wR*lnfYUQ)m{1r|L{xKtxVG>d0fnx}C}yCah87zKidl4VB~x@8A^G%*thLE833P?u=tk7A3scKJ2UA2=_K?izDQ$RM@jj4qn`85V^ z7ef?8A)2&ywUbyKkvNVvNSI$@X#!{u&ofq;B@ic;G5mvLqf6w52sRTHWvY{y0?`IH)C%9X0JX$vuq0Pbn4M%%Vs(g1T{t@7|2IFp^k^ma zUem+{;iqy@ayn6Pe*WNmaaCdeuw=y3OwqIfDwuAZvykkhA{XJ}pS1!zNNm3a1k8)ge%rD>{W54Aucz9cy-YJt}` zj8|k2!{nia7-Jq2jrh2AHOfm`fFf-YO;Q>q^CtzO&<|uFUrZNcYBGo#H;xrjro)s^ z!O3YXxudcpYGjZA!Rds^GY|>I1=+_mtdN6xsyh2aVQjEpA!A>x|F}`J6*OdYb}GdR z^iXeS6+afLQU+v~bhZgg!&Q}sj0B)tCWjwmwJiy;cMs%w`qPh0#X#a%R2fAPE=)FZ(7C4JC|=7jS5YiuNQw z#58pxR6(_~de8@w)Yn#e=|!6q0i&=xNK;o#MRdR=G}*>g$wU=Qrv+j~th}aD{d7Hx zXFRXxK4=9%o|gsDIEYkqLa6nW8*+B=^H0H6M!E%u@#79s|I&_aV6UgiK=mU=Fb0@{ zS#Ak(BYMe}Pq{*4r3LM9j5sM>tZ;Q}BdQ4yei%m;F@%hn$yB6CGn?wCxY&5w)>OrM zvQn86vNuRrb9-YlDlmgdw7GuOqfVVA0Z6ckwXg&WFfpz0KLikd9lCV0BWlFSNGnPZ z?GR52K%=bSoJw&^F(xLb^q&LsqQPWg1Q<&ac6_Ahp#_G1mU|Bnmr;EsD@&?F1Talt zvT^+<5a8*5;5mH2WMQSyla6Fe0>Mf9`43$1fX(zwM21U7_J)@Ga8;+E>ULr2ccz*7 zeIp}j57AzIYdXWHL#C5NO%^|2QlY^~00Bl|O!t)V{{(201WZ|khVB`WowZ;drcSNU zj7xZheOn7(6)kmz%Z3H2W%DKu3e7gS7gDVy*BC zDJcav8lRh23h!hK(z%K5C5Qbmf2wAtXgY^@$PNUszooE!Gx(lK*o>IOX`UuuYN%<5 zmV@mDKeez(UWA*#6A1}5gN+0>^*{wo(Ffrv!(%m_*l1 zVLSzRR3r+!HB3VJLqr*TvC3$27h@YK?_&!(++y6sTfGJrOJ*K2~LtJdG^#? zXE?D;;Q!xLqkBPE96ki zemx3LxP*v3pRFJ{9>$_y(pgJqOPE?pWZ^`1-Pss>DAy^J!ox_hqp9*)6oQSp-ie0o zzzUm?Xl0Y2;M~`LpIq*Z4cH@ghv40HU*Oa$Pk8& z>hwe7S&2D!N&`WmdWFt)6+%6wHu8ucd|7UsFm^&{3sE_NyycEzr?Ot9cAbR~Z3W5T z=2kIgS~WV?i4>qpR$swv%ZY^-iS7)bfP3d_Og>k1!->>d=PUX~OYw1{9L04>{*JKfA z>)wJRQ+h20NU(dt^xO<%x_i{17(6uk%AiUbJBU|T;v~;jDri?E)5wHWjO$CU( z6Y$mi8NC*kJnu=?^CO@(x{&lL@cx)Y0!Y^GpzhaKgBNxStuQcw%0IZ2XT4NT3?{eH zB)9KF!oS^Q7RE_#|JV-pzzG!+JDi4R)YU)OD%q5?qVGv(O27pd6o9wH*ynkF>Qpx9 ziNUf&YMgzAHk{qQMc+*Ax037@ za7512A@pznAt8yt1WBZjs%5Xt6a@qvK72@Upuu*w+_kDmfQys}QN|Fk)vnb@du^sf zkfMd1Eqk_Fk&#kRf|QRTN4BchCZ$LzQpnlb6lE09nWQR;tY?dqK!FjGpd?lA*3zev zSV>(9QR~Br2?#{kRIA+-B{Gu~6iT3COOaGNZdoa^oht$o2uN|bNr6F9A-5=L`c%r6 zQKTd}98-_L7J))TZcrj+6Hc+NUdBuU*JitfCKD*pQjrzLR`y&;5h!I8&XAV5ls#Ba zY-wAi{|G2?`Zn%JGO$^3ZfUPoDY68@wwrJ_$<^KoqWq>UywzWsR+F|R>okgWrFOS| z2M;lcL+@Y1pGTiw{d)H8-M@z)U;cdh>>D;5|9zqqgF;EQA_b<@4*D-Z)b`tifC6oy z>%c7t05C!V$k6IR#7G%KiM<>$s+B2HGbo9V03>Cy2?2|Q6$lL^gA`H#>u-z#TUl(N zO;iLBCKvxoEeaPs1P?^Jv{)@b7`6IP6ITA?q{UV^nPNXB|0AFc3mi5?$m^AT1{IvnMYV z1(1u0dMpe;VN;8C#wvFu?8W3HV`W&?6fBcQL@Ujfsk=t;rxh-|sxP9u>LP&Oeg`JF zV1o}vIN^T1Vi;hDB6tYmh8$|RJct>73g9TBkjS`N>Uj;KhQSlKpxgwz$|MC$)v7#) zb_KY+PXEQr<$ocP`8%7pf|)#kd)5jspkKcE=b~{Ax@DUGwX5leU9|7z`q zYUeMAAm-}iQR`_XrijhsI$*OOHg9C}c7Dh!h~G9_V7MC=*y*y-wo7gB;D(#xv)9&2 zZM*LNTi~r4?%UzC$1Xc@wJ$#FECR&HiJ|Z0CZHj`&GQ>^&f8YnZ;=BZ+vm~i{v2bo zP)Zp!g85cBcG+jAy>{D`_A2kApGL1dWDRmilUg>ZmP1?ad?*T|bB0KH0?;Ht`O!)N zObVPHYUd$)9#YJq?zPI^q3yRCp8$8be~3o!(Fn)iM2->?rL<{dIAMkB!n2>d@M${e0h;st{56&d?5n!Je!~5;UYCcrJKCt!RNg zX`~MtKe)Rs9A+?fltL7|A_b8oD0MA+%6KRew)xyJJcK)s6GbNU8Jq5@)*4Eiyh38yxA_IWX9L)1)UwsX{CH z9!Vw*X&F_IFH<_xH`X*hKyw;Rb*f66DUWS3-Dwin7*wJbwRZVgXnabBtFpn=qwpb| zQ^k42mO`?S9$b%9wYa#gP;#lAR3%tRMxRC|6+Ti0t657py1hBGtm@I~KTB7i{8-GW zcg5?$V#&+A_SLU{1#Dmii$ohbaB(DZEdlaoXb|0UzfQKXHOaiL^SR3kc7 zPpWjXQ=RB1?fFE1i8ZpPE!#pRi`CCHwVehf-Df{rS;a9nbnMa9zC{(>X3=&rxwfZ~ntdeM&|_KoidHKPq2zB3+}i>( z7`9#Yu2=heIZ!INv$zY7UDZ0!_-e2{7UnSN)+1r}y?yY!xuv`gu zVh`Wf#(0ILEGGs`^nQ0e18Lrk@2g!Q$7jC&g6~-o|CZ!t&bGZwE^?HAsaW~YxP&16 zu$5kPqfhCBp317A$ou zY@wkHFU{D+9> zA1;b08N(=A#Dx#_+T8XoNUf$Y330D1xLgqku0~M{QXE>MYqNI*!d=BpY-D0l&;r9f z4qERP1R_*~DP$pxaET{@NL(QKCddMDdjm@>hfd_h2Se^n%v%Cw5v0t;z3(MD)+s(W zdKIOxW0r#4=%W||O-3<9^wf3H+lG59_X@}#YHBv5@C7NRkT3>vC_vFg)fQOckI~ek z7N}Mu1Gm5v`362IlW>JCC{#O9EoKx6Y;~>YM1a9Vsop;%RY*)DCkWD#k9I1BaCQzt z;O)8N|3}nWMU`s&Q3^7+!xnolJ+cV$urs-XxBWn}FAwxUtvHfQIbHi~*KkcaeuyPuGC8StIJ<5P;HBXzM z62Hq&NWt!*3v-`RxC%Dt3qxDIh-ts=umx6dCy5{kO|XS}*aG9z3jwpV%c{VG3#6tH z9+1He3iQAkn=^&m6^hD@=ctF?(46~oil&GHDq6hmKs1MYp8qQiF6fI^xVk;-nv98n zp{O(F5s#CJ0{!CxcW?#Ek-4h~nb%USxAU2O0<#C)JF??558T18OM<9SCYCrfyV|cg z(*%sjj)!OnmubHUunqxCz%C4=|AVLnR?wQr%9xjt1gEhpAapQD`?4_*i8INKufRFi z@j?UqKT{hXjCc(Ild*P7zec1gCcGImF^Cjtg*F(4ejtP72%(}0uM6@aAj1ockQE|( z8CoKe6J!I%OTPTr0+(~h!WDEQ zi2Umg(rGA%xHzk5hZbQusH-=#z&CwsH?HY7nG=f_)QeFvkA6fO<=sT&=zM!y!}(M(c=)VHv*RE33>HDOiaFIVB#fE09~p@%u*GNVL%5z35rFmMg&A zu{R%4ih4W^t5gzt=nbDKL%tfTm--6)y9<`Eo0Te^QzD_LDmpR%n@tFbz0(kv!=qjrnnavq(T&nB2x<+ zjKCt($~=(t&G*Q$|5)ORy7P!CdX8Zc6=m53UwM{m5w{ZQjk?PWI}Z{^iFNj6k3r2?NknH*@EXhlOJMDW#No7 z5s3X15P)2a`Bau-0u=ahiRH{sgP_hWh?2$_59+KU7?B#@fDsT$6X;w{R$)+57>t^O zD{K6Z*ZW1Dp(Ph2Q0N=S=d7X=ZP2>APwLc`9-*RXVMh?D(GAs4EQ!$o?Fklzi62rP zahrns#7uVsB6euL5~VvS@z7$*5Jb^XA0?KwtI-;zoaD`21jGvGTmY9x}LBp%Ch>&=VN{buRI>3BWKn)7EPb~WK=@YlF2o!o4^MmatV$xVi)w43Mw~vEWn~(Tw2GiN;6}kubiN;DnV?iG;A# zcF>8vNL6382RC4da#}e>^@{`Pl=r(jAq+!9J;Aa2qs`HeKkPxJ&`E?6)OLzFB>|hr zYY75?3~T8NNR`yG;EuI`36t@NwRpfQYSb50RFhx|gjf+<9Y25Lj)C0*r2N$VYAu>v z!QjCN|CdvmdkQK35+$b)%a3`$-q4Qa02^gH3LXhFe{G4d*^i+Jj^Sa!j0}!ja0i`W zounXzSY-*7*-Tq?3#01`sSwsJ@QTm?3It2bPUR|*94Jit)26MDf_gb&qe&cP1@PO1 zQXsxDDbN-H$Nyvpdk7F^d5MXjjj&}96!a0~QTmv%Kv)u1G(RJ_#SBTXA&`5F-juL5w z|HwO#oXbg zQp8bB(A@<+hG1W^m$-N!RgiN+O0RIk9vR%$#}y<<5>N>8HoVkdT;}w?YEwo3EUi(ml?}$ZPb#iGcR6A|3fmI zw;c>aROG68M~9P{rV}3IIMQ38Fv^Uc4deg?cu4{%38A@)`P&c^3{Zjy zGmY@$RaSy1fJ{TXi{o%PfBRvR;6qj(51f0yy};tmJdoVD+jW6Vx#X89urjxk!3mb; z_L#c{6DB(K5!Gv&;G2xmXa!%Gl^p&PYa)O|xMN}Z4Rz53;fRuk7z5$ZJrq(r>zfY- z5=(#Z#fU(r?>oLPdJtmb3|3j^mdjyQNB{{y0>SG=yAVYMpjB2lzPu2Q|A!cZeO!VS zh8J7B=3%l(dOT==99*%;mtS!R3!Rr7zDt53XLxzN+5|j0UA}RAndQxkfbJBF%tSze z6J>J;S&5!IHWi~o=c|v1R0#+qXL6X3 zhZqH4fD&Hn3rS_5@H@P`2@AcWlLVp_Wjhdw?&lVqQGa`mm-uL85sF%1g9`=7s(p~U zCcUR+8l|1)!XB_s9Yj4`LHEnb!8{qsz=@ks4CE`xdtGdZ8N%UA;j0@3#Xu+Zb%|&` zkGBcc1k6Fi97GZfr0qxu9`V0GN&?7i2Qt=`a2Q!bLkn zCD91n5ZT_aWdgWuCrM?Q!wJi{o`9iauX>N@?)p9zBqW}=s zwk$krGcc^!PoA*5>9LiOgQ$)l4pI1VyEWPJnkKkgy>62EF-WfCM_6=myv>6a0jh{riYlk zEabH*z?X_3S(lhbQVgSfJWnT!MfmXt2lkG6CP*KLmO4?k|0*Yg4M-7NU;`lI#WSgg z?K$&Xa=!0th5X>dT3CX0$!LD*a!mmnZ$TFQo(?MN+PhfBn@rt7-)W%OyK~Gne3Y8- zBhd(k-Cbk{A&MSZ!PT@C4g$)aOfS=+}E=v zJ4dvC;58XLsb%qCo?epBRN)eap_?VzgifieYTB z+@h^`ioV!CCCH>=qB)FuJKnUno~&V3V?rEm?HFuS|F0nT*)BSn|B;Xl1y3 zkBs*#CKS!1*zOu#UINUP_okA#C}{3`2eM3h8lHH`C>Udwq0F<$W{reniY&;ymdk=8 zI<(l!*C+_)@HYYw3pQ~Qe+LLDNhBnZLV%UMRs**AZVmBHzIQA^sv})I~ZR_?e+_-Y# zCLmC^t^@*k#U_c+x38vJ_1Xj_RfdxU|0P=39o(|1l|5UCl|%?!59pRrC?h_ENos-; zgSOgn*|LQcnXC-=o{d1jFYF{yBz;Z1kTqJ@u_Hv;QqLAC$7F(2j-qAM=q*{3B&~MMnT?A_(<7Ov}htz&lM--e#iU{ z{x~vul*tAYV?jxwKoVQ9!bW(c*yG9;c-h6)UkgQm94WR^vC+1E;VLP;QnRjuUr(`Q_M8B}}- za&=sC%f&`tcED{hMPlp`u-z6YCFWO+zqOLslW|4a;artkdMT!vYP#uMF69*|Ze#5< zQ(*4c;#DhU4Aj-BqqX7+Ruft0)l=s!)Ji*K6opVLN+5{Ssjak9OLTA%MbTBNv1Qh% ztCFIfSK4hcK|!O`5?QLt&7=hZ&<4Al77n%}Y%S7KE5)p>wqoK!N0GQtcC{>VZi1|+ zn;Jo5JjISbuE?k>SFD&?iYw!`Qi`@o=zFRw!3`vdu)yIeSy*sM^wPLWWQ10z9#O#_LY$;z4=40W0rAnKv?PT=(C*yI%myVSY%8c~ zYpp#Am9bolwb&b3DY5PpuFb+GTv5MeNLi^td6~s23(EI6e zYc+di!wK8D@H8KUHEP89We^!yhiK4`wn|XnD3CgL8m{9>vSZ};s|2jov?R1o`Rpo1Xmn6y%z;`<0O#~#dKGd+TcPquajF|TxKDV zkb(t$J~sQA$6hD zq&766M%we2`oyOl^Ae?oaC1ThJ?J*kDNax76P(^;2tYxJmI^HdL+g3VKn=OWd;W8o z<&+XY!AZ+>?vO+E#N9(Odd|K4<(^k^p`_~hMuL8{q*Kc0LS_ol*XX1<9c0s@K++CZ zn1zglQ!<1u zfCDUGwXj1IT8M-u#IXvh4A^n2+`_mD+u#Y8kt7BIU9Xl)VX8jZA{f~)OON#!(2>|g z{~BJ_K<=o8plk||xZN;}W9-aTtivF6(Zo0uE8|N6aBTSd=2|jZUBpfa$miT~kaz0d ziDIr@##^sjgzV4FQrM_FEhzvKAc+rZXvu7m@}&gI-n;Cxy$NOGkz)#GB(u5Anj$WP zr4Wf6>v)ik1#o$08HGx^xx%W9+=)4h%DN7kV{KM!psC#FwWQL^jPC5BBQ5E*tYaOk zP%v@FA>m1LM4O40v^FCx-3EV}(^O3}b*P4&AligAjGy$CP!d<6<2B?%X zs#C6;yYA6#K3-}1&^PKd`O=I{0$z%B_J4Hh-+g}ZMU}Y)pZk?wH{DeC0idM(Na4kv z18#~0Ac0FnfCR=JP0-J&;2uOYi$RQmY5at07LpTNr zS_~lhl7WB;t65kiB*X@6+Xi}!!jMm*n1#BzTqvcOSryi?d;}S2|AA?^j9USgWhKjG zC81G_ffSSmFU@9^0j=>bb;HH&T=q1JQ_28)Vj%k?2dQG85aG(~9 z!B2$Ar>)+~u^~y=p_25MrBsq0J|H1xN>Q*;3`rk^^@@1G7k|izE!YEh)WvZS3wLP* zywM$J;TI5DM`T3C6y)9ROb#-&==?apHO!qwD+8)PB7Ax}ZHLmMDdku3!f z(adjbf-Bs^-EbGN;ZD5)PU-9R=^vkxD|?Il6)?kV$eir9o%`LSV#4NP#9? zg)B0T5q5+SQjK<%0vDJHN}`gBRYWUE64i)hJ&*z$?95!M#YbArxI|D|N|j1(&(5^L zDD(pvxRRY!5<*g>WLgTDNys_HhFJ~Ofxz9C@P{jS{~~uFh<2I8{-N8&6`f7Zk8^N^ zR)(U01Y|^@jYJXSz6GRCXcsH+M;jDoN>P*)*di`sqC5R&OhAT-NC>u-8NgYHF?xn5 zK7>0(!OvU;ayv`9Ljr`$|k&#blF=}VHa#{S;!R0ZJ>>_QJuDZ zA5YB>Re;V&6iIBX2`AWsJ6zO8DWjFBSMhmgm7qvHumMc4f`5{mmfWR@rd5`a#<(Hz|t0dS;SF-r=bWh-!jy^y3$ z($>aVosQPg)WKCkiIqW69!;Q4EkFp09ug9y{}X6IL|5IBL73A=+9Z;=B5yi`>*ZiS zo?GI$WfYXlY1{*1BqV1nj*bE8N7Mx?gZxglXOl5M_N!naDf5(6OfvyuWpJ( z_R}hk-6C2eDbeDJDMw}`5drXti-ez|01}-5#RT|?aZIaTG!M7@Ap?O%b5uu54u=nU zk85awcDUy5po;}j>udH-fb>#*L`Yvq|3YRAhtm9oSuSB_#LmTyVn^6wm13VXs_TW> zl46DHiUde=tRMqT5vUFalSl?=Oi=rDPD>?7lAIQKfE|@oU3F9=N2t))bq)w#jud1D z0Z76W&`BH35Byk=52cB07}0QC3wOLpz2cC7%!bQ=3BwY}{Lrj{2qevN!no4RjhqS@ z80~@RM6zmZBhsUQdgLgcY*0vo9kQZtg-5u~jB5x-aAZaElq)@yK`2V&Y=A8hB|vXz z#*3iDr1D0%TCKSL(8(aIoA3^haG~1@#q=1+X#}iW?CP%;?nbx-{mtPtkTL5KrH}ALC#EO*i1Xr!l3L#Y&DV4mFlk;@ zqLqeus>i^@Z0%<|;LO?hlDDjjwvbJ$bT3(UP`NyaiFky9XiePMLOu9Hoy>>l3JM@y ziMnvX!w8EnV9U^G+(f0GhdJgR&JyXI%(Y02cDRFy{mkr&Zzfp_T%IgbR0Z>{%cz*d zslbGG922NIiuV432m9FUIt*;JgVqd3-56vqHO`V6E)2g#Wr7q$A4 z2uMemghNuwEe?;%2#WRsZJE&%X8!9fn$$??1aCk_!yp83q(~QphHoKpiVy%Nh^9$g z#t@eYXwcAT07Z(h4MVjYPsN6I*2eqETgMuSwKxisU`2C0VsLOUcSL~ItPCfRfmf_& z>jZ^%jOT0ihD|t1h)g2H*aKliY=)c&0l;#8fR4$S{fWJiw*46$iY=L03>>c5X z)tN+wb?JMsrM;Ml0z9RNEJS+Qg3qL?jGPNw7AXn3pn@Q;REg*zw&7t85wL_sSsFab+G_CeOwe+g9^ z7%OWXo@`X7E7*hCLQ1pR1nW%h2FypYh$b~Ymu}8X6nJRfK`RJBMmS%wxt^mawwh&d zfC8u{u#5zXoWyGc21sOyaoFN!4ydq-*5%aV8>eC}5)|@0hmLH56Ny3DE&+tO!r6W- zJ9{Qh$cDXa0%-UKR;Vb3a2LKE9#v2yY03@|S;oxt}I%;HKab)9GaEc^wd`QGu9`;Xo(D6=-CiKJk)X&PGl~MF$Se*4i3Tacn>_^rpy4V95Y)?P1gjKc#iHri& zNWfE;Rxgc-5=?XtJnjE4%7^sorhZ`;H9uFCQh z2}uZacFV>kP1Cewh)|(0uw}XXy#>8TIdP@Ot7s`(qayOor zmQypwugs(p=XipY9Ct+A+jfmN@{hDAuG}N>E!2FzlWFHIY* zOv-FRX@E&e?;42=DVFY_k9J)7iyfTg2sEl#-BP!-i6lNJz49Q@vIT9cDx*AtOYONJiDGHASMwBm~;k;zULhK{5-Y zu(F6z3oCz9CPbVVrB*vKN=gz~$jV+Toe(9&v{+CJ!7VT?l1a$XqtKYGwkT2Xu>WI1 zj15bkB(SAbttATxaMZZ5D}jjXsNGNtRKzNNpk2^QCSA?4S!xDn$x&EybToks!V|fsn1H z5KtloJE^U#rbZbvQ@3~Qbb;F2R&0d~;p(x4lc&fS<-?>}u|+eN zqKl{^SJ1<-s4WtZU=#wZm4uXb{J|>OTI?ZZicN(xkDXe$SQV*>1pjO29xih7Xq0+i z+F}$oR+H^5wIZ>n6bzAj%PlEbu?5Xd>>)z}O?u&EikODmVv|~2xmF4e;U#DkdkFYR z0S?zynUqb^BN8HnK)xtg*e=`Yuv+|@7_Ook-h`Aizsq+EEjqj@;f4NlrP3`Po#@b+ zHhzmZ=(r{2T8YNiOA0c~K1wO9RK}RLffw51Uz}{K3&d~-O0z1arBIm_?!@x17JZ$S zVrFXt-^9tCGMi$G#HAp`o{`)Ni@1CpWZPweYjKAR$$edm)zVQ#j=askD6S9@L z*~cm_;)Z08J@!$5e3ul7vMZatY2$@A1Vtc>K&R#W0#5|W?^Td-nir|DpDW>-1u z)x#AO)L;B0=!%PFDGDKxAik~?0ZBNf73eF@#a_0Pd;J`N)9YQ-%#F$TRjD}JzS1s5h4 zm{Q)7lt%m+ok;07v5n%Ev%DQ_k|l+TwPFKzip{__Hc0X8kSjxLWjnc_ZsYEW|E7&DE`I zSt|hFD%W^ahqG+vTh;l5QQi*A&ODFt0BoU9J6+t z5aWW3Fs6BCa#=GmgjDQews~%^uFKesXbeT-;?e4E>zeRF*SX2E+ejosUWQ~>y|`M) zc-tFa`Q}y~YZ=EvbU2D}^e0fftKCIP6aU7?0+zsRITipDdD%SGl}uupPl682mIN0V zuC)T7gghJIwJg{+`pXml5(M8sp$5Z4>#Kz;NmvS>Fv1%~@CH8^!V!vigKHVuWd%!M z1%t(+9IadS4S-mgXDmgBGZ9^~|MjX%8#1!rj+ zZcQ|&Sxq|6^_isk3Va<6XhXk-Zes!4MJbCKJb!ss@HMLG0u5@1OxniWB}*+fy69`N zhSQ;rw4hVWkp5({)ud(}RlGuGUH|V|x2q6`7BZm)O^8AqZdPl*hy&mnJ2E-_3QWYp zOWS4NO4@_c&xiBM+0se7uXWXxVTBST#gdlVVNES;ysctfRa>4#I*Fg^@kL&zj@`GO z_r3A0$QTh|s-sxNI9MT$RTPRL#?6#s^PTXuNViZ9Rk+W@LKbPM`r)`WFDc1gagFEN z)*JWu$A29ODM(`EId)4JJC*6$gmE;D^(>9+{pWl~N>JbR@y0ngZG}AQ<6Gu&x)tfA z_5)F2wqwl|uJ?+@6d!wX zKYez!dwd;Qh(r`30c-?sRVQ&)phQYyDP_Zog^r&i+o{AJ)tF zKdo{t{{D}v`Y->o?@mrf@(yqTeWk9BjZemc9cIepPz%ZeDEdqf_gGEc7Af6U&-5UT z1BuSca08Jnitl`6LI1{p9USB}q!0geZpa8w$S@4Uz%B!!4A~@bAu_J|ZVU%+a8?HF z+-$J;z|GCHfCp=k1W||Y4v7JwP~VCR%%~7qPHI`AaBehd0DT45976mmiQz(m3(D@y zHckOEr*M|Vf5Z$8MQ!*rA}kVul-Q8-zAg*#P<0~fPHM%!k}bQm=!FJi3RI>>7A@yI zY$6auViQ88 zG(HH4R-qn#!ZbdJKS1#*H1YTR%TR8y_B8B-nk*4@aTGN1DMaN*T0#=0U|ZHi35t-( z$cg}z$Q3L_R{xGKj{2q$-$dI)WlS1}F$S=M{A=Wr@HN2E!x~4}2*LvqVixJ79xg-y z-oz1GPWE`s1fMSt@eu%lBjYRyv1*|eZf@Z&g8+&`mTX}QB!l8sgPy|2dcx(qmP&74 z<|!!hxmbmsROxtxWF0q26V?R|PlKK!;FU_D9ejZ#Lb57ssvcG<{pcxv>_MEe1tJ}S zp4^Nmga-Y}D=dtMUY^ETB%+5*=_6(FXA0#%N}&!%jh@`4D7*)6)^E>%Y9na{E)YVT zu ztlGg9mND!?GYQDRB094js9>vTuQWLZ7BO=)7?Xc+gdTHDHvQ2j!UW-5GB3ZTQOK>^ zdT#J2FfGlKHY%}jit7shF}mnxWlDhy!UZblre7QbGRm@a=w>1ms};&%kivyKyK2t} zU`6~=xfo&`Zv!ZqiwmrWKI2df0VcfWsV-*5Y(&D&AkZt^F#eJS6z!o5Bx65if)qI6 z7XOe7G}Tbfl(HrVriNHVK0PKi!7iG#NAi&3&UylYGG<_IWRPk>Dnu-r1OqEVtvszS zHJa=^nUps6@W=enc1-Al=0h`jh!c^o87C3R*uye=ul9-zB-e5hQRBc~Q2IbiCMtzH zre_P_(HBz?AuMO6Opx@75c-ysuUctT9&C_2qz8kg6{X-6V{yY~F$qY)9fPD5XjI28 zFn2V_gJ?$r81dz(P{0T)1^FW++8|Bz=Tr28h~i}0Tm?9#Q50+J63uF5MoR;K(E|6* zW|tp`SSFVpIDR3?N$hQ~nbLq6D{Ixvu&PGTaqlUP5@Y%cRoH_jfL^jVR^<^Q%~ zA#)V5SY$|lCL#)SFPugS5{5FNaV*v*Mb_h|Hj!|?;+BMzAsa^^(vXv&v0Z&?Jb1KS z2jVD_$Z^mFU%f(Q7DG<`fksY(L#~IW{6iobC7Lc&BFFV#^(hk_=O9w%TT&xDA|iga zU<$f5AT0_bK6DHlb-g$em7>Eu)-@;)b_+ZSDJb(?^@%UorkNmQEFv~5s={9#XCb0V z6#9V_5|W;z<0(w^)m#)VFoi{V5h&$_Ai5PHngT;|lsljnL?HGh-l=7^KnoC-rPM?d z1;Qf2hC8;F6A3~Kwn!nQ!XvshXoX{O8s#DO>^$P=XBF2Re|5DC!bV6pMmj1$~MlN8V>4615C8b2px| zjBde+XvjNOgm(+nY1?BtglGa`^U%yOB;NL_{LfZ&1687gcaKM*Y63B>#B-CPh6qx0 z&8QS0B2jM%F$o|^=rvn-7b`BMhH7*4$|L5m3L4wN4R|p9D9dnJbpdQd^laooC15V) zS2#7~MijS<2*6V2BvW`7U#fG0S(j!yR|2eO6yR|SB!MI5^t&4Dh5x4GG<8H2HI-Ej zaX~`j7QATf^0RN#@+2zJ3at_g?aD`kMqHT17M36<-UT{B*IFXtGw20<0(5ecB2g_f zbmuh*HlbrCNGQd_pL`)euZIlUMYJ@7l(dDM=ptR!J-B9{iKDDp#+M1e#?b~gIuxLQ>HoaMZN*m4xhPo$A*b*U&W<1^65 zY*wUYB7%YX@*j*CTuxIeSY&cKgcOuuY)HbDX|1EWh-|#V)c+6|m3l&bMYiYkmWHvp zG@cZ9qSQ5A56DKW7^6T6vITCc=QGKnoo>o!-$Zst2%X-CI9vfvzC$zKw0QMJ+@SX` zO{PwGBT*xGJhosa-t<4R>sUd4LoVvyQlsJNp;@@Y2;lthk$9k;}Hjj<;j zWIQ+p6aNHH7F9=HRoVj890|1tUGRgbGesa|jQXTO@&h55UCv4@LacH~M1l=v zJ4$*_MYB_x)!Kwko~O}-w$#IRD57oI6$m0Yqh}(ix>VWW76@ZKw$m-mhAp=nCSkWl`F)1<4Buc_^ zwndYzB}nE>TM>(vwRNK1;Y!@1j{#O+(jp0pLn_R}AB-p|I;ITvrWGc^a-f4+4l*pS zRyyeDzk}ku=yQg7?JWJeuf?M1_Ln%?fTc~#RsW~cp&wa4CWQc4!E@y2F9fAyHbFLV zvS!R?f}TiCCAh&1MNJ=QSMj9`aM_(LCCONF2~M0pGQ(_;>m{UkgcRjCPZchLmpR=n z0y@S$@*@Ha6j0m^i4yfCU`1|TleUh?g-7!=e6PykrJMyKg)Lf#XqrM0qEbjhcp1XZ zFM6gFU~QskiHNmOLLxF@5Y3-ai7o;jk-E$il?_-mH|>~qDne*1dV5Gh37VXQ;3Y)o zwpN8=rF%z6kT`UU1EQ0pnZQ3V*(sGJDT>q?vv=+wC22u-Fp&!VQmk6LZ+ytRyG` z!@e=%Go%{K5Va@}f*f3XM5CY{BKi|Y!P>tSCxIfZeb`#0)O1$4nStrQjdGyT>(|Bg z?l6x7ZJlqoxxbRyb|{X>!ttQD@l`CBX}4e!JaMB%MIsWl4N@^~Y*WQCnywe5tz9Jn z;B7I&K22u29+s1el%fojQGddR760D!qC1sPrkpToXG_xJePEQGbKRw}V-re2bntc- z2Nf1YT*I!4@nzyvWko3Bd{p{Fe1*iK=R7}-Q+;5RQJGP+{#(WJ~HvDIvandZEEx3qk7t4I#{8FOq!cLjEoQj zB}d`MsmJ9|?E5;RDFls_&EB@7%$ zU{gI?QXG=9M@ry90;5o_B>zA#3QPj6T9HwrAj!c|?QBg^aPXr?DN$IpBh|{*7K|^O zI%T@DAV@8v>T#Liw5gP=2e*1{m?SJlO}1QZQ8F}Q&x%qdM5$$S)0UDtvr1{1G771B ztyXTSSF0^dQT<3k)oM5EP>@kH)hgAItK@@=V><5JYRleMuFw{QsmWfei(PBEJ4+x* z%f1pcLT(s|FPXvpN_mtZiIpuf1xeK+V2c!)c5rV3-AWmz)F?^DOtgs>EJUK4JwM!J z&mKvKle<6l4nDm2hBLp8KaW1W`t|JFyMGU#eGmdb4kl=N-@ep?TiUf!!d?PW2^fVW zf7!Ch1at{_S1s+3A^+DXWNeX>K@qTnpnx6;s0D_sY$2C$QZSesUkQ39U`VahQ^ry# zMll9oq<}caj7l)L$%XCP9XYO7@sQ6k2E^ zQE+qhSY#`r$+Za?hTS;OCJx%t$^-zOmtRmr3RvVQ^pJsEdIKg=WQP!f=%p(qp|zEn z^+2d#1XjwZ`HrLjXfcB(VuX9{t7NCal;Kl7RhbnIlb8c(fOqTnK6l zCr>5uq@h)5IsYPg*{X#gmjy|&Y%8F~hc3G3rps=-?!F6eyzvDAKmZ2;m6cS;UFP0m z9*vTac8%(rgchWr*~-D0eYRCA4-)Jazz8Qr$`n!=<&S??38jg{{&4oJP(>wGN=>ya zRZz$E_*052A$v8-Mp&g*nPaxtq8oI#4Wx3yFcGxHCLVr@&vN;R9q+9gaUOq}_h69J+XWcb9k5Wt&TNFm(QCKoxT zofK2F^ZzjycIgY#C<*)B6ySH+Q_2=X4WyS`Ys$;J*5&mMeDJ~#Pds=4+=o1QFAX^) zfBw}8UaBv7G~{hL`qxeyo4|?fKu9r7C-redNIj7U1?QXvU+)_drPyZ^NbT%^{$a%wHYEvCV2^ztA`(Kdr@itKpeQ3* zihBx(Cn>CAP`f)%s+jja2C{DyJsMX0*w>C0oolO$j)|ICO0_sQC1P?)OzxJ&^h91j%BgpjjHBv}QiAq*3SoJJw1F|A->2uXoI zoBuRQ3(T{h{95rTofM31J(6JLvckNTNC7!bB)}DE=&&FqhbetrUQ?VX8AKNEgnlfZ zBOeLLNX91tKxk7HD+3z1DDpheBhO(vX%OyAPkDMgWGP3T{p`yk~uw zC>c?yr43blkM!^pJ@FiLlx;GkQ&M%9g|4KbSCd)dUdR1Eh~Hg005vA)T;Y}OYt_@ zPq>1|mWV`TCm-?=&D^jg@A218lKC!M?(%k8ND3$B0-}-JM3l>958wzOxc1alpK=|~ zVpg(=G0@Yj!Q&26ISbm*iZ(091E@w%_&(>2rgu!q8dbl;(~Hv5TUnu~R9lNtfF6dT zpKatpaf_awHnL6CyJ|ci^ej>m4uuI2Aqj&k)~$ZWkmcKu6ryFr>?PNb68~k&LBDIy z_CRr{?eG&7S$Z#0o-1pNY_D{?BixAkb|pZOFL-C0Q#|Q03SoUoA1gar$uJVY0WPqC zhZlfKlIJ)tF=pUwVViIwW<2g3UWMnXnC|2gzZqWVEu{mJkc>gO=K&S#ka-o!%66Pw zK@P#F!#1z+m6xyd@N`-HL5O%0GMl|{JFh9&6<=7c=kjrPfJ;icYPekl<{fv;bKodT z*^xT=XPbH}(EiLOR8BUbBZ>T;*CsSwF)fmF=p@zQ5%Rrd&2sjPJmsZ6GR<)=ah>ms z=db1jt?A_oWAhB?I*T*VYQ{044_)UcBYM${4k!SA`d>U=)S`jLt^Y=w>=cdWvbVjv zZM)n{X?|iFlENLWM8(|b1G_iXtX_2YDEX4L+IT&3g>$O|-AP;$Z@ulYHET&+=vmkE z)_LAAv5$RcN}?Ls`y4fNgGbe;GJD#!rS^frI$vvR+pNFZGXM-C>urmB+~h8|xjma( zbF15t2{<0ME_yCHFWaFjrnjkg>O0s1+m!Q;?mp?f$ZYTX-w5UIx(}|N0V90j!s}jw z1!`<}@ftqPmJBn!17(c&x|w9Hc(c9gaVB%z*9-@qqDfxzl&448ucobc(@o#^Mw{PB zU2#|e&gOmFSJE7wZG3Z{9I5s@LRb``w8J+dF) z2PY|bX|==ybl&`#5S8e&sJ4FFO&`{@-kdw+OXEAlN zhdY=AVZZ%($v2)})eMG`Z038yh7Rv^bcGyoveTG&iiF(;uKC~#Kh6;!zUBpl{O+N& ze2sZk8-$aTcKk0rFZbzH>r!`X`kd!9U+O`(0u=X#vU{nz6y+*9nXCFy>*KMl`n$qk zpc{Yw^nVYwrCtBAgMR-x5zFl^!apYi6LsSc6;peYasL=HVGz2;VGP(;RkKH=uteRo z5(@Yc-E=UY0(`?Jf0MCF5Ewwg5)l%Ja`|V1CzxU4)Nd$waLJc^I|D_I(GD8`6smzF zTMz+~Fk*fKB80L(l+uF@u_?6@5fK3!~S)0HSfIqN52*I2RnE2@oQ7{{#Atpql6hmPq+R+mWF-IA}Bne{+ z^#BtdK?b^kI-@}_HG+Ccp&UTt8$ID4FY^&vVE-l>V=kClOxaXSRq3T@dw2{06p=pRbJmCnIA2eFGl;t`}$3xm^)+hI&kcr4RI zmOUw%I|)mZiEu%b8W5QpG59JQ024VPHIO0&J)u8WqKg=^2{WWN(q|;}Kmkf{B(u>U zkJ3E4(i4zkK&1GFfU_4xMIZ`E3P7O+BasqKC>6^>3TT58xd0g`0ii(#X;F8gfmcxgBRSKNz~~xo2%7)# zOR}*Qw^Jk}Src->UmtH7MkDb!a3nsXNfJUeoJo=sRZ=!{!3y-CCP(5oB2fks zfOWPx8gKGG2D2heLMJ&fHk7Cx$TB7!QZ{7}M>)|(8BsPka~2R8B~t@J5uh?uuqG&# zolKIFIx&kgQx`@QE84RxMzcRdQ6i~_lSN9YMjCYfR;k3M6F|YK*aQ+=1E<2FBvrFP zd|^A6B?+=26}v(aRap-eQU9XTDK%XApypy#%z>f`bE>Q1hFdTpr)sE_sEscc5v|}0 z72`t+3S#_$Ar+xVtV1gQ5tzi`lm~&8Ljg>fC@pPKCJs^yDaMnTDz0&cZYwyhi^f~e z$vlo>6?`>bP$~r|R8x%CBb0(BSgNJ4X%z#7o3>dC&{I88FeJ-jEzMyf{)l%`kbJ)s zEnjnIAN#`f>VjQKSxpq^!O?9`mhE=G-a?| z=L)mhMu;&xZ3Z!UZGu-Q$_@g^Rt4jg33Q^|`J<4fBT8VP2&$kAnie1;8i+LzyBI9w z(h{y9pb8LA?tm+rF#jXAle5>A6n#-96-t1mumM8R5~a|VxQ9E=0X719qPVmdiK(1w zF{4;_bDVY)J{w50fqQ7)D7eU$JV=UC<+z>Y(=f6^1|b6{x#5bIGqJI< zr9h$te=#Y>a*$1G823pW*ux}`vM7BBLy>bQQPelkf|g&?7YbA`7?M4$@F*#QA)?V2 zXh9~<@ioX&3TSqyQpuepG$flLPviq2Gld!*Sh&qwY0ismo61#(bb-2p6v^c;Q2;P- z@jARmcdT%beZde(Fa@G8PZN+M&msvC@h`r?luT0!bTJC((>D6jG4g~%vgAVrvquFH zLGKGW%J>mAQvVYKpot4=G9?3x2h<9+5WZ#+qoi=YZ5W(d6>%!~##NidiEk=D-*LuX%QVyCC3*!)Bsf|Vq#&|}gVO(c* zVXijZ!UCsh*ybHd_jo2e8GFZl=n`tD_IFV9jO@UJ0QtiYNydL1W%q}vfP7$`>O)uD zPbDa2L7SqS(TddqPJ}GUqE)Vw9A_g;N>tS*T?NH8M{oF-#@;u*NM*+fhp9^E#vIjP z=6Rnl6#t^(YRR#jE;B332ZqE!EE!8YYei;Ge)mca$blM%fW9nY!yF!CTy?dq%qI6c zioDE`bhz=7%Fj&ALJZ5*952$#$=J-z-CV^P=gnk=$=6JFGrPj!jLyPS#OW+*xphe$ zMtkfm&tZ(r^ZZC=46`Y0uJ+8&-XX}-+|Tf0$N^2z)m+I1{Yc~NNC3?qQpM2HTvfM> z&=W0QFHF%)r(3vOq(OGk6YWl4;mjS~9?|?$B5l$hOwK1Q8QQGUE#1K&?9%a~&@oNZ z_i`Ua!iBBURZZBpoYgf;PL3_rU0v9Gok%yV z(V_*`nI>tVY}q1B)-`R`X;<2#z07Kj*loQ@56xLmb&TZ0%9oP!(QGNO|p-2~- ziB0h*%FUg|FIU5zt;6qTC~h%GT%lhyGosCPBpQp|A`RJaovwXERbFvBmJ>DE!T%bp z(;uY3PEAZ>wkKKD%d#TqXAXuCFM*!UT4VQ3(3nlw#ck1tXr^(gB*WpPWMWhLb6*9g zP;9bM%ZDeIm?U*gUF6qD;_F9}unP15sNpxr7Cz6Z9n+_+ze_s`wICdAp%+OJG8?2D zi&f0*@_!d3i37JB2ca7Wfdmu206N~$ti9c?%~T+yy}?06R}yxx11t9-lVXIeAOa$V zT6bz5wRwUiOgP&g1zzLGxcE~F4lGNOzQZpB^LIsqd=2EcDSdQD!UD&%F z6=8aeXtON0*b3aaFnbX-G~u@2*^a-!2@erZ(YHCgK`M9?m+paA*jf*q!2bolQ76wB zM|IaeWMdEikQ5QJ>aNfeZnb)fj?TmV)*60@%z;KhGMXL9cpZx%R8$p3MHE?L7=nkn z!T7qRJ{RRBIyn-VM@4=dgjj=lAA4~VhSDKsaS*>T7t=XHU~`SnmE*pS&469l(hXv| z2)?~?FjGJj2gw`FxLCl{pfGVT1W>lE0VD^(E2nBEkbxb-v~>@7qDfH_k^o^2ffr)| z7hKR>5^oS%unM)o5Z7oJ@NUoA?bqCWeSTU-N-zl(KM>^LGCAm^*EJ~dY9=2$5DqgJ z;=Vt7@hDY+knkp8TNTabxj~Lmniz5rO2G5yNe@YqAN626MKVHV5dR%ggyz~n+4AUiu-nF;ma3Pn{@5Y81G z91(~$s&8u)AHoHia4fSiJ0nj3d7qb(LlT5}HI(78s<%N}-^~~v*zZPB!;Tc2KoumB z6T>m?unrUsQm?4#5i|szTYx63Ulb1#ucT83LKwMlGZ}44iS1B}3R^IssQdQd3nW5lqprNlqlihOO`QZ&ZJq>=EnpCa^`dy zA&F0)Q8v{YC1I1TO%gcOsz*i&sdikH2o;!LYPilgne49!cQ?HE_z+&jN*#lg&i)YAY(UDv}=VO zrzkv%fGwmj3b+khvB#Fi1S4Y;0#+nItXekNq7_#-A;2vH>gtgr3h_!pD6-N6ObYW# zB*m5vH&M}*#t0zAo)@QpjEb`eD9jazcy#bfFvApcOa^=UkxVqxyeY1@Ae1Y%xwNRI zlr5r2P>LvaL`%FaND+t(JIAt2#}4t5>-S`oQ&ySQmrP#yyWZr9HW+_8 zw4H|Hw(q>#@b2Ewb!+ZU4Xn7yRYZlpg%>k!}^}KY$a@2#F}{T->F( z5x4wu%+vfhbIvz{5b2K$@2K(xMeqD{)YmrC^wc@8+Rd4GZhdyzYhMj*#ce;m?U84C zICtHH7k>DX;wJuZq;I`d_TE)u{&?u4mmXk~pP$}rnFYRnd+xiRiFEJ9rdr6 zUBx>F=Ff&Z4AA^|NGALJP>4hHjQ{_L7_+JzQHe|Z-j7(v#MHP(3NI=e6s>s0jJ*VS zSOgF&Rz!-p=nx}5661H?;?S@koEht;#*v+HB2VOE9a(ZgJCX);?6603$k)OC zmFXg|%VQxAR6{@-vNKVz4m(`o4i0E0dEfdK2d!1IhOrSNKZ^+59#|1NdajZ)y5vNV zcE*t@OJ=~zN;}E`Lpdr^mYfmeEN7CFw^V9MWVlGyVzZmy_{L9VBuOnlBBbF+f)y1T z2{IqDiG@tSmeV9n4XGKLD6j)5(P@Q=G-DcQ`9um%BEW{oV5(sy<&8#jSZm1l9W&7_ zCU*15mN1hgG&<30&>G0jDF63B@P+c418wJN2>KZ**n>`TVu;_UGoEM8i4;Pz6Dxkx zuC#^ZV^`}Xc;GanqqN6r9&^YDwZl+Pd(fw8n=D>9u6 zZVV%@v`9i!JoV<0s56|raBPltf(R>#x+8glWJ1ugXJ#stJ)*iKSwCTFPxth!;dC`m ziF9dMM`}>B(!?J{V@@juhL?xPiB8JlquzcKh2Lz!P*NHLA8pYFCHS%xdW#W5l0b%5 zu;M7i5y%#p!lXSxryYItN~9vID&I6DJ$#z%is(bpq10m`!KBVmNO7Fscu{YhNNHMK z>cCjKmLyVOO5YN2l>c^6Zk0iTid3|~j#g}96y_mC1e~Om?AVnHlMskh7S#$eXkiQo zLyw;#f)$H)Xh}uMPCFQr8-~PFTN|Ng5~_Ns1W4gR-yH=3*zv2am2(S~A&Xw8dl)3y zqAByO2b3fLL)ivcpRE<}M(W`YQk20-(rMRtxMEQPOkfoC*n+57;fhU_^FPpi$dvpf z3Eu!}F9dKaMFz{HI+3Ctx7osbi}opAP6Uv5f~axlinGnG>-Z>sg{DwvRTVSuu(IRgJuQh7xgkKJ ztCQ-9B*Cpp9@Q2mQDWS5szV8gEFc@A1>E4~q2j@8Lzx|kP9-NV&`$Cw{6U5d2WSU2&ME=!po+AMyjDk_w%DGuvTKJA=VwAWX&QxVykSs4LDGPQA8HUAd zDOIQ-teCzBt;zIyV;QiKawN5F_uk4celG*RkD_RJEgd4qtD+M9N1|(6B&$2MR88UmYE^tc@ z?wB%iQ@%oiEe6Di2tlK8f)-YIuQ59q?b5GqGP~T{k+36$^l~dMcnZ(@ujYaf6_JXE zn6Ot0Giuh zt0ZKaMJZUhvIs1piijvMjVM62O>@K}8b$^jALA>TD%66nAu$d~Eda9!Rdf&<`>M*g zzK$Wrv^qC!ya)-RLdSawQdlP5a0*^=qmB?L)nKD<(F+^lL;@%@b&4(5>qa}mIeV;# zAYvyOOB-Vxlkjjb-T*cJYn*&EyplS|iU^=6R0(ywh=;r*if}xx=ncL3B2co3h*U@+ zN zOiAVWqlE0VkI6=jn8tn-4UQ5Sli~=Z?8z8vM5v6w)ZxjgJg9#>K4iQ~u0$Db>`9mG zO0mopeC)}6JRGQb%CY34!{bPXTuZpj6^~5G1d2<$gcS#b%CI~lGP=v?`N@wA%D7NV zzbs6pR3E}rK1duKt29ho%1XrBO2?c`2l>jB+)K;p%Tt0w$Rr80+DOVAoU#N;fr&<^ z5u*i6%+Q3Owp7Ts97&64%+(~Kx%|kwoK4&Wkh}y-s&pgG9GiXFOoN0P(>Wou;zye7 zq}15B&vCNOeOicGXU5uNOrk$>_|{3INGy2`UO$d-DG`V^$csLp;2nLJTMgJh?$XddPvrjnTr%$t!8 zv6u@LoYp+Z*My@W0SZmf4jx6W+v$moY{Q7?N)zoWELf&bu|R#Au`9Mc9`NegAb zummT&X)#Yh7u?XM)6!A|eH%FBmLJ&{pP&$s>eS{*$GVxo`-mx*NWnqV5&*;&g7`NZ z%eRNn1UA?NA1RD7Ko7!;y+VwNS`Dai5s3G42r)pke41>{fiR2oVp%rm8cu+UyKCAq95u2Ul8gvC&VCbjb-^7vSidEwG2fD74}_u7~IgDgP-MngT&x^9#ZlIMh=*)*}GJ7(O{0 zC*a7oLt}{O;F6=OSIcNU?<7}PwTB(aj6*w&+&GM@lDVU(n57tu|KhWCQH(M`IlSPI zAUQO1+=O2RjKVlQlC8DOAQG^MM|OxQLL-1%$Ty#wJ?U+l(fmkMTAY%CD?VWdgUyY4 zpt>*Q3h2s?RbUVDv)Wkm2dg~~ylV)*z&ZdXJE9{RFslj)VBHr{D7+hv_xRR~*q4oQ zu%j!$U&#%=F$&09HX$j94TL6F@K%T-0Du+PwD>5z;hQOj6X6{}AN-X~06_8~fc8+2 zi7Q0Prm83iJ-z2EAO2>)0#t(b!8@DG(^h3`AM`r;3*SrvAe0K#Cb zttbz-f{KSwf>5Lq+%S)Oq72oeU8{f{rTInbxFkM9i@vah#pDBti`N$@DBubD;2SW60yK%!L9Fzse$OP#^4HVf)OtXWSA*ag?x)PX$eW$ zjWIYg7GW6c5RSuYhcQqBE&#XjYdK#qRIyXBiMqexa=PX42i%o_|7(RUHqK#NZX)rKKvlmk+|u#a<@ksj-tD4?klxsQ7SVV6*hh)<7Or7B5`!zKFxammfJ|7rSRSlHwFjze zF?&dgDN!dxgK)?DcCV*(uY~x7hft ztoW6}aFnTD3yxVV|KPXDz>9Fv8W1Czp|CVSF3#r3Q7K_PCCwhgUL}FW z5Z3>m5NzoS6%^r+o40y!gNA4?Z6*?c76^KH2_+cd^_|)+(6{iWSg~{yQY$ zhuF^|)4oMr ze~8!TehPmm1@Qn3_q|uX*baw4kwgVp+!c@AU@;5aL{@MIAWQO1!H#)3a?~a<^UJzI zDMSp*@)-9@^|?yxEw8>JmVy6x(yXv8Epa(x=G5Paicz!<00cJz7*>x3z*cAjW+s>= z*<2E-Q{W(xYv~K#&?=DtC;LlUDmhrYIg)|^u1P0a+&k$pgsxG95Ded`PGN<76|@TH zbQNKd^g{JXC$YQ;^|)2NBgy6lX30S(%M4A)$wpWhR>orER~6O6Wa^OM77GqZmnSuA zS)1ZWVA+LVtQ{DuRqGO;q6XiCx|FfraV{KuL%0A z{LD|8@!n5quZdMEmnkoMmM})(kBQ;GeKB$Tl-yh6kNc*yN2I~bn$V=E+M?xGz822M zYu`|rDE{itG?V}D#vApFa_xT3uXcNUm^=w*@}G7G63IpE@Q8qZn&?Z)UjIehe0#K3 z`w!&Y*G7OyposuM0tpNjOsH@n!-ftYLX0SJBE^apFJjE7aU;i$9zTK%DRLyqk|s}5 zlu%Fs%9bu)!i+gG2?3TYW#Y`Kb0^Q9K7RrYD%7VG0!4=+O{((WZIEJ*|2*>(+EryN=D1 zv+UZoZ{r!RxRpSZ-MN1Q4=#K-@#4nE9#5`(x#55S03rDV1q1*D04x9iF#w_iUjYCJ z{{RUH97wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7#m8+2r&W2k02!~2}y7x$&)Bks$9vk zrOTHvW6GRKv!>0PICJXU$+M@=pFo2O9ZIyQ(W6L{DqYI7sne%Wqe`7hwW`&tShH%~ z%C)Q4uVBN99ZR;X*|TWVs$I*rt=qS7ilU~ibHB`m|VWW0U+o$Z> zxO3|^`Z@CM-z`-GA5Oe@OW($mbKEOjx%21H8TO7&o#DulNklgvh_?gc(cwF$mU>1KH8gibghx(SlBjv)GTb; zM&xQ}Nkoyv7NoR7iUdmZ6-5-nHB0Gc-SQqf>X450!UQIm8EM;Hz~4oI zFtDUCchHHPo=X5Jn~<>yNyJJK#TJ`D2vNr8vSSYy{S_owB&^h9ODRHTEQO~r3Fd6Y z9dG)W7B34V7^j=qV~;HZMy$mq6l)=v6cm$zE5qCgUGdVVaw^3bQ2VvB6i)-iE7R1O zrf397M6gLK?b!13778fgwMAfqtpz*2w4!A~ZHAr1+qRIxV%vAK|KpE6u1L`rpmu-8 zMk`!MQ6xn;f*sfv_4s1XEv=+2(0X8-i>|s8w3}TLr2O2@6iRqm?kK+aW6Kr^NHI!1 zzu2=yyE)d0(Y$L9lsl#%7A^?^9e-B3sfg;F`R@d9?5UP^M=^@o9`Ac7vq-n2^yPH! z9d;C2XacqaFk(TRSMIpoop36+oMkK?bx!dyoNv3W?YjSm6%>*rIIeN}#=# zbr3QxWH6jkAcCaE3J28#a4W0eLZlEe0s|*v zX)4fF3Ut)x2EwWteG4*T@}`DP7@~h|3rAJjnFLyC|FJ&Wf)jxn)aRt2GHj6|WwzJ^ zinb@uWDz7p)Js_z78lUKfK38|Q=240*al9JffTiXR`{BwqB+5dUk{vCS?xHlwc&m3Rbj&9Dj@(v9>S@L$<=KH|3+q?C}p*xS|zpV5GD3 zW>&LC?`oq^SM-)8GwEM-z-TPWKUNJmu`=@zBRl|(%#NPwZPWJ=;O>SzF(5Q`DynrbQ> zCwt1gW})k&7OSu%Fnmxrva4DX%dj-VCWUHo48sZ?G2Tewwd1Ai7jCqN9ML-e*yfAE=JT-wBban~|8>02L1-5>4b`fYaiaYnXis`Lm*xE$r+}74d=W<4u zYu@up5xC{PT43A<1wv>WIZMiX0ByORZM%VmoS>^27 z@?0w0!Z&|s>Xu@S3inNnWi`}V;F_CFBWRjS@dq?zI1F|M+TJ%(byxEbO@>7 zxjb)TfFZuD=c15nQd~B+&8k)_+ON{gJL1v$kBC{}}LKBNnTiESrVKr-rW{uNz zg6mGg!2jlo;oV4QgajhV2@u375K)IbB!y8@}tY0u`m zzs2p1L>6rhf6U8&P%va|bo<6#h+K()tiH8iSvvrit+j&Gjb*#68aIAdQkd-@oN)RY z1@cB)j2CHKfBD3gd2w{n9P0#*%+)lZ+99Tlw_mqxf{TJb>8enqpG$&T z%$s6ac*Z1*L1d(mB6pDnMj^&Fy#8>iOba+f2}nYjU@XP#GUh!vHvZy3u+s*DYX7sEs}f#n-8f!+=2DhJCar?O*nBb zbZ#lIBcW;YQ(6#s90OfKr37P8P@4m0BZg~i^+vCj9l}O%V^a^&0&evXRB00!v*b7S z;09bk3hgjsQqVf}#WA5{HcEq0qrgjUa8m#`Q=?FT)igV+WO#$tWNAb!QSg5w!wKQE zI_v^OvD0NThBzh0dDX-P9aAo#V`r%~HiI?=R<}CiBxjzIGQN;qTR;ZZqXbcKd`k#~ zKeH|`12_Rt3RHiFqDP0zy$ofC#+V}tTz zM(7fFP4+xk1RRvHsdzc60Q^+*4Zdj-)&TW1TWHA`$1c2(7pKC=Z};5W9A zh-LRPOHg%F|CccySaeReLYkFGp;Jqx5JYM>c6wAqdE+sjvk5t8aUZ2R(Io}pq&jUd z3dDC_JD3EUzz((GDd&XuXC3C=ycJSOAC}S ztwai*6IhOSNeZD{rKfhERS&fgbXvehVX0gxCq&leLjxI;_KKQWMekB;11m8PIsdT zuY?eo=$_4KzUbKP6?P}TSN-n z=4WZBWBl0)@VB0T10gRXOeeGKO0RS(_BoG6(w=?`HyT0i+1BB*monFQ@dtpxC`fOABmLRZRnLKERdTzOh$M?y0zA9`acR*bVe6OlOl8I2HPzsV2d=n4_p(A}-unw52Wdo)J3ow1MV|?M% z3Y<_1fu&zJM6zX53ekeG$;6l(iIDbCe%uuaDu;1qq>rQ34`i?buJ>`7Hxn(3s=r}O zsZltS$}T@uru$}ioumZ2Xi$8nEsi5U+&L{$@SVV!fQ^NLZU7`Ax`ZP}O}FrnIhu4(NIJaB zq07Vx3V<|Ns5Zs6pFhK9Rw+7dkXo$J2BdIZXy{9*#v#S>FtCJjG|Fwb|A?b{CPY)9 z1%~$@>7$jlzzV!ZXQjXelb~#*Fo*~mXW7!EprMGQz?CW&Bo?(-gLN#K*mxs4JE@ic z$uu(crg~;1JO?an1keU;T5q=pumuB$ZB3>(fKzd*ML%uUqw&KE^w4L; zc#OyAN`1q0NcBdK`nyD9b#1_jc{Zs%}>acrqiB>sPayWl%bll3(c$)^iZ@b(^58MLzQjB!rYe|Cy6UMs)kNZb&IO zxf5S4Nf-}|l85&duc55=TbV@DrSq+P`Oe+P{ z1f1;_RxCF`)-_gdt1%oqLY&Gn+#12RDS zcq4bry9{D_14dyvBYtNK?$B7s95N%bPybkawMv#um^>8bv=ihxr8!>FXG4Xtno=2= z1i*xqX28Q)Wv-BA^M$s%yjJ?vL%P|0s`s0olQE=q%n>62iz!GuTNpWmF)5T_Q9LOR zBw-0fVM!2a*!fEXsAC_-NgTsSUSgj61cBWdxx*M3>X<%J|8QjUOTjE^SuX~331~Lz z(r#tuOFHQ@mQ`>W#AoSZW`bHSICxx~hEn#!O3M^#A}Bd|1w`_RgZ;??Bc_Gfw!w*3>M9%6yh>q#)E&!%NibrsfGYyT}Tdb0$1kWrpQ( zV#v9ks%IvAI&1j1yR@lFuwul*#rBJUR;o@JLk)a_#+-Ir@moPw5-5s z12&XPsgUuUR@&3zh8^~1r0ddcA(Sn8R-=j-QZNHgct?J7}DKkTtuvZJYZRG^|CK@SJ2i`jka@#|Mmk;`tdN}7oY0n( z@GV*xf{pa?7Mzo3KjdSnOnjiqL6GO|FTZbUqiAJpa}@;gl@~DyAVL!y{TuPU~)D6H?JW zfsLp|n1#T41NM%HtOJJEr*%u-G245Zt_kQnTi#_fxW)?ACv5iD-v7u2sIjcq z0zCf4wcr(4>2gzJ6Gc}8!K>vd&I0-u!wDw`_?Iaduj`q`r|H=HT6`BK)`<6&Z@$*MK#}GR+3S7zi;B5J}1w5>9 zTHO584NXL=1&BQb|AOQB(#HP)AtA|@O$11_B1LM71Og2SBoU}(RI4o$ASN-`YN11p z9UV%!m~cx+kP@Vja)=P&NP$tbusTSJ%@&YSG_l$uP>K|oWC$>9D6rucB_Ji@)EOlq znTrKgl46-eN)%QERI;*F5#r5*1jrnek`$%NEnB1xENJ!M6o(gG!bC`>sM3@%A5Km9 zP(qYZq?qm<#WAK&y;3*9CB;RFz`d;O`I<7p<7CQ}2}t>AS@UMjojrdB9a{8g(xpwG zMxAk%TwVD`&(=w9-|U^Caq-+6mOl@^vUiTzTVICH(Ku!D@iSKs>zqJ4Tb#yMel52s zG^vH14QxYjxyfcrPBsKBLyp0Qm~)6i2^Vb8p$j*w&A8eEJPtt+J;E(H246cdx!Qu- z4n+|$WD&*Rc&bOS6*W{5!x3?0P(cT8ba284bKKFv5^t0-Hz~-mrIiVkP_4rEqNK7) zE3d>dOD(sgQh~|lGp{2s3)_N~Ru(&plqNItjy*BotVt?06&eVodK_wJvOF8wv!gya z>N8M02leRAh79%7{~<&L<&#hXYSE0*juut4QjhF$6w%GxiLMnbY8u5JiaI-M40dYS zh_WcyRL>(Y-E`Ac?p8If){a)C&$IeYTeUp*WKEAn%f_s%*0Ts$r4}wE8#YYrrVO*a zXusT!R%$Ja)jpl1sHGjbu6&kDamOXMTyxLmazoT|i$IE2>LFtjg2>>H6faL>H#m8t z*v&gFH2aqTNdo4K;A}Y}m@SUqd|Q#i0!ics(NzyG}BzYp;_Gf z+Bcic^6}2-<_tvBC!>xxO&T}%=9_bMjanB`FOBiMcjvu#ykR%3P5V6Rx>etgHyZf# zATA#HtFvuBc=)Wv_Tq7)w;QwBo#(!L?@PnIwBJ~lax}?@6ted3w>-Z}<%=cz{q;v5 z_rlNT_l&{tQ`>8M{Qn1__q?>f02a`I2Si{371)_yEzp4vv|8vYN4bvNi+o6;mINVZ zv+WS@|9m@Y-1|I~ASrMod}n-Op`Rr8YnL>IYr8Ba(z0}~E8cf!qqj)RlC zk^FXe!wiAxKkCvT%7iE`A?~Pi>7(FhbO%8yR*`5Hq}}i|gFVeGaXmBKA{ZUk!<2dP zh27DW^%!WS=n)HgYUCY5dSye-n6Zo8Lys1b7A`CH(T`bjVF?e18r0cpf`Hs$)ifBI zK&lT%_p@V=?)VuG>WzhIgyLu3C&Sg4rjal*jUiD;J~EC*kx46&{W7RRb;4J&LxCJ8tqK#O7$rVN%tiSA8JrfYYuq6l4=*$cYlHs>y1;PNI*58D_u=Hj_P* zMAc-68{l?IfdEG$V<5m5M$y(!p3zll)dW!_Al7`g^l&hXf+V_1fSS?AIT6^z{}@I= zhP{&VOGy~e#74n|=G8SgKZ_OJ(B_p*aDfw3Py%qIAPJf?WQB+`=kRHx8NCCWP2OtaewJ z1EkDFw$KiHaKaU$T8x%zvI(T_6e3Zmg+1Cp3VW0SZgrFjfm*?Z?&Mcg^R)*`%H=jv z*jF`(OOrip(KWZ3DLVcr1zD$36#{I+AMFhfL~`mGwEfE+2l>Y)rVtVXzcx*N+0uLI zOMp?-!WM*qUr?kHg;q$Xzk7-ASL(|a8UL+G_r2Ri2v84yq$-r9B7oFd{~;<~Hqg6I z?xRB|^czV)iVLNX+F(-%#krAhIl7U;DnLd+ptyw{6()mxr4Y`_Rg)fV*g`^8SIs&Q<0j=VvFcNjBplTzRg?Hs_6;`T@VL+C z8Qa5o29hx#q~||K|3cD)oz37gPeo=0+z(f3kDxV3tXwz|F~R#;>d6hydcB+ifpBUJR3H z&=K%$K18PjN`4m+AGsLp+>td#?m}dYX>;X zzJ{n7j)JW!BY-iOlajk5=CZpFJf6ZEw7($*Dc}Nmxeuwp48YMXw}BhLDGRf+4pL~r zdg})=I6)eWiio&B7z`L8%d3;Xye`tX{n{Vw2#GDw0!dH^wHpZ1f(o+$i3*ECCal4| z=&E?(tn-ixNkB7_p*S?zi7b>CF+2}~puwlhFH&HK{|jpa-D(=WiWf3iwry#MG@Pr9 z`cI(o1J(sr}K)*nkyCTDjkFp=c7UtEDR~o zf_S098dJk%gTav~34;g>CCDzbhzL!fK^=5Nofw5N5W*oW7JX|6yy7sS2*Rn!I0;}y zK#Ynh%&Q)pni=b=C9{REia{4-K{~t(70kq=>JP31oXcrOKTN~?*cPAoFF3@A`_o3W zkiy_#vAp8NG;)u=0>O2>8!3a9BYHG4xDy3aGrKyodawlr`!=zsTcEu#s|Qzb zg@2R|eoPwzP%wPl#}U$?#>p4qfHQM5oC$oc|J@J{h5W~Fg9zwT33^nF#G)4h;1qAE zwgFi(lB|V#xP`DvEZ>WocHpesn7vkru!T%K8i}ueqzG5z56^?GC>S+-6qSPD$K3F} z$qTjMI5T>bnzmAqJtLKf04*TeAsNw$Gh+u=;1qjsg`9{PnB)(c)W#Mg%IKJme#DfY z(Z{XQ1b^fd13{B?8!|EgI(_twgiNxrY^@v#pNiDAWMrt!;HNhMK3Kpcobn%lgDU>C;6L|jIaC)N?U`J zd~}6Ypu=`~7rD@h?~5U6GCvg(H+BS0|EqyIhdZ|ks~1v32^EX1!{86Fw22yn%#6^A zwCRW0bc!s)tQKoGzyUgJdX=;zI$tEXq>C})%ntFQFWO`;zsL_QAdoycDxiyuB$&Nq z{E8;|3mPN1uObD12t(h1N&ajSF37Kbu!a8k3J4pqspt!T@QWCX!~4UEW$DF}SkCy& z4^Sbwa|^k&Avm!53ZVJU(7-7~v?E&4H+(FGcv-SGSd3L^hqt@W{SvRp8VP@EiMGQO z{`5+w*okgIvkf#xR`7>AY=zm}3W9@*5XB}~@hC0?iKD{BI@%&iWUm)Plg7};c!{r8 zc&{yZOLw3MI%JH2s29q@&yc8x|Bbs(sF=%9xG-0+3W6)nk$_V&*Z{QAOz5CZaMX!S zs4vFQFa9z)ks?ud3eH639d)EX;mER|a75sUf+*OFow&{8O3Fgaj|33NHkg8)kjF{e zjhUgt)$+akixI#>RM~(lxiX(YO9DkZNRyz|wBnEbnt~c53P;_?lgKh9$h52&ET6H3 zg-`-V^^f|K8U+AW&@_oHAh`T!m)S$rvFV?@BUM8?w|)r=_G*U>Koj6d%5aUD*=qv| z+zDv&z~z&t!g`@7P`#&|3R$(h{xAt&wHL9XRNlCpcJMUdn7ywY*5LrZB*-*RH3^^b zG-gdKF_Ri8;DlGBPlEH#|AQH;i-5mmq@;XGE0=(dZ{yHW@C7F+3h1Z`e&h=Q+%&Y= zz@ktzRv1|9l!9Gj*4?O2`yv^!Ij)_cRvv5AH_M4|9Ipif(0Xu9+Y2S~Q`DtB9`FJU zk<$c04q6NiofuTqXd2(sDW8i3@@iYm zC<^^jMfyA{C71#@P0qbIQpHdLMe9j{AO$3q0#WD(`+|r_klLAp7iK}Zh?qoZWfFp3zu>o~-=Jq@=3I@}xxCX;|os0YLa(4P@Q_A(Qo1DfX`xr?YV zQg{x3z&XC92sDw1|9;S^B=}TSj9QaILF{X(v(Qzl$xO#E-3hY?RzQ=QEKd3iy7BP1 zT5tzdM1r9W3;iO41o$~u@CnAHO^nb2QWQCRBL&H58ec@Z6tq-#_zU_X)X)8n-(=eT zO&9PKlC9zkN!tPoVi%ztj-SD@xYO5nQH&k|GsHVCb5()?S;_edQG0MzopG~?v@GiK z5Le6B!&H)b@e<#lNznX?#B>rGIog@c3TCZOukedo9V~OjOeyf!m9<%;jg{QsR8mEg zc2VK|=oTAs4s*@Ao*@O+WY57;y3gn|_PCHILOCVbwZV!4dNo)So?+s^V(74nql#9f zl&|YkR`8<{|DF1ZnMuaQ6v+G=AipVyHC4~13QS(hon#A+arjln{M9UujxUSVM{QL8 zAb>LP3#@1d)Z*2_8d`gC4l$rur#&}L6|-SWzub_>IGeS!dDI$fU>#Xi4$@!#HRUWZ zx24;<+?|>-!`cgTM*8ANp74hO))pJYxjk$Jfv~j;gPM9VThOS9fh)KXojYMcILFW_ zBhok849}>=6rGY?cbkI#EQLJf+b~RBdr&y5Xp&Nx+ryPY#XYI~s)zP{kEYQAG0WwF zV21$PLaYEwSPWE@1C^?MOlwt-Hc~+oJu<1&Ig0?)Gf{w0aR<)3Rk^SUd&rZrAQ>l- zliC#s|EwSbB%o!7h?>B~WyftAn}CVOv^xKV7NG3u!K5IL%_1vbc1swiW@rPF8h zz3{D$ysL+3&S(*}+hpuFQ3*!FZDpdX3B$$H>a_`zy017HGRES9qsqFUx+y(6<*7!c z`b;{MR9Srz)_4~VAlGqi zs0MM4)LqGMIWoJd%Fv#^HdcaI^@Vm22B+bCs_*2_HD?UQb&Od(H#l$Q{6R^S{R!$g3c?pZu;)&3-h3zF* z8{Qntp;qhgtWEAiPTji=q?%Et>h@-$a=N{zHD4HuLv_P9Ig!~=DY4DnXu|;8nY9NX z!{0tUY9l<2wT)J{{Tce!xON*s3k%#xsD=MTYcY`u!$n*PAZPWpiF0nbL0e~KDbv}j z1vDXmQyB@7%UoSD3UUZA$1RPL*f7)}-TypY5d~kNzVLn^g*@d%lPZaUz6-s}la6%I zq|VZfPNe7fF|}3RR+v)$nK8$3x1^YvDxcV8zKBp+=HjHWc4H4g{F(b>i<)6v{{us5 zod9ZPIScW0<}%YzHEBQmJtlQ@?>mnYJ13~Z`|k%l)jdGKkD}ff|L7RwmCAdGU+H{;a2rw3Zw!Pc}(ECv_WU z*1MKgmsnGIK|$3DEcP< zK;C8i4s}0YGbspGsDM6UC3I~^#)2i*DAYhx%deTarol4dC?Er1BZwtKRZv@A-HrGGQhpI8I5*BF!uakyolCsq}(X@rhq*1&8x-jmK1zm-Evxq$` z4i#jDTa8a6i*bk`X7c=bf^Udv&JVERW~oubh?s7mgNl@E5_aoua({`UcX}z*1aa;{ zpZ4;dH>s!8dAB37BYk>_7)V=?`BIP!oT{;uKl&tdyI&Vk;&iVcZQEk12^!NmfdJH6 zczd*;O|X|bxWBX`ErS;&1^C<#uPlRLPqIgGyVHV*wrdCfEY>*jWXSK7U>4>lhq1E( zl>$lnQV>y>W@(t#a*&|9BeltMlZfc>W{n<+CW%jZ35hl&$kWpyhOeEQw6cDMA2 zR$zyC8SuPjO1LKNzsU$z04vx!40f2W= zV#TTzsVxVkXelTqK@uqzB_xTEB#I`25DjvaLVy6fRw~<(Orm8}D^@2Nw)7}v69H1K zN^R*Vg&~1igrrIdBp|Rf+_d;)OygN)4v z?HslY&cZ(7#w4?)Emm9g`bLe4`Fc?aQLJO{?)^LX@Z!glFK_-l`t<6JD!|;n{rJX6 zpIS{yU%q3LQI6hUpR}YVwY0*8fB4Zi-hufYWngwi?T6n~C-o=ce?|3|AcPH4=%0m= zNg?2RjU_lC0T|Zz7=sa(XrYEHs+eGUB_$CSUK|=VVv9zlxFCze5#W^+Qlti!Eu3V? z*oiJW#^8ae!PLq@Hkx##ja6ECC6-xgxn-7BHO5_c|6mfp-DL#82UUHI;fJ4?WRB?_ zca4?#m`5IIK~Ec7oLL@sVt)B1ckTVj=9^UZiCLTEWhmxJQ4yM`QE}GSUQ|^{8YXIX zw&TiybBf0(nu``?=}~2Z`lqLasu<~~fTBs5P3%zSDW64wDwUXCzNuq<)mhb15@WD* zP(onYL&m5L`g&_paRRH*7VS_*<#~>Bc`dftYP&7BF-mD)kKnYLH?F(}q`4+!{rPCHiR~hganp`PjeOG(_I_$Bdhd9GWX@P{Ct;@b% zoi4Fc#uTnQ%_E(DH(F?^O7klG?jq@rJ~^4YupKK$NoSJXPHYfJsf|K%kiVU(=LuO9xWG%mAc34h-qpm^~0y8V?X zVgJitcM{~ljG4zIYI`6CGnl<~jA4S+)1YHKbwT)n%6#x+8uk*$xABY+JuRG>!(K=p z8J@>f*g{}=v_nG>^00@0i-Zqz7{nnGv4}X;cR$pXQ`Pz59FEXo)wNqn*p4YxMdQpy; zQPl(On8gyh>W+TIR1}-2$VHlGhw-VPcLew?4xtb{8G0ffBc{Olh$oRYq7oh@QFk6BN))vSUZn(B(@ZJL{{UL-TLxq#E^~<)OhU0RC5qA;^T@Z{S#5>N(qiAF zVnac$N^8wTlIxgdm+kDQSUxi&iyWytL)Na2AIx18qTtCbd96$~M4B_P^Rs0pPn(TW z&X2BR9R@~fe$Z2=6tgr=Zv9D@{`@C)=rIlgh>o6+G1v62bIaZB6G7og%}b!vP+9KI zT#|su(H06&^T-IJ8xn=w74nSe#KJh`rthni?p z@ngj}!V#-!8y^;V$X^*Nj@xx$CG&bE18%a3~6%C|H&*;mzc=7+aa$1~!6V94vep$-JdV!WQkA z08o|rkpK-uTBJY-Mo2~mm--1?7~#kk1Y!?c9E+}_@(?NN!724E>Al%e&TnkNidxiT zz}ziM6p-4ErC!HU{~b}OJ!12VR(LX$UQ*5&*x_Me79}=2xPOaKo%yxFqw|9Qj1ckhq0OnHNMQYsaKnNu8C687*W$=b4rJIQjKUtZ*hH=) zsW}=IEHY78|1?2tQHlwq2cm8p$QH;@=)i%l9rc((+-AHUCHlGEOC(hZKcdoBv@}d7 zo=GWoGgOZxwG0ks=3S8#%Cj0($U$mFqU?VO#Ei4|qKbKs9~#x(Y51DuTsDU(MaK<%he z&0&gHo9eNjTC0;vU%Tl4IygPnvNzy;NM(pI7O|OKA8LdYEqf%`9i&K&M*P7Ea^JR< zN@A9N{|E*%n==;DrYp&c_QxPq(kEf`0TbjuJrGh{x~BWN*M)_o1yfUALD-c7E9_w! zMrX4@89Ke@e{~p^p;EKdPM4xvv25&^>(e|*QohU;iB%KiSme$ZlPE}Dj)0qA`-zI_ zjrn^EkIPy@iohmzgImR0JN@bkF87uHN6kio6(e?ADb|g$O~w;KngfnY!5-IS9)*k^ zi`X6T6?_z!~Ii0v8BjkieD{*o0{m z|HLLtKyN4qeJ}*D<(0m%0y`|#1wjWvX@L~b1xJL~36er}wV=j93lMtYuY_1m&;`V` z!4ta07-R(z_RqhS2xg@a!%U5j;YG=%&5#rYY|&uT#bFT=04ET{1fS|a8R%k%_Ch>oZMlyJ!ekqBfdbOjmI<37q;JRwN0 z)x-0xQMl9?M~p#4${&L@WUsB%KJLa8VB|?4q&pDgP)-I-UZ1xmmG>-Kt34r5)FVs| z4X#Oxe}%@55t&!!%dQQFkZ{`p?c|EcNZ$B^O1O0Xf(g z8!nh6-bH6fm=M~8By3r$1so|jp%lo9@+q2`Wz}JXr*XEz6nF$=CDmv^R)*A+NCDYt zfn8k~6CPcK1W?3+u39OmrxJh!bRy`|DS<{5g_}*wevKz5kPK_W|KVin#M||TCd`~I zxWi7^S4oUQPO3$#=}E68l`V|UKCWnmuvJjC7igAg;PBD!L7w6HPXcwGKX5@@woE~? z%wDG7xFx4O+~rHK%scv};^kh3o)!bbq`9y|LpF%He26Rbg~lmfJtUTPL>Np;YH!qr zI+9Y2$sX;U$44Xq$+SXks6-c%nG#GvwM9g)W$9nAgHr7!r2QA3azP@Rs^qO(4)x^o z!CFQ{LhdD+M(mt+*dHtS<5ntwtPMz|cAt!dX#Ukl^DP*Z+@z~b!6qNSA(&dg|CMtXR{hn(u+C$;c&n4y zLT9;+M&5)yxGNVt>Op`EK|Y-F&8fR?fs|&}NMeQsnJLA}js+$F2I3dMCsElol+gkthMt z2;6>!1&Jj~Th^?I9c^1S9C(t#bN<&B)B*ua!4g2+fHi8#+{8-tMS%I(j%osp(3KL5 zfsai=i^}NdFvZ#8VSoAzM6H7_w1N|UMM=QbQskv;L|7Y4L8C4x%XtJwkO9pRfL}Q3 z&efJA{AcbhTSk!0P|X~tWC+_3uEG7?*SKP2$Vz2=|CloUO3jYLJ{oRgHRaHfM%$@` z6D9zVVjGFNAdEKIO0BL-_!qfpffhgqlp2Y04Q0B3=*kThMkJLhY=Q#(1dOC*c<4~Y zHm~Qjhw!A@rJ9GMk%B)+i#wD-;*BiJAO|V9&7#VtPtwKrwi*}wg~67DtleqotXeH> z*gm>oN#x$CsimS0Mmx$X$b^QIjYcm%1h8`I(3sjtrp9ZwLa>Nxg4KfE(C;y}f-4Ld zCp@YWB;xSF>L~aZ862YZ{@N=sAFfVeC&eVby43bXK|QqEAu3t}PJs2^=~_D8_WFiB zj9Z$dDv56IhBBu2;+i`wl>{6sWPBmGMr@|7|K;1QhXJ=*uT*3$s4!i?FWQ2RO88X3 ztW+zkFqclT1O$jJaI0qdT8$K>T(U+l^5YZIut(kxnL4i@94h_b{cyo84RBCzn_tF@-T0w=JTE!qhS z+A&3&J!L({7As}WQH@+5+Od-D#&fcQ1WYXfI3dKzV@7ap5I5%&F7l3I8$bebR9-|I zw~l@~&M!}uRw-SLy;Vy-C7zL}5+qd{fT+?zFR&0UlrWu%7H-VBg=Maqw4@8#D#6S_ zNtxW-*Mc#o1XJ{E=&ZC#rs*KK&ROji{{^1aBki^wmHvvR6o**uqiYOJ16C*7EOMbi z2c!|eAM1vL9;4;L*(qNM=DsmR0}g)@hPkXMc{~MU5ddTAgt4_-o)U;?ZNU`0qkjGZ3@gYcltc>yPk;k^TP;MT-8||@V+HZ8YAuk0q@~+a99#4Gq$tZ)rta!wEMHfw z6qManTbo_jCSVAf;2{JkQb@4?!QBcWxVuxlc(JxnDiGW)c%cy7-KDt0i#sjuP^=Vc zOuyNh*_e&_56`ilb*%fou5(<;_z35S>rU}+(LQYfAyrKFxNdxHQ`TDnD33s~nj2bm z$%SlgtsZ@XlRVpKq&eVUJ+Xar^smh+?^4H1MdP(#^^nxP^X098Gi)Ni0w1E z?JdH!5z-R2=Q%4Q?SNIg3Vn7~#dh1sJ;M6L^Q|Z%8Mj{M=$6%JE5UspzD?x?5FW$0`UqgTQjblg=GgHUt3}e%alcP_d1d+gG~6xGXCZwmn{b6 z->(^wKFEz{?^FJ1W7?KXousa(L7w4!xr!r_2*^S7kdc{*AMCBBH7SQTU=G??5HCH_ce#ahZj$ifnJh&7o+r zy)17!gThg1ac!Rzyn@|4Dt+tNRq}6@L@O@{VmvYJq^sYbu^68QlsER2k(QenF`%qN zrY2I6{zgt|p1mVD9oq`#aL6`URV1`Ad{Fd3vNL54GPuroz4mNSFb7AY_j|Zk0%7cH zILpH-wJ|Dv?6iiaY&|F}UNrM9n!pZDW98^$eU6W8%=x3RE{DW#TNpLwrQ;-ycEWcs zz3Yf(Sa>CNvozmGUd{N^#gykizQoy*Uhy3yzO$)}AZ9sgBBDO}>&Kjbgbd8%S(m>G zSC%K`BcJxcc-uPNM8c)w@qQA^7hJ0fd>N)a$F?$p#p$*)CF>&;F;=Bh1=Xmp^<=#y zO41+c$HuLse9yJL_m^G{jIi98u3JXdSz0H)wJ7`)AXYbzo8Q6JL5tu}aOcH>PT9cAwICpgek^0zye z^~BWBQ)s7pYsb$w6u6O4N6=TVBNSXh3f)z#Deo1Z75XN?@HN3`{23}b?f30euB%md zK2Z#vT%kfJIlNK?C6E74vpLX3zn8U`8UF>2JY`}c3e>BGZ~i}Prei&5eYPZ|YWYGM0s!P_E7jeC z03IuV6T!(2qX`r#Y;5+)j^hdRO|dZfx_NaVU6E?ia=BrJ7A=!2Bm3q4D4U)iO!H27 zv|r9FL9`Xf!-GbLxyt^RQ@nu{D$`o$hJX@%nOq zvT&4FIuS^WB6b%-CgUf&Hf86@3v6IRp2`{HTnTO_#1Z@@pl2PkwK(&%d;dFweLoR< z02*>{<2%7uVXt!?RsvejX2W;>5}RJ^EF@~xi!r_4bVGb!#W0<}YTQrm&Uwxk)y{S@ z#_{4)nzp?E`8Zny|I;-QHT+l2~;Ejlc*Enf#Z;pci!wOVx6DH&r<-GVir&T2@5Lq3;T;Ur+86Ei=D|ye(BOYgMY)VEx*)WSw|J zKx<7E@Q1cHsrJDr>TCPZ%O5tcCdX(u-*ki-*|PR8sIJ5aPMO*_-?>JqCoit3&ukOl zxdWnTWM}{5YEERE(Kv`PHOxGi6>7Y~DVnUt_)^zMr;^PPx553LJa;r_K(|k?U^WC@ z1=$~s_gM3*SC1=l3V^YDSJ18H(&SB(puTZ%RSGEDHEgV`8&ezIce};=>+QW zyyiI?>qGS)OKHh7qeRQsiZ<^f@g9TFL@v%!c?82Z3M9GgGL+X0$8SQq|DM&pSD0h8 zi2MP4mlWx37??2wAWXN@(uhEbz`!2F15sx&w)!^<=cQZ&gyy;te950$p~}hcGo7Qg zD{1LIse(6wr>_w%b|=I`yv$Qc@qAl0-i3LIDWe20O+;ee1D2o{ap$}(M`U<^h|{g} z6LoQ54{U1cG$Qa=EEy5~d&9zYAb9{1lRaJY={ASTI8$Z5aW=hP_%Y$aFe2 z7|H?@)W!zKiv#WWU(##;Wjz_Hd)4vBaKdKMQ zFqPSLU?a{n@*wzR?@Yx-&=B@%Lf^U^!O*59c-cRkI6|N8G3c|LVr9vJ= z>Ie|aE`f>WYlymKMgr5DqU>p;T-Wg9E6sZ7sVRxd$sT;M4wJtv!t(<)494tIp?VcZ zp{rX7T8(|oRa~x?^RwiD#(rp3?I<2iqfuh4U*UpqI)uD$sXbXlh@QS*L~V<|t#g6d z=Vh4e&9DyId9LO)&65B*eGmubsc4pt_8c@gd~!RA^O#IzG8<83JE+c=N@JV%nD z?PeC*IwDTX8FJ$w(WFfHvfV~j_QFqxdNUUT1jjZ-dp-e2L21R>E9Z#@&-C}NMM&)+ z!aC=hmC)}j@{;aUD;mu8{~YH?=#(N(*!G+;?}Q8MV>qXiAVLji2QPNB+|^nSCLoPt^^w>80?Uef0x^*cw*3k{oBKKYO%f;pXM`gA#kwB@m+YR}`7 z@%33EWox z>L*Zrz}kdu!ChC^HG3v?84IOH8XEJhE^UYzvssMBnE$pocvYB&7&&#nK*LguW3kf? zl>GcJuwfrNM_BdzdEHm+DFbWKq*cytMFpee|0v>#$KFcMg(oVw9uj_Lkk_4O90?Vu zx>t}DToBO*@rFGwZf7B`Be)(r?qn&?T%Fe7v7J}}`N6ckzw>_6oXzh25bvsz#5+Nk zNL@_&Fcc&GW$(4-7;;9T#6&H_6<_Q!6RwF{w`a8PpliaB^DmcPS(}1q!2+nV+tKCRhG5TCa>GBtN!;WyODG8H_ue(JH+)JeYY2lxgoXHLY={kR?yo6 ziOS6t7oF#2kNS7(O6ZLE165M51f$|B-2eeGMX_f5!%=?nDtXcMv7SUc0o6i!fDwlA zDTFlLW*P$?yfwEIYm$9B+VM(t`;O9tza2S)52Vf5rUYy@Jk(|f9Vjuw2r~Mp&&rv7 z_2#irT?q~qS*;yk&bnWORI+j2g+4E%Q3rKsxK*S)F57{>u3Osw_OhJiA6M(4AJd;&sHq zLP#8hgaoI6=phu}AwPYU`WIakdhjqFa>`oILUw(1{@t!*B?GyltiWMhs5D|fCIsqe z?q?P2eSEmrFM?+Jolm2z`L40z6eZx>c_IL|7rYpM{@`~k%9gmW-rF?YKe&JV*;=E^ zQj=Q!+aHL#((mymZo7iUDP~GE*>P`^r7dWx1R9zMbFL*TWWhC6u5q636;lV8R^Vk$ zH;n~3J9*+_@&t-`C8r`tqrE_!$D+hj&}O9)LL@*Snoz4o0$WQ|qk&s!bCR3LLay0W zuDDf?|HLx3pO{5co>*=>RHnIy-#KwKYnyz0`W}NrrWIGC9!}WemF$G2vA+21Sq|Sn zraI~EwZ_vok7p8NS+d?wsgA`NBN@4KF;q@saUUnQ2roU17TX+adKHYkV9Yc||9bt2;DaW4%^qK5hT zXF1Br+2T=U0j4b{p&p>x`!bq5#PTCO*xP&>OWXo(EWBr&lM5irh{QSRef;<2x6Oa; zzg?@bgRFKtzi*DWi-TC`COSFLRMg%$mt{4WQC8R8-;{kW#hcfzYM1ZLToImOy&pJ%F|&UB+EVxx{MN~I?$v0PygXP89xjCCBfV6&viLN6Uoa&F$L$hw9 zK?swHYib(U(~@sU4#N_Rd&@^{|Fj$79EdBj;Txmf*{gxqxrzvfGkMXzJMiVoYVBT+ zcSH3Uv=EKNUMW^jeM2Jw2RWYFN+>2s(rui% z)dqmgn_i!VyI0Jse?u8pu;~<&u?JThV<#_^SA2Xxl`+((Xn(PoA9;~%HrrfPLcPEF z**VBKm+P5SajCla<(vPN>J~$r)&G5%1(v-WSpeV&xcSgGY%!W83e2Bk12Od>1O`#J z*Hkgas3Uf{Sam@UsQkz3ws=n8#XoqkG`qL{op}su+Vd3o9`A6{I@DHJh0l>7u(n#Mg_<&qIwz*xt= zrLiA7Q}ZAr)IUUY)b1y1uQGZ!R)X^+FLwCRq_;JFi$X@&RW}kGX?a*Yo8oWqS(0;b2t-0X z``^Vb2cTv9UGY7Va}?=H4ba9kWY> z0`l(%0^dzqWTw!p2ium^PjAl@VB&c7DtgMtJaY1~2jXFk4!k(nt+h%E$ zDh2N(V?IcxHLa*{BQmvWq{jAbl-ZaM$*rmqej+b9;qP1b3Ee)|8J+(sTLqVzdLQ~w zp6(6?SC~fh>=4d^wk}%#Ov`zi!p|eL5Phhp(fg*(=UN{XO*G9ss2{t%&0}biM6TRn zxcj^NKNZvOLQObUJ=$gO4YH4eX}Dfc%N4?V7Un!*@0idg*FSyRe3|a>z<1dN5E_|4m&$G8NMrg7=N|wLgIBX^dM%FqdwHh zi~UqmK5$pg6hDnoS4nG*3Mxz?8856mCk)33U?kc)p~ zVAv)HupMtb1<#7j?KC1Ac>YBGUS+DXKRGpeofNs zu1=vsUsgU{M;=VYG5LLD?Y>A=yn3}{XVi>yO3VhmL|9SG>R@&Ld-0kL6rx0L#cDSU z_@T~jQ^Tj2*|yxy_uwf^$UVGP{LCbv+o}jIQZ-ABEO0j;)>y#WO^7QI*R<|#M~a9V z@15x8fL?o&DXFnmUyBm{QBnTEc~DMmk5*)qv#TBqpC;Z4%zy}>o>T1` zRM6TMA8raT%TM0?c#F%^Gg9((XM2W^AN?}(!9EHS9-@d3TqN#{8&N`YeKGy}%#Ljg zT*vJ7#vqOCjUn@9(qF#g@78DNCVCaUyf3^rvIGPpVed=SHniT`lxf^k`a$5%SeCl$ z?GM(6V>gNPEpr|-#X)b`gQ4OJI6H1NQET&2vBGL~4=W?O)z5v<$`yekS+a)jAmT^B z$Gd@}`dWR+O?QROCDlh?YpX|V8Mnz<-ByqKW^=`_#;t!;F9nmt;C+?#nM$S$VRUoo zR>S(_A4i6eeEz-%2z}`(qGI~hzDrKDK+>Pou>K2Wz%%3XnBWoazVL#ru}W>eNJ~(W z-Me=Q@Yjoj83}he#-`CSm9?Gi=o)VH{e4C_`R)uA;2`fI^wfIr>dVQ2y&99VcTJVA zgv90|XSn6lzrD8`w}j@JI@gyP3hI$^+MfZq=pcC@faH;ks=T@anwW+hMSPjB5JpbM zp{MFPt{6@wt&H&z1XjFqz<5<2)@>mpxk#|24{#;w3giC?^ACpMDE!N+-fE5t7wHDG zuv@x2YK;AtPnmvfIXVwF2-Ppq_RFkiH>$Agc=P8?B5b+NVLVGVMyzVJ$$gCjCyOl@ zV_aGOK5n{sXRXub^6G4CrpCMg$hW$F(^6p28weE9woDTUHa;T;g~zsS?o1Gh`~H<# z5IUSG)X0|ekP1>Dz)vP!h?Z(TU9kqLMh3oxi<2r4L`^k`V{`js3|uB#>{C2 zVU3Tpi|(r1f8<76PHZ15G^J`Egtr)JAD<^mi&5YNHCZS0R-wM=DuKc_4bfUZb`(_X zTGqqWJilY(bzilty`&O#aZGo$O3zETi-$wpxTzLcvVw}*wv3n&BTK=$l9DAl`C0@A z&jXS(?K0ky({6o2lY^4Hf|=$`15SV~&iM@8jvQD@QL`^jMrMzSat^Hm64P>Kqo&_j zf=+$#JQIdR8gdC9g@rL*PPhcSG2g0kI09>-yKeBYJ1aL9rJ=dSTYQ-FKt)$#MM zoww?TSxy(=mr2m7WyPN6s>XVy3|nKAo+@4ocD@@3T&7aRm-wY;Fv*cW$aR}o-`mCf zVcjv0CE?>&r`f^O0q9yXGFV|^50&fKUbXN8Jm5K86-;`aL;R)PUX&zfaGvU_-S z3jsN%8TfjtI90}*izm5y`(KJhM$KRRF^ekjAro`0tXtIAOP=2b(d%n&)ks%OoYM4} z=8T$D(>*3TTen@&QkSii=qxjPqFXax^yz z2ZNPUlBTN*yadA3< zk(wqzut*^$Bm68lmwLqi%cR0Xnj;KSccLkI~~(j?ni6mhBDxXvI8b!$SN zu*wrBB~x{jO*|G?vz9&W4FeX&(qyk~LTzAR5JwGD_hz16vwU>W{l#MluPJz_XTTT( zd+~?Io?gjmNaUe>PRpg-?ex<>NM+@e zK1r&KGY`;;#&t=P5k%YwH)t-@8KO#sEOJK%LCI`*d}be6iBg8Iot6y;89e<2`Y!zo z`*F`oT0nr^6gj|2pq-}ROjofEOS(c$Cc%80Si*i}(e%8UuCv5cM(_yD3alt8 z_@<5;e=T+uAxP_eJ%Rh>GjCgGi2x7KoGf-@^LdQEpEgPMvYN<;l`Jg0-d8Wu-eNeD z&%rpJI@&djZK$^1mHcIcaXJ0-r#$e7peE=!7XjxOrLxd(nqo7Isz>6CX5-*;S7KZo}O$4$gy-NyYdSKVF)r;Pcw~Ffx9}HD-MkgY(#Nae0zSBy+-% zqrF%jr#zR>p8TH+c^9+C7l0VQV`9+gcA;39{D!HwJA3<1I{N*AqVju&Fw>xk=z4r-vy+{1%E0F@DnS(7e6Ha+^;8LNQjW4&Rdk+d#wNa|$TABoCE4~DBUL3$!OaplA z%2BGXsoKUBCB852uhMubP&0^p+%TPS`BFT=yyy3b6Ik3}P#<8?gl72s=^-Bb2e}dJ z?vTciKVgq?*-CtRBhoN^-%AK4H9suAFn-i9E<%4JK9wf)nHcp))Bk)UsQz0j zCV%tILHNe$bpK0U@#`4UAA=+vz|V=2(WozMZ5UD*)F@_9Fk@f^mOI*`PAdQP!Mcc* zUJ3f)gNwWDf-kLt=1G!Mmp5B{-bMoTRD`;uD!HF)WYV|oT`l*IXZnB(z?uq#;5eVfB9iATl2 zlr>4Uu{cZa+ac}S^A!wWeADNHvT0Z|sFZ^ViD$Y(gnu;K-mv;w6Z6QEl ziqY3j4>1{Gum}%}-Elk~W|2y^&6<`kng*Rt`%<@txhykO6^C00i`kX&qkNi~1nM)k~xFN(+FIoZsix-NnaOPg@i@vsdQ^WNT)1b;ZfQ%W2eOScj z%kYosx?_KH7!#TtgUCR?p^hCsbd`vVMf*fA7MhI{#}OThe4>q$oDExuj1yaqT2bZb zKa3!^7r;ca@7#sS8pPf!vQPKMtkcEDjKrg_V!v@EWEaI=n?9LzPPordR#c7q$px!B zOuz-2%Nqp)B%ge7P6U?4^pqyT(1~Qgq(24;R8g#Vs!6nJ(NeZBx-uAFU((~Kr)$K? zkgLQeF3DHh@tkVOq-Dv70AA{&PXR$2d_b(q-KEE=e+@th_*sV%ZaV zRm`AXvPv071dyVk#_;qAqj$t&&XwA~m1Go^Dhx|DYkPQ%q?dpJB7cYn5sapeXCyn` zW2}$Zi9*u8En_@ZM5|3h=WW?*og%#GW5uJ=OY&0!kJ8Vc$9!;kq()Dr8}$hAuVg+T zJqn&NQkoH$NgsN|eMy|@ahH}l3Z=c`yNL*;0EcGRWoE3z7{aqYdZ%8`N}0BG(X8X3RhBbD3wVFxRxonosQO6Pi?CFY+to=Mk# zAKbrS{x?WPTa>avIFQ@`JroHA;vu>t!r%BhVHy=%1O+4&GN(r0rL;&G{MfaU>sp#lRt|j^ki)c~ zB)RZ5*hoi75X5|d;8y*RK_$x&ieefAGqPJbB;r6(vXoNMa--PHBY{1%6q`2#Aehcv z09R$lDA!lyR+lha*Z&?Mt#JKPOr0m^2|;qLY@=O}pq z#P*eR{dr)7dUPQW{T_mzm-3|rACXBsl|N8_vB>ChBt5ky38hlGqe6_UE8b4nV%Cdl zms(>%kyXc+r-^*#x)i>9uhehU*n2Caf2uT3t9*H-nfx5m*DeXJB>**Q09Z3~)R`{*hs$#^bSAq$I58x;;SAAI40@2K;Itw@4l!vv2meIB=z*3w$4?>6qQXph`z zJWa|~sL;yhZXxm)<}&ck>sQmkI8-(2e4}>9F{bFcRl)B8UMLEDdSk1eSodAmw|>!F zQP75shIzL@{;iY^ZaPlCd8J--Wv*`nZLsH(aOHP->`Rh26w&RD_3mHTaI-fxsV{tr zs0sKFs(SZC02oV|1EVV^1E~f<$wB?B@d;&Lr64R)A;n|_3DM) zrrCI)oWdlLALe}`K3#p%>v^bbTI6MxCV0FnYvVb-jg$$jpejV-M+jR6lD)f7R?iZeP-qZ=j2>wRg>AuQehK>RD zB&UhgM#cCUMN-X=a-Wvg^QUx9z-T8$o(k+)QXBf;1bAzz&=su-{wW>!Q=Ig+v%MsM zvJH*@7i>u#ElAGF1H(n>_?4^+_05Y&1H7qiZ`%Q(J_LdBly?=QfnMH@jW5!WVs-d` z$7=Ad^%dB1Nau!shd|I=UL{Q| z#T;}knw4lKu4u3E$@2ZFmoXVKch6GRE!P`ZVti!ELo`*==(S+net?nd-)80GlVB+q zCvWT5AYs#aqukhO4tO^W)3~2mv`n!2lcbWE8;DuRL1*+ro~tFk-enBrek?Zn`7tSy1V6i2kDb+r^}~ z)F6*4w8x4x{nGWRW42Z1E3)nu7D}Wr+gW|Y;Ygwa@rs`r^wTgKeca?W7auP1s(t-Z ztqh{yOwf&$Q!{C?W-D6<5#7QhmN8idnr4i%HJz}EU`Igya`5SG(4>KB^L@DnBQsvR z`2#Q;Lu5i>aqXRC8_V^^;G00!!~BpedI3QYoR*$dP+JZ6i$(u(l?-7^=!eDM>#poI z;xj^|h7UG7ub4h*iRjHHl>S*AR;;&^;-2!5@z;|+G5vZew4#t*NTgTN%}8aep|6+i z%}}6Eq#)=9U~I*W+TMC>DQKy(MM87~8SDge@kJ0S?Bt5C)0}gUY~b? z#UG5EWXzpXshG2cb_D|M=$zCymFou7JZvmk4m5jq-5XOhd7Jm@t7w;dH_dZRzwFBy zT&Oh(fDTSTAA4$UDZQYJl>%v0OGfp%=iF^wz3EUSM0NxuC_rQs&buVO`DQT4Nka!k z2&fP&|EL|dXFAadd|F6Q^9#u#rdW6(l7;t`Rx|2Als5Jp!Sh`q7pjn-B2({5hceW$ z4^nh%$Y%`IvEDoD?c3qycBXP$l|u`0U)NGe6YTe?aX38>8L0S(XT0t+$|>@B(t)RG z7er<>f`_Xx zT(k6s%ao|Omodw^GfmU%=4VDE4j1k5fl4qZu;z&fCO=Raw}W&}ymC|L^(*M9l#^n%}{LY$wl@fZlct4ZNg$hk*psY?ji)fN-KjA_U9e<3Oy)@kvT z`-ev{znw9$t$ZuBTYHgMpoZMAANJcX{xbl@aO=~|mY!3(wtou&n=<#c37j#}3Yf}+W79Kx%BqfIS z^dj(=S61tlqWeRLirA9CGuwkP4a!@9lLbBl5n5wO)z-Zd5W@WXN`DhFTZhoAa=|d|J4A%!x z>*k@xklNtlc~{y7feyI(;r@DU+ZX&9+M}_T>Py&lG_Y{Kd{{~Clr4HqHHk$^ohQ&j zV#Urx67c0sbu((&Atn{S`?~}emjuT>guu1w#le@2U#~B=1{GiOJg`QeTplgdJpat} zM}eJoqq*p<9~NJYpOctfzWAbdUv&iy)B3pu;8JsSaSUOzgoR+WPF)TZ_?+7jK>bx0 zC14VBwq1yxYqmT#uJKrv~bL# zyDEI8%9dj2Gx~(bE>4ZB0OO+$7^}E~B`eoCrbN5fMUZv_+#Gv|u?=KHuU@6(Nxo`! zo?;HiPA6kBRO`aD*+VPCQl}e!pH34I8D!0{z`Vkuc&)^FAAptJMZ zeM$E4w0`{U>(oa76IT7#;(z^j`jy|`n^p~Q`838MU)&bx>qx&j?APcpI*xMs8+h?U zOZwNv__Nvj!s@u+ugyPwh<woq+1`y%i?sSlyhaTsSQ>waHHxwgy#s4XyTQA;MCINuu8UZ~D6Vw2JacsQ#`cah_t?099g&<`@P1z6&X&l<-yU$x#~e zGc5-JM%VT$2Y>Z2YKoNQ#uS zAGIyZgd$R9#`3YX1X?IwK$Z=Gv~I|>pZ0w8D?{#stBmd>nL_hnDdVVBdmbWhCH8_^ zB3yHY1=l1Li2w4quE(JQaTAKO+iqa);Y}&=Zb9I_o`zn8Ej1pe82Us34K>w^VUH~> z3;exfL!~mQk_?gXU{Qq>CVt}Y!X(Dd74w#*j|`3qaX{`mcMXlc zpq^_|#q=Se#rTNd!!n_gY1+BF(1-l}aK`4%0sb--+Khz?VWKDHdQ7g%qUPYXh^_-H z2Q2LCe5m+Kh1d|)A|13{I-hFgi2Q>KhU;*G+1~ZsPzsDCqZz2^0fCaH%mp1sRY6E9 z$~m7@lXTrht{*cfo@jhsfdA{yF(Cd}^Ewl{KQDnK8GF*{B&aAkQ$LfeXH#Ps)-}Tc z0S7t)T2Oy9S)?-fFDoAWw{JSQgwBp=4bG#gN2smoKvJ-b1~V$|I9rVkIxHgrSg$fN zUp2Gp3N^jxVS^$@71fVY8Ei6xw1La}j$k(>=~l0TH>cqRP4y(%=YS{FHFpvL@DOJ) z1&~ODq@6trfh))dE~NQjOCnOQ!hqixh1Ji8cwAHHvoj9b{ta*+8i-WC0#q}=OJBau zLZ|IJG7&7GA?I&mb5@HQLOKUDnj>iy?fMqP9*Q_+y~EzloFtPua;a2P>IUT3FI*BP z&?H_OBdUv%=ddX1ojpL>R1s?`rBf#!OigDZ)kUL215ijzt|qdTAidPbypyVjbnOM2 zOq(gAi(w*9$IsqRPI>Cr8aQOlfezW!fg*v^E@!=T!w#AD*s!TD?hOup2@7LsYRG5I zp|J2uzeO32r7mS}S{0N@RSv$?Dta1N(oo1p-#GiNS6Xysrf`F4`;GVj>hn# zNk>9V5Np#Dk%!ycIJ(^~{i$6H&7Z`1-3s??M95ks;X=S{sQ+WcW;9OVBRnOf2pl^L z2mN#As%9K0k`4wJjn1*@lqCJHZjw3GwvhX_N?NzsOP|BTm9MjEmWc|NNIZg>VyM*c z3->p3vjzGxDa?<(@G`ngi8QIa>c=ko;)R}t8>G#EHMi%;0T`sZKvI{mJ7{)8#m3cMz11#8gIw=t1An2W268Kb5 zj6*N)!7SB7FClel-{$F5{i2<=zVURw*f5o9CeX`aYB;g%UT4(+;q!@=H3UeU6cClP zb|-bHPibe-UVT-L=SIx9g`XD*Ah1o;_X4IS%2-rT2I{7LF0X043R8>e#LMO@2>|sA z#KtX`zbOsVx}b=VPx08PpW_DC=|gpXiPrZ)3-G`LHUwmn4K*O3kFyxyh=|fX!n~F8 zGXR>mS*}mX`}ZWjFRO2=gR^6lMBpd}*Q~yMB(XawcB8b*zOF&YlulR=9eGJ@5>&kb z3+s@ms-&tCTW-)R?OgZ5JX*tu&B-PO^cL8J#P|cHPa4|2Bo6!;*fl7>YQQ^^q<=j$ z2wd4mh(XGu#@hzkW4PD)9n50YqR6>*0f81z)2V4NfuDuo-2WJ2)wgh-Sk}EaN+Wtq z|8}E=OvRpgNpBu90JvnnMB)c>5fCbnPMIovw-aNCqU?^Trp@o+R|9C%@jpueuqCG0 zFjBHq3Qkx=Uq9mi3>S#DA)u)%jlz-p6ciU9i7xUb^7t)1ggcDrNfoyzDt!_)V1XlT zE0a$-^jWu$)Pca##N=F%qBXXqYj-u_uF8e-l3sM$i$2 zO!5L&2qiURlnJ>ziVP@|QgB)r6I(JwpBF@7G9ncVs#&QhL5wLj)Wd3RQXQ5!`8Hv= zZKNN#!iIm*B%KVhTLvYuXjY?GUt~`PQDNg#8i#$TbEW}WUMb5L+&4QC3(;A)3RF|2 zLQ}+X#M9s`uMFE1vK|R2QE$DqOxpb%xNAAmW4B20t%Qmc1YXM%@!$vI#;&>T=<zd*gP#;BU zaYge7l0*>a3U?$PaKm>*L~3AReHML@nRRDRT0-+89ip-t)Z5AI`}A}bOk$!tVPPe~ zxwQ}sq>?|`tDekJ?{kQ76CB>NTOMfEp%?i`-(NxWcMQ$axlp}LN`TWbYEOyVUhBn-4J*9k8USoZa8Qd7g+>`kShA368PHT&ao2_}BtHKELV#D%9P(Q7^ zk1?;(BDK1zw_~z|dA=14!yiH^(2FV#D$EZyFgKd>Ib#*6GBLOx`*vse_H5}Uh@<#& ziL0!{DAOcZb~#?(IMk5>ZDkrkM(6Wx`SMOIs%qI_>K63qi%%*Xp(+L-VuWDkKIy0|b02Pp}Rc)Hr%UU!R zWi?u@HDs7Kzq4qKTPr6v{pM%U*0t6u%HFwQ(S2s|`Hw{pnPo4NWgo(_l9Hfb%d$BY zPjA&|@ZEZ87|uwJWr@=I5R>uPq-DAm!Q`1`trp&YWL6~v1T%<@$vEP6QL6kqH>tmy77DoVKsrA{0_4(PCPeA?RR$2{FiO4NSfp4;3quTLrte$x_pbNa7-NyYZ z{II^S`dWO9j_G;!YvbA9vu6)`@f?xFoc~_%$cX>9q>P7yhr^qVBY=a8r}@7nWupJL zq%6!a;w*@S#IqFnbm8X=@O+9 zj;>Wd+xZ%!VJF$Ompikq76;W`znag#b_V|<*M58F)vYehQF?DKdA&DPK>J?XO6ull zvBLiA`>u{x-&Xp4A0D)=W$rHb#|xf)=smx_-BB@0;uLamB+`^&rIkb&nK;Lc2vnET}g>%MpZHIH! zmtv#%(w4Ci!quufF`|9`1+fyhBRdIj0KI)8iri&4UI`XZ7^iu>>=3W}Gh;VJpYLcl zRS#6Qn`Y>`vWGD>9(ByHP6j%q+1xs8Ww|#W?Pq%p!4E$AExH`!`0tk;zFeuNP%%z2%0Fi$dsR_$UAc{3}W+D*TK z`G)h@WsLvx<4cRmUY2*!7aCVXjkRhN{o~K8fNf2dkSxv3O$EJqOla5Y?V~yEA3p~u zo7fAabGpXav#-kFFWz{l4|vWCc#uZ@Ty6SRJ%8dMO9Js#5ZCzq9IXFVMnqLzWjzs+ zT#Hn%)pM^KrPH2s;MY_YN9Zl(s4EODpePa>yMCg(8fTv5cZnfyUs;+g(!nR2P4%7Y zq82PvAL_n0Q^VI-=ilkXR5TLUuB*#B9-f@xbkEO)gSQDEh2g*Fyp&k4WoBy~3;p)L z0Czx$zn!^5hDIU9=ztGU4?-Sop-JBnApQC#AUCwDyNEudt>Hnlj;Q7yD{yb`+X5eZ z%L7#?h3gV*Y&b#fnx6Sam8(3E@!0R)dD|1k9;nA41OI&4e zgh#5Vjkwh;%~0=h2D^zCNWn{iK(h_RoK-@kFbN5Afj3cz1m>Ejy)HI|i%;{~ zziycS&Vn?tAm)SR78nW8q(vYS&V*jqV%M=3N+1e|voTW&52~j za$*1u(ga^Q$U(z)*0WP)s(Cki57hhV6SPHFdS&Ca(-#*f}wCq6Va)`Uw zrrhMX2q~-<6nsIXEpN&STKc4 zDiuhZ?L624*!dm;kt$6KlIh|8uO4%rGoeLluN|g(0CL2T3T?58QlR=G1B>FAahNYL zhk0;e-a^&3(6?T1VamVG-pci*wX`8zz13P z+%lAcw*2CsI}S1h0N&B)^7ES=kvmIYa?yl+cDX%h?h!bqJ<shTNF3qb_v^mXbS?LLryIFoLN{0- zWvJVsw7`y(`y$f>i9!?-|8@@&N&y^qgGh_V@m1q;#g4WGC;UYYwU_vXL;tzmqik;6 zL)!6?FH96VYI^>OROmz}d5Lj5kOB&13D+A4EBfyE<@zKEn{d4Uyv+Ky>v6}sXbMV9~EDOc1s{GQV$VmTu=ri6B7g#R_JXRl3JWJ49$?fK^y{5CP>6zqC@QRtjD? z5&h(7$yG#P1Z4n~T7-62ghotSfJuSZ3bW@Erj>HFkcegfBL(qAa~#5Ltw0J;=n4Wf z5ab{~ZRm5G2Zxtt53Xeku26(T*i>VaRbjMOJ-1R|}=1j|_A=IW2vbS!@b48%%h-#HTQWShh zB@lNs0K?@tQgk|Q=Z6C5b5nypg(L+eWDkO6cb>-(;bwgUfqey$b6hY5=m=iWFh&$Kh7?@HIgg04Th!f%FH`eG+v z2t$DY6k-8JlkGrwpHh*ACpq+Dc1zPiSI%(7j$dpFx zFpyF-MEo*OfFndUs9+QJTpocr1L25vNg`r5RKhqE`T|;{kVz}0RzI-{^}q!h@?47L zG=;cU#NvDkad~qkHluJ?{Ih|ogLjHmQt(%qW{41)fLFxyRt=;Hh~#Anm5Bu*bqfK4 z4KW3wSDF)KXO-xb1Mpn7Kxk)%nLk8$6!?h^8nlK8%_(Na+riJpeG2jAPbBGZ2KniW3OODuJ$(1z; zcxFKKc>)w$q+kyQ@DE!3A#K`g|$ zJ=(`O8o58y_n;i8Lmn!3K4D1(!2uj&c!^YJ58*FqI(_~l}xLXqXpqSqPYd65KC0BE&79|W22B7rcLuA z5o{!(L*Wi&DxIl!U=_zv&lG?eVVZ$u5D{n#mx@q&xi~@C4j@HI0uc!V5r7!73A1#5 zx#~|vG>u?s5L%E>NT^b`Fon~35KqTa6R1+rSF^B}9 zA#sNbgRY`V6gh!8&O~@T`E>dJ16sZ0ag$a`yt1CK);|uPgZh^ zgq?V55aBfioUn6Klc@vX4u(~ic{3=jNMTZhIk8ic&e*5H#J4^R8cmk~rxu&ADiFkI zuj+(AFjwB?!1d(Gy zlK}QuJaB420ktKef)>>w{V)IeZbcIdJI13&_F z6FcO@U6V9aXb<}TYcH2}ZdTkzv3b!(JWO4I9_2-DHs82wZPE#DFBMOi= ztsR0ftFr|Zl{jRueN$+@4pVw~vJOQM^2a~r;pg|GKTknNPuF$j{ zI}j9iNAOcyh+GiP5>9XI^+nNc%ppMog1%%_~)^l?xGvQU=Ec zTJ2z1owqKv z+c+6UX`&YYCt~_mdJE)bqwr3IA^}5Lm20|QuLM7?S9~{jT-)5HjB{*Y)MF69ii|@z6w9a1skePQCrbk*5XR+)*~P^-I6k$Kdr4+TF`fut$}`)P7-jY zZRUaWG773DQYp1|;#kC_?QtRn+H}@tgr>DoS=sh*53i~^q5TUFIYhBaRdNPp@RNz3 zRSP@+_pv*7LOv%n_bSjUwcYfRpTr~zhk2W#H~~sLd{Fg<1#w7b#RZnMKO;P_Q5FgE z(-0bXT&%jSM+a5zONA8KpHP*aVnwO8u#bo44~$)w?*xh07HR@SFXQyz1E8f|n5?VQ ziGDVF8}5g1h{@&3i3!`E<}EZQXKsJBR#jS`p=AqfurVgY3T6mpgSC9-y;b~jT>pU3 zcTFpO3{6UzKY&<&>$o*gn6oJdqH!imXqs|tkT0)9c)Hw_NE~Nz^vZeqN)m)tXGVSz zpoOy34k1PcO-W-+Nz^BFW<;$(4{bc5^@Ih6JwleO@Dq9$LwBwaUr z3&GzrbgagD5aD(s&htFirHY5z#3dznBE!JXC}!6YoQbGxiXglWTueA2CT2 zkxT_>Kx)r1--uMB7BJ#PQ$b05%M!0>AMr3DHQyX^E5(hxKE)qMH%nN^s- z`I_JPp#S-vANr&(`lWyRrl0zy&-tp~`mB%onIHPBk5?a&#p{edx}mke9+4AqJ8+>s zBVkkY5Xv9{{10R;L}kAOH3*|G>!3q9_qq)rbHwV1N{X1q~iV zm{8$Dh7BD)gcwocM2Z!+u&TvnLPd@pJxY{Ruho{1B~6}0nNsCSiBiVYv(>6qDOdK| zY?06~r@)*E2JBQQg`hy6MF$u~dQ@rBq(qk%^y$>7(+E$QDykFv8+&ix$pNiuPv7dD6${?)_3QR%=#WU!@ z$QD{~00p``XhIMz+|IxV8xpan1{ut-L5D=-s6eF>>@Y5bSj29;g`~q#As9ajuCKtV z(lEaFlH;);6Myu{$Q}oTGBcovONcimul%ecDt%{`+8^tcWOt;ooggv@dOJC2?d$k2(vL+Hmh6~fRn z1{sC#K}1u+bUu}gbhIQ%!`m=amJBnMq39e8wAIr(H3?RSo|M(q+wO!c30y0xm7-nQ z>(y3ahb7iS7sq_)M&@@FDPm<<`;KoLueLoNA2#T8B_Y*Dq>qbdXlf`uY&ObN4;AScO@Nb575G9dRHn z72CwugBqr-UW+026X1=lb%@T1;3B1BEicA0HI7kQnG8}4>NDaj^K4b*-5g$dVVxC9 zA^~-Kjy76SDQdFk2I-p&=yiQ=_Muibq!8$IeWs}Y(tUv*KxpOM#ae3)1&V@cqrtr{ zD|VIkdfO18`q}3X8|}Jkihhn!=C!9jn`)GT^GN};srK6ErKde@LA0g)_ehBH271(; zA8$ygEu@%y3tcyhLJQ_9N}_VgrKpu8iPrUe^3-$%9a+iKW+(|QJ~w^t*EOF!XOGwt zigG3B6pFLlH$(lc+B@r9iq|K94R_mxTODJQB>!9r)*+|fA$!Vr`k=S7Et~tnd~-_) z_cnES08+A_!sEy4F{q8B-!m-ncdxARL6}D=LyGOU54X9h_~*;dq_a6yT}c9@u!TJm zD3F5bNFZ8Z#{gO}iUGLdQ9ELlL12Qwg1l}26J?l!x3Ho(ge|LoQ5eNdK2$#nrR-kz z%TZ-~F@RC9j}rh?+d|Ga05=H4F&eZ5Nq(p(=m@P{0CN<-j;NFba^YC%TG#j*d zgB8`oB1P;WL3=!HBLsvYtf)kgEpkaA?I1%zHUcv6xJBI0c>Ftq+o?DN)Z&46(kZ@6o^PVvzL1yBzqZCjhzk>nk)rtN(ezA z`zSboG@8bV3(x-EEe-v zryRf_#U(8w2@O&yYvG&n;>@*WEiV!O+yWrWz!|O7Vib^kTZgvSu62>fnPa0L47C8w zyM2w15G3M2Oh?VQOp_;|1CEmX_^+3>VhpEQ=RtC z5J)MxXUr^K#1~T-O&bQ9wRK6aoCq~)A7Ascq#lF|MOBx?;>6Ubu7wq@-~uNUsZ5sK zB@$gE!zk>bQ>jwbKuSexLC`8a;wUu=mn_&?Uuo7ps#OYaBm-14l!RR#Rjp7>7e%0| z*FTCRm8IA~XS7fYcW|K;|G=gHK`f{QzxfrRgY{ZcjfxPe3WO9|F{?r3x~|P>mTm>v zggt7piCVORtc#OiMWS$3mu*$FeSM`qP0Po1jlvde_}N|Lx>vRaZz!1EtSdDuS_!zI&%yn!A~mtmMuSG>9%tr&_Fe3Qu0kn)GUj3r^n1R7r}k_$o`Lp$VHTlUS# z)iH5J>|BSyW~*@^*Oti?fKre1y&5JsDP#@V=MK`Wk`?AI#U#l(aH?K-2QkqCpOaP0dRs0 zquHqW%x#alq+AoVu%!ZBVGEOGvlgNg_Pghp@?EFem`HmM3ZdQxqyKuQl_A3>T;_9R zLa^3|L?dtB{X<9ycj*K`f8?VH)q710Z|a)j9x8jA4f@Y_nxJ%nGh9#5V#b ze4|%+8dPonE^UGj@TNcGYL~5eBsEsMWp-Hi0l;+bNtXhLU32*4ghnF;DU^iRLWnM!1TL_JT1cHwTPJ_`lQiOuO%REh zdZSX%LPf;DomnRfLMa$?J(sZ{wYsAGA(4WZID~LQE)cOKc!@Ru!w1<5e@l-7LbZ#M zpz%Vl0f@Eujm)fBJ zdrX{3Vke5o0tf-48i^qB60uKArh>r6=qreU`o0oNI~O|=DOi@h03diGi6mIDG-{w| zszoe1D1}(0Mq)Obi#4Zup_$o8Bp?YM^r*j2c)2xNi_33$Xd(3M2e!cS|Yo%A|LT1M`=qVF@LcRL9GdqAde z=}Cm}hXg{-E~?FVdYJg5sf73t5vrnJP#}Bo1qJ%Y+x!p;qR!;}z5!r0EvU9<6bO0< zmo{_-PB5e-)JG7xGRMSD%VH11_#&J-hy=P$2h(wr5fw)mJkgoxl0v9yPw@S&>GM_C- zJ0e}qg&>1mT8P@4L`c#SeY1rb)em>@A%t*6A$`*GQi2K41b-+Et{Vvd7vv+T&;m$$ zQYYPlnL+|CL7`Ug1@8iold}gbmCRsb13O8=A$8ISBn5w{PT}M#v`j2ytD}M#PU?C! zDJX?@AcYBC(M%Q30oVk;Nf%FjI%CV16)S@uB2^57qO?i0i+P&MC^4a!7v$hE-(m+# zTbFftn^)Qdy?LOJEU{mWlNwUSba6Xl*@7+;FVHa${oyQuu%N!6p!~Vjs7jXzkc2C; zHPRBecCa)Hdm3YG7hvnJvzgYr`o#;Zj}I9NT|3sId)3s*2@0w+pE*`nVAgtcFO>WY zVZ{l2qA@90h0mx~gi6&bd%$nZkF(K&ao~vx>_~@T4pNxbg5WU!@4_cx%M0)#rFuiC zs7L~N4WTeIoWmP{{PCNqsGu$I)c5*~mm!0IRM||G*~a`e`Em)-dDA@Q&~~tgQdpxf z&7a93(xDiog%GP!P(ecyzx>!Z9;_TP{fv+R%ZACiE}8-y8v{HF30DYOvC6i-#4aJc zS%+B0Gez3y*+R-$1)N2&x70O-UN^xdr-3YhAGplL=d>zJu7_ zr@>IiXhZXH%ne1?>8;rZ8ae0v&gP5WF8ej?Y+30oH}PAiTCfKT zTE=`sLxJ$M%OF47NC4k}yAEbP^C{tA%AOJX;8Mun&oDk4{#wUiEzWxxPD53JP@sii z1&oN{QXtYPIbneqrbN?%F1wy7$YJ8Gk1_s;wLG~0^qi@D%eC-g1*Gjh%{({^%?T|K z1$w}vr;|#nJ2+{z58k*_TEk)`$O-fdUe`j1wHytZ-~zL3KFu7B?o}``TVRAUOFb5y zNU+r18wGBw1(|C;owGSmR^(a(uj~|vQCMVK07En$<&(3I(7>Z(Z8(vth=ihdQPI52t<*hh;U^Eio5ny z3G5@Z@HTG@jBZ{5l1vZ@WXkXRh78lpp8qCZnE+5%3ARP~H#Hqz0528-uMZ;mo$853 zOaWixcvbbd@cy{6NgVCM;SBO|@DV5R5;yS^M{(RtkO7+vc4Tqz-f#j->jpm&@3!km zc@Mr>5gKRC^iZOgPNKumah;6u*tVBMaiD%tXustb^)?mR9_Vy}6`3S!&7cwcPI3N# z7&2+=Hu(?Rv65Z66#aheF3*quV4+3SD6)p3YmTs;C%F@w;X2VC-Yw7aVTqzDXNZif zCIta+gxPbHAV2Run4qaCXSwm*mX;NF7Z=|VbdsCS{&OtHAlGKmWND6md}}{+4kP+d zsF`$AiE)mQ^gB1|y4puuNpmxw24st&U5qYRY$94TEZ-`)ySpVIjI4xSV^|kn!UHXz(pY?;FD|yEf zKb?p^ny$luE<6b?*_{ag<<<#&KO3@Hb?K2zr9$@dY4l7&tD<7?lnC>*^76l)Y*aTR z)Rj?Kq44Oy984IZkAM%Cz44IdN4bbPuXc9@t z9Z9g&(k*Ojq8v%UvGL0J9AXGi`y6g}`TpRIUy*oDJ?7+K?wTtpga~4mXa$7VjEh*v zkVlERh*E^mw@+TZl79$I;9m3TcYR2hdWck@z+pYd^dYJ7B%iYbOhU?nkIE1UjPsv%3P!CEg8`@mgTT~= zsP~6}G0zeRi5Grz0e*e_^@JIvm-THVr;1d6Vd%6#a>|tAnEkl5HPu!e;fL({84?Ur z5!5<}*`J7o1_&tw29_B(WuSzC3KueLs4(FGDXi+XB1MMO79|TK4B*Jop~8<|Q)W%Hqe$6n^-!u=s9~ixjiR*Xs9HZAqCHtpVLdK= zAT z7N%b(tL_XJtlYSF8839@YM_Fcp@$PMZu~g%n|gU_uD7L>Em8_JDlDThNrEI2k|@NU zM1l7K+y{D(5Wb`K^6E>f&kpkF!tCa=gNMm}JIwj%*~>paP)j{+kTMY$)OmDMJ3GPD zialg(;>&3cK9iTVG|Sm)k&188CkY3;bO#bGNB zz>Y2dTd-Bej5YShAC480#2G6niDc%7W~Qkhg~6ezA&_&1SD_@eI0xNn)Ok55p@kZH z=v1V%BE?1UIV1&akcJg$Y*Hj4)TNX{dTB(OR{E5ulHLSqY@d#(g{Yl=x*e*eO14lW ztdOzACZr)6QLS5C9PU0*Cw_$bv z9ZA7p8&f0{g(eKzVvj4FB*YPkHn+9OcH_C|&dmep+))%T-fWAM0#&IjLo`oRG|O5f zD04@WOavdsVA^9#J2HZY5|Avvd7MZItt{R^wX{<-D-0GJ9L+vQCxH^%MKQ_%UwhkG ztzZAVb4nMMJkrV$Y*Ne5K6j^u*ICJknAY_yy^uzWTW(Jq3_l6q6t!9k30}bj4d!I z9)s25AOpCHKa4^OTeyM@Ps`t1AYwU1&2Tgb(M;oP;S0e;ge8r$$3GsTi2w%97O(os zt&pfJ(73`yCle3k+F~yjx=;d1tA{--(hhrgP7@t#NEFO>npTjm6~7sP0-`X$S}3X& zA?%kFlGZnitgsbHsbHIovWYQdkT-`D$Y6$;Apf~hS?utKy;e8?7n-IX{;WX;T?qqqRi}WD)}i45VtcNF~5T3X-s*6!-?e+%ZHXkkW!fNCdVCB!NT& zXp@ro)(ZYDDa*Z@kHR*}-=H2fM!Bq+iK zj2Q&5o@-NFnJ3W=@a29;Y)dLhA(YWz5Iic9%qX~68i<6gA)KkqKqN7M7Ak>Oe4GN` z$iU4wn(2u6P5!GOWc509f5_{Z&&nzteg%Wt3Xhp}l+-SWo%Fu0`GAL4n z++nr^$1n>2#&L)P;e>0YsZ1SO=g#p=6~Gc z8i^$=Ii)bp2P@n##F$Y=akP|BVmndosBzTYQJh4F8y1$7g7IM)1tQOd`zmRoE$K}U zQ~YYF?a)`f(85bwup=W1U~rkW%56nJVw4%F+#F!k62}aH?I=OgfQ@U|)i$xr)^Dsn-EYcK^pb3)A5UtZ&L=)H`p2q)@Sd z4dz`>A$=3mWCa{u4@CrzpiIyTVTna}&LOcELtF)x6pKXpTr3F$DY(c0w2r|Y4E!X< zDGnJNX@cdr#Q^!j>-A73T2)rfmnH$v=RJ*>w1qBClI6Y4X|TiBIEuU}iZ-6cc#HvC z_}g^_lp96J=pn`!xKSy*UM)QT;|+;gc9j+^EzZ}B+q~rB81W)8x*9He;sCs(Y1qPI zbQxptjVKZs;$=lCtdOedVhT-EBtD`>ij14J8F6sLFN%;>In@B14$ff27b?!wNYNB1 z!FW&v(bxl-c!c>-k3|@TY^>0%354P>PAbkCRVl<2UY(aU*V1r~38j@!RfGgp#8R?C zz{%jvrc9WNTAFs45Z zM2WoRCM=mm9Oa^%UocYtPuK`Wi*V+vY@}(PW=?oTAEnCxP)A<~#cDFd>JWy+%*9~X zMNfr=UDRf4`jK5o!EA0?Z^jvK)+TKz32?rqwlPFiv>Z?T+6W^G7} zb%N2v!6qOvCt`f(s?`QsH78fd#z|mjHo@kqK}v8E2BUH3YElJi*5?|Q)k&zEP1M=S z(3l??PTCYDNd2WB)zsM(D9g}TU&t6j)miWKCvvFWUU(MRu^}~4Xi*YQ*ZG83dZmGm z8HCo4h1NtmX{dl^=tw->feJ^1>Z8c4C`bfHaGcG`^o5CzD9Rj0Ld+=sfyC|%W{QqP z3fd=;!ct-37m$Mg5qSnhY8;ahEreY#DQX;s_~8V7UWRdiQ?%{GYyfFrXq%MEmvnl` znEGgP%nXy^R%m=hmHJVbzS)?5X_}&js})9QI4F4*sh%DRym{t{zET2Q$+*?&4*u!S zC8?nh+?H))HvFce3P=moLt=1}9na<>G>2RD4S;?5A9>|aaDU6z?MD*WS5=yYX(vLz8 zF4<}(%H2-tG2QlRG{iBb!kI*WtpCp5XPpn3gNiI*tRAIs-)|> zzAL;sL`P!(>Tp!*4?@_s>Zh|V-Tmlmy#6b|2CTpiEWsA6!5%Ea&IGl_5XmI#q2lX= zIqFSREB+~%yy7RQLM)C-tWL;ShgR&vdWpaO;ICe+nf5B86x)ybpv$qW!agd@PArPP zSb)0e%8p@bLXmK1Zp|t6oa;VR$DUiDB zYvw7>POZ*v?VzLwu;K*I$(OI<#Es(TOpI)DL~6)FY)_!=t?SC=y6n~km7{L z<|psDtw&lb#I|V9#u!hOD5B!%j&LpF-p?iss>~*?m8R@)prdhds?(BcVfa_rc;iE!ku*RssYq6`~o0Yr>P z#&)jwBCk(eQ>6G^(*lgsR&Gx8-F`G_#h`CzobPdvN~TOIqL2!@>IO(48~q{*y28s) zV9dWv?$Q!RP&~%@a-U7uFM?vJuqZZ~J%?!j{f`ota zMBTh4CoCD^LTILY?5j7d?czCWkb!L4q*< zuHYhFD`{-h0xe@0SriZ;(iM$cj0eHhiwd65Tez(~Ea-(AY8jA^-{K1%k}%8cnttg{+Pd=akeVNB3e(`P;47_@WE2)UI;}y_=7V2n{o6{D~tjgfXsZM2m^vmu_&Jg zanP&IMI|NXaj0Du4KZ>o$&ua6f-;>1>XjZ(++R*~)rEDAxT+Cq?S-_4 zMkdh0L7E0>Aw&%~#1Qco9`EvSBp6R{fjxq3*+Q73Zi)H2+SjtJ=w|A$(u9<-l{fmb znO>7s-B`DNT+LoDHKFX<1jZ51?M-B+XpjLr7+CL6ELly)h9QxWfe4Wd^IHV}>qk5W z-*`($MwD!Z@82Hplnnqd55xj!GZQ0(CahzcreKSvQ*hi=>oze%6vWOf4-GT1$u(d{ zy7T(+atEs{)i#8|*uxa~29iM^NizlBxfeqObK^~)dqqJ>I!(J%FpbZ(rq{03vzN{~Is%E35hq1aUkHPLCnQ4P0VdU!SWk+e;lMfkn4rP#Hw zNSI3tMXa;}8;pW42$!;K7y~;5EBL|!bp?aPr$!^LpALt8NQ8!MMo?(~!oMi+bpwH34dYXy0}tz6CHj zjWg|b(=kLKrnYaltBnYYBp7$#Jri}9PO7|&$0!O>qOAm5T&-XPDcsXWScN3K25lpa zGqH9R>PUrzHVKZf%iP{-5AY z!}er6ccg@ig0pvNB4?}AOMvS(Y)Cg$NOz8mkZ6(u8*CUmgv{yfp=4-bxP+6xMMZO% z^Hfi^i>KzJfMqL0wJBrF3cbxDaZ2EA!deZNw#d;cVFag?6Bo7r!Q!;TyPVJ#>5&J9 zh1T#HrE*HCEz$}h7n?F!%>-JM-^4H4gM`lS00p^WOy#;yXfj(=DIS+ThSVsW7YG{1|6bgQXA|NJ9HX zgzl9J_E3DSutHm~yHG^Y=P_7{jEG2af$klIKxBIsaRHADSBFH_6ud?o(dP`E9Y{yp z0-T;iiO1z_y%e@`Rqd=ap#_i^uoRe(GWv559i+Fyl3h8+2B^ziNVeG@SRHfircHpWOuMKJBU`r~5^Ym29BiYT-OjfY9m5Rg=K5u8NlQ{ED z&MkA_TB_;XpvX0Me!f+7%&5JokEScE5JDV4kZCu7(*T194=RW-AOXUI3l}<+IFVvS ziwH*<+(OD%Ju*^S4ZMhujFJIT5H>^@1tCgO1}6-NIDpH5E$v)Qd3lS}##@^tTx=LL zf|QIDRXSW4)ZoITBcVo>I+bcwt5>mR)w-4cYgdOTC)Paa&>j~qQnrk$0A_B~yd-T1_$77bRe{lC})6mH42@y<-v9n!;t%fOdfgM5!gQ)l|O{ z!CquFfRssg^%#3qEm3VdTcplPNfMP+t5!;+L?KmA^2OOnHrjIC$`{+!$D@uhII0zI z*aJFG6fBhtZbCN&_l?J-bpeRQ1A_W=j&mAt5m{2085L(clHn#W- zrP-vYr5>>+T55oxo;s+ZG3ps$x}o&{i(->n+Sx*|b|!c*rHNuRsG*sz`phA|!gI}@ z@%&PBgGOxeFN3t0auZitv85F@U6De9_o6(As3fA$gq3=1DMdge&2z0Xgv^UV zKqc=h)zni_O;uHd{6ZwO)j4fjN?5>sSswLK4XLU%ViSisECa@y0Z2(?l4ecW3 zY~f_qEgq8~62KAzs~vl$kdq>1Dbi%EEs{_YB`H|3WfLy!xy_(RL7Rx%%q%;ODJir7 z$*p(Wm4d%p>hY(Q#7MQsB$lH8vk2dSSB-bH+S(bdB!ds~N22UDvByuQJ~b%Ok~};r zvzJP_th3Rg3yNJ(^{uBrA76y`AWhOG?<7)c=_%oxan4!itAfR9%!Vr6jKc`>B=<@w zke0yFs5TL9uB1bw6ix-~)Gq<^$RS9;q@*C{HKn2U^J=g*QK098CQz2Ifq96Eo5o%|Hy(U+DXCt8#iHw&z`}ENW=p0~!aL=BoX&{w|LW+RuWuKB?QtIJlT;67G?#1&--phHN}j=1bkE^(6tU_QdFF=y7Ply9p)RGE3tzgo7zUDO6ZII#zs@(2E!1x=FTvJe=(U|z zOizFV(1Le3!3DXv=ODG1-b6A%3nQYXl)d#^l<~W^OUF=CAPqAN-9wi&3=IP!CDIKt zAV{fncOxL(-6_)Dp_EDr(juuMFW>d9y^p-oenPG#|PLdB<;W0Kh>!%I5S?Or^yBH}g?dPPl+b$70~xm*}X4l;KwbrOmz z#)#Xr=ed3#t5IK3(Zl@A%|<>+$+z$lkM`p%sDH;%(@N^mN?lB;7Wv7iRE6X$$EgtA zG@--_(2JkfV(e?gx5mdW_xPf~8BUv;Pj>ZQbSkUuygZa=XpH&epF`(T{dVxw7>muM zrkSaH^de)VS(FDEy8_D+S`!9%L>7zBjg;-|)X34mk4yBRHQU@;RD2d>GEcq;)q_pd zgY{^&gm7C+S_btd8Rju10+2$3M;+rsd}*O=!piTJI*Z?F`LsR4zCb?333&I^wk4u&6H0LHKPt6{6Xty13qm)YvXAI~=uDX}AG|Fwgdgb($?1zYA_SZ|k9ouf# zQ@=er?iNn9mQCD;ymN+`%+hrq=)F64eBw92o_f}y(4NYRlDS{+CZ?0E(3|kv$eh1P7ktxONYtjw)}av#`>(#Xf0qq! zDR~nIL}4&3wUEn~1?^St7pyW`Br}QMNTW*ih#nawgLjc_jTXy)Gmq6PCZ#S$-dX=tXoqrWtv2=5t7U#cdv@(-C9l;X76>-Ns#Z?o9g|Ioe zEuK2nhC3X57t@@*xF_FoGfKo50ac97@EG6(ruDY!vlniA#nEtHzfpWOfy+oX;*A}> z$#721Qx6AS7flK;!!v?9Ho`ju{wrMw6K~8ZzZi_ofhdZ~obuOdr+ss49$!!F6 zJSnE!{JR2K6-sol{_PeU@j)1wtu=m<3hB2Y>F_cwG_LsU7Db-|g(D$wWQ%+x5lAK& z3MO=H-XL8&L;R}`FC;{`;5q{9NdyHUB6=#-2w8x#xZQ{>YTMJBSpPAHwr0N+)Edhf z_H2AO!Ym|RPLY=?6uKVa04%1Ya|Ec5Nqg_8pH3mLm{>INaODX!%GWKQ$!$U7!czZjiHPDd ze&iHVv4pB9%3R?}n)ES3@OdtVkmw0YAgf7WkvkTPDY?}ln_F!;#`Wv zsSm@1&g7i$=lLm~lk`=v z+5P;G9M61}C|t1A0{RzLL|`Fh)>k#U1wYVfd^e88D+p}sm7G*@qZSf8vh)npATf_2 zwGY;D3KDd5#WMNXD%?lavb#)P7=kFYvUBF%jBOZC5dL*8it*f^RK|W?VN9^itV{Zn z-ijVC0xoKeJ^UiYA}Sg|qHv`O8D-XuALE@4cH-g$1(DI?NT|Za&9)s@4_W`(Rth*( z@suJCbVD<@>&O#F9Qe&!ODNZ|1Lxt-jPSyWkQfV^1F(YZVGwi&7SM^i&D*w6O|Z#1RPWN1P+NYxkB;ihq>5%`L-I4m9DR zV{$Wvoa^7w=G&o_d`dMJ>Vmus6#JhMCH5)>OrskwgoCK4AVF+65+zu~&G}kBf;!=K zQuM)MtM#Np=$W2V8Jlgr^%qbAD@n6{E29w%xl+6V*tT?tEx6>L$pUk7ppG+vwA?tx zTPY|s@{)jDLr_FNjO3hte~_N_(r!?-O%7bi!p>tQ6s`=u2vdFVZ83U~T^_0F7jw=i z@`)5Zum$Kd}$X)maq_EY9Ro}VilVW$#3gLaJd~y zI9PX3)TrQhvzLw9l>vZN?p#RYpS9n69J)Lu&XPa|6M4wX9p`>)D4vq-jH_eq-g;`I zy1}3eUII^K z2DG0e6s*b@y)iV8wkt1w4r^+T7jtbpt64|?&%Ft_V6&Dh!^6K37L^8HxY5|5oya&S=3Pl z?U5xukwrIAHJQ;3)Zw1LLN#t;ya_Tl)#rC@Z&P@BYdmIM4T8MaR1ugR`^MXM z9TMrvt=WB9I~;9sAf0z!c00pa;RC+8ed0PRx4Hhcb7qN{%36XF@~kBCys=n&UDfwb zUfg-7x=B*MC+^&JKf~uwdo>&uqeuPNJW-ow_3p2guuDZgZ|ClMT?zP6!({mTHk|}M zkW#fveoUOi-|yh3PLNd#>8hK;XMW#AlWB-&pG!^fae(Vy&OMw^2*2MidA*u{$%=R! zjMr60R@$4XAW~pkNbI085Y5!^aaW|EORBw}c=QQX&iL?IQbyJNFrny5(Ec^* z$on&T#IK=-2<}~>x|5i1zJI$a|0ZX!#tw<_!DB|!LO|Pl7;$Ju~N^Iu*7hfY=4!DB{7>t z2-jTI8(0VuM-;G^9kk1O^NZEbA5j|E%X7gTipKt;P~y?mZR`@$8E$qLtcYM2RITLP zFK#Rel+)fqhp!5=5GrtNAl`hsjMu(&7lC~!Ray*f>Nb=iv!W!h_-Ne3fVa&ATIgo& zPTWUOvu^%LFA^hik%;wJJTl*?O*?w`c~zUc{1!CE%qWdd+@mMFpE})2DLQVN&>KvE+OZ z!(*pm!0Vt#r_vp3FzS1paOQQJ`*g4q2gT4EROEB)=7@0Rg)YS)th~ zmN?cnbE{k*K6?T^{6+AGFE2`UOZV7%29ctQ%(3sBNP}(17y^qezy}Gg^arf8$|NrQ zjlVAC<5woET8%43aTbFa*en1BHaNw0LggFE|2o~c$`sZ=Y@Zgjx@--XHvffQ>o%YT zJLHx`^{vqw06Z%!Ime701;~29YBP@Azg^DoRKo*>$a;(U(VHra3*N-9oUF@b^ZYNo5!F&rLvQa+2Xdye?lxur?Y{l@|1RI&-+sKuwhHVG!h0|&M+y}5hmq1r1`r7r4n{$_O}Zlmi-zOqrTqR9A&W7C0_$X zDii72&5w=*}0Yt0+he^5fHHld5ddJJd)ekXZb><;vpsV9f%KCwiF9Qq;!-fK^J=o51$VgN!{kXrE1fzRtIX2P(%Zh z`gb}S_wT*&xZhf3JQit65Lq&&?Fxe?MFs}X(CuFF zrl_Ro_{Sf9cSg5(P`+m#OAp!`L+QE8h{;b7Qp%ch(D+cr364W?kJxlQ?`}nPq1pd2 z2@|OQyfANU_OuE(R67jvrD@{5(YVD%z!-ucc54L_QVR`t z+$=+rn8$$PCvhfeBPvmR00ZlAb-uA;y?$j_6z|pYqvtq!&B&72Gnnd{SNRmxw{%=m zcDoGg6ROgzfvnW;F4jGtZL@Hm(3s^oqd(ic_dD@j2nV|Lm3WQ4Hc|mg(?*x)SHQT; z^W#NV_vI33qvwlx0OK4biEQs2lLOuWoXY87?P-Xb=B6;PNh};5X`|UUjs<3e5px$$ zzH*||=MX3eIL?uj<2GwXsne9+`Bg#7g4^Zw!;_nMI8Ox2Sl(t(8Wg-xa{%32Rhgzz z2eC~&gv+>XiHgxNY$M9I~-TtH1bgCAs(vY?D|uNL925wvuX1ME0?@kV^GZ z9h3F~xbHg^!@*z_#+*Al^oE38Kl771=l2GrJ6&rlGO#<`&5DB4W^jBAPpZ^#E{<^Q zQQ>&;4oXFTymh-i@{07VHhK@A&Yf3((*MQ$!$rrJs%=J*_wo>sHG^>-&>AwG>FXQR zm+gW~1Nv;S*4&mP2$xujWUDU$Ix|Ec|wP##IJn&VBCuk`tr?YQ2=9`!<-I3|rlg?rFGv-0GMYtJs?6~g!?)SZ{;O4R` z>@2(A%}ONEF!crVk?v?0X;ZBzy{aFydLzt681S5a>S?vW6x;A4{8?5G;v7W_d3V+@ zV)qjV-rp9ph=7RP_4x^vq;n?(#rmfqtg^zu4q7an)QDb{3 zOUR|qXAVvFAd{6slWoYofLzp~4N) zPvB9M|27n8-h|~mvUJ5FBKagAo;l{AF2rZ%_zp;^60SxnXVC`u#P%@tbN*#jwYXrc zYwaD>;@Avf`};7YQq{V;VH;kaS>YAd!#ebK#LTOc3*Mx)A4XO&=nE`kmCkZ&L?^o8 zUtq?nPK6;MOYoBy88 zzZR;WICH~+GZmz1i4)bxF?KT2aQr&CRPEs;`R`AO<(evHO<_HyJit<=yKPF#em+#R z6;A%c!K$WQl^gPDj7$yNz1Cqw@L2=O5m`GMCq&Y0jqJw)Lx6|>)7GU^khf2;InD|0n zNs1YW9A^kdn;xXMUU#GXs(q{TJ);S2=Wqujx*jx^Q%ibEsD0O`xlzEYcC`-E$iQKf zrmv@RldmZ})oe5O$?>!%dC6@{C(M#ip9LoFF+4B3piDOn37vzyb-o!}l)TNA5%9*` z#7J?mkcV)NWN=h$aekN*W;$~3xbAIAf7TX(R>^n{g7}-{ihBg_3G#}?(~Qs9^s^0* z4w`zTTb-ldlJ10yQ#}_jkBr*xN}=@~5&np+!yiJr%b}_?>{8H}S{J*^jo)@8 zY+vgz$-eb-ut}?be^~*=KBi6F_X?SQ%l!b_IwVH@L*34UWp*-hCm0Z31aSo@?0P}>NJSaa{fdPz$F#Yo>qI}#FsLiOzUMX$ z#ZS_?J?t2eO2-KSOh#H^xFh6lFrU2@DNf0@>svfWRZS+-4Qsq6N|lovOWrJJax7qluTOHSpl~T*Rme`vmq}`S| zkwb=4i-PJ6%$DxS{YC^tGBwOw)Eca$D#bB%?3@o6t}cLIQ?E;i;r?Jva>7CnjzE6I zjXmlG7(x^*t)rjYsNulSxXfO{dla?3_QvWmMVdlO7@bx9Fq~vxYbRT)R#25 zR-6e|_rSP)7?u#zCu;>RBo+xPe$SF(NiROKjUnlb`!x8C^%G$ZBOuYjqtB=mUtgfT zwaneln}6*xxOyQI@`7ujs%2<`*UjQ5X<~yo2t)k@%LTPpQ2qiu@wzR_lh5S+NU&&NPiC+cfr#aO*7N!2tj*mOKBDdXXexe~-J? zf;J9U5`bnz%#&9yR`51fJ|7gr705B)eoU+j-$P22A>Sg;A05$F`X}XFCDU7uzl5Eu zW?OI%!+~woW_`beYy<$+XS^R400#=*QbPiWCSvA7G)|uw%Xxjy27e0>RR|Gvhbl8% z1O3{QnIs5&BFwn0MO&=}3Va1^eMMKdrSKYv|H&a!7qoC;WhJ@<)o?HUdaR@~*h7z} zYKbY>nc@`!SlE=GyGtP~QU|5Yy2iNP;IW{433yECQZBexGVZH-Jk1zx>!q9VOJ+@= zo?NZ@rsy;Dsj5FjRF|sB9VnPgL8tb%&(K)k@cRn=jk0v;ZmTIKWdR&tB0y}TtCN6g z9aSKx!P0rYCKk13a^uVOt5}buSmtQfM9cY+3k_F&xXu?E!A}h^=K02+8q&49l|S*9J<=d&fioNI_<0QYK&;h zt2;zuFtAOlV)WZs6MFl7Wm#c^|M_S6Xz}HG9Z^vDUEnnr0 z5D+)mkYMcV{s4dBe>_?Pe(ejA9bcbfO}-Zka9v|1`#G!oxhMO1N&OcN`vn7X z1b7A-u9L1k`b4S+q$US~zH^escFV`w+-VHThz_cl4ax-!s^<)LwGL{p54y7q@kk6Q z&<`2J4jIM{nobUykq()g4e8JiKdl~m<}&;|VAz^;*qCS7MRVBIY}n!N(0m9}YPN+- z)QC{gh(YJbx0MmRq>%ug(KphgfqzFn8jVJ3j>fo*My)5tO^!yBj-~L7rTraEk44Al zj3ot(<#vyy9*qS}j^)LU6_Sn@(~n2wjK6akFR7jzFDIR-=^iiQnP~Vsp1=}I@9=SR zc%uCCL<`AePgm!_QRl$bM8DbOh~{M1(Zm$}!?Sc;w9dahbV{ow=)? z!J3-6*PL~CnSBvEdmS(f$esPyJxl&&7W>&ONM@FTOvXR}%b*@hW^#_C^zd0ZPp%;#7Z`dA5WYKu9+0nQ=ktyW-b+V&rZzf+c zhEc1t*)ge1zsh{7vqe6&)_TH?EHrRyMV1Egu=BP%fat-HFll#-uNl&_P(PpUc7sN= zS#mkP_maFkTyAm}qYLP|uI}r4d(WiP(|!AkvLyfcOwWfu*Js-kc{+J@=f7{9qi1Hm zo&5WUMZmEUh(|@V>`A~@z7b3+T0W~jC&9593RR#i@T0WLWC*AA-rtO1uDyC5iAZRBZVhTT&B!haGEA+}${S*%6M}3m) z1iN%6bv^0%jdtQgZ=*S?U*EZ1*11C5&XW553u1PA@lB~IIdPNbQn-Z}cyxPX&*=me z>Rp@XQ1mf|E;?rBPf6tUbqRis$SuX_kNuEQ^3+B)T{ODeeRui%`Y{A5JSita@_E_^ zCbKYgBsi70z{^=CJV#=iJlkz&dAHPM60y=^q9_I+Ua|?1xKfIiZ%_Bo%{aaaPSL(= z_4b%?J&=FCR`W{f;OPFiEqQBnZS8p_SH|_X$QO@ZZN+j|V76<+$ZmI1AJH=QXUN7U z`Z!Y5`tIgOO#6H(Tv+s$=gp}7eNf%@Pk)b&Wpe&U?dP6n2d#U2TT0DB?bVsdhbO=v zLad7iV&o?pvrvyBi`r5x3TG^VA3URu-r?j-rFe)zTPx$-Dsh>dBLiF(x20T)ba7PmK4xO|aD_Ho))0 z9KVO6RPP7s7ll~P2F8eg(lEWA9%4KWK*@YX1LB2Aa&QDKw7`BS1krh}n&VTNQpZFx zJ|QAJIV|O7X5cz#k&{v8hZ1mK))zcfa?@R=E^CE&HQ5X&2q--h;G)d^dQoOb%%MvO zhW+SUbX9%*OhHuAK#HxULO0II3B|QkX+kNWX|wgDZG5TL@3P8*%sFP5y6a8!WwpcW zXnNmwpISRFYh*esqQwb6cdlO6`b<@sUw4Yq0H&h@$f_*}O(8G9SM^9iPHfWXWzX^E zhQzq)r&AX*!Mad*OX`ugJbuQn z+v&f^|~>&Oq%%)!989>waX;z3w z7ZKzvqTKO0uG7`TiR8#Ww{@8r?5$1}?ee>zbA`#ORql-zlrKf;)9iF>YunVZoBy9R zN;_ox?e8PZcFFp8?Y7R(QzzbCf4&q_iFNONaC*7$=j+XMThH~>>6`nfU;mMd7aa4R z1=IcAAkt~?*E0AX=1jOj&i|!~gqQeC~s@o~Q_P~j= zs>@X!KrAlJ~jn5R@z?ZyDtB3#s3RCEqD>b85X)3y3}`l_|-?l`_ra((aN z*2x%p<2}>$^?Lf%XxN8S9PY?Pad-((_((-%Sn z;W8VoFBpgbvZ&{v8VZMEsD+%?M;nSB$mDHaE>xuVT zU9HD!?Vg8Ur@Goszx9UvhfLakZjYvLKafesuRT^Wwm|I@QUPKgi@`&)uJ!Ux(jjK7PEv|8FvJ*a#x}51E(??*GR>C!DKbO}V%b`d}CXhEscm zfg`A_iZ|t%-F#*vd(tu!BPa^mvtp#eC@sy=lMdT)nhhLO*y?>KcmfU1?WVG1tH_r~ z)Rkeeg2v;QHcFJgQBPCl&{0Lnua{7X>D-KitWH|vP&RM0IcFjkx!TkDm(~i1pji3& zB|BHocLt?$d|w^EKltZkN~d;ccP}$~@-6$?ewd#WR*kjQ)K9rbH)!%`Y zB9^vilVA z3M4yMow~aCAorl2OB%+j$jhw98`RdV=F-!in?LM&rm*pZlPZ@2wkn1CNz@;P8_X}P z?6fNH*CrUDBxipKCc>B9D!5(=wKi0N`2yQBto+a*r z@~LnNVA#`3T%^f^Z{eVI-21mU@S45^ten6|sClMH@J`JeJmA)PtWlD-FoyNBbL1{H z62F2M&*MB~a-Q}TkgF8WLux1T_Uct4!EmukG>IBj#7#PaEfo6OdNeYiy)#TVA6BP9 zr3@hKOvmiJBHEM7sw? z(KHn6jiOXzA``I4g~#YE`$r

WXMMt+5QJl+Q>K^?kLIC})Wt;=RMlE{bIKdIEOjL#C6AeL6%% z0(ZRl5zprIzpEhc$%9>zunwiiGnNN6gEnTBs3s{D{}B(wC0as$xa@OSUTF=J@(>f= z5lJr)sVlJ!MuQuy6_WD>63~MoBr6;WN*yA!>GNm+!>EXD^dk%N;(XzivcmSPM8j@y zO!A7oGOTbE0}$YhBc+5|S}FJ;2Xpa)xUh9inu8)CFNiz1l$zW6Ld7AR%DluGI9w@O zP<>|Gv%-{agW-@welEceqsACXAdH-nZ*Ou`lLGt{C$u4$)FskT5Bw=^@UoKJ)JDNO zs_ohLxeUDa17qU+(LMlPqlQEVDZ3OXoUMS;O+$^2`dsj~A{CZy8!5)puN$OvQCm*q zs_3K!G`)vjF*kmR(&gUaOF@^z@f!2*>|T!Y@#sS~b_{l?yB2B_FY#&Dzw*BwT# zhR*k-(}LvDkzr^n;EA0TA^JfcM4UovTqEbeEq7s}1VGDCe+Z1M%lnPM*h$psJ@=y2 zz0**2k3K~`DEDHu2S0+;_+HV4j7Qn&dQ17bS>|bMzPBsx=f(^?UD$>rHw?;O>zxIA z!lOQcLz|4`8&C!T$qVmPNsQ<)o;zV&X}3zszGQ$%Iymd|s7&Ph1GTJpPV3$B4Az&d z0_b>pxnBY_NGU!Kh2&Uh1Wl}>^R>R*Kr2cRh=g;q%o$Cd1Vm7lo(!>P``UoNP%1k0iXpv*Q zcw$KT;eX?n`bD!tfyHXDaXLqmB(hMa%eTF-b}Rvwo2T72v{e0-{Qa?Tw`f8v3zxM= zVw$?e>s4CykEKF&Z2|V`d7%@$*`6wPQ={tK9iPUpqU49eW{g; z4W-GxsWyXUlFW}L_DeqUZGHM=8YILyYumkfgNhy)CEHp}N5kXB(_9c))lSR8J+hhc zRvJY8LuayXb;8OT(-K$UwF5igrJNZ&)`x>V}b`OpQ4r3Cj z_);mA$t^7&I*6i`{EFE?gRgX!LxF!iLkrjlI2xo#7J(w?=$nDi$Y0>9D=u5CFg`uO zvwjz21VIU2h=Tl^fkxohr_#D8tUCq6Q}hd-1%PE5mYS#l_I;*Dxjl>3Cxrg2;N)W9 zn7tU0V5FcRd*;JI#eflxpnz1SB2-?MXfvD!8)Jv2qB6Z1O;-4L4 zZIKMiC2x8O+yM@HkoP@Rhfe{CzeCrld?;cXeBz9p^{D5_dc z4ce!M3yNBZ4RVb>ihY6SPmD2rg8~Nl0Kanphv39dO9Zh7S#LbVx;VVHm%IW?z&V9@ zU-9|7Y^)6Tfw~U!1Nbi1B#(`_K7xeSs5gtlFFL-{2D7q40<( z7);5dpA}eD2>&Xg`q)FTh?4hp@jJ-|{(EhRECG{Qw#R!Kn~IaH6P< zE)V5A&rl%?k!Jv2k|~deW|U(pt^AYV`;f2*wcyv~srqF=rYK<4QVO0t522nHwK&0H zU}96b|BV_@ZQM-lB+>{1UKB-3>!m)D&tzzLuYLit_GQ)R*Ueh? zrR)Q6tUzm&!$=yqzej-_QIrp57UX_PmSqCu!eTYOVz(ENw0ZF&{1+slsB3YcY3K`o z6|C1I+7I63FGac~#?JAJs)r)LCLyt}yS$ranH#s!cpzdr$zYrXRP%-k4u($)S-gP+ z0XhnTg-WhgjKz1v(7n2#3ShvXmZS-|t`M)`JlD8VCU_waw*h~G2BJ<4VplIwFMY<& zRSM{nCHP&;O(=}F2Q=A&t>3GHl%e<#N$(%N%F%GEM>~P^Xh8wE%n@a-nsR&;xYESR zR*9=Z3?@&BV9|rIkPZl-^EKb0VT_%S&q7o}S+;d(mN@JDZ$4aR{rTZejs&pa{OBNp zAbEWJYL0>=8u{udHW2<2Wz%9gYveoTAH_QIHS69r(evr9Pgs1%L9!|3I5tr&`)M=k zSZsD>dwwW`We!Wb5M8Lxyh+fkxF@pu)&1%U>ZUU*iuS>2~bf+ZB9eO>^>mmf z_(~dgkXy03&+sSvS9*=aaPnyRHsMA{aCQqRoL_Cij={eH!`8w?Xs_|7fwHe@+35w3 ze6yW>ak6vA#Ay4mWJfp&6eS1AGj4afshC(r@o;-MWrJ5cJIhRKlA=13vi(@FyX-7m zU+!pjO8Jn2p7IoOo*mSMVRA&0%481V3w;77_Khc{S-1tnZS&m)6X2BK0w&PQ0d9zx zpQ7U`i0A%$&X7Cu~zgUriLZBYss)WwW`PVr%l*UlotsyQ=vyU8>F@JsAaZ{TmD0Ir%>Ld zq;OF$9y7f)qSKHYKlA~Tf4CPa=kJi_S{wrV&-2Hj!<44ekKbf)MK~8?c4)Hk? z>70aUDn#xhDnFz#OC!&-7I4oFIBcX-UO(U%l_R~`_GvhbMo;i%74gYdpCSuX#F3gK zvpTv3c(2qSoAMH1*^S%q;nP9Cjppc0?ofN0w5k+u92XjNo*4 z8jj#wT+j^76Cca%w%nXng90H|mQp{`Dbl{G-10m;-Mro{%}=kC8vX!r)+u$W+pZ@Qv_gB+QcQZIL5KaPf7hTtX7I_g|U$mYbO#YX5@@MTwk$G!SF)N6_1 z%W(*noOqSIC z!qf+_r%PNb{UwBg(?&^A(w9PkPrn)n!gGc=00Zcke{FlCg(+wR|GaK{a`c5$K2zH3 zaa*u#d5Ca2%ZB0@81!cjB0mG!1k~8~PS%oCV=0dl&!_f7$Gh(7VJ@BxD)dkl=S>!pJ|CmbKvE`Du%#^bSRUzQIF9=F+f znu)@JnX>(((%z#eNh}q8DPC^9Non7HndKXQ$IT-OKT2-1==*AZKO~zR2c)5#LCdFE zG=MWdu#q%m{|Yb^Bx9w7?7r9x?wu!RB=`Uc+ASbyC%*v-eF52|ioU~Hn*pR>b_qC$ zss2@_dXC-&&u#KIl+zZ#2S1CGnnOga6ku;acWJ=p|Mc;8>NQSby2PxrojLcw=EYl6 zZ3}WZa2p7p)MwW61FsfSdpRo=`C<4Yt=jyOqeczpy*q<8z9K4Q7Q@@HS$G5Sof zR`t>A()}aD8-Dtzw>Q3)Xw&{j0nUu||s^R@g;ALD(+!H(-uU^n`z z`wCB2^M&0_>|1b-`A-wE{-|M__J81*1RGU1D%KCbn@damKLYRi@kK^YB>jDi19Zei z&Kiw>6Jal^!rHoKSehP&6GMc_e37!tH7%S)yKGS5zWR^AW=nS){^bTqO0UScwh2Wo zM3@m;^P1X88*)hwJ%O7>o&OK)`56xCbvZ-z;Xh??fP}F!o8?Bj>;ZHom5>h_ZE=4WqcGJgNFWu1b_2)DbSXY?i) z4)Y~idGA++EvJHY)U**xc9!Nr>G!Olc3#~mjWA^|g(W47`ao|N4Z#an1B7$-u&0y7 zDDkBtufCc{^*>L)CqHy=C8;t$Y=n=K`zUAOCOv+*|u9I@i}; z4se_!Jx7@c7hfXz&`;Tc1$smX3rO0@JXhOYWuZW&AG5)OnwPJcONP@(s5-ri);UtK z0gO&6JfSv?gI~MBN#uYp1_f0aUQMdAoEq)a6qF)uB6)CVZBTMJP*kKqxQl@A>;9twnipk>k@jHCW@ttzt(5Z05&vwq*!8*KKgA~4jYZ7t z;yx{QBlp`mG%wu)Tq~8xG*;!)iXfWkIQC+UJp4OmVukJ_d9au}q=a)m8MdBC4v_zSMb3#iu-7tX zB?Go;WauGNWkA9HCO7Kq8f#(U&vpi8%Sm(eeC>H+C<{o#b+;|$X4x!| z8&eTqLF`O`e4m=n-=(JCyC3I8Xcf52D&~3LvfEQBa+didC8}Dpzh7bljB@1&Qs;<#JIMl^&AAim3A%{XoindtfW`n7r z$(*xb+5?j%)Dn-g5xm|)M{*xOn}ib`NtnN*w!bVBiK8JRM>dT~j>q85A}=ycqs}v0 zo6%yW9VIr-_#VbAAImUF-mHh{s~FAyW2_uDvZWav8d^#$Sw#`kOG`krq-58r6~f<7 zh#AnM%zItO`g?g6O|_KUJ2DY#4Kw;f!89U-i;B|UOrV-$sbRUrO%54%XjySBkU93V z1ZfpL)m@$%1umtkt*=L-@pv1nv zGOLkE1~t395vgX<)h3%NY&EE+INf37%@SKttp?5!=^no3H&9=-{-x4DaCY?^e0pRF zo~g9zTgsmwH}n?8&~QDD%UDH^JBxPq&Rq&;7Jeq67oU*O@%R5x5GVcRrKGuzUG|dM zxuc8pw-e1URBXv&ql@fK?|idaMkyNL3dfPuLr|=g;VGZMmwTx~W!uXmEnIa;8}cf8 z$TG<$*jraJ-Y01|RUY=cs47b?^`&1kH_R-NJ`Fc8BK^U(k_9%P&@d=iTd5J7aMKCu zTfROea8<#c-{#c7=z{V{lxxL9d@81^hqG#Rk?uxhV*{zv`o_E48fw*j#?Ai5^`;5& z*v9)ts3IXI-^B*qj9tUnw9ZB!q=!|pgjS)eadXJTxqR^#Hh;QtCill(F-OVlGi{7; zdG|&RfxOH&2II|PNKdrml=%qe9I+PjDHUOpfs#H8>&yM#Bu8bbt#qOUn5~wfbFKfN z>|ZZ%9J$(_%93bIRYEfsCb^e-zva%FFbGh-evpxyBju%Fc>bWV-6qtAJ)5IUW%+ah z>OX;WC1EVO^a}3$tzE?r5+Xz)tn3v?W<~MY^7gQ-B{0&57P1>YqZXa2d@0GzXF^N_ zNZGpkZT>kgJ4d*A$_pDp&USRW0q{{L5+-Hq5fl@r5^L>R=zBy=i|x^q1wDxUCh%^3 z>}j)e7zgQYj9wFq!bki8$^PB@Ed$ufpGIRjEQ^zRigB??0V0lx-SpR_Y_4|k@i?TT zu^19ul)=C%IJz2x2O=@08{5XfLS0*%F78mmIY)~9Zdz5qk&HwU9BD!BB$yj!qtw6* z@`w`7zwe>b*ir}F{Os1=7^CP8nodNWLO!&p2*UovJ29<8XbvXc$Eo}jqKr(#k^*!w zjRd^R6C(MdBfgkB*}*lHly)xT7?_^k>Y7Abj`S5@u2s1a7xPbJwnu79wSKM1xq*CP z-D|C%40>!0zSVmJ<`PLq@R2NgSW|9q1Y>jNx(pUoXLu@Gw6a=|V555NXk$D}R)-~tEjiJN_K{i3_+dIO=cY`;BJ}>XKKcjW3 zsxf7K(Fn?qyLhTSZVSb}v5F>JgmIzc%>O<#$XM-D&U5t(4Ed$Zd+*WBcTC93`e)>R zJY-W1n>8Nt&*}bn#E19A#!fb%VEyB3_mE7h_=4d)hLjHiB$S1RzPf5AU9$BWpQkPS}%S9IZW7c#Usbn7{q7v8Wh zxqU?cLuUTdSCCjlA^Yik{~cW_^{c8a{mMyL$LP#URcWF(`ENONoj1+)q_R~r8cf)B zuD4c{Wa>i0KIHZ;L*z}KOSYA~c?Ik7wusNy_#C!2ruD-xj88uPMfM3RUf>+fRTPi#wX{QSJ?S) z>x3J73REHcXEy=Rl0mCl#OWQ8V^uoi-3MeNS&-z`+d{ ze(I<|m)@Jc8xxz3kEITcwTu6wFIP_`r(NDW=P}ARUYnXG&yj|YxtBu#7!w{SZ&Zv& zbAJSPiOVV+JQb-@4B7`S=BGE(46fVN`$dc%HIBhoa`92%g|loH=(y5*)))z9J9pT` zqZp|_uKu1lq!1jzkk+q<*s2`YIjj(Mm(HD*(uFDaJ&YMBO{8a3`RgY>4wO-jff6hR zjf%!G+LeBg4v1GxSP!J>A5Pc+CT*dUcCbl%;YkOj$#AI&N5@I$z)2&AF_)}Kx2j3^ zj!BR4Nzau@ufs|2pOZdNDI36)pAv&LO!eIu@7rO9$~JIj-;=s`q;f_4e$rDz%Q7~N zQ_tTgVE>Fag^K?`NH5tcy||FWNSHiJOjINRS@nStyA1bRjFgpP2rcQ}o<8(dVruk& zBJU5?BC32{NzQJ4QPhCcdK5$ggg+WtVos23=0TrvIDm9WJO?%p0f)3W%H^;aVj`j8 zR`ELd*>@UbZ5zUQ(0;)lB5ec#mbgqIM4_KO{>?^5Z13C9cT^kc82G&@r<;jtii(wi zlDXWieU-U6>>Z65Ex*mMz?Q%&0o9h*y)9R=*$Z7vQ3Z&WxHl)66|m&(#Mv0LcTvL) zTcq)R?2I`v?<&rLWJNT`3qq|6(5cq=gMyqC+6rk0pja9U63DBhrB&5VIkP(+TgJH% z4s;5eU3Sfu^&6T0IM^HkB#EGU2ZYH)J(f{HSaz9!Y58@}!2||u^n4W%?g0#jyqlBM zQS^xa>ZkY_&@V)a;&9FDKgoMbl~S0c7R68cNi)^FBOf1;m9U@{m8bbd`tesR$zT_e zKqV4I#UEuWkD5*cY?IRL2^8JW5|PG()QI=Ffv|M>A5c9`xA;G_3)r0?efR>7c1|N) z3m3Tn%w7QD^gF$;3Ezc-SM_4I^vajjcu@rKiv<#vMN*MPGUY|6@glj?Vnh1^1#*!J zIYXSiNZq+eGqFg!x=44lNPnZB6|wk~e2Gz8nVMyZS$PR&yu{+P#2RFf`D2C+r;j0f ziL;50%UX(gV#!^J;FDo;KtsuP2a48H8z)*x-Kd0zSqyzm(7-b&aB7>IFq2#}KIjA{ zk1bnnwj~O#(>!`Uf5|Y!6RIh;%F#sHruKWjW=35$0?4nKkeWyiv};TrfMrvq>~t_I z+_bo~;-Qt|$4CVbdg(cgIF@N6vJ*yy@l@UM9hQ#3A!$-9I#$!&f|m?9p%PTuJVKxB zk%GoRa!U}*O$Vh`#5b70%7g=g=-gj{Sn>xGsI;**o^q(w8?COUR4lnv#;bgl`c_N<(c;bEF2@CjqnAJxyF}aTGDPnRX3UrP*Z77!EaAsp#D1Yu-Z4-Nf{Vpy*aU9fI#sM zDP?dlwp!NDjfcr~(T?_-QS)64n=Q38^3R3PZ6%z=gEdq$fNy!y)9wR{8mh$oV8|PJ zCHnwIEMp+}WZiIctCxN2Ia7QBi8;%Xj*Wgi%f{PxZd7KM^cwYZugj|6M*t;PDyq%QD|Ak9q zU~p4m?_z*3FflNIU<@)0Dm4fk@jsvcn_2R~cKhGV66XIsv&13re`1!7^8dpuvHZWx zQmw`#voxD_rq*cif;x*T=v?PDXoS?Lp!5GPW@$l&<|p<49kcZECyW<|qVvC)r6{96 zY`c;Fj#U4fSt1bq53}@0Q}3taPz6Dq>-J(vl+)6Xv`j9x|DmZ9*lX(cQU66#J1`7Q zTO|puJu*w;$8`rO`RekKsnWO{j+XSCMvifKbn0mtp2>NR8d|Kz>44uHN|hd}l3~?q z`u5NX_-`)>n5zxyfhrA*4=hfGQ~?&Q%AO3lJC=kQS0!^(!?(}o4AC%p+5%AH%`7BwVx_iLGF->$6pt4az)LYg=9Ns;3Hp zXY#*Ab0;JpK2*Q9o*#;hQL-{xK`B@BL%+J>zb^1~yAP*|YV>(fNF)904{dQU{;Jfh z{xMw3l!r?h!!Z&^)zLN=cXgmu$#v9fz50moy;c# zMyYvmdrg@L^9G!}@&-%WKhXb4yQqMQtZBzj`DX!D0ha2imrt7g=2vyL25_X(I)hZv z?;+-9QbDjGPm<<4xX<1A*=L=1g9f{v$a>3VM){Piqf*R#!NWYMmml{5#eX-JX>A+$ ztl8wUd%nDWD(rb4Kf1HI3|Z8HpCxbd{{Gq*^g&9a5#7x2HGZP*x5CJ`tbwcdV&9(s z81GgZzJAUTG@!I{;Q06FB;Aw0KRO;#s0#KY;*QI919D&dy6ArT@z>WWK6K3Id7rn5 zC!hJq|NQ!9@(PV1t^XQpBTE8w_zG}HNJE;J-2jSt^^T)7O=${VtA~Ri_nbQyoE{-d zwu=I|TH*!Smz^hH#SmvOfITWl$w$Xor~=CgT+|ec$6I3OM$3sprpIcm&SGT z8PXYsXM?lUREVbGIa+y7>D=-$Z-K&&!vt*0xoVUWX^ixv6 z*gMuYFToV2|0iEOJ2E?Crs7%2B&#jwWL~(yx_sM_ASJ6iS)5^&|Fg|LG1-`c49r5? z6HHdruC^*m=J9jxL$OVM%_3(|o}_i4v@zJVnD*oP7UEDRkm8F*48kt4#~hvR?2els z)0;1IYB(R|JXH#?C5J!l(4#Z2EB7ZWMsml^kr}U)d9KvBwlPrh*g<*r{;($$uqveg zQp(GZI?-JSR68E9^WpBRQ+Juo6^PWL*>Y0C{VtiHR*ZZ-o(Af zY4rtFpx9}Y07!gdeK)&4bo&FwIiY6z7p0T`NK*@)ZfLV6n7RF0f%(f!k5X%{5;hza za%)aIaBOb`ES)ms9bH(ymZ%vanrNw5E!X=&y1BAe)%pE2(~ZmD6o#H#>lBWjIdoMaFTIj_8Y%XT9{bSHWe+wbv4qj``WZ~ivm zS$WZqKZTdyALgGY_#56{)IZ{23z0g3w$rsID*sJWvuU4dSpHhd`_NG%Hs^-L)VEwl z)G5vvtEXT1Yvtt}UxRYvnQ{NG)s~c-Fkgv5ygR^fM|Kbv+j(F3{p&<1OtIJpVQ)>g zum-B%&Iu(aKfMN&hzbS&$+}i*QQG^!mZ0#uhudrI#ny*U$3k6Wgp=ZOkI`C+pBb`( z-u_bYi$J?&rB{gg+1~%5smD9|KVuO04CCosAu5kQQi)s_t#N<$KwG>6_Ybp}}+4xBd5P=zM?7PV?Om7wynX;(=W}-TP6R zfBU$0zxOET@3YJXzo(@R99I6ipRxRRooADlA%vcq4JZjKK@Xg$>i$|P{P(j?cks+~ z{?}UnznhlNc8!|$w;Mw2KfC4!zlN035B(UDzxg-#VoN_ZRw?T3vC67EO73QX<#3qh zwBpLnfvsJrhq>0jY(GH!#io*aF7xIOboR*(NmQ_n2=lSq@+5ub2Z?+JPciPV^WP|b zh<#*YA(;Jh>XZ9-YBlf=9*x#91iEJXW>f~(ObsMXp*?Bz>V~bAEV5A`*uzg&HI`(X zEsDA)igqK4{yvJKhv^?B0%nF_4Mni$AtGucIX4iz)8Wkb2;HLyL9^&31xIvX6rX&w z=n09yM)b%co4|E6`U`|mIRN#S{p?WF5-gAIp4!b7ffU2zOyT{Q61ZB2IN6*J00<&Bs|sP zDq8u>*yCfV+|B9&`V#eU#5sZQ4>!PuV7oBf*@TJ_P%RROeQdnMu(dw zl!?31lg1BpCsg;K%0(l}Z zeWK~Sq}k9{1o93YJxL#;PzxutI6{CH@#I{69KbMOVQ}6Rqf8~*{_oV*2PX$jUZ`URLf6;q+41NqtZ2SLt z#w`YqryPH4thyFPG^dBkE z{(u6im39Rm!y+Nmdw*~15S@xARYH*8b~u~I=fV3N;_CdN6mN~7cth}HE>63abVS)(1m$g}0vDZ$t3D5q|9czCVq8YFc9Teflu6(&aS=BRB|)1ZXrr zWE}zh`gt%K{giL$`Q4Ab#Y|Hl*}>m8-?qm}`QFO@{{8*?^16@QTl8P_4c=}f7RB`E zC`=}`G6XK`$u5Fe6u1{dYBIfxB(VqXxGn|#mlPPwzOOw`xUwA2&Kk&sDdY5IAI|5@ zrkBKT?{bhNI-7TpEOn;FoWh4SbC4>tM&+2U@Tjt zV`YC@onei5aLTmLQ9sVts(EshdC{*EQTQ`W1qB}TK z3Fag{%A0DkxSFPxO{-MoM|qqCzQWb&-y;Tj6cwR}oN=a@2bL*yv1Ch$W@tI^5I{ zA{=$~r;ARfE+jYGUW?U)=nvuRDtC+k2A?l1Q!_U_7Dkg4 zCRq)$pc52@p8AUv7aPo?3K=c-sXWz6u!*<)k0nl4%Tl^@3Llz|1R0N~Xn-h(6&V8( z8kuW#qhw3N+X{8i@-&$wTjaqxj1%iq=epczyQLsiYf7iMxL-mkekaA~@T8+pveaLO`$L^uvIugp#^EzQcwRk5xG*g04yllWY2#-Cr;w z%N}1{Egp)hRagYVz@2q*a^j29NWEspO5fsh&%GW@(nx4C%_l50so=PA@8ivk1bGfz z5b-iTie(K;!4+BuTY6SRpSG*Ycl>{pQ zHueyaX4BKJ5iO&oaNs&h`>{Y!5MK+Q9Zq=VH(d_&J7N#R=@Zq8VoUT~ab=Zgf3v6^ z{_e0AMyY@b@30SYcEsVbkWUGT^@BEToa#tP>YHRWKR)EVE# zM)KyB!Xl|bzP-g*)s0PQqtKjnqNtWRawGC-a-8cGlR#l4sCNRMwT|lJ)qQD;-|zvd zx_&h16~?&@Ts5;`s<@o>5 zKORt4YBEX)-+h{*zH>UXb`d10015V0yaxCxdZ-CVV>Dh;Uha-U-R+2N9{ZObLQkzg zEnT>8l2c5a@Lt5Z5NCpw@T)djBs6m({VnncjA@^JFJosujMeUCIWOAHy0bFyjC8`1 zZ=NMp`^eLhZNmFcOChL*)q`N0vK&2rz)*@5HAVJV9{8y<#!;3@7IFt(hp= zA=G8;W9yuSX&G!})#}e-`xxhDNHgISDRfUtT_60U&6kmk0q4ow8F)qHeAD%?OW|Mk z7;Xs3P;VpM=jZ7XSbvxs0OFj8k^YXTq$s*hcBDjaPg}w3-o(20!s}7FJU2rp7VDNXD>7U!Yf2h3;72z<@OpD%T zZW^y*r#ubigK5A?^WNQpY-$paihn#syp*%I7iBsnW%dUpH&-!-MolhSP*SBfP*3U= zWG+)@<#Z8&mlnk0H+GtFQGlZ+VP5bJ?AY^Q^oV|2Y4>khGstAL`VLPnpV*Q7ukH4l zLh?c?#{8H;KPRTu2(my@ya@h}rtMu>@fPL=Io(a5N_~VxP|5E&tn|iSDpKSHX(WCT zL*)%LV-?@MBD5!>QGQl0d_PEg6R2LxcP1apQ?fPWxGaS#Kv*l- zO|zB!rB77D1s%UWZ1nD;e{}Z@2=l6dgT@LZ6@QzBHDuzqA3nd7b#rWHavUH~aUI54 zicOlXqn|T`SBpVP7;&gY%?tT)n})+A4Fo%pk_|%o-QA*1dKQ(8Al$tW!v(Sz!g`Kl z%GQ|}8ELOTdDh=LYyb=a+PNxbKVAqK=vZXK-?f`C>07>XvEmT6TfHM&idL~SG;C)J z^@-NG84mN?Q!6Nw@fwyTQ42}34<$49G%_~tjFi%XA*-`xELFzpb)exq{~+A5DxLe7QvP`j?T0cJ@J^tduhi)ilr~(1+iBZCaJwfcIwF{ z9tBwrBMlai&8%_rcLAp=7)AUL-)U8gYPxw-S+h`!?EB}Xz_>BzSX^arZ*^o>nJpEg z*iDPK^+ufYie;v9(wsuPT$}<~wfy`&U+9TgJ2dz)gw#-pW1M9%FD{X&tVTqFQ(uz; zX9@CjGCaFSRr=}b^Gjykpztt}0C~YoGSF*Vd_p#HbzebVQ;7Agj@1HECzRuKB{a!Z z8O)D!3UE;yH}YdNY-NJ{jMTdgv=ASC1>7^VVi4huanHln0@%j*;ylxgbmGg>f3`wI zz-kIc*UO>Xq-=iZ++6XULbcRXFmk&A&@~HnNS3r2jf6p(S}?KqY@3HAe3li7n3*qp9X0~ex&6~53{7QMEi5L5lCu?<#)!Bcbh^bM zt}2l>?Ba(|MQYr_9CVg{ANl@R6)hq>D5>Q#0~vL za{iY1p9!SH5#q+Ic&k?eY&HKp4FS%W#2IG2@V1TP}?W(s_4rEirC5#GZ0!Z>q$z;>4 z0szOsc{KX6Api7~SIr>Js_vdjkmdzjLo>2UL;S-o=?i`@Tnk7eBo|)*acK&MJ6S4b z$>2_i{!)ebb{a$X%EY#cJ}?P+D2vKc>k`Bv%BqT!Hv=#yCF)m%y;UG(LSCX_Gyr|W z<9x5P6{71*xl1zrw$oT=C(nu_=P^nHY|L!DJ;N_uxn1lKdv_)qMH6E*=;fM=PNkV? zWgQNl1mst)+2uIo^oc#J9fu*7_BF(LBReGXs=i;}_*H^`ry@Ai%}~sRStQ+R>qL=Q zp40zl2qIS(toXdQnwe_}w=%i_mrd2t*8oo+*Iwy4GbZ#@$?rG|!S+C#!U<84tOKMe zIIR+)owDs*bn{fyQdvX|$YK$Ta8`L@R26I|ruwNuEfJ7pfEUno38dpZjbhVs`6ZO|75G%OOh-2XE zQ)SDtkdiY85zLqK-&O2fUtp!j`dD;rMhK)5xDnuvx zc>yrO1iC$s%uFtX#M5vaF*F69{(N5Ls~>wCcI{YIPyL#Zq6DklF09`AK__CYd zVx80;YDO08$9d4%G9dzPUVpX5CjCrOdYc3CLio8OTyL@(a>*c{b2UYvh7(lKIlhNR*9>g{Kbe7#ORD`-p*n? z0Md<@R_P}ZyXz8_hi+?ojxo$xxapGc5d#w%d1Dim11|ANj-kp*O)_D9#x-YK z&Yl+|m3v#c?q*1vl@^;0$=?>wpZ?^Vr%Vv{?1W|k+}1n!em<8nB0iRYP@VWh9*#fD zmufh0hj#ha8+vwT*&l}y^G#LmOv)1qRE>&?%ReZ4i1>nj@lcPy!MRPSQKHg(WSrkm zqTyj0yDy}SJVvs7tls;0vP$-jd17Iz@k#1$pxeZ{SV{irfgKq@aA4W#Pvz_>F==6a zHzEBoVg2@wF+gw+ZtEzdQpgBL6v{2b9$gR9xp#^Cb*uJT2~#?(XJqv)hYakktD4UKU51Y@+Rsht*LRQ zWb_!GX(>sc@x0sPTBqL1A=6w$7J$sYB50uYu3+0xhOW!AtWlzAx3o!Ls?D^Q6ReRS z6-MJ~;e2DiQYqmWV+;DD{sqSu?>oL0x(dK>tNxMM)HOJ8C*&E9vv|KSxXtug+_uPJ zP;0z7f4v4t^RCCj7>H0Z%Ea6>umN!95Jq?V94FM`2dCx8`IGBPfctMngj=R)Q0dHZ zFMvORtg{)MJ!{-=Rnr|4Dyl0o69%x8%a9JEP*z_L51eI|>p0Y4cEIoMF{5T(*v-Yj zbSK-;zty>d?7IMv{DWaKKY+U;wlZ_1sPD<~T6fxiDFm^p`v^ z2_qLLTaAmnQGSzWwMZvg#Gti~4wR6Z4WIM+$i8mMzG6y#G>7`}(Xi9h-E~$5dxtC9 ziMjhDXQpNJ^2bPW2lkNd$e>`6m7S0YsX=lrq300Uv+T*@=uSgvBcu*saYr+(slLgi zV9NM4Kk3-z<}LoGpB#3$nC?wL(?BO#Qa>-F?Fu>Qr{w}Uj)QE&E84MQ{^wA$j1Du7 zI6<-XIhF2hPm#vC!?|Y<^$oJ%=7ktp4EMaqpk;c_%DYW(uj}dUCU|u0^_2-shGXWeTid?jTk>V-)KO^v zSTaNA*ikHb)r@J;3?Xz9k0#QKe|8cM$crgC2_M%?D>)I?Jc*M%DeE~&O*zeUI4P7p zE#^H<_;8Xhdy0H{T26n8(XYNulId<(VWlz{y3}N-0YU~Wy*QDHJ`D;Et=HtxSv;DGG$nW8%ffS z+fHRb*zvPUTHHQqY?MFP(PAMS0(QQg+{}NqJp;9Q0#i|*D&N#Gl&LidF!gu>Rp76h z_9o5O9e+&w|LAbg+t>O=&jjbwdVX>6LM~AF;de==VOhhqXa>KyB?Bnb@Yd1i*1q)C z<;|_r=Ud;mxAsr(eE9ByQf~uF??U8m!@u3W)V+KD_AZk6-t+UFSLrR1?>-vabYAR+ z#7?X$gQ-d32VGQ@;Kf>*5{a|0=TzoXEOm>eyaUqiWG;itm3gLCWDiPjTuK;9PkUY<4G>z?Ow!v1fCQpH&4OO&2fOz zHy*DRfvKTR^vsfu)cw`)I=*roPt$_$#tu)yddiEd?$gBqYpz#BYrQ{{X9y|SHh#!|B`b1B)*v2A8nHc(IlV2v=CMOMX+YD_n* zv}y9ukj}mS1{=^&k0Dq_6bp92`IyIFdY)=yO+#B4agN6gB^mc-7e`Mk-UW#9n7Ju~ zSG?`d(Q4_zKNnSUcLx%(Of~>njAN4a!g?Dg2?oGONC?)Vuh5{B>pEy(=wc$_9~(@aHS>XcK}5}Ft$=0{;wul%tB zP4`ONZ=%G6DOQ)v1h~VFvbb=oghpuOBdW|rmXth1)xO6;n<^Npp)EoC3D5{n#$Ofe zz|LyACgoq2=h}brvpBUq{ZyA;iK<(c^+lPWpayHt%zP|G>!--wib=QW1vPr{yrQ>) zzkE#!RB=lT|C7&jW;X?~GH9|XkqqHTIH;%R)sR?}`%cB_l^s6K4_!DsObU61wbde8 z8w}*EY<4oNlvoierU?wtva8`jsj;g4Thb^#|GKMfR$n`JOaP0+FqsS;(x6JGt#daO zRqxU^5mnV)bd0MgOB3g~&Et9T_CyyAhMIp+ zVA{{ra!a*o@+%E=*C$3`sxs(rz&}$Prv*PxF*#eZCX&zW3ZA~Spru3RsnZKih z#-zfT7$JfuUS3weN}3`2MA3oq=A#zztnQd1&{-!;`s?Np&@%Vxettu_mz=We9UqA1d4YG#4GG8bF&48q680AFle&r?M zM>!14Oz#S0N{lC%Qh@mDgJJIsIa?W(NizVTfuy{IiVaNtnBoJ7%8RUilBVH@^l+1Q zcdxP)foPS;Kq4hlfa??$#gheHlMWduGZNav&#Nual%q(a1}!?~kEquH!*Dp{rz4m8 zao*bv8Z!LH32G)5)=G?wlj4H4f9l0 z3x5tg`iy>a$q+z!&46nf(p60k*a(uGs#Jzk%txXEZN2{N#{@TNEB zv?$FnjdsPX#(tPpkLJvN!&zPnSRPgVp`q|##SO+bv_|Xv0j_G2Dv{Y7vC9`78$3>i zfcM=ec8)u7ykfH&)Urp}OK^E!kixB=h%^#9Y-eTm`8C>Ja$Z9+O&Y!Jp@wuD!aR~z zA0Ur`z$&0J6s{X3{F*MQ9cS~`+F-cSUF6O4a#jodPlKDxj*q|kT(7r@5Y=ma5t-XC z>j0};#FZ|W8-BzH=tEk~>A*TU5Z&S2fARrk=NQ^7g%u}_+~Dp=vSgH}QbBzYz3)#= zHs-)`Nj&(j1iqjt3}SPFa-`WKpqijrR;uXa_Ix)FM# ze}51lPQsD%>92KI@tl-Jku9azU?81LZ2_*!RFE9-FDZ^76meL5xFRtv&jBgKmv%HPXfdBB>JBC-c4&llU}%clq>(|( ze_|#cqsH)MOYueKEAK)mb+lcuiw~-7G2=@q-w2YGzyA z-(TqRDZ%&^{;sm*HvLVe+7ksX%GM$5>BSr;O*98=k-p~$sYSX*b)VHa$ zTVdBua!v)O=vo4^&6dM626e`)(3MQwPl&C5!Dw=%IAba zP$?^xW)3W&0& z%V8Qw=6+aD&0Ia@cz!Q}y(c>!wBCxtvWo}? zca3t-%*PNc4v#&{NCBh)Y7`Vv@GgWny^jH~)GGeqd%j;(L*lf023*eFk|A+}wp5*~ zO05pX1xeM zYsiO8Gs+MMWN2~dCrxnyT|7!3Z=jXp?IGC0vI82i;#%+QD=MifqY9yZRtv(HC^S)Y zT_&dJmp~SATJh70VG1(w3dKq!KQmSx&W%UK^ckVBal*}W(JgMAz#>in>?yFfhMGFp z=df(VqxI%VZ&@0Rs&anol1k(La#U1mzs3`R8_hP^3?sQg+P}jC&4L2hjM%~APyS{QTfPQAEXN2? z>6JzaF+|msG}Pj`FZ(?~3hq{zpEqnl)zpV|bRwy6GGoU5tDCk2;rT|{4t3U@c*-97 zB9GnnD`p`=K7LY$QPJ!>Em2)igHW=q5Uim(n2x5-lq8zVU zo}R_&t6U3PJV6W5w%>iRb^0-L?9t1GnS`?>V-l`2+@7&Yu9~+Ni0& zv?lzyM`H~pw#cTofkw%$kRTnwjR|`w_(6(!HNf&CmWciLJYVK`bmMGq#R}}fP+sek z^=TR~)N*NBG2aHzsm)%q9hi_P0bAytb#}1wWRlGEW4STpY`L;};80<4+G+j0{Kb}R zm0Sb?VJ;1%x(m;6>V&zfw*q&cvaBxVU=wd&uI1eWUp;Om9jMkY#uX~R85z_x3xt-q zBJr8B{!pjPIw`fJOMm`eJwCBJb)qkEs83J~`nzF!oPhyj2lI~UL2hk{x{~PU4Df$5 z@!@b2Q|Lp979quC6vv8n(|b>HP=sGAq5mqLzO?j!2jQ?u7+ zb=+rkwqdvh(XtY9>+DaZ*}-_hZ30aerDx!yD|#gY7B2syLq66B)>N z%*jhsf_?;em#^X zB3GGo(sA2p%5&0aK1wFxwJKp%ZpL^2OB+}Z(~&$fAUan6cPMu1fL%{bknv1v(z$yy z&E1^NE5EX;$GPqKLBWZ*PYpBwuVda{MEK_fMD>+;*%f~-s96Tuv$4;N-%W( zY9d*yx_G$F%&nI8U7ar}`7^~DR_Bvk6)XCW_IWj@O?5ysED||Mb@8IpXP8vE&8KC! z@I^ggo32FdCRZ-TBub>9UbpDQ zn99Yt$;AZydDmDcW4dcf0BDmj{bj-A76Zu?YXTi8<=MZ~w`;EE)Klr-FZR;i8PqA$ zWgX-6a=&Z?DSL_6Z{MptkbI~iA9eO5SQA0wK1KU}z0?t;P+N+RI6hvYcNy8ev>Lx` z9U|!Y>W26?`|5w98g4RbCA=x}ZNNsyx`2^?c=qQ09>1W1P4^vKQDdu}rUBT(&9;Jn{O}@$IKAVO(rS_|-sWTACt< z>XE*eMN-8lICD&a_u~?GW?jv7{NZ4*kH56zW_|zMY1SHh`J8hK&C}CSZ-yePETXq$ z#+=#&HYY_zCdmz!sSey6f|pt1Jm|`tWIzxOPO|l>!YYg9GTO;)65R z7Ho?h^byFTrnUC+QE|t)ebBj8NuR2yM(q9++_?G0>htR)$gv$q2jg;H%71%v%5@6( zkl6RN!1zn_*{LP%qFWUJVE}ZT?q%}Z0a@|*n>)g^Y6D)yE&1ginIGTHeqzSaLfjGgB*9B%lp+3aGKL|MIrwN@8IZ($3&dhbM!vU-KXYczi!*a(&iNOfSI>QaKKFHb?z5Da1*E0V zd$DX5&;qi5Cm+TdCWRzg7dxlYJyQ8$uA?MT8a?=sXCl#F5C4;@#rWf?u-@g%QFyy} zWxn}sR=s@#hk^F8=hlsebyuQm(w5cnmtBNd8o?-xBbeUeMHoHP)c?!Ls)dn_y!At4)9YaW%&!8CBKPKcx-% zZ+YqMl6+aAn*ph5k)%ypU)?0kp2dfjA9gYSXQ-SA?#(NVkv+A3!b|m)oIYc5n=}Q03!B59DMpwnFU-nnFRo27l@!hBAmO~*;p9RXzP_ps1zc_0*Lgp zuDPl)ZSG*HJ0ws3_%pY3yy@hU?W1_O=lToY|L&RB=i)i(xp zTIL7}WEt0QjZBGmT6%~0JZ_w%O^~az_1o^(^5!wA&$$;oV7B5eTN1%!+S$pHZ8=lo zXQ;~uPeg3Uc&)jgz8wgs?eS}*a7`9=#sp*qbaua)MoP9oIbwj>Py!R zCbyg_CiC9~0r3u6%G)#(cDg^Y8H4eaXkUB+aqaEHr`M(}JLwU6>p!UYbz9DCo*cOG zfCPc7lCfAe%~+c!4>BWn1BQntN=#3F{m3lslybdMzb33|D)*gyB9xOwf~%h9ScVB! z6}a~bR#y|H7pj*NdoyoZmxh|2wQ_E{Dx#D%RCijnEy^VIPC1)S;_g&^Ca~?)CA}HX*x~0^lHdsq?a?_WK5kP_pu-eLmqxc)ilwSEil%6!%F1 zq3_0-#E{3nKF(eAUY5%7Z0^;epZjG$g#Y)8z3-|3`(g@O6C-- z@0n(2xYl4gaJ4G2xbNZUKX^2mUN7OAd@TRsCud>Pi!7x8xg&d+&pCGZd-2lqM3FmK z?5a(M%qh2(6b!!fJ^!aWlI)XI0-s?~)8X#n1^q%y#H4D`51mJRiMwTeLWVCz z=$hkX`gm^F9>}asdfp;nwM?hY*gteTP||ZhH_?QN0Gf56--Ha>*XOxK?a->jJQ12J z^eh{8FrKFM2>N!_+W;Sg$v7{%IbcVeVO?D7BNPo}(?|mUs^T;b^-kTk>DIWZ!%gUtR~03)xhL;cc&=ZAi^mW}gEzD0p4PYWg z7)~lvUvjl)S`^7$xLej;-Z8A?PFx3SL9;$%qQ@hi3m!{YjstRCt%o$T#9N^sFZq;q z1z(3Ac?M1SlCy3m@)~B_GgO9T3XexKG+h}9KGQZ%ZxhJT+lNVnBs)LL#3_rLJI1t7s`XXH)d&_IW5~jH1rHQ$n^)g-2c7f#i^8;wvCZ&V)wAc#;73Le~270LW&&{ijvhmKbB=| zfupC*GDL{ZkMGp-J>j~!w1@C_OdC?Yc3_Z7Vac@Xq0xPDn_$rqBUCk4fN^>QeLtJ4 zEx#L3-5u4bY(TT(T@Nx5Vr9W5Djl@QCAvL?Y9hDu&4dS@XU$Y;*%~BiL5clzlf!}d zozbp=L%`SIzd~E24019&&+EiZ?h7!@N!VO$0hv2V7+z>rGF2vgV`;aeUoD9>Xv`XX zq|wGl6KM{;4$hbgz8s59u>PvZnb92QeIUzP1Q+cfSwpRB-2Je$J8bo?xDq;M0aSEbL$DR~aTCOjq%HqCP+|kDN_O3Pq@44E>uZ@xmhd$YPkj zOBs3~WzkKI)&Dz(?GSed)3Farbyx5x@=aBfoD{~yJrDiCIro`ZmYJ%}N1-Sf%AJgj zv%<-(A|z6>oj{ zIrklMEq#LW956OPwS_Rq*4~dgYRk7YEk*_CT(_00ym`5KG0yW{=&U$DL>#Fl;XwQ= zIy871N5$)*Axh#^ZVBu0y}-z!cb1CM8unnKC*wogc!`u(jjsNYRCt8CPZ-d|cjtgGf zEIv?j?vdU6(ezWS>7$XnL;Hkf`Tg**6U2Z-0+aiG^HvIZS5vbC$wJg{i#%>cAxdBP z8eaL}22-NpY&ccDqdTswDQg+a+*eg=#^?%O##sQk*Ql@Y0+aRMTpaaH=)cyDJv@8u z&id8E^kD|hCI+Wl>(M^FD<0@Y(FIs!v8|70G|K6u=`=BP;{@c=(_Q}-mV707%Nt!7 zD|8wwi=Qbe9>F|BDF{eojCTSqb-G2MMG3A$w|TEusRn+tdBj5^ll8eZE~F=qbV^3# zw7+6V<@?CTm)>on%YeGv#f&D8QKVHS<2HbT%fA-FjzLdn*yL!&dMxSY}0)SS~KkUWs2+@!mVOfn|o8z90(Oo{2vcHowiOjhH=b?(7xL7-0|0$dOL0atRh8C>k z2ALB0ED4D~ElXFZovU5*6M}gpivXFHXTmsxGr<){Cs;z?;~Pic2o)(=6w)0P(OeX` zjaSlnV>0GY*S8ZML&={;K)u`Hzhw51GbH+CiP$oVUJ@#L?nsnON>WxxMmY=_?+TvK z-Fr_+)Q`F6LeK_Ph-|J&?d%9f<_U>a2-EM1=T^9j@_s635Q^I6Te+@K-g!^5&3fMf zg-VEv>n{0ZhZ3M?y*IaFa=zOqO3!>VH5iyYJx=*_n1d)mKag<}`%=0;%Ro_EQ8>26IAMEVlq+liGdsz2MtwjytIOgzo6}n%Xs^yZuF6T=m z%>*>Ayx-dU`rbnSlFJjk|4f6H=hj``TYP^)U)5YZrr&(@9`1kPG4#N3hwEi5x2Ly3CuSMih+d?jVy_HnyPl1N5m}}{T4DG=)s4S z35fnaankt%FdyAZERjEOx`g9gE&W#D!9fRZu+0eH1p6T4+_@^4cD!alRj?(c@Znb2 z0RNNmYFOlIz|mY#Ch-G~ziL&zWqI!*Q7gQPXnIlYJYD@7V%7flz_OtTH&2XIarKnJ zXkM(jkR2+mWd}P5#H<+Q<7(oc9x7Y9x|{Q(2gnk`C`q5!cpUQIu65n)7D)J>nlLVq zx>A$6DUkNDChdzrdZ)T}t3U{6MO8bW=p(7TY7G7M88Eu-J?j`1NSmF_f@Q0jo?WGzkA%r;%R*k zTvbVxI&!)eCtiy?t}VEI6t*&9N&$y~_&rG61Jd>^iUk5(fOr|_#HdLDahj}4u1X=- z59r%{mE)BI&eaJum$7yFnBmYA!Sbd$zD%0>FEAR(cz2kq`@GQRHpLUb(OSRIi}8cV z=i^xIAsDv>0d!>eB*r(P?zM=^ka29A`rTy7Q5IvoamlELiF5Pq(Nkg^f`({`8p7;R zE4F-el8nKABf1U5wR?@0nZ)#z0Lv~d@vYbJlf=(R?d>kZ0w(dA3e$AB_|fb4vBW>fDoe2jIa{ z(=h$x`2D#+bMquO92%xe)nh@tGDueCKWum!>{|duIph7@U=OF6jurP5 zyNT%@{_NV<-x88aRYaD*SeR^;5@EHL+0zXi9uKz;hV%skUwOE_`>@oW0NoZ2!G2~b zC~Du1SoAFDURSWpX=Y!VjhKplS}$Tsv1Zk-@legNvY53crT(uu zc_B$R7FDG`AM>npe53*MMd-*ag(K4;(^tFk(f3DPgDwaOJ<+Q=HxVoMvJ|7)2DjDm z!?Q206w4l{VGsN5)n(hzT(Mv3TfVJsgO+0#XT+MNyVh~F+yB&++esY-GI|Z%ch&Ej zFM6&vxkatfIW?zPt~DjX4*i$&=xe=e*-|b`sLZ{FVtfz)UO|uUqqj$VmNFjnOQJ!1 zF&gHy0h``Ni#p+h=|7Gp_hTyEW11>^-vWG@|9;ojFLTH-j3M7JQ&;-dgWt!C+I2pe zA)zutgrp!R-#+S(fz0~+;<|2m$Z1}9nFaAtyGtN95E)Ac&$Y|M8mxIGxDE@nkMVSl zriZE{%~^}VG5W@*m}QUU&@DsFqdvfm zaFqWc)tv88P(amr9f&q8ZUxjjt9`1Of2y%uuX<(l))F)%1ndx7(vCee-l}jdYIfkX*$TH)%=S21^ZiFool*vFOi8Q zNQS-~Hz}bJQi(p%xlSdQRNuv872hIRr4F>+Vhc%TWhNH;!vs-Fl(PK7oXkl9u2xNf zwDPmlPu|5#13tSa@b-vmonHB`7;Eeqzm+GVjVGtqB=x9XX$mVbEwA3K!2PJ_XlOKK zL)XXkQL+k`@ZKF__EwqehiRRlv5F0a52fDAbPcyxj>(b7*F$E}S#92fSVc%Y*@s*{ zo>8e%Ud#NFP{^rMPdXFC2rX9zPW6(CmyRsp%F+kE0Vg~NwSFw3r~K>I6WGKzxbAvL z`GVhb;nBIQ1|F?SskIpUQ#r~NX>#P=WVY(P-Dx2D+p*T+Oi8Z?zLHxEp-Azo4IOw-0XjouOP={oc@eI=t&eY(|pg-1btZdHPQ!&pPj;QMK-&^qwP4odfC@i`93a_Ve~L0MOy&NM8MPF36_HlHS?a4)lge zSX}@Tj%PE!C-65@w&=qrqKLtR*^K5<)M;~i{3u3s3WyZ&KW{ZwUP5qumv7c}2!jdy=mT18me^5cXg}+fX-IQSc=m?AT=GV@8 zX+@7aJ+#$t^>d=u$<^}}1mDGbZ#DRZzlLA+%u8*5-(v9?bgQEH<9%kQ?P)LSNs`36)c_subH_2BG$8#d@bKHI;2bWDfoA%{L4G5 zik{bC(Mla|;`F~sM!~^U!N?WGyRQU(4fl4B_M`Hg++rm+E8EMAJZa~WSjMutkp&fn z<`zKKRV}=>noS3drNCTpy~{iGAnJ}es$|WR5+hUVaytu6yZMq@@kZpTk2?Os&_Com zEr~=yESvo%IzqwC=@Y(+@2XOV@UAq{KVB;?=3ahUqx;IOVA8PsX-anxYYn;lvh)0E z%Bst^-maG`2Q>A`#_GRDY#vV5=Br1kCd7hF%$0#OIvV=z( zzpOK$i3oQf+QUCk?{E zKq#$#H$DOYFktetukoQo0Zu3c3Tk|Jkbnz_CM!B(Y0&gUx6>lu&S5w)(|oyY**%#) zkGcX^d*D8e5|r3D+gr_WHK@?YfSdGYyBSsMm8<6{vP0Y}KeLM-+H4rx|O~@(Vw1%$9Qs z5ue5wHd^}@XpuB8^kWY?3)g?QtqBBo*d1fDPluaeQ@Fa{p`V=y&lTT3Wy@2oH;_Pk zyVZ+NF)dKJ1&a{H8zEDT*cA_uIh7(lNcQ}dw!YLEAwqV!&dh^qwRMs)?YoBi`LM+C zRS&e-Iyn5#&(njq|CK(wUOxlRJ5&Zu<|9ap64)zb4Let3sL7anKXsZOxgll9+jcQj zeqkGcmVQ5nc$gS%N3s@3Q6MTk7b$llx(G~lZZNAzvl6!PQjGZOspy?2>=8; z=VMxQWJr$HdrjXtWHVa9>@=*_x3Q9ENe)vo|0;d(YHJk3m~w%3yc3ng%!U@jLWH%4 zTpXNRRqHM4Dl@w`jAObP-X%w&dYwd{8IhmAJDS&PzNbx3%D96_5_BrY@Vycc;YAy| zw^Y-#!OEMbGF>x`7_5#85o)p1HK#RV_dBv1<-_SysFWG$XLC@bb0%+XLQj^>>SX=| z5_AO4h&i9&$x+-^=JL5pgxnw4EK5t)1k1?_Hlmo7rXZiJU|(yzmE;)&+iMDRj}`wo z%!wf+9!b{KPguK6lo-Ys9de7-Dd%PffYb~yP#(m75{>e=TZ!qJ+%EV8*x=nb1!r_$ zP8%|5Of1-sm}9x#;><&k(8_xkyS~;l8QYn_P%8j|jp;(lwTI`ObP2M=qLoevaJt zeH5og>DSgT&uD_`efNoWZWzPPJVa$OpUdQ!D8VlI^L?tF2XTj@;QnY%qSbiV= z+iK$$4~rUjhy0$yjb;^LIMhe|O_Xz?3?$3TMEB3xjqyy&ONAwuKJD9m=b@QUfm{T^ z^_vo}lYO({Dr;U@3~vUai00uh8SXS69s`zbCQJ)gGi}CwA*mUff_yb52Om%QCs~X? z4b^sv;mJs9drGYz2sW{O9b>12-$!amU|_vJL%=TkHj9SbKvD!bjGI$&@n!U?K|0VF z0|5W(lRr6016hN8!+!P^ot=i_YOgoz(+md{=!xmz>^C-Sf>RHm-^FsZ6MmEJ4Az(f zh5hSbaI?iJUB5UE&%-PoA!J0^>VD|u{Yo2p3yjJppXbX_XVzy}4N`^7EQXBAn=jj} z6?6ihr0rrzu$xZAxpF&LY~}9d>v(!)6%Er9o1d)Cm98eM3GIE9P2ZQi)Bi}>^z%o> zz?>L^$?@WE?FY)IzsGMWpr6V}QXX?qlocJPW>Sy7lip?`sxFh4Q^m4j<>KXIb@>7e z-2@C^on7CGsY0X-hE@343@fYygkk7u00UIu@AGzbN)cBL{Uoj|Q$A94r(NwI1xC-m zoTc8T=Ff$HpGzY-tk$Eedvq;6on5icr~Z0$+Ike#a`lT=cJw(JrgP78We<%) zs#kludA-ZapBw`fEIzwTHEoQ32^wOzJx$B&+n4?tx=^&aP-VdB+W;oF?cSd-$PIyAaFJ<#KXVy0Gcr zTry$CAa65|TMl^Rj7nQ=utrAqd@lT3h5pKU7SpxI zDG-WYRg$0P)1E;;inbeQpC%^Hl>1R;70f`C9(oEs=)WCT)K?0bD436xIb(k%Z1C? zW%AcV`>%zl52o>u7uU^0{koq%8@D%umX%`|Y5mSyGM*n#Yfh@l3>g&nN|8m=x-r0} z19Zjr%7q^uPA*;Gk%WG*o7PqZ#K@rIKPI00&KvUcXlRakHoh7AQpcH2Hh8@qANct2 z9m70D$B$Hwn;r4{#i}!;7bklp9flXH_@N|+(>GDiIx4Yb7+A%ZH3K`DeebWms1L|@ zG;nkN>p*uA!QZ4}aO{2Gg4N5iMCyrJ9t8Wx?2+!CUtsJWjN4Z}=5{OZGwTM}c{4fl zPCF=ab>@}#hz+*;$@ll7@0l)sX&7gTlj(;h@7Vmje9IHUM~rpSk@VGQxy8aABycIo zD5=$fL8R4Xsa6OrL`KiQwp_IDqvvBTfkpK5v! z@>PLdli?{9D=$YUID0yxZ!|Opn|bQAjj^$qBGN6$AR)lYn8xM&TOp{{<({m8MKs?U zJKu5&z#;sv)xL%e{$OX9QTNW3TrOc7#Wn4|G}WEuspi8<(epsEYlAj`#j z%L)d*#w6yFx$-Pwz+O5LVH)u=jk;H&lv3N!MWn(kf)qT+B**jLnL0hh>Fn$)MTR(- z6-xfT93odvT}+lQrV&$h`v=pGJeDoD)4`vLtNSGT9yT2b#M4WsgoHIxDMm3UKy@`= zaI&GqUEJ;y1{2iFkF2r2kW=PJ-yMe$gTXuMDGnS7&}JqFarp3a)7ak>!_4NWl52_x zC5RVQt_aK_(cW*Q{kYollF*Pl%*Z^b)deC)pX~1pL8f&gYpm)VENR-b%%!6 z7Mw{BfQD4OMImypC?gb7d4${}%`1V-k1)V!o^~i^1t8%n$e+~29KRz5)gVu%n1=uc zuCP4w3+HE^(4Y*)$q5~ED5a#t(K{INxP{NAb(kU zB=tkUGU4b3ZB=u7r^!LvnmEQ4B-D76AMy=l9cR-%j^wW5rR77r?81M%nttNo&UG+N z#s_EJc}*aZOE8R3s^6DWlXF=dwv`my|K8{0j+BhGcSUWAgZR2deq3LAm&-WqL8_>C z9_hEBPk1vL=Ovf*^_|B(AtB0E zq=Fc)y5xzZx*FNRcWL{!p{G#G1O%jG#~}r)ng*)RPmlPEKVs6R)+BbJ)P|x;vVcC&Pt8z}`1yAyG7xDRz`tL1` z-BW@!I^0*;_wSSZv;Y9-{Bmi&I#78&Rp9zb<&yvpi(8JhRzCIT8JSxJs}5=m0qwS* zlaAWD+V@oau}{AsNIwE{{4&(g0Jpvr&=5`q9e@&@N!*N6xsKy)U=l{Ag2jC%>miTi zfRp)0v|74UMJ^PA)061_`IOnjJaK^-1&5GU%wDnknUmI|h!^YY^GKWn{#Om}>~ zaV7P!K;_iJZLro~%JOkl1t&+!&BjkjP*l#D_JWj79)h|D{g`XlZAnUZU+U#Mk1~2q z!DC2ytFhpfuqG;bNM@=M*sl58n4oSn`vl>46bIX_Ry#N|;4!HVq8jats*^ITKNB7v zr&O0%P65n`^-G0p3xPJTJ8b68ZQ44lcTH^G2imSN+IHpGo}OEsFWY{We)x6y z;ZGA=(u;?`rR}JK?EXmGgF5Y5FD!Xv9Nxkgo0jy=>KyK^IDD0Iln-)LHg!;waY8d) z90w3IFJ``+Ihn{fTdX))F*)1FxY!4|n3=kGr;*8`Pt?qbG;rzNVU56rpK_PihadiE=Hoi*$L_-aUGhubUj7e8 z_8;X@(e0XNvr+PlBFys9*EoBIpum98x68w0%nESBN|IZ|S2jfizXhS^u6v5`9my3C zG&@88ad22-!=T>_nt@6tHv?Wdgw?dFfLPLy$S22E@g}T-1@WZ}>86kuw#_{4 zo(7kbQqmj>q)=7H>qg0JOHkN7D~h6?lzj>|A8RH%pT}*fy8sem8OuEHi#kze+li&& zoFt?8zI;JU((rXGa#waeQKN@bjGk~nnXm7pX-knlo{g6`MGAX0s$GftQH8`ge%7u+ z0#=tkUN*T`fnegdn1Ua1u6aLHjn%v=cL%)Q2g=&c#WNBHzqWpjv#;XpiQqU^vktl+ zmSmnvpBvY|+AAKytXvt%9wR2Vt31ig%r}Ho_RwD+%IV!}-n^A2n?+K!(`ax6IntiiD~=>{CQ=x|jdO>xD`=7+b^5agpNU1w2vFKVg8lpm<1Kbm{bQ6Dkr+PZ3CPg{gb_HePVNW-g~C2J@H}o? z8Fj8AT8%Q?B8NUKS)aKeFz&=qp(-IOHDVOVth=`iIShl(oZxxFvd~CNF$Lvy`;zK1 z%P@k6Ley>19n86OYq(W43K~p|U@+$q+k;Cp2k<1keYz?uIPt}XMg%PD8cPzY&_`bcJ6u`VKK>< za&<&b&27mjGHcT~ZrJeO8dQ=8FMcLEbtj(+ww3sY&nZ{+72vn|tHpmP@&W00jZgIP zFHZO?HJ)<$J-F7%`)z#Z@o*gUw#%pvz2*e2a@~P1+MUn&=THkd()l|NE0|}U@J!}v zB2bg`R>6#Q8t!&-@>58R!l6_p30RD9Pdp&0U0UHhCAwHMx$H2hhE_$5(K7OCX4jSM z9uOll)E0s>$<=tJ2}tNUD;&WIE&a3@dh+T7o08qvk~u7gB1;sXr}=dCIzx2sN|Trm z_-5JU2s|7o317HF6Iw)(0JQ93315u-jQt@n8w9=~TQ17?zflg)r1?2k0rP*1o`3Ln z$?ap!Y?7glwxz+}Wqain=kOJ`{uNJ~=X}3c0>j^iDqjb6y^T~}jkWPKnY$DJcQr$K zEhl`fpugxE@xJl0c8wUmUK`$9(!buKywSnAHpx6wGVC+-ekNy{UiRP1-v5aBTp3?Fr55FUtbaeZzq}(*x>HDUEbyqmDbDHL>S4f)&CatY3@(ou zW=AfL(!0tL>eQR(+)*_R(BkXtBpBJ0Mb19+bM26M^zlT1Jn1c(^qh1R$uJDP{yX{X ztwVXo(dvJRKEg}d%xdmPf+FJcqhM{PpNBkz`1zFkd+x`ow7zyKG0=tA#j45l zh!hfiuR|<99P_xPG|{xhGmcw18&>{T?WY~~MZ&m6D98noq6-%i62+xi!4RCJcfXc> z(aGyNi7XDBwvKT`Dp44zP1=b`ipiC++8>UWKY*Ih>)62UzgiCEI3NNc+>fKu^FKo@ z=a!^8s#P~_C1xiW*CmyXhiG8_+&eJ1ynHy8nqA=ug#=+V5h85ammpCwp30#Zc10msIhg^|DpX38Bu?i*y4pRi zk*Zq#l1B848wip|tbzvWYwof$>?qA<-zdnSzPw9sOo=cI0W0x!?8`(( zp1AwAB36uRGiAt$P4OrvtL0b$BU@c%3y<^dMcO z|ML8J&iPv{oeNXn& zL@$nw*%5`}&RWWxPY>-A9$4g;;s({Svk`i9`kHQJ>#z&}xM%3@6Pe8f$25g6laA>s zVWUZ+h61!8VbI(PrEbP*79Qx^6U~6U%pi<19WM7jx*N7@A@}ZYL8sRbVwOj%w()W9id>VAry!+nTP3u$*%JoPVj%F?i#=`a5mP z-?FiglhvI9$T382${+;2C7?)-rbP!^^*NgXv9Q7UI&4khV13iDkVivv$^Lr;)>Xnh z6*$`i;s-WY47xfl?P``!i_PHLUa3%>VCivk)$sEh#Arohd+Rm!>4nbQ^b(5YH`8R! zOk*%oguTX~aiv}LC_tXBd7Z3cl~>Fc-m?1|L61Uwc|y^%l;mUA+Q}XW^pT)@xS&Gq zJ4&yoed_eaUWinXX>oL#h#e4$eTZ#Inm47lUU>z1FZs#XZ7auR*$6CDK1M8(x~xfY zwvl3-x@{tao@aeKtXp`3ip{eHc}P%}(EX-18Z*?>30yXP$Z1UvBp0PEP}4G~$~hnG znerH-GcF&eK%dqRf-^FKww3KrHd2E=MX2B`_U*#vKV#R|dj6V2&qW{nHM64s`E>Pc zSPS&FGEUb~Cv-peVOr1Qh9I<$iLXY6gtp2vo2q%=iT>;2ETupbj{3T)6dV2ksDCMO7ac`l3Fa+TF zV};e>t^#SFkVu<11o&FW=@! z>TPa}aRR-F3{Y<3l6D}41)bo!kmw{*!TP#86L#(3W#-yD<26q)Avf)tCb+%z5gLq0 zG(Y7TT&vKWcNh+m*TdHl7|HLjV(u>bW~AVpIDUQ{!KkA$GN!g+q206?hsBKI<4XRA zm?^y^zwAm8qM%;lv~itZP6Li8{17~2KJAy=-ry|!*LBAF$S<$&n0W6Qc-D^6KYvsN zo`!InbrSL~m>uT3UkaXc)$}i1YN(QakvNBQ_b+;PTqXM-_?1tRfAO9Ozs#Df`Wg2d z-t2c3KyPwA6|V7uj}6tz%7k&*T>etH#Us?O#EEngsgj=}HEOH`gpf)~iK1f-H+JVW zWZFoCPPqn6rJ$dDB2YoUeF(o5wt#0dzE=OrQHf+l8qg5L@zgElw?J+K5#x}&e|?T9 zLfQR{qotBUrv!~q6xJzMAByZ?=eb*WlUb-SIQs1Bma^%#aQiY?l?j1w50;Ga6pt7r>jV(=w6UVD!$O62u{C9s=00C^ z9sAv4MKeda=DT%Z$@d%V&)ZDqIWG9aj3${d22>-qNsM{Vaa$Z#YjIDUb=iEeqS;X~ zF(TXCk)Dk*e58f2T3vczb9@ZN))F;=p*A?yjhru2S0@$=<9CQZnlzyLD^SiK&zY8G zt|r#IPNQwYlU9*J(L2*VjHSOOd5&cufc$7x%`^OKKTj6oD_}95{{=Qau3%;EjXZsF z%4ff~I!=2f1|#xk?{S@L@nfIF+l%c_Zkh%t6gRk7PVwD31WMvPr^YS2!KJu?u2|3T z7cn0<^aZ!17|Va@%iyv|=tIV6EooJ4`JTQ=&RNR|rg@~04jmEbj$kmwZHZ(~GO;!@ z67OaKtdI&b@TVz*cW2{%RIy7J9@p#NnlL5B7yam;^fw0>b{VjVAFP3p2RI8zw_Fhnenc)tZ+?326O=%?7?FlCK%=&q-X+`_8!q^B?7yZsTH|VTd(v4$Y@(%o(6UE9icX z<{bkmRFqdt^YxEh{JxXIc}SMNHZpD@iZ1b%qJzej+_n>cBvqExU4$i!cBGeJcbuFV z(Cd-|RXz&Wav5`>;^%$*>dPOI7dXmqs-qk>8v_~mk%QAjg`(a7=A8@;z1VR z7RH8Q@2+`DPkl_m6Z>xihJgsq7#Yft$WWbVh&ntJ6DWzvRV6WZ zrHD~Y2e_{JAy`T*&vb#f^x1ll+BFzI1FS>^CC}HLq zV$B(zE*N)dAoB!}1>FxQhhX7mk^cty79%azyHwCSlva4QJ8z#*l!KO-7>@BC1-{pD z-xnhoB$DNR#q}g;ikCCnkAwcTgulxS05&sFZL?PTL9K^4nGyGohvh%`x>As)z+2fH z^B7LH$VPnQ(198-2K5hzsmw#MIBxa|3EJN+Oux?6WG9_*6~Kc@@IND_cNw&oD`KO& zv?1}qrxnS6CvOgLDEAG8BJVpDGQy2oxDyy2)CbAr`Lf<6^O;}*`%B(6Md0#-1Pu_B z#bsufbfkI)l;q_}d@WEbV^{&vqmvZ(0TF7{!a11x^tL^u+dycmi{0Ox0WJBAjSy@w ze2=n4aF#CeA10d+AbIF&I%#i0wZ!S;5Vr@2=pOTqdc!X0&!nd&mcDb_fAN~pH^@B6 znSGCdtNE1y=P$qPUrKuLi)eO zr^kj22ML_KSS5>4A@o!}psbY>_8d%ybkk!ezN}oA};J1A2LPox>{5;n`bs>be7{cjqu2z z0w+HU;sRx11bahHVI>hbn&fup{*Ger%Hi_h24L z;UIJAj!=t(@a&J0HbiL?veY_=?#`Z&wW)B&PQ*8hl5pnIE=S>aL)RgKOQl@|F%mZ6 zd*4fcd@8GhroY3MYr|-lB%yI8f+x;FqUSOn7J?;+&)d}XxlQO1jPh6*fnmYMQC0R& z0->vd0Jkicwp5QjlU8F;dLhZgYHVmFeOs(8-Q-LPvm8g)qQ>fL3)-o;M+{>;lm3-h z8sSu75~i*kc$Xb6?1!!>0OH41Y$sz(+_1)yf!I@HgZu4t5+HdlccS++3Rg(?I3Q+L zt=cE4I<%L5yP`V$sQSlfZoYrzGtHV<_nLT3orJiW+_u9Oq z+Jd^;qUqY_N44)NYf6RcDtdLIHS4mE61fsgs;BGLbB!7)uj_mA_1e~H+mDPolIpwa z>aiX5U2p5}E?4ylH4G>;4EB1ACN+$^*N?F^OszLe7uL^)HOybuzjkkY6V^C$)UZ0; zxUSi_c+|MY*0{me^j@LqgJ#o#P}8z|)A3~_U3-`c8l)Xz^&;;fjlpA&=of#&Ui?i; zxVn7tua5S2VH~MP^DU}o3gPDZkY?)oW}5mJRO~IZR?T-jT5cz|Fg$KyD{5ifXaQ2S zg8#HYXIl6^x4_w3=^wWW7qvn*TG?k>VeD-}e_DC9+ECyJe3~RVTOiGd;LN=$j&-7{ zaJzyQK|`yZ)3O~?pQ}~Wj@)S16z}T5QGKV)OsCxjF}AuiHb!k?7nIvfg6uVfI6X!kb%j%PheEnV(A`gjyW_2H z_|x5AmMWelcgGcVr+n_t*yxU?>dAZAo%5%=K(QxZxF>g}r|eHpkz#N5Mo+m`Z=pvo zp}x0dqqpW|Z|&ze_7z$qJFs$nWJ}#keb5tXUnSFsuCSLcN38UpOw)G$0ckb^M`!w& zO)%m7OhN2@b6Wjl^;Hv(U!EHFZ+Pg^Tf%S7_6Cc(-f0c&IQ2bt08hQ_+n*VDzgN;P z&A6yIaH93!>J5#=>7{8|-}%gcE5Iilu>PQh|89v~>m1b6c5bwN)*7U0&^~3g^`teM z_yKw|GstMIy?q}ySmp7%zMtuMXeg$lX(+0JaR72P#NVg2<6r()KVdeq?@#iuM6p&Z z1Vq^4sTgN9^y&H`JfeK1iMu6pzRU49!koeld|5xJ(lFY1W0KMbH*MX<8i?pV0m1u5 z&5AWO2SGVoU?MGJP|H~GV~}{tm@`gOR|%vw4|?8Aq7^Z2BtE2s8~4A$nhXM$YsaG+&B37_t%=BE45S%2wm5F852n_iG};2?h=YcOCo`U?8>@nh^rwsm+p=*}+WH_B z;i*z34Kp7wL3_GFX*!K$x>iXe%?D)aV-0FJo^Hm0)V|f#;bwG}#(VmJz3;}mj%S=u zARF4*5s}$pZIEN7{(lX#3yxruvbbZ$N`YI%LY|0!H4#rzHExN4r{<{a?bHFm1e(MC2G& z8(yN_)4Cr+M}bMm4D~-4$wOMvXcrES4-<^)ZBI!`$F+e48Q`z zIvV@UgWZ|ZQvJ@q@6UcbIIB@jDl%jcD36Hv_36=8@%`{5ct06gCpr}<2_GALtf@8*uf!qZAm5mP(g@S~dJB5JyHZJ_l{kqT zW_A0G8pTP#{@vP^dP^+C)(UvB0(4Ugd`qExO~bcpXsv~ZWUe}<-?Q2iJb4qACmI5A z)VB#PN@iA~{lLDNI?q%XBHi;oIl3OZR@#QD3AEr%wI+DA)8C+*9|=7M;NKc)DR;KF zMQ*?^{@ou!Wb!47{_~N@)Uca=ats0v-e(#6cJXd_DnfVq_TP*`yqYF^(P-U9 zj@gRB_Qkr^gHGlDR!2at@7*3YGgY(?PyZ>pLI06{d8zCJDXfWoF!_=0@9$wQ=hdwL zEM=I_)Vz&iHiqFaIZ(rIG0gW3E?&>z3NqT&v!{tXi6;gDf zJbHKQt;;EBQHJd!Oja0X2 z=PWo1u6K>xV7?%Gj=>?D-#?u%1KsHRy7$geY`PtWE_b-Rl zBY{7J;UjHf4_j~|K%c^z$jXAI^^t8h7ec5;5fTN23M7yv0bca9z>Wh_)D=5QLP=w# z1nALiAhqM))dUh4{n>&5SCfF-Y8t=+l7cZ>pvM8rP*XCMg=2dBm=sL{viemB+!x zl5J{5Tqt4LIK0jOcqt+kj!8wG-<%=nFu<*F9u z!rHgUU~3?0vxjim$j32|f&kaGqb=Gth0n4Anyo0?z(_#~iViSD1dtdv>*pa)a!V88 zC4;D_>qr2G@|(YC1s9yl3Ra|73R!*@$Y-xx3Ic3m3ezgAKu8f(u+{Io6ZFt`Q#mHv_Q@n@g0Yg;h0}H}NyEb5x#&bPiutcNTK0=GGC*lbcDg+EHsOHjI^MCEev zb6M6m8#@HX&P5^t#*jh*X^#K6QV@ldGhE|xWyze?Dd~5~u)vR;?l3vK?do)sfJty+ z6NiqK^3>#`f9_7AS*2fw!#COp1dbp}cAgTZ=RNPu?T7S}pnS}Jyg3kgXtpx?g&teiUv~&`rEbf z#sE&BDuE1k9LO*3aSKue$bgh&UqwqHg-r;MfJsQIF9^U?<~4iQ0&zt!`B)2AyBdL0 zuvfDW7+#9r!XCCBqXV@kg)x+x6VR2Yq(=mt#ru4S*sL-p0&oAU$K196@vCA`gAN=Usu`n1rbeK95Er@sRt7eZdv7*Q`{EXy zX0`AkmUbO##Y6M$uqEajY~Cd0Mjk$p>DqL}r0&q%>}7DFN{i*sbE9>uwO9>L9OHF8 z@;A#sVu>{sdSa-D8;1VBqF?K}*TSCELLRY^L63fGeWv&DN2+}pKG1@GPF^yknFKUS zs$?_>JAyk$ZkAUdl>G3(>i5%uKvTV|ZpSD$05wf)*^?9nqtUM03jZZj3*=~Uj3|jm zB}`!yQqCPEyDcqJu)}bNB*2pGl!PrPG1I#z#Gk`H`;u#uv{ zAYwQb<#GyWu-uRoAF9J#Z8{%UeUBT4&!P|wq)K`eC-fiy_IE@BpE80fdWAW z&Q)$0_)KTWUubkVTUa8B7H9n+OHdO9uS9`rV}S&~Qo{ESag+dyqX}!(Ok8+OBmqxl zlz8Hi8@d1DLX5E~08|U?U>dOlTkXIF#$a zMO^4aa?mr0#fDwuM*tVKUJ}G+%~vP0fiS7(I6m}nqLxcbgdgTsJ?@Y)LPA#rGl{O& zR`u`;x}yYJfIIy|ZS6xs-LpT{vUTakjgR$z?IS_wMhcOpRFrgs%T@*m=OI!6J^yD5 zc=TD(h-xfFQSC!fzTi3wF;|H-FeqnQ9adflG!mgUL)QgYqjiJM)Cz1s05D}5U^hYJ zAbg~kHn$L76%|K8MgWs=J7r)k9wK#UH9dY5TLji@AJtT_LNKfXkapD$qSbqnMID^e zSZ)6hQ_>Ozc7;G&;8x(%B7_wIh1Ea8k!4z#GAHLyIf+y;5=MQ<4jFkZAc-|ev^Hf! z3gMJMM2Uf~Qx^5mHqe7@*wrBvwL3Qlk`u&UuR%X|H3f4s5CnsJOvF!8;7x1839BY` z+rdr(F?TkzW8K6{Tc8E0^bkZNEStfI;!zr95g3nY8ot$%nnZb}2S;+0L=|F9gv8}vXsAU=fP0)IU)4B3+{H*&xn)>{UG;!qtr>%}ahn}B z5cE@hyd#&cd0e%&cjWJk@}3KLj5IrcS-vkv`023YieIS4Mrw`A$bO?Jd( zTTpN6wMR?Ce)$JS6;x}kl#G=$dB-#`C*(ItWIMuTdG^3%zGF^B_B2P}(c z3rny7CN@HggGQV1G*h5u)me>}*)41qO<_o7`DdCIngsNDg=H8`2q9m_kwoo~N2aqI zr^A@v;TUpyD~t9inc`@vmITz6lYTcgtgrw}fO|TERIaw6FvL9lpd$>!Jf{B`bnI6^ z<3Kh)6pI8ocM0%D1YkWT0ee-LscW+%8{tv&cBo00LKU?{QZN`1M1aVKK2bmpKb4bG z@I}^^HU~6q;50&@L2U8XInm`Nv@Ndq9 zjAWny5l~)6wH>bS`ev}21SQwcyQX7yP+KTxiza) znQG)WI0#~g;YF=S0GS|VB~oq^C}fRPnomeZaEoPyBWy`T0BjI_c=$*AHJi1^1^xoF1cSxR_q5cp@7i3tOBYj17Mzs(|t2w=P+sjo z3bYX!WBW)&XrWwW9rb`aQYK^?Hi3yNeWHnc`sF`cpr6}IUQ39EY?h^?u%Aj=iNq&{ zq@<^6(;noNfF7E?`)8m9v877jq;Erq`sG_vs2NCrOIKJR`$K0qg+^$a67RG~hncmt z;fUk&k4W@S91yV5vZvf(Vg%r{vq27&=snG5!Vb5yCs#X7nQrai3ZQX=4n}fLLy%x} zshy{nT6wC_YY)6wQ)43#TmWhf2F$F-T6~?f{z2?RWyJIgg`;O*D z0AJZyXvmYdBahI_vEj;kxN}{76|_TJFpNQ$VHB`;xwJA>&ACYsc5qU?!jQ^GW>O>( zv~?yf3?8KcneP#z1tS5O#0p>tHQzg4aKz1Pwue78!gflB;VM_=b(2RT)?zIK+9E}2rpwo6T`HI3*$NyGrmav58TOh|)+d>8 zh6lA)t;sD1)52v|D20M}0j(NyI;WG`Ps0C!vvNo1G)N*p-*mD_WSg13LxvjyegQY7|8%~@9}8Al`*IKuOCWLyu4(1X@0bMtH(B7!4!biw6qTFPQ?gJf zJMISM=MB2`aIa?C4*I$ZX~ZMD!IM8_Hb>4pVBSP-gp-E)a^6i4ei|T?x-U%rP?RO& z=Di)B0X9N+YtuL~QbmZ%cFjyFT%G@1BK`5P(zIA9XFRCcSUTde0YW#DUQ;c)Q&@vF z3yDxYcULT_&ZFfs219Lt`9H9FR5In+*36Ov(Rqy4!$0M91;dj{C$kk1McAF)tdSc% zGr4lvO=0;yW>ZK$$^}50N4LWYa7owH@o-yqHE-Jwam!#92sTP2x|PFH<0p;$LjZVG zq*yHw2v!D&HM_zGp(b5XYQukd1e?xxNy!8nWTe$xip1lmLKJ1Y1kuH15efdae(nH9 z+W8BmOG#-Yow#Kw18}*iSKR-!HMnF^ht_NW*PyL1y;A1Ysz+Wb#5q;Cp~tnJ_qTkT zq`L>3FZk9~1(WB4mW6pKc9zlbhK4Mpx1Z2=(*3volz=DNhd^W!YDLfl2chcH4RZ5jc=^HE2E%%*0JJR3ME-xb`~{ia2Jxu6SU@8)(dEQsa42cXLWtZ$DLHS#~=g z$O^9S*#e$B;NuZQjKmE37;-&eqqP~zOAys#;`Er0&_qe|7T*TeKCUn~$C!_$K%c5t zQ);!5Q=l@FY^P~CK$`!-F?dLRoUreK-wwMbmUoJJz$UDxDy+MiUgz!E(Krw~G9ar) zy8=;{eB?>H_EYjU8vs$uo-KR7?75mEfxyCrQb_r-$3@A)1Oy}`NsuH0#v~UbNMTja zRV#tENKH}lF{G__EL+)YBZYvJQS}JeBS30HM~ol|uykpUjFc_yT1k=8j=+{Iqik&= zu&GtORxM#}xwz1yq?aZaM$lBt-%|n;8CJZQk>S}*EF~!M$TPyIsstCd;gpsk(5niR zBz;5@;u|jFgXKT9#_niXa)Y zT1YWe+G@gIsV)DF9?YAB0LCbz7AjqulIy~O?Oc(1D}^wrj1i!+nvf(4SF0>tm72Xf z0#~ZWku#iY%irj=<;|PNXpx~ptx?XuhaX@5eERk6-^ZU{|9<}c{r?BBJ_QIEP`3dO zTrUYJc#^511{pF-3QbsHXsC;1+JdfySh2+w);Jr3lvYF}kqq4?+#)*8NO^57-7u5l zqO5vrkqoIyktixwNZi7qr8=^xw}nLHVhi1*B9RM8Sm9&}^(5Sp4E1(fFe`=@)PgR> z6jYD^3Kz<7#8x(ua;dBooRGwmB;ZQKDWq8PvMDAYK#NVjB%q9hbX!VG%*fbNAt>J) zWk)f|h_3&AXsi#GTxFkRl78e?-l`WivvPDv2#8lG~wea*!RyJ9X zlufpXBE&6}nBq_@6G;fR7;EGhiD9E_ALSh}dbqgb9VzE~+ zMQrdwKD8i~GFDRTNXVfWy0gM=X~b+He-M=}3Ksvo6RWj+tI#YRqn(05joe);p`}E; ztVFnSB4yendbP05TLCTwS(zlvX~c0EGR+?@==@J6L7x;hK#xBLIb@MXCb?vj;j1WR z0#rtefCyZMnLU`#F=U$Q?*347LX8c~J z8fd-00&l&uf{yt-mGdUtyt&KM`|ZLNdin3b*J^xdpd*KmZKRRP z^IBHia+SGe{XEY79$atF0bgBk&ojau$clPnX;#ziTRixgPbR*2xpJnj zl<#2%rCyMxTKomGC9LW z+Y{S)KscYiMUX!noEr5~*t!Q@%|0#ERrNeLihdx9K7H%n3Oy(+4U!Ogt&PNXwf5D7{kiC zq=grX&^%IL;~VW0$4BXBgdU^gedu_{El7e}Jwi$!uVxgTiLH!$nj1*!k)tR!azDRo zBGV4}sG5+ck$sz;f3)~U!a&78s1p`v963r-meQ0_L{NbUq{(DK3MsW{iE3ggr4sVz zj;F+>@wD}xG2}6V)00`2SRuw-7SouneAI+4W=xM^>O5Q61Tizlv5jStnb-fsW;Suj zGT4FgK68^B&Mriz5)~{)p_Gs3Y6--2G7g;~6CUN>$;5aL?s@yMraNi2k;O423R=*@ zTj~S3;ms$XYpEyT4!T2xA`g=2T&T(9A~->5;!R(B=<(KhL)UHYafADh@Di#`l9tq@ zPIO-4z=oeAp46ou>l+AfSx0u7&^+E_=u1nvQJaD+gE_4wPdye>H`WJ)ME#f&RX9_f zHr1(5ozE06_eqehk^m@lqEK;(L!C-4qI-jCSha?-jsi}s^7-9Y?USB+2I;JCg{xB$ zWS~{)$xl8k>(%$|*Nlhs%|xV;#p&jSSBrV`^#V zIy~Cz?)SN64sPbqOjg+PS#dZM8henG;D$OE#T-uFYb^_DK~LDDj(&2cHBGqYK~JfZ zJ()~!`W~{W7u4YE8be4?4?LMLYJlb1r~&LlA(M8z_08!L&nxTy-c&sY<%t|qQzq{E zS3Rmd?o;zwrSp)&D1Odb3VW<5L&x`cI@T@-JvZ&1YEajk2KS5+EKZKxxK5*x))+>y z0eew(lYx`a20(bUL#oAPQc$F7ov3LDXjKbe&sw^^j#;K8?IMlqBDEw|tO{tCWFF$GQlsw|m&HwHQ6Nuf~$ zi@{z9nKV-{vwWmSeyMEGd5iP4Os7Y+tTGu-ZsZJoYTxa)xs}Q@idrzozxCFQMh^Ze z_)w;oD30VL%hU98iaF4`F=KixZl^J5Vhm7$`a;<1Uv7un?tYzXU03PK=@CE^RA~h( zgo3e#JF`4rrulnXNvx%?!yY2C$5CjOEAu#o4f|dEm8LQ#e|V~7k$NVJu-#u|uB9mU zNRf;9Zh8)Z(OT%y7Uh?sz)iTq9u1?K;mcE%*O&iCUzB&?<4a+SQV=slcN^*uS#K!- zE&ghx@CPT#aFDobMfs{ujpF$(GgcU-XCic9EsU6K<(2+Qq_}t-Ts4(a?0d_GX?NT42>a$kXQ_~vaHz&r`zd`#*ik+I>0*fvRbGIW-$qY3NE=3 z9DtiZ*J;3)k%F~hg)wN1(HpTtqqA+R40d2Q7wa4gl$j_v8;q+nhTsn0`Lzvf2xu}5 zTi61i8=ewGw3U$r2;_p{BL%xcs2>Czz}N)6ktCzxr-fjLg(w4eup|O-3R3u)g)l-v zYcvbg91LuSs9Bu0LNORLLn0y_PH>BM8<79FIFBn-EFXMAcQFYra0gqM0>7{;hp4(X zyObv!Ll=}k`ARF+`kWFB8h2?2$6&O78bpP%!H=kkF=2@m>?r55wENRUm$EMBS-b}M zyH;R>Rp(A{oLER;YzhXajp-gMq;s&?6hFyS#f6qKm+( zRcnR6D}@cnHS!}vx!Wbd0m17Tn^d!@=^>lIOQWzkFPf2|M-jhSd9|5{MTR)N+G~f` zFfZL(i_}OXZ4Ab%`VC{bg_BSZ^lJqrXv6KwF6sdiShK>&gP;)L=_D!PF4Fr~Y>2D-wchzZBB8H=<>mzlfyXv2^Dippq*EHtjSi2^6ojg){H<}#67zpG@Po>zwSKWx;q}Sg0RoF=#I^(3kIJ<%+IHM6pr!We45QwM{ zsDC1i_QA89n~ML!01bs}jwNALSh|dC{Z?CuK%G$#TD-m2CHCwpD z;vkPkZ3Rwn1!k3qTCG@|-~yu&R|2>NdL0c(48aC!i&j{zn!CiBI9w#0hdDzI?eV!5b4Y;1GGl4^->LS|9^R`bO#5 z(dzj-qaY^&*b^ve)xaYFP7qYb%UfG01DU=x#D+B*&8AL6>PUs_powyKpc@<+(4fS&%SCEL#M3Z_b$1PwMPoWb?!?|i~g=;Lf z=}eZ3Shdb8h07o$K|#NilnRYp2mz(uo^eGWiCV?z8GrQFcEAZ{xeODr(+(wo>!=E; zi3G-#77=L@9^x*>TZ@H+w$E`$Cq0-uA&JkO3CF_>1|0}7+JY{vhg#T#BAJ$%=uq;x z42{fL)Q3y}mN6-ivY&+c6+X^h(+E-3`VM`VRT z-l33zk&%5t3JE~hHt-dvD22CpnmPkPSICQ{Af%1(jD)DxPP)s2#Y-z$91IjV`&hc& z$k_j+`CK^N6^Iy$Rbvf@FbR}!j>4D?aYc>|t;D}ro0FIb(7XsdW@5Lrx~o!-I>3r3 zh%uQNozc*ukKhbAfnzBkBfIptiU7ejz>2d`K@GGwnIj7VY|WXJ3#VA5zX-y1m=!Mr z*%Xut&4`c~=?vrGPjP+PziDdKd%DTnY|Jh)~pD0x%6|jDl|DY0rp}OrQty;R&YPz3oi^*`pFxEM8|)-io$` zW%4J>@W!?HJGS9E{&4A8RptC>rN5r2*Eht}b1mAXG z1-N#Ih?syyv4tiD!FptmOrQmSWa3#tQfYJ#%qWl>%?Vq;R!v}=Y0}gMPU!#MZX{3z zrG7fV@(|a*Y`~>;iPVTZb_GG0HVcnPKt@y$?O_a)U>21$iF?e(3XIud%|KgwEvSSU zRxV3q(KCSalD7cc<;V##7`}R-0woXwdawoKen1oi=)k>h4rvsC_G0PqVxUP1O*Wc8 zOh7%!qRt=;qacY0Y&XEjSEHeciY1??Wgg&h&4y@+#Cx6ui)J~Lj-J6nB}jrGtOq0E zopvY#`Mrs01!usk*re40ksuWeRNKrZ4Dyj*mf!%k1VK000=3i;1!@NyN#_x3D>tOi zLgvC95?Fe>Z+6>=*go+s61=UwDoN1@Vnm&=(g}VN1u1B~XB{U}_0K zf|`IvDX@o12cx5Sby|q^Bv1`vlY&Gr3KYJYj>bX;fxc1z6fUR<8}g@CaD`b>RVSSg zSqdXcqY^&R-gUeWeZkzcuEz!F63Si_d+>#yuy!uEs?B>9Eih_0iM;4Ab=JOJR%aW} zD^HL1_J%N&TF^nEdbJ^v83o>t25t~88EOeu4$2-`f1m<7!4m%x7NV(WpIE{}K~;^x zr8*H#ZC*#=J0iCBpv8}0Bf&FtcBqBa%k=g0w3grVmzUeBstCJ!W|Z@l{}#@d2?+$x z>=0B4aos`P*%zXWSIu?>b|pq>xzHmOu71lTGCnZzZXn!NWw)ubF@_4}xH&wgQB8oR z@N5a=c8*%WZ_R#+uK#)*kM_5S0`_i8!U*z-N{a)(Ef2$Rl4Jj1xz4noiRK=NkaZkehF;lW zh&l+g-$ahQyf-)obIfqeF=9@br~XlT8CB}3)?_x;DR)%Al*;ypldxSW<#*QRXens) zj}Gaai@ekC_GX+H+vaW4r0ump6&=i%+%rf;X}uT)2q{SfN{H0TRhc9b2#~5*YYKrV z2gyj0LV&6jlF>M4Pg8HPUL-#Z5_>gbZ155|SCW zw0gK$3OjpSh_dp>Wx~@f?P@t4)tT%^qg&Y3+C(OC&x@I8brfvbsNddNNoulJ%2g{i z1akj&YH{In0v01QuWtQ1_UziXbMNl`JNWS8FD4*R{=E70%$Y_=(*C`Bg_~GECQxRR z0s=Z)k)qnl-dHI`G2ca-Y(dI>5k#R=8&fDSkXTZbH=8Z2Y_Z80q)?Qfb?{LK+$Oe= zl3RJd#Rp$X5lEqvh!>L4pAr#iL5@^gpmm}qw$ww$Ci?M66e+fd)T3CfY@kF01m1Sw zk2tYo%O(j7^du=#en?J>n{a_vj8a_4iaq~r7$}8`t<)ptfdqs(SbLy}NPvM#f*N}z-mRDM~Hh?7czWu2RF zWlJjp&Nn2J_+2DPL#=Rv=!5OiY3C+jy0QhI&3V|=C?eL{+=;zXSJ)Q0inPTPiAu$& zds2YOg`DoyRS!v4Jk&=Q@1ez>rr=Az7IEGmL-I!7WQEZ_JxGPO7U9Rk0$OThU ztX9vg9A-xyz69j^;duS}`!B!&3p_Bv-0@l7Lc2!A5@v&qLO?quc~npL5BFf_4BQiMnn zs6ZdM7sR#L;|f^>va%i8hTDfXaLT=*nuYbFxyZ=7?@yieJ!6YH<)WQEBNtu#StgKA{MN%SxSh0gIE|OM!a>52y@F##c(U61& zaxF4t#$1$P;Q72&o&9A-UmhILn~-!Ja>YkVE2)pF77_tTkb!}%5EBWBx3zY(p?U7H zphDkx2S5lc{{6RZEVwIfd?lmH7&(iKwjFe2GwptMMmB&CsId@j2mAxYxM`7yJZ z&U_{``(@1X*vm4@Y)Woo=17$oC7YhRCi}GG8(i5!IpDO)Im3y~>}b<(1=7EAAVGnvG@XS}Mio^<|6nV$P+`nn?-rcj12Xf$X+{~6JPS|^{x6HG-& zax~^Or=1HMr$%X$81F=i%Rl|HjPQ9!~=`+@{yo>Z89A|qt@wM;&(hhN?N z4NZ-5D-dO>rr6P`2Yt#Ednq+vk+JDdt-@3L;m?Eqyy;cRLsboGHIf4Tji2HrmMDEk zsaA0+Wa_8EgjxTUqPd|?dCZE_pUTxTVP(oBY4*_j@d>R_ZL3oIs;^#I$w{r?k_4gv zt~Sh5t?BtIbK;XC;8d!p+}T%B+se|-a<;Rc9gikhu?a0mffS=)g%-p!JCD}$p%dL( zQRbA{?s_$0*h@hA7lkv(ap@b|4wA5M9fdf@R4bnSg>ixqL^3`m`bk& zS(f~Ha|Xe~x29}i3#k>4NhLaoGV{65e#TCDk|2q7tV0V($O%={++&04m0&~l$=2S> zR`1AF!=u!&ivL{J`1~n~l(s2N*{Wz~n%F5Qf@q{0?bQz1w9;T@4`4lro>`Bl!RYxk zW>qK=P4l|fe73SyH$iB9!E~%|17}{VV7L^DD0DwoXsOQ)+0cdOP!OA2{zVzi&S^D*EouzpYu7 zdPjJxu;%J_>K*X-hMK$YemKNg8UZ8-TNK8vX2dhD@r`r5wZji@V{OTaHsIwsQ@&+_^({$oTy?gAW*W4fP9^#qMoSTpjH4J=>Q5s&D`6 zz8(E8KJA|W{38hv32huW3z5+3Ldf-71qpReX{~DOsSfJb$Gf-$$8XmWmIM>-Ud)kD zGjiR&>agEi=wR1iQ@P&zs<4UWGwzq$S?{@_WBu-5m;6yJ)4{h!fuPrZKDS+O^yCkJ zV7Etj!E>ujV1vH>Xt(%Ew84&b(1Y!owJ4+^Wp_<0zF@U$iX_m{pRu1)WW?;aMtyh| z0d5xMDbsuzMGGaM`!y5DG1~-Q;MsMNBxu0~N{D*&%2koUj^JK;z?=u=hrKkK@G)BW zvD#Wu)%`f#PhrukwVqr#mQR5oQ>X@G8HEappL%3g6ZAJP>eTjj^fc?+kJ6D6IM5Kf^Iw&2$}9ncYBPL<)pSz1yp z-x)3h6<*lbRUZcCp~nRp5@f~-nwRK_%mIyr zKt#obG-BWx#d!^exs1seXqQ&>mL%8%8EjK1uEdHk;+Vi&Q{dk}*@$!5PHt!cx_F6! z#FuwXMmg0~DB|BGYSEp+o!fYnN(AFdi~(uQodGVJbWp@4;@9gi1sS9na4`)3XjGkf z39(GuFusgNp^I${hN3-U&3Gfs)Z!(=Sa2;~AnKtzjvSw);9$j&G>ZR(I^NRmsga}D zLm6$$3DYD= zAL{)i??ph6)RH^g!WO*PPF}_(O;%+A$Xp-NXQRnEL5Fk2&j|}cIE$&5~!p0)eblLMO%!* zO>Tg~{2yVAA{pon87*TaUIbFG0vS|Hw@jNWo(iZiMP}yHY}CSOl~ZnNMl>o;Esz1t z{ASFg$|NjJBcjm*W({XN1Z?U@EtCS{eIF`5rgV^kKSbtUh-TJcS3}`qW|9xy*ut!^ z({B>bDC`A~kOI6!6PsC7X>dX*n1m8sCp&pg1sbM+rd$2cT8e}r1n$UCwBn#}*hP>c zCxFT*X~8<2(L;tG_1WC@Y2vBzi4-Uny(pnNsz^noUf4xaugE2pm_?q%o({?e4T+;L z`HFj_$9{xJJ8Xa%J{8T}3ZKk`E6h`a)@T%Hi%0~?h+O~Zt?&y7y%&l$=yC*!g%qWp zxE&o%Um7-{&1p+L1g3Okl+<}p7S>#=)hJqN0Ru(QWL?BxkU@lo%F`jJQRJ1&(ddUv z5>XnZN=8LB*{QyympyEW1n7wj!rG-}R=XV?@?oK5F%ni)oZW zSM(=0B2?#Ls>=47W5v~tNn<^ffoPiLwH=6!G)YQOXr|zVZID^8_)%MmP`L=vwIGm; z^hl2s?I;P&i*QQ{W=1`@0hhR&9NosGNQuyV;??5BD8S;WWC)K)N2|yZ8E68c_10eQ z;73M=S!PXY-7N3)-WV9jDA-AXcuN#$0f~)<5=aS2{_M4cXk6uO(gu(SeT#vFBioLV zCQ_I@hGd8lk0$Vl&`5_ECDABs$%TxnQK0|J!;Hd_TqDzBOgm7(pN_%jj>Lyhnx6o-$UJ^+hBJYG_ib#Rp zj)VqK1%0v!=8{3zUJ-DZNld7oPpy*JCILzQjdbWO+qj44+Q{aPg6u{?k^W4aU~T$( z3454J*G>W#h#a6TU1F`Q|Na?b=0|4O%VGk@B&nIP)=p(!jeO9@_#6ndY|f1gtWg{m zbkvPQT|~wjDX4r*eJaz?c&1NC1pzQ5@_YnnvP68s5%E}N2baPJXCCu`6!EyGe_q~2 zS>t9D$;G^hLugcx9FJU-PDC^gQxN|#9Hph>42E?HR01ei)dwh_nSMu*P20XKB&IqZCt5cnM8pqX#az!;6v;F)q%DvcRa!*_#`6ExGD^{!fxak7h@d2k-C#j!WsQQ+ zY>W4}Nk?#kndHfXRLU)M#MYdN_BKS(9Lr$^(JIl2+8|1aB!O8l&FY33-PQs-9Lal( z3OT3OPV{YQ(F-SVCOgIAKvyEmk$^fvO0a>Im8JMH?WAvb2TnQprsesnXQY zH2MNS5)Um-BLO%Fk|>1GK+9f~!lEDwO~!1GV9F@GShg%m8|W@&tb}ch)#l3G7yfdM z;+3v^U0ta~qbkUXj4|$v4Mc1OwDd>d3PqAIB;~mBh}_U$xPtCtiIE_Qxjacb$PHJt z=!&qzMaa!mAW2>DqitmJv}h45nRQ5nuA6o*`7#y($mVYL6n$xsa!C`5e1a2Wf{9aAURWURh~NGXUCsJ8J53k3N5j%w7x zjm);a#`ZGlR<#-hvSMCr$|6ogh((A-u=s;bgvezN>Omw#X^9QVShi`BZw=XQ zYgwv-*<%wxJ($mh>_tkzO-$$PA178r&~{3Ii**u4#t4M~(S<$OLoL+V+Sn_Yc!hbJ z#9;gdD@?FDX+du?UvmkLQ%oaYNSkvxEGBigTxfw^l+F}{#%Vl|X)J`^HjakW*=C4T zN=!k;z{ZDy$v-qNDJ}*r0LT=0_$!-tTinPPxC4Gyw$j*wMSOUd4c>n7t6}eWrW%~f z(jx@gqjl&WeDMEC7F1|g@S}qy%U_hi6m-#(jK+$zco$*Gdo_fUV{L(i94EmN2UJrx zPwf$juePwlkywdo=7}WjEC{he@Dc!v%E`VG5>W17%=X`263RZ;gFyTR2S~vxq;o?s zmVh9s0_=03Hp@)VxPs_Ji+<;u5E(u4iPn574l~-1sosJ>OrlA`T;xTjh_sn7OKF9A zP`9*E%tTCoGuHZU`QAun)fSlp#gWJhluXJ}dXQ>(g;q^#S{bjtAg{rpQ==lJB&Z3g zZ=m~Xi@WqKH$(HF4yw}FNJaSVB0r^CFN>TEMOq?CVE|HPvBIR#Vng40-_`{{K5#qS zLXuuc;c5TIU@ph2@;JRmlK`I~#uczn959WYYXMg#T?U9?ltwAs2X?vwvrIvJIx|6U z8Qp~EO{4^9PQj>ja8WiQa(m{rNdOXz!D#~$2q8vXNb-VMj}DQ8aojNN(6DsaaByua zW-NL|=*1RnfJ+EZe2%q6kOGV=!4$Z$P0&S)Ym6j8b(%4I!x4-{!d{GlR2K$6+eYuMxD=QS%S(q{@Y8e- zat3$TwjLDN(*%frgif5K4uNMW=;&2|$pn9dNn-uOl*VaDheWi);_Q}D?1o5WCZelK zDbWA1z2dQ5FpK};DzUzMy^lV4;4;{4GxPwu+g0zgZ znz%9}NlBA8OBBepv`oRGltG=%5VP1zH!nFxXhu+vv-kKE??}asEQl}oG4CT%4eH>J z#^_Qv6{q>iKDUEFa0Nw}1+(Y{V?79{j|lN6`ZBjQnGgW&V}Dn00%H1GnN~ED_9Q?M z5IB$^fd~c*Mo6MiA;Bo42(X%}=V~XsaDZE=sguBqf2OrdsVL6x7mj3P}Y5 zEw*#DCBZ_QAvbF5*lLRsDfL`Qk&tBQL4gNX27M`^U{j|CZ5kyw$`+{vPq7{)x)A^2 z!6cFhptM}U&37lxq)r+<^DWEtIDLVpNir(y~ z(H%!yt)?guxCLlS$px8a)ts$e9+Niv4rdi(^UAfOcjG_i-2@uYZ2y-l{;f()TBbE-E2 zf(tG)f+Vqr45lu8>cR@+V=f6TTCqh6DM+zriwQ>Qr@9nJB8q?%TTx<)cKrWg&mu{( zLvR!Wql<0~>72T-L)(U%kg4R@h_5u}D2!5|RqA0yDB*@;CA&?ya8Np-;IgHS5VvS& zy_7hVqL!Hmcxj+W?BNMGq9UQC6`s1>4!20M`z{HBaEn5VS_X9TG!O;4kd$@`H4V{$ zhAPv

Er+Kj@@$5W?G7nRHH87-eue2bH+66?e{iNy$uTLGm^=+abllO)@Q2Ad}c+ zYQoKS)$BtlqwMvyVTmo)*kh4RR@v6BnvDQw-Lk2srpTy=t<9WGG>Mvqns!8yBuK8E z4J1>LfK5p1ZJ{X2oQWg~Ng9e2Yo~aLGFMunubs#uFsYr72pS_hp_KoqNvioG>S;fL{77KP(iJHIDOk}ELdtAu zlK|{m!3|6TE*mZ5rjnqK6gNeaP2++d5@@1^78>Owa^a2QHmcf@udID}BVZ-K;)Us_ zLJPJD#j4UR=&u+lRf$pDY%Pu3KNHez{+nt8E?6(qL3u62PKHY;(-!~BCZXN zmf~u7ErL*>C^|(~GPnf_X`nwr9{a$Gca^l>WMkXb(D(ve*7Va+PhIuZQ-A3t%C!xy zsfWmZ(n2i%gxnS~lGq}}Qn;`vl9PDaViQ?qhbvC$HaX0?=KTM0#XbVav8NQoCFR8U zxa{E~r9?FWsyi+mXIBzZTB+qrg4~O<=Crk7#UJ3M*kTk?Jl5>?UZu#8jPFHbAqvfD zYeGrU7B(OX7frx#aqS*$bUArYBKMJlV1jeP%Bhztfd*_fvu=ed|>Dw4@> zk*#-zkqCu05tpzC|Rh@Fo}Ae6kU z*@J4L1#*}rn6-#g#TpjOV3yKmO~GbDqJlJ`P12s6S&k;B1+&GpA}|zL*9%9<%%Y%3 zEx}Y8ML5WgMzw+z8vsx!by5bzfGh&%>qsh78JIsY)RhEq1-iJRxV^|TFr>*OLIxtY zCu#C1Qs7TUD2ljl9cG=h)L`4-A{S{M0C7N$zvP7_bptUTxP!5!#|j zs7(}aaEB=LRW?;J0?-)tIwQ{Z5S%k20|%9mlF#lHx7WIvaga)i;NeGbq(I+*v?rqz znfFcv{SF*&o7m|X*KE!eAuZ_(s5$9Owv;VY8l&|8Sph-EnS;$4rIK{SLP6(?=Oty^ z%yVAca+Y#YFz<{ApgkwCSH2J?*8URgSr4C;#3eTIiBWTvEQn(j>sSSg#i4}|W$Z{! zJkMxqb6g!i@}5T_$TSHDvO?xZOJ%r>2~7x1r$_}_b_?qzvuQWFfvmCY>zI#2lVc|n zt{`q%GA3cl<r6Lnf{#sHiTjHG?q{F7$BU-FyxSd6T~E!U6h%v8d5qOt$Jo5N zZuqO8PFJN3*3KaxdC50r95B(ui(x_lQEWR3+H{JIZN_J2jpk^Oj)0&v;W5$Mx#V^K zGO@^fG%NEv(2?$Q&5K22eO9IA!=iaVf$#b>AIr~i<2|NppBkADYxS9ao0fk+dFfA| ztd)LWwT2qE_+Lwsi{IF+=K;R)D$D&ZO6WNMpy873z<_uD?+& zHMruQW+MY%0{(Um`dBBQ4zB$FkY)AcjnA}f=WNd5{%;0p5Ot;r33~45W`pRAuJ2Uv ztfDU~evt93j_+u22x~A2m9W)-W zNYFKqOfnOa0c5@3Kt1;x=mXI#0=o@4)Jg_gf0`-VH8F|6SQp|x-Sn2 zu@DXM5FyXmoJ0z^01+LL5dGqK$l(vQ5D5~EATsXD(ooVSkn3vi1^W%=G*Rg`Mh1Px zG&V8i2u>fj{rt28DG z%0M7o;Srs229W@000asDqJSF3q3B8nD^!r&gs=!}@hMdB2@j8MdNF{?@fVwd@W^iQ zcI*i+X&Z%40(r&i3h#8paUCDf8>R3=a0l9+@gJAa%x;GBJP)myVhrkUFiIm8gHIS| z5j40FHBignMrRj6vEJklWR?S(^hz-JtgCJjG**uyjSv@=%;h9a_6mYOdV&IPt|Y;1 z9K&!kD3T=Y#?3?rt+0t*GOz*}QqxQ@QSK2Si8AM0hi9&F5K|3llJ2aAlGC12b#8}R z7$v&`?kS^kS;7%gzVFw##x$}q^41C~94|i*@{OWU|J0Hfi?S^t&ylWT6Sm>m@~t4i zZN&a*sNlwUwqO$fjOSfuN?H_9Yc^pF7({YTamP-hCOt#U9*r=D3Lz9{3`QY3c1p(t zg;t_~XvPp3&rJ(xWrHTdp6W8MYC$594=QNtarlx!wBSgZYAl@OAf!MO#y}I~%?K$D zDiY(|CX+!3U?MK_q9|qxXl31OQ8l?@W9G&Fuxu-A4m4X6Fri7|0EI6_axk5xe>A}G zvPqg6t8a`)3p62?;7uWl0xJB+tzK=l1VVn? zNF!Fs>5LG>_)C`@qbd{WH@>dQ*rk3Tl&!uF)+pp8HUhvx&L0Zp9ko$J{^NIo$rfTu zLc4M*?gTmi)6qktwBsqDWLM}Tg0#^} zCy&3Njy~CR@|w&bLxw7EEX=xXn*>BdIDsPo69gfSHbSPcnq!PO;kuN~7-4eto-brN zs+BZCBX+}R>c+3^ha)yX0jkU(qF`lu1OE2xPjfONtR+uT0@Gq|BMGA{*kJ)uGf^*4 zVoqX@ZYVW%&&vXJH}=LcE$$n+GEq6iHl2ouxTSQYpd&V+6zqZaerz}i;x2`;PK^ju z$v{;9m!`{9@+d+n{RZPB6Yx@#sUDCO@02Vt>SjJT;-)am;8fBtMu;6+G9kiJ^1Kc4 z0;f&s74lxkW_rf^C^SEsvcB$Ukd%}Y%D^3Jr0-5BkSgp>ZcK3WF?F0Rm*mI1ZmTh- zgDcPPamFBh1dD&vD$SB>DrBt-I${ZUC`ISbiE1R*jt+&8Abx6L6gnl`QWPA2kl0Y@ z@!X>pxB$WUYo18q9-<2~N;K|_)L%aqdbpqrs#0a?5CgRUFM($M`X^49HY<|Lz9^#> z{Kz?hWhsYiXPx3*r*ADo=qKy-Y{d#LA1QPyf?6s`7xhvqwB)*!qcH)l;!uz`I^s3| z9}^={Zuv&g(OQr*a#Nb#<}Koa3#MSb21YRaR3Q`qZurJu$R)}QGW5C(AqcHEW%D4K zlM_y2G{bB)O%pXq)8+`|Rg(j$Y{e!?3&98tG#}&(U*bF8M&?wgm!?W8{(?c=p$!TK zXf80U=61;xRW`MR3#9cjAeZAtr;v70Th7f{Rw8Ez4XubK&Y)AsmO~OaqFuHi&Mb@^ zCDT#^)8q`L3CR@AfX3DWrHrg=D+0%O?21Te z1yJm2JE9~rqJU8Rr0gifFt>v_Y)U%VMO5Zuy_%3>$+xyP(;g#IruPmriu^KgjHf4_+mV;$h@SZ6yQTh zu{1uYqGH=@wcw^USz&{ki!b-9eq`)0#u&g(l zPC2Ym>?rTmKq%v46(ffZW%3on+GmR48w>tP9`9;zh5bXHdc#XUMg z2^K&&wxD{nBi) zc4G?wadmn2N6w;oJR7g=Ayk4XP7o(`x5SC6VgmT26*d5Jv?!EnfdN4*>T1CjlIT9_ zYlX~a6SAX|$954ZT&ykJtkkxUI9JK;G9vK~8K;F^teGeOK$jIrVr39Rk!3=v6o
|6e5^gLR2ZH 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

KyiZPOkP84JU{uJcjr=-GB0t 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

D@Kd| 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

h7*LhTaWmQ;9Ez(AgKEoP>?x3{7Q3PWnEDy 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%0AA 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�N;)Z}m0Ef!L<|vGP)lz`(3NqU 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

qg&Rg4wET@ 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%0Aa*%F{ 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

Uj?!%9 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%0A?${Iy-N z2K1WVI9~#GPZd+!tgit3YG+&SJy_tdHlCd~oWea+B!r@opCORU{p-$s*nRz^0Ehu} zd&_G4e4XzVJ24hfRu`BfnD?M|liEwIIY!5AfE=?;k1oQLeyVlN|&g zYi4taXT~%#8)a6}w8S3AR^~!cD7U3Q8v%twBWU#kNYAHDv*W>J`Q6=gZh?E3U6Sfl z5MgQOJ6hgS-okMJ^WxAOFLf4DTj_2V@@0xpsHa^=KeY3UC)tpK#^78QC{R!bYG&K6 z@TdW$;e%;b90-FX)M^e;=4i{31MWyktV0wytJAFA>lfLF68Pl-);#1Un zb+w@K_@=CUDt$$#j1jZ!d)OTN4mk+SwBjHy_k0LXh^2yyRDImqv(GRR|AR<%%)D64 zwhINs$~~j_b&yTMd-(|sD8NN~LK%P;d=9^zT0fEdfOri2HC~`)LWGrtupI_OlR?5= zqLuK}LnJ3Zkq8LN!>Dha73~i@$kGoHP^BEOZf^%=^I-^YR1Sd+{1ff$VW`Mp4v}~7 zC%UV{FiC=3lAADiCnN0<60Vd>meSkFB6bw67L^Mrf_JeS97X62=2ABHc5(Y1MVb=i zQTM>R`O}Z0Y?bn8r+T}EnvbGgqVn!;{-)zPit!oDqr2$sk+?dF4Is#;$CdB>O~-{) z%4ekN>y;HdjzdM|GqK9|DHt5brw-<`2>11=_#G!?6BIz@$8urEhGngIbC6g-~wnI-9s_3i>2lGi2PYR!d6Xfo~)F7vgd~YPJgV3!D=FqvL5uf zT`SN|2Cy=+BSSRbRtlpn!nGG(AVk0hr=ZmgEMB7*?pk@$qmK$(RFka(k`na*VYxcR ziWnGwaNZ8^8p8yj`Y-qu8KwLbM)H8p!KRuLpg~5(4o`*U#z)~K_yd;}a%2FI`%a`t zAm9;TpTOzvH0e4Vg;T(k81Rr4kcFK`ov8M%Xe{s!`H#DJ5X-Tk`wuuLeCxI)3*>4H z#Gz->`uP39WQ0JO)k<8b{^9(Qf&OAlIj)$ny&=eC${_Bksu-LHihNY zP88|zo~UT;*8z~G`CpVl|5QoO?At3Xc9_}K*c}2Dqk{In>lN;{SYuys!>!DY-aWSY zT%m*#1#lC@ddKYetQ@WoRBUN~81t27dBx#*GdV1#H94Tl7yN{)w7l&UF!?~o*i$&* zlP;HuuXEi`^~+Zny(yUIIU7q-8#MVKWi0GKYXAF=u(#4_)Xdp|SQN>$o*z9$rV(_Z z&{ZT;vh8X(^miL#!`5mfZ#Q%;N?_73x8IaO-wHFmw!al+hq7-M=O^25mlPM4ZkLufY;WHxgPhoR%IhZWcPh{u zr8||a=i56~ZRSlxfD?#-L$yBzewzp{(avu4NfhH6dv^moRs_hFv05Ds(%P-zR#0?^ zTplhCM`M;e

L4E{n$7>J5$vb16j%~4SREF_y1kW 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%0DEPnaVCbZ>>!g;Mg^Um#W4HUy=5ZCT9)d!{e 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

    8h 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°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 diff --git a/assets/components-converter-example.jpg b/assets/components-converter-example.jpg deleted file mode 100644 index 2094bd54dbc51181d707c0a1e70fc0482c161af8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65363 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 WcH)MX`klT!Wc5AA?Q?&Biyxv*r zfRr~ckPg#_#%d2s%|B@5R0ICP#gwE|tW7e0SmPm3M4otlKYbfYvk)a}#ZTR!a??P&YA60?cprALXHJ&rW&La92W8c@ zf^uYBmNoY%Kyq!k+U|a6cyZ~{{mK4S-in7K-wTu|6UPsCMUGxNytn{>AB`mB5Ecyj zDnCd(-UtIE>x&XmE~8))&-uMGF|6<-Iqk(okk(vd7)J!tb=jInyzDmYtc#p zA5(sxwx*XOF`p%S*wfn`h^>;zZ@0zM>*Xrylu;{XMfnWqbTt#l8F{yIo^XX_eoC8~ z6&vw|Cy3WEpn7RenU5J&A?tJ2Dqb85UX)r#ZYZ4@#J!~cA>>h6AsSzf&~xi}fWguI z)he(ZF7^$H1`!bw9jA0b)RCD00MMa?6vBrFsK(KFb%RjL9c3Sleq|Zc-A?m`#gQHs zNyqy%F3+yq+goS_c`}E_*{c=$bAVIXIy@E`z{7|Ue!qYgE>uHB+;bjW_P;G@QoqvM z{`o}=l{OVK*>?rFX1l?tn}UOp4-891V+fKl?t@|*No$^XzKhH=m%L@YVa8{TEP3ov z0vb=}6HGGj**5K|1CY=e{0EK@7Ek;JPe)2_Nh+(x;J?kMij}(+e$>)N*ei_>lNC4; z*^CHD2o9G@!zP&&QRowJ8|C8Tm1EPWEwfH9lDOs(Zyw!s32Kxe$ef`76_+K2V!zr%NAGQgpcI> z!jJ-#y!Os)5Pe`;K`iEnJ|h+As41o^VbsW}d{`@}%Rh*~z?Z(7R$1BVmgQBrAladh zdCpK7&oer-bP8@ry40Tf>EA?>z^%DoO!^c}D z_iK$Yr-G^N>(^O?Ue09U#fbllz4r`iG78jnlaPcY6caiK7$88Xh9VsdNC}~Z(5nII zAOa#HqCzOr2|W}ggchna>0m%Wnu>^uhzf{^1qEz~g~L93-#fGC-gD;8+`nh$`~Ce| z-@Deg)_UGYa_Y^(F?yyXTy&H*Z?1>TaESmIr*V))p^W?DVE*V>Ud8Gg7~sFw1}Ma-0=gAo$V^M!NBGnyTGri##A0HpYAM`~mpA zrleI(qkl0G%m@6LR^z-8Y_VB`hvs#ex$k8@1QuPuwJxlkOcfmuCE6o;l!F2v?7S|8 z{kX$cXpy#bAahi4j2t}ji;(ki^@xIK6l5hzo}F8PzBaoBHrw{nGRg1=l19fY$|G!i zEkw2GvMmHO^=vv!0pzN%O<0$)q$RukD^Yq;N{SU)o)Ma+j>_-cGByzR5!D*O2o(c8 z1p2Hz3S*60|J-t}aCJ1-TRZ0e{bLqSGyG=2(^U5%ZZGnjuS6j1W=b>IAng*`Pf|MH zxl78ba6}@~I$sJj%0 z4K~02WImI-0-0&et1~$lyouBJDv-cL!=1Hgbit9#gXl?q1#64k8SZ7Y(_Z1hTiUfr zsnz23wL4LTGG+AYR=tqNC)ac-l0|JZIeE+^kV38dA`UT)w$2J4SqN6luU9rq zm#G=cRAFqIL~ljW6*%lnzQXcB8z21Btq2@HJMVWBY|Fu4nWs<_c)xvYrdrrzV`{^7#=_amNY zjfd7Pm@GL6`93;b9fZdMVQdl@%jZle#=!S=j{u2l@^$eCXI;uecq*3=jZ2eHLd3{Q zK*=Z0Em>h)X=Ns?-bQKcYPK||PpId$Q_p(c16s2D36?}@mzkiC?dSN+RH6$P)y<7> z!8<-$m_wg+cifgDY%3|jLKSnZe}o>1FBCAJc=B92rsI`gn5Aj?iRF+@bnN#}A-TJY zHt%=Z9dwn?SXtd%clPV4DN>1d57py*Qrr{wnCfdI>(Ns81XF$Hv$IF1heALRAVuS$ zG1SWauIi6ahgF_4Uf9Gh(?!yJtnx_1q&lfzwR#W!D*IHx^LzO&YImMJg1@A+y#I8j z*Mq0&ob02V%P4g7layxH7nyY}InDiv5Y@_QLY`7gI{g4GX9MC(IL+Pj9edyp^XZCE zn#hrIngoSgsn3h;3&o6pwOE&woO;I)rb?q99o&z(G$PM84&S*Q7Cvx!wTMvMgCE8f ze8gxISD)N#^|!v1S@CS|YPVjFy^2HkZ(qyOfM&!= zmof9Xtr7K=e1hat&`H0yQ-EjHi=-0wN6^&hB-^v0c8|;a`fP7sIWhLZBkb5gI{ydz);#FP(WYXm+Z$L=#aX}Pn2(8Pw5+~ zyH*R&Zw*~&)W**4&GcCeOZt_&7_QY{)wk=njk$UG$`}u*ta#fjI(P5=(q8fJ8T%^{ zXCE5A3h0t-^1B?u{`u!sv>+{@?nUsO<5w0%wd02lum(T6dwyd;=iArR%>YWJV*|;| z`vajvmnH#{CwCW)G=Uffvix6Td|a-)u*AS?VXX)w<9+L-U&t3UI9)^Fc= zu7C34zZcbCEH2ib^xSwF^LttQbA=1l;J2TACU~kq=tJzCKXHXQ7Wa>c%1pce{e11@ zpEt)3ejVV9bfr%I{rd1FO<>`7d-z8G`(yplub17P>{F($VG{C49e$)h8Ck&*PYf=C~Z}l&(AK$r@)2XZcrYjC6wMk zY@EKDmAHPkXurXg*Ny@SYML%Whh}(%&p`JSkya@7{aY$6chy36?O|7yG*r*DaBOW~{Q9#)8oQafUz@7C%EX2*DnW1V zH!zjTd|yLea6skVW?;wM*&srurC{7ign{u%liY56@5#=N#!_ny5Wlq{K2S#c-V{{d-LcGh-4zDNfiXtlA!*AI3Ph%mMm9G zR+V+os&z1ubu_Q#S2Y%Pr5-+luA{<~T4!eyLFH=4&oabRS+`>UKi_5WOn<{h+2{7& z6I(TI6S9BXYvHPRdCw8qm0Ir&e{U_I*R(7JT1VlP^AW1^k(BctJ`Ez(%6fuMe|{_I zO66yG`8wD6dk36o^|SSr3zS?6a6fp1z8VmiQ-{Zmcp1rscpLN6P}16pEr_^Hm{GimA{}j z=^JAlVpQh`9dUK8zj#$XHnl!Br{0{L7!^=|c#}P@RsM2!{pI0z*jF3jYjxq_@6L_N zU)`v``dR*(dA*mayq{L!HC}9@5Gzq~Gr~LY4D(%#G%Lvnn{3WXF0Ks*Vb9xQQv+D3 z;n?fW)n|R*#iz2a#9-5lS?M>i8Dy_0ca}FIC}S9#HNna%-n_sJ^bQZa_<)u38Jqh9 zd!bA|^G9tiuR@+sL!ME6{D+?bSN1pZv>FPG6bj`wt}U@bUIi9DrJ-Gy} z&EnJsdX7RV`AiD=eMoUbS*t>M_j@-vg>$O!xB3)rJZ-q~O5uDnw#;4O=8uNTf5BN# zv6*XFhEQXbTgx*gM$A{wRy+_{zpUk+5Zg-82|sPq5MD9NCiZ1B3AT*;xr4?o_dHiQSuW#E48?- z=02Epx;ZefG~k>6ry9x0GNyH+Kj#0ifd9>5_`hTU>pf0i5=b$1Po}@CI1%i-fQ4=8 z&Vga8W<>tlRHu+f?%+c5Q=1lgO|WUU9wsEb z-WeWZPwqW<*Knbe_k>wq&rMOMCd~M>LSVp?OUPS4QC7{CsU5|i%>ToS*a--Hi*imsrWwjQdHLT`nAO4a@n`OE0Z zmmvVB@-{nTEA-}wsZ`kN9c43`)LpQJ^3IrmOW4l1NMQ4^G4ZJ8oqOo(%DWeCuQ|8a z$nr<1n<^-M3z|7U@~M1Q=FFyA2ya2m`TGVQy-}W?fZH1Wh@WAHY9#rVZ}ZmLTZd{S z3zhE+jxL94B-g-}?@z^o-8G+4uB-f5^eZ`3BL&sB{8$R>+4}LqfQRSja`dyahiar5 z`HQdOe;#c0Obq{1*;`2#4&Pf%lW*Ny%hLY5_l9Pn`fI(=CH&W0dSL6Xjf#t(f4yT| z|3|N6R{suv&#ITyAf9d-RsldCotM4O2l>3e1-qH^`}5$>&%eL0IgkI@9@A!B-kI#| z$-tLlzQkX4H8}qF+d^(Lcx5)%xP#1R`E)?mK>2B zBk5L@}ANDPHqBs4Vu$((nM^RmS$Ze zEj%@8uD6><%c{Z1TTT((ck}79HFDZhQ?_xt1q|+5tcB$?xoo$PWnC-rf<@f@zx6PO zN%bEVm}}s7|4V8)>wiNnE1)nlNvi)F-`)QuaRdAQ2eoXuP$*UTN?A(Vj%YaB-Q`7r22nIfg>$tA&g|9kj<(zUsro~!P`auX@RNv zts5u!->GHA;D<75Ao83N4s!unZ1Vv}vy^isP{YO$|9UX({TC0Z$UQ*tjR_^)qp&gu1w2No8 z1~k@+4>W&$U~oMy>LI>quk&m(_^hU{2RA35zD20zL|{ve)(E~DCvbt_!2aH4?!vEW zW|pKS5zu|=qDwbH>?HVn;6QQouAJ|gv~-ij=oI9gBe$=R<_FFm*x;WD1&?b|g0;cj z1fOG$8F+V?K*aOxhXQ8HM<&2*Yhtvc&N3uVWo{+LEydJF+~utOn!avE|Eg?hBmM!j z#RmVT&-SK+b)B&0zVRrzmGVdycpPWUvU);%HYAKm$Gbfau(BP!BZylejYv9v8$JR9 z0|)rq9+;GP6#gbIeDNRh4&8}Oy z4X7ev3D3(PV)5?`K?zj!iva@IG-^0zeIx#8`wbK2SlV}pe>^COJ}ok;*`)kXirXMV z2|+bX!X%uBV@QUtENI)o7?Agfhc$?;p90QG0yVgW9qeh-c2AgIJudYe=2k)@$I<{t z353J{_*>l++%+{180tK^M0NscG>m4S4CydyMS;^T;45}F>ygNiniP&lAdX+qLV3yc z3~LNq1l*yQvY3m`<6;`i>CgmzU@qmmnw|1{H-4Ndp9KK|#Q3Q_x0FqRGy0O;$JD15 zqR+`*iI)LzGI7s>lY=v5V0>Da@?J&e2rfQe!LP7rU2`;amutG4q9syK2ori)fFKIx zBU%{2()iST<324K*R(MuWfUl2TOFFC7=|vJgiuLmStt8Fps(j4^ciqsZkQUJjK3ka zMYb-D&!@WN5rM(x0FxM78Q|UOrKp$#qd&5(s$@VWpLIj~l;A_Ok4NC_QhI)jqNY^S z3_|DL83lV7<|xRRt$%iYYB!=bZ>7p#YgPNveiko)|I?;3Y)+`vl~~(u%rM*3Igzx< zuW-}}PRM@C-$FA}JYhI_%Ex{F-Le4wWmcLLP+*+7@$Ldg`>Hk6{NaIrUJW%q$U*tG zLm@?3S*gg?#FI>{OTa{dXN2x?o2y@mNoHZI0>cAb{*IkHPFVP8 z0uIg3={Hr3{cGvvMMn-lIHc@kl&v^Dke8>|19M)cO$)tv_8{(ud-_nL`zLdk`}@hA zRc2}aS9}}QZ+^H+Rwjh_D+%8}Ff)zmEJ_Q76nIpNUyvX8+Z=Iy0P`SZ(*Dkc96!rl zjW>Kh`{o26%~H8g?`)I%rFRiiZCv7qt%dSgad6jStAusE`Tl9?bH2qPg_jU-b04LA zIt@+n=4{YTe|AYB?40mxTANSJUmgS}=IhHuN`duHLEF%up#_dp`MJVVVyt^@8TQFb4N~%RoHKOvj;~gnR@o02p}DWLrdC%0o-@;Mt1oZk zdpHohr)li0lYGg?wD!rGxBP(b8FYqwI?d}jzNa$6GH*Nd$Rl>QB5MRhnRQW_={KO zv%Op$0U+>`Y+=z|!ty87kZgTWOcwS1`q>*1nJE%%^&jMW&B73Y2Qgc1>ZfAFKNJ$g zuw``@jAy+>)U4|S^$tE&xFpmAVmZnZAbA()=jX}ESr3@5_u+T_*S6Ww%aP)vXhN?c z%{{ED!641_H}#eIo)%2%@<|$G=ZOX z?RB-W7mvt2yl?rTE!`qPU?cXpaZ#|T(arFRvwu}!9YE#SA@i(e<81z#D_-aSIxM12 ze0W{dNYq$6lO!KyxkED05f|qVaSM_qSD7BqL%p%E=6Q5Q zzTJ$E0k?w*>dFdJ=#oi%$xNy1mO4iTbrdp%M9_rmH9Ib1tJDf##gCfUQb7UuB!9Te z^$Zbt=kHD$2ai*j-_PUp?|ZG2MR3Z@RVryQ-aqYZ#+0Q4l!Oyc_U}*?l^?!>ru3xln``lkT zc}Tasww>I6L3v_RVvtKTiC@`AMe|vSc|F*CIX5wWg}lMod}X*8#w}Atv_LGC_R5vE zge}lHNEbb>o2mP}ptvf3uQ%UFw@_t~_JvSLm=ZY_T<`*xZ~3e6dV9eRtjJMRKtZ(7 zwISE3uShniP;{z@5^SXTywF;=$mddV$=f2?^y08zLX$;BE)7LzbxS%}#S8TF@grH$ zZjQ&EXA;@j*WgYrK>gBjXP`w6)X~krAIG0c=hn*kbKWRbHy5tTAQ(@m7;w8 zQz9wPg-<;#M*=mn;iy5k^bM(^%WkT1x>*HP`M1vJ4wqWgrycfv`tBAvpG*}vEV!@4Cu>g5B0#yh(1o@i=03F?Ti8k7PGO;-u*RK)}cma};rBB~6r z@QOAbbU(j$yDt+5wZ|Dttda}f+H@(P>U;(NX}i4|FN2`K67=&1an;Q4)e7U}Fq=Bo3DMoe%a%2gRl*Zc_&E5K|JuLXWJo%TZUYKP(Ud^8IL&2VEG-eA=rLC4>sH% z2f2~X4Cs#|&q2NLz#P7c6ky%g+wc|~WKI~ByN~1?gXHMdyrZXkwDD9#G}aOAcuv4; zaPah45fl#5K|_cF7)MZ$QY5sB2CYIuU6H`EL8wt;b1(ogAqHiO0n1jJ=Mad=#%2%- zQbuWhxZlEHw18=lyY9`48SuXfNVkY)S2PlZgp3heABZ7>04=QTW*=lL0SU~*-SSC* zAM~~4ue5BGwamD?J<-$V9BG*(B6ktZZfL|r2J~k}%a$JUOGwMZG6;#?Hr21cP)QOo+Cp_GmQD2bIb+@{!0F5KIb?Ga0&fh}`eL%4Sp4|J3Q)=;3H zb4;ZXNCg{GyAAbPVOUlHMBNeM=q3k!KED?bSez(gNtjH6w$4E~b)4fad(^Bz&xZyU zwDEW{U}08#$7kRLxIP0EYYqWHQfd%VkkU3p1DdO9t|=H-T{mt~hVE~qAzEHE`H+&& z;QAX#104*6PeT8)2BMk^al0H*MMJQZAWU|DS2@Cs(M(1nI_KKH=s_D92v>Y_BXaQG z$Nqa6V0%VHb?8uI+Ysm=5nRnc4229d&;~}*!8J5QaN8{?3etog`aX8H>L_9h(SPgm z;63+bG7@qIiTGvJ?}i@!^l^B=V?aZ!zX8d0M~RDx9N2-fyR7GOx2D zf*Ch^ZS&w4U#d8%WVL}q3Le5h_#zP~C9Yj`i!=&YjvOj#hLkcOOf=Vf0Q8?OqCEkz zt_ZDGK0=9TN62$ERzTbtaQB3Md))L68rr3dC{Tt1#2^jmBf+%hZQ^j%cI)kCh#Ld3 zi{zxV&1#52f*HIaNW|@C#77#G($-SO;F>IlG>dcX%(d~fH#KA--P(9NBHBSx(2or0 zV?_w+C|CR82NkCOMQ`>Q_jGeJv=jiT&O$7AwhU$@iCmj>V=XoN4W zxw-=JehKL?2d~_Q3*f+Nk0GzNAw~Eu#9V#h_NZFsP?T`LL+bB;h^@%I))I!-xI+ya2=a2$q`8F9FPl#OZs>?p0ToX2=VQn zOP6xW(LMYm%IId5f?98~BEWk9PC5G2&?nNDiysxo??CGgDDOSBT9u7qk^esZ<4^2| zG?iqgm9gRZGko@F_%gC@G}y9E9b51QN1YsLD^et&AwK99Y&nF5@88lhKFjHm3_Dq; zuA4nXB^(~qP^Pg*AtV}vfgf25ec1AH>DCPdg)u~6Be*|RN_-stqS(&@Kt$%2T-oh6 z1_nE6Q1s!=kGTQYwp&XdD{Dhv47D_S;QCz?Iz$s7%ooGc2N~1t=;fB7=T&p}8`9ee zZ3yn>p&&8%hbu2~?+-R40L8^$GSM#{wzT{^dSvU*a`XLmY||?ig-vQh>>yu>qF)Ei zwUf}$AL0-s>G}Bm6<=Jx8x2_1fYkT|uf#*R8Ae4E#7znW0SF~Bz@FQq)@*j@knLFi>ruxo*e8Yhaxg@?BItYng$5myU<=x*b>Ob9~``kSMDuKiW4eQlr zf6(3EWWIfO_TT%I&+i9$HPZf-S3RI4_d?2+Lc5F3^S;@LwM}J)mqvX?Uc3pb!Nd8? zJ+h}ZUwrsjQ2ePjA66bQ>6Tn^E{Ak;_@jX!WGUx!p3n2~>0uUQio>|$)6DQHqWOwB z62Ws{)Z^6#0y-BrJmqe;?f&JVSlbJ()ryam_B0493xUMViPg4p{;jmf@xG5ox-nic zXpdYCW|y-d>*a_wBJzpnEI4nbL%DU}V5#Yj7^EEeb)fSB_ZD(93n6+MDR7(%p@c-J zaDMi*D?@YbAlo=l(DkNUUp#i!8Y3Di=D2vE{LzcVhwT-gTg&hd_8uS|=XktvYj`WT zzumls60U&scs{+NZ{n}1HJJ35{!jk zG7V5Y2*e#!9um&q2I+dZf7E>f()ioq#!2_N{lztiVWUi=M> zAKv$D`(ZBySvmdJ^DJJRF%D=?X5&G8HHGh~ZQLbrA|~uT&Mc7+0#@XsjrvdHc|8SU zR?+rwV+9FRG4{-aHD@ANF4lT+JWD~t3zOyO+hHZF$S>fi>6+>=S>iw4Hb@{f%&SyP z)8ne6>Iv|2X`yyyp&uD#PZl@Q<3?wDY{oLDX7#5v2?@Jf^X5J5qwuc z{xW%)TvzxgjVMEq>P#`2ZQ(Kxz`UJ!a`bp`3C64Jd9A}lOs6}~Oz)?cbqG=4r_Go6 zv{f$_Ddu%4{HRgLKd7@_QxEp#Gb`7M+&8q$2nAVU&X$73b)B>B^cAg51kVd)fG^o0 zjLhuG3i&m5_EEp}cM^$I4Z9oOf8%~^y}Wab9&Lqnsv_6s3nI9tteZY3_1hI;rA1(H z5WG;j(2WG-fU5{tn+g7rE0it5K{I@_U=HbThm||<(izyUNfU0BF(fL($=CAKxGPC5 z0*y6Kmn~M7#`}(I`Z^MU!e?ix01(_ndc+NHdCHh1CQep>{glCG2s$MC5-^%wC=N`J zwXC@U+6|R0Vt-fpp713{;DE29P`LYCMt#&6fm%1JT;T8tv0Le`)!q_O)534mc}fiBctB1Jk+G`VpT&Fs~u$5E+l0p&tmWLM5wJ%J(EK| ztaYFT@Uz%b@`v{;$(%QP>TG`#gS@NtWP`ZMR6R15YHJovyyAXC-aD&ww=81A722>q z8V1DR3^)P79S|Nkyy;WQmtPuCEkveE%l4-2@s#$iF!YjlQWQ=XUmnZk)~;*2eZa&- zOYYr@)u)`0QNWm0YY_CH}dCY)x;I*5B+>P)wU(ZX~jR%zr9WK#O;=kgJ*JK?g!X%Y0mTlZKyh5*ai2IpWdGXizIGF^7+-GGH;|7`xU$?V?;p>qz1HLY_vgDi z*Yayb?B&Q(xte$dL>bE-*hzz{rGYFOL@7WSMmn$&X!(H#QS3lxaGL-Q5I&^q;`l0v zO#+UGfp-)!eN^RIQ=Ncxl~QCN?`lfTnUD_Ui|T0rj9&n?gLW^IodD;?Ct^6VI282? zfifZHf**qN$Q^AtItgouH3g=M3n-{~h;)+67zk>=c=!AIwpl}|uQEOnVod>Zp_1qE z(rxJoGe$axnvZyiuel?dn4@P3;XieFg5(S0-fNc@3oIxCv~pFX6lRkWd8F9^B%6-Qi=eDu$sKkj zIPxoTMy5C#%p-a!V?1?flRABEDXHAaTvMOmo$h%(to$gZlNgi}3M7Rnb04oQWIr;WnQTLIaY@X7YT0!u~)}hICfbYC$YhtoS<-)qF zQ%$}dQ;oN_B32%PP)w=u)2wj_LI~?TtqzD8srs=TXq42S+~^n$_m4>7?Bx?xwf3uk znz2lZ+7hpb6-Dd~PMuo%Zf(2WbOXGISHGnGsKmxkIyigUWO5F190xFbuQqA;wa#G- z-cag~dxoE%wv$b6mJ{o%e>Ck&E8Sj~4acS&Xez0@*7BO2&#qNC^?Ba0tQX>6K9&Zi zn~__Qe$?>I4?0yL)JG!8+CtsK;5tVSgFCRUwCI05*zaP);*odVGa0^Il=bh!+19AvOz#vE|0^x&9f)KJ< z7Cs|Af&_60jLk`54T6LyK_r2;l}ZWOAVC(M1FM(}#b&MAIUwv4J;P*R^ad+lIT|RV zW=(8WUO?D{gxx@Kc}37|{Wx9__znP4+_YBoU&|CatS~`(Ri4{@ja-C_sy`vc9wD;{ z^lCIlV++O>akp3AJXIO(h|S^aov-}N0&Cm+vQeTwqB#o4WBu^PhQ%c4$Tp?pkPpo9 zDnII0P69noxjTqk*Hy5Yo*+v_? z6{U6Y>8UkU1ves`V{gl|*vVP92IOmB61hLJ^h^2?AHmg zWS{c1hgPhnFn1&aJ4S{c@+l9z-1YtzVIaNpH{TD@8nHJctKRu6dXR(uUh9DZ`W!Rx z1=flIa2%Qgf@*3wfNg|R?9PjIU#zuXhM@X18J-&BaLtv=@m(ioVs z-|>Z3{}q>Wx9b(~Y>)O_ed(F|_s5IxM$yGNn9r1A6-&O;jtJV;s{riCu;Fe?Y3WUX z&wSFBJ6(&~Xx@X#TO#%eDE`3)7 zWgp8#h>l=IYQ)~tq>0%E`O=DU7%B;JX%P=LNs%6@ks!>D>$+=SPL#XM!*{UnDHtwL~y_n+^@F_p4 zjSm&F0=8>Q_9=rYiqsOuB#j5hY}t21>=SHOO3IF=_3d|`SLbk{$(aun$I0;WuzTh~ z@-D0d2n|r7-uNg%DPpyz&Z;pTmv%lst3-;cM+|0f%_{C4k8uOki9xDS=1zlYNha_S zT2_cUw@oZZ{@tv*Xb$pTY2{&m2dtELn?=Q{vJt}YH17QKu)wOcHR8lW7R%caG30(P zTG{;4N4bc|w9}49?3Fpl@i$_ExwHE2`E}G?4ugc-bKOr=z9BXdXC&!6N%J6^iaoPiYEdNAn48~$B1IX z<2X7t$5n!+2iEjQNLDGR);|3K$8Ui8g@n+ZtQ<}G#~IW#gVu$W?Df$ptnQJYqc<&M zZvlSuyu(6X_Ga4X9A8@Gy-%aQj`XR_CMMDa?m!6OF!9lqo+B3E~c?ELz_Z=zsXSew^ zl#pV11$Z~4&}B9*4dOOQg+kCOdyF0Bhr48iMJUzoYqIrfktJDd5LRT5swJ{&RNImj zDPXU3K}+M?+l*xIU66MJ*f&vDjsdn~JyHy!x_^Asn0Lafp@^V1pH!9X=cDjbCre8Q zF)IU${H-;t3u~8wUswfv8A*%Yp&|%?hf*B+u-gYoI7oP&Qp1i;j;ZJ~;L(ThtiqMj zK!u~)$ZoP@`sqxN*0v4=MpZ3JYww)DbBTj|SFnuUi+TxCpA*iVD;aD`QH+o{`_TbJ z(ao}~C`5MKsU+Flr{}%tYg6M0kIYP=m500lHHR9$oXTR8>J;wNuUf*dxY=u-<%mEz z#Ev{E3C%hU zN3v1+QGbu!(SPhA@g!pE8DjG3sI>4i%Z!5pT^HgOXh}`tF|G^|K~FRkR&9frzvUh5 zbQ%^(D5g&J5I6$VPe(Tw${ zxlh3GZTG2>b0*xT=&mhkuQZQ-!K9XQp^~P&SiFgz zR3ryC;?c={X?69{gNh|Sxk|N zGpnx{cjCtJl1luSRGhI5=c$eEv)I0>l4KF?ydVV^5sUi_6(+p?F+2037;DdG0!XnK zjgoi43777wu3VUU@q_RlMu8Nt#|ZGh$LNR_sZ^C zRf~6Z3%GvTrk3h zqGU$%5O=9Ph7WZ(9&mf{eI5&hIM|812?$vQ>L#i^F5;6pMg2G1Dbm@wAXARn%yp%x zoh*lF0)Pj~$WuqvykH(3U!&FGbd*p!s?Dv?HSL{BIzRG!wPL!OP9_!T5iBmMq4V*f z>ZRZ;$xWn8LROuf{Ha3GB+x}knCekYQ2P*OyWprprFc50Vmg5PYrZ2rMYAoq&Bu=M zz!o;ct-weoQ$SKDQfw^k?IxY0!tBZR9k!jxa!9JeWTCax2`N~SlR{CuB-v_C5Xt~M zu#z2usN|!?n4$OXorMbYP*+5e1747PJ7jX9H(x3D><+a`=IJTOQJdRE3+3IlT%ZpU z4W!4uMRVl}FgUZfD7=X^1|?;!=$wI+fN{<~N8xOb?q_exCcBG58=io5urBO{Kf!Vb z8mt_QhYlRp*W*7$&6AQ22$CA8rXY?2}>IizV$vL4swxd;pGpXydinM~ z&G9~2-Du!J_Eb-P3cW&k)~1h%NqTJ?_Sj1JI{#z+t;f-79BDiyk7kY~J0z?^%k>}; z+OdPw-oB_v!+8CO;Fnvd6K>Q^zYi0zKg8i$618N=@N>D_yOHCyHYazF!hUdf9=t$b z-yDFc_6(J6S#Qnde9Pcdwm7NSbAAGIUPbtw;k7%>5RW6HsPPmTQOgH7HdRR)uy1u; z)sgeWCiD0-RbD+>pX{kWEoITzF4`z9@&RdUks{V9gG0)Irbg|ab;zYt4;#OL993gp zo*=z%*jQ;e(}o}P;+QWDBF^8Cp$nRpcG8V=;jEtH!U>&Mvm(U^5$cC=7yV>!FHmg_<)@Wr z?e6y)+q8>Szr4NQLpNHe4(_k)+QulpRH;qVk36}S3@Ww%qHCVP_aMas9dE?Yu0?Ws zT_y`bpXGMNC`0I=DKu9**`kL}tTr~I_^U|11>I5HVj!%g20SsznsF?Yi)qG&em@&TnJ#y^#QbX+D(zC$-dNJC zP2E0ylW?i!bz=?r*bq4#LRaFCg%tOmX$*9@@tQ*0O#eL&yZRh49K|y>sWQOY&m5Dl zJa;7KkI=nEOTTqM8Eu@Q?At@UcR^_tF2a+ad!+p#wz}%x&1d_1zhV=oi)Y&!PdDd0 z7W-8}kdx7x$+@+gGomp2E`fzu=h>jv7J|wu$(a`WAZ3K*HuRxL8D>W-{)sD z5_sOT`W~kqv(%|X{ml;ZMx2A@<|Q0+$vAfA)s2Z}ccW)l|GCZSh;gim=b?7m{}LV| z$EeC8dAO!Fp0_ry*KvYl1)8t}wLO|nCIpqJE_65lm`@uwFwL=(lxWNcoMO4QGyKw- zDG35;rOxSm{BN1Xq)xJ6787-N(WlY3Hjyt8Km>_7_*hy3(u*BCOj06QC_%9#n5A^$ z%C7ueCBap}PsA+a6v)1#c`XR}cDfjwmy_Ou%OryklkMxx-|JW>8S#}AL|pVldl2Ov#}wU4d22U>kS5`CnsxLugD_{lSc zQwKz;Gj&OCDiJk>k!J#?k`?@|`>HwsZws{ou%;Ik%!o=F0d>|vpC|6;e_47NooM8b zC{dWHjjlR5(s9WnVkCu+k1%4U5FVihH1(Vdd@a;!AfEuTZ`-K=<=VeXy$aR|gbE61 zx}-{Yk+vO@#s6uKpEkB^H&c0NnRg>r)>J-)@BMS^h#hA?xzY#a+v^#HDjs2^J}G6H zUjC()Hh*18u{|Zhy|&Bj0@+q7CDnsA;!Qi?i=ic?`bGbgAUWo%Rr`3Ri6($nOO1~~ zJY0XKUL+P)y%LblAMp~D=cBzjZ|xf>8+$%AcJqu^20Y-Z12|7S?jeeOrdp-n^nIm2 zC6Ml1z=viWb-UVAB;Y=_IFc1rmbc0}A7%XN3fQPlj_v@{l_Pr4cP5%sSMT`~JtOW( zG82q7Q&hb1*VkFgD!P^FX+$Y+&PB@+-@3A>Dpndy>%~Y7*|XRC@`K1&ML*Y=i_*De z{e`B|6%nH?R_S3;=K{)U%w)cNnz|*sX1OU@AU|T1M_!xQ0U1SFn()f*F}vW}<)-3! zsV}%^nF1Mj@kfpYq`@(U3Ndf;-T`y^xB9HwjDg1C;)j_dMmDQT7i+A^CyJ@p<^u)5 z1ZIXo2kqN=MIQ<(QLd3y01@zMW)iK+CiAC_-LuxdJ~Y;EDO?C<0uB!$EW9K|h z=KPfNIOeGFsv3L$;+&}lq{PbCIy_d0S;J?yd{Tc)80h_bwnvO%icAr?q&9S0gw`Z! zwQ}-dG}4>G*=mlhyc186cjSK5B5)(RBf+P_afB}K?WismTM;_~jv$8lX2?4!1D6HL zV|TB}dPT4O6?k5`HWhi`7`>Y!e~|Lp?2n@HNdVC7>U{ZgC=tkf8>VQ`f;}ZXO+!0G zpmqI&%s7SE?82Z#!KaA~uy7imY*>OoIMxi_Pl58wT7b$Ul9Kz`K%rVwkgFmDCb$SW z@K5Crz;Yn3O+pI2G6cA~vIHnPK!|CA9s@Ag=ch?m?r36Xy zV_d@{0ul@pAun~HZ3QkRfPqFOj;4HLG`N^2`yzCa_ckyr?(lU`geR3DXo5?6{Crg6 zWl)A{vz=0m-aNG41S)PGVW)&)3J~lkxTQCFT3wl73~Cf+9%;zVOMqKF0+Ju#XbYA{ z6dq2VIuIrzsj>+ak>j#Nm%&wCM;PWlhLLVxN4t()#Vf^G0-;flxV;k?ansu~4czm& zipx@befSI$b2Sfz^jV3dUQA)Mda6}4T&0f$b%~F-ZoQCvbpB1Vp@d~-SB)RMH^Gp8 zg0mRUErl*(0BsuU^OZawKy{>ywF&J;`;VA)d=u$s7tVSAD;tZ}YUh~=D#Vi)pK0l+ z!ShrP2O8a!Am5&n7gfzvu%u!%r_*hk1uPtZ@2$-~%;&0R36!%=W8eUXtUiHgb3;XP zb{QZo2qO^x-W}^0*_DsFBV|X z{Ef6`lEa#|nt04D*&Ry|tqty2Q54g~fiOL-4jr7neOq}1AYh8h$U!nXE?jOF=wLh@ z)Vkj!p9c`&ZhErn`~*!xayb3WfMWMdLB;-C-u#(QS>Y#mC|D)`0}IBd^7rUP2&~OwMt_t`#9jS%j>sD62fsa zoLIasEGfa#w`)9`+jaiFs%Zq`^>Y)2C48bD)2{*gVeLe%B@m({1v~(Oq*C5+*q~m!?+v%g4)%Xs=3i;MQPioAQh1PSkCMe=I4gBkNKywQfNms8Y6z8!8 zrmZLUS#%3OfNwm;Ggapl*h*J*H$D7&ix3A2Pmo)`xyVgdy5&Zy4p9@Q{0|4qDK;FRZpAvryXkV4F3Kd+Wz(*^u|KRzy_W75$1FY$kGTYtXQ?bDixPdTH$>7bf)^04 z2HGAnf)WJL?Uq0Xh|GL*a^gRDSf0oG}*N~RP zUOE1o`fixAMOVwoIC+I+_xjf}2gw^{x%#?-i<5UMqIMa#d@hkH^Iz%z`Cj?j^r*W% zkf+RRH|dXTLR#hCy@TO^kjg($d5Y;~XbgvlY4ygLlNX_{B!3rG#+Ui$x<4;J33A5@ zLW(KB7AkKB^teP3565H2IojXadQm%{LLpRo^aAn)im|mi`AK%=Y4Ed8zr42og6pdU zgt63@ZsO1Y^sMItbH=Dst*OWNqUl8Rw8WTY1)A9P#HvBO{zfrE`k~#P6I|L@C}H$X z7nu8|Dg0luKb>-#wKCIyo(86ze#Bcp1SYZ3w;=~UDB=o?`T#Y&!qq?KK)(+DFvcCX z)MdHKo4;~|$q<;&Fs4?DR~Ag|K4+^@0^pj`JuVT8wwCjxBW=E={Ugg?KY(2MH?RX$dGq zjw($81M7!iyrsaZU?y694f8+Pdk>~4|218gh9)b%9mqi%nw+B~ktQ}#8p$A%B}d7i zG&w_)ljNM6oCPF{2nYxYNR}jm5k=+Tf7Y6rU3+HE?5TBXSDjj4fvT6MfA{m;*JWxA zYS`psiz~)!BD*({&6`}^B~e$q%?XEm%SH*MfBtFTk%FPb`AWeqguG>F#(Y|Y}zu&t<=recyL ztjyz_M>}?>iMHXGC2XQu@Kg@{_G>K9gy_cB?ca1M4$IMzXp6}yJx5fWV~+C23pAxF zD#zsY{mD{)yWL@x2>p@@v<8-QWn>Qjr?u?5SmD}?%v<5q+oZo^Uxc+)`?7DZq7kaN zk>cr#iq;xKE((cQ-m(GvKes2>bsM|k`&AlR9m z-ZFRYF;Af>TftYJ51^W&k9%I=>d1rrBCkrCCL-+A)Yr>yxk62u>H&u_$Pvj~VP8|> z##`xIQ~9t)lWqU8x}reSa{U(vR}n0i?m?Nw5JxbULmX5!&0D`%Q@?iETIS8^-lc0* zqIV%Yo_JQ;%!@Y#LH2l?|FyNOSLU2b$g`x#lTOIxg32oaQ~QI;AEG);hp2}S3g!Q5 zEf?^0SMU{Ws_?Zs%eI1eTEo^1F1R$V9G2PgIz`Sbxd^6|#!ZdfQqO9&=F27nj=h9O_fwG~RIvs)K%=+a5f!Fe7Pg<3F82HV* zBgO??`zr)i7wcEo>X(nzrbeB6njPckU6$7BI@x&FXc{(H1UEAeOS}d-EnQ0~YUh&p z%cfm74I6eW1b5e*uqb8Z`~^`)f}#L_Oh(<~tdRO`4VT@DhJyyd!xBfB-R!2$2r(67bDU#jWI z&%7xJp%q`nZ#r%-*BS|~34=Z~$ahzqHZx8U9M@8~O+(#4YE74Gr+Fukv_e9us@u1R zLd1Seq>qGWe(dR~40E5k8uo9TYq*t_2$FR)Q9e1D%x!xAqmjZ}_{v*hs&^jUBqbHx zAD&AJPao7#T@!)OdUmfF9rw{-AwnXs8~B!rrVhdSpE4rUMtJH+ywow*9%W=vr_-|E z6`_m9)0I|RT>)7OW9iwW=xgb~$#}*mB23=zWZFHMUg4SFia0}&eVZcJzu~Wk>nQx) zkV`mN{;ujI+-P1n`qHAvSZw!hj% zeK?3D>QS`g&Rk!Jzu#7&b*}e!b#62NYP|1TxRd)PSLS-=)bSiOlje4k2XqJ_v%wwFCx@}kk z!}A{0HjQ2!SXDPq?>I%YF4kPCb0z(2Rm^rY=*=p~DbwLZo(!`!L?X^J^-pM&5A?yt zZ7D5tG|K!svj^1mc#>rfgVt3^xKj(bi9!(M!t*AjXM$spx3`akH#XzVVy*kV!_5aD zl)mpSHma2#=?kh8eK>>>$o-CAGdLokKD8iy10T^S0|p|Mh@Z?y-QV7eILcst+_OHS z<)igdiCb3Oy?ruw>OBgS$8qNwsey~$5Sgd-C&kb5t>h?bi~)Z79lgKERi^jjUXB=m-s$RR5p^dR(54~kywc`~z857H zIO%nvtp|{)Y%U%+FW&Mzo*AKXKGy}) zRP+0|l*xi=I<10ey-@AO@Xx9R=LV-c?UNBbadCs;SixXetM!W1%&StgJ#a`PIdwXvq2Y*NJZs$@ zG%Nah#y9)w-hIs}vELGCm^laeC?!mGHBZ z6nT?(Rj(K!3=H&RDHbbbi`fh@g`b%b1Ivs@O_4C|gftF?ure~cH$#f(Nd9z!_t_IXxRzLtW82cS*w>#Icd7IB zz1hiK-=Y?)Qta0R#DB%H-Hc{?mf$IhcmqfCxK9GfoZC5{g0hwZ86fzCW>eBP9H8{q zY1m7O*h_P=pP2{16KW23X%!ZAg}~dw2isN6acsBUH|Hy_MwCnD@G6H+FgGY7h3Znc z@3e=Ft%{tM#4$}6yQk`PMh@45&(`tw&9CCqGYGCGrc#>Dh^K*H2>9+hEAV&$4|s<$ zhR-w2&PbOAW9&?CO7kc)RCgL8%36%d^!rPAr(C3!TT`k@o$W*^3@>amS$~S#Xf(^< zp61pdm($0)ENf*#48N9p#pcqS)ZoIji<>k+2kN7SVqMd=QEXO%%1e-*Q7R-w={mb* zt0rJFS>AGG;+;abta8{2Ww*{mmESeCyWz%J$eaYS+pmmg+3_Q>f?|~lynAmV(TkO$ z2m!?~=Tz0^#V98ZavpOTCj zFE6eQ_H#h=W$u!s;f^^%3F!=_%PSkD3Q)6;Ao!GUObsJ(`p$1(*O2%L~Nvl zm#|4#50@C2pE$|ek?RM)o4wGC12(R}s27TSBF*I@O$YtK*eQje=cy+UxkqJMEOu|~ zMQ!ZKzMJ7YacPQqF_h_cHgDF$=f132oCnhbOsVFlQ?XUQ$E)tvrkiENby`lmE`hW` z4lHb4;Jak9wRH1Ow{x2b10=JT2(o^x?ZkyKiFm2Bc36q=aORtSQVM+s^UMRAWv%*@ z-^@iBPQABFS{0*bf66<)HvZ;~;LI%!_JjTG^E)ZQ5BeeO@2y`93%XfpJ_*tD=>N&6 zwD0_Uh*ak^&deM!>Ey30qvu{3qshI;* zQwFBYuUC8GY1UnbNnNLR`->8ep%&i7w7>SyPt4TjyQFi;IhKeJcfY#)n)aADUvcP_ z>DhIz@;wcl88h%fiMpN4#f><8)RB@ifeKf%!t$k-R zx+$rSM<3nH^tUC7t}n{sZaf75Guxqca7!^yz>{m_jKvCM0NcyvSm$Z(jE?U*@J5J6 zRxl4!M{lO#x0IP{bbS(C+lFYY1tPcKHCKL|OzeiPz;=J+RfMMvUJCWe!WkJ`S9oHQem7Z&B* z`X(kULMc>A%D=$md0~!I6t1_C=j2w8_%Mo|b^tR`=t34p&VA_NCz|Fmiwn+R8Y?4u z2>FrOZmw|tj#~RAp$+rOx8Xto`+0==e?;J+ z{v&6C3_XWP!- z?JRmg6tY#MdIMt4ROJ#oXilyWLV~l&y1?j$#+X+P!G}g8*x7I0@rNZ1#gJLaJakZm zltnWlqRR)JwrFB|hQc18;utYe-@loHA;di`;ahF=B{6ZhlBftAuUreU0F6q4s-Ia0 zt#YU5tqc))2f7vs*^Zca6(fj^r4|DXG?f(#E{bDL4HF_&MxqJ-%q67G$^r)~Rxo|ES0ukrTlyDP? z^}z$T#>7AR!>{qAKm(ZGI3#8wG)JUx4AP8y;AF&x4@>%y)dlxw+{f z(LOHs6K+Xo=$m9rd!|X?r3jWI-KpuExDtHNl$*{x`PE%kA7t*a`AWqEld0b4-Oq$! zq90ZGD0M}uJ7j_tWFElNdp2++gIT#7;_aWpGy-5=9jOvA&=Z<06Nhxe?{whr**f@) zFbo7o&zxlft;h!Qj532Df#fYY0%O`SmCQ-iY}BAI?PXwHHAhn#(AvqBA`A*8XQJ|s zNzGwC_k;E9Uq^>$NQ)5P0o*FbBgsJbn$@#8tds;nk#fda{8=~6V)<`=XO0zjnc!i! zC4VH3!%2hWAFC4p7nawTV}VY3h)Z_fGfY8B3;ZDuU8OX$el+t7UtZBm;{q_6C^n)>sl%@_EthxLUiH9Uby2ZJYbQ!ju zK*HJO{ZZ<^tvTyAoLxI)@KZWDp4!?0zP1m!HW^EDTEy`q6Ya?-Zc1Ifs3Pr|!;uqd zgO}p3$!5oUmkn6XvVrnTz_g{eK2&I5#ggzsN?&s^k#$4sg^L+6p=b#4yBu{?iwHF+ z2?i;q9aN}GDUiWd+-d{NWoQqD&F)D8M+z#jc9rp%1VdApmMYY~22!^dLWETY!_8Bc zVAhaI_6tlU0wZmnhPo8{Fhg=oa6&YhD+TAsxK~d(jU&z~q4TZ1-}1RYC@-x`{B6 z7q9IA*MN0}?Er<=Y>>2-!b}alHfg-GG@KbL$tVUAcWn5qVgpXmRu7d;3QM^OQ5pRx z+OTQnds^+fSPmAU*s6g*x#e>Mfuk>viExG7SpK9Xz_kbuEsi_VP=sL~8_+`8FVbS! z;4ut%;-XAmt@e!MZ%#s4{$$16Rw=NPNtWu=N)B9uu?@t`Lz?dy@YxdLC?e9?LO_mb z{;p=FCoGkw3k#ownxG=Wn!u(@3u z76@uok-t^1MilknY5-(<#DRaKlSrf;RSEHp2U^NiQaR#Wt04s+oxGPMZC2irAs5>SV~a5jY&ryvnR@txqhV zhm#5XTtL)&OAB!e5gdHk|6G{wRYjbBDd9(1Wdp?dh6=k3|@@9i%6Ro0)!3~r5aXg zMRvZFfY>HL%ZK_OVTTB@%`_{fB!k4WpKjSy0yIv*{fnP4>5N*f3C8ByAr6r$1!cZl z2{9170R8?LF%Gk<($8--a0`R^!qM@F-zZ~SAz#aZ5MLjt0w+;cQTGVJGeSdM@^w9h zrUUCWFzt$i!@dbHvV%IB;#)R(82YUqdrG?6BgmL6+;VW3q*xJs#oK&?KGjIDuy&LM z>$H&HO$#ZDI=_Aw%P)1FMdwMg8s2dYB{cL^CqcAXM=J~C3EVk({{E02n@Rn=7a9cP zRnh3;ax4qijL+(&zxqR;15q@j*{TMaA?jh&IHIjKp)*k`qQE~doSk8FG1YmH#P$w$ zA9cS-j+W!5?=MP0(mrMV%GnLGd_~+$ByLdXB60dGW`F}Uw{?XM^lQ2cH(rzhzA^Fi zoAf=G9v$z|PL00KxGlkq$qYvm-yhNoftZmJtk_vEm!NA>3u4+2BosS;Z$LWx>V_t4 zm6k6N2HDr=dQWSzs;BRI-K>xE*A(6O+@k0E>;CWk6Y;Nlsv`3}opc|+y1x0!%zB9? zHOeVt(9MCi_;V zR#&Eft;{g5&fQ#{zq`5^vbywm^>yFs%IfM`|F6|`=C#e6Yuk6%c0<f7JH-mc>EKV4l1Tdb2i)X|c)qaFe@Wled49*5WmP1C09j zrl|au_-{H9i!G^wEg7oi8~t1Izqb@vwiV^KmHQctbhpt3+ZxBTnXG^sOQa^tj-LFE zzQvB=!<~xRZR3J%5a=%gBoV>ixN7d;_5U=|`bTipGDL2xE@Vdx%%?Ed#`W_4#Z@a* zz2vGn|HW04_&Zn4;F7C0+V)QZWcvS*s}@SayZ1M)8fVR3NrL3T-?(b&hEDtcD_8BH zsw~s#pt`E!U$|<2MOwUvb*+m|hxMJieCB0pqJU0Re69p~_kS(7j9PHj*+%<+jBo#bczovmnS&iT-@LM9iBoo;CkJO)S zr{5k^X}wu_wd~nTr|GnJ8EGVed&+ErDcgEU4Ym7iuDx6E#xBJl=E?V7`IXgN9}CRy z;4(fx@(!~*!!=yff2M5ozF~8RaL0}I!1UYkbuOYrZw{V(qHCNy7NU*6&})xe=Es_7 z(Q#*l6a02OB*hmY%1754IoFSVS?HgB(2QvLp|X5YXfk(4PtAO@cT#=ekt7f6qsfW^ z<}NVy?RoCUk7|PyrcKf_Jw+rp#s}wY?O64lElJhTLr`9OKi|9}a-&NEWcNv=a023? zKKE0G*C$a@Q^iz%<4;+BoJ1>JDFH5`(Zg&Er!i=)5@^==Uj#_qgc5iqdW6^XG|qUc zgr;MBL@@9)-ttQ6b5ZWm4uz%!2dz?uSL36SeBOyI#YvfLyT$^G6az?M%= zN;A|MHSV5FiM!5hr7udD4iZl;T~m-r$x?e==9_+$X{3wo&^oT;TH{00ezsPR%ElrJ zkmEcEMUdO9J1d_16?fJgI?N@M%YILhFk6zKGarP=J3*@&@}wBZxFA5bhIBwGC7}oO z9##vj<=_vO1&>~(G9gqlS^O z#?S}W2&&|INAohH1&EtpR({qeROfz!q8;iF%VuLMK0@mNAbKg-G}Q55hYuYb>|>OMCq09hYH8t z{K%s=UiEsKtEH)sQ8st32eRfiK=iF}rfUfOQY!+n!$r;si70;&eg~dc3v=Bx{`DdC zF8ANmcs`J?L*9%RaHXzzv)Y|Vk@=Q-{$sp41Ay<``aM;ua+)<$e-^275VcYuyo1zC!;uCc$9l9L446+ zD^Y5)uwf0twG{iZYGkHV(~My`8EhxxbyJtID(U51LR(Bg1<(t{Y$W%KmLa zWw%AUa;ei+DFY%iwAT* z?J9g4_f#|n@J}T9X2DIdaWI}~L&`n)zRGM4yw~*beaCwD2&$6?ub0xgUGW$B)7h-! z_z(H>uL;%P7XG0>mgL!=2{lzlNl5E*GMMr`&ckm?P|m!T%I2N>AMz(hH%)Dr*SjkIRx zkkZRyOb^&;NJXS7X1`x& zjxhKv2Vs=YI2x1w{WD;6J{Y*m6R-E{N-;Hok)p&|EC>5ecua%7^#GPGp4}oxo#>Pc z`Q;Y}c8{J#mtQLN95bU`sHsRuvou&RW6fC?bo-`KlRR!%`gJmLOhE~vHc?$f#XeBfw^AJDZs0&-j;ayYPO*QP1 zCsJRWyb6pCRq|Cq!0Jjbj}%9Cq`Xp9O-q#oc^)fUaHVGdVHEGfQ*H_iI8Wqr3Js}O z1FXDi>=bh)yHB>e-e2mI(Fj=cq&Ai!J?48Hm%6&v7ISlkDq#hEd^N3z=%-sf!MmZa zH@WM7rn&*?XrVlB?GaX?+_?v-td!zo9=R~Nb>x6>eE5_%8#tO;l(rSz{Cq2c9ogf3 z-=;zBqWXZjJQW7ww(hJ{Z9kdg-2Y52RXNA|P@@s&l%qESe3MZ*D8{f zxTc^fEUNsar}INCdjL+`3*PQGR^B>C2NE+vkl7me9Rvt$$L@N zlp*v_2cNJ_rnieHJbEcHuo>0SbJf%1p1EGs#O|;&BafgfSINC-f+Z}hzdVugMcO0-BmKaD2*#hAn|%G5)9 zI5p+>2?A5mbiXZI#o5X6JJZdX9ak86yuUxQq-x0?)7lly`#$BM(~|pYYFD!7`^9sQ zq?Y`5TJL1ue4qB8ZYlUS^-li$`-@Pj)*@2vJw?VJGch`?CA81?RAql?7(5iua`YKX zTfdq`+{d}}BT6JnqrQgCkjqWrE^vFyD+Q3SRoW$SD!ghd;DdwL*O|OF*FZ***pnH# z?LO68W_WV@nGf3Z>gL7Oi1FLbukCccGvx)E%*|v1@y>~mT;bs~+_d`9SIJR>WBxZF zCyq{pm|I@@8}_oe_U`%!m#Dq>O9e_zju*x$jS7BiQ-_KhPNp$Am0@f za2}aOy<9?L=pMW!L={~|LB32+#69PhuM2wl!bI_ojEBK<(i`J-In;BTIddb z#<(9kBcRvYx21N-Yf{9J1oe(8E9Evf>cR{wgc=tS3d^+x-D#!G9-R9nqmVJZqeS>I zJ=l&BYz($;m6+}x&^TalG zuLYgZ$E+C&zn5-%sozju+MqGX(IOtIeGBScl3AAfd^=Um=@ldQ?*xkrF9buiVd5>G zsxPg|4s_1IOT935T;`Lx50J)dYTqbMe<>{@V81>^I(54}CW!L83I4CAx}!m1$AWOOY4kem)$coTF- zg+M$8*dYq%WrwclMm|ERWW;DAP6Hc_fR-5`jtdxh8h!->VWxoqErE<8L02{sAy{Xa z2&!a`j7%i1)|Ohi-J1v(ER73!TeH0GmH_FVFDV+D?iYU>ubMO$PmCfSZ}Hul1M0m3Z{52O%u15rm zYQ*d8AbG1ShQXj}3CPbI*(6qpMOG?zxdDdZ46x?|PJ|gd#usy{2xr9+7J;B5a_%h< zWo7uJI+SS-2o7+DUCa{4by0f`=6Bmdm$PA*nb4I`Ij3ddEqPu64os+G);|H&UNS)p z=0WgEVG}?q2AaG? z7qtusIs%buz|E&MlX%w}7@wFNZ!8ey1c3PJks@WK?XbBp64Jq@vhPrp+_Ed!%Z8m4c(#u4 zJlLfbVl+-&x(EE^#`O&67P0X;zvHnhN_JWT^a%KhU-N3rc&CRAE58-Tf9KlR?+esNHU`h8t3*I*9&Z@2Uvm^T*Y0odI)m%7m}z4&&rcW9e`Db&&S}j0a`RCUAXt zfqzd2rB%DEm`<-E9&9DsVcWhSsk0i9`iQR!ZvqvWhg`R(Ny>vVBX|X$@`td43TsOq z`fE8cLTkq3Dwk_M8)Ae+K=#N^?b$}6OQ7dzNe*#oy)o=gPe|v2w>_lu+D1F_w2nT! zz7o?hP+_N$29{HmFs$u-Ng#&ggcml+)^lht zXZV_aFOTJUIlk4%ZJ3XPy11ixwm;TWI)?|I=iF0*@7re_U@1vzm+iPI@+X`N7>gYv1Dc!O3Jb7`ERP3t)WYu#YzA}>z& z+WXuhez~V?*k1AAryQVusotkjR@HL7PfM(=_8vNG!SbJX)I-lNXp zOm-}EG&#h1EU1Yy*QXG?dbJ;{1_njK^|DFZJ@kKUQv6Ggfg41}CzKSVzPFoQ)Nr%H%qO+~|8J^== zt`^W<|HoIfsLc1O^mX??Eg=7(Ea3n1w7U7LLHmmDpDf_Nl~xO-)&Jx>836yu0?4?g zEa4P4%va&$v73J^AiW%SiLG2tN16QOILxjDU1kBuESHZH+?91OD4`=N6ijba{&7nD zRX)OuYQyEy0`hHz%TS(F;PcFHN3B0;_49&hjeqqOr7~#$es(~MY&}w_20A*jmNZK*FyiK)&DJDk>HQLvMjeBm%gHg z9|v_E$3G66#strgT3@-Hzwdn4@W1$q3T=H()qf@a{5W;v!_QAMYJYr1M()49v=`T> zd|WajJB?-rT0=JhWkHp1e0qqIuY1n^!6W*Z;r?{%eDV&33ZO~(oc+U#iwlBnn87ja z03l5jA<5^I*Zh)Cz@iRVshB-3&+#b@CL9Ywfx? z>0u@YnS=&VvtNNP8^{o{x_q^(8llaAwkNJ7WQW)l{mK+ceE$egh{L?GNEguCnx-&< zmo2=0@66<~tg1XUIYyx~pWCC`m75rriob$8g+K9AcTQ_2Y^nHQ=0YCzL7VgqrI{*5 zoL|3>3e&4=K@yqAKET(eCv0toEGNFx27GZXft+va)lZoorL}wkgs}>zEDL-nIzD7( z)3x`LA{v4p;H@fmIf8Ykg%CIAUx=R8y&9^1?gGqnFB}QqXB_Bx`FzULT0HOGR;%*_ z|Ks2{%TvYTwWAtowARen+J~QT>8;>#LvNrD?NiQwXu~lUCAsBI#dLDp#PtA>r8TNY9ao zQaE7fI)=TE!LsDM^A$XX91}s@vrn#NxJZI(FSgJ95@EzYb)GlUNP@CRar2+9)29cT z=<(4HSUh7-|Ngm7#q#BT6Neym z^`!i!uO~!6X!nS5(C8wpc_3Zk#CVZ0<`Lysb zrFOz!NaHz`(*N3IvD$mGS&EpFMSfK2)Af|Te^l~klf}~Zobw6qmc}+ZORD`;-e?L+ zSakMOwk9r#2ea5PP1rW@z9yN^(~x+~pixeA7#D&qyS@sJeS-E%&3*tG^Yu~3vFfou zX1c~IwqNBkz?q)p$;Nx>I>RzGaJ6kRe2N?Ddjhe|Q2)NIv|@w@xp5}eo9qAf(CaoU zh;Sps*(v#(XqBbtA_jWL#m+^aTbiZ`tLcyP!C=p0ffS+M-iqqb^=uKzk$f6Qd*yC& zh%G1aV@Agc!4bzsj3PMYtGGs=B>Dm%4HTB>EUSF{(Ik~kX2+CrV0R?HL@NWVU*t8( zC97?t78~)Bl^`CBii*vPRczI+)zvuT+$fJ<2?kdY!dU1xiEO)EdLHzJ|I zOMoecH_L18My?&_HCHm@upiK{{&{_lzCF~C;hkY!t!gE!ecSew+5i>_J(0)cubd1h zwj_2dgmQ|^E7a#}bH50_A0XHF)-%jq7_L!U-Zha}Fbp^5r!e*B;8GVAziVGxMs(RD zYiN5lM_|Yi_Lwh+V1Qm5sAwP)sj=p&1tw&Wc&WiU1#wy7q;=aX(5)l8LLa(uy+uue zaVL9!a-*j)Ut60($ZhWPq^Mq`8giORv%30pzftp=VWVKJ(+%n3Qz~)g?Rad65{wn9 zJt}A0gKv4HQNK9|+ihEX?xw^a#CFUU5mI3nqt>Rm_A!^XNb2!x7t>nJ>U1CT0Jw|) zjm=duL4Edi3C?Pnxz}rUl9e;&lw<*K

    Sjp1fO~3x-V1Tn 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

    dvbtB>lKxUWrJgQh%yW{0<;wnf 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

1P8j~TwTCc!&PN5{6W={T{xR*gMJ#stX1NB8q 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